import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ConcurrentMap;
-import javax.transaction.SystemException;
-
import org.opendaylight.controller.clustering.services.CacheConfigException;
import org.opendaylight.controller.clustering.services.CacheExistException;
import org.opendaylight.controller.clustering.services.IClusterGlobalServices;
import org.opendaylight.controller.clustering.services.IClusterServices;
+import org.opendaylight.controller.connectionmanager.ConnectionLocality;
import org.opendaylight.controller.connectionmanager.ConnectionMgmtScheme;
import org.opendaylight.controller.sal.core.Node;
import org.opendaylight.controller.sal.utils.Status;
@SuppressWarnings("deprecation")
public void handleClusterViewChanged() {
+ log.debug("Handling Cluster View changed notification");
List<InetAddress> controllers = clusterServices.getClusteredControllers();
ConcurrentMap <InetAddress, Set<Node>> controllerNodesMap = getControllerToNodesMap();
List<InetAddress> toRemove = new ArrayList<InetAddress>();
clusterServices.tcommit();
}
} catch (Exception e) {
- log.error("Exception in replacing nodeConnections ", e);
- retry = false;
+ log.debug("Exception in replacing nodeConnections ", e);
+ retry = true;
try {
clusterServices.trollback();
} catch (Exception e1) {}
}
if (retry) {
try {
- Thread.sleep(100);
- } catch (InterruptedException e) {
- e.printStackTrace();
- }
+ Thread.sleep(1000);
+ } catch (InterruptedException e) {}
handleClusterViewChanged();
}
}
return controllerNodesMap.get(controller);
}
- @SuppressWarnings("deprecation")
public Set<Node> getNodes() {
return getNodes(clusterServices.getMyAddress());
}
return nodeConnections;
}
- @SuppressWarnings("deprecation")
public boolean isLocal(Node node) {
if (nodeConnections == null) return false;
InetAddress myController = clusterServices.getMyAddress();
return (controllers != null && controllers.contains(myController));
}
- @SuppressWarnings("deprecation")
+ public ConnectionLocality getLocalityStatus(Node node) {
+ if (nodeConnections == null) return ConnectionLocality.NOT_CONNECTED;
+ Set<InetAddress> controllers = nodeConnections.get(node);
+ if (controllers == null || controllers.size() == 0) return ConnectionLocality.NOT_CONNECTED;
+ InetAddress myController = clusterServices.getMyAddress();
+ return controllers.contains(myController) ? ConnectionLocality.LOCAL:
+ ConnectionLocality.NOT_LOCAL;
+ }
+
public Status removeNode (Node node) {
return removeNodeFromController(node, clusterServices.getMyAddress());
}
* with this controller to take hold of a Node.
*/
if (isConnectionAllowed(node)) {
- if (!nodeConnections.replace(node, oldControllers, newControllers)) {
+ if (oldControllers == null || !nodeConnections.replace(node, oldControllers, newControllers)) {
clusterServices.trollback();
try {
Thread.sleep(100);
} catch ( InterruptedException e) {}
- log.debug("Replace failed... old={} with new={} for {} to {}", oldControllers.toString(), newControllers.toString(),
- controller.getHostAddress(), node.toString());
+ log.debug("Retrying ... {} with {}", controller.getHostAddress(), node.toString());
return putNodeToController(node, controller);
} else {
log.debug("Replace successful old={} with new={} for {} to {}", oldControllers.toString(), newControllers.toString(),
} catch (CacheConfigException cce) {
log.error("\nCache configuration invalid - check cache mode");
} catch (Exception e) {
- e.printStackTrace();
+ log.error("An error occured",e);
}
}
}