public QueueIndexUpdate batchUpdateQueueIndex( QueueIndexUpdate indexUpdate, UUID subcriptionQueueId) throws Exception { logger.info("batchUpdateQueueIndex"); Mutator<ByteBuffer> batch = indexUpdate.getBatch(); // queue_id,prop_name Object index_key = key(subcriptionQueueId, indexUpdate.getEntryName()); // subscription_queue_id,subscriber_queue_id,prop_name for (QueueIndexEntry entry : indexUpdate.getPrevEntries()) { if (entry.getValue() != null) { index_key = key(subcriptionQueueId, entry.getPath()); batch.addDeletion( bytebuffer(index_key), PROPERTY_INDEX.getColumnFamily(), entry.getIndexComposite(), dce, indexUpdate.getTimestamp()); } else { logger.error("Unexpected condition - deserialized property value is null"); } } if (indexUpdate.getNewEntries().size() > 0) { for (QueueIndexEntry indexEntry : indexUpdate.getNewEntries()) { index_key = key(subcriptionQueueId, indexEntry.getPath()); batch.addInsertion( bytebuffer(index_key), PROPERTY_INDEX.getColumnFamily(), createColumn( indexEntry.getIndexComposite(), ByteBuffer.allocate(0), indexUpdate.getTimestamp(), dce, be)); } } for (String index : indexUpdate.getIndexesSet()) { batch.addInsertion( bytebuffer(key(subcriptionQueueId, DICTIONARY_SUBSCRIBER_INDEXES)), QUEUE_DICTIONARIES.getColumnFamily(), createColumn(index, ByteBuffer.allocate(0), indexUpdate.getTimestamp(), se, be)); } return indexUpdate; }
public QueueIndexUpdate batchStartQueueIndexUpdate( Mutator<ByteBuffer> batch, String queuePath, UUID queueId, String entryName, Object entryValue, UUID timestampUuid) throws Exception { long timestamp = getTimestampInMicros(timestampUuid); QueueIndexUpdate indexUpdate = new QueueIndexUpdate(batch, queuePath, queueId, entryName, entryValue, timestampUuid); List<HColumn<ByteBuffer, ByteBuffer>> entries = null; entries = createSliceQuery(cass.getApplicationKeyspace(applicationId), ue, be, be) .setColumnFamily(PROPERTY_INDEX_ENTRIES.getColumnFamily()) .setKey(queueId) .setRange( DynamicComposite.toByteBuffer(entryName), setGreaterThanEqualityFlag(new DynamicComposite(entryName)).serialize(), false, INDEX_ENTRY_LIST_COUNT) .execute() .get() .getColumns(); if (logger.isInfoEnabled()) { logger.info( "Found {} previous index entries for {} of entity {}", new Object[] {entries.size(), entryName, queueId}); } // Delete all matching entries from entry list for (HColumn<ByteBuffer, ByteBuffer> entry : entries) { UUID prev_timestamp = null; Object prev_value = null; String prev_obj_path = null; // new format: // composite(entryName, // value_code,prev_value,prev_timestamp,prev_obj_path) = null DynamicComposite composite = DynamicComposite.fromByteBuffer(entry.getName().duplicate()); prev_value = composite.get(2); prev_timestamp = (UUID) composite.get(3); if (composite.size() > 4) { prev_obj_path = (String) composite.get(4); } if (prev_value != null) { String entryPath = entryName; if ((prev_obj_path != null) && (prev_obj_path.length() > 0)) { entryPath = entryName + "." + prev_obj_path; } indexUpdate.addPrevEntry(entryPath, prev_value, prev_timestamp); // composite(property_value,subscriber_id,entry_timestamp) batch.addDeletion( bytebuffer(queueId), PROPERTY_INDEX_ENTRIES.getColumnFamily(), entry.getName().duplicate(), be, timestamp); } else { logger.error("Unexpected condition - deserialized property value is null"); } } if (validIndexableValueOrJson(entryValue)) { List<Map.Entry<String, Object>> list = getKeyValueList(entryName, entryValue, false); for (Map.Entry<String, Object> indexEntry : list) { if (validIndexableValue(indexEntry.getValue())) { indexUpdate.addNewEntry(indexEntry.getKey(), toIndexableValue(indexEntry.getValue())); } } for (Map.Entry<String, Object> indexEntry : list) { String name = indexEntry.getKey(); if (name.startsWith(entryName + ".")) { name = name.substring(entryName.length() + 1); } else if (name.startsWith(entryName)) { name = name.substring(entryName.length()); } batch.addInsertion( bytebuffer(queueId), PROPERTY_INDEX_ENTRIES.getColumnFamily(), createColumn( DynamicComposite.toByteBuffer( entryName, indexValueCode(entryValue), toIndexableValue(entryValue), indexUpdate.getTimestampUuid(), name), ByteBuffer.allocate(0), timestamp, be, be)); indexUpdate.addIndex(indexEntry.getKey()); } indexUpdate.addIndex(entryName); } return indexUpdate; }