execute the indices store listener as a last listener, to make sure we clean things up before we delete content if needed

This commit is contained in:
Shay Banon 2011-09-27 22:56:27 +03:00
parent df3fa9c067
commit 5ed064d532
3 changed files with 14 additions and 1 deletions

View File

@ -59,6 +59,11 @@ public interface ClusterService extends LifecycleComponent<ClusterService> {
*/
void addPriority(ClusterStateListener listener);
/**
* Adds last listener.
*/
void addLast(ClusterStateListener listener);
/**
* Adds a listener for updated cluster states.
*/

View File

@ -79,6 +79,7 @@ public class InternalClusterService extends AbstractLifecycleComponent<ClusterSe
private final List<ClusterStateListener> priorityClusterStateListeners = new CopyOnWriteArrayList<ClusterStateListener>();
private final List<ClusterStateListener> clusterStateListeners = new CopyOnWriteArrayList<ClusterStateListener>();
private final List<ClusterStateListener> lastClusterStateListeners = new CopyOnWriteArrayList<ClusterStateListener>();
private final Queue<NotifyTimeout> onGoingTimeouts = new LinkedTransferQueue<NotifyTimeout>();
@ -152,6 +153,10 @@ public class InternalClusterService extends AbstractLifecycleComponent<ClusterSe
priorityClusterStateListeners.add(listener);
}
public void addLast(ClusterStateListener listener) {
lastClusterStateListeners.add(listener);
}
public void add(ClusterStateListener listener) {
clusterStateListeners.add(listener);
}
@ -264,6 +269,9 @@ public class InternalClusterService extends AbstractLifecycleComponent<ClusterSe
for (ClusterStateListener listener : clusterStateListeners) {
listener.clusterChanged(clusterChangedEvent);
}
for (ClusterStateListener listener : lastClusterStateListeners) {
listener.clusterChanged(clusterChangedEvent);
}
if (!nodesDelta.removedNodes().isEmpty()) {
threadPool.cached().execute(new Runnable() {

View File

@ -54,7 +54,7 @@ public class IndicesStore extends AbstractComponent implements ClusterStateListe
this.nodeEnv = nodeEnv;
this.indicesService = indicesService;
this.clusterService = clusterService;
clusterService.add(this);
clusterService.addLast(this);
}
public void close() {