+ entityConnectionMap.remove(ovsdbConnectionInstance.getConnectedEntity(), ovsdbConnectionInstance);
+ }
+
+ private void retryConnection(final InstanceIdentifier<Node> iid, final OvsdbNodeAugmentation ovsdbNode,
+ ConnectionReconciliationTriggers trigger) {
+ final ReconciliationTask task = new ConnectionReconciliationTask(
+ reconciliationManager,
+ this,
+ iid,
+ ovsdbNode);
+
+ if (reconciliationManager.isEnqueued(task)) {
+ return;
+ }
+ switch (trigger) {
+ case ON_CONTROLLER_INITIATED_CONNECTION_FAILURE:
+ reconciliationManager.enqueueForRetry(task);
+ break;
+ case ON_DISCONNECT: {
+ CheckedFuture<Optional<Node>, ReadFailedException> readNodeFuture;
+ try (ReadOnlyTransaction tx = db.newReadOnlyTransaction()) {
+ readNodeFuture = tx.read(LogicalDatastoreType.CONFIGURATION, iid);
+ }
+ Futures.addCallback(readNodeFuture, new FutureCallback<Optional<Node>>() {
+ @Override
+ public void onSuccess(@NonNull Optional<Node> node) {
+ if (node.isPresent()) {
+ LOG.info("Disconnected/Failed connection {} was controller initiated, attempting "
+ + "reconnection", ovsdbNode.getConnectionInfo());
+ reconciliationManager.enqueue(task);
+
+ } else {
+ LOG.debug("Connection {} was switch initiated, no reconciliation is required",
+ iid.firstKeyOf(Node.class).getNodeId());
+ }
+ }
+
+ @Override
+ public void onFailure(Throwable throwable) {
+ LOG.warn("Read Config/DS for Node failed! {}", iid, throwable);
+ }
+ }, MoreExecutors.directExecutor());
+ break;
+ }
+ default:
+ break;
+ }
+ }
+
+ private void reconcileBridgeConfigurations(final OvsdbConnectionInstance client) {
+ final InstanceIdentifier<Node> nodeIid = client.getInstanceIdentifier();
+ final ReconciliationTask task = new BridgeConfigReconciliationTask(
+ reconciliationManager, OvsdbConnectionManager.this, nodeIid, client, instanceIdentifierCodec);
+
+ reconciliationManager.enqueue(task);