-/**
- * Copyright (c) 2014 Cisco Systems, Inc. and others. All rights reserved.
+/*
+ * Copyright (c) 2014, 2017 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.applications.frm;
-import org.opendaylight.controller.md.sal.binding.api.ReadOnlyTransaction;
+import org.opendaylight.mdsal.binding.api.ReadTransaction;
+import org.opendaylight.openflowplugin.api.openflow.configuration.ConfigurationListener;
+import org.opendaylight.openflowplugin.applications.frm.impl.DevicesGroupRegistry;
import org.opendaylight.openflowplugin.applications.frm.impl.FlowNodeConnectorInventoryTranslatorImpl;
+import org.opendaylight.serviceutils.srm.RecoverableListener;
import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.FlowCapableNode;
import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.meters.Meter;
import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.tables.table.Flow;
import org.opendaylight.yang.gen.v1.urn.opendaylight.group.service.rev130918.SalGroupService;
import org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.groups.Group;
import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.service.rev130918.SalMeterService;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.openflowplugin.app.forwardingrules.manager.config.rev160511.ForwardingRulesManagerConfig;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.onf.bundle.service.rev170124.SalBundleService;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.openflowplugin.app.arbitrator.reconcile.service.rev180227.ArbitratorReconcileService;
import org.opendaylight.yang.gen.v1.urn.opendaylight.table.service.rev131026.SalTableService;
import org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.table.features.TableFeatures;
import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
/**
- * forwardingrules-manager
- * org.opendaylight.openflowplugin.applications.frm
- *
- * ForwardingRulesManager
- * It represents a central point for whole module. Implementation
- * Flow Provider registers the link FlowChangeListener} and it holds all needed
- * services for link FlowChangeListener}.
+ * It represent a central point for whole module. Implementation Flow Provider
+ * registers the link FlowChangeListener} and it holds all needed services for
+ * link FlowChangeListener}.
*
* @author <a href="mailto:vdemcak@cisco.com">Vaclav Demcak</a>
- *
- * Created: Aug 25, 2014
*/
-public interface ForwardingRulesManager extends AutoCloseable {
+public interface ForwardingRulesManager extends ConfigurationListener, AutoCloseable {
void start();
/**
- * Method returns information :
- * "is Node with send InstanceIdentifier connected"?
+ * Method returns information : "is Node with send InstanceIdentifier
+ * connected"?.
*
- * @param ident - the key of the node
+ * @param ident
+ * - the key of the node
* @return boolean - true if device is connected
*/
boolean isNodeActive(InstanceIdentifier<FlowCapableNode> ident);
/**
- * Method returns information :
- * "is Node with send InstanceIdentifier present in operational data store"?
+ * Method returns information : "is Node with send InstanceIdentifier present in
+ * operational data store"?.
*
- * @param ident - the key of the node
+ * @param ident
+ * - the key of the node
* @return boolean - true if device is present in operational data store
*/
boolean checkNodeInOperationalDataStore(InstanceIdentifier<FlowCapableNode> ident);
/**
- * Method add new {@link FlowCapableNode} to active Node Holder.
- * ActiveNodeHolder prevent unnecessary Operational/DS read for identify
- * pre-configure and serious Configure/DS transactions.
+ * Method returns generated transaction ID, which is unique for every
+ * transaction. ID is composite from prefix ("DOM") and unique number.
*
- * @param ident - the key of the node
+ * @return String transactionID for RPC transaction identification
*/
- void registrateNewNode(InstanceIdentifier<FlowCapableNode> ident);
+ String getNewTransactionId();
/**
- * Method remove disconnected {@link FlowCapableNode} from active Node
- * Holder. And all next flows or groups or meters will stay in Config/DS
- * only.
+ * Method returns Read Transaction. It is need for Node reconciliation only.
*
- * @param ident - the key of the node
+ * @return ReadOnlyTransaction
*/
- void unregistrateNode(InstanceIdentifier<FlowCapableNode> ident);
+ ReadTransaction getReadTransaction();
/**
- * Method returns generated transaction ID, which is unique for
- * every transaction. ID is composite from prefix ("DOM") and unique number.
+ * Flow RPC service.
*
- * @return String transactionID for RPC transaction identification
*/
- String getNewTransactionId();
+ SalFlowService getSalFlowService();
/**
- * Method returns Read Transacion. It is need for Node reconciliation only.
+ * Group RPC service.
*
- * @return ReadOnlyTransaction
*/
- ReadOnlyTransaction getReadTranaction();
+ SalGroupService getSalGroupService();
/**
- * Flow RPC service
+ * Meter RPC service.
*
- * @return
*/
- SalFlowService getSalFlowService();
+ SalMeterService getSalMeterService();
/**
- * Group RPC service
+ * Table RPC service.
*
- * @return
*/
- public SalGroupService getSalGroupService();
+ SalTableService getSalTableService();
/**
- * Meter RPC service
+ * Return Devices Group Registry which can be used to track the groups present in a device.
*
- * @return
+ * @return devicesGroupRegistry
*/
- SalMeterService getSalMeterService();
+ DevicesGroupRegistry getDevicesGroupRegistry();
/**
- * Table RPC service
+ * Bundle RPC service.
*
- * @return
+ * @return salBundleService
*/
- SalTableService getSalTableService();
+ SalBundleService getSalBundleService();
/**
- * Content definition method and prevent code duplicity in Reconcil
- * @return ForwardingRulesCommiter<Flow>
+ * Content definition method and prevent code duplicity in Reconcil.
+ *
+ * @return ForwardingRulesCommiter<Flow>.
*/
ForwardingRulesCommiter<Flow> getFlowCommiter();
/**
- * Content definition method and prevent code duplicity in Reconcil
+ * Content definition method and prevent code duplicity in Reconcil.
+ *
* @return ForwardingRulesCommiter<Group>
*/
ForwardingRulesCommiter<Group> getGroupCommiter();
/**
- * Content definition method and prevent code duplicity
+ * Content definition method and prevent code duplicity.
+ *
* @return ForwardingRulesCommiter<Meter>
*/
ForwardingRulesCommiter<Meter> getMeterCommiter();
/**
- * Content definition method and prevent code duplicity
+ * Content definition method and prevent code duplicity.
+ *
* @return ForwardingRulesCommiter<Table>
*/
ForwardingRulesCommiter<TableFeatures> getTableFeaturesCommiter();
/**
- * Content definition method
- * @return FlowNodeReconciliation
+ * Return BundleFlowListener instance.
+ *
+ * @return BundleFlowListener
+ */
+ BundleMessagesCommiter<Flow> getBundleFlowListener();
+
+ /**
+ * Return BundleGroupListener instance.
+ *
+ * @return BundleGroupListener
*/
- FlowNodeReconciliation getFlowNodeReconciliation();
+ BundleMessagesCommiter<Group> getBundleGroupListener();
/**
- * Returns the config-subsystem/fallback configuration of FRM
- * @return ForwardingRulesManagerConfig
+ * Check if reconciliation is disabled by user.
+ *
+ * @return true if reconciliation is disabled, else false
*/
- ForwardingRulesManagerConfig getConfiguration();
+ boolean isReconciliationDisabled();
/**
- * Method checks if *this* instance of openflowplugin is owner of
- * the given openflow node.
+ * Check if stale marking is enabled for switch reconciliation.
+ *
+ * @return true if stale marking is enabled, else false
+ */
+ boolean isStaleMarkingEnabled();
+
+ /**
+ * Return number of reconciliation retry are allowed.
+ *
+ * @return number of retries.
+ */
+ int getReconciliationRetryCount();
+
+ /**
+ * Method checks if *this* instance of openflowplugin is owner of the given
+ * openflow node.
+ *
* @return True if owner, else false
*/
boolean isNodeOwner(InstanceIdentifier<FlowCapableNode> ident);
/**
- * Content definition method and prevent code duplicity
+ * Content definition method and prevent code duplicity.
+ *
* @return FlowNodeConnectorInventoryTranslatorImpl
*/
FlowNodeConnectorInventoryTranslatorImpl getFlowNodeConnectorInventoryTranslatorImpl();
-}
+ /**
+ * holds the value read from the configuration file openflowplugin.cfg file.
+ *
+ * @return True if user enables bundle-based-reconciliation-enabled field in
+ * config file or False
+ */
+ boolean isBundleBasedReconciliationEnabled();
+
+ /**
+ * Return the NodeConfigurator which could be used to serialize jobs.
+ *
+ * @return modeConfigurator.
+ */
+ NodeConfigurator getNodeConfigurator();
+
+ /**
+ * Method for register RecoverableListener.
+ *
+ */
+ void addRecoverableListener(RecoverableListener recoverableListener);
+ /**
+ * Method exposes the ArbitratorReconciliationManager service used for performing Arbitrator Based Reconciliation.
+ * @return ArbitratorReconciliationManager
+ */
+ ArbitratorReconcileService getArbitratorReconciliationManager();
+}