@VisibleForTesting public void moveFromOnlineToDeadServers(final ServerName sn) { synchronized (onlineServers) { if (!this.onlineServers.containsKey(sn)) { LOG.trace("Expiration of {} but server not online", sn); } // Remove the server from the known servers lists and update load info BUT // add to deadservers first; do this so it'll show in dead servers list if // not in online servers list. this.deadservers.add(sn); this.onlineServers.remove(sn); onlineServers.notifyAll(); } this.rsAdmins.remove(sn); }
@Test public void testSortExtract(){ ManualEnvironmentEdge mee = new ManualEnvironmentEdge(); EnvironmentEdgeManager.injectEdge(mee); mee.setValue(1); DeadServer d = new DeadServer(); d.add(hostname123); mee.incValue(1); d.add(hostname1234); mee.incValue(1); d.add(hostname12345); List<Pair<ServerName, Long>> copy = d.copyDeadServersSince(2L); Assert.assertEquals(2, copy.size()); Assert.assertEquals(hostname1234, copy.get(0).getFirst()); Assert.assertEquals(new Long(2L), copy.get(0).getSecond()); Assert.assertEquals(hostname12345, copy.get(1).getFirst()); Assert.assertEquals(new Long(3L), copy.get(1).getSecond()); EnvironmentEdgeManager.reset(); }
@Test public void testClearDeadServer(){ DeadServer d = new DeadServer(); d.add(hostname123); d.add(hostname1234); Assert.assertEquals(2, d.size()); d.finish(hostname123); d.removeDeadServer(hostname123); Assert.assertEquals(1, d.size()); d.finish(hostname1234); d.removeDeadServer(hostname1234); Assert.assertTrue(d.isEmpty()); d.add(hostname1234); Assert.assertFalse(d.removeDeadServer(hostname123_2)); Assert.assertEquals(1, d.size()); d.finish(hostname1234); Assert.assertTrue(d.removeDeadServer(hostname1234)); Assert.assertTrue(d.isEmpty()); } }
@Test public void testClean(){ DeadServer d = new DeadServer(); d.add(hostname123); d.cleanPreviousInstance(hostname12345); Assert.assertFalse(d.isEmpty()); d.cleanPreviousInstance(hostname1234); Assert.assertFalse(d.isEmpty()); d.cleanPreviousInstance(hostname123_2); Assert.assertTrue(d.isEmpty()); }
@Test public void testIsDead() { DeadServer ds = new DeadServer(); ds.add(hostname123); ds.notifyServer(hostname123); assertTrue(ds.areDeadServersInProgress()); assertFalse(ds.areDeadServersInProgress()); ds.add(hostname1234); ds.notifyServer(hostname1234); assertTrue(ds.areDeadServersInProgress()); assertFalse(ds.areDeadServersInProgress()); ds.add(hostname12345); ds.notifyServer(hostname12345); assertTrue(ds.areDeadServersInProgress()); ds.add(deadServer); assertTrue(ds.isDeadServer(deadServer)); Set<ServerName> deadServerNames = ds.copyServerNames();
@VisibleForTesting public void moveFromOnelineToDeadServers(final ServerName sn) { synchronized (onlineServers) { if (!this.onlineServers.containsKey(sn)) { LOG.warn("Expiration of " + sn + " but server not online"); } // Remove the server from the known servers lists and update load info BUT // add to deadservers first; do this so it'll show in dead servers list if // not in online servers list. this.deadservers.add(sn); this.onlineServers.remove(sn); onlineServers.notifyAll(); } this.rsAdmins.remove(sn); }
public synchronized void processDeadServer(final ServerName serverName, boolean shouldSplitWal) { // When assignment manager is cleaning up the zookeeper nodes and rebuilding the // in-memory region states, region servers could be down. Meta table can and // should be re-assigned, log splitting can be done too. However, it is better to // wait till the cleanup is done before re-assigning user regions. // // We should not wait in the server shutdown handler thread since it can clog // the handler threads and meta table could not be re-assigned in case // the corresponding server is down. So we queue them up here instead. if (!services.getAssignmentManager().isFailoverCleanupDone()) { requeuedDeadServers.put(serverName, shouldSplitWal); return; } this.deadservers.add(serverName); this.services.getMasterProcedureExecutor(). submitProcedure(new ServerCrashProcedure(serverName, shouldSplitWal, false)); }
this.deadservers.add(serverName); this.onlineServers.remove(serverName); synchronized (onlineServers) {
@Test public void testSortExtract(){ ManualEnvironmentEdge mee = new ManualEnvironmentEdge(); EnvironmentEdgeManager.injectEdge(mee); mee.setValue(1); DeadServer d = new DeadServer(); d.add(hostname123); mee.incValue(1); d.add(hostname1234); mee.incValue(1); d.add(hostname12345); List<Pair<ServerName, Long>> copy = d.copyDeadServersSince(2L); Assert.assertEquals(2, copy.size()); Assert.assertEquals(hostname1234, copy.get(0).getFirst()); Assert.assertEquals(new Long(2L), copy.get(0).getSecond()); Assert.assertEquals(hostname12345, copy.get(1).getFirst()); Assert.assertEquals(new Long(3L), copy.get(1).getSecond()); EnvironmentEdgeManager.reset(); }
@Test public void testClearDeadServer(){ DeadServer d = new DeadServer(); d.add(hostname123); d.add(hostname1234); Assert.assertEquals(2, d.size()); d.finish(hostname123); d.removeDeadServer(hostname123); Assert.assertEquals(1, d.size()); d.finish(hostname1234); d.removeDeadServer(hostname1234); Assert.assertTrue(d.isEmpty()); d.add(hostname1234); Assert.assertFalse(d.removeDeadServer(hostname123_2)); Assert.assertEquals(1, d.size()); d.finish(hostname1234); Assert.assertTrue(d.removeDeadServer(hostname1234)); Assert.assertTrue(d.isEmpty()); } }
@Test public void testClean(){ DeadServer d = new DeadServer(); d.add(hostname123); d.cleanPreviousInstance(hostname12345); Assert.assertFalse(d.isEmpty()); d.cleanPreviousInstance(hostname1234); Assert.assertFalse(d.isEmpty()); d.cleanPreviousInstance(hostname123_2); Assert.assertTrue(d.isEmpty()); }
@Test public void testIsDead() { DeadServer ds = new DeadServer(); ds.add(hostname123); ds.notifyServer(hostname123); assertTrue(ds.areDeadServersInProgress()); assertFalse(ds.areDeadServersInProgress()); ds.add(hostname1234); ds.notifyServer(hostname1234); assertTrue(ds.areDeadServersInProgress()); assertFalse(ds.areDeadServersInProgress()); ds.add(hostname12345); ds.notifyServer(hostname12345); assertTrue(ds.areDeadServersInProgress()); ds.add(deadServer); assertTrue(ds.isDeadServer(deadServer)); Set<ServerName> deadServerNames = ds.copyServerNames();