package com.ldbc.driver;
import com.ldbc.driver.runtime.ConcurrentErrorReporter;
import com.ldbc.driver.runtime.coordination.DummyLocalCompletionTimeWriter;
import com.ldbc.driver.runtime.coordination.LocalCompletionTimeWriter;
import com.ldbc.driver.runtime.metrics.DummyCountingMetricsService;
import com.ldbc.driver.runtime.metrics.MetricsService;
import com.ldbc.driver.runtime.scheduling.Spinner;
import com.ldbc.driver.temporal.SystemTimeSource;
import com.ldbc.driver.temporal.TimeSource;
import com.ldbc.driver.workloads.dummy.NothingOperation;
import org.junit.Test;
import static java.lang.String.format;
public class OperationHandlerRunnableContextFactoryTest
{
@Test
public void shouldRunOperationHandlerTest() throws OperationException, InterruptedException
{
Operation operation = new NothingOperation();
int count = 100;
while ( count < 10000000 )
{
OperationHandlerRunnerFactory instantiatingOperationHandlerRunnerFactory =
new InstantiatingOperationHandlerRunnerFactory();
OperationHandlerRunnerFactory pooledInstantiatingOperationHandlerRunnerFactory =
new PoolingOperationHandlerRunnerFactory( new InstantiatingOperationHandlerRunnerFactory() );
long instantiatingDuration =
doOperationHandlerTest( count, instantiatingOperationHandlerRunnerFactory, operation );
long pooledInstantiatingDuration =
doOperationHandlerTest( count, pooledInstantiatingOperationHandlerRunnerFactory, operation );
count = count * 4;
System.out.println( format( "Count: %s, Instantiating: %s, PooledInstantiating: %s, Speedup: %s", count,
instantiatingDuration, pooledInstantiatingDuration,
instantiatingDuration / (double) pooledInstantiatingDuration ) );
instantiatingOperationHandlerRunnerFactory.shutdown();
pooledInstantiatingOperationHandlerRunnerFactory.shutdown();
}
}
public long doOperationHandlerTest( int count, OperationHandlerRunnerFactory operationHandlerRunnerFactory,
Operation operation ) throws OperationException
{
boolean ignoreScheduledStartTime = false;
TimeSource timeSource = new SystemTimeSource();
ConcurrentErrorReporter errorReporter = new ConcurrentErrorReporter();
long spinnerSleepDuration = 0;
Spinner spinner = new Spinner( timeSource, spinnerSleepDuration, ignoreScheduledStartTime );
LocalCompletionTimeWriter localCompletionTimeWriter = new DummyLocalCompletionTimeWriter();
MetricsService metricsService = new DummyCountingMetricsService();
long startTime = timeSource.nowAsMilli();
for ( int i = 0; i < count; i++ )
{
OperationHandlerRunnableContext operationHandler =
operationHandlerRunnerFactory.newOperationHandlerRunner();
operationHandler
.init( timeSource, spinner, operation, localCompletionTimeWriter, errorReporter, metricsService );
operationHandler.cleanup();
}
return timeSource.nowAsMilli() - startTime;
}
}