/** * Adds or updates the given index to the internal cache. */ private void refreshIndexer(final String indexerName, List<IndexerModelEvent> events) throws InterruptedException, KeeperException { try { IndexerDefinition indexer = loadIndexer(indexerName, true); IndexerDefinition oldIndexer = indexers.get(indexerName); if (oldIndexer != null && oldIndexer.getOccVersion() == indexer.getOccVersion()) { // nothing changed } else { final boolean isNew = oldIndexer == null; indexers.put(indexerName, indexer); events.add(new IndexerModelEvent(isNew ? INDEXER_ADDED : INDEXER_UPDATED, indexerName)); } } catch (IndexerNotFoundException e) { Object oldIndexer = indexers.remove(indexerName); if (oldIndexer != null) { events.add(new IndexerModelEvent(INDEXER_DELETED, indexerName)); } } } }
private void refreshIndexers(List<IndexerModelEvent> events) throws InterruptedException, KeeperException { List<String> indexerNames = zk.getChildren(indexerCollectionPath, watcher); Set<String> indexerNameSet = new HashSet<String>(); indexerNameSet.addAll(indexerNames); // Remove indexers which no longer exist in ZK Iterator<String> currentIndexerNamesIt = indexers.keySet().iterator(); while (currentIndexerNamesIt.hasNext()) { String indexerName = currentIndexerNamesIt.next(); if (!indexerNameSet.contains(indexerName)) { currentIndexerNamesIt.remove(); events.add(new IndexerModelEvent(INDEXER_DELETED, indexerName)); } } // Add/update the other indexers for (String indexerName : indexerNames) { refreshIndexer(indexerName, events); } }
private void refreshIndexers(List<IndexerModelEvent> events) throws InterruptedException, KeeperException { List<String> indexerNames = zk.getChildren(indexerCollectionPath, watcher); Set<String> indexerNameSet = new HashSet<String>(); indexerNameSet.addAll(indexerNames); // Remove indexers which no longer exist in ZK Iterator<String> currentIndexerNamesIt = indexers.keySet().iterator(); while (currentIndexerNamesIt.hasNext()) { String indexerName = currentIndexerNamesIt.next(); if (!indexerNameSet.contains(indexerName)) { currentIndexerNamesIt.remove(); events.add(new IndexerModelEvent(INDEXER_DELETED, indexerName)); } } // Add/update the other indexers for (String indexerName : indexerNames) { refreshIndexer(indexerName, events); } }
/** * Adds or updates the given index to the internal cache. */ private void refreshIndexer(final String indexerName, List<IndexerModelEvent> events) throws InterruptedException, KeeperException { try { IndexerDefinition indexer = loadIndexer(indexerName, true); IndexerDefinition oldIndexer = indexers.get(indexerName); if (oldIndexer != null && oldIndexer.getOccVersion() == indexer.getOccVersion()) { // nothing changed } else { final boolean isNew = oldIndexer == null; indexers.put(indexerName, indexer); events.add(new IndexerModelEvent(isNew ? INDEXER_ADDED : INDEXER_UPDATED, indexerName)); } } catch (IndexerNotFoundException e) { Object oldIndexer = indexers.remove(indexerName); if (oldIndexer != null) { events.add(new IndexerModelEvent(INDEXER_DELETED, indexerName)); } } } }
@Override public void activateAsLeader() throws Exception { log.info("Starting up as indexer master."); // Start these processes, but it is not until we have registered our model listener // that these will receive work. eventWorker.start(); Collection<IndexerDefinition> indexers = indexerModel.getIndexers(listener); // Rather than performing any work that might to be done for the indexers here, // we push out fake events. This way there's only one place where these actions // need to be performed. for (IndexerDefinition index : indexers) { eventWorker.putEvent(new IndexerModelEvent(INDEXER_UPDATED, index.getName())); } log.info("Startup as indexer master successful."); }
@Override public void activateAsLeader() throws Exception { log.info("Starting up as indexer master."); // Start these processes, but it is not until we have registered our model listener // that these will receive work. eventWorker.start(); Collection<IndexerDefinition> indexers = indexerModel.getIndexers(listener); // Rather than performing any work that might to be done for the indexers here, // we push out fake events. This way there's only one place where these actions // need to be performed. for (IndexerDefinition index : indexers) { eventWorker.putEvent(new IndexerModelEvent(INDEXER_UPDATED, index.getName())); } log.info("Startup as indexer master successful."); }