-
Notifications
You must be signed in to change notification settings - Fork 8.9k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
- Fix failure to generate all possible combinations #3132
Conversation
Thank you for the contribution! Please remember to sign the commit so that DCO check passes, instructions: |
@timtim-git, please could you add a unit test to |
@denyeart when this is merged we would need to backport it everywhere... |
9387962
to
189affe
Compare
Bug happens when the endorsement policy is set to k-out-of-n where (n - k) > 1. For example, when there are 6 organizations and the endorsement policy is set to majority (i.e. 4-out-of-6). The combinations calculated by chooseKoutOfN() in original code are as below. [0 1 2 5], [0 1 2 5], [0 1 2 5], [0 1 3 5], [0 1 3 5], [0 1 4 5], [0 2 3 5], [0 2 3 5], [0 2 4 5], [0 3 4 5], [1 2 3 5], [1 2 3 5], [1 2 4 5], [1 3 4 5], [2 3 4 5] Obviously, the function fails to find out all the possible combinations. Some of the combinations are overrided by child's call. This bug would trigger below error sometimes when the alive peers are not within the above combinations. [discovery] chaincodeQuery -> ERRO 13a Failed constructing descriptor for chaincode chaincodes:<name:"XXXX" > ,: no peer combination can satisfy the endorsement policy To fix it, the last line of choose() should be changed to pass a copy of "currentSubGroup" to the recursive call instead, i.e. choose(n, targetAmount, i+1, append(make([]int, 0), currentSubGroup...), subGroups) After applying the fix, the resulting combinations generated should be corrected as below. [0 1 2 3], [0 1 2 4], [0 1 2 5], [0 1 3 4], [0 1 3 5], [0 1 4 5], [0 2 3 4], [0 2 3 5], [0 2 4 5], [0 3 4 5], [1 2 3 4], [1 2 3 5], [1 2 4 5], [1 3 4 5], [2 3 4 5] Signed-off-by: Tim <96273851+timtim-git@users.noreply.github.com>
Bug happens when the endorsement policy is set to k-out-of-n where (n - k) > 1. For example, when there are 6 organizations and the endorsement policy is set to majority (i.e. 4-out-of-6). The combinations calculated by chooseKoutOfN() in original code are as below. [0 1 2 5], [0 1 2 5], [0 1 2 5], [0 1 3 5], [0 1 3 5], [0 1 4 5], [0 2 3 5], [0 2 3 5], [0 2 4 5], [0 3 4 5], [1 2 3 5], [1 2 3 5], [1 2 4 5], [1 3 4 5], [2 3 4 5] Obviously, the function fails to find out all the possible combinations. Some of the combinations are overrided by child's call. This bug would trigger below error sometimes when the alive peers are not within the above combinations. [discovery] chaincodeQuery -> ERRO 13a Failed constructing descriptor for chaincode chaincodes:<name:"XXXX" > ,: no peer combination can satisfy the endorsement policy To fix it, the last line of choose() should be changed to pass a copy of "currentSubGroup" to the recursive call instead, i.e. choose(n, targetAmount, i+1, append(make([]int, 0), currentSubGroup...), subGroups) After applying the fix, the resulting combinations generated should be corrected as below. [0 1 2 3], [0 1 2 4], [0 1 2 5], [0 1 3 4], [0 1 3 5], [0 1 4 5], [0 2 3 4], [0 2 3 5], [0 2 4 5], [0 3 4 5], [1 2 3 4], [1 2 3 5], [1 2 4 5], [1 3 4 5], [2 3 4 5] Signed-off-by: Tim <96273851+timtim-git@users.noreply.github.com>
Signed-off-by: Tim <96273851+timtim-git@users.noreply.github.com>
This will fix your build error:
|
Signed-off-by: Tim <96273851+timtim-git@users.noreply.github.com>
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
LGTM
@denyeart let's merge this everywhere |
@Mergifyio backport release-2.4 |
@Mergifyio backport release-2.3 |
@Mergifyio backport release-2.2 |
@Mergifyio backport release-2.1 |
@Mergifyio backport release-1.4 |
✅ Backports have been created
|
* - Fix failure to generate all possible combinations Bug happens when the endorsement policy is set to k-out-of-n where (n - k) > 1. For example, when there are 6 organizations and the endorsement policy is set to majority (i.e. 4-out-of-6). The combinations calculated by chooseKoutOfN() in original code are as below. [0 1 2 5], [0 1 2 5], [0 1 2 5], [0 1 3 5], [0 1 3 5], [0 1 4 5], [0 2 3 5], [0 2 3 5], [0 2 4 5], [0 3 4 5], [1 2 3 5], [1 2 3 5], [1 2 4 5], [1 3 4 5], [2 3 4 5] Obviously, the function fails to find out all the possible combinations. Some of the combinations are overrided by child's call. This bug would trigger below error sometimes when the alive peers are not within the above combinations. [discovery] chaincodeQuery -> ERRO 13a Failed constructing descriptor for chaincode chaincodes:<name:"XXXX" > ,: no peer combination can satisfy the endorsement policy To fix it, the last line of choose() should be changed to pass a copy of "currentSubGroup" to the recursive call instead, i.e. choose(n, targetAmount, i+1, append(make([]int, 0), currentSubGroup...), subGroups) After applying the fix, the resulting combinations generated should be corrected as below. [0 1 2 3], [0 1 2 4], [0 1 2 5], [0 1 3 4], [0 1 3 5], [0 1 4 5], [0 2 3 4], [0 2 3 5], [0 2 4 5], [0 3 4 5], [1 2 3 4], [1 2 3 5], [1 2 4 5], [1 3 4 5], [2 3 4 5] Signed-off-by: Tim <96273851+timtim-git@users.noreply.github.com> * - Fix failure to generate all possible combinations Bug happens when the endorsement policy is set to k-out-of-n where (n - k) > 1. For example, when there are 6 organizations and the endorsement policy is set to majority (i.e. 4-out-of-6). The combinations calculated by chooseKoutOfN() in original code are as below. [0 1 2 5], [0 1 2 5], [0 1 2 5], [0 1 3 5], [0 1 3 5], [0 1 4 5], [0 2 3 5], [0 2 3 5], [0 2 4 5], [0 3 4 5], [1 2 3 5], [1 2 3 5], [1 2 4 5], [1 3 4 5], [2 3 4 5] Obviously, the function fails to find out all the possible combinations. Some of the combinations are overrided by child's call. This bug would trigger below error sometimes when the alive peers are not within the above combinations. [discovery] chaincodeQuery -> ERRO 13a Failed constructing descriptor for chaincode chaincodes:<name:"XXXX" > ,: no peer combination can satisfy the endorsement policy To fix it, the last line of choose() should be changed to pass a copy of "currentSubGroup" to the recursive call instead, i.e. choose(n, targetAmount, i+1, append(make([]int, 0), currentSubGroup...), subGroups) After applying the fix, the resulting combinations generated should be corrected as below. [0 1 2 3], [0 1 2 4], [0 1 2 5], [0 1 3 4], [0 1 3 5], [0 1 4 5], [0 2 3 4], [0 2 3 5], [0 2 4 5], [0 3 4 5], [1 2 3 4], [1 2 3 5], [1 2 4 5], [1 3 4 5], [2 3 4 5] Signed-off-by: Tim <96273851+timtim-git@users.noreply.github.com> * - Update choose_test.go Signed-off-by: Tim <96273851+timtim-git@users.noreply.github.com> * - Fix build error Signed-off-by: Tim <96273851+timtim-git@users.noreply.github.com> (cherry picked from commit 21a17ee)
* - Fix failure to generate all possible combinations Bug happens when the endorsement policy is set to k-out-of-n where (n - k) > 1. For example, when there are 6 organizations and the endorsement policy is set to majority (i.e. 4-out-of-6). The combinations calculated by chooseKoutOfN() in original code are as below. [0 1 2 5], [0 1 2 5], [0 1 2 5], [0 1 3 5], [0 1 3 5], [0 1 4 5], [0 2 3 5], [0 2 3 5], [0 2 4 5], [0 3 4 5], [1 2 3 5], [1 2 3 5], [1 2 4 5], [1 3 4 5], [2 3 4 5] Obviously, the function fails to find out all the possible combinations. Some of the combinations are overrided by child's call. This bug would trigger below error sometimes when the alive peers are not within the above combinations. [discovery] chaincodeQuery -> ERRO 13a Failed constructing descriptor for chaincode chaincodes:<name:"XXXX" > ,: no peer combination can satisfy the endorsement policy To fix it, the last line of choose() should be changed to pass a copy of "currentSubGroup" to the recursive call instead, i.e. choose(n, targetAmount, i+1, append(make([]int, 0), currentSubGroup...), subGroups) After applying the fix, the resulting combinations generated should be corrected as below. [0 1 2 3], [0 1 2 4], [0 1 2 5], [0 1 3 4], [0 1 3 5], [0 1 4 5], [0 2 3 4], [0 2 3 5], [0 2 4 5], [0 3 4 5], [1 2 3 4], [1 2 3 5], [1 2 4 5], [1 3 4 5], [2 3 4 5] Signed-off-by: Tim <96273851+timtim-git@users.noreply.github.com> * - Fix failure to generate all possible combinations Bug happens when the endorsement policy is set to k-out-of-n where (n - k) > 1. For example, when there are 6 organizations and the endorsement policy is set to majority (i.e. 4-out-of-6). The combinations calculated by chooseKoutOfN() in original code are as below. [0 1 2 5], [0 1 2 5], [0 1 2 5], [0 1 3 5], [0 1 3 5], [0 1 4 5], [0 2 3 5], [0 2 3 5], [0 2 4 5], [0 3 4 5], [1 2 3 5], [1 2 3 5], [1 2 4 5], [1 3 4 5], [2 3 4 5] Obviously, the function fails to find out all the possible combinations. Some of the combinations are overrided by child's call. This bug would trigger below error sometimes when the alive peers are not within the above combinations. [discovery] chaincodeQuery -> ERRO 13a Failed constructing descriptor for chaincode chaincodes:<name:"XXXX" > ,: no peer combination can satisfy the endorsement policy To fix it, the last line of choose() should be changed to pass a copy of "currentSubGroup" to the recursive call instead, i.e. choose(n, targetAmount, i+1, append(make([]int, 0), currentSubGroup...), subGroups) After applying the fix, the resulting combinations generated should be corrected as below. [0 1 2 3], [0 1 2 4], [0 1 2 5], [0 1 3 4], [0 1 3 5], [0 1 4 5], [0 2 3 4], [0 2 3 5], [0 2 4 5], [0 3 4 5], [1 2 3 4], [1 2 3 5], [1 2 4 5], [1 3 4 5], [2 3 4 5] Signed-off-by: Tim <96273851+timtim-git@users.noreply.github.com> * - Update choose_test.go Signed-off-by: Tim <96273851+timtim-git@users.noreply.github.com> * - Fix build error Signed-off-by: Tim <96273851+timtim-git@users.noreply.github.com> (cherry picked from commit 21a17ee)
✅ Backports have been created
|
* - Fix failure to generate all possible combinations Bug happens when the endorsement policy is set to k-out-of-n where (n - k) > 1. For example, when there are 6 organizations and the endorsement policy is set to majority (i.e. 4-out-of-6). The combinations calculated by chooseKoutOfN() in original code are as below. [0 1 2 5], [0 1 2 5], [0 1 2 5], [0 1 3 5], [0 1 3 5], [0 1 4 5], [0 2 3 5], [0 2 3 5], [0 2 4 5], [0 3 4 5], [1 2 3 5], [1 2 3 5], [1 2 4 5], [1 3 4 5], [2 3 4 5] Obviously, the function fails to find out all the possible combinations. Some of the combinations are overrided by child's call. This bug would trigger below error sometimes when the alive peers are not within the above combinations. [discovery] chaincodeQuery -> ERRO 13a Failed constructing descriptor for chaincode chaincodes:<name:"XXXX" > ,: no peer combination can satisfy the endorsement policy To fix it, the last line of choose() should be changed to pass a copy of "currentSubGroup" to the recursive call instead, i.e. choose(n, targetAmount, i+1, append(make([]int, 0), currentSubGroup...), subGroups) After applying the fix, the resulting combinations generated should be corrected as below. [0 1 2 3], [0 1 2 4], [0 1 2 5], [0 1 3 4], [0 1 3 5], [0 1 4 5], [0 2 3 4], [0 2 3 5], [0 2 4 5], [0 3 4 5], [1 2 3 4], [1 2 3 5], [1 2 4 5], [1 3 4 5], [2 3 4 5] Signed-off-by: Tim <96273851+timtim-git@users.noreply.github.com> * - Fix failure to generate all possible combinations Bug happens when the endorsement policy is set to k-out-of-n where (n - k) > 1. For example, when there are 6 organizations and the endorsement policy is set to majority (i.e. 4-out-of-6). The combinations calculated by chooseKoutOfN() in original code are as below. [0 1 2 5], [0 1 2 5], [0 1 2 5], [0 1 3 5], [0 1 3 5], [0 1 4 5], [0 2 3 5], [0 2 3 5], [0 2 4 5], [0 3 4 5], [1 2 3 5], [1 2 3 5], [1 2 4 5], [1 3 4 5], [2 3 4 5] Obviously, the function fails to find out all the possible combinations. Some of the combinations are overrided by child's call. This bug would trigger below error sometimes when the alive peers are not within the above combinations. [discovery] chaincodeQuery -> ERRO 13a Failed constructing descriptor for chaincode chaincodes:<name:"XXXX" > ,: no peer combination can satisfy the endorsement policy To fix it, the last line of choose() should be changed to pass a copy of "currentSubGroup" to the recursive call instead, i.e. choose(n, targetAmount, i+1, append(make([]int, 0), currentSubGroup...), subGroups) After applying the fix, the resulting combinations generated should be corrected as below. [0 1 2 3], [0 1 2 4], [0 1 2 5], [0 1 3 4], [0 1 3 5], [0 1 4 5], [0 2 3 4], [0 2 3 5], [0 2 4 5], [0 3 4 5], [1 2 3 4], [1 2 3 5], [1 2 4 5], [1 3 4 5], [2 3 4 5] Signed-off-by: Tim <96273851+timtim-git@users.noreply.github.com> * - Update choose_test.go Signed-off-by: Tim <96273851+timtim-git@users.noreply.github.com> * - Fix build error Signed-off-by: Tim <96273851+timtim-git@users.noreply.github.com> (cherry picked from commit 21a17ee)
✅ Backports have been created
|
* - Fix failure to generate all possible combinations Bug happens when the endorsement policy is set to k-out-of-n where (n - k) > 1. For example, when there are 6 organizations and the endorsement policy is set to majority (i.e. 4-out-of-6). The combinations calculated by chooseKoutOfN() in original code are as below. [0 1 2 5], [0 1 2 5], [0 1 2 5], [0 1 3 5], [0 1 3 5], [0 1 4 5], [0 2 3 5], [0 2 3 5], [0 2 4 5], [0 3 4 5], [1 2 3 5], [1 2 3 5], [1 2 4 5], [1 3 4 5], [2 3 4 5] Obviously, the function fails to find out all the possible combinations. Some of the combinations are overrided by child's call. This bug would trigger below error sometimes when the alive peers are not within the above combinations. [discovery] chaincodeQuery -> ERRO 13a Failed constructing descriptor for chaincode chaincodes:<name:"XXXX" > ,: no peer combination can satisfy the endorsement policy To fix it, the last line of choose() should be changed to pass a copy of "currentSubGroup" to the recursive call instead, i.e. choose(n, targetAmount, i+1, append(make([]int, 0), currentSubGroup...), subGroups) After applying the fix, the resulting combinations generated should be corrected as below. [0 1 2 3], [0 1 2 4], [0 1 2 5], [0 1 3 4], [0 1 3 5], [0 1 4 5], [0 2 3 4], [0 2 3 5], [0 2 4 5], [0 3 4 5], [1 2 3 4], [1 2 3 5], [1 2 4 5], [1 3 4 5], [2 3 4 5] Signed-off-by: Tim <96273851+timtim-git@users.noreply.github.com> * - Fix failure to generate all possible combinations Bug happens when the endorsement policy is set to k-out-of-n where (n - k) > 1. For example, when there are 6 organizations and the endorsement policy is set to majority (i.e. 4-out-of-6). The combinations calculated by chooseKoutOfN() in original code are as below. [0 1 2 5], [0 1 2 5], [0 1 2 5], [0 1 3 5], [0 1 3 5], [0 1 4 5], [0 2 3 5], [0 2 3 5], [0 2 4 5], [0 3 4 5], [1 2 3 5], [1 2 3 5], [1 2 4 5], [1 3 4 5], [2 3 4 5] Obviously, the function fails to find out all the possible combinations. Some of the combinations are overrided by child's call. This bug would trigger below error sometimes when the alive peers are not within the above combinations. [discovery] chaincodeQuery -> ERRO 13a Failed constructing descriptor for chaincode chaincodes:<name:"XXXX" > ,: no peer combination can satisfy the endorsement policy To fix it, the last line of choose() should be changed to pass a copy of "currentSubGroup" to the recursive call instead, i.e. choose(n, targetAmount, i+1, append(make([]int, 0), currentSubGroup...), subGroups) After applying the fix, the resulting combinations generated should be corrected as below. [0 1 2 3], [0 1 2 4], [0 1 2 5], [0 1 3 4], [0 1 3 5], [0 1 4 5], [0 2 3 4], [0 2 3 5], [0 2 4 5], [0 3 4 5], [1 2 3 4], [1 2 3 5], [1 2 4 5], [1 3 4 5], [2 3 4 5] Signed-off-by: Tim <96273851+timtim-git@users.noreply.github.com> * - Update choose_test.go Signed-off-by: Tim <96273851+timtim-git@users.noreply.github.com> * - Fix build error Signed-off-by: Tim <96273851+timtim-git@users.noreply.github.com> (cherry picked from commit 21a17ee)
✅ Backports have been created
|
* - Fix failure to generate all possible combinations Bug happens when the endorsement policy is set to k-out-of-n where (n - k) > 1. For example, when there are 6 organizations and the endorsement policy is set to majority (i.e. 4-out-of-6). The combinations calculated by chooseKoutOfN() in original code are as below. [0 1 2 5], [0 1 2 5], [0 1 2 5], [0 1 3 5], [0 1 3 5], [0 1 4 5], [0 2 3 5], [0 2 3 5], [0 2 4 5], [0 3 4 5], [1 2 3 5], [1 2 3 5], [1 2 4 5], [1 3 4 5], [2 3 4 5] Obviously, the function fails to find out all the possible combinations. Some of the combinations are overrided by child's call. This bug would trigger below error sometimes when the alive peers are not within the above combinations. [discovery] chaincodeQuery -> ERRO 13a Failed constructing descriptor for chaincode chaincodes:<name:"XXXX" > ,: no peer combination can satisfy the endorsement policy To fix it, the last line of choose() should be changed to pass a copy of "currentSubGroup" to the recursive call instead, i.e. choose(n, targetAmount, i+1, append(make([]int, 0), currentSubGroup...), subGroups) After applying the fix, the resulting combinations generated should be corrected as below. [0 1 2 3], [0 1 2 4], [0 1 2 5], [0 1 3 4], [0 1 3 5], [0 1 4 5], [0 2 3 4], [0 2 3 5], [0 2 4 5], [0 3 4 5], [1 2 3 4], [1 2 3 5], [1 2 4 5], [1 3 4 5], [2 3 4 5] Signed-off-by: Tim <96273851+timtim-git@users.noreply.github.com> * - Fix failure to generate all possible combinations Bug happens when the endorsement policy is set to k-out-of-n where (n - k) > 1. For example, when there are 6 organizations and the endorsement policy is set to majority (i.e. 4-out-of-6). The combinations calculated by chooseKoutOfN() in original code are as below. [0 1 2 5], [0 1 2 5], [0 1 2 5], [0 1 3 5], [0 1 3 5], [0 1 4 5], [0 2 3 5], [0 2 3 5], [0 2 4 5], [0 3 4 5], [1 2 3 5], [1 2 3 5], [1 2 4 5], [1 3 4 5], [2 3 4 5] Obviously, the function fails to find out all the possible combinations. Some of the combinations are overrided by child's call. This bug would trigger below error sometimes when the alive peers are not within the above combinations. [discovery] chaincodeQuery -> ERRO 13a Failed constructing descriptor for chaincode chaincodes:<name:"XXXX" > ,: no peer combination can satisfy the endorsement policy To fix it, the last line of choose() should be changed to pass a copy of "currentSubGroup" to the recursive call instead, i.e. choose(n, targetAmount, i+1, append(make([]int, 0), currentSubGroup...), subGroups) After applying the fix, the resulting combinations generated should be corrected as below. [0 1 2 3], [0 1 2 4], [0 1 2 5], [0 1 3 4], [0 1 3 5], [0 1 4 5], [0 2 3 4], [0 2 3 5], [0 2 4 5], [0 3 4 5], [1 2 3 4], [1 2 3 5], [1 2 4 5], [1 3 4 5], [2 3 4 5] Signed-off-by: Tim <96273851+timtim-git@users.noreply.github.com> * - Update choose_test.go Signed-off-by: Tim <96273851+timtim-git@users.noreply.github.com> * - Fix build error Signed-off-by: Tim <96273851+timtim-git@users.noreply.github.com> (cherry picked from commit 21a17ee)
✅ Backports have been created
|
…dger#3132) * - Fix failure to generate all possible combinations Bug happens when the endorsement policy is set to k-out-of-n where (n - k) > 1. For example, when there are 6 organizations and the endorsement policy is set to majority (i.e. 4-out-of-6). The combinations calculated by chooseKoutOfN() in original code are as below. [0 1 2 5], [0 1 2 5], [0 1 2 5], [0 1 3 5], [0 1 3 5], [0 1 4 5], [0 2 3 5], [0 2 3 5], [0 2 4 5], [0 3 4 5], [1 2 3 5], [1 2 3 5], [1 2 4 5], [1 3 4 5], [2 3 4 5] Obviously, the function fails to find out all the possible combinations. Some of the combinations are overrided by child's call. This bug would trigger below error sometimes when the alive peers are not within the above combinations. [discovery] chaincodeQuery -> ERRO 13a Failed constructing descriptor for chaincode chaincodes:<name:"XXXX" > ,: no peer combination can satisfy the endorsement policy To fix it, the last line of choose() should be changed to pass a copy of "currentSubGroup" to the recursive call instead, i.e. choose(n, targetAmount, i+1, append(make([]int, 0), currentSubGroup...), subGroups) After applying the fix, the resulting combinations generated should be corrected as below. [0 1 2 3], [0 1 2 4], [0 1 2 5], [0 1 3 4], [0 1 3 5], [0 1 4 5], [0 2 3 4], [0 2 3 5], [0 2 4 5], [0 3 4 5], [1 2 3 4], [1 2 3 5], [1 2 4 5], [1 3 4 5], [2 3 4 5] Signed-off-by: Tim <96273851+timtim-git@users.noreply.github.com> * - Fix failure to generate all possible combinations Bug happens when the endorsement policy is set to k-out-of-n where (n - k) > 1. For example, when there are 6 organizations and the endorsement policy is set to majority (i.e. 4-out-of-6). The combinations calculated by chooseKoutOfN() in original code are as below. [0 1 2 5], [0 1 2 5], [0 1 2 5], [0 1 3 5], [0 1 3 5], [0 1 4 5], [0 2 3 5], [0 2 3 5], [0 2 4 5], [0 3 4 5], [1 2 3 5], [1 2 3 5], [1 2 4 5], [1 3 4 5], [2 3 4 5] Obviously, the function fails to find out all the possible combinations. Some of the combinations are overrided by child's call. This bug would trigger below error sometimes when the alive peers are not within the above combinations. [discovery] chaincodeQuery -> ERRO 13a Failed constructing descriptor for chaincode chaincodes:<name:"XXXX" > ,: no peer combination can satisfy the endorsement policy To fix it, the last line of choose() should be changed to pass a copy of "currentSubGroup" to the recursive call instead, i.e. choose(n, targetAmount, i+1, append(make([]int, 0), currentSubGroup...), subGroups) After applying the fix, the resulting combinations generated should be corrected as below. [0 1 2 3], [0 1 2 4], [0 1 2 5], [0 1 3 4], [0 1 3 5], [0 1 4 5], [0 2 3 4], [0 2 3 5], [0 2 4 5], [0 3 4 5], [1 2 3 4], [1 2 3 5], [1 2 4 5], [1 3 4 5], [2 3 4 5] Signed-off-by: Tim <96273851+timtim-git@users.noreply.github.com> * - Update choose_test.go Signed-off-by: Tim <96273851+timtim-git@users.noreply.github.com> * - Fix build error Signed-off-by: Tim <96273851+timtim-git@users.noreply.github.com> Signed-off-by: David Enyeart <enyeart@us.ibm.com>
* - Fix failure to generate all possible combinations Bug happens when the endorsement policy is set to k-out-of-n where (n - k) > 1. For example, when there are 6 organizations and the endorsement policy is set to majority (i.e. 4-out-of-6). The combinations calculated by chooseKoutOfN() in original code are as below. [0 1 2 5], [0 1 2 5], [0 1 2 5], [0 1 3 5], [0 1 3 5], [0 1 4 5], [0 2 3 5], [0 2 3 5], [0 2 4 5], [0 3 4 5], [1 2 3 5], [1 2 3 5], [1 2 4 5], [1 3 4 5], [2 3 4 5] Obviously, the function fails to find out all the possible combinations. Some of the combinations are overrided by child's call. This bug would trigger below error sometimes when the alive peers are not within the above combinations. [discovery] chaincodeQuery -> ERRO 13a Failed constructing descriptor for chaincode chaincodes:<name:"XXXX" > ,: no peer combination can satisfy the endorsement policy To fix it, the last line of choose() should be changed to pass a copy of "currentSubGroup" to the recursive call instead, i.e. choose(n, targetAmount, i+1, append(make([]int, 0), currentSubGroup...), subGroups) After applying the fix, the resulting combinations generated should be corrected as below. [0 1 2 3], [0 1 2 4], [0 1 2 5], [0 1 3 4], [0 1 3 5], [0 1 4 5], [0 2 3 4], [0 2 3 5], [0 2 4 5], [0 3 4 5], [1 2 3 4], [1 2 3 5], [1 2 4 5], [1 3 4 5], [2 3 4 5] Signed-off-by: Tim <96273851+timtim-git@users.noreply.github.com> * - Fix failure to generate all possible combinations Bug happens when the endorsement policy is set to k-out-of-n where (n - k) > 1. For example, when there are 6 organizations and the endorsement policy is set to majority (i.e. 4-out-of-6). The combinations calculated by chooseKoutOfN() in original code are as below. [0 1 2 5], [0 1 2 5], [0 1 2 5], [0 1 3 5], [0 1 3 5], [0 1 4 5], [0 2 3 5], [0 2 3 5], [0 2 4 5], [0 3 4 5], [1 2 3 5], [1 2 3 5], [1 2 4 5], [1 3 4 5], [2 3 4 5] Obviously, the function fails to find out all the possible combinations. Some of the combinations are overrided by child's call. This bug would trigger below error sometimes when the alive peers are not within the above combinations. [discovery] chaincodeQuery -> ERRO 13a Failed constructing descriptor for chaincode chaincodes:<name:"XXXX" > ,: no peer combination can satisfy the endorsement policy To fix it, the last line of choose() should be changed to pass a copy of "currentSubGroup" to the recursive call instead, i.e. choose(n, targetAmount, i+1, append(make([]int, 0), currentSubGroup...), subGroups) After applying the fix, the resulting combinations generated should be corrected as below. [0 1 2 3], [0 1 2 4], [0 1 2 5], [0 1 3 4], [0 1 3 5], [0 1 4 5], [0 2 3 4], [0 2 3 5], [0 2 4 5], [0 3 4 5], [1 2 3 4], [1 2 3 5], [1 2 4 5], [1 3 4 5], [2 3 4 5] Signed-off-by: Tim <96273851+timtim-git@users.noreply.github.com> * - Update choose_test.go Signed-off-by: Tim <96273851+timtim-git@users.noreply.github.com> * - Fix build error Signed-off-by: Tim <96273851+timtim-git@users.noreply.github.com> (cherry picked from commit 21a17ee)
* - Fix failure to generate all possible combinations Bug happens when the endorsement policy is set to k-out-of-n where (n - k) > 1. For example, when there are 6 organizations and the endorsement policy is set to majority (i.e. 4-out-of-6). The combinations calculated by chooseKoutOfN() in original code are as below. [0 1 2 5], [0 1 2 5], [0 1 2 5], [0 1 3 5], [0 1 3 5], [0 1 4 5], [0 2 3 5], [0 2 3 5], [0 2 4 5], [0 3 4 5], [1 2 3 5], [1 2 3 5], [1 2 4 5], [1 3 4 5], [2 3 4 5] Obviously, the function fails to find out all the possible combinations. Some of the combinations are overrided by child's call. This bug would trigger below error sometimes when the alive peers are not within the above combinations. [discovery] chaincodeQuery -> ERRO 13a Failed constructing descriptor for chaincode chaincodes:<name:"XXXX" > ,: no peer combination can satisfy the endorsement policy To fix it, the last line of choose() should be changed to pass a copy of "currentSubGroup" to the recursive call instead, i.e. choose(n, targetAmount, i+1, append(make([]int, 0), currentSubGroup...), subGroups) After applying the fix, the resulting combinations generated should be corrected as below. [0 1 2 3], [0 1 2 4], [0 1 2 5], [0 1 3 4], [0 1 3 5], [0 1 4 5], [0 2 3 4], [0 2 3 5], [0 2 4 5], [0 3 4 5], [1 2 3 4], [1 2 3 5], [1 2 4 5], [1 3 4 5], [2 3 4 5] Signed-off-by: Tim <96273851+timtim-git@users.noreply.github.com> * - Fix failure to generate all possible combinations Bug happens when the endorsement policy is set to k-out-of-n where (n - k) > 1. For example, when there are 6 organizations and the endorsement policy is set to majority (i.e. 4-out-of-6). The combinations calculated by chooseKoutOfN() in original code are as below. [0 1 2 5], [0 1 2 5], [0 1 2 5], [0 1 3 5], [0 1 3 5], [0 1 4 5], [0 2 3 5], [0 2 3 5], [0 2 4 5], [0 3 4 5], [1 2 3 5], [1 2 3 5], [1 2 4 5], [1 3 4 5], [2 3 4 5] Obviously, the function fails to find out all the possible combinations. Some of the combinations are overrided by child's call. This bug would trigger below error sometimes when the alive peers are not within the above combinations. [discovery] chaincodeQuery -> ERRO 13a Failed constructing descriptor for chaincode chaincodes:<name:"XXXX" > ,: no peer combination can satisfy the endorsement policy To fix it, the last line of choose() should be changed to pass a copy of "currentSubGroup" to the recursive call instead, i.e. choose(n, targetAmount, i+1, append(make([]int, 0), currentSubGroup...), subGroups) After applying the fix, the resulting combinations generated should be corrected as below. [0 1 2 3], [0 1 2 4], [0 1 2 5], [0 1 3 4], [0 1 3 5], [0 1 4 5], [0 2 3 4], [0 2 3 5], [0 2 4 5], [0 3 4 5], [1 2 3 4], [1 2 3 5], [1 2 4 5], [1 3 4 5], [2 3 4 5] Signed-off-by: Tim <96273851+timtim-git@users.noreply.github.com> * - Update choose_test.go Signed-off-by: Tim <96273851+timtim-git@users.noreply.github.com> * - Fix build error Signed-off-by: Tim <96273851+timtim-git@users.noreply.github.com> (cherry picked from commit 21a17ee)
…3150) * - Fix failure to generate all possible combinations Bug happens when the endorsement policy is set to k-out-of-n where (n - k) > 1. For example, when there are 6 organizations and the endorsement policy is set to majority (i.e. 4-out-of-6). The combinations calculated by chooseKoutOfN() in original code are as below. [0 1 2 5], [0 1 2 5], [0 1 2 5], [0 1 3 5], [0 1 3 5], [0 1 4 5], [0 2 3 5], [0 2 3 5], [0 2 4 5], [0 3 4 5], [1 2 3 5], [1 2 3 5], [1 2 4 5], [1 3 4 5], [2 3 4 5] Obviously, the function fails to find out all the possible combinations. Some of the combinations are overrided by child's call. This bug would trigger below error sometimes when the alive peers are not within the above combinations. [discovery] chaincodeQuery -> ERRO 13a Failed constructing descriptor for chaincode chaincodes:<name:"XXXX" > ,: no peer combination can satisfy the endorsement policy To fix it, the last line of choose() should be changed to pass a copy of "currentSubGroup" to the recursive call instead, i.e. choose(n, targetAmount, i+1, append(make([]int, 0), currentSubGroup...), subGroups) After applying the fix, the resulting combinations generated should be corrected as below. [0 1 2 3], [0 1 2 4], [0 1 2 5], [0 1 3 4], [0 1 3 5], [0 1 4 5], [0 2 3 4], [0 2 3 5], [0 2 4 5], [0 3 4 5], [1 2 3 4], [1 2 3 5], [1 2 4 5], [1 3 4 5], [2 3 4 5] Signed-off-by: Tim <96273851+timtim-git@users.noreply.github.com> * - Fix failure to generate all possible combinations Bug happens when the endorsement policy is set to k-out-of-n where (n - k) > 1. For example, when there are 6 organizations and the endorsement policy is set to majority (i.e. 4-out-of-6). The combinations calculated by chooseKoutOfN() in original code are as below. [0 1 2 5], [0 1 2 5], [0 1 2 5], [0 1 3 5], [0 1 3 5], [0 1 4 5], [0 2 3 5], [0 2 3 5], [0 2 4 5], [0 3 4 5], [1 2 3 5], [1 2 3 5], [1 2 4 5], [1 3 4 5], [2 3 4 5] Obviously, the function fails to find out all the possible combinations. Some of the combinations are overrided by child's call. This bug would trigger below error sometimes when the alive peers are not within the above combinations. [discovery] chaincodeQuery -> ERRO 13a Failed constructing descriptor for chaincode chaincodes:<name:"XXXX" > ,: no peer combination can satisfy the endorsement policy To fix it, the last line of choose() should be changed to pass a copy of "currentSubGroup" to the recursive call instead, i.e. choose(n, targetAmount, i+1, append(make([]int, 0), currentSubGroup...), subGroups) After applying the fix, the resulting combinations generated should be corrected as below. [0 1 2 3], [0 1 2 4], [0 1 2 5], [0 1 3 4], [0 1 3 5], [0 1 4 5], [0 2 3 4], [0 2 3 5], [0 2 4 5], [0 3 4 5], [1 2 3 4], [1 2 3 5], [1 2 4 5], [1 3 4 5], [2 3 4 5] Signed-off-by: Tim <96273851+timtim-git@users.noreply.github.com> * - Update choose_test.go Signed-off-by: Tim <96273851+timtim-git@users.noreply.github.com> * - Fix build error Signed-off-by: Tim <96273851+timtim-git@users.noreply.github.com> Signed-off-by: David Enyeart <enyeart@us.ibm.com> Co-authored-by: Tim <96273851+timtim-git@users.noreply.github.com>
Type of change
Description
Bug happens when the endorsement policy is set to k-out-of-n where (n - k) > 1.
For example, when there are 6 organizations and the endorsement policy is set
to majority (i.e. 4-out-of-6). The combinations calculated by chooseKoutOfN()
in original code are as below.
[0 1 2 5], [0 1 2 5], [0 1 2 5], [0 1 3 5],
[0 1 3 5], [0 1 4 5], [0 2 3 5], [0 2 3 5],
[0 2 4 5], [0 3 4 5], [1 2 3 5], [1 2 3 5],
[1 2 4 5], [1 3 4 5], [2 3 4 5]
Obviously, the function fails to find out all the possible combinations. Some of
the combinations are overrided by child's call. This bug would trigger below
error sometimes when the alive peers are not within the above combinations.
To fix it, the last line of choose() should be changed to pass a copy of
"currentSubGroup" to the recursive call instead, i.e.
After applying the fix, the resulting combinations generated should be corrected
as below.
[0 1 2 3], [0 1 2 4], [0 1 2 5], [0 1 3 4],
[0 1 3 5], [0 1 4 5], [0 2 3 4], [0 2 3 5],
[0 2 4 5], [0 3 4 5], [1 2 3 4], [1 2 3 5],
[1 2 4 5], [1 3 4 5], [2 3 4 5]