private void waitForDeletion(String indexerName) throws InterruptedException, KeeperException { System.out.printf("Deleting indexer '%s'", indexerName); while (model.hasIndexer(indexerName)) { IndexerDefinition indexerDef; try { indexerDef = model.getFreshIndexer(indexerName); } catch (IndexerNotFoundException e) { // The indexer was deleted between the call to hasIndexer and getIndexer, that's ok break; } switch (indexerDef.getLifecycleState()) { case DELETE_FAILED: System.err.println("\nDelete failed"); return; case DELETE_REQUESTED: case DELETING: System.out.print("."); Thread.sleep(500); continue; default: throw new IllegalStateException("Illegal lifecycle state while deleting: " + indexerDef.getLifecycleState()); } } System.out.printf("\nDeleted indexer '%s'\n", indexerName); }
private void waitForDeletion(String indexerName) throws InterruptedException, KeeperException { System.out.printf("Deleting indexer '%s'", indexerName); while (model.hasIndexer(indexerName)) { IndexerDefinition indexerDef; try { indexerDef = model.getFreshIndexer(indexerName); } catch (IndexerNotFoundException e) { // The indexer was deleted between the call to hasIndexer and getIndexer, that's ok break; } switch (indexerDef.getLifecycleState()) { case DELETE_FAILED: System.err.println("\nDelete failed"); return; case DELETE_REQUESTED: case DELETING: System.out.print("."); Thread.sleep(500); continue; default: throw new IllegalStateException("Illegal lifecycle state while deleting: " + indexerDef.getLifecycleState()); } } }
private void deleteIndexer(String indexerName) { // delete model boolean failedToDeleteIndexer = false; try { indexerModel.deleteIndexerInternal(indexerName); } catch (Throwable t) { log.error("Failed to delete indexer " + indexerName, t); failedToDeleteIndexer = true; } if (failedToDeleteIndexer) { try { IndexerDefinition indexer = indexerModel.getFreshIndexer(indexerName); indexer = new IndexerDefinitionBuilder().startFrom(indexer) .lifecycleState(IndexerDefinition.LifecycleState.DELETE_FAILED).build(); indexerModel.updateIndexerInternal(indexer); } catch (Throwable t) { log.error("Failed to set indexer state to " + IndexerDefinition.LifecycleState.DELETE_FAILED, t); } } }
private void deleteIndexer(String indexerName) { // delete model boolean failedToDeleteIndexer = false; try { indexerModel.deleteIndexerInternal(indexerName); } catch (Throwable t) { log.error("Failed to delete indexer " + indexerName, t); failedToDeleteIndexer = true; } if (failedToDeleteIndexer) { try { IndexerDefinition indexer = indexerModel.getFreshIndexer(indexerName); indexer = new IndexerDefinitionBuilder().startFrom(indexer) .lifecycleState(IndexerDefinition.LifecycleState.DELETE_FAILED).build(); indexerModel.updateIndexerInternal(indexer); } catch (Throwable t) { log.error("Failed to set indexer state to " + IndexerDefinition.LifecycleState.DELETE_FAILED, t); } } }
try { final IndexerDefinition indexer = indexerModel.getFreshIndexer(indexerName); IndexerDefinitionBuilder updatedIndexer = new IndexerDefinitionBuilder().startFrom(indexer); final String[] batchArguments = createBatchArguments(indexer);
try { final IndexerDefinition indexer = indexerModel.getFreshIndexer(indexerName); IndexerDefinitionBuilder updatedIndexer = new IndexerDefinitionBuilder().startFrom(indexer); final String[] batchArguments = createBatchArguments(indexer);
private byte[] waitForDeletion(String indexerName) throws InterruptedException, KeeperException, IndexerServerException { long startTime = System.nanoTime(); while (getModel().hasIndexer(indexerName)) { IndexerDefinition indexerDef; try { indexerDef = getModel().getFreshIndexer(indexerName); } catch (IndexerNotFoundException e) { // The indexer was deleted between the call to hasIndexer and getIndexer, that's ok break; } switch (indexerDef.getLifecycleState()) { case DELETE_FAILED: throw new IndexerServerException(HttpServletResponse.SC_INTERNAL_SERVER_ERROR, new IndexerDeleteFailedException("Delete of indexer " + indexerName + " failed")); case DELETE_REQUESTED: case DELETING: Thread.sleep(500); // timer at the end so we try at least once if (TimeUnit.MILLISECONDS.toNanos(DELETE_TIMEOUT_MILLIS) < System.nanoTime() - startTime) { throw new IndexerServerException(HttpServletResponse.SC_INTERNAL_SERVER_ERROR, new IndexerDeleteFailedException("Delete of indexer " + indexerName + " timed out")); } continue; default: throw new IllegalStateException("Illegal lifecycle state while deleting: " + indexerDef.getLifecycleState()); } } return toJsonResultBytes("Deleted indexer \'" + indexerName + "\'"); }
private void unassignSubscription(String indexerName) { try { String lock = indexerModel.lockIndexer(indexerName); try { // Read current situation of record and assure it is still actual IndexerDefinition indexer = indexerModel.getFreshIndexer(indexerName); if (needsSubscriptionIdUnassigned(indexer)) { sepModel.removeSubscription(indexer.getSubscriptionId()); log.info("Deleted queue subscription for indexer " + indexerName); indexer = new IndexerDefinitionBuilder().startFrom(indexer).subscriptionId(null).build(); indexerModel.updateIndexerInternal(indexer); } } finally { indexerModel.unlockIndexer(lock); } } catch (Throwable t) { log.error("Error trying to delete the subscription for indexer " + indexerName, t); } }
private void unassignSubscription(String indexerName) { try { String lock = indexerModel.lockIndexer(indexerName); try { // Read current situation of record and assure it is still actual IndexerDefinition indexer = indexerModel.getFreshIndexer(indexerName); if (needsSubscriptionIdUnassigned(indexer)) { sepModel.removeSubscription(indexer.getSubscriptionId()); log.info("Deleted queue subscription for indexer " + indexerName); indexer = new IndexerDefinitionBuilder().startFrom(indexer).subscriptionId(null).build(); indexerModel.updateIndexerInternal(indexer); } } finally { indexerModel.unlockIndexer(lock); } } catch (Throwable t) { log.error("Error trying to delete the subscription for indexer " + indexerName, t); } }
@Override public void jobStarted(String jobId, String trackingUrl) { try { // Lock internal bypasses the index-in-delete-state check, which does not matter (and might cause // failure) in our case. String lock = indexerModel.lockIndexerInternal(indexerName, false); try { IndexerDefinition definition = indexerModel.getFreshIndexer(indexerName); BatchBuildInfo batchBuildInfo = new BatchBuildInfo(definition.getActiveBatchBuildInfo()).withJob(jobId, trackingUrl); IndexerDefinition updatedDefinition = new IndexerDefinitionBuilder().startFrom(definition) .activeBatchBuildInfo(batchBuildInfo) .build(); indexerModel.updateIndexerInternal(updatedDefinition); log.info("Updated indexer batch build state for indexer " + indexerName); } finally { indexerModel.unlockIndexer(lock, true); } } catch (Exception e) { log.error("failed to update indexer batch build state for indexer " + indexerName); } } }
@Override public void jobStarted(String jobId, String trackingUrl) { try { // Lock internal bypasses the index-in-delete-state check, which does not matter (and might cause // failure) in our case. String lock = indexerModel.lockIndexerInternal(indexerName, false); try { IndexerDefinition definition = indexerModel.getFreshIndexer(indexerName); BatchBuildInfo batchBuildInfo = new BatchBuildInfo(definition.getActiveBatchBuildInfo()).withJob(jobId, trackingUrl); IndexerDefinition updatedDefinition = new IndexerDefinitionBuilder().startFrom(definition) .activeBatchBuildInfo(batchBuildInfo) .build(); indexerModel.updateIndexerInternal(updatedDefinition); log.info("Updated indexer batch build state for indexer " + indexerName); } finally { indexerModel.unlockIndexer(lock, true); } } catch (Exception e) { log.error("failed to update indexer batch build state for indexer " + indexerName); } } }
private void assignSubscription(String indexerName) { try { String lock = indexerModel.lockIndexer(indexerName); try { // Read current situation of record and assure it is still actual IndexerDefinition indexer = indexerModel.getFreshIndexer(indexerName); if (needsSubscriptionIdAssigned(indexer)) { // We assume we are the only process which creates subscriptions which begin with the // prefix "Indexer:". This way we are sure there are no naming conflicts or conflicts // due to concurrent operations (e.g. someone deleting this subscription right after we // created it). String subscriptionId = subscriptionId(indexer.getName()); sepModel.addSubscription(subscriptionId); indexer = new IndexerDefinitionBuilder().startFrom(indexer).subscriptionId(subscriptionId).build(); indexerModel.updateIndexerInternal(indexer); log.info("Assigned subscription ID '" + subscriptionId + "' to indexer '" + indexerName + "'"); } } finally { indexerModel.unlockIndexer(lock); } } catch (Throwable t) { log.error("Error trying to assign a subscription to index " + indexerName, t); } }
String lock = model.lockIndexer(indexName); try { IndexerDefinition indexer = model.getFreshIndexer(indexName);
try { IndexerDefinition indexer = indexerModel.getFreshIndexer(indexerName);
try { IndexerDefinition indexer = indexerModel.getFreshIndexer(indexerName);
try { IndexerDefinition indexer = indexerModel.getFreshIndexer(indexerName); log.debug("EventWorker indexer.getLifecycleState: " + indexer.getLifecycleState()); if (indexer.getLifecycleState() == IndexerDefinition.LifecycleState.DELETE_REQUESTED) {
public void run(OptionSet options) throws Exception { super.run(options); String indexName = nameOption.value(options); if (!options.has("http")) { if (!model.hasIndexer(indexName)) { throw new CliException("Indexer does not exist: " + indexName); } IndexerDefinition newIndexer = null; String lock = model.lockIndexer(indexName); try { IndexerDefinition indexer = model.getFreshIndexer(indexName); IndexerDefinitionBuilder builder = buildIndexerDefinition(options, indexer); newIndexer = builder.build(); if (newIndexer.equals(indexer)) { System.out.println("Index already matches the specified settings, did not update it."); } else { model.updateIndexer(newIndexer, lock); System.out.println("Index updated: " + indexName); } } finally { // In case we requested deletion of an index, it might be that the lock is already removed // by the time we get here as part of the index deletion. boolean ignoreMissing = newIndexer != null && newIndexer.getLifecycleState() == LifecycleState.DELETE_REQUESTED; model.unlockIndexer(lock, ignoreMissing); } } else { updateIndexerHttp(options, indexName); } }
try { IndexerDefinition indexer = indexerModel.getFreshIndexer(indexerName); if (needsSubscriptionIdAssigned(indexer)) {
String lock = model.lockIndexer(indexName); try { IndexerDefinition oldIndexer = model.getFreshIndexer(indexName); if (!oldIndexer.equals(baseIndexer)) { throw new IndexerServerException(HttpServletResponse.SC_BAD_REQUEST,
try { IndexerDefinition indexer = indexerModel.getFreshIndexer(indexerName); if (indexer.getLifecycleState() == IndexerDefinition.LifecycleState.DELETE_REQUESTED) { canBeDeleted = true;