X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;ds=sidebyside;f=benchmark%2Fdsbenchmark%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fdsbenchmark%2FDsbenchmarkProvider.java;h=2c25951986bf952efe52fb181ff085c96422b221;hb=f1df4d4b606bd729b9f13b7ed19e35203708645d;hp=56e3899d2dc172df03933216d006efa10717db94;hpb=bc740310bca93dcefcf546f7c4a627d8153b3739;p=controller.git 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 56e3899d2d..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(); @@ -176,9 +192,19 @@ public class DsbenchmarkProvider implements BindingAwareProvider, DsbenchmarkSer tx.put(LogicalDatastoreType.CONFIGURATION, TEST_EXEC_IID, data); try { tx.submit().checkedGet(); - LOG.info("DataStore test data cleaned up"); + LOG.info("DataStore config test data cleaned up"); + } catch (TransactionCommitFailedException e) { + LOG.info("Failed to cleanup DataStore configtest data"); + throw new IllegalStateException(e); + } + + tx = dataBroker.newWriteOnlyTransaction(); + tx.put(LogicalDatastoreType.OPERATIONAL, TEST_EXEC_IID, data); + try { + tx.submit().checkedGet(); + LOG.info("DataStore operational test data cleaned up"); } catch (TransactionCommitFailedException e) { - LOG.info("Failed to cleanup DataStore test data"); + LOG.info("Failed to cleanup DataStore operational test data"); throw new IllegalStateException(e); } @@ -191,6 +217,7 @@ public class DsbenchmarkProvider implements BindingAwareProvider, DsbenchmarkSer StartTestInput.TransactionType txType = input.getTransactionType(); StartTestInput.Operation oper = input.getOperation(); StartTestInput.DataFormat dataFormat = input.getDataFormat(); + StartTestInput.DataStore dataStore = input.getDataStore(); int outerListElem = input.getOuterElements().intValue(); int innerListElem = input.getInnerElements().intValue(); int writesPerTx = input.getPutsPerTx().intValue(); @@ -200,49 +227,49 @@ public class DsbenchmarkProvider implements BindingAwareProvider, DsbenchmarkSer if (dataFormat == StartTestInput.DataFormat.BINDINGAWARE) { if (StartTestInput.Operation.DELETE == oper) { retVal = new SimpletxBaDelete(this.dataBroker, outerListElem, - innerListElem,writesPerTx); + innerListElem,writesPerTx, dataStore); } else if (StartTestInput.Operation.READ == oper) { retVal = new SimpletxBaRead(this.dataBroker, outerListElem, - innerListElem,writesPerTx); + innerListElem, writesPerTx, dataStore); } else { retVal = new SimpletxBaWrite(this.dataBroker, oper, outerListElem, - innerListElem,writesPerTx); + innerListElem, writesPerTx, dataStore); } } else { if (StartTestInput.Operation.DELETE == oper) { retVal = new SimpletxDomDelete(this.domDataBroker, outerListElem, - innerListElem, writesPerTx); + innerListElem, writesPerTx, dataStore); } else if (StartTestInput.Operation.READ == oper) { retVal = new SimpletxDomRead(this.domDataBroker, outerListElem, - innerListElem, writesPerTx); + innerListElem, writesPerTx, dataStore); } else { retVal = new SimpletxDomWrite(this.domDataBroker, oper, outerListElem, - innerListElem,writesPerTx); + innerListElem, writesPerTx, dataStore); } } } else { if (dataFormat == StartTestInput.DataFormat.BINDINGAWARE) { if (StartTestInput.Operation.DELETE == oper) { retVal = new TxchainBaDelete(this.bindingDataBroker, outerListElem, - innerListElem, writesPerTx); + innerListElem, writesPerTx, dataStore); } else if (StartTestInput.Operation.READ == oper) { retVal = new TxchainBaRead(this.bindingDataBroker,outerListElem, - innerListElem,writesPerTx); + innerListElem,writesPerTx, dataStore); } else { retVal = new TxchainBaWrite(this.bindingDataBroker, oper, outerListElem, - innerListElem,writesPerTx); + innerListElem, writesPerTx, dataStore); } } else { if (StartTestInput.Operation.DELETE == oper) { retVal = new TxchainDomDelete(this.domDataBroker, outerListElem, - innerListElem, writesPerTx); + innerListElem, writesPerTx, dataStore); } else if (StartTestInput.Operation.READ == oper) { retVal = new TxchainDomRead(this.domDataBroker, outerListElem, - innerListElem, writesPerTx); + innerListElem, writesPerTx, dataStore); } else { retVal = new TxchainDomWrite(this.domDataBroker, oper, outerListElem, - innerListElem,writesPerTx); + innerListElem,writesPerTx, dataStore); } } }