private static List<OvsdbClient> getPassiveClientsFromSameNode(OvsdbClient ovsdbClient) { List<OvsdbClient> passiveClients = new ArrayList<>(); for (OvsdbClient client : connections.keySet()) { if (!client.equals(ovsdbClient) && client.getConnectionInfo().getRemoteAddress() .equals(ovsdbClient.getConnectionInfo().getRemoteAddress()) && client.getConnectionInfo().getType() == ConnectionType.PASSIVE) { passiveClients.add(client); } } return passiveClients; }
@Override public void connected(@Nonnull final OvsdbClient externalClient) { LOG.info("Library connected {} from {}:{} to {}:{}", externalClient.getConnectionInfo().getType(), externalClient.getConnectionInfo().getRemoteAddress(), externalClient.getConnectionInfo().getRemotePort(), externalClient.getConnectionInfo().getLocalAddress(), externalClient.getConnectionInfo().getLocalPort()); List<String> databases = new ArrayList<>(); try { databases = externalClient.getDatabases().get(DB_FETCH_TIMEOUT, TimeUnit.MILLISECONDS); if (databases.contains(SouthboundConstants.OPEN_V_SWITCH)) { OvsdbConnectionInstance client = connectedButCallBacksNotRegistered(externalClient); // Register Cluster Ownership for ConnectionInfo registerEntityForOwnership(client); } } catch (InterruptedException | ExecutionException | TimeoutException e) { LOG.warn("Unable to fetch Database list from device {}. Disconnecting from the device.", externalClient.getConnectionInfo().getRemoteAddress(), e); externalClient.disconnect(); } }
@Override public void disconnected(OvsdbClient client) { LOG.info("Library disconnected {} from {}:{} to {}:{}. Cleaning up the operational data store", client.getConnectionInfo().getType(), client.getConnectionInfo().getRemoteAddress(), client.getConnectionInfo().getRemotePort(), client.getConnectionInfo().getLocalAddress(), client.getConnectionInfo().getLocalPort()); ConnectionInfo key = SouthboundMapper.createConnectionInfo(client); OvsdbConnectionInstance ovsdbConnectionInstance = getConnectionInstance(key); if (ovsdbConnectionInstance != null) { // Unregister Entity ownership as soon as possible ,so this instance should // not be used as a candidate in Entity election (given that this instance is // about to disconnect as well), if current owner get disconnected from // OVSDB device. unregisterEntityForOwnership(ovsdbConnectionInstance); txInvoker.invoke(new OvsdbNodeRemoveCommand(ovsdbConnectionInstance, null, null)); removeConnectionInstance(key); //Controller initiated connection can be terminated from switch side. //So cleanup the instance identifier cache. removeInstanceIdentifier(key); stopBridgeConfigReconciliationIfActive(ovsdbConnectionInstance.getInstanceIdentifier()); retryConnection(ovsdbConnectionInstance.getInstanceIdentifier(), ovsdbConnectionInstance.getOvsdbNodeAugmentation(), ConnectionReconciliationTriggers.ON_DISCONNECT); } else { LOG.warn("disconnected : Connection instance not found for OVSDB Node {} ", key); } LOG.trace("OvsdbConnectionManager: exit disconnected client: {}", client); }