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;
* @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
* Because flow table statistics multi part response do not contains the table id.
*/
private final Map<TxIdEntry,Short> txIdTotableIdMap = new ConcurrentHashMap<>();
+ private final long lifetimeNanos;
+
+ public MultipartMessageManager(long lifetimeNanos) {
+ this.lifetimeNanos = lifetimeNanos;
+ }
private static final class TxIdEntry {
private final TransactionId txId;
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;
}
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 {
}
}
- 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() {