Search in sources :

Example 46 with HighlyAvailableGraphDatabase

use of org.neo4j.kernel.ha.HighlyAvailableGraphDatabase in project neo4j by neo4j.

the class ClusterLocksIT method locksFailingOnSlavesMustHaveDescriptiveMessage.

@Test
public void locksFailingOnSlavesMustHaveDescriptiveMessage() throws Throwable {
    HighlyAvailableGraphDatabase master = cluster.getMaster();
    Node masterA = createNodeOnMaster(testLabel, master);
    Node masterB = createNodeOnMaster(testLabel, master);
    HighlyAvailableGraphDatabase slave = cluster.getAnySlave();
    try (Transaction transaction = slave.beginTx()) {
        Node slaveA = slave.getNodeById(masterA.getId());
        Node slaveB = slave.getNodeById(masterB.getId());
        CountDownLatch latch = new CountDownLatch(1);
        transaction.acquireWriteLock(slaveB);
        Thread masterTx = new Thread(() -> {
            try (Transaction tx = master.beginTx()) {
                tx.acquireWriteLock(masterA);
                latch.countDown();
                tx.acquireWriteLock(masterB);
            }
        });
        masterTx.setDaemon(true);
        masterTx.start();
        latch.await();
        // This should deadlock
        expectedException.expect(DeadlockDetectedException.class);
        transaction.acquireWriteLock(slaveA);
    }
}
Also used : Transaction(org.neo4j.graphdb.Transaction) HighlyAvailableGraphDatabase(org.neo4j.kernel.ha.HighlyAvailableGraphDatabase) Node(org.neo4j.graphdb.Node) CountDownLatch(java.util.concurrent.CountDownLatch) Test(org.junit.Test)

Example 47 with HighlyAvailableGraphDatabase

use of org.neo4j.kernel.ha.HighlyAvailableGraphDatabase in project neo4j by neo4j.

the class ClusterLocksIT method aPendingMemberShouldBeAbleToServeReads.

@Test
public void aPendingMemberShouldBeAbleToServeReads() throws Throwable {
    // given
    createNodeOnMaster(testLabel, cluster.getMaster());
    cluster.sync();
    HighlyAvailableGraphDatabase slave = cluster.getAnySlave();
    cluster.fail(slave, ClusterManager.NetworkFlag.values());
    cluster.await(instanceEvicted(slave));
    assertEquals(PENDING, slave.getInstanceState());
    // when
    for (int i = 0; i < 10; i++) {
        try (Transaction tx = slave.beginTx()) {
            Node single = Iterables.single(slave.getAllNodes());
            Label label = Iterables.single(single.getLabels());
            assertEquals(testLabel, label);
            tx.success();
            break;
        } catch (TransactionTerminatedException e) {
            // Race between going to pending and reading, try again in a little while
            Thread.sleep(1_000);
        }
    }
// then no exceptions thrown
}
Also used : TransactionTerminatedException(org.neo4j.graphdb.TransactionTerminatedException) Transaction(org.neo4j.graphdb.Transaction) HighlyAvailableGraphDatabase(org.neo4j.kernel.ha.HighlyAvailableGraphDatabase) Node(org.neo4j.graphdb.Node) Label(org.neo4j.graphdb.Label) Test(org.junit.Test)

Example 48 with HighlyAvailableGraphDatabase

use of org.neo4j.kernel.ha.HighlyAvailableGraphDatabase in project neo4j by neo4j.

the class ClusterTest method testInstancesWithConflictingHaPorts.

@Test
public void testInstancesWithConflictingHaPorts() throws Throwable {
    HighlyAvailableGraphDatabase first = null;
    try {
        File storeDir = testDirectory.directory("testConflictingHaPorts");
        first = (HighlyAvailableGraphDatabase) new TestHighlyAvailableGraphDatabaseFactory().newEmbeddedDatabaseBuilder(storeDir).setConfig(ClusterSettings.initial_hosts, "127.0.0.1:5001").setConfig(ClusterSettings.cluster_server, "127.0.0.1:5001").setConfig(ClusterSettings.server_id, "1").setConfig(HaSettings.ha_server, "127.0.0.1:6666").newGraphDatabase();
        try {
            HighlyAvailableGraphDatabase failed = (HighlyAvailableGraphDatabase) new TestHighlyAvailableGraphDatabaseFactory().newEmbeddedDatabaseBuilder(storeDir).setConfig(ClusterSettings.initial_hosts, "127.0.0.1:5001").setConfig(ClusterSettings.cluster_server, "127.0.0.1:5002").setConfig(ClusterSettings.server_id, "2").setConfig(HaSettings.ha_server, "127.0.0.1:6666").newGraphDatabase();
            failed.shutdown();
            fail("Should not start when ports conflict");
        } catch (Exception e) {
        // good
        }
    } finally {
        if (first != null) {
            first.shutdown();
        }
    }
}
Also used : HighlyAvailableGraphDatabase(org.neo4j.kernel.ha.HighlyAvailableGraphDatabase) TestHighlyAvailableGraphDatabaseFactory(org.neo4j.graphdb.factory.TestHighlyAvailableGraphDatabaseFactory) File(java.io.File) TransientTransactionFailureException(org.neo4j.graphdb.TransientTransactionFailureException) IOException(java.io.IOException) TransactionTerminatedException(org.neo4j.graphdb.TransactionTerminatedException) Test(org.junit.Test)

