Skip to content
This repository was archived by the owner on Apr 22, 2025. It is now read-only.

Commit 14dcda8

Browse files
authored
Minor fixes in SDGroup code. (#270)
(cherry picked from commit b026525) Signed-off-by: Ryan Griffiths <[email protected]>
1 parent 48f402c commit 14dcda8

File tree

2 files changed

+46
-3
lines changed

2 files changed

+46
-3
lines changed

src/main/java/org/hyperledger/fabric/sdk/ServiceDiscovery.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1016,14 +1016,14 @@ public Collection<SDEndorser> getEndorsers() {
10161016
boolean ignoreList(Collection<String> names) {
10171017
HashSet<String> bnames = new HashSet<>(names);
10181018
endorsers.removeIf(endorser -> bnames.contains(endorser.getEndpoint()));
1019-
return endorsers.size() >= required;
1019+
return endorsers.size() >= getStillRequired();
10201020
}
10211021

10221022
//returns true if there are still sufficent endorsers for this group.
10231023
boolean ignoreListSDEndorser(Collection<SDEndorser> sdEndorsers) {
10241024
HashSet<SDEndorser> bnames = new HashSet<>(sdEndorsers);
10251025
endorsers.removeIf(bnames::contains);
1026-
return endorsers.size() >= required;
1026+
return endorsers.size() >= getStillRequired();
10271027
}
10281028

10291029
// retrun true if th endorsements have been meet.
@@ -1041,7 +1041,7 @@ boolean endorsedList(Collection<SDEndorser> sdEndorsers) {
10411041

10421042
endorsers.removeIf(endorser -> {
10431043
if (enames.contains(endorser.getEndpoint())) {
1044-
endorsed = Math.min(required, endorsed++);
1044+
endorsed = Math.min(required, endorsed + 1);
10451045
return true; // remove it.
10461046
}
10471047
return false; // needs to stay in the list.

src/test/java/org/hyperledger/fabric/sdk/ServiceDiscoveryTest.java

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@
3232
import static org.hyperledger.fabric.sdk.ServiceDiscovery.SDEndorserState;
3333
import static org.hyperledger.fabric.sdk.ServiceDiscovery.SDLayout;
3434
import static org.junit.Assert.assertEquals;
35+
import static org.junit.Assert.assertFalse;
3536
import static org.junit.Assert.assertSame;
3637
import static org.junit.Assert.assertTrue;
3738

@@ -335,6 +336,48 @@ public void twoLayoutTwoTwoEachExtrasCommonRandom() throws Exception {
335336

336337
}
337338

339+
/**
340+
* Test to ensure layouts and groups are correctly classified
341+
* as (un)satisfied and (un)satisfiable during proposal response
342+
* collection by the methods `endorsedList` and `ignoreListSDEndorser`.
343+
*/
344+
@Test
345+
public void loopGoodAndBadTest() {
346+
347+
// Let's say we have a group with 3 endorsers of which we require 2.
348+
final int requiredInGroup = 2;
349+
SDEndorser endorser1 = new MockSDEndorser("org1", "localhost:81", 0);
350+
SDEndorser endorser2 = new MockSDEndorser("org1", "localhost:82", 0);
351+
SDEndorser endorser3 = new MockSDEndorser("org1", "localhost:83", 0);
352+
LinkedList<SDEndorser> endorsers = new LinkedList<>();
353+
endorsers.add(endorser1);
354+
endorsers.add(endorser2);
355+
endorsers.add(endorser3);
356+
SDLayout layout = new SDLayout();
357+
layout.addGroup("G0", requiredInGroup, endorsers);
358+
SDLayout.SDGroup group = layout.getSDLGroups().iterator().next();
359+
360+
// If 'endorser1' endorses successfully call `endorsedList`,
361+
// the group should not be satisfied as we still require 1 more endorser.
362+
LinkedList<SDEndorser> loopGood = new LinkedList<>();
363+
loopGood.add(endorser1);
364+
assertFalse(layout.endorsedList(loopGood)); // false i.e. not yet satisfied.
365+
assertEquals(1, group.getStillRequired());
366+
367+
// If 'endorser2' fails to endorse call `ignoreListSDEndorser`,
368+
// the group should still be satisfiable as we still have 1 more endorser to try.
369+
LinkedList<SDEndorser> loopBad = new LinkedList<>();
370+
loopBad.add(endorser2);
371+
assertTrue(layout.ignoreListSDEndorser(loopBad)); // true i.e. still possible to satisfy.
372+
assertEquals(1, group.getStillRequired());
373+
374+
// If 'endorser3' endorses, then the group should be satisfied.
375+
loopGood = new LinkedList<>();
376+
loopGood.add(endorser3);
377+
assertTrue(layout.endorsedList(loopGood)); // true i.e .satisfied.
378+
assertEquals(0, group.getStillRequired());
379+
}
380+
338381
private static class MockSDEndorser extends SDEndorser {
339382
private MockSDEndorser(String mspid, String endpoint, long ledgerHeight) {
340383
super();

0 commit comments

Comments
 (0)