X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=benchmark%2Frpcbenchmark%2Fsrc%2Fmain%2Fjava%2Frpcbenchmark%2Fimpl%2FRpcbenchmarkProvider.java;h=c785e9b384134eb023833364961ecc68566e1eca;hb=HEAD;hp=0c9a54b8e9b3ae0a230d57d66b1a8ac4ab0be336;hpb=2611e6a728e586ea34dd891f30a473bf54d6cbd8;p=controller.git diff --git a/benchmark/rpcbenchmark/src/main/java/rpcbenchmark/impl/RpcbenchmarkProvider.java b/benchmark/rpcbenchmark/src/main/java/rpcbenchmark/impl/RpcbenchmarkProvider.java index 0c9a54b8e9..c785e9b384 100644 --- a/benchmark/rpcbenchmark/src/main/java/rpcbenchmark/impl/RpcbenchmarkProvider.java +++ b/benchmark/rpcbenchmark/src/main/java/rpcbenchmark/impl/RpcbenchmarkProvider.java @@ -8,6 +8,7 @@ package rpcbenchmark.impl; import static com.google.common.base.Verify.verifyNotNull; +import static java.util.Objects.requireNonNull; import com.google.common.util.concurrent.ListenableFuture; import java.util.ArrayList; @@ -17,78 +18,84 @@ import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.TimeUnit; import java.util.concurrent.atomic.AtomicReference; -import org.opendaylight.mdsal.binding.api.RpcConsumerRegistry; +import javax.annotation.PreDestroy; +import javax.inject.Inject; +import javax.inject.Singleton; import org.opendaylight.mdsal.binding.api.RpcProviderService; -import org.opendaylight.yang.gen.v1.rpcbench.payload.rev150702.RpcbenchPayloadService; +import org.opendaylight.mdsal.binding.api.RpcService; import org.opendaylight.yang.gen.v1.rpcbench.payload.rev150702.RpcbenchRpcRoutes; import org.opendaylight.yang.gen.v1.rpcbench.payload.rev150702.rpcbench.rpc.routes.RpcRoute; import org.opendaylight.yang.gen.v1.rpcbench.payload.rev150702.rpcbench.rpc.routes.RpcRouteKey; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.rpcbenchmark.rev150702.RpcbenchmarkService; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.rpcbenchmark.rev150702.StartTest; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.rpcbenchmark.rev150702.StartTestInput; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.rpcbenchmark.rev150702.StartTestOutput; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.rpcbenchmark.rev150702.StartTestOutputBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.rpcbenchmark.rev150702.TestStatus; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.rpcbenchmark.rev150702.TestStatusInput; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.rpcbenchmark.rev150702.TestStatusOutput; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.rpcbenchmark.rev150702.TestStatusOutput.ExecStatus; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.rpcbenchmark.rev150702.TestStatusOutputBuilder; -import org.opendaylight.yangtools.concepts.ObjectRegistration; +import org.opendaylight.yangtools.concepts.Registration; import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; -import org.opendaylight.yangtools.yang.binding.KeyedInstanceIdentifier; import org.opendaylight.yangtools.yang.common.RpcResult; import org.opendaylight.yangtools.yang.common.RpcResultBuilder; import org.opendaylight.yangtools.yang.common.Uint32; +import org.osgi.service.component.annotations.Activate; +import org.osgi.service.component.annotations.Component; +import org.osgi.service.component.annotations.Deactivate; +import org.osgi.service.component.annotations.Reference; +import org.osgi.service.component.annotations.RequireServiceComponentRuntime; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -public class RpcbenchmarkProvider implements AutoCloseable, RpcbenchmarkService { - +@Singleton +@Component(service = {}) +@RequireServiceComponentRuntime +public final class RpcbenchmarkProvider implements AutoCloseable { private static final Logger LOG = LoggerFactory.getLogger(RpcbenchmarkProvider.class); private static final int TEST_TIMEOUT = 5; - private final GlobalBindingRTCServer globalServer; private final AtomicReference execStatus = new AtomicReference<>(ExecStatus.Idle); private final RpcProviderService providerRegistry; - private final RpcConsumerRegistry consumerRegistry; - - public RpcbenchmarkProvider(final RpcProviderService providerRegistry, final RpcConsumerRegistry consumerRegistry, - final GlobalBindingRTCServer globalServer) { - this.providerRegistry = providerRegistry; - this.consumerRegistry = consumerRegistry; - this.globalServer = globalServer; - } - - public void init() { + private final RpcService consumerRegistry; + private final GlobalBindingRTCServer globalServer; + private final Registration reg; + + @Inject + @Activate + public RpcbenchmarkProvider(@Reference final RpcProviderService providerRegistry, + @Reference final RpcService consumerRegistry) { + this.providerRegistry = requireNonNull(providerRegistry); + this.consumerRegistry = requireNonNull(consumerRegistry); + globalServer = new GlobalBindingRTCServer(providerRegistry); + reg = providerRegistry.registerRpcImplementations((TestStatus) this::testStatus, (StartTest) this::startTest); LOG.info("RpcbenchmarkProvider initiated"); } @Override + @Deactivate + @PreDestroy public void close() { + globalServer.close(); + reg.close(); LOG.info("RpcbenchmarkProvider closed"); } - @Override - public ListenableFuture> startTest(final StartTestInput input) { + private ListenableFuture> startTest(final StartTestInput input) { LOG.debug("startTest {}", input); final RTCClient client; - final List> rpcRegs = new ArrayList<>(); + RoutedBindingRTCServer routed = null; switch (input.getOperation()) { case ROUTEDRTC: List> routeIid = new ArrayList<>(); for (int i = 0; i < input.getNumServers().intValue(); i++) { - GlobalBindingRTCServer server = new GlobalBindingRTCServer(); - KeyedInstanceIdentifier iid = - InstanceIdentifier.create(RpcbenchRpcRoutes.class) - .child(RpcRoute.class, new RpcRouteKey(Integer.toString(i))); - routeIid.add(iid); - - ObjectRegistration routedReg = providerRegistry.registerRpcImplementation( - RpcbenchPayloadService.class, server, Set.of(iid)); - - rpcRegs.add(routedReg); + routeIid.add(InstanceIdentifier.create(RpcbenchRpcRoutes.class) + .child(RpcRoute.class, new RpcRouteKey(Integer.toString(i)))); } + routed = new RoutedBindingRTCServer(providerRegistry, Set.copyOf(routeIid)); client = new RoutedBindingRTClient(consumerRegistry, input.getPayloadSize().intValue(), routeIid); break; @@ -136,12 +143,13 @@ public class RpcbenchmarkProvider implements AutoCloseable, RpcbenchmarkService .build(); return RpcResultBuilder.success(output).buildFuture(); } finally { - rpcRegs.forEach(ObjectRegistration::close); + if (routed != null) { + routed.close(); + } } } - @Override - public ListenableFuture> testStatus(final TestStatusInput input) { + private ListenableFuture> testStatus(final TestStatusInput input) { LOG.info("testStatus"); TestStatusOutput output = new TestStatusOutputBuilder() .setGlobalServerCnt(Uint32.valueOf(globalServer.getNumRpcs()))