package com.ldbc.driver.runtime.executor;
import com.ldbc.driver.ChildOperationGenerator;
import com.ldbc.driver.DbException;
import com.ldbc.driver.Operation;
import com.ldbc.driver.OperationHandlerRunnableContext;
import com.ldbc.driver.WorkloadException;
import com.ldbc.driver.runtime.coordination.CompletionTimeException;
public class ChildOperationExecutor
{
public void execute(
ChildOperationGenerator childOperationGenerator,
Operation operation,
Object result,
long actualStartTimeAsMilli,
long runDurationAsNano,
OperationHandlerRunnableContextRetriever operationHandlerRunnableContextRetriever )
throws WorkloadException, DbException, OperationExecutorException, CompletionTimeException
{
if ( null == childOperationGenerator )
{
return;
}
else
{
if ( null != childOperationGenerator )
{
double state = childOperationGenerator.initialState();
operation = childOperationGenerator.nextOperation(
state,
operation,
result,
actualStartTimeAsMilli,
runDurationAsNano
);
while ( null != operation )
{
OperationHandlerRunnableContext childOperationHandlerRunnableContext =
operationHandlerRunnableContextRetriever.getInitializedHandlerFor( operation );
childOperationHandlerRunnableContext.run();
state = childOperationGenerator.updateState( state, operation.type() );
operation = childOperationGenerator.nextOperation(
state,
childOperationHandlerRunnableContext.operation(),
childOperationHandlerRunnableContext.resultReporter().result(),
childOperationHandlerRunnableContext.resultReporter().actualStartTimeAsMilli(),
childOperationHandlerRunnableContext.resultReporter().runDurationAsNano()
);
childOperationHandlerRunnableContext.cleanup();
}
}
}
}
}