From: Jozef Gloncak Date: Mon, 30 Mar 2015 09:23:58 +0000 (+0200) Subject: Wrap service handlers to method handleServiceCall. X-Git-Tag: release/lithium~592 X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=commitdiff_plain;h=7beb41f5716c02589dd3dd89c5ca1e32447e6e9c;p=openflowplugin.git Wrap service handlers to method handleServiceCall. Handling code in service handlers (expect PacketProcessingServiceImpl) were wrapped to handleServiceCall() method. Method handleServiceCall() was moved to CommonService abstract class Change-Id: I027f1b0658b4805366748377dfd43ca9c102df44 Signed-off-by: Jozef Gloncak --- diff --git a/openflowplugin-impl/src/main/java/org/opendaylight/openflowplugin/impl/services/CommonService.java b/openflowplugin-impl/src/main/java/org/opendaylight/openflowplugin/impl/services/CommonService.java index 5c07b8ea28..b2ffc2356a 100644 --- a/openflowplugin-impl/src/main/java/org/opendaylight/openflowplugin/impl/services/CommonService.java +++ b/openflowplugin-impl/src/main/java/org/opendaylight/openflowplugin/impl/services/CommonService.java @@ -7,6 +7,11 @@ */ package org.opendaylight.openflowplugin.impl.services; +import com.google.common.base.Function; +import com.google.common.util.concurrent.SettableFuture; +import org.opendaylight.openflowplugin.api.openflow.device.RequestContext; +import org.opendaylight.yangtools.yang.binding.DataObject; + import com.google.common.util.concurrent.Futures; import java.math.BigInteger; import java.util.concurrent.Future; @@ -20,7 +25,7 @@ import org.opendaylight.yangtools.yang.common.RpcResult; import org.opendaylight.yangtools.yang.common.RpcResultBuilder; import org.slf4j.Logger; -public class CommonService { +abstract class CommonService { private static final Logger LOG = org.slf4j.LoggerFactory.getLogger(CommonService.class); private static final long WAIT_TIME = 2000; protected final static Future> ERROR_RPC_RESULT = Futures.immediateFuture(RpcResultBuilder @@ -34,7 +39,7 @@ public class CommonService { protected DeviceContext deviceContext; private ConnectionAdapter primaryConnectionAdapter; - public CommonService() { + CommonService() { } public CommonService(final RpcContext rpcContext) { @@ -70,4 +75,23 @@ public class CommonService { return primaryConnectionAdapter; } + Future> handleServiceCall(final BigInteger connectionID, + final Function>> function) { + LOG.debug("Calling the FlowMod RPC method on MessageDispatchService"); + + final RequestContext requestContext = rpcContext.createRequestContext(); + final SettableFuture> result = rpcContext.storeOrFail(requestContext); + + if (!result.isDone()) { + final Future> resultFromOFLib = function.apply(connectionID); + + final RpcResultConvertor rpcResultConvertor = new RpcResultConvertor<>(requestContext, deviceContext); + rpcResultConvertor.processResultFromOfJava(resultFromOFLib); + + } else { + RequestContextUtil.closeRequstContext(requestContext); + } + return result; + } + } diff --git a/openflowplugin-impl/src/main/java/org/opendaylight/openflowplugin/impl/services/OpendaylightFlowStatisticsServiceImpl.java b/openflowplugin-impl/src/main/java/org/opendaylight/openflowplugin/impl/services/OpendaylightFlowStatisticsServiceImpl.java index 07b3334607..044d2a1d00 100644 --- a/openflowplugin-impl/src/main/java/org/opendaylight/openflowplugin/impl/services/OpendaylightFlowStatisticsServiceImpl.java +++ b/openflowplugin-impl/src/main/java/org/opendaylight/openflowplugin/impl/services/OpendaylightFlowStatisticsServiceImpl.java @@ -7,11 +7,11 @@ */ package org.opendaylight.openflowplugin.impl.services; +import com.google.common.base.Function; +import java.math.BigInteger; import org.opendaylight.yangtools.yang.binding.DataObject; - import com.google.common.util.concurrent.JdkFutureAdapters; import com.google.common.util.concurrent.ListenableFuture; -import com.google.common.util.concurrent.SettableFuture; import java.util.concurrent.Future; import org.opendaylight.openflowplugin.api.OFConstants; import org.opendaylight.openflowplugin.api.openflow.device.RequestContext; @@ -50,218 +50,201 @@ public class OpendaylightFlowStatisticsServiceImpl extends CommonService impleme public Future> getAggregateFlowStatisticsFromFlowTableForAllFlows( final GetAggregateFlowStatisticsFromFlowTableForAllFlowsInput input) { - final RequestContext requestContext = rpcContext.createRequestContext(); - final SettableFuture> result = rpcContext - .storeOrFail(requestContext); - if (!result.isDone()) { - final Xid xid = deviceContext.getNextXid(); - - // Create multipart request body for fetch all the group stats - final MultipartRequestAggregateCaseBuilder multipartRequestAggregateCaseBuilder = new MultipartRequestAggregateCaseBuilder(); - final MultipartRequestAggregateBuilder mprAggregateRequestBuilder = new MultipartRequestAggregateBuilder(); - mprAggregateRequestBuilder.setTableId(input.getTableId().getValue()); - mprAggregateRequestBuilder.setOutPort(OFConstants.OFPP_ANY); - mprAggregateRequestBuilder.setOutGroup(OFConstants.OFPG_ANY); - mprAggregateRequestBuilder.setCookie(OFConstants.DEFAULT_COOKIE); - mprAggregateRequestBuilder.setCookieMask(OFConstants.DEFAULT_COOKIE_MASK); + return this. handleServiceCall( + PRIMARY_CONNECTION, new Function>>() { - FlowCreatorUtil.setWildcardedFlowMatch(version, mprAggregateRequestBuilder); + @Override + public Future> apply(final BigInteger IDConnection) { + final Xid xid = deviceContext.getNextXid(); - // Set request body to main multipart request - multipartRequestAggregateCaseBuilder.setMultipartRequestAggregate(mprAggregateRequestBuilder.build()); - final MultipartRequestInputBuilder mprInput = RequestInputUtils.createMultipartHeader( - MultipartType.OFPMPAGGREGATE, xid.getValue(), version); + // Create multipart request body for fetch all the group stats + final MultipartRequestAggregateCaseBuilder multipartRequestAggregateCaseBuilder = new MultipartRequestAggregateCaseBuilder(); + final MultipartRequestAggregateBuilder mprAggregateRequestBuilder = new MultipartRequestAggregateBuilder(); + mprAggregateRequestBuilder.setTableId(input.getTableId().getValue()); + mprAggregateRequestBuilder.setOutPort(OFConstants.OFPP_ANY); + mprAggregateRequestBuilder.setOutGroup(OFConstants.OFPG_ANY); + mprAggregateRequestBuilder.setCookie(OFConstants.DEFAULT_COOKIE); + mprAggregateRequestBuilder.setCookieMask(OFConstants.DEFAULT_COOKIE_MASK); - mprInput.setMultipartRequestBody(multipartRequestAggregateCaseBuilder.build()); + FlowCreatorUtil.setWildcardedFlowMatch(version, mprAggregateRequestBuilder); - final Future> resultFromOFLib = deviceContext.getPrimaryConnectionContext() - .getConnectionAdapter().multipartRequest(mprInput.build()); + // Set request body to main multipart request + multipartRequestAggregateCaseBuilder.setMultipartRequestAggregate(mprAggregateRequestBuilder + .build()); + final MultipartRequestInputBuilder mprInput = RequestInputUtils.createMultipartHeader( + MultipartType.OFPMPAGGREGATE, xid.getValue(), version); - final ListenableFuture> futureResultFromOfLib = JdkFutureAdapters - .listenInPoolThread(resultFromOFLib); + mprInput.setMultipartRequestBody(multipartRequestAggregateCaseBuilder.build()); - convertRpcResultToRequestFuture(requestContext, futureResultFromOfLib); + final Future> resultFromOFLib = deviceContext.getPrimaryConnectionContext() + .getConnectionAdapter().multipartRequest(mprInput.build()); - } + return JdkFutureAdapters.listenInPoolThread(resultFromOFLib); + } + }); - return result; } @Override public Future> getAggregateFlowStatisticsFromFlowTableForGivenMatch( final GetAggregateFlowStatisticsFromFlowTableForGivenMatchInput input) { - final RequestContext requestContext = rpcContext.createRequestContext(); - final SettableFuture> result = rpcContext - .storeOrFail(requestContext); - if (!result.isDone()) { - final Xid xid = deviceContext.getNextXid(); - final MultipartRequestAggregateCaseBuilder multipartRequestAggregateCaseBuilder = new MultipartRequestAggregateCaseBuilder(); - final MultipartRequestAggregateBuilder mprAggregateRequestBuilder = new MultipartRequestAggregateBuilder(); - mprAggregateRequestBuilder.setTableId(input.getTableId()); - mprAggregateRequestBuilder.setOutPort(input.getOutPort().longValue()); - // TODO: repeating code - if (version == OFConstants.OFP_VERSION_1_3) { - mprAggregateRequestBuilder.setCookie(input.getCookie().getValue()); - mprAggregateRequestBuilder.setCookieMask(input.getCookieMask().getValue()); - mprAggregateRequestBuilder.setOutGroup(input.getOutGroup()); - } else { - mprAggregateRequestBuilder.setOutGroup(OFConstants.OFPG_ANY); - mprAggregateRequestBuilder.setCookie(OFConstants.DEFAULT_COOKIE); - mprAggregateRequestBuilder.setCookieMask(OFConstants.DEFAULT_COOKIE_MASK); - } - - MatchReactor.getInstance().convert(input.getMatch(), version, mprAggregateRequestBuilder, - deviceContext.getPrimaryConnectionContext().getFeatures().getDatapathId()); - - FlowCreatorUtil.setWildcardedFlowMatch(version, mprAggregateRequestBuilder); - - // Set request body to main multipart request - multipartRequestAggregateCaseBuilder.setMultipartRequestAggregate(mprAggregateRequestBuilder.build()); - - final MultipartRequestInputBuilder mprInput = RequestInputUtils.createMultipartHeader( - MultipartType.OFPMPAGGREGATE, xid.getValue(), version); - - mprInput.setMultipartRequestBody(multipartRequestAggregateCaseBuilder.build()); - final Future> resultFromOFLib = deviceContext.getPrimaryConnectionContext() - .getConnectionAdapter().multipartRequest(mprInput.build()); - final ListenableFuture> futureResultFromOfLib = JdkFutureAdapters - .listenInPoolThread(resultFromOFLib); - - convertRpcResultToRequestFuture(requestContext, futureResultFromOfLib); - - } - return result; + return this. handleServiceCall( + PRIMARY_CONNECTION, new Function>>() { + + @Override + public Future> apply(final BigInteger IDConnection) { + final Xid xid = deviceContext.getNextXid(); + final MultipartRequestAggregateCaseBuilder multipartRequestAggregateCaseBuilder = new MultipartRequestAggregateCaseBuilder(); + final MultipartRequestAggregateBuilder mprAggregateRequestBuilder = new MultipartRequestAggregateBuilder(); + mprAggregateRequestBuilder.setTableId(input.getTableId()); + mprAggregateRequestBuilder.setOutPort(input.getOutPort().longValue()); + // TODO: repeating code + if (version == OFConstants.OFP_VERSION_1_3) { + mprAggregateRequestBuilder.setCookie(input.getCookie().getValue()); + mprAggregateRequestBuilder.setCookieMask(input.getCookieMask().getValue()); + mprAggregateRequestBuilder.setOutGroup(input.getOutGroup()); + } else { + mprAggregateRequestBuilder.setOutGroup(OFConstants.OFPG_ANY); + mprAggregateRequestBuilder.setCookie(OFConstants.DEFAULT_COOKIE); + mprAggregateRequestBuilder.setCookieMask(OFConstants.DEFAULT_COOKIE_MASK); + } + + MatchReactor.getInstance().convert(input.getMatch(), version, mprAggregateRequestBuilder, + deviceContext.getPrimaryConnectionContext().getFeatures().getDatapathId()); + + FlowCreatorUtil.setWildcardedFlowMatch(version, mprAggregateRequestBuilder); + + // Set request body to main multipart request + multipartRequestAggregateCaseBuilder.setMultipartRequestAggregate(mprAggregateRequestBuilder + .build()); + + final MultipartRequestInputBuilder mprInput = RequestInputUtils.createMultipartHeader( + MultipartType.OFPMPAGGREGATE, xid.getValue(), version); + + mprInput.setMultipartRequestBody(multipartRequestAggregateCaseBuilder.build()); + final Future> resultFromOFLib = deviceContext.getPrimaryConnectionContext() + .getConnectionAdapter().multipartRequest(mprInput.build()); + return JdkFutureAdapters.listenInPoolThread(resultFromOFLib); + } + }); + } @Override public Future> getAllFlowStatisticsFromFlowTable( final GetAllFlowStatisticsFromFlowTableInput input) { - - final RequestContext requestContext = rpcContext.createRequestContext(); - final SettableFuture> result = rpcContext - .storeOrFail(requestContext); - if (!result.isDone()) { - - final Xid xid = deviceContext.getNextXid(); - - final MultipartRequestFlowBuilder mprFlowRequestBuilder = new MultipartRequestFlowBuilder(); - mprFlowRequestBuilder.setTableId(input.getTableId().getValue()); - mprFlowRequestBuilder.setOutPort(OFConstants.OFPP_ANY); - mprFlowRequestBuilder.setOutGroup(OFConstants.OFPG_ANY); - mprFlowRequestBuilder.setCookie(OFConstants.DEFAULT_COOKIE); - mprFlowRequestBuilder.setCookieMask(OFConstants.DEFAULT_COOKIE_MASK); - FlowCreatorUtil.setWildcardedFlowMatch(version, mprFlowRequestBuilder); - - final MultipartRequestFlowCaseBuilder multipartRequestFlowCaseBuilder = new MultipartRequestFlowCaseBuilder(); - multipartRequestFlowCaseBuilder.setMultipartRequestFlow(mprFlowRequestBuilder.build()); - - final MultipartRequestInputBuilder mprInput = RequestInputUtils.createMultipartHeader( - MultipartType.OFPMPFLOW, xid.getValue(), version); - - mprInput.setMultipartRequestBody(multipartRequestFlowCaseBuilder.build()); - final Future> resultFromOFLib = deviceContext.getPrimaryConnectionContext() - .getConnectionAdapter().multipartRequest(mprInput.build()); - final ListenableFuture> futureResultFromOfLib = JdkFutureAdapters - .listenInPoolThread(resultFromOFLib); - - convertRpcResultToRequestFuture(requestContext, futureResultFromOfLib); - - } - return result; + return this. handleServiceCall(PRIMARY_CONNECTION, + new Function>>() { + + @Override + public Future> apply(final BigInteger IDConnection) { + final Xid xid = deviceContext.getNextXid(); + + final MultipartRequestFlowBuilder mprFlowRequestBuilder = new MultipartRequestFlowBuilder(); + mprFlowRequestBuilder.setTableId(input.getTableId().getValue()); + mprFlowRequestBuilder.setOutPort(OFConstants.OFPP_ANY); + mprFlowRequestBuilder.setOutGroup(OFConstants.OFPG_ANY); + mprFlowRequestBuilder.setCookie(OFConstants.DEFAULT_COOKIE); + mprFlowRequestBuilder.setCookieMask(OFConstants.DEFAULT_COOKIE_MASK); + FlowCreatorUtil.setWildcardedFlowMatch(version, mprFlowRequestBuilder); + + final MultipartRequestFlowCaseBuilder multipartRequestFlowCaseBuilder = new MultipartRequestFlowCaseBuilder(); + multipartRequestFlowCaseBuilder.setMultipartRequestFlow(mprFlowRequestBuilder.build()); + + final MultipartRequestInputBuilder mprInput = RequestInputUtils.createMultipartHeader( + MultipartType.OFPMPFLOW, xid.getValue(), version); + + mprInput.setMultipartRequestBody(multipartRequestFlowCaseBuilder.build()); + final Future> resultFromOFLib = deviceContext.getPrimaryConnectionContext() + .getConnectionAdapter().multipartRequest(mprInput.build()); + return JdkFutureAdapters.listenInPoolThread(resultFromOFLib); + } + }); } @Override public Future> getAllFlowsStatisticsFromAllFlowTables( final GetAllFlowsStatisticsFromAllFlowTablesInput input) { - - final RequestContext requestContext = rpcContext.createRequestContext(); - final SettableFuture> result = rpcContext - .storeOrFail(requestContext); - if (!result.isDone()) { - - final Xid xid = deviceContext.getNextXid(); - - final MultipartRequestFlowCaseBuilder multipartRequestFlowCaseBuilder = new MultipartRequestFlowCaseBuilder(); - final MultipartRequestFlowBuilder mprFlowRequestBuilder = new MultipartRequestFlowBuilder(); - mprFlowRequestBuilder.setTableId(OFConstants.OFPTT_ALL); - mprFlowRequestBuilder.setOutPort(OFConstants.OFPP_ANY); - mprFlowRequestBuilder.setOutGroup(OFConstants.OFPG_ANY); - mprFlowRequestBuilder.setCookie(OFConstants.DEFAULT_COOKIE); - mprFlowRequestBuilder.setCookieMask(OFConstants.DEFAULT_COOKIE_MASK); - FlowCreatorUtil.setWildcardedFlowMatch(version, mprFlowRequestBuilder); - - final MultipartRequestInputBuilder mprInput = RequestInputUtils.createMultipartHeader( - MultipartType.OFPMPFLOW, xid.getValue(), version); - - multipartRequestFlowCaseBuilder.setMultipartRequestFlow(mprFlowRequestBuilder.build()); - mprInput.setMultipartRequestBody(multipartRequestFlowCaseBuilder.build()); - final Future> resultFromOFLib = deviceContext.getPrimaryConnectionContext() - .getConnectionAdapter().multipartRequest(mprInput.build()); - final ListenableFuture> futureResultFromOfLib = JdkFutureAdapters - .listenInPoolThread(resultFromOFLib); - - convertRpcResultToRequestFuture(requestContext, futureResultFromOfLib); - } - return result; + return this. handleServiceCall(PRIMARY_CONNECTION, + new Function>>() { + + @Override + public Future> apply(final BigInteger IDConnection) { + final Xid xid = deviceContext.getNextXid(); + + final MultipartRequestFlowCaseBuilder multipartRequestFlowCaseBuilder = new MultipartRequestFlowCaseBuilder(); + final MultipartRequestFlowBuilder mprFlowRequestBuilder = new MultipartRequestFlowBuilder(); + mprFlowRequestBuilder.setTableId(OFConstants.OFPTT_ALL); + mprFlowRequestBuilder.setOutPort(OFConstants.OFPP_ANY); + mprFlowRequestBuilder.setOutGroup(OFConstants.OFPG_ANY); + mprFlowRequestBuilder.setCookie(OFConstants.DEFAULT_COOKIE); + mprFlowRequestBuilder.setCookieMask(OFConstants.DEFAULT_COOKIE_MASK); + FlowCreatorUtil.setWildcardedFlowMatch(version, mprFlowRequestBuilder); + + final MultipartRequestInputBuilder mprInput = RequestInputUtils.createMultipartHeader( + MultipartType.OFPMPFLOW, xid.getValue(), version); + + multipartRequestFlowCaseBuilder.setMultipartRequestFlow(mprFlowRequestBuilder.build()); + mprInput.setMultipartRequestBody(multipartRequestFlowCaseBuilder.build()); + final Future> resultFromOFLib = deviceContext.getPrimaryConnectionContext() + .getConnectionAdapter().multipartRequest(mprInput.build()); + return JdkFutureAdapters.listenInPoolThread(resultFromOFLib); + } + }); } @Override public Future> getFlowStatisticsFromFlowTable( final GetFlowStatisticsFromFlowTableInput input) { - final RequestContext requestContext = rpcContext.createRequestContext(); - final SettableFuture> result = rpcContext - .storeOrFail(requestContext); - if (!result.isDone()) { - final Xid xid = deviceContext.getNextXid(); - - final MultipartRequestFlowCaseBuilder multipartRequestFlowCaseBuilder = new MultipartRequestFlowCaseBuilder(); - final MultipartRequestFlowBuilder mprFlowRequestBuilder = new MultipartRequestFlowBuilder(); - mprFlowRequestBuilder.setTableId(input.getTableId()); - - if (input.getOutPort() != null) { - mprFlowRequestBuilder.setOutPort(input.getOutPort().longValue()); - } else { - mprFlowRequestBuilder.setOutPort(OFConstants.OFPP_ANY); - } - - if (input.getOutGroup() != null) { - mprFlowRequestBuilder.setOutGroup(input.getOutGroup()); - } else { - mprFlowRequestBuilder.setOutGroup(OFConstants.OFPG_ANY); - } - - if (input.getCookie() != null) { - mprFlowRequestBuilder.setCookie(input.getCookie().getValue()); - } else { - mprFlowRequestBuilder.setCookie(OFConstants.DEFAULT_COOKIE); - } - - if (input.getCookieMask() != null) { - mprFlowRequestBuilder.setCookieMask(input.getCookieMask().getValue()); - } else { - mprFlowRequestBuilder.setCookieMask(OFConstants.DEFAULT_COOKIE_MASK); - } - - // convert and inject match - MatchReactor.getInstance().convert(input.getMatch(), version, mprFlowRequestBuilder, - deviceContext.getPrimaryConnectionContext().getFeatures().getDatapathId()); - - // Set request body to main multipart request - multipartRequestFlowCaseBuilder.setMultipartRequestFlow(mprFlowRequestBuilder.build()); - final MultipartRequestInputBuilder mprInput = RequestInputUtils.createMultipartHeader( - MultipartType.OFPMPFLOW, xid.getValue(), version); - mprInput.setMultipartRequestBody(multipartRequestFlowCaseBuilder.build()); - final Future> resultFromOFLib = deviceContext.getPrimaryConnectionContext() - .getConnectionAdapter().multipartRequest(mprInput.build()); - final ListenableFuture> futureResultFromOfLib = JdkFutureAdapters - .listenInPoolThread(resultFromOFLib); - - convertRpcResultToRequestFuture(requestContext, futureResultFromOfLib); - - } else { - RequestContextUtil.closeRequstContext(requestContext); - } - return result; + return this. handleServiceCall(PRIMARY_CONNECTION, + new Function>>() { + + @Override + public Future> apply(final BigInteger IDConnection) { + final Xid xid = deviceContext.getNextXid(); + + final MultipartRequestFlowCaseBuilder multipartRequestFlowCaseBuilder = new MultipartRequestFlowCaseBuilder(); + final MultipartRequestFlowBuilder mprFlowRequestBuilder = new MultipartRequestFlowBuilder(); + mprFlowRequestBuilder.setTableId(input.getTableId()); + + if (input.getOutPort() != null) { + mprFlowRequestBuilder.setOutPort(input.getOutPort().longValue()); + } else { + mprFlowRequestBuilder.setOutPort(OFConstants.OFPP_ANY); + } + + if (input.getOutGroup() != null) { + mprFlowRequestBuilder.setOutGroup(input.getOutGroup()); + } else { + mprFlowRequestBuilder.setOutGroup(OFConstants.OFPG_ANY); + } + + if (input.getCookie() != null) { + mprFlowRequestBuilder.setCookie(input.getCookie().getValue()); + } else { + mprFlowRequestBuilder.setCookie(OFConstants.DEFAULT_COOKIE); + } + + if (input.getCookieMask() != null) { + mprFlowRequestBuilder.setCookieMask(input.getCookieMask().getValue()); + } else { + mprFlowRequestBuilder.setCookieMask(OFConstants.DEFAULT_COOKIE_MASK); + } + + // convert and inject match + MatchReactor.getInstance().convert(input.getMatch(), version, mprFlowRequestBuilder, + deviceContext.getPrimaryConnectionContext().getFeatures().getDatapathId()); + + // Set request body to main multipart request + multipartRequestFlowCaseBuilder.setMultipartRequestFlow(mprFlowRequestBuilder.build()); + final MultipartRequestInputBuilder mprInput = RequestInputUtils.createMultipartHeader( + MultipartType.OFPMPFLOW, xid.getValue(), version); + mprInput.setMultipartRequestBody(multipartRequestFlowCaseBuilder.build()); + final Future> resultFromOFLib = deviceContext.getPrimaryConnectionContext() + .getConnectionAdapter().multipartRequest(mprInput.build()); + return JdkFutureAdapters.listenInPoolThread(resultFromOFLib); + } + }); } private void convertRpcResultToRequestFuture(final RequestContext requestContext, diff --git a/openflowplugin-impl/src/main/java/org/opendaylight/openflowplugin/impl/services/OpendaylightFlowTableStatisticsServiceImpl.java b/openflowplugin-impl/src/main/java/org/opendaylight/openflowplugin/impl/services/OpendaylightFlowTableStatisticsServiceImpl.java index b7d4c7dab4..b594778052 100644 --- a/openflowplugin-impl/src/main/java/org/opendaylight/openflowplugin/impl/services/OpendaylightFlowTableStatisticsServiceImpl.java +++ b/openflowplugin-impl/src/main/java/org/opendaylight/openflowplugin/impl/services/OpendaylightFlowTableStatisticsServiceImpl.java @@ -7,11 +7,10 @@ */ package org.opendaylight.openflowplugin.impl.services; +import com.google.common.base.Function; +import java.math.BigInteger; import com.google.common.util.concurrent.JdkFutureAdapters; -import com.google.common.util.concurrent.ListenableFuture; -import com.google.common.util.concurrent.SettableFuture; import java.util.concurrent.Future; -import org.opendaylight.openflowplugin.api.openflow.device.RequestContext; import org.opendaylight.openflowplugin.api.openflow.device.Xid; import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.table.statistics.rev131215.GetFlowTablesStatisticsInput; import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.table.statistics.rev131215.GetFlowTablesStatisticsOutput; @@ -31,37 +30,30 @@ public class OpendaylightFlowTableStatisticsServiceImpl extends CommonService im @Override public Future> getFlowTablesStatistics( final GetFlowTablesStatisticsInput input) { - final RequestContext requestContext = rpcContext.createRequestContext(); - final SettableFuture> result = rpcContext.storeOrFail(requestContext); - - if (!result.isDone()) { - - final Xid xid = deviceContext.getNextXid(); - - // Create multipart request body for fetch all the group stats - final MultipartRequestTableCaseBuilder multipartRequestTableCaseBuilder = new MultipartRequestTableCaseBuilder(); - final MultipartRequestTableBuilder multipartRequestTableBuilder = new MultipartRequestTableBuilder(); - multipartRequestTableBuilder.setEmpty(true); - multipartRequestTableCaseBuilder.setMultipartRequestTable(multipartRequestTableBuilder.build()); - - // Set request body to main multipart request - final MultipartRequestInputBuilder mprInput = RequestInputUtils.createMultipartHeader( - MultipartType.OFPMPFLOW, xid.getValue(), version); - - mprInput.setMultipartRequestBody(multipartRequestTableCaseBuilder.build()); - final Future> resultFromOFLib = deviceContext.getPrimaryConnectionContext() - .getConnectionAdapter().multipartRequest(mprInput.build()); - - final ListenableFuture> futureResultFromOfLib = JdkFutureAdapters - .listenInPoolThread(resultFromOFLib); - - RpcResultConvertor rpcResultConvertor = new RpcResultConvertor<>(requestContext, deviceContext); - rpcResultConvertor.processResultFromOfJava(futureResultFromOfLib); - - } else { - RequestContextUtil.closeRequstContext(requestContext); - } - return result; + return this. handleServiceCall(PRIMARY_CONNECTION, + new Function>>() { + + @Override + public Future> apply(final BigInteger IDConnection) { + final Xid xid = deviceContext.getNextXid(); + + // Create multipart request body for fetch all the group stats + final MultipartRequestTableCaseBuilder multipartRequestTableCaseBuilder = new MultipartRequestTableCaseBuilder(); + final MultipartRequestTableBuilder multipartRequestTableBuilder = new MultipartRequestTableBuilder(); + multipartRequestTableBuilder.setEmpty(true); + multipartRequestTableCaseBuilder.setMultipartRequestTable(multipartRequestTableBuilder.build()); + + // Set request body to main multipart request + final MultipartRequestInputBuilder mprInput = RequestInputUtils.createMultipartHeader( + MultipartType.OFPMPFLOW, xid.getValue(), version); + + mprInput.setMultipartRequestBody(multipartRequestTableCaseBuilder.build()); + final Future> resultFromOFLib = deviceContext.getPrimaryConnectionContext() + .getConnectionAdapter().multipartRequest(mprInput.build()); + + return JdkFutureAdapters.listenInPoolThread(resultFromOFLib); + } + }); } } diff --git a/openflowplugin-impl/src/main/java/org/opendaylight/openflowplugin/impl/services/OpendaylightGroupStatisticsServiceImpl.java b/openflowplugin-impl/src/main/java/org/opendaylight/openflowplugin/impl/services/OpendaylightGroupStatisticsServiceImpl.java index 9ef8bb159d..21a4d1f7b9 100644 --- a/openflowplugin-impl/src/main/java/org/opendaylight/openflowplugin/impl/services/OpendaylightGroupStatisticsServiceImpl.java +++ b/openflowplugin-impl/src/main/java/org/opendaylight/openflowplugin/impl/services/OpendaylightGroupStatisticsServiceImpl.java @@ -7,12 +7,11 @@ */ package org.opendaylight.openflowplugin.impl.services; +import com.google.common.base.Function; +import java.math.BigInteger; import com.google.common.util.concurrent.JdkFutureAdapters; -import com.google.common.util.concurrent.ListenableFuture; -import com.google.common.util.concurrent.SettableFuture; import java.util.concurrent.Future; import org.opendaylight.openflowjava.protocol.api.util.BinContent; -import org.opendaylight.openflowplugin.api.openflow.device.RequestContext; import org.opendaylight.openflowplugin.api.openflow.device.Xid; import org.opendaylight.yang.gen.v1.urn.opendaylight.group.statistics.rev131111.GetAllGroupStatisticsInput; import org.opendaylight.yang.gen.v1.urn.opendaylight.group.statistics.rev131111.GetAllGroupStatisticsOutput; @@ -39,129 +38,102 @@ public class OpendaylightGroupStatisticsServiceImpl extends CommonService implem @Override public Future> getAllGroupStatistics(final GetAllGroupStatisticsInput input) { + return this. handleServiceCall(PRIMARY_CONNECTION, + new Function>>() { - final RequestContext requestContext = rpcContext.createRequestContext(); - final SettableFuture> result = rpcContext.storeOrFail(requestContext); + @Override + public Future> apply(final BigInteger IDConnection) { + final Xid xid = deviceContext.getNextXid(); - if (!result.isDone()) { + final MultipartRequestGroupCaseBuilder caseBuilder = new MultipartRequestGroupCaseBuilder(); + final MultipartRequestGroupBuilder mprGroupBuild = new MultipartRequestGroupBuilder(); + mprGroupBuild.setGroupId(new GroupId( + BinContent + .intToUnsignedLong(org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.Group.OFPGALL + .getIntValue()))); + caseBuilder.setMultipartRequestGroup(mprGroupBuild.build()); - final Xid xid = deviceContext.getNextXid(); + // Create multipart request header + final MultipartRequestInputBuilder mprInput = RequestInputUtils.createMultipartHeader( + MultipartType.OFPMPGROUP, xid.getValue(), version); - final MultipartRequestGroupCaseBuilder caseBuilder = new MultipartRequestGroupCaseBuilder(); - final MultipartRequestGroupBuilder mprGroupBuild = new MultipartRequestGroupBuilder(); - mprGroupBuild - .setGroupId(new GroupId( - BinContent - .intToUnsignedLong(org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.Group.OFPGALL - .getIntValue()))); - caseBuilder.setMultipartRequestGroup(mprGroupBuild.build()); + // Set request body to main multipart request + mprInput.setMultipartRequestBody(caseBuilder.build()); - // Create multipart request header - final MultipartRequestInputBuilder mprInput = RequestInputUtils.createMultipartHeader( - MultipartType.OFPMPGROUP, xid.getValue(), version); + // Send the request, no cookies associated, use any connection - // Set request body to main multipart request - mprInput.setMultipartRequestBody(caseBuilder.build()); + final Future> resultFromOFLib = deviceContext.getPrimaryConnectionContext() + .getConnectionAdapter().multipartRequest(mprInput.build()); + return JdkFutureAdapters.listenInPoolThread(resultFromOFLib); + } + }); - // Send the request, no cookies associated, use any connection - - final Future> resultFromOFLib = deviceContext.getPrimaryConnectionContext() - .getConnectionAdapter().multipartRequest(mprInput.build()); - final ListenableFuture> futureResultFromOfLib = JdkFutureAdapters - .listenInPoolThread(resultFromOFLib); - - final RpcResultConvertor rpcResultConvertor = new RpcResultConvertor<>(requestContext, deviceContext); - rpcResultConvertor.processResultFromOfJava(futureResultFromOfLib); - - } else { - RequestContextUtil.closeRequstContext(requestContext); - } - return result; } @Override public Future> getGroupDescription(final GetGroupDescriptionInput input) { + return this. handleServiceCall(PRIMARY_CONNECTION, + new Function>>() { + + @Override + public Future> apply(final BigInteger IDConnection) { + final Xid xid = deviceContext.getNextXid(); + final MultipartRequestGroupDescCaseBuilder mprGroupDescCaseBuild = new MultipartRequestGroupDescCaseBuilder(); + final MultipartRequestInputBuilder mprInput = RequestInputUtils.createMultipartHeader( + MultipartType.OFPMPGROUPDESC, xid.getValue(), version); + mprInput.setMultipartRequestBody(mprGroupDescCaseBuild.build()); + final Future> resultFromOFLib = deviceContext.getPrimaryConnectionContext() + .getConnectionAdapter().multipartRequest(mprInput.build()); + return JdkFutureAdapters.listenInPoolThread(resultFromOFLib); + } + }); - final RequestContext requestContext = rpcContext.createRequestContext(); - final SettableFuture> result = rpcContext.storeOrFail(requestContext); - - if (!result.isDone()) { - - final Xid xid = deviceContext.getNextXid(); - final MultipartRequestGroupDescCaseBuilder mprGroupDescCaseBuild = new MultipartRequestGroupDescCaseBuilder(); - final MultipartRequestInputBuilder mprInput = RequestInputUtils.createMultipartHeader( - MultipartType.OFPMPGROUPDESC, xid.getValue(), version); - mprInput.setMultipartRequestBody(mprGroupDescCaseBuild.build()); - final Future> resultFromOFLib = deviceContext.getPrimaryConnectionContext() - .getConnectionAdapter().multipartRequest(mprInput.build()); - final ListenableFuture> futureResultFromOfLib = JdkFutureAdapters - .listenInPoolThread(resultFromOFLib); - - final RpcResultConvertor rpcResultConvertor = new RpcResultConvertor<>(requestContext, deviceContext); - rpcResultConvertor.processResultFromOfJava(futureResultFromOfLib); - } else { - RequestContextUtil.closeRequstContext(requestContext); - } - return result; } @Override public Future> getGroupFeatures(final GetGroupFeaturesInput input) { + return this. handleServiceCall(PRIMARY_CONNECTION, + new Function>>() { + + @Override + public Future> apply(final BigInteger IDConnection) { + final Xid xid = deviceContext.getNextXid(); + + final MultipartRequestGroupFeaturesCaseBuilder mprGroupFeaturesBuild = new MultipartRequestGroupFeaturesCaseBuilder(); + final MultipartRequestInputBuilder mprInput = RequestInputUtils.createMultipartHeader( + MultipartType.OFPMPGROUPFEATURES, xid.getValue(), version); + mprInput.setMultipartRequestBody(mprGroupFeaturesBuild.build()); + final Future> resultFromOFLib = deviceContext.getPrimaryConnectionContext() + .getConnectionAdapter().multipartRequest(mprInput.build()); + return JdkFutureAdapters.listenInPoolThread(resultFromOFLib); + } + }); - final RequestContext requestContext = rpcContext.createRequestContext(); - final SettableFuture> result = rpcContext.storeOrFail(requestContext); - - if (!result.isDone()) { - - final Xid xid = deviceContext.getNextXid(); - - final MultipartRequestGroupFeaturesCaseBuilder mprGroupFeaturesBuild = new MultipartRequestGroupFeaturesCaseBuilder(); - final MultipartRequestInputBuilder mprInput = RequestInputUtils.createMultipartHeader( - MultipartType.OFPMPGROUPFEATURES, xid.getValue(), version); - mprInput.setMultipartRequestBody(mprGroupFeaturesBuild.build()); - final Future> resultFromOFLib = deviceContext.getPrimaryConnectionContext() - .getConnectionAdapter().multipartRequest(mprInput.build()); - final ListenableFuture> futureResultFromOfLib = JdkFutureAdapters - .listenInPoolThread(resultFromOFLib); - - final RpcResultConvertor rpcResultConvertor = new RpcResultConvertor<>(requestContext, deviceContext); - rpcResultConvertor.processResultFromOfJava(futureResultFromOfLib); - } else { - RequestContextUtil.closeRequstContext(requestContext); - } - return result; } @Override public Future> getGroupStatistics(final GetGroupStatisticsInput input) { - - final RequestContext requestContext = rpcContext.createRequestContext(); - final SettableFuture> result = rpcContext.storeOrFail(requestContext); - - if (!result.isDone()) { - - final Xid xid = deviceContext.getNextXid(); - - final MultipartRequestGroupCaseBuilder caseBuilder = new MultipartRequestGroupCaseBuilder(); - final MultipartRequestGroupBuilder mprGroupBuild = new MultipartRequestGroupBuilder(); - mprGroupBuild.setGroupId(new GroupId(input.getGroupId().getValue())); - caseBuilder.setMultipartRequestGroup(mprGroupBuild.build()); - - final MultipartRequestInputBuilder mprInput = RequestInputUtils.createMultipartHeader( - MultipartType.OFPMPGROUP, xid.getValue(), version); - - mprInput.setMultipartRequestBody(caseBuilder.build()); - final Future> resultFromOFLib = deviceContext.getPrimaryConnectionContext() - .getConnectionAdapter().multipartRequest(mprInput.build()); - final ListenableFuture> futureResultFromOfLib = JdkFutureAdapters - .listenInPoolThread(resultFromOFLib); - - final RpcResultConvertor rpcResultConvertor = new RpcResultConvertor<>(requestContext, deviceContext); - rpcResultConvertor.processResultFromOfJava(futureResultFromOfLib); - } else { - RequestContextUtil.closeRequstContext(requestContext); - } - return result; + return this. handleServiceCall(PRIMARY_CONNECTION, + new Function>>() { + + @Override + public Future> apply(final BigInteger IDConnection) { + final Xid xid = deviceContext.getNextXid(); + + final MultipartRequestGroupCaseBuilder caseBuilder = new MultipartRequestGroupCaseBuilder(); + final MultipartRequestGroupBuilder mprGroupBuild = new MultipartRequestGroupBuilder(); + mprGroupBuild.setGroupId(new GroupId(input.getGroupId().getValue())); + caseBuilder.setMultipartRequestGroup(mprGroupBuild.build()); + + final MultipartRequestInputBuilder mprInput = RequestInputUtils.createMultipartHeader( + MultipartType.OFPMPGROUP, xid.getValue(), version); + + mprInput.setMultipartRequestBody(caseBuilder.build()); + final Future> resultFromOFLib = deviceContext.getPrimaryConnectionContext() + .getConnectionAdapter().multipartRequest(mprInput.build()); + return JdkFutureAdapters.listenInPoolThread(resultFromOFLib); + } + }); } } diff --git a/openflowplugin-impl/src/main/java/org/opendaylight/openflowplugin/impl/services/OpendaylightMeterStatisticsServiceImpl.java b/openflowplugin-impl/src/main/java/org/opendaylight/openflowplugin/impl/services/OpendaylightMeterStatisticsServiceImpl.java index 66461e433f..b72674f123 100644 --- a/openflowplugin-impl/src/main/java/org/opendaylight/openflowplugin/impl/services/OpendaylightMeterStatisticsServiceImpl.java +++ b/openflowplugin-impl/src/main/java/org/opendaylight/openflowplugin/impl/services/OpendaylightMeterStatisticsServiceImpl.java @@ -7,6 +7,8 @@ */ package org.opendaylight.openflowplugin.impl.services; +import com.google.common.base.Function; +import java.math.BigInteger; import com.google.common.util.concurrent.JdkFutureAdapters; import com.google.common.util.concurrent.ListenableFuture; import com.google.common.util.concurrent.SettableFuture; @@ -42,38 +44,32 @@ public class OpendaylightMeterStatisticsServiceImpl extends CommonService implem @Override public Future> getAllMeterConfigStatistics( final GetAllMeterConfigStatisticsInput input) { + return this + . handleServiceCall( + PRIMARY_CONNECTION, new Function>>() { + + @Override + public Future> apply(final BigInteger IDConnection) { + final Xid xid = deviceContext.getNextXid(); + + MultipartRequestMeterConfigCaseBuilder caseBuilder = + new MultipartRequestMeterConfigCaseBuilder(); + MultipartRequestMeterConfigBuilder mprMeterConfigBuild = + new MultipartRequestMeterConfigBuilder(); + mprMeterConfigBuild.setMeterId(new MeterId(BinContent.intToUnsignedLong( + org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common + .types.rev130731.Meter.OFPMALL.getIntValue()))); + caseBuilder.setMultipartRequestMeterConfig(mprMeterConfigBuild.build()); + + MultipartRequestInputBuilder mprInput = RequestInputUtils + .createMultipartHeader(MultipartType.OFPMPMETERCONFIG, xid.getValue(), version); + mprInput.setMultipartRequestBody(caseBuilder.build()); + Future> resultFromOFLib = deviceContext + .getPrimaryConnectionContext().getConnectionAdapter().multipartRequest(mprInput.build()); + return JdkFutureAdapters + .listenInPoolThread(resultFromOFLib); + }}); - final RequestContext requestContext = rpcContext.createRequestContext(); - final SettableFuture> result = rpcContext.storeOrFail(requestContext); - - if (!result.isDone()) { - - final Xid xid = deviceContext.getNextXid(); - - MultipartRequestMeterConfigCaseBuilder caseBuilder = - new MultipartRequestMeterConfigCaseBuilder(); - MultipartRequestMeterConfigBuilder mprMeterConfigBuild = - new MultipartRequestMeterConfigBuilder(); - mprMeterConfigBuild.setMeterId(new MeterId(BinContent.intToUnsignedLong( - org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common - .types.rev130731.Meter.OFPMALL.getIntValue()))); - caseBuilder.setMultipartRequestMeterConfig(mprMeterConfigBuild.build()); - - MultipartRequestInputBuilder mprInput = RequestInputUtils - .createMultipartHeader(MultipartType.OFPMPMETERCONFIG, xid.getValue(), version); - mprInput.setMultipartRequestBody(caseBuilder.build()); - Future> resultFromOFLib = deviceContext - .getPrimaryConnectionContext().getConnectionAdapter().multipartRequest(mprInput.build()); - ListenableFuture> futureResultFromOfLib = JdkFutureAdapters - .listenInPoolThread(resultFromOFLib); - - final RpcResultConvertor rpcResultConvertor = new RpcResultConvertor<>(requestContext, deviceContext); - rpcResultConvertor.processResultFromOfJava(futureResultFromOfLib); - - } else { - RequestContextUtil.closeRequstContext(requestContext); - } - return result; } @Override diff --git a/openflowplugin-impl/src/main/java/org/opendaylight/openflowplugin/impl/services/OpendaylightPortStatisticsServiceImpl.java b/openflowplugin-impl/src/main/java/org/opendaylight/openflowplugin/impl/services/OpendaylightPortStatisticsServiceImpl.java index 2271a49961..99e67dfb6b 100644 --- a/openflowplugin-impl/src/main/java/org/opendaylight/openflowplugin/impl/services/OpendaylightPortStatisticsServiceImpl.java +++ b/openflowplugin-impl/src/main/java/org/opendaylight/openflowplugin/impl/services/OpendaylightPortStatisticsServiceImpl.java @@ -7,11 +7,10 @@ */ package org.opendaylight.openflowplugin.impl.services; +import com.google.common.base.Function; +import java.math.BigInteger; import com.google.common.util.concurrent.JdkFutureAdapters; -import com.google.common.util.concurrent.ListenableFuture; -import com.google.common.util.concurrent.SettableFuture; import org.opendaylight.openflowplugin.api.OFConstants; -import org.opendaylight.openflowplugin.api.openflow.device.RequestContext; import org.opendaylight.openflowplugin.api.openflow.device.Xid; import org.opendaylight.openflowplugin.api.openflow.md.util.OpenflowVersion; import org.opendaylight.openflowplugin.openflow.md.util.InventoryDataServiceUtil; @@ -35,70 +34,61 @@ public class OpendaylightPortStatisticsServiceImpl extends CommonService impleme @Override public Future> getAllNodeConnectorsStatistics( final GetAllNodeConnectorsStatisticsInput input) { - final RequestContext requestContext = rpcContext.createRequestContext(); - final SettableFuture> result = rpcContext.storeOrFail(requestContext); + return this + . handleServiceCall( + PRIMARY_CONNECTION, new Function>>() { - if (!result.isDone()) { + @Override + public Future> apply(final BigInteger IDConnection) { + final Xid xid = deviceContext.getNextXid(); - final Xid xid = deviceContext.getNextXid(); + MultipartRequestPortStatsCaseBuilder caseBuilder = + new MultipartRequestPortStatsCaseBuilder(); + MultipartRequestPortStatsBuilder mprPortStatsBuilder = + new MultipartRequestPortStatsBuilder(); + // Select all ports + mprPortStatsBuilder.setPortNo(OFConstants.OFPP_ANY); + caseBuilder.setMultipartRequestPortStats(mprPortStatsBuilder.build()); - MultipartRequestPortStatsCaseBuilder caseBuilder = - new MultipartRequestPortStatsCaseBuilder(); - MultipartRequestPortStatsBuilder mprPortStatsBuilder = - new MultipartRequestPortStatsBuilder(); - // Select all ports - mprPortStatsBuilder.setPortNo(OFConstants.OFPP_ANY); - caseBuilder.setMultipartRequestPortStats(mprPortStatsBuilder.build()); - - MultipartRequestInputBuilder mprInput = RequestInputUtils - .createMultipartHeader(MultipartType.OFPMPPORTSTATS, xid.getValue(), version); - mprInput.setMultipartRequestBody(caseBuilder.build()); - Future> resultFromOFLib = deviceContext - .getPrimaryConnectionContext().getConnectionAdapter().multipartRequest(mprInput.build()); - ListenableFuture> futureResultFromOfLib = JdkFutureAdapters.listenInPoolThread(resultFromOFLib); - - final RpcResultConvertor rpcResultConvertor = new RpcResultConvertor<>(requestContext, deviceContext); - rpcResultConvertor.processResultFromOfJava(futureResultFromOfLib); - - } else { - RequestContextUtil.closeRequstContext(requestContext); - } - return result; + MultipartRequestInputBuilder mprInput = RequestInputUtils + .createMultipartHeader(MultipartType.OFPMPPORTSTATS, xid.getValue(), version); + mprInput.setMultipartRequestBody(caseBuilder.build()); + Future> resultFromOFLib = deviceContext + .getPrimaryConnectionContext().getConnectionAdapter().multipartRequest(mprInput.build()); + return JdkFutureAdapters.listenInPoolThread(resultFromOFLib); + }}); } @Override public Future> getNodeConnectorStatistics( final GetNodeConnectorStatisticsInput input) { - final RequestContext requestContext = rpcContext.createRequestContext(); - final SettableFuture> result = rpcContext.storeOrFail(requestContext); + return this + . handleServiceCall( + PRIMARY_CONNECTION, new Function>>() { - if (!result.isDone()) { - final Xid xid = deviceContext.getNextXid(); + @Override + public Future> apply(final BigInteger IDConnection) { + final Xid xid = deviceContext.getNextXid(); - MultipartRequestPortStatsCaseBuilder caseBuilder = - new MultipartRequestPortStatsCaseBuilder(); - MultipartRequestPortStatsBuilder mprPortStatsBuilder = - new MultipartRequestPortStatsBuilder(); - // Set specific port - mprPortStatsBuilder - .setPortNo(InventoryDataServiceUtil.portNumberfromNodeConnectorId( - OpenflowVersion.get(version), - input.getNodeConnectorId())); - caseBuilder.setMultipartRequestPortStats(mprPortStatsBuilder.build()); + MultipartRequestPortStatsCaseBuilder caseBuilder = + new MultipartRequestPortStatsCaseBuilder(); + MultipartRequestPortStatsBuilder mprPortStatsBuilder = + new MultipartRequestPortStatsBuilder(); + // Set specific port + mprPortStatsBuilder + .setPortNo(InventoryDataServiceUtil.portNumberfromNodeConnectorId( + OpenflowVersion.get(version), + input.getNodeConnectorId())); + caseBuilder.setMultipartRequestPortStats(mprPortStatsBuilder.build()); - MultipartRequestInputBuilder mprInput = RequestInputUtils - .createMultipartHeader(MultipartType.OFPMPPORTSTATS, xid.getValue(), version); - mprInput.setMultipartRequestBody(caseBuilder.build()); - Future> resultFromOFLib = deviceContext.getPrimaryConnectionContext() - .getConnectionAdapter().multipartRequest(mprInput.build()); - ListenableFuture> futureResultFromOfLib = JdkFutureAdapters.listenInPoolThread(resultFromOFLib); + MultipartRequestInputBuilder mprInput = RequestInputUtils + .createMultipartHeader(MultipartType.OFPMPPORTSTATS, xid.getValue(), version); + mprInput.setMultipartRequestBody(caseBuilder.build()); + Future> resultFromOFLib = deviceContext.getPrimaryConnectionContext() + .getConnectionAdapter().multipartRequest(mprInput.build()); + return JdkFutureAdapters.listenInPoolThread(resultFromOFLib); + }}); - final RpcResultConvertor rpcResultConvertor = new RpcResultConvertor<>(requestContext, deviceContext); - rpcResultConvertor.processResultFromOfJava(futureResultFromOfLib); - } else { - RequestContextUtil.closeRequstContext(requestContext); - } - return result; } } diff --git a/openflowplugin-impl/src/main/java/org/opendaylight/openflowplugin/impl/services/OpendaylightQueueStatisticsServiceImpl.java b/openflowplugin-impl/src/main/java/org/opendaylight/openflowplugin/impl/services/OpendaylightQueueStatisticsServiceImpl.java index d66e252246..eddab61b29 100644 --- a/openflowplugin-impl/src/main/java/org/opendaylight/openflowplugin/impl/services/OpendaylightQueueStatisticsServiceImpl.java +++ b/openflowplugin-impl/src/main/java/org/opendaylight/openflowplugin/impl/services/OpendaylightQueueStatisticsServiceImpl.java @@ -7,11 +7,10 @@ */ package org.opendaylight.openflowplugin.impl.services; +import com.google.common.base.Function; +import java.math.BigInteger; import com.google.common.util.concurrent.JdkFutureAdapters; -import com.google.common.util.concurrent.ListenableFuture; -import com.google.common.util.concurrent.SettableFuture; import org.opendaylight.openflowplugin.api.OFConstants; -import org.opendaylight.openflowplugin.api.openflow.device.RequestContext; import org.opendaylight.openflowplugin.api.openflow.device.Xid; import org.opendaylight.openflowplugin.api.openflow.md.util.OpenflowVersion; import org.opendaylight.openflowplugin.openflow.md.util.InventoryDataServiceUtil; @@ -34,105 +33,96 @@ import java.util.concurrent.Future; */ public class OpendaylightQueueStatisticsServiceImpl extends CommonService implements OpendaylightQueueStatisticsService { - @Override public Future> getAllQueuesStatisticsFromAllPorts( final GetAllQueuesStatisticsFromAllPortsInput input) { - final RequestContext requestContext = rpcContext.createRequestContext(); - final SettableFuture> result = rpcContext.storeOrFail(requestContext); - - if (!result.isDone()) { - final Xid xid = deviceContext.getNextXid(); - - MultipartRequestQueueCaseBuilder caseBuilder = new MultipartRequestQueueCaseBuilder(); - MultipartRequestQueueBuilder mprQueueBuilder = new MultipartRequestQueueBuilder(); - // Select all ports - mprQueueBuilder.setPortNo(OFConstants.OFPP_ANY); - // Select all the ports - mprQueueBuilder.setQueueId(OFConstants.OFPQ_ANY); - caseBuilder.setMultipartRequestQueue(mprQueueBuilder.build()); - - // Set request body to main multipart request - MultipartRequestInputBuilder mprInput = RequestInputUtils.createMultipartHeader(MultipartType.OFPMPQUEUE, xid.getValue(), version); - mprInput.setMultipartRequestBody(caseBuilder.build()); - Future> resultFromOFLib = deviceContext.getPrimaryConnectionContext().getConnectionAdapter().multipartRequest(mprInput.build()); - ListenableFuture> futureResultFromOfLib = JdkFutureAdapters.listenInPoolThread(resultFromOFLib); - - final RpcResultConvertor rpcResultConvertor = new RpcResultConvertor<>(requestContext, deviceContext); - rpcResultConvertor.processResultFromOfJava(futureResultFromOfLib); - } else { - RequestContextUtil.closeRequstContext(requestContext); - } - return result; + return this. handleServiceCall( + PRIMARY_CONNECTION, new Function>>() { + + @Override + public Future> apply(final BigInteger IDConnection) { + + final Xid xid = deviceContext.getNextXid(); + + MultipartRequestQueueCaseBuilder caseBuilder = new MultipartRequestQueueCaseBuilder(); + MultipartRequestQueueBuilder mprQueueBuilder = new MultipartRequestQueueBuilder(); + // Select all ports + mprQueueBuilder.setPortNo(OFConstants.OFPP_ANY); + // Select all the ports + mprQueueBuilder.setQueueId(OFConstants.OFPQ_ANY); + caseBuilder.setMultipartRequestQueue(mprQueueBuilder.build()); + + // Set request body to main multipart request + MultipartRequestInputBuilder mprInput = RequestInputUtils.createMultipartHeader( + MultipartType.OFPMPQUEUE, xid.getValue(), version); + mprInput.setMultipartRequestBody(caseBuilder.build()); + Future> resultFromOFLib = deviceContext.getPrimaryConnectionContext() + .getConnectionAdapter().multipartRequest(mprInput.build()); + return JdkFutureAdapters.listenInPoolThread(resultFromOFLib); + } + }); + } @Override public Future> getAllQueuesStatisticsFromGivenPort( final GetAllQueuesStatisticsFromGivenPortInput input) { - final RequestContext requestContext = rpcContext.createRequestContext(); - final SettableFuture> result = rpcContext.storeOrFail(requestContext); - - if (!result.isDone()) { - final Xid xid = deviceContext.getNextXid(); - - - MultipartRequestQueueCaseBuilder caseBuilder = new MultipartRequestQueueCaseBuilder(); - MultipartRequestQueueBuilder mprQueueBuilder = new MultipartRequestQueueBuilder(); - // Select all queues - mprQueueBuilder.setQueueId(OFConstants.OFPQ_ANY); - // Select specific port - mprQueueBuilder.setPortNo(InventoryDataServiceUtil.portNumberfromNodeConnectorId( - OpenflowVersion.get(version), - input.getNodeConnectorId())); - caseBuilder.setMultipartRequestQueue(mprQueueBuilder.build()); - - // Set request body to main multipart request - MultipartRequestInputBuilder mprInput = RequestInputUtils.createMultipartHeader(MultipartType.OFPMPQUEUE, xid.getValue(), version); - mprInput.setMultipartRequestBody(caseBuilder.build()); - Future> resultFromOFLib = deviceContext.getPrimaryConnectionContext().getConnectionAdapter().multipartRequest(mprInput.build()); - ListenableFuture> futureResultFromOfLib = JdkFutureAdapters.listenInPoolThread(resultFromOFLib); - - final RpcResultConvertor rpcResultConvertor = new RpcResultConvertor<>(requestContext, deviceContext); - rpcResultConvertor.processResultFromOfJava(futureResultFromOfLib); - } else { - RequestContextUtil.closeRequstContext(requestContext); - } - return result; + return this. handleServiceCall( + PRIMARY_CONNECTION, new Function>>() { + + @Override + public Future> apply(final BigInteger IDConnection) { + final Xid xid = deviceContext.getNextXid(); + + MultipartRequestQueueCaseBuilder caseBuilder = new MultipartRequestQueueCaseBuilder(); + MultipartRequestQueueBuilder mprQueueBuilder = new MultipartRequestQueueBuilder(); + // Select all queues + mprQueueBuilder.setQueueId(OFConstants.OFPQ_ANY); + // Select specific port + mprQueueBuilder.setPortNo(InventoryDataServiceUtil.portNumberfromNodeConnectorId( + OpenflowVersion.get(version), input.getNodeConnectorId())); + caseBuilder.setMultipartRequestQueue(mprQueueBuilder.build()); + + // Set request body to main multipart request + MultipartRequestInputBuilder mprInput = RequestInputUtils.createMultipartHeader( + MultipartType.OFPMPQUEUE, xid.getValue(), version); + mprInput.setMultipartRequestBody(caseBuilder.build()); + Future> resultFromOFLib = deviceContext.getPrimaryConnectionContext() + .getConnectionAdapter().multipartRequest(mprInput.build()); + return JdkFutureAdapters.listenInPoolThread(resultFromOFLib); + + } + }); } @Override public Future> getQueueStatisticsFromGivenPort( final GetQueueStatisticsFromGivenPortInput input) { - final RequestContext requestContext = rpcContext.createRequestContext(); - final SettableFuture> result = rpcContext.storeOrFail(requestContext); - - if (!result.isDone()) { - final Xid xid = deviceContext.getNextXid(); - - MultipartRequestQueueCaseBuilder caseBuilder = new MultipartRequestQueueCaseBuilder(); - MultipartRequestQueueBuilder mprQueueBuilder = new MultipartRequestQueueBuilder(); - // Select specific queue - mprQueueBuilder.setQueueId(input.getQueueId().getValue()); - // Select specific port - mprQueueBuilder.setPortNo(InventoryDataServiceUtil.portNumberfromNodeConnectorId( - OpenflowVersion.get(version), - input.getNodeConnectorId())); - caseBuilder.setMultipartRequestQueue(mprQueueBuilder.build()); - - // Set request body to main multipart request - MultipartRequestInputBuilder mprInput = RequestInputUtils - .createMultipartHeader(MultipartType.OFPMPQUEUE, xid.getValue(), version); - mprInput.setMultipartRequestBody(caseBuilder.build()); - Future> resultFromOFLib = deviceContext.getPrimaryConnectionContext() - .getConnectionAdapter().multipartRequest(mprInput.build()); - ListenableFuture> futureResultFromOfLib = JdkFutureAdapters.listenInPoolThread(resultFromOFLib); - - final RpcResultConvertor rpcResultConvertor = new RpcResultConvertor<>(requestContext, deviceContext); - rpcResultConvertor.processResultFromOfJava(futureResultFromOfLib); - } else { - RequestContextUtil.closeRequstContext(requestContext); - } - return result; + return this. handleServiceCall( + PRIMARY_CONNECTION, new Function>>() { + + @Override + public Future> apply(final BigInteger IDConnection) { + final Xid xid = deviceContext.getNextXid(); + + MultipartRequestQueueCaseBuilder caseBuilder = new MultipartRequestQueueCaseBuilder(); + MultipartRequestQueueBuilder mprQueueBuilder = new MultipartRequestQueueBuilder(); + // Select specific queue + mprQueueBuilder.setQueueId(input.getQueueId().getValue()); + // Select specific port + mprQueueBuilder.setPortNo(InventoryDataServiceUtil.portNumberfromNodeConnectorId( + OpenflowVersion.get(version), input.getNodeConnectorId())); + caseBuilder.setMultipartRequestQueue(mprQueueBuilder.build()); + + // Set request body to main multipart request + MultipartRequestInputBuilder mprInput = RequestInputUtils.createMultipartHeader( + MultipartType.OFPMPQUEUE, xid.getValue(), version); + mprInput.setMultipartRequestBody(caseBuilder.build()); + Future> resultFromOFLib = deviceContext.getPrimaryConnectionContext() + .getConnectionAdapter().multipartRequest(mprInput.build()); + return JdkFutureAdapters.listenInPoolThread(resultFromOFLib); + } + }); } } diff --git a/openflowplugin-impl/src/main/java/org/opendaylight/openflowplugin/impl/services/PacketProcessingServiceImpl.java b/openflowplugin-impl/src/main/java/org/opendaylight/openflowplugin/impl/services/PacketProcessingServiceImpl.java index 1447e26182..bd034c9da2 100644 --- a/openflowplugin-impl/src/main/java/org/opendaylight/openflowplugin/impl/services/PacketProcessingServiceImpl.java +++ b/openflowplugin-impl/src/main/java/org/opendaylight/openflowplugin/impl/services/PacketProcessingServiceImpl.java @@ -1,6 +1,6 @@ /** * Copyright (c) 2015 Cisco Systems, Inc. and others. All rights reserved. - * + * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License v1.0 which accompanies this distribution, * and is available at http://www.eclipse.org/legal/epl-v10.html @@ -19,6 +19,7 @@ import org.opendaylight.yangtools.yang.common.RpcResult; public class PacketProcessingServiceImpl extends CommonService implements PacketProcessingService { @Override + //TODO this implementation is incorrect. Handling of exceptional states as in ServiceCallProcessingUtil.handleServiceCall() is missing public Future> transmitPacket(final TransmitPacketInput input) { final PacketOutInput message = PacketOutConvertor.toPacketOutInput(input, version, deviceContext.getNextXid() .getValue(), datapathId); diff --git a/openflowplugin-impl/src/main/java/org/opendaylight/openflowplugin/impl/services/SalFlowServiceImpl.java b/openflowplugin-impl/src/main/java/org/opendaylight/openflowplugin/impl/services/SalFlowServiceImpl.java index c1b13032ab..fcf0dd43d3 100644 --- a/openflowplugin-impl/src/main/java/org/opendaylight/openflowplugin/impl/services/SalFlowServiceImpl.java +++ b/openflowplugin-impl/src/main/java/org/opendaylight/openflowplugin/impl/services/SalFlowServiceImpl.java @@ -47,8 +47,8 @@ public class SalFlowServiceImpl extends CommonService implements SalFlowService @Override public Future> addFlow(final AddFlowInput input) { - return ServiceCallProcessingUtil. handleServiceCall(rpcContext, PRIMARY_CONNECTION, deviceContext, - new Function>>() { + return this. handleServiceCall(PRIMARY_CONNECTION, + new Function>>() { @Override public ListenableFuture> apply(final BigInteger IDConnection) { final List ofFlowModInputs = FlowConvertor.toFlowModInputs(input, version, @@ -60,8 +60,8 @@ public class SalFlowServiceImpl extends CommonService implements SalFlowService @Override public Future> removeFlow(final RemoveFlowInput input) { - return ServiceCallProcessingUtil. handleServiceCall(rpcContext, PRIMARY_CONNECTION, deviceContext, - new Function>>() { + return this. handleServiceCall(PRIMARY_CONNECTION, + new Function>>() { @Override public Future> apply(final BigInteger IDConnection) { final FlowModInputBuilder ofFlowModInput = FlowConvertor.toFlowModInput(input, version, @@ -98,8 +98,8 @@ public class SalFlowServiceImpl extends CommonService implements SalFlowService allFlowMods.addAll(ofFlowModInputs); LOG.debug("Number of flows to push to switch: {}", allFlowMods.size()); Collections. emptyList(); - return ServiceCallProcessingUtil. handleServiceCall(rpcContext, PRIMARY_CONNECTION, deviceContext, - new Function>>() { + return this. handleServiceCall(PRIMARY_CONNECTION, + new Function>>() { @Override public Future> apply(final BigInteger cookie) { return chainFlowMods(allFlowMods, 0, cookie); diff --git a/openflowplugin-impl/src/main/java/org/opendaylight/openflowplugin/impl/services/SalGroupServiceImpl.java b/openflowplugin-impl/src/main/java/org/opendaylight/openflowplugin/impl/services/SalGroupServiceImpl.java index c0050c3c24..fd195735d7 100644 --- a/openflowplugin-impl/src/main/java/org/opendaylight/openflowplugin/impl/services/SalGroupServiceImpl.java +++ b/openflowplugin-impl/src/main/java/org/opendaylight/openflowplugin/impl/services/SalGroupServiceImpl.java @@ -30,8 +30,8 @@ public class SalGroupServiceImpl extends CommonService implements SalGroupServic @Override public Future> addGroup(final AddGroupInput input) { - return ServiceCallProcessingUtil. handleServiceCall(rpcContext, PRIMARY_CONNECTION, - deviceContext, new Function>>() { + return this. handleServiceCall( PRIMARY_CONNECTION, + new Function>>() { @Override public Future> apply(final BigInteger IDConnection) { @@ -42,8 +42,8 @@ public class SalGroupServiceImpl extends CommonService implements SalGroupServic @Override public Future> updateGroup(final UpdateGroupInput input) { - return ServiceCallProcessingUtil. handleServiceCall(rpcContext, PRIMARY_CONNECTION, - deviceContext, new Function>>() { + return this. handleServiceCall(PRIMARY_CONNECTION, + new Function>>() { @Override public Future> apply(final BigInteger IDConnection) { @@ -54,8 +54,8 @@ public class SalGroupServiceImpl extends CommonService implements SalGroupServic @Override public Future> removeGroup(final RemoveGroupInput input) { - return ServiceCallProcessingUtil. handleServiceCall(rpcContext, PRIMARY_CONNECTION, - deviceContext, new Function>>() { + return this. handleServiceCall(PRIMARY_CONNECTION, + new Function>>() { @Override public Future> apply(final BigInteger IDConnection) { diff --git a/openflowplugin-impl/src/main/java/org/opendaylight/openflowplugin/impl/services/SalMeterServiceImpl.java b/openflowplugin-impl/src/main/java/org/opendaylight/openflowplugin/impl/services/SalMeterServiceImpl.java index e21a9720d8..44a94deb4d 100644 --- a/openflowplugin-impl/src/main/java/org/opendaylight/openflowplugin/impl/services/SalMeterServiceImpl.java +++ b/openflowplugin-impl/src/main/java/org/opendaylight/openflowplugin/impl/services/SalMeterServiceImpl.java @@ -29,8 +29,8 @@ public class SalMeterServiceImpl extends CommonService implements SalMeterServic @Override public Future> addMeter(final AddMeterInput input) { - return ServiceCallProcessingUtil.handleServiceCall(rpcContext, PRIMARY_CONNECTION, - deviceContext, new Function>>() { + return this.handleServiceCall( PRIMARY_CONNECTION, + new Function>>() { @Override public Future> apply(final BigInteger IDConnection) { return convertAndSend(input, IDConnection); @@ -40,8 +40,8 @@ public class SalMeterServiceImpl extends CommonService implements SalMeterServic @Override public Future> updateMeter(final UpdateMeterInput input) { - return ServiceCallProcessingUtil.handleServiceCall(rpcContext, PRIMARY_CONNECTION, - deviceContext, new Function>>() { + return this.handleServiceCall( PRIMARY_CONNECTION, + new Function>>() { @Override public Future> apply(final BigInteger IDConnection) { return convertAndSend(input.getUpdatedMeter(), IDConnection); @@ -51,8 +51,8 @@ public class SalMeterServiceImpl extends CommonService implements SalMeterServic @Override public Future> removeMeter(final RemoveMeterInput input) { - return ServiceCallProcessingUtil.handleServiceCall(rpcContext, PRIMARY_CONNECTION, - deviceContext, new Function>>() { + return this.handleServiceCall( PRIMARY_CONNECTION, + new Function>>() { @Override public Future> apply(final BigInteger IDConnection) { return convertAndSend(input, IDConnection); diff --git a/openflowplugin-impl/src/main/java/org/opendaylight/openflowplugin/impl/services/SalPortServiceImpl.java b/openflowplugin-impl/src/main/java/org/opendaylight/openflowplugin/impl/services/SalPortServiceImpl.java index ffb4c0d4c7..37795a5e06 100644 --- a/openflowplugin-impl/src/main/java/org/opendaylight/openflowplugin/impl/services/SalPortServiceImpl.java +++ b/openflowplugin-impl/src/main/java/org/opendaylight/openflowplugin/impl/services/SalPortServiceImpl.java @@ -26,8 +26,8 @@ public class SalPortServiceImpl extends CommonService implements SalPortService @Override public Future> updatePort(final UpdatePortInput input) { - return ServiceCallProcessingUtil.handleServiceCall(rpcContext, PRIMARY_CONNECTION, - deviceContext, new Function>>() { + return this. handleServiceCall(PRIMARY_CONNECTION, + new Function>>() { @Override public Future> apply(final BigInteger IDConnection) { final Port inputPort = input.getUpdatedPort().getPort().getPort().get(0); diff --git a/openflowplugin-impl/src/main/java/org/opendaylight/openflowplugin/impl/services/SalTableServiceImpl.java b/openflowplugin-impl/src/main/java/org/opendaylight/openflowplugin/impl/services/SalTableServiceImpl.java index 9731dce9b5..0d403b2f51 100644 --- a/openflowplugin-impl/src/main/java/org/opendaylight/openflowplugin/impl/services/SalTableServiceImpl.java +++ b/openflowplugin-impl/src/main/java/org/opendaylight/openflowplugin/impl/services/SalTableServiceImpl.java @@ -83,8 +83,8 @@ public class SalTableServiceImpl extends CommonService implements SalTableServic } } - return ServiceCallProcessingUtil.handleServiceCall(rpcContext, PRIMARY_CONNECTION, - deviceContext, new FunctionImpl()); + return this.handleServiceCall( PRIMARY_CONNECTION, + new FunctionImpl()); } private MultipartRequestInputBuilder createMultipartHeader(final MultipartType multipart, final Long xid) { diff --git a/openflowplugin-impl/src/main/java/org/opendaylight/openflowplugin/impl/services/ServiceCallProcessingUtil.java b/openflowplugin-impl/src/main/java/org/opendaylight/openflowplugin/impl/services/ServiceCallProcessingUtil.java deleted file mode 100644 index 72d3294476..0000000000 --- a/openflowplugin-impl/src/main/java/org/opendaylight/openflowplugin/impl/services/ServiceCallProcessingUtil.java +++ /dev/null @@ -1,49 +0,0 @@ -/** - * Copyright (c) 2015 Cisco Systems, Inc. and others. All rights reserved. - * - * This program and the accompanying materials are made available under the - * terms of the Eclipse Public License v1.0 which accompanies this distribution, - * and is available at http://www.eclipse.org/legal/epl-v10.html - */ -package org.opendaylight.openflowplugin.impl.services; - -import org.opendaylight.openflowplugin.api.openflow.device.DeviceContext; - -import com.google.common.base.Function; -import com.google.common.util.concurrent.SettableFuture; -import org.opendaylight.openflowplugin.api.openflow.device.RequestContext; -import org.opendaylight.openflowplugin.api.openflow.rpc.RpcContext; -import org.opendaylight.yangtools.yang.binding.DataObject; -import org.opendaylight.yangtools.yang.common.RpcResult; -import org.slf4j.Logger; -import java.math.BigInteger; -import java.util.concurrent.Future; - -/** - * @author joe - * - */ -public class ServiceCallProcessingUtil { - - private static final Logger LOG = org.slf4j.LoggerFactory.getLogger(ServiceCallProcessingUtil.class); - - static Future> handleServiceCall(final RpcContext rpcContext, -final BigInteger connectionID, final DeviceContext deviceContext, final Function>> function) { - LOG.debug("Calling the FlowMod RPC method on MessageDispatchService"); - // use primary connection - - final RequestContext requestContext = rpcContext.createRequestContext(); - final SettableFuture> result = rpcContext.storeOrFail(requestContext); - - if (!result.isDone()) { - final Future> resultFromOFLib = function.apply(connectionID); - - final RpcResultConvertor rpcResultConvertor = new RpcResultConvertor<>(requestContext, deviceContext); - rpcResultConvertor.processResultFromOfJava(resultFromOFLib); - - } else { - RequestContextUtil.closeRequstContext(requestContext); - } - return result; - } -}