)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"9a28d926c45b3736340f75782c6a0075df900e89","unresolved":true,"context_lines":[{"line_number":4,"context_line":"Commit:     aitassou \u003clhoussain.ait-assou@ovhcloud.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2025-07-10 16:45:51 +0200"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Add new backend for new encoding matrix"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"When parity is higher than 5, the decoding matrix is not invertible"},{"line_number":10,"context_line":"for some combinations of missing data and parity."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":5,"id":"ce98f24f_965f096f","line":7,"range":{"start_line":7,"start_character":0,"end_line":7,"end_character":39},"updated":"2025-07-10 23:58:16.000000000","message":"Better as\n```\nAdd new ISA-L backend with new encoding matrix\n```","commit_id":"da39eaf82dc1dc6a9af05a8164e7bf7c94b0dcac"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"255412ab4b96f129c14fabfa534b94c9fb85f6bb","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     aitassou \u003clhoussain.ait-assou@ovhcloud.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2025-07-10 16:45:51 +0200"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Add new backend for new encoding matrix"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"When parity is higher than 5, the decoding matrix is not invertible"},{"line_number":10,"context_line":"for some combinations of missing data and parity."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":5,"id":"3f84b1a9_6c76c11d","line":7,"range":{"start_line":7,"start_character":0,"end_line":7,"end_character":39},"in_reply_to":"ce98f24f_965f096f","updated":"2025-07-29 23:32:11.000000000","message":"Done","commit_id":"da39eaf82dc1dc6a9af05a8164e7bf7c94b0dcac"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"9a28d926c45b3736340f75782c6a0075df900e89","unresolved":true,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Add new backend for new encoding matrix"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"When parity is higher than 5, the decoding matrix is not invertible"},{"line_number":10,"context_line":"for some combinations of missing data and parity."},{"line_number":11,"context_line":"Add new backend with modified gen matrix that is suited when parity \u003e\u003d 5"},{"line_number":12,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":5,"id":"0d543c73_e78a63d0","line":9,"range":{"start_line":9,"start_character":30,"end_line":9,"end_character":67},"updated":"2025-07-10 23:58:16.000000000","message":"\"the rs_vand decoding matrix...\" -- again, a rs_cauchy matrix will be fine, right?","commit_id":"da39eaf82dc1dc6a9af05a8164e7bf7c94b0dcac"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"255412ab4b96f129c14fabfa534b94c9fb85f6bb","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Add new backend for new encoding matrix"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"When parity is higher than 5, the decoding matrix is not invertible"},{"line_number":10,"context_line":"for some combinations of missing data and parity."},{"line_number":11,"context_line":"Add new backend with modified gen matrix that is suited when parity \u003e\u003d 5"},{"line_number":12,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":5,"id":"35bd0c25_5698b3ae","line":9,"range":{"start_line":9,"start_character":30,"end_line":9,"end_character":67},"in_reply_to":"0d543c73_e78a63d0","updated":"2025-07-29 23:32:11.000000000","message":"Done","commit_id":"da39eaf82dc1dc6a9af05a8164e7bf7c94b0dcac"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"9a28d926c45b3736340f75782c6a0075df900e89","unresolved":true,"context_lines":[{"line_number":11,"context_line":"Add new backend with modified gen matrix that is suited when parity \u003e\u003d 5"},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"Related-Bug: #1639691"},{"line_number":14,"context_line":"Related-Bug: #2116097"},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"Co-Authored-By: Tim Burke \u003ctim.burke@gmail.com\u003e"},{"line_number":17,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":5,"id":"c033766f_f171ca80","line":14,"range":{"start_line":14,"start_character":0,"end_line":14,"end_character":21},"updated":"2025-07-10 23:58:16.000000000","message":"This feels like a duplicate of https://bugs.launchpad.net/liberasurecode/+bug/1639691 -- or should we rephrase it as a feature request?","commit_id":"da39eaf82dc1dc6a9af05a8164e7bf7c94b0dcac"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"255412ab4b96f129c14fabfa534b94c9fb85f6bb","unresolved":false,"context_lines":[{"line_number":11,"context_line":"Add new backend with modified gen matrix that is suited when parity \u003e\u003d 5"},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"Related-Bug: #1639691"},{"line_number":14,"context_line":"Related-Bug: #2116097"},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"Co-Authored-By: Tim Burke \u003ctim.burke@gmail.com\u003e"},{"line_number":17,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":5,"id":"e6370ff3_7683cf53","line":14,"range":{"start_line":14,"start_character":0,"end_line":14,"end_character":21},"in_reply_to":"c033766f_f171ca80","updated":"2025-07-29 23:32:11.000000000","message":"Done","commit_id":"da39eaf82dc1dc6a9af05a8164e7bf7c94b0dcac"}],"/PATCHSET_LEVEL":[{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"cb8d96ed9f50f56dea47e8fcb4267f34120b5620","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"1da1ad9e_ebc894b4","updated":"2025-07-07 20:44:50.000000000","message":"Correct me if I\u0027m wrong, but it looks like we\u0027re more or less inlining ISA-L\u0027s `gf_gen_rs_matrix` -- what about `gf_gen_cauchy1_matrix`? How will this work for users needing `isa_l_rs_cauchy` backends?\n\nTaking a step back, why should we do this ourselves? Why *shouldn\u0027t* we let ISA-L be in charge of building its own encoding tables? What\u0027s the gain in doing it on our side?","commit_id":"0cb693debd4258069c85e7a767287d3c24e1cea6"},{"author":{"_account_id":38169,"name":"Lhoussain AIT ASSOU","display_name":"aitassou","email":"lhoussain.ait-assou@ovhcloud.com","username":"aitassou"},"change_message_id":"daf1f449e5db47145dd52cc300bd1bbce10d6c4e","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":1,"id":"75a66cac_da7bf995","in_reply_to":"1da1ad9e_ebc894b4","updated":"2025-07-08 08:17:44.000000000","message":"Right, this is a concern with lib-isal encoding matrix, this occurs when parity is higher than 5. I created an issue as we have problem with RS(7,5).\nI proposed a first step but I would like to get advice for best practice (add a compile flag to choose beteween own gf_gen_rs_matrix) in order to have a no break change for users who use isa_l_rs_vand with m \u003c\u003d 4 or other backends.","commit_id":"0cb693debd4258069c85e7a767287d3c24e1cea6"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"255412ab4b96f129c14fabfa534b94c9fb85f6bb","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"50f77f96_bd978c3e","in_reply_to":"75a66cac_da7bf995","updated":"2025-07-29 23:32:11.000000000","message":"Acknowledged","commit_id":"0cb693debd4258069c85e7a767287d3c24e1cea6"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"911b14cca3eb09a308868e7d332d910c6cd34f73","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"2082d9b0_5a67bc9c","updated":"2025-07-08 20:31:20.000000000","message":"\u003e would like to get advice for best practice (add a compile flag to choose between own gf_gen_rs_matrix)\n\nI think offering this encoding matrix as a separate backend would probably be best -- similar to how callers today can choose between rs_vand or rs_cauchy.\n\nI wonder whether ISA-L would be amenable to having a third `gf_gen_*_matrix` implementation... that would certainly simplify the changes *here*. OTOH, we already have fairly deep knowledge of how ISA-L does what it does, and even provide out own backend; what\u0027s a little more math?\n\nI think the biggest reason to check in with them, though, is that I\u0027d trust their review more than my own for something so in the guts of encoding...\n\n\u003e in order to have a no break change for users who use isa_l_rs_vand with m \u003c\u003d 4 or other backends\n\nThat **is** my biggest concern; thanks for seeing that, too 😊","commit_id":"9245a4b84de3b30da9af16ee481501d30715b07e"},{"author":{"_account_id":38169,"name":"Lhoussain AIT ASSOU","display_name":"aitassou","email":"lhoussain.ait-assou@ovhcloud.com","username":"aitassou"},"change_message_id":"ef8b62707aab0baf6549089ce62c2ad3309675c2","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":2,"id":"8258d933_b18ff3e6","in_reply_to":"2082d9b0_5a67bc9c","updated":"2025-07-09 19:26:35.000000000","message":"sounds good, the best way was to have modification on libisal, however I would also like a compile FLAG (-DUSE_OWN_ENCODING_MATRIX) that is disabled by default and that we could use intentionally on our side.","commit_id":"9245a4b84de3b30da9af16ee481501d30715b07e"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"f8dbc9c6b2bd027ea9a027829116f72bebf2be18","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"90fea460_7b45b889","updated":"2025-07-09 23:49:50.000000000","message":"I took a stab at [implementing this as a new backend](https://review.opendev.org/c/openstack/liberasurecode/+/954549); feel free to squash it in if you like it. I\u0027m still open to suggestions on the name, but went with `EC_BACKEND_ISA_L_RS_VAND_INV` for the fact that we\u0027re actually using Vandermonde invertiblity.","commit_id":"305cef3c634e27c08fe01f83fa9f87ba0004fa70"},{"author":{"_account_id":38169,"name":"Lhoussain AIT ASSOU","display_name":"aitassou","email":"lhoussain.ait-assou@ovhcloud.com","username":"aitassou"},"change_message_id":"aaa058e7be2368f133d8c28312d04508b1df216b","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"0fcef4c3_e21869b9","in_reply_to":"90fea460_7b45b889","updated":"2025-07-10 08:45:29.000000000","message":"Thank you! I will work on it","commit_id":"305cef3c634e27c08fe01f83fa9f87ba0004fa70"},{"author":{"_account_id":7233,"name":"Matthew Oliver","email":"matt@oliver.net.au","username":"mattoliverau"},"change_message_id":"e807ede43d7c726e086cfb673b51f8d129255957","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":5,"id":"f3d0dd3f_fea14af4","updated":"2025-07-16 06:51:26.000000000","message":"oh nice, need to look at this a little closer and maybe test it out.. but nice one!\n\nOnce this lands I\u0027d love a warning in pyeclib or swift (when it\u0027s intergrated there) to warn when defining a isa_l_vs_rand with more then 5 parity.","commit_id":"da39eaf82dc1dc6a9af05a8164e7bf7c94b0dcac"},{"author":{"_account_id":38169,"name":"Lhoussain AIT ASSOU","display_name":"aitassou","email":"lhoussain.ait-assou@ovhcloud.com","username":"aitassou"},"change_message_id":"788c3819420dca0ed4e32cc96d823354a2edad3c","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":5,"id":"0f676d7c_92071c63","in_reply_to":"f3d0dd3f_fea14af4","updated":"2025-07-29 12:08:37.000000000","message":"Sounds good! a clear message on python side.","commit_id":"da39eaf82dc1dc6a9af05a8164e7bf7c94b0dcac"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"255412ab4b96f129c14fabfa534b94c9fb85f6bb","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":6,"id":"aab507d9_81cc2e31","updated":"2025-07-29 23:32:11.000000000","message":"I pushed up https://review.opendev.org/c/openstack/pyeclib/+/956109 for the pyeclib side.\n\nCherry picked https://review.opendev.org/c/openstack/pyeclib/+/953041 on top to verify that, yep, the new backend has performance comparable to the other ISA-L backends.\n\nCherry picked https://review.opendev.org/c/openstack/pyeclib/+/956106 on top, too -- verified every combination from of `k` and `m` between 1 and 14 each. (Doing much more seemed time consuming; this was already 155M+ scenarios, but I could do it locally without much trouble in a day.)\n\nMight see if I can talk Matt into taking a look, too, and shop around the new name a little more.","commit_id":"5d25e4a663f30ef221a00a22ed23cb2ed23fefa4"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"5dad1b2d68ed25191fb7077872bd87ea9086a7b1","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":6,"id":"dd53dd71_81d437d8","updated":"2025-08-08 01:58:55.000000000","message":"Nobody\u0027s come up with a better name; let\u0027s merge it!","commit_id":"5d25e4a663f30ef221a00a22ed23cb2ed23fefa4"},{"author":{"_account_id":7233,"name":"Matthew Oliver","email":"matt@oliver.net.au","username":"mattoliverau"},"change_message_id":"057310b97e54665d3f48774504000e129c6d4855","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":6,"id":"ffba3a6c_5c5817d0","updated":"2025-07-31 06:39:56.000000000","message":"OK, I\u0027ve had a play with this in pyeclib (using your patch of there @tburke@nvidia.com).\n\nReworked Kota\u0027s code in the bug to work with py3 and sure enough it can still fail with rs_rand but works great with rs_vand_inv.\n\nIdeally we\u0027d just get people using this instead of rs_vand so it works for all parity numbers.. but it\u0027s obviously not backwards compatible. It would be cool if it was, then we could just replace the old rs_vand with this. So this does make naming hard.\n\nWe probably want to mark the old rs_vand as legecy or deprecated (not that we\u0027ll drop support for it anytime soon if ever). Eitherway, this makes naming hard. Need to think about this some more... but it\u0027s also the only real reason I\u0027m blocking on a +2.. so great work!\n\nAs a side note, it\u0027ll probably be good to update the docs, not that we have too much. Looking at it we haven\u0027t updated it in a while, it doesn\u0027t even have vs_cauchy in the code layout. So I\u0027m to stressed here... I might push up a follow up for it.\n\nOne last thing, as a heads up for any other reviewer, I was having trouble building this (and master) on my newer laptop. I was getting:\n\n```\nIn function \u0027init_alg_sig_w16\u0027,\n    inlined from \u0027init_alg_sig\u0027 at utils/chksum/alg_sig.c:242:12:\nutils/chksum/alg_sig.c:201:21: error: \u0027*alg_sig_handle.tbl1_l\u0027 may be used uninitialized [-Werror\u003dmaybe-uninitialized]\n  201 |       alg_sig_handle-\u003etbl1_l[i] \u003d alg_sig_handle-\u003emult_routines.galois_single_multiply((unsigned short) (i \u003c\u003c 8), alpha, w);\n      |       ~~~~~~~~~~~~~~^~~~~~~~\ncc1: all warnings being treated as errors\nmake[2]: *** [Makefile:734: utils/chksum/liberasurecode_la-alg_sig.lo] Error 1\n```\n\nWhich has nothing to do with this patch.. so I might push up another patch to at least wrap that so it\u0027ll always be initialised (already wrote the code to fix that to test this).","commit_id":"5d25e4a663f30ef221a00a22ed23cb2ed23fefa4"},{"author":{"_account_id":38169,"name":"Lhoussain AIT ASSOU","display_name":"aitassou","email":"lhoussain.ait-assou@ovhcloud.com","username":"aitassou"},"change_message_id":"d97152d5483e236978a01e0eafa5a0e0c39626cb","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":6,"id":"ca920389_991704ce","in_reply_to":"ffba3a6c_5c5817d0","updated":"2025-07-31 08:51:06.000000000","message":"Thanks for feedback, testing and enhancements.","commit_id":"5d25e4a663f30ef221a00a22ed23cb2ed23fefa4"}],"src/backends/isa-l/isa_l_common.c":[{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"911b14cca3eb09a308868e7d332d910c6cd34f73","unresolved":true,"context_lines":[{"line_number":449,"context_line":"}"},{"line_number":450,"context_line":""},{"line_number":451,"context_line":"static void gen_encoding_matrix(isa_l_descriptor * desc, int n, int k){"},{"line_number":452,"context_line":"     unsigned char *tmp \u003d malloc(sizeof(char) * n * k);"},{"line_number":453,"context_line":""},{"line_number":454,"context_line":""},{"line_number":455,"context_line":"    int i, j;"}],"source_content_type":"text/x-csrc","patch_set":2,"id":"7be36038_c620d6ca","line":452,"updated":"2025-07-08 20:31:20.000000000","message":"These `malloc`s should have `NULL` checks on the return values.","commit_id":"9245a4b84de3b30da9af16ee481501d30715b07e"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"255412ab4b96f129c14fabfa534b94c9fb85f6bb","unresolved":false,"context_lines":[{"line_number":449,"context_line":"}"},{"line_number":450,"context_line":""},{"line_number":451,"context_line":"static void gen_encoding_matrix(isa_l_descriptor * desc, int n, int k){"},{"line_number":452,"context_line":"     unsigned char *tmp \u003d malloc(sizeof(char) * n * k);"},{"line_number":453,"context_line":""},{"line_number":454,"context_line":""},{"line_number":455,"context_line":"    int i, j;"}],"source_content_type":"text/x-csrc","patch_set":2,"id":"9af63a51_8ae39d5b","line":452,"in_reply_to":"7be36038_c620d6ca","updated":"2025-07-29 23:32:11.000000000","message":"Done","commit_id":"9245a4b84de3b30da9af16ee481501d30715b07e"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"911b14cca3eb09a308868e7d332d910c6cd34f73","unresolved":true,"context_lines":[{"line_number":463,"context_line":"                p \u003d desc-\u003egf_mul(p, gen);"},{"line_number":464,"context_line":"        }"},{"line_number":465,"context_line":"        gen \u003d desc-\u003egf_mul(gen, 2);"},{"line_number":466,"context_line":"    }"},{"line_number":467,"context_line":""},{"line_number":468,"context_line":"    // inv k*k matrix"},{"line_number":469,"context_line":"    unsigned char * tmp_inv_k \u003d malloc(sizeof(char) * k * k);"}],"source_content_type":"text/x-csrc","patch_set":2,"id":"24a3137a_8d0b318e","line":466,"updated":"2025-07-08 20:31:20.000000000","message":"OK, so `tmp` will be a table of `(2 ** i) ** j` kinda (but not really) like\n```\n   |\u003c---- k ----\u003e|\n---  1   2   4 ...\n ^   1   4  16 ...\n |   1   8  64 ...\n n   1  16 256 ...\n |   1   .   .\n v   1   .     .\n---  1   .       .\n```","commit_id":"9245a4b84de3b30da9af16ee481501d30715b07e"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"255412ab4b96f129c14fabfa534b94c9fb85f6bb","unresolved":false,"context_lines":[{"line_number":463,"context_line":"                p \u003d desc-\u003egf_mul(p, gen);"},{"line_number":464,"context_line":"        }"},{"line_number":465,"context_line":"        gen \u003d desc-\u003egf_mul(gen, 2);"},{"line_number":466,"context_line":"    }"},{"line_number":467,"context_line":""},{"line_number":468,"context_line":"    // inv k*k matrix"},{"line_number":469,"context_line":"    unsigned char * tmp_inv_k \u003d malloc(sizeof(char) * k * k);"}],"source_content_type":"text/x-csrc","patch_set":2,"id":"de23aefd_12444ed1","line":466,"in_reply_to":"24a3137a_8d0b318e","updated":"2025-07-29 23:32:11.000000000","message":"Acknowledged","commit_id":"9245a4b84de3b30da9af16ee481501d30715b07e"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"911b14cca3eb09a308868e7d332d910c6cd34f73","unresolved":true,"context_lines":[{"line_number":467,"context_line":""},{"line_number":468,"context_line":"    // inv k*k matrix"},{"line_number":469,"context_line":"    unsigned char * tmp_inv_k \u003d malloc(sizeof(char) * k * k);"},{"line_number":470,"context_line":"    desc-\u003egf_invert_matrix(tmp, tmp_inv_k, k);"},{"line_number":471,"context_line":""},{"line_number":472,"context_line":""},{"line_number":473,"context_line":"    unsigned char * multiplied \u003d malloc(sizeof(char) * (n-k) * k);"}],"source_content_type":"text/x-csrc","patch_set":2,"id":"15c5ab4b_e61463b3","line":470,"updated":"2025-07-08 20:31:20.000000000","message":"Then we invert the `k ✕ k` submatrix... and we know `k \u003c n` because `n :\u003d k + m`.\n\nBut, no return check? Isn\u0027t that how we got into this mess? Even if it\u0027s constructed such that it\u0027s *always* invertible, I\u0027d feel a whole lot better having that check here.","commit_id":"9245a4b84de3b30da9af16ee481501d30715b07e"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"255412ab4b96f129c14fabfa534b94c9fb85f6bb","unresolved":false,"context_lines":[{"line_number":467,"context_line":""},{"line_number":468,"context_line":"    // inv k*k matrix"},{"line_number":469,"context_line":"    unsigned char * tmp_inv_k \u003d malloc(sizeof(char) * k * k);"},{"line_number":470,"context_line":"    desc-\u003egf_invert_matrix(tmp, tmp_inv_k, k);"},{"line_number":471,"context_line":""},{"line_number":472,"context_line":""},{"line_number":473,"context_line":"    unsigned char * multiplied \u003d malloc(sizeof(char) * (n-k) * k);"}],"source_content_type":"text/x-csrc","patch_set":2,"id":"c31828e4_25bc0faa","line":470,"in_reply_to":"15c5ab4b_e61463b3","updated":"2025-07-29 23:32:11.000000000","message":"Done","commit_id":"9245a4b84de3b30da9af16ee481501d30715b07e"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"911b14cca3eb09a308868e7d332d910c6cd34f73","unresolved":false,"context_lines":[{"line_number":475,"context_line":"    for (i \u003d k; i \u003c n; i++) {"},{"line_number":476,"context_line":"    for (j \u003d 0; j \u003c k; j++) {"},{"line_number":477,"context_line":"        p \u003d 0;"},{"line_number":478,"context_line":"        for (int u \u003d 0; u \u003c k; u++) {"},{"line_number":479,"context_line":"            p ^\u003d desc-\u003egf_mul(tmp[(i*k)+u], tmp_inv_k[(u*k)+j]);"},{"line_number":480,"context_line":"        }"},{"line_number":481,"context_line":"        multiplied[((i-k)*k)+j] \u003d p;"}],"source_content_type":"text/x-csrc","patch_set":2,"id":"24660123_448ab09d","line":478,"updated":"2025-07-08 20:31:20.000000000","message":"I don\u0027t *love* `O(n**3)` runtimes, but at least the `n` will be small. Probably wouldn\u0027t be a problem even if [we increase `EC_MAX_FRAGMENTS`](https://review.opendev.org/c/openstack/liberasurecode/+/650474) (not that I\u0027m in any rush to do so, clearly).","commit_id":"9245a4b84de3b30da9af16ee481501d30715b07e"},{"author":{"_account_id":38169,"name":"Lhoussain AIT ASSOU","display_name":"aitassou","email":"lhoussain.ait-assou@ovhcloud.com","username":"aitassou"},"change_message_id":"aaa058e7be2368f133d8c28312d04508b1df216b","unresolved":true,"context_lines":[{"line_number":475,"context_line":"    for (i \u003d k; i \u003c n; i++) {"},{"line_number":476,"context_line":"    for (j \u003d 0; j \u003c k; j++) {"},{"line_number":477,"context_line":"        p \u003d 0;"},{"line_number":478,"context_line":"        for (int u \u003d 0; u \u003c k; u++) {"},{"line_number":479,"context_line":"            p ^\u003d desc-\u003egf_mul(tmp[(i*k)+u], tmp_inv_k[(u*k)+j]);"},{"line_number":480,"context_line":"        }"},{"line_number":481,"context_line":"        multiplied[((i-k)*k)+j] \u003d p;"}],"source_content_type":"text/x-csrc","patch_set":2,"id":"3730655e_fd4ff5a2","line":478,"in_reply_to":"24660123_448ab09d","updated":"2025-07-10 08:45:29.000000000","message":"Right, this init is not done several times but agree with concept","commit_id":"9245a4b84de3b30da9af16ee481501d30715b07e"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"255412ab4b96f129c14fabfa534b94c9fb85f6bb","unresolved":false,"context_lines":[{"line_number":475,"context_line":"    for (i \u003d k; i \u003c n; i++) {"},{"line_number":476,"context_line":"    for (j \u003d 0; j \u003c k; j++) {"},{"line_number":477,"context_line":"        p \u003d 0;"},{"line_number":478,"context_line":"        for (int u \u003d 0; u \u003c k; u++) {"},{"line_number":479,"context_line":"            p ^\u003d desc-\u003egf_mul(tmp[(i*k)+u], tmp_inv_k[(u*k)+j]);"},{"line_number":480,"context_line":"        }"},{"line_number":481,"context_line":"        multiplied[((i-k)*k)+j] \u003d p;"}],"source_content_type":"text/x-csrc","patch_set":2,"id":"d343bf25_942a413c","line":478,"in_reply_to":"3730655e_fd4ff5a2","updated":"2025-07-29 23:32:11.000000000","message":"Acknowledged","commit_id":"9245a4b84de3b30da9af16ee481501d30715b07e"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"911b14cca3eb09a308868e7d332d910c6cd34f73","unresolved":true,"context_lines":[{"line_number":476,"context_line":"    for (j \u003d 0; j \u003c k; j++) {"},{"line_number":477,"context_line":"        p \u003d 0;"},{"line_number":478,"context_line":"        for (int u \u003d 0; u \u003c k; u++) {"},{"line_number":479,"context_line":"            p ^\u003d desc-\u003egf_mul(tmp[(i*k)+u], tmp_inv_k[(u*k)+j]);"},{"line_number":480,"context_line":"        }"},{"line_number":481,"context_line":"        multiplied[((i-k)*k)+j] \u003d p;"},{"line_number":482,"context_line":"    }"}],"source_content_type":"text/x-csrc","patch_set":2,"id":"a6b1aa45_30f8f056","line":479,"updated":"2025-07-08 20:31:20.000000000","message":"OK, so this only uses the last `n-k` rows of `tmp`, but we needed to compute the whole thing because we wanted to invert the first `k` rows...\n\nWhat about when `2*k \u003c n` (ie, `k \u003c m`, so more parity than data)? Eh, I suppose it\u0027s probably not worth trying to optimize that out unless/until we see it\u0027s really a problem.","commit_id":"9245a4b84de3b30da9af16ee481501d30715b07e"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"255412ab4b96f129c14fabfa534b94c9fb85f6bb","unresolved":false,"context_lines":[{"line_number":476,"context_line":"    for (j \u003d 0; j \u003c k; j++) {"},{"line_number":477,"context_line":"        p \u003d 0;"},{"line_number":478,"context_line":"        for (int u \u003d 0; u \u003c k; u++) {"},{"line_number":479,"context_line":"            p ^\u003d desc-\u003egf_mul(tmp[(i*k)+u], tmp_inv_k[(u*k)+j]);"},{"line_number":480,"context_line":"        }"},{"line_number":481,"context_line":"        multiplied[((i-k)*k)+j] \u003d p;"},{"line_number":482,"context_line":"    }"}],"source_content_type":"text/x-csrc","patch_set":2,"id":"19bdcec1_842640da","line":479,"in_reply_to":"9d8be429_61205e97","updated":"2025-07-29 23:32:11.000000000","message":"Acknowledged","commit_id":"9245a4b84de3b30da9af16ee481501d30715b07e"},{"author":{"_account_id":38169,"name":"Lhoussain AIT ASSOU","display_name":"aitassou","email":"lhoussain.ait-assou@ovhcloud.com","username":"aitassou"},"change_message_id":"aaa058e7be2368f133d8c28312d04508b1df216b","unresolved":true,"context_lines":[{"line_number":476,"context_line":"    for (j \u003d 0; j \u003c k; j++) {"},{"line_number":477,"context_line":"        p \u003d 0;"},{"line_number":478,"context_line":"        for (int u \u003d 0; u \u003c k; u++) {"},{"line_number":479,"context_line":"            p ^\u003d desc-\u003egf_mul(tmp[(i*k)+u], tmp_inv_k[(u*k)+j]);"},{"line_number":480,"context_line":"        }"},{"line_number":481,"context_line":"        multiplied[((i-k)*k)+j] \u003d p;"},{"line_number":482,"context_line":"    }"}],"source_content_type":"text/x-csrc","patch_set":2,"id":"9d8be429_61205e97","line":479,"in_reply_to":"a6b1aa45_30f8f056","updated":"2025-07-10 08:45:29.000000000","message":"It is not probably worth to add more parity than data, otherwise it is better to do simple copies of chunks","commit_id":"9245a4b84de3b30da9af16ee481501d30715b07e"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"911b14cca3eb09a308868e7d332d910c6cd34f73","unresolved":true,"context_lines":[{"line_number":489,"context_line":"    for (i \u003d k; i \u003c n; i++) {"},{"line_number":490,"context_line":"            p \u003d 1;"},{"line_number":491,"context_line":"            for (j \u003d 0; j \u003c k; j++) {"},{"line_number":492,"context_line":"                desc-\u003ematrix[k * i + j] \u003d multiplied[k * (i-k) + j];"},{"line_number":493,"context_line":"            }"},{"line_number":494,"context_line":"            gen \u003d desc-\u003egf_mul(gen, 2);"},{"line_number":495,"context_line":"    }"}],"source_content_type":"text/x-csrc","patch_set":2,"id":"63a29e82_e2039cbd","line":492,"updated":"2025-07-08 20:31:20.000000000","message":"OK, so this is the key difference: ISA-L would use the first `n` rows of `tmp`, but here we\u0027re taking... *something*... I\u0027m still working on following along on the math. Is it basically [the plan laid out a few years ago](https://github.com/intel/isa-l/issues/10#issuecomment-436859811) in Kota\u0027s bug report? Seems to roughly follow the [zfec code that was linked](https://github.com/tahoe-lafs/zfec/blob/zfec-1.6.0.0/zfec/fec.c#L430-L479), anyway.\n\nBut whatever\u0027s going on, this is definitely some *other* encoding matrix, such that if you had a set of fragments encoded using ISA-L\u0027s original matrix, none of the parity frags will be useful and the only way to migrate will be to decode and re-encode, right?\n\nSounds like it\u0027d be better as a new backend, then -- any suggestions for a name? `EC_BACKEND_ISA_L_RS_VAND2`, maybe? `EC_BACKEND_ISA_L_RS_VAND_INV`?","commit_id":"9245a4b84de3b30da9af16ee481501d30715b07e"},{"author":{"_account_id":38169,"name":"Lhoussain AIT ASSOU","display_name":"aitassou","email":"lhoussain.ait-assou@ovhcloud.com","username":"aitassou"},"change_message_id":"ef8b62707aab0baf6549089ce62c2ad3309675c2","unresolved":true,"context_lines":[{"line_number":489,"context_line":"    for (i \u003d k; i \u003c n; i++) {"},{"line_number":490,"context_line":"            p \u003d 1;"},{"line_number":491,"context_line":"            for (j \u003d 0; j \u003c k; j++) {"},{"line_number":492,"context_line":"                desc-\u003ematrix[k * i + j] \u003d multiplied[k * (i-k) + j];"},{"line_number":493,"context_line":"            }"},{"line_number":494,"context_line":"            gen \u003d desc-\u003egf_mul(gen, 2);"},{"line_number":495,"context_line":"    }"}],"source_content_type":"text/x-csrc","patch_set":2,"id":"d681f5e6_d2b602f9","line":492,"in_reply_to":"63a29e82_e2039cbd","updated":"2025-07-09 19:26:35.000000000","message":"Right, the Vandermonde matrix is not the direct one to use in fact. From point of math , the vandermonde is used when decoding. But the idea s to have a (k+m, k) matrix where the first part is Identity matrix in order to have a systmeatic encoding. And this matrix must have the  following property:\neach k rows are independant.\nAs you mention this is similar to zfec except that I started the matrix using gen\u003d2\u003d pow(alpa,1), alpha is the root in Galois field and one could start with gen\u003d1\u003dpow(alpa, 0).\nFor the the last point I agree we need to re-encode and it is our case in production.\nFor explainable reed solomon I worte a quick prototype using standard reed solomon with (LFSR + Berlekamp) here : https://github.com/laitassou/reed-solomon ( It hase some known bugs...)","commit_id":"9245a4b84de3b30da9af16ee481501d30715b07e"},{"author":{"_account_id":38169,"name":"Lhoussain AIT ASSOU","display_name":"aitassou","email":"lhoussain.ait-assou@ovhcloud.com","username":"aitassou"},"change_message_id":"aaa058e7be2368f133d8c28312d04508b1df216b","unresolved":true,"context_lines":[{"line_number":489,"context_line":"    for (i \u003d k; i \u003c n; i++) {"},{"line_number":490,"context_line":"            p \u003d 1;"},{"line_number":491,"context_line":"            for (j \u003d 0; j \u003c k; j++) {"},{"line_number":492,"context_line":"                desc-\u003ematrix[k * i + j] \u003d multiplied[k * (i-k) + j];"},{"line_number":493,"context_line":"            }"},{"line_number":494,"context_line":"            gen \u003d desc-\u003egf_mul(gen, 2);"},{"line_number":495,"context_line":"    }"}],"source_content_type":"text/x-csrc","patch_set":2,"id":"00261368_c9b2f867","line":492,"in_reply_to":"919d685c_9e28c692","updated":"2025-07-10 08:45:29.000000000","message":"We can start generators form any root [alpha power(i)] because in mach any element x creates the group [x, x^1, x^n] in Galois field.\nBut reasonably I think it is possible to calculate new parity from old parity as the backend is similar to first one (opposed to Cauchy matrix)  but didn\u0027t yet investigate in detail that point.\nIt is reasonably smooth for us.","commit_id":"9245a4b84de3b30da9af16ee481501d30715b07e"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"f8dbc9c6b2bd027ea9a027829116f72bebf2be18","unresolved":true,"context_lines":[{"line_number":489,"context_line":"    for (i \u003d k; i \u003c n; i++) {"},{"line_number":490,"context_line":"            p \u003d 1;"},{"line_number":491,"context_line":"            for (j \u003d 0; j \u003c k; j++) {"},{"line_number":492,"context_line":"                desc-\u003ematrix[k * i + j] \u003d multiplied[k * (i-k) + j];"},{"line_number":493,"context_line":"            }"},{"line_number":494,"context_line":"            gen \u003d desc-\u003egf_mul(gen, 2);"},{"line_number":495,"context_line":"    }"}],"source_content_type":"text/x-csrc","patch_set":2,"id":"919d685c_9e28c692","line":492,"in_reply_to":"d681f5e6_d2b602f9","updated":"2025-07-09 23:49:50.000000000","message":"\u003e As you mention this is similar to zfec except that I started the matrix using gen\u003d2\u003d pow(alpa,1), alpha is the root in Galois field and one could start with gen\u003d1\u003dpow(alpa, 0).\n\nAh, yeah -- I passed over it somewhat quickly before and didn\u0027t spot the difference, but I see it now. And zfec starts with a special `[1, 0, ..., 0]` row then fills the rest from `gen\u003d1`.\n\nOut of curiosity, why start with `gen\u003d2` instead of `1`? More broadly, why add a new table at all when the Cauchy table already works with m\u003e4? Is it for (loose) compatibility with some other project, or...? I\u0027m not opposed to adding more backends (at least this one will be testable with publicly available libraries!), just wondering.\n\n\u003e For the the last point I agree we need to re-encode and it is our case in production.\n\nOuch! Hope it went reasonably smoothly for you.","commit_id":"9245a4b84de3b30da9af16ee481501d30715b07e"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"f8dbc9c6b2bd027ea9a027829116f72bebf2be18","unresolved":true,"context_lines":[{"line_number":448,"context_line":"    return 0;"},{"line_number":449,"context_line":"}"},{"line_number":450,"context_line":""},{"line_number":451,"context_line":"static void gen_encoding_matrix(isa_l_descriptor * desc, int n, int k){"},{"line_number":452,"context_line":"    int i, j;"},{"line_number":453,"context_line":"    unsigned char p, gen \u003d 2;"},{"line_number":454,"context_line":"    unsigned char *tmp \u003d NULL;"}],"source_content_type":"text/x-csrc","patch_set":3,"id":"57dee7ec_76c3c583","line":451,"range":{"start_line":451,"start_character":7,"end_line":451,"end_character":11},"updated":"2025-07-09 23:49:50.000000000","message":"Unlike the isa-l generators, ours can fail (out of memory, matrix inversion fails) -- we should probably reflect that in some kind of a return code.","commit_id":"305cef3c634e27c08fe01f83fa9f87ba0004fa70"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"255412ab4b96f129c14fabfa534b94c9fb85f6bb","unresolved":false,"context_lines":[{"line_number":448,"context_line":"    return 0;"},{"line_number":449,"context_line":"}"},{"line_number":450,"context_line":""},{"line_number":451,"context_line":"static void gen_encoding_matrix(isa_l_descriptor * desc, int n, int k){"},{"line_number":452,"context_line":"    int i, j;"},{"line_number":453,"context_line":"    unsigned char p, gen \u003d 2;"},{"line_number":454,"context_line":"    unsigned char *tmp \u003d NULL;"}],"source_content_type":"text/x-csrc","patch_set":3,"id":"617f8c5c_2009382f","line":451,"range":{"start_line":451,"start_character":7,"end_line":451,"end_character":11},"in_reply_to":"57dee7ec_76c3c583","updated":"2025-07-29 23:32:11.000000000","message":"Done","commit_id":"305cef3c634e27c08fe01f83fa9f87ba0004fa70"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"f8dbc9c6b2bd027ea9a027829116f72bebf2be18","unresolved":true,"context_lines":[{"line_number":491,"context_line":"            for (int u \u003d 0; u \u003c k; u++) {"},{"line_number":492,"context_line":"                p ^\u003d desc-\u003egf_mul(tmp[(i*k)+u], tmp_inv_k[(u*k)+j]);"},{"line_number":493,"context_line":"            }"},{"line_number":494,"context_line":"            multiplied[((i-k)*k)+j] \u003d p;"},{"line_number":495,"context_line":"        }"},{"line_number":496,"context_line":"    }"},{"line_number":497,"context_line":""}],"source_content_type":"text/x-csrc","patch_set":3,"id":"13b58a0d_3cf4f1f5","line":494,"updated":"2025-07-09 23:49:50.000000000","message":"Could we just set the parity rows of `desc-\u003ematrix` directly and save us the `malloc` and copy?","commit_id":"305cef3c634e27c08fe01f83fa9f87ba0004fa70"},{"author":{"_account_id":38169,"name":"Lhoussain AIT ASSOU","display_name":"aitassou","email":"lhoussain.ait-assou@ovhcloud.com","username":"aitassou"},"change_message_id":"aaa058e7be2368f133d8c28312d04508b1df216b","unresolved":true,"context_lines":[{"line_number":491,"context_line":"            for (int u \u003d 0; u \u003c k; u++) {"},{"line_number":492,"context_line":"                p ^\u003d desc-\u003egf_mul(tmp[(i*k)+u], tmp_inv_k[(u*k)+j]);"},{"line_number":493,"context_line":"            }"},{"line_number":494,"context_line":"            multiplied[((i-k)*k)+j] \u003d p;"},{"line_number":495,"context_line":"        }"},{"line_number":496,"context_line":"    }"},{"line_number":497,"context_line":""}],"source_content_type":"text/x-csrc","patch_set":3,"id":"c56ef3fa_bb670ff3","line":494,"in_reply_to":"13b58a0d_3cf4f1f5","updated":"2025-07-10 08:45:29.000000000","message":"right","commit_id":"305cef3c634e27c08fe01f83fa9f87ba0004fa70"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"255412ab4b96f129c14fabfa534b94c9fb85f6bb","unresolved":false,"context_lines":[{"line_number":491,"context_line":"            for (int u \u003d 0; u \u003c k; u++) {"},{"line_number":492,"context_line":"                p ^\u003d desc-\u003egf_mul(tmp[(i*k)+u], tmp_inv_k[(u*k)+j]);"},{"line_number":493,"context_line":"            }"},{"line_number":494,"context_line":"            multiplied[((i-k)*k)+j] \u003d p;"},{"line_number":495,"context_line":"        }"},{"line_number":496,"context_line":"    }"},{"line_number":497,"context_line":""}],"source_content_type":"text/x-csrc","patch_set":3,"id":"ba5b1e4d_f11d1f6b","line":494,"in_reply_to":"c56ef3fa_bb670ff3","updated":"2025-07-29 23:32:11.000000000","message":"Done","commit_id":"305cef3c634e27c08fe01f83fa9f87ba0004fa70"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"f8dbc9c6b2bd027ea9a027829116f72bebf2be18","unresolved":true,"context_lines":[{"line_number":500,"context_line":"        desc-\u003ematrix[k * i + i] \u003d 1;"},{"line_number":501,"context_line":""},{"line_number":502,"context_line":"    for (i \u003d k; i \u003c n; i++) {"},{"line_number":503,"context_line":"            p \u003d 1;"},{"line_number":504,"context_line":"            for (j \u003d 0; j \u003c k; j++) {"},{"line_number":505,"context_line":"                desc-\u003ematrix[k * i + j] \u003d multiplied[k * (i-k) + j];"},{"line_number":506,"context_line":"            }"}],"source_content_type":"text/x-csrc","patch_set":3,"id":"4c82f333_88b73278","line":503,"updated":"2025-07-09 23:49:50.000000000","message":"We don\u0027t actually use `p` from here on out, though, do we?","commit_id":"305cef3c634e27c08fe01f83fa9f87ba0004fa70"},{"author":{"_account_id":38169,"name":"Lhoussain AIT ASSOU","display_name":"aitassou","email":"lhoussain.ait-assou@ovhcloud.com","username":"aitassou"},"change_message_id":"aaa058e7be2368f133d8c28312d04508b1df216b","unresolved":true,"context_lines":[{"line_number":500,"context_line":"        desc-\u003ematrix[k * i + i] \u003d 1;"},{"line_number":501,"context_line":""},{"line_number":502,"context_line":"    for (i \u003d k; i \u003c n; i++) {"},{"line_number":503,"context_line":"            p \u003d 1;"},{"line_number":504,"context_line":"            for (j \u003d 0; j \u003c k; j++) {"},{"line_number":505,"context_line":"                desc-\u003ematrix[k * i + j] \u003d multiplied[k * (i-k) + j];"},{"line_number":506,"context_line":"            }"}],"source_content_type":"text/x-csrc","patch_set":3,"id":"744cb8f2_0e299869","line":503,"in_reply_to":"4c82f333_88b73278","updated":"2025-07-10 08:45:29.000000000","message":"right","commit_id":"305cef3c634e27c08fe01f83fa9f87ba0004fa70"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"255412ab4b96f129c14fabfa534b94c9fb85f6bb","unresolved":false,"context_lines":[{"line_number":500,"context_line":"        desc-\u003ematrix[k * i + i] \u003d 1;"},{"line_number":501,"context_line":""},{"line_number":502,"context_line":"    for (i \u003d k; i \u003c n; i++) {"},{"line_number":503,"context_line":"            p \u003d 1;"},{"line_number":504,"context_line":"            for (j \u003d 0; j \u003c k; j++) {"},{"line_number":505,"context_line":"                desc-\u003ematrix[k * i + j] \u003d multiplied[k * (i-k) + j];"},{"line_number":506,"context_line":"            }"}],"source_content_type":"text/x-csrc","patch_set":3,"id":"480b318d_699b3b50","line":503,"in_reply_to":"744cb8f2_0e299869","updated":"2025-07-29 23:32:11.000000000","message":"Done","commit_id":"305cef3c634e27c08fe01f83fa9f87ba0004fa70"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"f8dbc9c6b2bd027ea9a027829116f72bebf2be18","unresolved":true,"context_lines":[{"line_number":504,"context_line":"            for (j \u003d 0; j \u003c k; j++) {"},{"line_number":505,"context_line":"                desc-\u003ematrix[k * i + j] \u003d multiplied[k * (i-k) + j];"},{"line_number":506,"context_line":"            }"},{"line_number":507,"context_line":"            gen \u003d desc-\u003egf_mul(gen, 2);"},{"line_number":508,"context_line":"    }"},{"line_number":509,"context_line":""},{"line_number":510,"context_line":"error_free:"}],"source_content_type":"text/x-csrc","patch_set":3,"id":"ccbd0629_be540c20","line":507,"updated":"2025-07-09 23:49:50.000000000","message":"Similarly here; we keep updating `gen` in this loop, but we\u0027re done using it, right?","commit_id":"305cef3c634e27c08fe01f83fa9f87ba0004fa70"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"255412ab4b96f129c14fabfa534b94c9fb85f6bb","unresolved":false,"context_lines":[{"line_number":504,"context_line":"            for (j \u003d 0; j \u003c k; j++) {"},{"line_number":505,"context_line":"                desc-\u003ematrix[k * i + j] \u003d multiplied[k * (i-k) + j];"},{"line_number":506,"context_line":"            }"},{"line_number":507,"context_line":"            gen \u003d desc-\u003egf_mul(gen, 2);"},{"line_number":508,"context_line":"    }"},{"line_number":509,"context_line":""},{"line_number":510,"context_line":"error_free:"}],"source_content_type":"text/x-csrc","patch_set":3,"id":"f74a478d_5ccc5e8b","line":507,"in_reply_to":"1b5d3235_534922bd","updated":"2025-07-29 23:32:11.000000000","message":"Done","commit_id":"305cef3c634e27c08fe01f83fa9f87ba0004fa70"},{"author":{"_account_id":38169,"name":"Lhoussain AIT ASSOU","display_name":"aitassou","email":"lhoussain.ait-assou@ovhcloud.com","username":"aitassou"},"change_message_id":"aaa058e7be2368f133d8c28312d04508b1df216b","unresolved":true,"context_lines":[{"line_number":504,"context_line":"            for (j \u003d 0; j \u003c k; j++) {"},{"line_number":505,"context_line":"                desc-\u003ematrix[k * i + j] \u003d multiplied[k * (i-k) + j];"},{"line_number":506,"context_line":"            }"},{"line_number":507,"context_line":"            gen \u003d desc-\u003egf_mul(gen, 2);"},{"line_number":508,"context_line":"    }"},{"line_number":509,"context_line":""},{"line_number":510,"context_line":"error_free:"}],"source_content_type":"text/x-csrc","patch_set":3,"id":"1b5d3235_534922bd","line":507,"in_reply_to":"ccbd0629_be540c20","updated":"2025-07-10 08:45:29.000000000","message":"right forgot this","commit_id":"305cef3c634e27c08fe01f83fa9f87ba0004fa70"}],"test/liberasurecode_test.c":[{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"469839837d4a80daeb52d8ea49b15b15324b0f60","unresolved":true,"context_lines":[{"line_number":1509,"context_line":"        assert(skip !\u003d NULL);"},{"line_number":1510,"context_line":"        int count \u003d 0;"},{"line_number":1511,"context_line":"        while(true) {"},{"line_number":1512,"context_line":"                int value \u003d rand() % (args-\u003ek + args-\u003em) ;"},{"line_number":1513,"context_line":""},{"line_number":1514,"context_line":"                if (skip[value] !\u003d 1){"},{"line_number":1515,"context_line":"                    skip[value] \u003d 1;"}],"source_content_type":"text/x-csrc","patch_set":3,"id":"9937d568_e7a20a7a","line":1512,"updated":"2025-07-10 05:26:33.000000000","message":"So the rand feels kinda weird -- part of me wonders whether we\u0027d be better off to just go through all the possible combinations:\n```\n\u003e\u003e\u003e len(list(itertools.combinations(range(12), 7)))\n792\n\u003e\u003e\u003e len(list(itertools.combinations(range(13), 8)))\n1287\n```\nOTOH, the `isa_l_1010_args` tests would definitely hurt a lot more:\n```\n\u003e\u003e\u003e len(list(itertools.combinations(range(20), 10)))\n184756\n```\nBut both random sampling and exhaustive search kinda suck; there\u0027s definitely a noticeable pause on this test when running the test suite interactively. Looking at [the recent passing gate jobs](https://zuul.opendev.org/t/openstack/builds?project\u003dopenstack%2Fliberasurecode\u0026pipeline\u003dcheck\u0026result\u003dSUCCESS\u0026skip\u003d0), this seems to have moved us from the 12-20 minute range up to 21-28 minutes.\n\nMaybe it\u0027d be better to have some one-off tooling devs could run locally for exhaustive search if/when they\u0027re worried about that sort of thing rather than doing it on every test run in the gate? Might even be better built on pyeclib or something...\n\nWDYT?","commit_id":"305cef3c634e27c08fe01f83fa9f87ba0004fa70"},{"author":{"_account_id":38169,"name":"Lhoussain AIT ASSOU","display_name":"aitassou","email":"lhoussain.ait-assou@ovhcloud.com","username":"aitassou"},"change_message_id":"4a6601aef2868eac2a4788dc36e29effe14c0834","unresolved":true,"context_lines":[{"line_number":1509,"context_line":"        assert(skip !\u003d NULL);"},{"line_number":1510,"context_line":"        int count \u003d 0;"},{"line_number":1511,"context_line":"        while(true) {"},{"line_number":1512,"context_line":"                int value \u003d rand() % (args-\u003ek + args-\u003em) ;"},{"line_number":1513,"context_line":""},{"line_number":1514,"context_line":"                if (skip[value] !\u003d 1){"},{"line_number":1515,"context_line":"                    skip[value] \u003d 1;"}],"source_content_type":"text/x-csrc","patch_set":3,"id":"e824adef_72797615","line":1512,"in_reply_to":"30923799_f00316ea","updated":"2025-07-10 15:22:50.000000000","message":"The loop test is reduced to 500 and a specefic test with  skipped positions is added for RS(7,5)\nFeel free to adapt as I will be back for 28 july.\nThanks for help!","commit_id":"305cef3c634e27c08fe01f83fa9f87ba0004fa70"},{"author":{"_account_id":38169,"name":"Lhoussain AIT ASSOU","display_name":"aitassou","email":"lhoussain.ait-assou@ovhcloud.com","username":"aitassou"},"change_message_id":"aaa058e7be2368f133d8c28312d04508b1df216b","unresolved":true,"context_lines":[{"line_number":1509,"context_line":"        assert(skip !\u003d NULL);"},{"line_number":1510,"context_line":"        int count \u003d 0;"},{"line_number":1511,"context_line":"        while(true) {"},{"line_number":1512,"context_line":"                int value \u003d rand() % (args-\u003ek + args-\u003em) ;"},{"line_number":1513,"context_line":""},{"line_number":1514,"context_line":"                if (skip[value] !\u003d 1){"},{"line_number":1515,"context_line":"                    skip[value] \u003d 1;"}],"source_content_type":"text/x-csrc","patch_set":3,"id":"30923799_f00316ea","line":1512,"in_reply_to":"9937d568_e7a20a7a","updated":"2025-07-10 08:45:29.000000000","message":"I used to while (true) loop to get all corrupt position for RS(7,5) with some random chance, the idea was that there are C(7,12) possible combinations and this 792 ,this is the reason for test. I can force skip positions directly but I agree and know these limitations and this hurts for higher value.\nI vote for the idea of independent tooling, and I will adapt test to show only problem for RS(7,5)","commit_id":"305cef3c634e27c08fe01f83fa9f87ba0004fa70"},{"author":{"_account_id":38169,"name":"Lhoussain AIT ASSOU","display_name":"aitassou","email":"lhoussain.ait-assou@ovhcloud.com","username":"aitassou"},"change_message_id":"788c3819420dca0ed4e32cc96d823354a2edad3c","unresolved":true,"context_lines":[{"line_number":1509,"context_line":"        assert(skip !\u003d NULL);"},{"line_number":1510,"context_line":"        int count \u003d 0;"},{"line_number":1511,"context_line":"        while(true) {"},{"line_number":1512,"context_line":"                int value \u003d rand() % (args-\u003ek + args-\u003em) ;"},{"line_number":1513,"context_line":""},{"line_number":1514,"context_line":"                if (skip[value] !\u003d 1){"},{"line_number":1515,"context_line":"                    skip[value] \u003d 1;"}],"source_content_type":"text/x-csrc","patch_set":3,"id":"68652a8e_d988e531","line":1512,"in_reply_to":"e5e0b7e1_31c642c5","updated":"2025-07-29 12:08:37.000000000","message":"I added c tool as the base, it could be enhanced or adapted to test isal_rs_vand also.\nThe code is inspired from test tools and some pieces of codes are used from tests","commit_id":"305cef3c634e27c08fe01f83fa9f87ba0004fa70"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"9a28d926c45b3736340f75782c6a0075df900e89","unresolved":true,"context_lines":[{"line_number":1509,"context_line":"        assert(skip !\u003d NULL);"},{"line_number":1510,"context_line":"        int count \u003d 0;"},{"line_number":1511,"context_line":"        while(true) {"},{"line_number":1512,"context_line":"                int value \u003d rand() % (args-\u003ek + args-\u003em) ;"},{"line_number":1513,"context_line":""},{"line_number":1514,"context_line":"                if (skip[value] !\u003d 1){"},{"line_number":1515,"context_line":"                    skip[value] \u003d 1;"}],"source_content_type":"text/x-csrc","patch_set":3,"id":"e5e0b7e1_31c642c5","line":1512,"in_reply_to":"e824adef_72797615","updated":"2025-07-10 23:58:16.000000000","message":"\u003e I vote for the idea of independent tooling\n\nIf I can get that together, should we just drop the stress test? Do you have any strong preference for whether it should be in liberasurecode (and so written in C) vs pyeclib (and written in Python)?\n\n\u003e I will be back for 28 july.\n\nNo worries; I\u0027m going to be out all next week, too.","commit_id":"305cef3c634e27c08fe01f83fa9f87ba0004fa70"}]}
