Author: ecn Date: Mon Jul 9 17:41:35 2012 New Revision: 1359305 URL: http://svn.apache.org/viewvc?rev=1359305&view=rev Log: ACCUMULO-676 commit to trunk (accidentally committed to ACCUMULO-672 branch)
Added: accumulo/trunk/server/src/main/java/org/apache/accumulo/server/test/randomwalk/concurrent/StartAll.java accumulo/trunk/server/src/main/java/org/apache/accumulo/server/test/randomwalk/concurrent/StopTabletServer.java Modified: accumulo/trunk/ (props changed) accumulo/trunk/core/ (props changed) accumulo/trunk/server/ (props changed) accumulo/trunk/server/src/main/java/org/apache/accumulo/server/master/Master.java accumulo/trunk/server/src/main/java/org/apache/accumulo/server/master/tserverOps/ShutdownTServer.java accumulo/trunk/src/ (props changed) accumulo/trunk/test/system/auto/simple/shutdown.py accumulo/trunk/test/system/randomwalk/conf/modules/Concurrent.xml Propchange: accumulo/trunk/ ------------------------------------------------------------------------------ Merged /accumulo/branches/ACCUMULO-672:r1359163 Propchange: accumulo/trunk/core/ ------------------------------------------------------------------------------ Merged /accumulo/branches/ACCUMULO-672/core:r1359163 Propchange: accumulo/trunk/server/ ------------------------------------------------------------------------------ Merged /accumulo/branches/ACCUMULO-672/server:r1359163 Modified: accumulo/trunk/server/src/main/java/org/apache/accumulo/server/master/Master.java URL: http://svn.apache.org/viewvc/accumulo/trunk/server/src/main/java/org/apache/accumulo/server/master/Master.java?rev=1359305&r1=1359304&r2=1359305&view=diff ============================================================================== --- accumulo/trunk/server/src/main/java/org/apache/accumulo/server/master/Master.java (original) +++ accumulo/trunk/server/src/main/java/org/apache/accumulo/server/master/Master.java Mon Jul 9 17:41:35 2012 @@ -1267,10 +1267,13 @@ public class Master implements LiveTServ private class TabletGroupWatcher extends Daemon { final TabletStateStore store; + final TabletGroupWatcher dependentWatcher; + final TableStats stats = new TableStats(); - TabletGroupWatcher(TabletStateStore store) { + TabletGroupWatcher(TabletStateStore store, TabletGroupWatcher dependentWatcher) { this.store = store; + this.dependentWatcher = dependentWatcher; } Map<Text,TableCounts> getStats() { @@ -1350,6 +1353,15 @@ public class Master implements LiveTServ goal = TabletGoalState.HOSTED; } + // if we are shutting down all the tabletservers, we have to do it in order + if (goal == TabletGoalState.UNASSIGNED && state == TabletState.HOSTED) { + if (serversToShutdown.equals(currentTServers.keySet())) { + if (dependentWatcher != null && dependentWatcher.assignedOrHosted() > 0) { + goal = TabletGoalState.HOSTED; + } + } + } + if (goal == TabletGoalState.HOSTED) { if (state != TabletState.HOSTED && !tls.walogs.isEmpty()) { if (recoverLogs(tls.extent, tls.walogs)) @@ -1441,6 +1453,14 @@ public class Master implements LiveTServ } } + private int assignedOrHosted() { + int result = 0; + for (TableCounts counts : stats.getLast().values()) { + result += counts.assigned() + counts.hosted(); + } + return result; + } + private void sendSplitRequest(MergeInfo info, TabletState state, TabletLocationState tls) { // Already split? if (!info.getState().equals(MergeState.SPLITTING)) @@ -2086,9 +2106,9 @@ public class Master implements LiveTServ AuthInfo systemAuths = SecurityConstants.getSystemCredentials(); final TabletStateStore stores[] = {new ZooTabletStateStore(new ZooStore(zroot)), new RootTabletStateStore(instance, systemAuths, this), new MetaDataStateStore(instance, systemAuths, this)}; - for (int i = 0; i < stores.length; i++) { - watchers.add(new TabletGroupWatcher(stores[i])); - } + watchers.add(new TabletGroupWatcher(stores[2], null)); + watchers.add(new TabletGroupWatcher(stores[1], watchers.get(0))); + watchers.add(new TabletGroupWatcher(stores[0], watchers.get(1))); for (TabletGroupWatcher watcher : watchers) { watcher.start(); } Modified: accumulo/trunk/server/src/main/java/org/apache/accumulo/server/master/tserverOps/ShutdownTServer.java URL: http://svn.apache.org/viewvc/accumulo/trunk/server/src/main/java/org/apache/accumulo/server/master/tserverOps/ShutdownTServer.java?rev=1359305&r1=1359304&r2=1359305&view=diff ============================================================================== --- accumulo/trunk/server/src/main/java/org/apache/accumulo/server/master/tserverOps/ShutdownTServer.java (original) +++ accumulo/trunk/server/src/main/java/org/apache/accumulo/server/master/tserverOps/ShutdownTServer.java Mon Jul 9 17:41:35 2012 @@ -66,7 +66,7 @@ public class ShutdownTServer extends Mas // TODO move this to isReady() and drop while loop? Listener listener = m.getEventCoordinator().getListener(); m.shutdownTServer(server); - while (m.stillMaster() && m.onlineTabletServers().contains(server)) { + while (m.onlineTabletServers().contains(server)) { TServerConnection connection = m.getConnection(server); if (connection != null) { try { Added: accumulo/trunk/server/src/main/java/org/apache/accumulo/server/test/randomwalk/concurrent/StartAll.java URL: http://svn.apache.org/viewvc/accumulo/trunk/server/src/main/java/org/apache/accumulo/server/test/randomwalk/concurrent/StartAll.java?rev=1359305&view=auto ============================================================================== --- accumulo/trunk/server/src/main/java/org/apache/accumulo/server/test/randomwalk/concurrent/StartAll.java (added) +++ accumulo/trunk/server/src/main/java/org/apache/accumulo/server/test/randomwalk/concurrent/StartAll.java Mon Jul 9 17:41:35 2012 @@ -0,0 +1,16 @@ +package org.apache.accumulo.server.test.randomwalk.concurrent; + +import java.util.Properties; + +import org.apache.accumulo.server.test.randomwalk.State; +import org.apache.accumulo.server.test.randomwalk.Test; + +public class StartAll extends Test { + + @Override + public void visit(State state, Properties props) throws Exception { + log.info("Starting all servers"); + Runtime.getRuntime().exec(new String[]{System.getenv().get("ACCUMULO_HOME") + "/bin/start-all.sh"}); + } + +} Added: accumulo/trunk/server/src/main/java/org/apache/accumulo/server/test/randomwalk/concurrent/StopTabletServer.java URL: http://svn.apache.org/viewvc/accumulo/trunk/server/src/main/java/org/apache/accumulo/server/test/randomwalk/concurrent/StopTabletServer.java?rev=1359305&view=auto ============================================================================== --- accumulo/trunk/server/src/main/java/org/apache/accumulo/server/test/randomwalk/concurrent/StopTabletServer.java (added) +++ accumulo/trunk/server/src/main/java/org/apache/accumulo/server/test/randomwalk/concurrent/StopTabletServer.java Mon Jul 9 17:41:35 2012 @@ -0,0 +1,39 @@ +package org.apache.accumulo.server.test.randomwalk.concurrent; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; +import java.util.Properties; +import java.util.Set; + +import org.apache.accumulo.core.conf.DefaultConfiguration; +import org.apache.accumulo.server.master.LiveTServerSet; +import org.apache.accumulo.server.master.LiveTServerSet.Listener; +import org.apache.accumulo.server.master.state.TServerInstance; +import org.apache.accumulo.server.test.randomwalk.State; +import org.apache.accumulo.server.test.randomwalk.Test; + +public class StopTabletServer extends Test { + + @Override + public void visit(State state, Properties props) throws Exception { + + LiveTServerSet set = new LiveTServerSet(state.getInstance(), DefaultConfiguration.getDefaultConfiguration(), new Listener() { + @Override + public void update(LiveTServerSet current, Set<TServerInstance> deleted, Set<TServerInstance> added) { + log.info("Tablet server set changed: " + deleted + " deleted and " + added + " added"); + } + }); + List<TServerInstance> currentServers = new ArrayList<TServerInstance>(set.getCurrentServers()); + Collections.shuffle(currentServers); + Runtime runtime = Runtime.getRuntime(); + if (currentServers.size() > 1) { + TServerInstance victim = currentServers.get(0); + log.info("Stopping " + victim.hostPort()); + runtime.exec(new String[] {System.getenv("ACCUMULO_HOME") + "/bin/accumulo", "admin", "stop", victim.hostPort()}); + if (set.getCurrentServers().contains(victim)) + throw new RuntimeException("Failed to stop " + victim); + } + } + +} Propchange: accumulo/trunk/src/ ------------------------------------------------------------------------------ Merged /accumulo/branches/ACCUMULO-672/src:r1359163 Modified: accumulo/trunk/test/system/auto/simple/shutdown.py URL: http://svn.apache.org/viewvc/accumulo/trunk/test/system/auto/simple/shutdown.py?rev=1359305&r1=1359304&r2=1359305&view=diff ============================================================================== --- accumulo/trunk/test/system/auto/simple/shutdown.py (original) +++ accumulo/trunk/test/system/auto/simple/shutdown.py Mon Jul 9 17:41:35 2012 @@ -19,9 +19,10 @@ import logging import unittest import sleep import signal +import socket from subprocess import PIPE -from TestUtils import TestUtilsMixin, ROOT, ROOT_PASSWORD +from TestUtils import TestUtilsMixin, ROOT, ROOT_PASSWORD, FUZZ from simple.readwrite import SunnyDayTest log = logging.getLogger('test.auto') @@ -76,14 +77,24 @@ class ShutdownDuringDeleteTable(TestUtil handle.stdin.write(dt) self.shutdown_accumulo() -class ShutdownDuringStart(TestUtilsMixin, unittest.TestCase): +class AdminStopDuringStart(TestUtilsMixin, unittest.TestCase): order = SunnyDayTest.order + 1 def runTest(self): - self.hosts = self.options.hosts self.clean_accumulo(self.masterHost()) self.start_accumulo() + handle = self.runOn(self.masterHost(), + [self.accumulo_sh(),'admin','stop', socket.getfqdn() + ":%d" % (39000 + FUZZ)]) + +class AdminStop(SunnyDayTest): + + order = SunnyDayTest.order + 1 + + def runTest(self): + self.waitForStop(self.ingester, self.waitTime()) + handle = self.runOn(self.masterHost(), + [self.accumulo_sh(),'admin','stop', socket.getfqdn() + ":%d" % (39000 + FUZZ)]) self.shutdown_accumulo() def suite(): @@ -92,5 +103,6 @@ def suite(): result.addTest(ShutdownDuringQuery()) result.addTest(ShutdownDuringDelete()) result.addTest(ShutdownDuringDeleteTable()) - result.addTest(ShutdownDuringStart()) + result.addTest(AdminStopDuringStart()) + result.addTest(AdminStop()) return result Modified: accumulo/trunk/test/system/randomwalk/conf/modules/Concurrent.xml URL: http://svn.apache.org/viewvc/accumulo/trunk/test/system/randomwalk/conf/modules/Concurrent.xml?rev=1359305&r1=1359304&r2=1359305&view=diff ============================================================================== --- accumulo/trunk/test/system/randomwalk/conf/modules/Concurrent.xml (original) +++ accumulo/trunk/test/system/randomwalk/conf/modules/Concurrent.xml Mon Jul 9 17:41:35 2012 @@ -44,6 +44,8 @@ <edge id="ct.ChangePermissions" weight="1000"/> <edge id="ct.CheckPermission" weight="1000"/> <edge id="ct.CheckBalance" weight="1000"/> + <edge id="ct.StopTabletServer" weight="1000"/> + <edge id="ct.StartAll" weight="1000"/> <edge id="END" weight="1"/> </node> @@ -132,4 +134,12 @@ <edge id="dummy.ToAll" weight="1"/> </node> +<node id="ct.StopTabletServer"> + <edge id="dummy.ToAll" weight="1"/> +</node> + +<node id="StartAll"> + <edge id="dummy.ToAll" weight="1"/> +</node> + </module>