@Override public void run(OptionSet options) throws Exception { super.run(options); IndexerDefinition indexer = null; try { IndexerDefinitionBuilder builder = buildIndexerDefinition(options, null); indexer = builder.build(); } catch (IllegalArgumentException e) { System.err.printf("Error adding indexer: %s\n", e.getMessage()); return; } model.addIndexer(indexer); System.out.println("Indexer added: " + indexer.getName()); } }
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); } }
/** * Get a single index definition. */ @GET @Path("{name}") @Produces("application/json") public IndexerDefinition get(@PathParam("name") String name) throws IndexerNotFoundException { return getModel().getIndexer(name); }
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 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()); } } }
if (!model.hasIndexer(indexName)) { throw new CliException("Indexer does not exist: " + indexName); String lock = model.lockIndexer(indexName); try { IndexerDefinition indexer = model.getFreshIndexer(indexName); System.out.println("Index already matches the specified settings, did not update it."); } else { model.updateIndexer(newIndexer, lock); System.out.println("Index updated: " + indexName); model.unlockIndexer(lock, ignoreMissing);
@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); } } }
ObjectMapper m = new ObjectMapper(); IndexerDefinition oldIndexer = model.getIndexer(indexName); IndexerDefinition indexerDefinition = IndexerDefinitionJsonSerDeser.INSTANCE.fromJson(json, new IndexerDefinitionBuilder().startFrom(oldIndexer)).build(); IndexerDefinition.LifecycleState.valueOf(json.get("lifecycleState").getTextValue()) : null; String lock = model.lockIndexer(indexName); try { if (!oldIndexer.equals(indexerDefinition)) { model.updateIndexer(indexerDefinition, lock); model.unlockIndexer(lock, ignoreMissing);
@Override protected void run(OptionSet options) throws Exception { super.run(options); String indexerName = nameOption.value(options); if (!model.hasIndexer(indexerName)) { throw new CliException("Indexer does not exist: " + indexerName); } IndexerDefinition indexerDef = model.getIndexer(indexerName); if (indexerDef.getLifecycleState() == LifecycleState.DELETE_REQUESTED || indexerDef.getLifecycleState() == LifecycleState.DELETING) { System.err.printf("Delete of '%s' is already in progress\n", indexerName); return; } IndexerDefinitionBuilder builder = new IndexerDefinitionBuilder(); builder.startFrom(indexerDef); builder.lifecycleState(LifecycleState.DELETE_REQUESTED); model.updateIndexerInternal(builder.build()); waitForDeletion(indexerName); }
/** * Get all index definitions. */ @GET @Produces("application/json") public Collection<IndexerDefinition> get(@Context UriInfo uriInfo, @Context SecurityContext securityContext) throws IndexerServerException { return getModel().getIndexers(); }
try { IndexerDefinition indexer = indexerModel.getFreshIndexer(indexerName); log.debug("EventWorker indexer.getLifecycleState: " + indexer.getLifecycleState()); if (indexer.getLifecycleState() == IndexerDefinition.LifecycleState.DELETE_REQUESTED) { indexer = new IndexerDefinitionBuilder() .startFrom(indexer).lifecycleState(IndexerDefinition.LifecycleState.DELETING).build(); indexerModel.updateIndexerInternal(indexer);
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); } }
@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); } } }
ObjectMapper m = new ObjectMapper(); IndexerDefinition oldIndexer = model.getIndexer(indexName); IndexerDefinition indexerDefinition = IndexerDefinitionJsonSerDeser.INSTANCE.fromJson(json, new IndexerDefinitionBuilder().startFrom(oldIndexer)).build(); IndexerDefinition.LifecycleState.valueOf(json.get("lifecycleState").getTextValue()) : null; String lock = model.lockIndexer(indexName); try { if (!oldIndexer.equals(indexerDefinition)) { model.updateIndexer(indexerDefinition, lock); model.unlockIndexer(lock, ignoreMissing);
@Override protected void run(OptionSet options) throws Exception { super.run(options); String indexerName = nameOption.value(options); if (!options.has("http")) { if (!model.hasIndexer(indexerName)) { throw new CliException("Indexer does not exist: " + indexerName); } IndexerDefinition indexerDef = model.getIndexer(indexerName); if (indexerDef.getLifecycleState() == LifecycleState.DELETE_REQUESTED || indexerDef.getLifecycleState() == LifecycleState.DELETING) { System.err.printf("Delete of '%s' is already in progress\n", indexerName); return; } IndexerDefinitionBuilder builder = new IndexerDefinitionBuilder(); builder.startFrom(indexerDef); builder.lifecycleState(LifecycleState.DELETE_REQUESTED); model.updateIndexerInternal(builder.build()); waitForDeletion(indexerName); System.out.printf("\nDeleted indexer '%s'\n", indexerName); } else { deleteIndexerHttp(options, indexerName); } }
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 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); }
/** * Get all index definitions. */ @GET @Produces("application/json") public Collection<IndexerDefinition> get(@Context UriInfo uriInfo) { return getModel().getIndexers(); }
try { IndexerDefinition indexer = indexerModel.getFreshIndexer(indexerName); if (indexer.getLifecycleState() == IndexerDefinition.LifecycleState.DELETE_REQUESTED) { canBeDeleted = true; indexer = new IndexerDefinitionBuilder() .startFrom(indexer).lifecycleState(IndexerDefinition.LifecycleState.DELETING).build(); indexerModel.updateIndexerInternal(indexer);
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); } }