@Test public void failedInstanceShouldReceiveCorrectCoordinatorIdUponRejoiningCluster() throws Throwable { // Given HighlyAvailableGraphDatabase initialMaster = cluster.getMaster(); // When cluster.shutdown(initialMaster); cluster.await(masterAvailable(initialMaster)); cluster.await(masterSeesSlavesAsAvailable(1)); // create node on new master to ensure that it has the greatest tx id createNodeOn(cluster.getMaster()); cluster.sync(); ClusterClient clusterClient = cleanup.add(newClusterClient(new InstanceId(1))); final AtomicReference<InstanceId> coordinatorIdWhenReJoined = new AtomicReference<>(); final CountDownLatch latch = new CountDownLatch(1); clusterClient.addClusterListener( new ClusterListener.Adapter() { @Override public void enteredCluster(ClusterConfiguration clusterConfiguration) { coordinatorIdWhenReJoined.set(clusterConfiguration.getElected(COORDINATOR)); latch.countDown(); } }); clusterClient.init(); clusterClient.start(); // Then latch.await(2, SECONDS); assertEquals(new InstanceId(2), coordinatorIdWhenReJoined.get()); }
@Test public void shouldBeAbleToRestartServer() throws Exception { // Given String dbDirectory1 = baseDir.directory("db1").getAbsolutePath(); String dbDirectory2 = baseDir.directory("db2").getAbsolutePath(); ConfigurationBuilder config = new PropertyFileConfigurator( AdvancedServerBuilder.server().usingDatabaseDir(dbDirectory1).createPropertiesFiles(), ConsoleLogger.DEV_NULL); // When NeoServer server = cleanup.add(new AdvancedNeoServer(config, graphDbDependencies())); server.start(); assertNotNull(server.getDatabase().getGraph()); assertEquals(dbDirectory1, server.getDatabase().getLocation()); // Change the database location setProperty(config.configuration(), Configurator.DATABASE_LOCATION_PROPERTY_KEY, dbDirectory2); ServerManagement bean = new ServerManagement(server); bean.restartServer(); // Then assertNotNull(server.getDatabase().getGraph()); assertEquals(dbDirectory2, server.getDatabase().getLocation()); }
public <T> T add(T toClose) { Class<?> cls = toClose.getClass(); for (String methodName : COMMON_CLOSE_METHOD_NAMES) { try { Method method = cls.getMethod(methodName); add(closeable(method, toClose)); return toClose; } catch (NoSuchMethodException e) { // Try the next method continue; } catch (SecurityException e) { throw new RuntimeException(e); } } throw new IllegalArgumentException( "No suitable close method found on " + toClose + ", which is a " + cls); }