Skip to content

Commit

Permalink
Ammendments for cleanup of status endpoints
Browse files Browse the repository at this point in the history
  • Loading branch information
phughk committed Sep 7, 2018
1 parent 3f85a3c commit a0920e0
Show file tree
Hide file tree
Showing 7 changed files with 47 additions and 198 deletions.
Expand Up @@ -50,7 +50,6 @@
import org.neo4j.causalclustering.core.state.ClusteringModule; import org.neo4j.causalclustering.core.state.ClusteringModule;
import org.neo4j.causalclustering.core.state.machines.CoreStateMachinesModule; import org.neo4j.causalclustering.core.state.machines.CoreStateMachinesModule;
import org.neo4j.causalclustering.core.state.machines.id.FreeIdFilteredIdGeneratorFactory; import org.neo4j.causalclustering.core.state.machines.id.FreeIdFilteredIdGeneratorFactory;
import org.neo4j.causalclustering.diagnostics.CoreMembershipMonitor;
import org.neo4j.causalclustering.diagnostics.CoreMonitor; import org.neo4j.causalclustering.diagnostics.CoreMonitor;
import org.neo4j.causalclustering.discovery.CoreTopologyService; import org.neo4j.causalclustering.discovery.CoreTopologyService;
import org.neo4j.causalclustering.discovery.DiscoveryServiceFactory; import org.neo4j.causalclustering.discovery.DiscoveryServiceFactory;
Expand Down Expand Up @@ -297,9 +296,6 @@ public EnterpriseCoreEditionModule( final PlatformModule platformModule,


dependencies.satisfyDependency( consensusModule.raftMachine() ); dependencies.satisfyDependency( consensusModule.raftMachine() );


CoreMembershipMonitor coreMembershipMonitor = dependencies.satisfyDependency( new CoreMembershipMonitor( consensusModule.raftMachine() ) );
platformModule.monitors.addMonitorListener( coreMembershipMonitor );

replicationModule = replicationModule =
new ReplicationModule( identityModule.myself(), platformModule, config, consensusModule, new ReplicationModule( identityModule.myself(), platformModule, config, consensusModule,
loggingOutbound, clusterStateDirectory.get(), fileSystem, logProvider, globalGuard ); loggingOutbound, clusterStateDirectory.get(), fileSystem, logProvider, globalGuard );
Expand Down

This file was deleted.

This file was deleted.

Expand Up @@ -35,7 +35,6 @@
import org.neo4j.causalclustering.core.consensus.membership.RaftMembershipManager; import org.neo4j.causalclustering.core.consensus.membership.RaftMembershipManager;
import org.neo4j.causalclustering.core.consensus.roles.Role; import org.neo4j.causalclustering.core.consensus.roles.Role;
import org.neo4j.causalclustering.core.state.machines.id.CommandIndexTracker; import org.neo4j.causalclustering.core.state.machines.id.CommandIndexTracker;
import org.neo4j.causalclustering.diagnostics.CoreMembershipMonitor;
import org.neo4j.causalclustering.discovery.TopologyService; import org.neo4j.causalclustering.discovery.TopologyService;
import org.neo4j.causalclustering.identity.MemberId; import org.neo4j.causalclustering.identity.MemberId;
import org.neo4j.graphdb.DependencyResolver; import org.neo4j.graphdb.DependencyResolver;
Expand All @@ -50,7 +49,6 @@ class CoreStatus extends BaseStatus
private final CoreGraphDatabase db; private final CoreGraphDatabase db;


// Dependency resolved // Dependency resolved
private final CoreMembershipMonitor coreMembershipMonitor;
private final RaftMembershipManager raftMembershipManager; private final RaftMembershipManager raftMembershipManager;
private final DatabaseHealth databaseHealth; private final DatabaseHealth databaseHealth;
private final TopologyService topologyService; private final TopologyService topologyService;
Expand All @@ -65,7 +63,6 @@ class CoreStatus extends BaseStatus
this.db = db; this.db = db;


DependencyResolver dependencyResolver = db.getDependencyResolver(); DependencyResolver dependencyResolver = db.getDependencyResolver();
this.coreMembershipMonitor = dependencyResolver.resolveDependency( CoreMembershipMonitor.class );
this.raftMembershipManager = dependencyResolver.resolveDependency( RaftMembershipManager.class ); this.raftMembershipManager = dependencyResolver.resolveDependency( RaftMembershipManager.class );
this.databaseHealth = dependencyResolver.resolveDependency( DatabaseHealth.class ); this.databaseHealth = dependencyResolver.resolveDependency( DatabaseHealth.class );
this.topologyService = dependencyResolver.resolveDependency( TopologyService.class ); this.topologyService = dependencyResolver.resolveDependency( TopologyService.class );
Expand Down Expand Up @@ -102,12 +99,15 @@ public Response writable()
@Override @Override
public Response description() public Response description()
{ {
MemberId myself = topologyService.myself();
MemberId leader = getLeader();
List<MemberId> votingMembers = new ArrayList<>( raftMembershipManager.votingMembers() ); List<MemberId> votingMembers = new ArrayList<>( raftMembershipManager.votingMembers() );
boolean participatingInRaftGroup = votingMembers.contains( myself ) && Objects.nonNull( leader );

long lastAppliedRaftIndex = commandIndexTracker.getAppliedCommandIndex(); long lastAppliedRaftIndex = commandIndexTracker.getAppliedCommandIndex();
MemberId leader = getLeader();
boolean participatingInRaftGroup = coreMembershipMonitor.hasJoinedRaft() && Objects.nonNull( leader );
long millisSinceLastLeaderMessage = raftMessageTimerResetMonitor.durationSinceLastMessage().toMillis(); long millisSinceLastLeaderMessage = raftMessageTimerResetMonitor.durationSinceLastMessage().toMillis();
return statusResponse( lastAppliedRaftIndex, participatingInRaftGroup, votingMembers, databaseHealth.isHealthy(), topologyService.myself(), leader,
return statusResponse( lastAppliedRaftIndex, participatingInRaftGroup, votingMembers, databaseHealth.isHealthy(), myself, leader,
millisSinceLastLeaderMessage, true ); millisSinceLastLeaderMessage, true );
} }


Expand Down
Expand Up @@ -22,19 +22,16 @@
*/ */
package org.neo4j.server.rest.causalclustering; package org.neo4j.server.rest.causalclustering;


import com.google.gson.JsonArray;
import com.google.gson.JsonObject;
import org.hamcrest.BaseMatcher; import org.hamcrest.BaseMatcher;
import org.hamcrest.Description; import org.hamcrest.Description;
import org.hamcrest.Matcher; import org.hamcrest.Matcher;
import org.hamcrest.Matchers;
import org.junit.Before; import org.junit.Before;
import org.junit.Test; import org.junit.Test;


import java.io.IOException; import java.io.IOException;
import java.net.URI; import java.net.URI;
import java.util.Arrays; import java.util.Arrays;
import java.util.Collection; import java.util.Collections;
import java.util.HashSet; import java.util.HashSet;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
Expand All @@ -50,7 +47,6 @@
import org.neo4j.causalclustering.core.consensus.membership.RaftMembershipManager; import org.neo4j.causalclustering.core.consensus.membership.RaftMembershipManager;
import org.neo4j.causalclustering.core.consensus.roles.Role; import org.neo4j.causalclustering.core.consensus.roles.Role;
import org.neo4j.causalclustering.core.state.machines.id.CommandIndexTracker; import org.neo4j.causalclustering.core.state.machines.id.CommandIndexTracker;
import org.neo4j.causalclustering.diagnostics.CoreMembershipMonitor;
import org.neo4j.causalclustering.discovery.RoleInfo; import org.neo4j.causalclustering.discovery.RoleInfo;
import org.neo4j.causalclustering.identity.MemberId; import org.neo4j.causalclustering.identity.MemberId;
import org.neo4j.kernel.impl.core.DatabasePanicEventGenerator; import org.neo4j.kernel.impl.core.DatabasePanicEventGenerator;
Expand Down Expand Up @@ -79,7 +75,6 @@ public class CoreStatusTest
private final LogProvider logProvider = NullLogProvider.getInstance(); private final LogProvider logProvider = NullLogProvider.getInstance();


// Dependency resolved // Dependency resolved
private CoreMembershipMonitor coreMembershipMonitor;
private RaftMembershipManager raftMembershipManager; private RaftMembershipManager raftMembershipManager;
private DatabaseHealth databaseHealth; private DatabaseHealth databaseHealth;
private FakeTopologyService topologyService; private FakeTopologyService topologyService;
Expand All @@ -90,6 +85,7 @@ public class CoreStatusTest
private final MemberId myself = new MemberId( new UUID( 0x1234, 0x5678 ) ); private final MemberId myself = new MemberId( new UUID( 0x1234, 0x5678 ) );
private final MemberId core2 = new MemberId( UUID.randomUUID() ); private final MemberId core2 = new MemberId( UUID.randomUUID() );
private final MemberId core3 = new MemberId( UUID.randomUUID() ); private final MemberId core3 = new MemberId( UUID.randomUUID() );
private final MemberId replica = new MemberId( UUID.randomUUID() );


@Before @Before
public void setup() throws Exception public void setup() throws Exception
Expand All @@ -103,9 +99,8 @@ public void setup() throws Exception
databaseHealth = dependencyResolver.satisfyDependency( databaseHealth = dependencyResolver.satisfyDependency(
new DatabaseHealth( mock( DatabasePanicEventGenerator.class ), logProvider.getLog( DatabaseHealth.class ) ) ); new DatabaseHealth( mock( DatabasePanicEventGenerator.class ), logProvider.getLog( DatabaseHealth.class ) ) );


topologyService = dependencyResolver.satisfyDependency( new FakeTopologyService( 2, 3, myself, RoleInfo.FOLLOWER ) ); topologyService = dependencyResolver.satisfyDependency(

new FakeTopologyService( Arrays.asList( core2, core3 ), Collections.singleton( replica ), myself, RoleInfo.FOLLOWER ) );
coreMembershipMonitor = dependencyResolver.satisfyDependency( new CoreMembershipMonitor( mock( RaftMachine.class ) ) );


raftMessageTimerResetMonitor = dependencyResolver.satisfyDependency( new DurationSinceLastMessageMonitor( logProvider ) ); raftMessageTimerResetMonitor = dependencyResolver.satisfyDependency( new DurationSinceLastMessageMonitor( logProvider ) );
raftMachine = dependencyResolver.satisfyDependency( mock( RaftMachine.class ) ); raftMachine = dependencyResolver.satisfyDependency( mock( RaftMachine.class ) );
Expand Down Expand Up @@ -180,13 +175,11 @@ public void testAnswersWhenFollower()
assertEquals( "false", writable.getEntity() ); assertEquals( "false", writable.getEntity() );
} }



