/* * Copyright (C) 2013 All rights reserved * VPRO The Netherlands */ package org.elasticsearch.plugin.degraphmalizer; import org.elasticsearch.cluster.ClusterChangedEvent; import org.elasticsearch.cluster.ClusterService; import org.elasticsearch.cluster.ClusterStateListener; import org.elasticsearch.cluster.node.DiscoveryNode; import org.elasticsearch.cluster.node.DiscoveryNodes; import org.elasticsearch.common.inject.Inject; import org.elasticsearch.plugin.degraphmalizer.updater.UpdaterManager; import java.util.List; /** * User: rico * Date: 11/03/2013 */ public class DegraphmalizerClusterListener implements ClusterStateListener { ClusterService clusterService; UpdaterManager updaterManager; private static final String DEGRAPHMALIZER_NODENAME = "Degraphmalizer"; @Inject public DegraphmalizerClusterListener(ClusterService clusterService, UpdaterManager updaterManager) { this.clusterService = clusterService; this.updaterManager = updaterManager; clusterService.add(this); } @Override public void clusterChanged(ClusterChangedEvent clusterChangedEvent) { if (clusterChangedEvent.nodesChanged()) { DiscoveryNodes.Delta nodesChanged = clusterChangedEvent.nodesDelta(); if (nodesChanged.added()) { if (findNode(nodesChanged.addedNodes(), DEGRAPHMALIZER_NODENAME) != null) { updaterManager.startSending(); } } if (nodesChanged.removed()) { if (findNode(nodesChanged.removedNodes(), DEGRAPHMALIZER_NODENAME) != null) { updaterManager.stopSending(); } } } } private DiscoveryNode findNode(List<DiscoveryNode> nodes, String nodeName) { for (DiscoveryNode node : nodes) { if (DEGRAPHMALIZER_NODENAME.equals(node.name())) { return node; } } return null; } }