Skip to content

Commit

Permalink
Await database shutdown using availability listener instead in Cluste…
Browse files Browse the repository at this point in the history
…rTransactionIT.
  • Loading branch information
MishaDemianenko committed Aug 30, 2018
1 parent e0d1f50 commit 05e491d
Showing 1 changed file with 26 additions and 12 deletions.
38 changes: 26 additions & 12 deletions enterprise/ha/src/test/java/org/neo4j/ha/ClusterTransactionIT.java
Original file line number Diff line number Diff line change
Expand Up @@ -31,13 +31,13 @@
import org.neo4j.graphdb.Transaction;
import org.neo4j.helpers.collection.Iterables;
import org.neo4j.internal.kernel.api.exceptions.TransactionFailureException;
import org.neo4j.kernel.availability.AvailabilityListener;
import org.neo4j.kernel.availability.DatabaseAvailabilityGuard;
import org.neo4j.kernel.configuration.Settings;
import org.neo4j.kernel.ha.HaSettings;
import org.neo4j.kernel.ha.HighlyAvailableGraphDatabase;
import org.neo4j.kernel.impl.enterprise.configuration.OnlineBackupSettings;
import org.neo4j.kernel.impl.ha.ClusterManager;
import org.neo4j.kernel.lifecycle.LifeSupport;
import org.neo4j.kernel.lifecycle.LifecycleStatus;
import org.neo4j.test.ha.ClusterRule;

import static org.hamcrest.CoreMatchers.equalTo;
Expand Down Expand Up @@ -94,16 +94,8 @@ public void givenClusterWhenShutdownMasterThenCannotStartTransactionOnSlave() th
return false;
} );

master.getDependencyResolver()
.resolveDependency( LifeSupport.class )
.addLifecycleListener( ( instance, from, to ) ->
{
if ( instance.getClass().getName().contains( "DatabaseAvailability" ) &&
to == LifecycleStatus.STOPPED )
{
result.run();
}
} );
DatabaseAvailabilityGuard masterGuard = master.getDependencyResolver().resolveDependency( DatabaseAvailabilityGuard.class );
masterGuard.addListener( new UnavailabilityListener( result ) );

master.shutdown();

Expand Down Expand Up @@ -155,4 +147,26 @@ public void slaveMustConnectLockManagerToNewMasterAfterTwoOtherClusterMembersRol
assertThat( Iterables.count( master.getAllNodes() ), is( 3L ) );
}
}

private static class UnavailabilityListener implements AvailabilityListener
{
private final FutureTask<Boolean> result;

UnavailabilityListener( FutureTask<Boolean> result )
{
this.result = result;
}

@Override
public void available()
{
//nothing
}

@Override
public void unavailable()
{
result.run();
}
}
}

0 comments on commit 05e491d

Please sign in to comment.