This is an automated email from the ASF dual-hosted git repository.
zhaijia pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/bookkeeper.git
The following commit(s) were added to refs/heads/master by this push:
new d8b894f Ignore usage of localNode in PlacementPolicy.
d8b894f is described below
commit d8b894f3a1a60e6df2071e8d8ca89e3e02ba222a
Author: Charan Reddy Guttapalem <[email protected]>
AuthorDate: Thu Jan 31 02:17:09 2019 -0800
Ignore usage of localNode in PlacementPolicy.
Descriptions of the changes in this PR:
'ignoreLocalNodeInPlacementPolicy' specifies whether to ignore localnode
in the internal logic of placement policy. If it is not possible or useful
to use Bookkeeper client node's (or AutoReplicator) rack/region info. for
placement policy then it is better to ignore localnode instead of false
alarming with error/warn log lines and metrics.
It is not valid to expect rack mapping information to be available for
Bookkeeper
client and ReplicationWorker nodes. So if rackmapping info. is not available
then it is better to ignore creation of BookieNode by resolving rack
information
for the client localnode. Otherwise it would log unnecessary warn/error log
lines
and rack resolution failure metrics.
Reviewers: Sijie Guo <[email protected]>, Jia Zhai <[email protected]>,
Enrico Olivelli <[email protected]>
This closes #1917 from reddycharan/ignorelocalnodeinplacementpolicy
---
.../client/RackawareEnsemblePlacementPolicy.java | 8 +++++---
.../client/RackawareEnsemblePlacementPolicyImpl.java | 19 +++++++++++++------
.../client/RegionAwareEnsemblePlacementPolicy.java | 6 ++++--
.../apache/bookkeeper/conf/AbstractConfiguration.java | 17 +++++++++++++++++
site/_data/config/bk_server.yaml | 4 ++++
5 files changed, 43 insertions(+), 11 deletions(-)
diff --git
a/bookkeeper-server/src/main/java/org/apache/bookkeeper/client/RackawareEnsemblePlacementPolicy.java
b/bookkeeper-server/src/main/java/org/apache/bookkeeper/client/RackawareEnsemblePlacementPolicy.java
index a7cdce4..49e9df5 100644
---
a/bookkeeper-server/src/main/java/org/apache/bookkeeper/client/RackawareEnsemblePlacementPolicy.java
+++
b/bookkeeper-server/src/main/java/org/apache/bookkeeper/client/RackawareEnsemblePlacementPolicy.java
@@ -55,18 +55,20 @@ public class RackawareEnsemblePlacementPolicy extends
RackawareEnsemblePlacement
int
maxWeightMultiple,
int
minNumRacksPerWriteQuorum,
boolean
enforceMinNumRacksPerWriteQuorum,
+ boolean
ignoreLocalNodeInPlacementPolicy,
StatsLogger statsLogger) {
if (stabilizePeriodSeconds > 0) {
super.initialize(dnsResolver, timer, reorderReadsRandom, 0,
reorderThresholdPendingRequests, isWeighted,
- maxWeightMultiple, minNumRacksPerWriteQuorum,
enforceMinNumRacksPerWriteQuorum, statsLogger);
+ maxWeightMultiple, minNumRacksPerWriteQuorum,
enforceMinNumRacksPerWriteQuorum,
+ ignoreLocalNodeInPlacementPolicy, statsLogger);
slave = new
RackawareEnsemblePlacementPolicyImpl(enforceDurability);
slave.initialize(dnsResolver, timer, reorderReadsRandom,
stabilizePeriodSeconds,
reorderThresholdPendingRequests, isWeighted,
maxWeightMultiple, minNumRacksPerWriteQuorum,
- enforceMinNumRacksPerWriteQuorum, statsLogger);
+ enforceMinNumRacksPerWriteQuorum,
ignoreLocalNodeInPlacementPolicy, statsLogger);
} else {
super.initialize(dnsResolver, timer, reorderReadsRandom,
stabilizePeriodSeconds,
reorderThresholdPendingRequests, isWeighted,
maxWeightMultiple, minNumRacksPerWriteQuorum,
- enforceMinNumRacksPerWriteQuorum, statsLogger);
+ enforceMinNumRacksPerWriteQuorum,
ignoreLocalNodeInPlacementPolicy, statsLogger);
slave = null;
}
return this;
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 02cf3c3..304db72 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
@@ -93,6 +93,7 @@ public class RackawareEnsemblePlacementPolicyImpl extends
TopologyAwareEnsembleP
protected int minNumRacksPerWriteQuorum;
protected boolean enforceMinNumRacksPerWriteQuorum;
+ protected boolean ignoreLocalNodeInPlacementPolicy;
public static final String REPP_DNS_RESOLVER_CLASS =
"reppDnsResolverClass";
public static final String REPP_RANDOM_READ_REORDERING =
"ensembleRandomReadReordering";
@@ -274,6 +275,7 @@ public class RackawareEnsemblePlacementPolicyImpl extends
TopologyAwareEnsembleP
int
maxWeightMultiple,
int
minNumRacksPerWriteQuorum,
boolean
enforceMinNumRacksPerWriteQuorum,
+ boolean
ignoreLocalNodeInPlacementPolicy,
StatsLogger
statsLogger) {
checkNotNull(statsLogger, "statsLogger should not be null, use
NullStatsLogger instead.");
this.statsLogger = statsLogger;
@@ -290,6 +292,7 @@ public class RackawareEnsemblePlacementPolicyImpl extends
TopologyAwareEnsembleP
this.timer = timer;
this.minNumRacksPerWriteQuorum = minNumRacksPerWriteQuorum;
this.enforceMinNumRacksPerWriteQuorum =
enforceMinNumRacksPerWriteQuorum;
+ this.ignoreLocalNodeInPlacementPolicy =
ignoreLocalNodeInPlacementPolicy;
// create the network topology
if (stabilizePeriodSeconds > 0) {
@@ -298,12 +301,15 @@ public class RackawareEnsemblePlacementPolicyImpl extends
TopologyAwareEnsembleP
this.topology = new NetworkTopologyImpl();
}
- BookieNode bn;
- try {
- bn = createBookieNode(new
BookieSocketAddress(InetAddress.getLocalHost().getHostAddress(), 0));
- } catch (UnknownHostException e) {
- LOG.error("Failed to get local host address : ", e);
- bn = null;
+ BookieNode bn = null;
+ if (!ignoreLocalNodeInPlacementPolicy) {
+ try {
+ bn = createBookieNode(new
BookieSocketAddress(InetAddress.getLocalHost().getHostAddress(), 0));
+ } catch (UnknownHostException e) {
+ LOG.error("Failed to get local host address : ", e);
+ }
+ } else {
+ LOG.info("Ignoring LocalNode in Placementpolicy");
}
localNode = bn;
LOG.info("Initialize rackaware ensemble placement policy @ {} @ {} :
{}.",
@@ -390,6 +396,7 @@ public class RackawareEnsemblePlacementPolicyImpl extends
TopologyAwareEnsembleP
conf.getBookieMaxWeightMultipleForWeightBasedPlacement(),
conf.getMinNumRacksPerWriteQuorum(),
conf.getEnforceMinNumRacksPerWriteQuorum(),
+ conf.getIgnoreLocalNodeInPlacementPolicy(),
statsLogger);
}
diff --git
a/bookkeeper-server/src/main/java/org/apache/bookkeeper/client/RegionAwareEnsemblePlacementPolicy.java
b/bookkeeper-server/src/main/java/org/apache/bookkeeper/client/RegionAwareEnsemblePlacementPolicy.java
index f91e9ef..cd80fdf 100644
---
a/bookkeeper-server/src/main/java/org/apache/bookkeeper/client/RegionAwareEnsemblePlacementPolicy.java
+++
b/bookkeeper-server/src/main/java/org/apache/bookkeeper/client/RegionAwareEnsemblePlacementPolicy.java
@@ -131,7 +131,8 @@ public class RegionAwareEnsemblePlacementPolicy extends
RackawareEnsemblePlaceme
perRegionPlacement.put(region, new
RackawareEnsemblePlacementPolicy()
.initialize(dnsResolver, timer,
this.reorderReadsRandom, this.stabilizePeriodSeconds,
this.reorderThresholdPendingRequests,
this.isWeighted, this.maxWeightMultiple,
- this.minNumRacksPerWriteQuorum,
this.enforceMinNumRacksPerWriteQuorum, statsLogger)
+ this.minNumRacksPerWriteQuorum,
this.enforceMinNumRacksPerWriteQuorum,
+ this.ignoreLocalNodeInPlacementPolicy,
statsLogger)
.withDefaultRack(NetworkTopology.DEFAULT_REGION_AND_RACK));
}
@@ -180,7 +181,8 @@ public class RegionAwareEnsemblePlacementPolicy extends
RackawareEnsemblePlaceme
perRegionPlacement.put(region, new
RackawareEnsemblePlacementPolicy(true)
.initialize(dnsResolver, timer,
this.reorderReadsRandom, this.stabilizePeriodSeconds,
this.reorderThresholdPendingRequests,
this.isWeighted, this.maxWeightMultiple,
- this.minNumRacksPerWriteQuorum,
this.enforceMinNumRacksPerWriteQuorum, statsLogger)
+ this.minNumRacksPerWriteQuorum,
this.enforceMinNumRacksPerWriteQuorum,
+ this.ignoreLocalNodeInPlacementPolicy,
statsLogger)
.withDefaultRack(NetworkTopology.DEFAULT_REGION_AND_RACK));
}
minRegionsForDurability =
conf.getInt(REPP_MINIMUM_REGIONS_FOR_DURABILITY,
diff --git
a/bookkeeper-server/src/main/java/org/apache/bookkeeper/conf/AbstractConfiguration.java
b/bookkeeper-server/src/main/java/org/apache/bookkeeper/conf/AbstractConfiguration.java
index 36cfa63..87c1f41 100644
---
a/bookkeeper-server/src/main/java/org/apache/bookkeeper/conf/AbstractConfiguration.java
+++
b/bookkeeper-server/src/main/java/org/apache/bookkeeper/conf/AbstractConfiguration.java
@@ -159,6 +159,9 @@ public abstract class AbstractConfiguration<T extends
AbstractConfiguration>
// enforce minimum number of racks per write quorum
public static final String ENFORCE_MIN_NUM_RACKS_PER_WRITE_QUORUM =
"enforceMinNumRacksPerWriteQuorum";
+ // ignore usage of local node in the internal logic of placement policy
+ public static final String IGNORE_LOCAL_NODE_IN_PLACEMENT_POLICY =
"ignoreLocalNodeInPlacementPolicy";
+
// Allocator configuration
protected static final String ALLOCATOR_POOLING_POLICY =
"allocatorPoolingPolicy";
protected static final String ALLOCATOR_POOLING_CONCURRENCY =
"allocatorPoolingConcurrency";
@@ -844,6 +847,20 @@ public abstract class AbstractConfiguration<T extends
AbstractConfiguration>
}
/**
+ * Sets the flag to ignore usage of localnode in placement policy.
+ */
+ public void setIgnoreLocalNodeInPlacementPolicy(boolean
ignoreLocalNodeInPlacementPolicy) {
+ setProperty(IGNORE_LOCAL_NODE_IN_PLACEMENT_POLICY,
ignoreLocalNodeInPlacementPolicy);
+ }
+
+ /**
+ * Whether to ignore localnode in placementpolicy.
+ */
+ public boolean getIgnoreLocalNodeInPlacementPolicy() {
+ return getBoolean(IGNORE_LOCAL_NODE_IN_PLACEMENT_POLICY, false);
+ }
+
+ /**
* Enable the Auditor to use system time as underreplicated ledger mark
* time.
*
diff --git a/site/_data/config/bk_server.yaml b/site/_data/config/bk_server.yaml
index d83a8f1..f74da27 100644
--- a/site/_data/config/bk_server.yaml
+++ b/site/_data/config/bk_server.yaml
@@ -640,6 +640,10 @@ groups:
- param: enforceMinNumRacksPerWriteQuorum
description: |
'enforceMinNumRacksPerWriteQuorum' enforces
RackawareEnsemblePlacementPolicy to pick bookies from
'minNumRacksPerWriteQuorum' racks for a writeQuorum. If it cann't find bookie
then it would throw BKNotEnoughBookiesException instead of picking random one.
+ - param: ignoreLocalNodeInPlacementPolicy
+ description: |
+ 'ignoreLocalNodeInPlacementPolicy' specifies whether to ignore localnode
in the internal logic of placement policy. If it is not possible or useful to
use Bookkeeper client node's (or AutoReplicator) rack/region info. for
placement policy then it is better to ignore localnode instead of false
alarming with log lines and metrics.
+ default: false
- name: AutoRecovery auditor settings
params: