private ESBulkBuilder addDocToDeleteToESBuilder(ESBulkBuilder bbuilder, Map<String, Set<String>> vmap) { for (Map.Entry<String, Set<String>> et : vmap.entrySet()) { String voName = et.getKey(); IndexerInfo info = voClassToIndexerMapping.get(voName); if (info == null) { /* it's a RefVO for ManyToMany mapping */ continue; } Set<String> uuids = et.getValue(); if (!uuids.isEmpty()) { for (String uuid : uuids) { bbuilder.addDeleteBulk(info.inventoryName.toLowerCase(), info.inventoryName, uuid); } } } return bbuilder; }
@Override public String toString() { return build(); }
public ESBulkBuilder addDeleteBulk(String indexName, String typeName, String id) { Bulk b = createBulk(indexName, typeName, id); Delete d = new Delete(); d.delete = b; bulks.put(d, ""); toDeleteName.add(typeName); empty = false; return this; }
private void reindexInventory(String inventoryName, Set<String> uuids) throws IllegalArgumentException, IllegalAccessException, InvocationTargetException { IndexerInfo info = getIndexerInfoByInventoryName(inventoryName); ESBulkBuilder bbuilder = new ESBulkBuilder(); List<InventoryDoc> docs = buildDoc(info, uuids); if (docs.isEmpty()) { return; } for (InventoryDoc doc : docs) { bbuilder.addIndexBulk(doc.getInventoryName().toLowerCase(), doc.getInventoryName(), doc); } if (!bbuilder.isEmpty()) { sendBulk(bbuilder.toString(), bbuilder.getAffectedInventoryNames()); logger.debug(String.format("successfully reindex all data for inventory[%s]", inventoryName)); } }
private ESBulkBuilder addDocToIndexToESBuilder(ESBulkBuilder bbuilder, Map<String, Set<String>> vmap) { try { for (Map.Entry<String, Set<String>> e : vmap.entrySet()) { IndexerInfo info = voClassToIndexerMapping.get(e.getKey()); if (info == null) { String err = String .format("%s has an entry in InsertVO/UpdateVO table, but there is no indexer matching it. It can be intended if the entity inherits from another entity but itself is not wanted to be indexed. Otherwise it's most likely a bug", e.getKey()); logger.warn(err); continue; } List<InventoryDoc> docs = buildDoc(info, e.getValue()); if (docs.isEmpty()) { continue; } for (InventoryDoc doc : docs) { bbuilder.addIndexBulk(doc.getInventoryName().toLowerCase(), doc.getInventoryName(), doc); } } } catch (Exception e) { throw new CloudRuntimeException(e); } return bbuilder; }
@Override public void afterCommit(Operation op, Class<?>... entityClass) { ESBulkBuilder bbuilder = new ESBulkBuilder(); for (Class<?> vo : entityClass) { if (!triggerVOs.contains(vo)) { logger.trace(String.format("Class[%s] is not annotated by @TriggerIndex, no index operation will be proceeded", vo.getName())); continue; } if (op == Operation.PERSIST || op == Operation.UPDATE) { Map<String, Set<String>> vmap = getUuidsOfVOToIndexFromInsertVOUpdateVO(vo, op); bbuilder = addDocToIndexToESBuilder(bbuilder, vmap); } else if (op == Operation.REMOVE) { Pair<Map<String, Set<String>>, Map<String, Set<String>>> pair = getVOUuidsToDeleteOrIndexFromDeleteVO(vo); Map<String, Set<String>> toIndex = pair.second(); bbuilder = addDocToIndexToESBuilder(bbuilder, toIndex); Map<String, Set<String>> toDelete = pair.first(); bbuilder = addDocToDeleteToESBuilder(bbuilder, toDelete); } } if (!bbuilder.isEmpty()) { sendBulk(bbuilder.toString(), bbuilder.getAffectedInventoryNames()); } }
public ESBulkBuilder addIndexBulk(String indexName, String typeName, InventoryDoc doc) { Bulk b = createBulk(indexName, typeName, doc.getIndexId()); Index i = new Index(); i.index = b; bulks.put(i, doc.getDoc()); toIndexName.add(typeName); empty = false; return this; }