X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?p=controller.git;a=blobdiff_plain;f=benchmark%2Fdsbenchmark%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fdsbenchmark%2FDsbenchmarkProvider.java;h=2c25951986bf952efe52fb181ff085c96422b221;hp=92ac69c0ecc498025c0eae1a2e07c254b78564ff;hb=f1df4d4b606bd729b9f13b7ed19e35203708645d;hpb=29bb6776c62775c5dc73789e4a63d1dc12cc8a64 diff --git a/benchmark/dsbenchmark/src/main/java/org/opendaylight/dsbenchmark/DsbenchmarkProvider.java b/benchmark/dsbenchmark/src/main/java/org/opendaylight/dsbenchmark/DsbenchmarkProvider.java index 92ac69c0ec..2c25951986 100644 --- a/benchmark/dsbenchmark/src/main/java/org/opendaylight/dsbenchmark/DsbenchmarkProvider.java +++ b/benchmark/dsbenchmark/src/main/java/org/opendaylight/dsbenchmark/DsbenchmarkProvider.java @@ -19,6 +19,7 @@ import org.opendaylight.controller.md.sal.dom.api.DOMDataBroker; import org.opendaylight.controller.sal.binding.api.BindingAwareBroker.ProviderContext; import org.opendaylight.controller.sal.binding.api.BindingAwareBroker.RpcRegistration; import org.opendaylight.controller.sal.binding.api.BindingAwareProvider; +import org.opendaylight.dsbenchmark.listener.DsbenchmarkListenerProvider; import org.opendaylight.dsbenchmark.simpletx.SimpletxBaDelete; import org.opendaylight.dsbenchmark.simpletx.SimpletxBaRead; import org.opendaylight.dsbenchmark.simpletx.SimpletxBaWrite; @@ -52,14 +53,19 @@ import com.google.common.util.concurrent.Futures; public class DsbenchmarkProvider implements BindingAwareProvider, DsbenchmarkService, AutoCloseable { private static final Logger LOG = LoggerFactory.getLogger(DsbenchmarkProvider.class); - private final AtomicReference execStatus = new AtomicReference( ExecStatus.Idle ); - - private static final InstanceIdentifier TEST_EXEC_IID = InstanceIdentifier.builder(TestExec.class).build(); - private static final InstanceIdentifier TEST_STATUS_IID = InstanceIdentifier.builder(TestStatus.class).build(); - private final DOMDataBroker domDataBroker; - private final DataBroker bindingDataBroker; + private static final InstanceIdentifier TEST_EXEC_IID = + InstanceIdentifier.builder(TestExec.class).build(); + private static final InstanceIdentifier TEST_STATUS_IID = + InstanceIdentifier.builder(TestStatus.class).build(); + + private final AtomicReference execStatus = new AtomicReference<>(ExecStatus.Idle); + private final DsbenchmarkListenerProvider listenerProvider = new DsbenchmarkListenerProvider(); + private final DOMDataBroker domDataBroker; // Async DOM Broker for use with all DOM operations + private final DataBroker bindingDataBroker; // Async Binding-Aware Broker for use in tx chains; initialized to + // ping-pong broker in default config (see default-config.xml and + // dsbenchmark-impl.yang) + private DataBroker dataBroker; // "Legacy" OSGI Data Broker for use in simple transactions private RpcRegistration dstReg; - private DataBroker dataBroker; private long testsCompleted = 0; @@ -74,6 +80,7 @@ public class DsbenchmarkProvider implements BindingAwareProvider, DsbenchmarkSer public void onSessionInitiated(ProviderContext session) { this.dataBroker = session.getSALService(DataBroker.class); this.dstReg = session.addRpcImplementation( DsbenchmarkService.class, this ); + listenerProvider.setDataBroker(dataBroker); setTestOperData(this.execStatus.get(), testsCompleted); LOG.info("DsbenchmarkProvider Session Initiated"); @@ -89,7 +96,7 @@ public class DsbenchmarkProvider implements BindingAwareProvider, DsbenchmarkSer public Future> cleanupStore() { cleanupTestStore(); LOG.info("Data Store cleaned up"); - return Futures.immediateFuture( RpcResultBuilder. success().build() ); + return Futures.immediateFuture( RpcResultBuilder.success().build()); } @Override @@ -110,6 +117,9 @@ public class DsbenchmarkProvider implements BindingAwareProvider, DsbenchmarkSer // Get the appropriate writer based on operation type and data format DatastoreAbstractWriter dsWriter = getDatastoreWriter(input); + // Create listeners on OPERATIONAL and CONFIG test data subtrees + listenerProvider.createAndRegisterListeners(input.getListeners().intValue()); + long startTime, endTime, listCreateTime, execTime; startTime = System.nanoTime(); @@ -126,7 +136,7 @@ public class DsbenchmarkProvider implements BindingAwareProvider, DsbenchmarkSer this.testsCompleted++; - } catch ( Exception e ) { + } catch (Exception e) { LOG.error( "Test error: {}", e.toString()); execStatus.set( ExecStatus.Idle ); return RpcResultBuilder.success(new StartTestOutputBuilder() @@ -138,11 +148,17 @@ public class DsbenchmarkProvider implements BindingAwareProvider, DsbenchmarkSer setTestOperData( ExecStatus.Idle, testsCompleted); execStatus.set(ExecStatus.Idle); + // Get the number of data change events and cleanup the data change listeners + long numDataChanges = listenerProvider.getDataChangeCount(); + long numEvents = listenerProvider.getEventCountAndDestroyListeners(); + StartTestOutput output = new StartTestOutputBuilder() .setStatus(StartTestOutput.Status.OK) .setListBuildTime(listCreateTime) .setExecTime(execTime) .setTxOk((long)dsWriter.getTxOk()) + .setNtfOk(numEvents) + .setDataChangeEventsOk(numDataChanges) .setTxError((long)dsWriter.getTxError()) .build(); @@ -181,7 +197,7 @@ public class DsbenchmarkProvider implements BindingAwareProvider, DsbenchmarkSer LOG.info("Failed to cleanup DataStore configtest data"); throw new IllegalStateException(e); } - + tx = dataBroker.newWriteOnlyTransaction(); tx.put(LogicalDatastoreType.OPERATIONAL, TEST_EXEC_IID, data); try {