X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?p=controller.git;a=blobdiff_plain;f=opendaylight%2Fmd-sal%2Fstatistics-manager%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fcontroller%2Fmd%2Fstatistics%2Fmanager%2FMultipartMessageManager.java;h=425a44946e064c97b44d27f42fdcdc8b1e2b9bc9;hp=257684a400b0b36d53844b1f090047db55f14f3f;hb=721b580748cb93b3dac952ff1f111d0ab0da0c79;hpb=3a827de1a10cd2c88a09eefc0ec518fa00f8dc02 diff --git a/opendaylight/md-sal/statistics-manager/src/main/java/org/opendaylight/controller/md/statistics/manager/MultipartMessageManager.java b/opendaylight/md-sal/statistics-manager/src/main/java/org/opendaylight/controller/md/statistics/manager/MultipartMessageManager.java index 257684a400..425a44946e 100644 --- a/opendaylight/md-sal/statistics-manager/src/main/java/org/opendaylight/controller/md/statistics/manager/MultipartMessageManager.java +++ b/opendaylight/md-sal/statistics-manager/src/main/java/org/opendaylight/controller/md/statistics/manager/MultipartMessageManager.java @@ -10,8 +10,8 @@ package org.opendaylight.controller.md.statistics.manager; import java.util.Iterator; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; -import java.util.concurrent.TimeUnit; +import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.transaction.rev131103.MultipartTransactionAware; import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.transaction.rev131103.TransactionAware; import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.transaction.rev131103.TransactionId; @@ -24,9 +24,7 @@ import com.google.common.base.Preconditions; * @author avishnoi@in.ibm.com * */ -public class MultipartMessageManager { - private static final int NUMBER_OF_WAIT_CYCLES = 2; - +class MultipartMessageManager { /* * Map for tx id and type of request, to keep track of all the request sent * by Statistics Manager. Statistics Manager won't entertain any multipart @@ -38,6 +36,11 @@ public class MultipartMessageManager { * Because flow table statistics multi part response do not contains the table id. */ private final Map txIdTotableIdMap = new ConcurrentHashMap<>(); + private final long lifetimeNanos; + + public MultipartMessageManager(long lifetimeNanos) { + this.lifetimeNanos = lifetimeNanos; + } private static final class TxIdEntry { private final TransactionId txId; @@ -89,7 +92,12 @@ public class MultipartMessageManager { txIdTotableIdMap.put(new TxIdEntry(id), Preconditions.checkNotNull(tableId)); } - public Short isExpectedTableTransaction(TransactionAware transaction, Boolean more) { + public Short isExpectedTableTransaction(TransactionAware transaction) { + Boolean more = null; + if (transaction instanceof MultipartTransactionAware) { + more = ((MultipartTransactionAware)transaction).isMoreReplies(); + } + if (!isExpectedTransaction(transaction, more)) { return null; } @@ -107,8 +115,8 @@ public class MultipartMessageManager { txIdToRequestTypeMap.put(entry, getExpiryTime()); } - public boolean isExpectedTransaction(TransactionAware transaction, Boolean more) { - TxIdEntry entry = new TxIdEntry(transaction.getTransactionId()); + private boolean isExpectedTransaction(TransactionAware transaction, Boolean more) { + final TxIdEntry entry = new TxIdEntry(transaction.getTransactionId()); if (more != null && more.booleanValue()) { return txIdToRequestTypeMap.containsKey(entry); } else { @@ -116,9 +124,17 @@ public class MultipartMessageManager { } } - private static Long getExpiryTime(){ - return System.nanoTime() + TimeUnit.MILLISECONDS.toNanos( - StatisticsProvider.STATS_COLLECTION_MILLIS*NUMBER_OF_WAIT_CYCLES); + public boolean isExpectedTransaction(TransactionAware transaction) { + Boolean more = null; + if (transaction instanceof MultipartTransactionAware) { + more = ((MultipartTransactionAware)transaction).isMoreReplies(); + } + + return isExpectedTransaction(transaction, more); + } + + private Long getExpiryTime() { + return System.nanoTime() + lifetimeNanos; } public void cleanStaleTransactionIds() {