)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"3845d229810365099e1215fd0198293ff998a299","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"3ce1b78d_fe3233fe","updated":"2025-07-29 19:07:41.000000000","message":"Thanks for this! Sorry I didn\u0027t get on it faster -- eventually I did https://review.opendev.org/c/openstack/pyeclib/+/956106 over in pyeclib, but then got distracted as it caused me to discover https://bugs.launchpad.net/liberasurecode/+bug/2118949","commit_id":"411c7b8d85e74a6f13f2af109a641cbade94ca0d"},{"author":{"_account_id":38169,"name":"Lhoussain AIT ASSOU","display_name":"aitassou","email":"lhoussain.ait-assou@ovhcloud.com","username":"aitassou"},"change_message_id":"955323474494b11a63c0ab5901fc6cbcf958c5a6","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"4966e360_3a6fa4f0","updated":"2025-08-25 15:05:26.000000000","message":"I am preparing some LRC codec that could be integrated with liberasure. I have a idea for implementation in free time. If any advice","commit_id":"563729892e43b07bdef3ab7817a9719b0a9d76bd"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"9d190aa5e804c99b1f347ef4ef4aa629ebb4dd90","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"553c65e4_f5cdd0f5","in_reply_to":"4966e360_3a6fa4f0","updated":"2025-08-27 21:56:25.000000000","message":"That\u0027s a super-interesting idea! We\u0027ve often lamented how much network traffic is required to reconstruct lost fragments in Swift, and it gets so much worse when you have multi-region deployments. I still need to read through https://en.wikipedia.org/wiki/Locally_recoverable_code some more, but I think there are some similarities to the `flat_xor` code that we already have in liberasurecode.\n\nI think the main things I\u0027m trying to figure out are\n- What are the parameters? What do they mean?\n- Given a set of parameters, how many fragments will be needed to decode? To reconstruct a lost fragment?\n- I think we\u0027re going to want to re-examine `liberasurecode_fragments_needed` -- it feels like applications are going to need to use that more, rather than assuming optimal codes (as Swift currently does).\n- Will new external libraries be needed, or is this just going to need a new encoding matrix to pass to ISA-L?","commit_id":"563729892e43b07bdef3ab7817a9719b0a9d76bd"},{"author":{"_account_id":38169,"name":"Lhoussain AIT ASSOU","display_name":"aitassou","email":"lhoussain.ait-assou@ovhcloud.com","username":"aitassou"},"change_message_id":"836b526b6f994976d2ef05dd4edf81e21305999a","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"93ca6720_698721e6","in_reply_to":"553c65e4_f5cdd0f5","updated":"2025-08-28 09:26:20.000000000","message":"Here are some elements I have: \n1) Parameters would be:LRC(k,m, l)  k \u003d data length, m parity length, l : local parities, g\u003d (m -r)global parity.\n2) When decoding we need k fragments, but will play with liberasurecode_fragments_needed  and in such case as with reconstrution we will need only at most [k/r] chunks in  case of one failure.\n3) I Agree, decoding/reconstuct will play with this paramaters to identify simple cases where we need only some fragments, and other casees where local parity and glboal parity will be used to decode.\n4) In current plan I have new backend (LRC) , this will need some encoding matrix and changes for deconding ( but I will use ISA-L).\n\nIdea also it to have some generic code that can target 2 or 3 or more local parities. This will be usefull multi-region and local repair.\nThere is some overhead compared between RS(k,m) and LRC(K,m, r) as LRC couldn\u0027t recover some case where lost chunks \u003d m.\nFor some document here; https://www.usenix.org/system/files/conference/atc12/atc12-final181_0.pdf","commit_id":"563729892e43b07bdef3ab7817a9719b0a9d76bd"}],"Makefile.am":[{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"a9ce967c8d1c26d94ef7afe8194ea1b7deca74d7","unresolved":true,"context_lines":[{"line_number":49,"context_line":"\t@./test/liberasurecode_test"},{"line_number":50,"context_line":"\t@./test/alg_sig_test"},{"line_number":51,"context_line":"\t@./test/test_xor_hd_code"},{"line_number":52,"context_line":"\t@./test/liberasurecode_rs_isal_stress_test"},{"line_number":53,"context_line":"\t@./test/libec_slap"},{"line_number":54,"context_line":" "},{"line_number":55,"context_line":"LIBTOOL_COMMAND \u003d $(LIBTOOL) --mode execute"}],"source_content_type":"application/octet-stream","patch_set":2,"id":"0c4e5a08_234dc8a0","line":52,"updated":"2025-08-29 00:33:12.000000000","message":"I don\u0027t think we need this line -- it\u0027ll cause the tool to be run in the gate (though with no args, so it\u0027ll just [print a usage message](https://zuul.opendev.org/t/openstack/build/c0e71bc0cd3c4a3a929a595f4e13244e/log/job-output.txt#3055)).","commit_id":"563729892e43b07bdef3ab7817a9719b0a9d76bd"},{"author":{"_account_id":38169,"name":"Lhoussain AIT ASSOU","display_name":"aitassou","email":"lhoussain.ait-assou@ovhcloud.com","username":"aitassou"},"change_message_id":"836554d5c363d081f25cc60856caa45ae42aec70","unresolved":false,"context_lines":[{"line_number":49,"context_line":"\t@./test/liberasurecode_test"},{"line_number":50,"context_line":"\t@./test/alg_sig_test"},{"line_number":51,"context_line":"\t@./test/test_xor_hd_code"},{"line_number":52,"context_line":"\t@./test/liberasurecode_rs_isal_stress_test"},{"line_number":53,"context_line":"\t@./test/libec_slap"},{"line_number":54,"context_line":" "},{"line_number":55,"context_line":"LIBTOOL_COMMAND \u003d $(LIBTOOL) --mode execute"}],"source_content_type":"application/octet-stream","patch_set":2,"id":"d4ec50c3_a71de376","line":52,"in_reply_to":"0c4e5a08_234dc8a0","updated":"2025-08-29 12:49:49.000000000","message":"Done","commit_id":"563729892e43b07bdef3ab7817a9719b0a9d76bd"}],"test/liberasure_rs_isal_stress_test.c":[{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"3845d229810365099e1215fd0198293ff998a299","unresolved":true,"context_lines":[{"line_number":103,"context_line":"    int i \u003d 0;"},{"line_number":104,"context_line":"    int rc \u003d 0;"},{"line_number":105,"context_line":"    int desc \u003d -1;"},{"line_number":106,"context_line":"    int orig_data_size \u003d 1024 * 1024;"},{"line_number":107,"context_line":"    char *orig_data \u003d NULL;"},{"line_number":108,"context_line":"    char **encoded_data \u003d NULL, **encoded_parity \u003d NULL;"},{"line_number":109,"context_line":"    uint64_t encoded_fragment_len \u003d 0;"}],"source_content_type":"text/x-csrc","patch_set":1,"id":"bf8b1aae_d4201c9a","line":106,"updated":"2025-07-29 19:07:41.000000000","message":"I think I figured out -- this is way too big. We can similar coverage with 1k that we get with 1M, and it runs **so** much faster.","commit_id":"411c7b8d85e74a6f13f2af109a641cbade94ca0d"},{"author":{"_account_id":38169,"name":"Lhoussain AIT ASSOU","display_name":"aitassou","email":"lhoussain.ait-assou@ovhcloud.com","username":"aitassou"},"change_message_id":"c824f8023d05d57a01f48f7b03ff6d374092a557","unresolved":false,"context_lines":[{"line_number":103,"context_line":"    int i \u003d 0;"},{"line_number":104,"context_line":"    int rc \u003d 0;"},{"line_number":105,"context_line":"    int desc \u003d -1;"},{"line_number":106,"context_line":"    int orig_data_size \u003d 1024 * 1024;"},{"line_number":107,"context_line":"    char *orig_data \u003d NULL;"},{"line_number":108,"context_line":"    char **encoded_data \u003d NULL, **encoded_parity \u003d NULL;"},{"line_number":109,"context_line":"    uint64_t encoded_fragment_len \u003d 0;"}],"source_content_type":"text/x-csrc","patch_set":1,"id":"29045c62_d701a764","line":106,"in_reply_to":"a287cc9a_33be62b1","updated":"2025-08-11 10:16:50.000000000","message":"Done","commit_id":"411c7b8d85e74a6f13f2af109a641cbade94ca0d"},{"author":{"_account_id":38169,"name":"Lhoussain AIT ASSOU","display_name":"aitassou","email":"lhoussain.ait-assou@ovhcloud.com","username":"aitassou"},"change_message_id":"986a732ea28b437d52ea910c790f2cba3c521dab","unresolved":true,"context_lines":[{"line_number":103,"context_line":"    int i \u003d 0;"},{"line_number":104,"context_line":"    int rc \u003d 0;"},{"line_number":105,"context_line":"    int desc \u003d -1;"},{"line_number":106,"context_line":"    int orig_data_size \u003d 1024 * 1024;"},{"line_number":107,"context_line":"    char *orig_data \u003d NULL;"},{"line_number":108,"context_line":"    char **encoded_data \u003d NULL, **encoded_parity \u003d NULL;"},{"line_number":109,"context_line":"    uint64_t encoded_fragment_len \u003d 0;"}],"source_content_type":"text/x-csrc","patch_set":1,"id":"a287cc9a_33be62b1","line":106,"in_reply_to":"bf8b1aae_d4201c9a","updated":"2025-07-30 09:38:03.000000000","message":"We need discrepancy in data but right 1K is good.","commit_id":"411c7b8d85e74a6f13f2af109a641cbade94ca0d"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"3845d229810365099e1215fd0198293ff998a299","unresolved":true,"context_lines":[{"line_number":227,"context_line":"    };"},{"line_number":228,"context_line":""},{"line_number":229,"context_line":"    // Test is ok if no Assertion `0 \u003d\u003d rc\u0027 occurs"},{"line_number":230,"context_line":"    // We can make backend configurable  and test EC_BACKEND_ISA_L_RS_VAND"},{"line_number":231,"context_line":"    test_decode_with_missing_multi_data_parity(EC_BACKEND_ISA_L_RS_VAND_INV, \u0026isa_l_km_args, nb_iter);"},{"line_number":232,"context_line":""},{"line_number":233,"context_line":"    return 0;"}],"source_content_type":"text/x-csrc","patch_set":1,"id":"6dc9d38e_5e8d1568","line":230,"updated":"2025-07-29 19:07:41.000000000","message":"That does seem nice -- also seems like a bit of a pain to do in C.","commit_id":"411c7b8d85e74a6f13f2af109a641cbade94ca0d"},{"author":{"_account_id":38169,"name":"Lhoussain AIT ASSOU","display_name":"aitassou","email":"lhoussain.ait-assou@ovhcloud.com","username":"aitassou"},"change_message_id":"955323474494b11a63c0ab5901fc6cbcf958c5a6","unresolved":true,"context_lines":[{"line_number":227,"context_line":"    };"},{"line_number":228,"context_line":""},{"line_number":229,"context_line":"    // Test is ok if no Assertion `0 \u003d\u003d rc\u0027 occurs"},{"line_number":230,"context_line":"    // We can make backend configurable  and test EC_BACKEND_ISA_L_RS_VAND"},{"line_number":231,"context_line":"    test_decode_with_missing_multi_data_parity(EC_BACKEND_ISA_L_RS_VAND_INV, \u0026isa_l_km_args, nb_iter);"},{"line_number":232,"context_line":""},{"line_number":233,"context_line":"    return 0;"}],"source_content_type":"text/x-csrc","patch_set":1,"id":"b4466f0c_2c4556cc","line":230,"in_reply_to":"23c99737_c5802bbc","updated":"2025-08-25 15:05:26.000000000","message":"This change is needed to merge this PR or no?\nAnother info: currently the tool needs to be run manually (run with make test without params \u003d\u003ehelp usage).\n\nIn another thread I am preparing some LRC codec that could be integrated with liberasure. I have a  idea for implementation in free time","commit_id":"411c7b8d85e74a6f13f2af109a641cbade94ca0d"},{"author":{"_account_id":38169,"name":"Lhoussain AIT ASSOU","display_name":"aitassou","email":"lhoussain.ait-assou@ovhcloud.com","username":"aitassou"},"change_message_id":"986a732ea28b437d52ea910c790f2cba3c521dab","unresolved":true,"context_lines":[{"line_number":227,"context_line":"    };"},{"line_number":228,"context_line":""},{"line_number":229,"context_line":"    // Test is ok if no Assertion `0 \u003d\u003d rc\u0027 occurs"},{"line_number":230,"context_line":"    // We can make backend configurable  and test EC_BACKEND_ISA_L_RS_VAND"},{"line_number":231,"context_line":"    test_decode_with_missing_multi_data_parity(EC_BACKEND_ISA_L_RS_VAND_INV, \u0026isa_l_km_args, nb_iter);"},{"line_number":232,"context_line":""},{"line_number":233,"context_line":"    return 0;"}],"source_content_type":"text/x-csrc","patch_set":1,"id":"23c99737_c5802bbc","line":230,"in_reply_to":"6dc9d38e_5e8d1568","updated":"2025-07-30 09:38:03.000000000","message":"Right","commit_id":"411c7b8d85e74a6f13f2af109a641cbade94ca0d"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"a9ce967c8d1c26d94ef7afe8194ea1b7deca74d7","unresolved":false,"context_lines":[{"line_number":227,"context_line":"    };"},{"line_number":228,"context_line":""},{"line_number":229,"context_line":"    // Test is ok if no Assertion `0 \u003d\u003d rc\u0027 occurs"},{"line_number":230,"context_line":"    // We can make backend configurable  and test EC_BACKEND_ISA_L_RS_VAND"},{"line_number":231,"context_line":"    test_decode_with_missing_multi_data_parity(EC_BACKEND_ISA_L_RS_VAND_INV, \u0026isa_l_km_args, nb_iter);"},{"line_number":232,"context_line":""},{"line_number":233,"context_line":"    return 0;"}],"source_content_type":"text/x-csrc","patch_set":1,"id":"d5abef58_fdfa45d6","line":230,"in_reply_to":"a6020f1a_0c89010f","updated":"2025-08-29 00:33:12.000000000","message":"Acknowledged","commit_id":"411c7b8d85e74a6f13f2af109a641cbade94ca0d"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"9d190aa5e804c99b1f347ef4ef4aa629ebb4dd90","unresolved":true,"context_lines":[{"line_number":227,"context_line":"    };"},{"line_number":228,"context_line":""},{"line_number":229,"context_line":"    // Test is ok if no Assertion `0 \u003d\u003d rc\u0027 occurs"},{"line_number":230,"context_line":"    // We can make backend configurable  and test EC_BACKEND_ISA_L_RS_VAND"},{"line_number":231,"context_line":"    test_decode_with_missing_multi_data_parity(EC_BACKEND_ISA_L_RS_VAND_INV, \u0026isa_l_km_args, nb_iter);"},{"line_number":232,"context_line":""},{"line_number":233,"context_line":"    return 0;"}],"source_content_type":"text/x-csrc","patch_set":1,"id":"bae5f281_f5344b61","line":230,"in_reply_to":"b4466f0c_2c4556cc","updated":"2025-08-27 21:56:25.000000000","message":"It was more a strategic thought about whether we want this tool to live in liberasurecode or pyeclib. FWIW, I added such a tool (as well as several others) in https://review.opendev.org/c/openstack/pyeclib/+/958241. As long as we have one such tool *somewhere*, I think I can feel pretty good about not having the exhaustive tests on every CI run -- so at this point, I\u0027m not sure we really need this patch.\n\nWhat do you think? Would it be useful/valuable to you to have it in liberasurecode as well? Or should we abandon this and just rely on pyeclib for this kind of tooling?","commit_id":"411c7b8d85e74a6f13f2af109a641cbade94ca0d"},{"author":{"_account_id":38169,"name":"Lhoussain AIT ASSOU","display_name":"aitassou","email":"lhoussain.ait-assou@ovhcloud.com","username":"aitassou"},"change_message_id":"836b526b6f994976d2ef05dd4edf81e21305999a","unresolved":true,"context_lines":[{"line_number":227,"context_line":"    };"},{"line_number":228,"context_line":""},{"line_number":229,"context_line":"    // Test is ok if no Assertion `0 \u003d\u003d rc\u0027 occurs"},{"line_number":230,"context_line":"    // We can make backend configurable  and test EC_BACKEND_ISA_L_RS_VAND"},{"line_number":231,"context_line":"    test_decode_with_missing_multi_data_parity(EC_BACKEND_ISA_L_RS_VAND_INV, \u0026isa_l_km_args, nb_iter);"},{"line_number":232,"context_line":""},{"line_number":233,"context_line":"    return 0;"}],"source_content_type":"text/x-csrc","patch_set":1,"id":"a6020f1a_0c89010f","line":230,"in_reply_to":"bae5f281_f5344b61","updated":"2025-08-28 09:26:20.000000000","message":"In my opinion it has a place also in liberasure well, I used it to discover bad positions and debug from where the errors come and it is not run on every CI run.","commit_id":"411c7b8d85e74a6f13f2af109a641cbade94ca0d"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"a9ce967c8d1c26d94ef7afe8194ea1b7deca74d7","unresolved":true,"context_lines":[{"line_number":37,"context_line":"char *create_buffer(int size, int fill)"},{"line_number":38,"context_line":"{"},{"line_number":39,"context_line":"    char *buf \u003d malloc(size);"},{"line_number":40,"context_line":"    memset(buf, fill, size);"},{"line_number":41,"context_line":"    return buf;"},{"line_number":42,"context_line":"}"},{"line_number":43,"context_line":""}],"source_content_type":"text/x-csrc","patch_set":2,"id":"d8274396_3d5eaf6c","line":40,"updated":"2025-08-29 00:33:12.000000000","message":"We should only do this if the `malloc` succeeded, right? IDK if we want to throw in a `if (buf !\u003d NULL)` here, or just hoist up the assertion currently on L130.\n\n(Or maybe we even just get rid of the helper and inline it at the one call site?)","commit_id":"563729892e43b07bdef3ab7817a9719b0a9d76bd"},{"author":{"_account_id":38169,"name":"Lhoussain AIT ASSOU","display_name":"aitassou","email":"lhoussain.ait-assou@ovhcloud.com","username":"aitassou"},"change_message_id":"836554d5c363d081f25cc60856caa45ae42aec70","unresolved":false,"context_lines":[{"line_number":37,"context_line":"char *create_buffer(int size, int fill)"},{"line_number":38,"context_line":"{"},{"line_number":39,"context_line":"    char *buf \u003d malloc(size);"},{"line_number":40,"context_line":"    memset(buf, fill, size);"},{"line_number":41,"context_line":"    return buf;"},{"line_number":42,"context_line":"}"},{"line_number":43,"context_line":""}],"source_content_type":"text/x-csrc","patch_set":2,"id":"878111cb_9f7db7da","line":40,"in_reply_to":"d8274396_3d5eaf6c","updated":"2025-08-29 12:49:49.000000000","message":"Done","commit_id":"563729892e43b07bdef3ab7817a9719b0a9d76bd"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"a9ce967c8d1c26d94ef7afe8194ea1b7deca74d7","unresolved":true,"context_lines":[{"line_number":69,"context_line":"    int num_frags \u003d 0;"},{"line_number":70,"context_line":"    int i \u003d 0;"},{"line_number":71,"context_line":"    char **ptr \u003d NULL;"},{"line_number":72,"context_line":"    *array \u003d malloc((args-\u003ek + args-\u003em) * sizeof(char *));"},{"line_number":73,"context_line":"    if (array \u003d\u003d NULL) {"},{"line_number":74,"context_line":"        num_frags \u003d -1;"},{"line_number":75,"context_line":"        goto out;"}],"source_content_type":"text/x-csrc","patch_set":2,"id":"3d4e1712_03b9c7f7","line":72,"range":{"start_line":72,"start_character":49,"end_line":72,"end_character":55},"updated":"2025-08-29 00:33:12.000000000","message":"`char **`, technically, yeah? Though since we\u0027re just looking for a size, they should always be equivalent in practice -- I suppose `void *` would be just as good.","commit_id":"563729892e43b07bdef3ab7817a9719b0a9d76bd"},{"author":{"_account_id":38169,"name":"Lhoussain AIT ASSOU","display_name":"aitassou","email":"lhoussain.ait-assou@ovhcloud.com","username":"aitassou"},"change_message_id":"836554d5c363d081f25cc60856caa45ae42aec70","unresolved":false,"context_lines":[{"line_number":69,"context_line":"    int num_frags \u003d 0;"},{"line_number":70,"context_line":"    int i \u003d 0;"},{"line_number":71,"context_line":"    char **ptr \u003d NULL;"},{"line_number":72,"context_line":"    *array \u003d malloc((args-\u003ek + args-\u003em) * sizeof(char *));"},{"line_number":73,"context_line":"    if (array \u003d\u003d NULL) {"},{"line_number":74,"context_line":"        num_frags \u003d -1;"},{"line_number":75,"context_line":"        goto out;"}],"source_content_type":"text/x-csrc","patch_set":2,"id":"06fd7802_d5105c5c","line":72,"range":{"start_line":72,"start_character":49,"end_line":72,"end_character":55},"in_reply_to":"3d4e1712_03b9c7f7","updated":"2025-08-29 12:49:49.000000000","message":"Done","commit_id":"563729892e43b07bdef3ab7817a9719b0a9d76bd"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"a9ce967c8d1c26d94ef7afe8194ea1b7deca74d7","unresolved":true,"context_lines":[{"line_number":122,"context_line":"        return;"},{"line_number":123,"context_line":"    } else if ((args-\u003ek + args-\u003em) \u003e EC_MAX_FRAGMENTS) {"},{"line_number":124,"context_line":"        assert(-EINVALIDPARAMS \u003d\u003d desc);"},{"line_number":125,"context_line":"        return;"},{"line_number":126,"context_line":"    } else"},{"line_number":127,"context_line":"        assert(desc \u003e 0);"},{"line_number":128,"context_line":""}],"source_content_type":"text/x-csrc","patch_set":2,"id":"e7855cba_b9c47ab5","line":125,"updated":"2025-08-29 00:33:12.000000000","message":"Shouldn\u0027t we print an error message before the return?","commit_id":"563729892e43b07bdef3ab7817a9719b0a9d76bd"},{"author":{"_account_id":38169,"name":"Lhoussain AIT ASSOU","display_name":"aitassou","email":"lhoussain.ait-assou@ovhcloud.com","username":"aitassou"},"change_message_id":"836554d5c363d081f25cc60856caa45ae42aec70","unresolved":false,"context_lines":[{"line_number":122,"context_line":"        return;"},{"line_number":123,"context_line":"    } else if ((args-\u003ek + args-\u003em) \u003e EC_MAX_FRAGMENTS) {"},{"line_number":124,"context_line":"        assert(-EINVALIDPARAMS \u003d\u003d desc);"},{"line_number":125,"context_line":"        return;"},{"line_number":126,"context_line":"    } else"},{"line_number":127,"context_line":"        assert(desc \u003e 0);"},{"line_number":128,"context_line":""}],"source_content_type":"text/x-csrc","patch_set":2,"id":"8f4a8c46_ec644fa2","line":125,"in_reply_to":"e7855cba_b9c47ab5","updated":"2025-08-29 12:49:49.000000000","message":"Done","commit_id":"563729892e43b07bdef3ab7817a9719b0a9d76bd"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"a9ce967c8d1c26d94ef7afe8194ea1b7deca74d7","unresolved":true,"context_lines":[{"line_number":139,"context_line":"        char *data_ptr \u003d NULL;"},{"line_number":140,"context_line":"        char *frag \u003d NULL;"},{"line_number":141,"context_line":""},{"line_number":142,"context_line":"        frag \u003d (i \u003c args-\u003ek) ? encoded_data[i] : encoded_parity[i - args-\u003ek];"},{"line_number":143,"context_line":"        assert(frag !\u003d NULL);"},{"line_number":144,"context_line":"        fragment_header_t *header \u003d (fragment_header_t*)frag;"},{"line_number":145,"context_line":"        assert(header !\u003d NULL);"}],"source_content_type":"text/x-csrc","patch_set":2,"id":"f5d97605_ab459325","line":142,"updated":"2025-08-29 00:33:12.000000000","message":"I wonder if it\u0027d be better to split this into two loops: one for the data frags and one for the parity (which can skip the bits about `cmp_size`, `data_ptr`, and `memcmp` entirely).","commit_id":"563729892e43b07bdef3ab7817a9719b0a9d76bd"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"a9ce967c8d1c26d94ef7afe8194ea1b7deca74d7","unresolved":true,"context_lines":[{"line_number":185,"context_line":"static void test_decode_with_missing_multi_data_parity("},{"line_number":186,"context_line":"    const ec_backend_id_t be_id, struct ec_args *args, uint64_t nb_iter)"},{"line_number":187,"context_line":"{"},{"line_number":188,"context_line":"    int i;"},{"line_number":189,"context_line":"    for (i \u003d 0; i \u003c nb_iter; i++) {"},{"line_number":190,"context_line":"        int *skip \u003d create_skips_array(args,-1);"},{"line_number":191,"context_line":"        assert(skip !\u003d NULL);"}],"source_content_type":"text/x-csrc","patch_set":2,"id":"13f9d5c6_56a919f7","line":188,"updated":"2025-08-29 00:33:12.000000000","message":"Shouldn\u0027t `i` be a `uint64_t`, like `nb_iter`?","commit_id":"563729892e43b07bdef3ab7817a9719b0a9d76bd"},{"author":{"_account_id":38169,"name":"Lhoussain AIT ASSOU","display_name":"aitassou","email":"lhoussain.ait-assou@ovhcloud.com","username":"aitassou"},"change_message_id":"836554d5c363d081f25cc60856caa45ae42aec70","unresolved":false,"context_lines":[{"line_number":185,"context_line":"static void test_decode_with_missing_multi_data_parity("},{"line_number":186,"context_line":"    const ec_backend_id_t be_id, struct ec_args *args, uint64_t nb_iter)"},{"line_number":187,"context_line":"{"},{"line_number":188,"context_line":"    int i;"},{"line_number":189,"context_line":"    for (i \u003d 0; i \u003c nb_iter; i++) {"},{"line_number":190,"context_line":"        int *skip \u003d create_skips_array(args,-1);"},{"line_number":191,"context_line":"        assert(skip !\u003d NULL);"}],"source_content_type":"text/x-csrc","patch_set":2,"id":"d6b00881_45e108f5","line":188,"in_reply_to":"13f9d5c6_56a919f7","updated":"2025-08-29 12:49:49.000000000","message":"Done","commit_id":"563729892e43b07bdef3ab7817a9719b0a9d76bd"}]}
