You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@bookkeeper.apache.org by si...@apache.org on 2018/11/22 19:19:06 UTC
[bookkeeper] branch branch-4.8 updated: Remove duplication logic
for 'minNumRacksPerWriteQuorum' handling in
RackawareEnsemblePlacementPolicyImpl
This is an automated email from the ASF dual-hosted git repository.
sijie pushed a commit to branch branch-4.8
in repository https://gitbox.apache.org/repos/asf/bookkeeper.git
The following commit(s) were added to refs/heads/branch-4.8 by this push:
new 7662bf3 Remove duplication logic for 'minNumRacksPerWriteQuorum' handling in RackawareEnsemblePlacementPolicyImpl
7662bf3 is described below
commit 7662bf358d7f4be7508eff2b50c3a6cb0be084f5
Author: Charan Reddy Guttapalem <re...@gmail.com>
AuthorDate: Thu Nov 22 11:18:42 2018 -0800
Remove duplication logic for 'minNumRacksPerWriteQuorum' handling in RackawareEnsemblePlacementPolicyImpl
Descriptions of the changes in this PR:
With this change
https://github.com/apache/bookkeeper/commit/9ba4c4e0d8be770e03110a958fb8b75a65ae0f59
we introduced 'minNumRacksPerWriteQuorum' config option. To handle that, logic is added in
RackawareEnsemblePlacementPolicyImpl.newEnsembleInternal and RackQuorumCoverageSet. But in
retrospect, this is kind of duplicate logic and changes made in RackawareEnsemblePlacementPolicyImpl.newEnsembleInternal
is not really needed, because anyhow 'apply' of predicate (RRTopologyAwareCoverageEnsemble) is called, which calls
'apply' method on all the concerned RackQuorumCoverageSet.
Reviewers: Sijie Guo <si...@apache.org>
This closes #1810 from reddycharan/revertrackawarechanges
(cherry picked from commit 8c65088dcd019fa9fe17d39745ca1400ccf7bbbb)
Signed-off-by: Sijie Guo <si...@apache.org>
---
.../RackawareEnsemblePlacementPolicyImpl.java | 59 +---------------------
.../TestRackawareEnsemblePlacementPolicy.java | 10 ++--
2 files changed, 8 insertions(+), 61 deletions(-)
diff --git a/bookkeeper-server/src/main/java/org/apache/bookkeeper/client/RackawareEnsemblePlacementPolicyImpl.java b/bookkeeper-server/src/main/java/org/apache/bookkeeper/client/RackawareEnsemblePlacementPolicyImpl.java
index 1d587d0..9c0feb7 100644
--- a/bookkeeper-server/src/main/java/org/apache/bookkeeper/client/RackawareEnsemblePlacementPolicyImpl.java
+++ b/bookkeeper-server/src/main/java/org/apache/bookkeeper/client/RackawareEnsemblePlacementPolicyImpl.java
@@ -554,9 +554,7 @@ public class RackawareEnsemblePlacementPolicyImpl extends TopologyAwareEnsembleP
}
return addrs;
}
- // pick nodes by racks, to ensure there is at least write quorum number of racks.
- int idx = 0;
- String[] racks = new String[ensembleSize];
+
for (int i = 0; i < ensembleSize; i++) {
String curRack;
if (null == prevNode) {
@@ -566,64 +564,11 @@ public class RackawareEnsemblePlacementPolicyImpl extends TopologyAwareEnsembleP
curRack = localNode.getNetworkLocation();
}
} else {
- StringBuilder sb = new StringBuilder();
- sb.append("~");
-
- if (writeQuorumSize > 1) {
- /*
- * RackAwareEnsemblePlacementPolicy should try to select
- * bookies from atleast
- * minNumRacksPerWriteQuorumForThisEnsemble number of
- * different racks for a write quorum. So in a
- * WriteQuorum, bookies should be from
- * minNumRacksPerWriteQuorumForThisEnsemble number of
- * racks. So we would add racks of
- * (minNumRacksPerWriteQuorumForThisEnsemble-1)
- * neighbours (both sides) to the exclusion list
- * (~curRack).
- */
- for (int j = 1; j < minNumRacksPerWriteQuorumForThisEnsemble; j++) {
- int nextIndex = i + j;
- if (nextIndex >= ensembleSize) {
- nextIndex %= ensembleSize;
- }
- /*
- * if racks[nextIndex] is null, then it means bookie
- * is not yet selected for ensemble at 'nextIndex'
- * index.
- */
- if (racks[nextIndex] != null) {
- if (!((sb.length() == 1) && (sb.charAt(0) == '~'))) {
- sb.append(NetworkTopologyImpl.NODE_SEPARATOR);
- }
- sb.append(racks[nextIndex]);
- }
- }
-
- for (int j = 1; j < minNumRacksPerWriteQuorumForThisEnsemble; j++) {
- int nextIndex = i - j;
- if (nextIndex < 0) {
- nextIndex += ensembleSize;
- }
- /*
- * if racks[nextIndex] is null, then it means bookie
- * is not yet selected for ensemble at 'nextIndex'
- * index.
- */
- if (racks[nextIndex] != null) {
- if (!((sb.length() == 1) && (sb.charAt(0) == '~'))) {
- sb.append(NetworkTopologyImpl.NODE_SEPARATOR);
- }
- sb.append(racks[nextIndex]);
- }
- }
- }
- curRack = sb.toString();
+ curRack = "~" + prevNode.getNetworkLocation();
}
boolean firstBookieInTheEnsemble = (null == prevNode);
prevNode = selectFromNetworkLocation(curRack, excludeNodes, ensemble, ensemble,
!enforceMinNumRacksPerWriteQuorum || firstBookieInTheEnsemble);
- racks[i] = prevNode.getNetworkLocation();
}
List<BookieSocketAddress> bookieList = ensemble.toList();
if (ensembleSize != bookieList.size()) {
diff --git a/bookkeeper-server/src/test/java/org/apache/bookkeeper/client/TestRackawareEnsemblePlacementPolicy.java b/bookkeeper-server/src/test/java/org/apache/bookkeeper/client/TestRackawareEnsemblePlacementPolicy.java
index dd95b7a..d801044 100644
--- a/bookkeeper-server/src/test/java/org/apache/bookkeeper/client/TestRackawareEnsemblePlacementPolicy.java
+++ b/bookkeeper-server/src/test/java/org/apache/bookkeeper/client/TestRackawareEnsemblePlacementPolicy.java
@@ -1200,12 +1200,12 @@ public class TestRackawareEnsemblePlacementPolicy extends TestCase {
int acqQuorumSize = 2;
List<BookieSocketAddress> ensemble = repp.newEnsemble(ensembleSize, writeQuorumSize, acqQuorumSize,
null, new HashSet<>());
- int numCovered = getNumCoveredWriteQuorums(ensemble, 2, conf.getMinNumRacksPerWriteQuorum());
+ int numCovered = getNumCoveredWriteQuorums(ensemble, writeQuorumSize, conf.getMinNumRacksPerWriteQuorum());
assertTrue(numCovered >= 1 && numCovered < 3);
ensembleSize = 4;
List<BookieSocketAddress> ensemble2 = repp.newEnsemble(ensembleSize, writeQuorumSize, acqQuorumSize,
null, new HashSet<>());
- numCovered = getNumCoveredWriteQuorums(ensemble2, 2, conf.getMinNumRacksPerWriteQuorum());
+ numCovered = getNumCoveredWriteQuorums(ensemble2, writeQuorumSize, conf.getMinNumRacksPerWriteQuorum());
assertTrue(numCovered >= 1 && numCovered < 3);
} catch (BKNotEnoughBookiesException bnebe) {
fail("Should not get not enough bookies exception even there is only one rack.");
@@ -1319,12 +1319,14 @@ public class TestRackawareEnsemblePlacementPolicy extends TestCase {
int ackQuorumSize = 2;
List<BookieSocketAddress> ensemble1 = repp.newEnsemble(ensembleSize, writeQuorumSize, ackQuorumSize,
null, new HashSet<>());
- assertEquals(ensembleSize, getNumCoveredWriteQuorums(ensemble1, 2, conf.getMinNumRacksPerWriteQuorum()));
+ assertEquals(ensembleSize,
+ getNumCoveredWriteQuorums(ensemble1, writeQuorumSize, conf.getMinNumRacksPerWriteQuorum()));
ensembleSize = 4;
writeQuorumSize = 4;
List<BookieSocketAddress> ensemble2 = repp.newEnsemble(ensembleSize, writeQuorumSize, 2, null,
new HashSet<>());
- assertEquals(ensembleSize, getNumCoveredWriteQuorums(ensemble2, 2, conf.getMinNumRacksPerWriteQuorum()));
+ assertEquals(ensembleSize,
+ getNumCoveredWriteQuorums(ensemble2, writeQuorumSize, conf.getMinNumRacksPerWriteQuorum()));
} catch (BKNotEnoughBookiesException bnebe) {
fail("Should not get not enough bookies exception even there is only one rack.");
}