Example 49 with HighlyAvailableGraphDatabase

use of org.neo4j.kernel.ha.HighlyAvailableGraphDatabase in project neo4j by neo4j.

the class ReadOnlySlaveTest method givenClusterWithReadOnlySlaveWhenChangePropertyOnSlaveThenThrowException.

@Test
public void givenClusterWithReadOnlySlaveWhenChangePropertyOnSlaveThenThrowException() throws Throwable {
    // Given
    ManagedCluster cluster = clusterRule.startCluster();
    Node node;
    HighlyAvailableGraphDatabase master = cluster.getMaster();
    try (Transaction tx = master.beginTx()) {
        node = master.createNode();
        tx.success();
    }
    // When
    HighlyAvailableGraphDatabase readOnlySlave = cluster.getMemberByServerId(new InstanceId(2));
    try (Transaction tx = readOnlySlave.beginTx()) {
        Node slaveNode = readOnlySlave.getNodeById(node.getId());
        // Then
        slaveNode.setProperty("foo", "bar");
        tx.success();
        fail("Should have thrown exception");
    } catch (WriteOperationsNotAllowedException ex) {
    // Ok!
    }
}
Also used : Transaction(org.neo4j.graphdb.Transaction) HighlyAvailableGraphDatabase(org.neo4j.kernel.ha.HighlyAvailableGraphDatabase) InstanceId(org.neo4j.cluster.InstanceId) ManagedCluster(org.neo4j.kernel.impl.ha.ClusterManager.ManagedCluster) Node(org.neo4j.graphdb.Node) WriteOperationsNotAllowedException(org.neo4j.graphdb.security.WriteOperationsNotAllowedException) Test(org.junit.Test)

Example 50 with HighlyAvailableGraphDatabase

use of org.neo4j.kernel.ha.HighlyAvailableGraphDatabase in project neo4j by neo4j.

the class TestInstanceJoin method start.

private static HighlyAvailableGraphDatabase start(File storeDir, int i, Map<String, String> additionalConfig) {
    HighlyAvailableGraphDatabase db = (HighlyAvailableGraphDatabase) new TestHighlyAvailableGraphDatabaseFactory().newEmbeddedDatabaseBuilder(storeDir).setConfig(ClusterSettings.cluster_server, "127.0.0.1:" + (5001 + i)).setConfig(ClusterSettings.server_id, i + "").setConfig(HaSettings.ha_server, "127.0.0.1:" + (6666 + i)).setConfig(HaSettings.pull_interval, "0ms").setConfig(additionalConfig).newGraphDatabase();
    awaitStart(db);
    return db;
}
Also used : HighlyAvailableGraphDatabase(org.neo4j.kernel.ha.HighlyAvailableGraphDatabase) TestHighlyAvailableGraphDatabaseFactory(org.neo4j.graphdb.factory.TestHighlyAvailableGraphDatabaseFactory)

Aggregations

HighlyAvailableGraphDatabase (org.neo4j.kernel.ha.HighlyAvailableGraphDatabase)80 Test (org.junit.Test)68 Transaction (org.neo4j.graphdb.Transaction)38 ClusterManager (org.neo4j.kernel.impl.ha.ClusterManager)24 Node (org.neo4j.graphdb.Node)22 ManagedCluster (org.neo4j.kernel.impl.ha.ClusterManager.ManagedCluster)16 File (java.io.File)12 InstanceId (org.neo4j.cluster.InstanceId)10 Response (javax.ws.rs.core.Response)9 CountDownLatch (java.util.concurrent.CountDownLatch)8 TransientTransactionFailureException (org.neo4j.graphdb.TransientTransactionFailureException)5 TestHighlyAvailableGraphDatabaseFactory (org.neo4j.graphdb.factory.TestHighlyAvailableGraphDatabaseFactory)5 RepairKit (org.neo4j.kernel.impl.ha.ClusterManager.RepairKit)5 AtomicReference (java.util.concurrent.atomic.AtomicReference)4 ClusterClient (org.neo4j.cluster.client.ClusterClient)4 TransactionTerminatedException (org.neo4j.graphdb.TransactionTerminatedException)4 IndexDefinition (org.neo4j.graphdb.schema.IndexDefinition)4 IOException (java.io.IOException)3 URI (java.net.URI)3 ExecutionException (java.util.concurrent.ExecutionException)3