You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@accumulo.apache.org by ad...@apache.org on 2019/04/18 18:22:49 UTC
[accumulo] branch 1.9 updated: Fix ConcurrentModificationException
in HostRegexTableLoadBalancer (#1107)
This is an automated email from the ASF dual-hosted git repository.
adamjshook pushed a commit to branch 1.9
in repository https://gitbox.apache.org/repos/asf/accumulo.git
The following commit(s) were added to refs/heads/1.9 by this push:
new 570dabd Fix ConcurrentModificationException in HostRegexTableLoadBalancer (#1107)
570dabd is described below
commit 570dabd22a47fdd1332e81e7f53154f3e1da2029
Author: Adam J. Shook <ad...@gmail.com>
AuthorDate: Thu Apr 18 14:22:44 2019 -0400
Fix ConcurrentModificationException in HostRegexTableLoadBalancer (#1107)
---
.../master/balancer/HostRegexTableLoadBalancer.java | 17 +++++++++++------
1 file changed, 11 insertions(+), 6 deletions(-)
diff --git a/server/base/src/main/java/org/apache/accumulo/server/master/balancer/HostRegexTableLoadBalancer.java b/server/base/src/main/java/org/apache/accumulo/server/master/balancer/HostRegexTableLoadBalancer.java
index fb5a600..9f20a13 100644
--- a/server/base/src/main/java/org/apache/accumulo/server/master/balancer/HostRegexTableLoadBalancer.java
+++ b/server/base/src/main/java/org/apache/accumulo/server/master/balancer/HostRegexTableLoadBalancer.java
@@ -51,6 +51,7 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.google.common.collect.HashMultimap;
+import com.google.common.collect.ImmutableMap;
import com.google.common.collect.Iterables;
import com.google.common.collect.Multimap;
@@ -111,8 +112,8 @@ public class HostRegexTableLoadBalancer extends TableLoadBalancer implements Con
private static final long ONE_HOUR = 60 * 60 * 1000;
private static final Set<KeyExtent> EMPTY_MIGRATIONS = Collections.emptySet();
- private Map<String,String> tableIdToTableName = null;
- private Map<String,Pattern> poolNameToRegexPattern = null;
+ private volatile Map<String,String> tableIdToTableName = null;
+ private volatile Map<String,Pattern> poolNameToRegexPattern = null;
private volatile long lastOOBCheck = System.currentTimeMillis();
private volatile boolean isIpBasedRegex = false;
private Map<String,SortedMap<TServerInstance,TabletServerStatus>> pools = new HashMap<>();
@@ -226,10 +227,10 @@ public class HostRegexTableLoadBalancer extends TableLoadBalancer implements Con
if (null == t) {
throw new RuntimeException("Table Operations cannot be null");
}
- tableIdToTableName = new HashMap<>();
- poolNameToRegexPattern = new HashMap<>();
+ Map<String,String> tableIdToTableNameBuilder = new HashMap<>();
+ Map<String,Pattern> poolNameToRegexPatternBuilder = new HashMap<>();
for (Entry<String,String> table : t.tableIdMap().entrySet()) {
- tableIdToTableName.put(table.getValue(), table.getKey());
+ tableIdToTableNameBuilder.put(table.getValue(), table.getKey());
conf.getTableConfiguration(table.getValue()).addObserver(this);
Map<String,String> customProps = conf.getTableConfiguration(table.getValue())
.getAllPropertiesWithPrefix(Property.TABLE_ARBITRARY_PROP_PREFIX);
@@ -244,11 +245,15 @@ public class HostRegexTableLoadBalancer extends TableLoadBalancer implements Con
}
String tableName = customProp.getKey().substring(HOST_BALANCER_PREFIX.length());
String regex = customProp.getValue();
- poolNameToRegexPattern.put(tableName, Pattern.compile(regex));
+ poolNameToRegexPatternBuilder.put(tableName, Pattern.compile(regex));
}
}
}
}
+
+ tableIdToTableName = ImmutableMap.copyOf(tableIdToTableNameBuilder);
+ poolNameToRegexPattern = ImmutableMap.copyOf(poolNameToRegexPatternBuilder);
+
String oobProperty = conf.getConfiguration().get(HOST_BALANCER_OOB_CHECK_KEY);
if (null != oobProperty) {
oobCheckMillis = AccumuloConfiguration.getTimeInMillis(oobProperty);