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:

Reply via email to