Skip to content

Commit

Permalink
Improve logging when ce cluster fails to startup
Browse files Browse the repository at this point in the history
  • Loading branch information
davidegrohmann committed May 24, 2016
1 parent 854461c commit 1b97705
Show file tree
Hide file tree
Showing 3 changed files with 20 additions and 20 deletions.
Expand Up @@ -20,8 +20,6 @@
package org.neo4j.coreedge.server.core;

import java.util.concurrent.CompletableFuture;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.TimeoutException;

import org.neo4j.coreedge.catchup.CatchupServer;
import org.neo4j.coreedge.raft.DelayedRenewableTimeoutService;
Expand All @@ -34,22 +32,19 @@
import org.neo4j.kernel.impl.transaction.state.DataSourceManager;
import org.neo4j.kernel.lifecycle.LifeSupport;
import org.neo4j.kernel.lifecycle.LifecycleAdapter;
import org.neo4j.logging.Log;
import org.neo4j.logging.LogProvider;

import static java.lang.String.format;
import static java.util.concurrent.TimeUnit.MILLISECONDS;

public class CoreServerStartupProcess
{
public static LifeSupport createLifeSupport(
DataSourceManager dataSourceManager,
ReplicatedIdGeneratorFactory idGeneratorFactory,
RaftInstance<CoreMember> raft,
CoreState coreState,
RaftServer<CoreMember> raftServer,
CatchupServer catchupServer,
DelayedRenewableTimeoutService raftTimeoutService,
MembershipWaiter<CoreMember> membershipWaiter,
long joinCatchupTimeout )
public static LifeSupport createLifeSupport( DataSourceManager dataSourceManager,
ReplicatedIdGeneratorFactory idGeneratorFactory, RaftInstance<CoreMember> raft, CoreState coreState,
RaftServer<CoreMember> raftServer, CatchupServer catchupServer,
DelayedRenewableTimeoutService raftTimeoutService, MembershipWaiter<CoreMember> membershipWaiter,
long joinCatchupTimeout, LogProvider logProvider )
{
LifeSupport services = new LifeSupport();
services.add( dataSourceManager );
Expand All @@ -58,7 +53,7 @@ public static LifeSupport createLifeSupport(
services.add( raftServer );
services.add( catchupServer );
services.add( raftTimeoutService );
services.add( new MembershipWaiterLifecycle<>( membershipWaiter, joinCatchupTimeout, raft ) );
services.add( new MembershipWaiterLifecycle<>( membershipWaiter, joinCatchupTimeout, raft, logProvider ) );

return services;
}
Expand All @@ -68,12 +63,15 @@ private static class MembershipWaiterLifecycle<MEMBER> extends LifecycleAdapter
private final MembershipWaiter<MEMBER> membershipWaiter;
private final Long joinCatchupTimeout;
private final RaftInstance<MEMBER> raft;
private final Log log;

private MembershipWaiterLifecycle( MembershipWaiter<MEMBER> membershipWaiter, Long joinCatchupTimeout, RaftInstance<MEMBER> raft )
private MembershipWaiterLifecycle( MembershipWaiter<MEMBER> membershipWaiter, Long joinCatchupTimeout,
RaftInstance<MEMBER> raft, LogProvider logProvider )
{
this.membershipWaiter = membershipWaiter;
this.joinCatchupTimeout = joinCatchupTimeout;
this.raft = raft;
this.log = logProvider.getLog( getClass() );
}

@Override
Expand All @@ -85,10 +83,12 @@ public void start() throws Throwable
{
caughtUp.get( joinCatchupTimeout, MILLISECONDS );
}
catch ( InterruptedException | ExecutionException | TimeoutException e )
catch ( Throwable e )
{
throw new RuntimeException( format( "Server failed to join cluster within catchup time limit [%d ms]",
joinCatchupTimeout ), e );
String message =
format( "Server failed to join cluster within catchup time limit [%d ms]", joinCatchupTimeout );
log.error( message, e );
throw new RuntimeException( message, e );
}
finally
{
Expand Down
Expand Up @@ -519,8 +519,7 @@ fileSystem, new File( clusterStateDirectory, "id-allocation-state" ), "id-alloca
platformModule.dataSourceManager, replicatedIdGeneratorFactory, raft,
coreState, raftServer,
catchupServer, raftTimeoutService, membershipWaiter,
joinCatchupTimeout
) );
joinCatchupTimeout, logProvider ) );
}

private RaftLog createRaftLog(
Expand Down
Expand Up @@ -38,6 +38,7 @@
import org.neo4j.kernel.impl.transaction.state.DataSourceManager;
import org.neo4j.kernel.lifecycle.LifeSupport;
import org.neo4j.kernel.lifecycle.Lifecycle;
import org.neo4j.logging.NullLogProvider;

import static org.hamcrest.MatcherAssert.assertThat;
import static org.mockito.Mockito.mock;
Expand All @@ -59,7 +60,7 @@ public void raftTimeOutServiceTriggersMessagesSentToAnotherServer() throws Excep

LifeSupport lifeSupport = CoreServerStartupProcess.createLifeSupport( dataSourceManager,
idGeneratorFactory, raftInstance, recoverableStateMachine, raftServer, catchupServer, raftTimeoutService,
membershipWaiter, 0 );
membershipWaiter, 0, NullLogProvider.getInstance() );

assertThat( lifeSupport, startsComponent( raftTimeoutService ).after( raftServer )
.because( "server need to be ready to handle responses generated by timeout events" ) );
Expand Down

0 comments on commit 1b97705

Please sign in to comment.