Merge branch '1.7'

Project: http://git-wip-us.apache.org/repos/asf/accumulo/repo
Commit: http://git-wip-us.apache.org/repos/asf/accumulo/commit/ef39c1aa
Tree: http://git-wip-us.apache.org/repos/asf/accumulo/tree/ef39c1aa
Diff: http://git-wip-us.apache.org/repos/asf/accumulo/diff/ef39c1aa

Branch: refs/heads/master
Commit: ef39c1aaeadb3b12cd90262f5c6f85e2d02a719d
Parents: 584b812 c37ba87
Author: Dave Marion <dlmar...@apache.org>
Authored: Thu Apr 14 16:12:42 2016 -0400
Committer: Dave Marion <dlmar...@apache.org>
Committed: Thu Apr 14 16:12:42 2016 -0400

----------------------------------------------------------------------
 .../balancer/HostRegexTableLoadBalancer.java    | 136 ++++++---
 .../BaseHostRegexTableLoadBalancerTest.java     | 289 +++++++++++++++++++
 ...gexTableLoadBalancerReconfigurationTest.java | 106 +++++++
 .../HostRegexTableLoadBalancerTest.java         | 259 +----------------
 4 files changed, 498 insertions(+), 292 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/accumulo/blob/ef39c1aa/server/base/src/main/java/org/apache/accumulo/server/master/balancer/HostRegexTableLoadBalancer.java
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/accumulo/blob/ef39c1aa/server/base/src/test/java/org/apache/accumulo/server/master/balancer/BaseHostRegexTableLoadBalancerTest.java
----------------------------------------------------------------------
diff --cc 
server/base/src/test/java/org/apache/accumulo/server/master/balancer/BaseHostRegexTableLoadBalancerTest.java
index 0000000,aa1480f..4ac08d2
mode 000000,100644..100644
--- 
a/server/base/src/test/java/org/apache/accumulo/server/master/balancer/BaseHostRegexTableLoadBalancerTest.java
+++ 
b/server/base/src/test/java/org/apache/accumulo/server/master/balancer/BaseHostRegexTableLoadBalancerTest.java
@@@ -1,0 -1,289 +1,289 @@@
+ /*
+  * Licensed to the Apache Software Foundation (ASF) under one or more
+  * contributor license agreements.  See the NOTICE file distributed with
+  * this work for additional information regarding copyright ownership.
+  * The ASF licenses this file to You under the Apache License, Version 2.0
+  * (the "License"); you may not use this file except in compliance with
+  * the License.  You may obtain a copy of the License at
+  *
+  *     http://www.apache.org/licenses/LICENSE-2.0
+  *
+  * Unless required by applicable law or agreed to in writing, software
+  * distributed under the License is distributed on an "AS IS" BASIS,
+  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  * See the License for the specific language governing permissions and
+  * limitations under the License.
+  */
+ package org.apache.accumulo.server.master.balancer;
+ 
+ import java.net.UnknownHostException;
+ import java.nio.ByteBuffer;
+ import java.util.ArrayList;
+ import java.util.HashMap;
+ import java.util.List;
+ import java.util.Map;
+ import java.util.SortedMap;
+ import java.util.TreeMap;
+ import java.util.Map.Entry;
+ 
+ import org.apache.accumulo.core.client.AccumuloException;
+ import org.apache.accumulo.core.client.AccumuloSecurityException;
+ import org.apache.accumulo.core.client.Connector;
+ import org.apache.accumulo.core.client.Instance;
+ import org.apache.accumulo.core.client.admin.TableOperations;
+ import org.apache.accumulo.core.client.impl.ClientContext;
+ import org.apache.accumulo.core.client.impl.TableOperationsImpl;
+ import org.apache.accumulo.core.client.security.tokens.AuthenticationToken;
+ import org.apache.accumulo.core.conf.AccumuloConfiguration;
+ import org.apache.accumulo.core.conf.ConfigurationCopy;
+ import org.apache.accumulo.core.conf.Property;
+ import org.apache.accumulo.core.data.impl.KeyExtent;
+ import org.apache.accumulo.core.master.thrift.TabletServerStatus;
+ import org.apache.accumulo.server.conf.ServerConfigurationFactory;
+ import org.apache.accumulo.server.conf.TableConfiguration;
+ import org.apache.accumulo.server.master.state.TServerInstance;
+ import org.apache.hadoop.io.Text;
+ import org.easymock.EasyMock;
+ 
+ import com.google.common.base.Predicate;
+ 
+ public abstract class BaseHostRegexTableLoadBalancerTest extends 
HostRegexTableLoadBalancer {
+ 
+   protected static class TestInstance implements Instance {
+ 
+     @Override
+     public String getRootTabletLocation() {
+       throw new UnsupportedOperationException();
+     }
+ 
+     @Override
+     public List<String> getMasterLocations() {
+       throw new UnsupportedOperationException();
+     }
+ 
+     @Override
+     public String getInstanceID() {
+       return "1111";
+     }
+ 
+     @Override
+     public String getInstanceName() {
+       return "test";
+     }
+ 
+     @Override
+     public String getZooKeepers() {
+       return "";
+     }
+ 
+     @Override
+     public int getZooKeepersSessionTimeOut() {
+       return 30;
+     }
+ 
+     @Override
+     public Connector getConnector(String user, byte[] pass) throws 
AccumuloException, AccumuloSecurityException {
+       throw new UnsupportedOperationException();
+     }
+ 
+     @Override
+     public Connector getConnector(String user, ByteBuffer pass) throws 
AccumuloException, AccumuloSecurityException {
+       throw new UnsupportedOperationException();
+     }
+ 
+     @Override
+     public Connector getConnector(String user, CharSequence pass) throws 
AccumuloException, AccumuloSecurityException {
+       throw new UnsupportedOperationException();
+     }
+ 
+     @Override
+     public AccumuloConfiguration getConfiguration() {
+       throw new UnsupportedOperationException();
+     }
+ 
+     @Override
+     public void setConfiguration(AccumuloConfiguration conf) {}
+ 
+     @Override
+     public Connector getConnector(String principal, AuthenticationToken 
token) throws AccumuloException, AccumuloSecurityException {
+       throw new UnsupportedOperationException();
+     }
+ 
+   }
+ 
+   protected static class Table {
+     private String tableName;
+     private String id;
+ 
+     Table(String tableName, String id) {
+       this.tableName = tableName;
+       this.id = id;
+     }
+ 
+     public String getTableName() {
+       return tableName;
+     }
+ 
+     public String getId() {
+       return id;
+     }
+   }
+ 
+   protected static final HashMap<String,String> DEFAULT_TABLE_PROPERTIES = 
new HashMap<>();
+   {
+     
DEFAULT_TABLE_PROPERTIES.put(HostRegexTableLoadBalancer.HOST_BALANCER_OOB_CHECK_KEY,
 "10s");
+     
DEFAULT_TABLE_PROPERTIES.put(HostRegexTableLoadBalancer.HOST_BALANCER_POOL_RECHECK_KEY,
 "30s");
+     
DEFAULT_TABLE_PROPERTIES.put(HostRegexTableLoadBalancer.HOST_BALANCER_PREFIX + 
FOO.getTableName(), "r01.*");
+     
DEFAULT_TABLE_PROPERTIES.put(HostRegexTableLoadBalancer.HOST_BALANCER_PREFIX + 
BAR.getTableName(), "r02.*");
+   }
+ 
+   protected static class TestServerConfigurationFactory extends 
ServerConfigurationFactory {
+ 
+     public TestServerConfigurationFactory(Instance instance) {
+       super(instance);
+     }
+ 
+     @Override
+     public synchronized AccumuloConfiguration getConfiguration() {
+       return new ConfigurationCopy(DEFAULT_TABLE_PROPERTIES);
+     }
+ 
+     @Override
+     public TableConfiguration getTableConfiguration(String tableId) {
+       return new TableConfiguration(getInstance(), tableId, null) {
+         @Override
+         public String get(Property property) {
+           return DEFAULT_TABLE_PROPERTIES.get(property.name());
+         }
+ 
+         @Override
+         public void getProperties(Map<String,String> props, Predicate<String> 
filter) {
+           for (Entry<String,String> e : DEFAULT_TABLE_PROPERTIES.entrySet()) {
+             if (filter.apply(e.getKey())) {
+               props.put(e.getKey(), e.getValue());
+             }
+           }
+         }
+       };
+     }
+   }
+ 
+   protected static final Table FOO = new Table("foo", "1");
+   protected static final Table BAR = new Table("bar", "2");
+   protected static final Table BAZ = new Table("baz", "3");
+ 
+   protected final TestInstance instance = new TestInstance();
+   protected final TestServerConfigurationFactory factory = new 
TestServerConfigurationFactory(instance);
+   protected final Map<String,String> servers = new HashMap<>(15);
+   protected final SortedMap<TServerInstance,TabletServerStatus> 
allTabletServers = new TreeMap<>();
+   protected final Map<String,List<KeyExtent>> tableExtents = new HashMap<>(3);
+ 
+   {
+     servers.put("192.168.0.1", "r01s01");
+     servers.put("192.168.0.2", "r01s02");
+     servers.put("192.168.0.3", "r01s03");
+     servers.put("192.168.0.4", "r01s04");
+     servers.put("192.168.0.5", "r01s05");
+     servers.put("192.168.0.6", "r02s01");
+     servers.put("192.168.0.7", "r02s02");
+     servers.put("192.168.0.8", "r02s03");
+     servers.put("192.168.0.9", "r02s04");
+     servers.put("192.168.0.10", "r02s05");
+     servers.put("192.168.0.11", "r03s01");
+     servers.put("192.168.0.12", "r03s02");
+     servers.put("192.168.0.13", "r03s03");
+     servers.put("192.168.0.14", "r03s04");
+     servers.put("192.168.0.15", "r03s05");
+ 
+     allTabletServers.put(new TServerInstance("192.168.0.1:9997", 1), new 
TabletServerStatus());
+     allTabletServers.put(new TServerInstance("192.168.0.2:9997", 1), new 
TabletServerStatus());
+     allTabletServers.put(new TServerInstance("192.168.0.3:9997", 1), new 
TabletServerStatus());
+     allTabletServers.put(new TServerInstance("192.168.0.4:9997", 1), new 
TabletServerStatus());
+     allTabletServers.put(new TServerInstance("192.168.0.5:9997", 1), new 
TabletServerStatus());
+     allTabletServers.put(new TServerInstance("192.168.0.6:9997", 1), new 
TabletServerStatus());
+     allTabletServers.put(new TServerInstance("192.168.0.7:9997", 1), new 
TabletServerStatus());
+     allTabletServers.put(new TServerInstance("192.168.0.8:9997", 1), new 
TabletServerStatus());
+     allTabletServers.put(new TServerInstance("192.168.0.9:9997", 1), new 
TabletServerStatus());
+     allTabletServers.put(new TServerInstance("192.168.0.10:9997", 1), new 
TabletServerStatus());
+     allTabletServers.put(new TServerInstance("192.168.0.11:9997", 1), new 
TabletServerStatus());
+     allTabletServers.put(new TServerInstance("192.168.0.12:9997", 1), new 
TabletServerStatus());
+     allTabletServers.put(new TServerInstance("192.168.0.13:9997", 1), new 
TabletServerStatus());
+     allTabletServers.put(new TServerInstance("192.168.0.14:9997", 1), new 
TabletServerStatus());
+     allTabletServers.put(new TServerInstance("192.168.0.15:9997", 1), new 
TabletServerStatus());
+ 
+     tableExtents.put(FOO.getTableName(), new ArrayList<KeyExtent>());
 -    tableExtents.get(FOO.getTableName()).add(new KeyExtent(new 
Text(FOO.getId()), new Text("1"), new Text("0")));
 -    tableExtents.get(FOO.getTableName()).add(new KeyExtent(new 
Text(FOO.getId()), new Text("2"), new Text("1")));
 -    tableExtents.get(FOO.getTableName()).add(new KeyExtent(new 
Text(FOO.getId()), new Text("3"), new Text("2")));
 -    tableExtents.get(FOO.getTableName()).add(new KeyExtent(new 
Text(FOO.getId()), new Text("4"), new Text("3")));
 -    tableExtents.get(FOO.getTableName()).add(new KeyExtent(new 
Text(FOO.getId()), new Text("5"), new Text("4")));
++    tableExtents.get(FOO.getTableName()).add(new KeyExtent(FOO.getId(), new 
Text("1"), new Text("0")));
++    tableExtents.get(FOO.getTableName()).add(new KeyExtent(FOO.getId(), new 
Text("2"), new Text("1")));
++    tableExtents.get(FOO.getTableName()).add(new KeyExtent(FOO.getId(), new 
Text("3"), new Text("2")));
++    tableExtents.get(FOO.getTableName()).add(new KeyExtent(FOO.getId(), new 
Text("4"), new Text("3")));
++    tableExtents.get(FOO.getTableName()).add(new KeyExtent(FOO.getId(), new 
Text("5"), new Text("4")));
+     tableExtents.put(BAR.getTableName(), new ArrayList<KeyExtent>());
 -    tableExtents.get(BAR.getTableName()).add(new KeyExtent(new 
Text(BAR.getId()), new Text("11"), new Text("10")));
 -    tableExtents.get(BAR.getTableName()).add(new KeyExtent(new 
Text(BAR.getId()), new Text("12"), new Text("11")));
 -    tableExtents.get(BAR.getTableName()).add(new KeyExtent(new 
Text(BAR.getId()), new Text("13"), new Text("12")));
 -    tableExtents.get(BAR.getTableName()).add(new KeyExtent(new 
Text(BAR.getId()), new Text("14"), new Text("13")));
 -    tableExtents.get(BAR.getTableName()).add(new KeyExtent(new 
Text(BAR.getId()), new Text("15"), new Text("14")));
++    tableExtents.get(BAR.getTableName()).add(new KeyExtent(BAR.getId(), new 
Text("11"), new Text("10")));
++    tableExtents.get(BAR.getTableName()).add(new KeyExtent(BAR.getId(), new 
Text("12"), new Text("11")));
++    tableExtents.get(BAR.getTableName()).add(new KeyExtent(BAR.getId(), new 
Text("13"), new Text("12")));
++    tableExtents.get(BAR.getTableName()).add(new KeyExtent(BAR.getId(), new 
Text("14"), new Text("13")));
++    tableExtents.get(BAR.getTableName()).add(new KeyExtent(BAR.getId(), new 
Text("15"), new Text("14")));
+     tableExtents.put(BAZ.getTableName(), new ArrayList<KeyExtent>());
 -    tableExtents.get(BAZ.getTableName()).add(new KeyExtent(new 
Text(BAZ.getId()), new Text("21"), new Text("20")));
 -    tableExtents.get(BAZ.getTableName()).add(new KeyExtent(new 
Text(BAZ.getId()), new Text("22"), new Text("21")));
 -    tableExtents.get(BAZ.getTableName()).add(new KeyExtent(new 
Text(BAZ.getId()), new Text("23"), new Text("22")));
 -    tableExtents.get(BAZ.getTableName()).add(new KeyExtent(new 
Text(BAZ.getId()), new Text("24"), new Text("23")));
 -    tableExtents.get(BAZ.getTableName()).add(new KeyExtent(new 
Text(BAZ.getId()), new Text("25"), new Text("24")));
++    tableExtents.get(BAZ.getTableName()).add(new KeyExtent(BAZ.getId(), new 
Text("21"), new Text("20")));
++    tableExtents.get(BAZ.getTableName()).add(new KeyExtent(BAZ.getId(), new 
Text("22"), new Text("21")));
++    tableExtents.get(BAZ.getTableName()).add(new KeyExtent(BAZ.getId(), new 
Text("23"), new Text("22")));
++    tableExtents.get(BAZ.getTableName()).add(new KeyExtent(BAZ.getId(), new 
Text("24"), new Text("23")));
++    tableExtents.get(BAZ.getTableName()).add(new KeyExtent(BAZ.getId(), new 
Text("25"), new Text("24")));
+   }
+ 
+   protected boolean tabletInBounds(KeyExtent ke, TServerInstance tsi) {
+     String tid = ke.getTableId().toString();
+     String host = tsi.host();
+     if (tid.equals("1")
+         && (host.equals("192.168.0.1") || host.equals("192.168.0.2") || 
host.equals("192.168.0.3") || host.equals("192.168.0.4") || 
host.equals("192.168.0.5"))) {
+       return true;
+     } else if (tid.equals("2")
+         && (host.equals("192.168.0.6") || host.equals("192.168.0.7") || 
host.equals("192.168.0.8") || host.equals("192.168.0.9") || 
host.equals("192.168.0.10"))) {
+       return true;
+     } else if (tid.equals("3")
+         && (host.equals("192.168.0.11") || host.equals("192.168.0.12") || 
host.equals("192.168.0.13") || host.equals("192.168.0.14") || host
+             .equals("192.168.0.15"))) {
+       return true;
+     } else {
+       return false;
+     }
+   }
+ 
+   @Override
+   protected TableOperations getTableOperations() {
+     return new TableOperationsImpl(EasyMock.createMock(ClientContext.class)) {
+       @Override
+       public Map<String,String> tableIdMap() {
+         HashMap<String,String> tables = new HashMap<>();
+         tables.put(FOO.getTableName(), FOO.getId());
+         tables.put(BAR.getTableName(), BAR.getId());
+         tables.put(BAZ.getTableName(), BAZ.getId());
+         return tables;
+       }
+     };
+   }
+ 
+   @Override
+   protected TabletBalancer getBalancerForTable(String table) {
+     return new DefaultLoadBalancer();
+   }
+ 
+   @Override
+   protected String getNameFromIp(String hostIp) throws UnknownHostException {
+     if (servers.containsKey(hostIp)) {
+       return servers.get(hostIp);
+     } else {
+       throw new UnknownHostException();
+     }
+   }
+ 
+   protected SortedMap<TServerInstance,TabletServerStatus> createCurrent(int 
numTservers) {
+     String base = "192.168.0.";
+     TreeMap<TServerInstance,TabletServerStatus> current = new TreeMap<>();
+     for (int i = 1; i <= numTservers; i++) {
+       current.put(new TServerInstance(base + i + ":9997", 1), new 
TabletServerStatus());
+     }
+     return current;
+   }
+ 
+ }

Reply via email to