@Test @Test
public void expectedStatusFieldsAreIncluded() throws IOException, NoLeaderFoundException public void expectedStatusFieldsAreIncluded() throws IOException, NoLeaderFoundException
{ {
// given ideal normal conditions // given ideal normal conditions
commandIndexTracker.setAppliedCommandIndex( 123 ); commandIndexTracker.setAppliedCommandIndex( 123 );
coreMembershipMonitor.joinedRaftGroup();
when( raftMachine.getLeader() ).thenReturn( core2 ); when( raftMachine.getLeader() ).thenReturn( core2 );
raftMessageTimerResetMonitor.timerReset(); raftMessageTimerResetMonitor.timerReset();


Expand All @@ -210,10 +203,11 @@ public void expectedStatusFieldsAreIncluded() throws IOException, NoLeaderFoundE
} }


@Test @Test
public void notParticipatingInRaftGroupWhenNotJoinedRaft() throws IOException public void notParticipatingInRaftGroupWhenNotInVoterSet() throws IOException
{ {
// given // given not in voting set
topologyService.makeLeader( myself ); topologyService.replaceWithRole( core2, RoleInfo.LEADER ); // TODO necessary?
when( raftMembershipManager.votingMembers() ).thenReturn( new HashSet<>( Arrays.asList( core2, core3 ) ) );


// when // when
Response description = status.description(); Response description = status.description();
Expand All @@ -226,9 +220,8 @@ public void notParticipatingInRaftGroupWhenNotJoinedRaft() throws IOException
@Test @Test
public void notParticipatingInRaftGroupWhenLeaderUnknown() throws IOException public void notParticipatingInRaftGroupWhenLeaderUnknown() throws IOException
{ {
// given // given leader is unknown
coreMembershipMonitor.joinedRaftGroup(); topologyService.replaceWithRole( null, RoleInfo.LEADER );
topologyService.makeLeader( null ); // TODO not necessary?


// when // when
Response description = status.description(); Response description = status.description();
Expand All @@ -243,7 +236,7 @@ public void databaseHealthIsReflected() throws IOException
{ {
// given database is not healthy // given database is not healthy
databaseHealth.panic( new RuntimeException() ); databaseHealth.panic( new RuntimeException() );
topologyService.makeLeader( myself ); topologyService.replaceWithRole( myself, RoleInfo.LEADER ); // TODO necessary?


// when // when
Response description = status.description(); Response description = status.description();
Expand All @@ -257,7 +250,7 @@ public void databaseHealthIsReflected() throws IOException
public void leaderIsEmptyStringIfNonExistent() throws IOException public void leaderIsEmptyStringIfNonExistent() throws IOException
{ {
// given no leader // given no leader
topologyService.makeLeader( null ); topologyService.replaceWithRole( null, RoleInfo.LEADER );


// when // when
Response description = status.description(); Response description = status.description();
Expand Down Expand Up @@ -316,5 +309,4 @@ else if ( !areEqual )
} }
}; };
} }

} }

0 comments on commit a0920e0

Please sign in to comment.