@Override public void handleStart(final Operation post) { super.setMaintenanceIntervalMicros(getHost().getMaintenanceIntervalMicros() * 5); // index service getUri() will be invoked on every load and save call for every operation, // so its worth caching (plus we only have a very small number of index services this.uri = post.getUri(); ExecutorService es = new ThreadPoolExecutor(QUERY_THREAD_COUNT, QUERY_THREAD_COUNT, 1, TimeUnit.MINUTES, new ArrayBlockingQueue<>(QUERY_EXECUTOR_WORK_QUEUE_CAPACITY), new NamedThreadFactory(getUri() + "/queries")); this.privateQueryExecutor = TracingExecutor.create(es, getHost().getTracer()); es = new ThreadPoolExecutor(UPDATE_THREAD_COUNT, UPDATE_THREAD_COUNT, 1, TimeUnit.MINUTES, new ArrayBlockingQueue<>(UPDATE_EXECUTOR_WORK_QUEUE_CAPACITY), new NamedThreadFactory(getUri() + "/updates")); this.privateIndexingExecutor = TracingExecutor.create(es, getHost().getTracer()); post.complete(); }
@Override public void handleMaintenance(Operation post) { Operation maintenanceOp = Operation .createPost(getUri()) .setBodyNoCloning(new MaintenanceRequest()) .setCompletion((o, ex) -> { if (ex != null) { post.fail(ex); return; } post.complete(); }); setAuthorizationContext(maintenanceOp, getSystemAuthorizationContext()); handleRequest(maintenanceOp); }
private void deleteAllDocumentsForSelfLink(Connection conn, String tableName, Operation postOrDelete, String link, ServiceDocument state) throws Exception { dao.deleteDocument(conn, tableName, link); postOrDelete.complete(); adjustTimeSeriesStat(STAT_NAME_SERVICE_DELETE_COUNT, AGGREGATION_TYPE_SUM, 1); logFine("%s expired", link); if (state == null) { return; } applyActiveQueries(postOrDelete, state, null); // remove service, if its running // Broadcasting delete to all nodes, to make sure owner node stop the service // TODO: Find better solution, all nodes query for expiration and stop if service owner? // TODO: Consider skipping delete for IMMUTABLE and non-periodic services, since they will // stop on idle // TODO: Why handleDelete is not called? Noticed same behavior with lucene Operation delete = Operation.createDelete(this, state.documentSelfLink) .setBodyNoCloning(state) .disableFailureLogging(true) .addPragmaDirective(Operation.PRAGMA_DIRECTIVE_NO_INDEX_UPDATE) .setReferer(getUri()); getHost().broadcastRequest(ServiceUriPaths.DEFAULT_NODE_SELECTOR, false, delete); }