/** * Queue up an indexOperationMessage for multi region execution * * @param indexOperationMessage */ public void queueIndexOperationMessage(final IndexOperationMessage indexOperationMessage) { // don't try to produce something with nothing if (indexOperationMessage == null || indexOperationMessage.isEmpty()) { return; } final String jsonValue = ObjectJsonSerializer.INSTANCE.toString(indexOperationMessage); final UUID newMessageId = UUIDGenerator.newTimeUUID(); final int expirationTimeInSeconds = (int) TimeUnit.MILLISECONDS.toSeconds(indexProcessorFig.getIndexMessageTtl()); // write to the map in ES esMapPersistence.putString(newMessageId.toString(), jsonValue, expirationTimeInSeconds); // now queue up the index message final ElasticsearchIndexEvent elasticsearchIndexEvent = new ElasticsearchIndexEvent(queueFig.getPrimaryRegion(), newMessageId); // send to the topic so all regions index the batch offerTopic(elasticsearchIndexEvent); }
/** Write the cursor state to the map in cassandra */ private void writeCursorState(final String jobId, final EdgeScope edge) { final JsonNode node = EdgeScopeSerializer.INSTANCE.toNode(CursorSerializerUtil.getMapper(), edge); final String serializedState = CursorSerializerUtil.asString(node); mapManager.putString(jobId + MAP_CURSOR_KEY, serializedState, INDEX_TTL); }
/** * Write our state meta data into cassandra so everyone can see it * * @param jobId * @param status * @param processedCount * @param lastUpdated */ private void writeStateMeta( final String jobId, final Status status, final long processedCount, final long lastUpdated) { if (logger.isDebugEnabled()) { logger.debug( "Flushing state for jobId {}, status {}, processedCount {}, lastUpdated {}", jobId, status, processedCount, lastUpdated); } mapManager.putString(jobId + MAP_STATUS_KEY, status.name()); mapManager.putLong(jobId + MAP_COUNT_KEY, processedCount); mapManager.putLong(jobId + MAP_UPDATED_KEY, lastUpdated); }