in chop/webapp/src/main/java/org/apache/usergrid/chop/webapp/coordinator/rest/ResetResource.java [78:202]
public Response reset(
@QueryParam( RestParams.COMMIT_ID ) String commitId,
@QueryParam( RestParams.MODULE_ARTIFACTID ) String artifactId,
@QueryParam( RestParams.MODULE_GROUPID ) String groupId,
@QueryParam( RestParams.MODULE_VERSION ) String version,
@QueryParam( RestParams.USERNAME ) String user,
@Nullable @QueryParam( TestMode.TEST_MODE_PROPERTY ) String testMode
) {
if( inTestMode( testMode ) ) {
LOG.info( "Calling /reset in test mode ..." );
}
else {
LOG.info( "Calling /reset" );
}
LOG.info( " Commit Id: {}", commitId );
LOG.info( " Group Id: {}", groupId );
LOG.info( " Artifact Id: {}", artifactId );
LOG.info( " Version: {}", version );
LOG.info( " User: {}", user );
// Check if the stack is set up first
SetupStackState status = stackCoordinator.stackStatus( commitId, artifactId, groupId, version, user );
if( inTestMode( testMode ) ) {
return Response.status( Response.Status.CREATED )
.entity( status )
.type( MediaType.APPLICATION_JSON )
.build();
}
if( ! status.equals( SetupStackState.SetUp ) ) {
return Response.status( Response.Status.OK )
.entity( "Stack is " + status.toString() + ", cannot reset tests." )
.type( MediaType.APPLICATION_JSON )
.build();
}
/** SetupStackState.SetUp */
LOG.info( "Stack is set up, checking runner states..." );
/** Check state of all runners */
String moduleId = BasicModule.createId( groupId, artifactId, version );
Collection<Runner> runners = runnerCoordinator.getRunners( user, commitId, moduleId );
Map<Runner, State> states = runnerCoordinator.getStates( runners );
Collection<Runner> stoppedRunners = new LinkedList<Runner>();
StringBuilder sbToReset = new StringBuilder();
StringBuilder sbFail = new StringBuilder();
sbFail.append( "Cannot reset tests.\n" );
int notAvailable = 0;
for ( Runner runner: runners ) {
State state = states.get( runner );
if( state == State.STOPPED ) {
stoppedRunners.add( runner );
sbToReset.append( "Runner at " )
.append( runner.getUrl() )
.append( " is in " )
.append( state )
.append( " state.\n" );
}
else if( state != State.READY ) {
notAvailable++;
sbFail.append( "Runner at " )
.append( runner.getUrl() )
.append( " is in " )
.append( state )
.append( " state.\n" );
}
}
// Some runners are still running or inactive
if( notAvailable > 0 ) {
sbFail.append( notAvailable )
.append( " out of " )
.append( runners.size() )
.append( " are still running or inactive." );
return Response.status( Response.Status.OK )
.entity( sbFail.toString() )
.type( MediaType.APPLICATION_JSON )
.build();
}
if( stoppedRunners.size() == 0 ) {
return Response.status( Response.Status.OK )
.entity( "No runners are in STOPPED state, will not reset." )
.type( MediaType.APPLICATION_JSON )
.build();
}
/** Sending reset signal to runners */
LOG.info( sbToReset.toString() );
LOG.info( "Sending reset signal to stopped instances..." );
states = runnerCoordinator.reset( stoppedRunners );
int notReset = 0;
StringBuilder sb = new StringBuilder();
sb.append( "Could not reset all runners.\n" );
for( Runner runner: stoppedRunners ) {
State state = states.get( runner );
if( state != State.READY ) {
notReset++;
sb.append( "Runner at " )
.append( runner.getUrl() )
.append( " is in " )
.append( state )
.append( " state.\n" );
}
}
// Not all stopped runners could be reset
if( notReset > 0 ) {
sb.append( notReset )
.append( " out of " )
.append( stoppedRunners.size() )
.append( " stopped runners could not be reset." );
return Response.status( Response.Status.OK )
.entity( sb.toString() )
.type( MediaType.APPLICATION_JSON )
.build();
}
return Response.status( Response.Status.CREATED )
.entity( "All stopped runners have been reset." )
.type( MediaType.APPLICATION_JSON )
.build();
}