use of org.hypertrace.core.documentstore.BulkArrayValueUpdateRequest in project document-store by hypertrace.
the class MongoDocStoreTest method test_bulkOperationOnArrayValue_addOperation.
@Test
public void test_bulkOperationOnArrayValue_addOperation() throws Exception {
datastore.createCollection(COLLECTION_NAME, null);
Collection collection = datastore.getCollection(COLLECTION_NAME);
Key key1 = new SingleValueKey("default", "testKey1");
Document key1InsertedDocument = Utils.createDocument(ImmutablePair.of("id", "testKey1"), ImmutablePair.of("attributes", Map.of("name", "testKey1", "labels", ImmutablePair.of("valueList", ImmutablePair.of("values", List.of(ImmutablePair.of("value", Map.of("string", "Label1"))))))));
Document key1ExpectedDocument = Utils.createDocument(ImmutablePair.of("id", "testKey1"), ImmutablePair.of("attributes", Map.of("name", "testKey1", "labels", ImmutablePair.of("valueList", ImmutablePair.of("values", List.of(ImmutablePair.of("value", Map.of("string", "Label1")), ImmutablePair.of("value", Map.of("string", "Label2")), ImmutablePair.of("value", Map.of("string", "Label3"))))))));
collection.upsert(key1, key1InsertedDocument);
Key key2 = new SingleValueKey("default", "testKey2");
Document key2InsertedDocument = Utils.createDocument(ImmutablePair.of("id", "testKey2"), ImmutablePair.of("attributes", Map.of("name", "testKey2", "labels", ImmutablePair.of("valueList", ImmutablePair.of("values", List.of(ImmutablePair.of("value", Map.of("string", "Label2"))))))));
Document key2ExpectedDocument = Utils.createDocument(ImmutablePair.of("id", "testKey2"), ImmutablePair.of("attributes", Map.of("name", "testKey2", "labels", ImmutablePair.of("valueList", ImmutablePair.of("values", List.of(ImmutablePair.of("value", Map.of("string", "Label2")), ImmutablePair.of("value", Map.of("string", "Label3"))))))));
collection.upsert(key2, key2InsertedDocument);
Key key3 = new SingleValueKey("default", "testKey3");
Document key3InsertedDocument = Utils.createDocument(ImmutablePair.of("id", "testKey3"), ImmutablePair.of("attributes", Map.of("name", "testKey3")));
Document key3ExpectedDocument = Utils.createDocument(ImmutablePair.of("id", "testKey3"), ImmutablePair.of("attributes", Map.of("name", "testKey3", "labels", ImmutablePair.of("valueList", ImmutablePair.of("values", List.of(ImmutablePair.of("value", Map.of("string", "Label2")), ImmutablePair.of("value", Map.of("string", "Label3"))))))));
collection.upsert(key3, key3InsertedDocument);
Key key4 = new SingleValueKey("default", "testKey4");
Document key4InsertedDocument = Utils.createDocument(ImmutablePair.of("id", "testKey4"), ImmutablePair.of("attributes", Map.of("name", "testKey4", "labels", ImmutablePair.of("valueList", ImmutablePair.of("values", List.of(ImmutablePair.of("value", Map.of("string", "Label1")), ImmutablePair.of("value", Map.of("string", "Label2")), ImmutablePair.of("value", Map.of("string", "Label3"))))))));
Document key4ExpectedDocument = Utils.createDocument(ImmutablePair.of("id", "testKey4"), ImmutablePair.of("attributes", Map.of("name", "testKey4", "labels", ImmutablePair.of("valueList", ImmutablePair.of("values", List.of(ImmutablePair.of("value", Map.of("string", "Label1")), ImmutablePair.of("value", Map.of("string", "Label2")), ImmutablePair.of("value", Map.of("string", "Label3"))))))));
collection.upsert(key4, key4InsertedDocument);
Document label2Document = Utils.createDocument(ImmutablePair.of("value", Map.of("string", "Label2")));
Document label3Document = Utils.createDocument(ImmutablePair.of("value", Map.of("string", "Label3")));
List<Document> subDocuments = List.of(label2Document, label3Document);
BulkArrayValueUpdateRequest bulkArrayValueUpdateRequest = new BulkArrayValueUpdateRequest(Set.of(key1, key2, key3, key4), "attributes.labels.valueList.values", ADD, subDocuments);
BulkUpdateResult bulkUpdateResult = collection.bulkOperationOnArrayValue(bulkArrayValueUpdateRequest);
assertEquals(4, bulkUpdateResult.getUpdatedCount());
// get all documents
Query query = new Query();
Iterator<Document> results = collection.search(query);
List<Document> documents = new ArrayList<>();
while (results.hasNext()) {
documents.add(results.next());
}
assertEquals(4, documents.size());
Map<String, JsonNode> actualDocs = convertToMap(documents, "id");
Map<String, JsonNode> expectedDocs = convertToMap(List.of(key1ExpectedDocument, key2ExpectedDocument, key3ExpectedDocument, key4ExpectedDocument), "id");
// Verify that the documents returned are as expected
for (Map.Entry<String, JsonNode> entry : actualDocs.entrySet()) {
String key = entry.getKey();
JsonNode attributesJsonNode = entry.getValue().get("attributes");
JsonNode expectedAttributesJsonNode = expectedDocs.get(key).get("attributes");
assertEquals(expectedAttributesJsonNode, attributesJsonNode);
}
}
use of org.hypertrace.core.documentstore.BulkArrayValueUpdateRequest in project document-store by hypertrace.
the class MongoDocStoreTest method test_bulkOperationOnArrayValue_removeOperation.
@Test
public void test_bulkOperationOnArrayValue_removeOperation() throws Exception {
datastore.createCollection(COLLECTION_NAME, null);
Collection collection = datastore.getCollection(COLLECTION_NAME);
Key key1 = new SingleValueKey("default", "testKey1");
Document key1InsertedDocument = Utils.createDocument(ImmutablePair.of("id", "testKey1"), ImmutablePair.of("attributes", Map.of("name", "testKey1", "labels", ImmutablePair.of("valueList", ImmutablePair.of("values", List.of(ImmutablePair.of("value", Map.of("string", "Label1"))))))));
Document key1ExpectedDocument = Utils.createDocument(ImmutablePair.of("id", "testKey1"), ImmutablePair.of("attributes", Map.of("name", "testKey1", "labels", ImmutablePair.of("valueList", ImmutablePair.of("values", List.of(ImmutablePair.of("value", Map.of("string", "Label1"))))))));
collection.upsert(key1, key1InsertedDocument);
Key key2 = new SingleValueKey("default", "testKey2");
Document key2InsertedDocument = Utils.createDocument(ImmutablePair.of("id", "testKey2"), ImmutablePair.of("attributes", Map.of("name", "testKey2", "labels", ImmutablePair.of("valueList", ImmutablePair.of("values", List.of(ImmutablePair.of("value", Map.of("string", "Label1")), ImmutablePair.of("value", Map.of("string", "Label2"))))))));
Document key2ExpectedDocument = Utils.createDocument(ImmutablePair.of("id", "testKey2"), ImmutablePair.of("attributes", Map.of("name", "testKey2", "labels", ImmutablePair.of("valueList", ImmutablePair.of("values", List.of(ImmutablePair.of("value", Map.of("string", "Label1"))))))));
collection.upsert(key2, key2InsertedDocument);
Key key3 = new SingleValueKey("default", "testKey3");
Document key3InsertedDocument = Utils.createDocument(ImmutablePair.of("id", "testKey3"), ImmutablePair.of("attributes", Map.of("name", "testKey3")));
Document key3ExpectedDocument = key3InsertedDocument;
collection.upsert(key3, key3InsertedDocument);
Key key4 = new SingleValueKey("default", "testKey4");
Document key4InsertedDocument = Utils.createDocument(ImmutablePair.of("id", "testKey4"), ImmutablePair.of("attributes", Map.of("name", "testKey4", "labels", ImmutablePair.of("valueList", ImmutablePair.of("values", List.of(ImmutablePair.of("value", Map.of("string", "Label1")), ImmutablePair.of("value", Map.of("string", "Label2")), ImmutablePair.of("value", Map.of("string", "Label3"))))))));
Document key4ExpectedDocument = Utils.createDocument(ImmutablePair.of("id", "testKey4"), ImmutablePair.of("attributes", Map.of("name", "testKey4", "labels", ImmutablePair.of("valueList", ImmutablePair.of("values", List.of(ImmutablePair.of("value", Map.of("string", "Label1"))))))));
collection.upsert(key4, key4InsertedDocument);
Document label2Document = Utils.createDocument(ImmutablePair.of("value", Map.of("string", "Label2")));
Document label3Document = Utils.createDocument(ImmutablePair.of("value", Map.of("string", "Label3")));
List<Document> subDocuments = List.of(label2Document, label3Document);
BulkArrayValueUpdateRequest bulkArrayValueUpdateRequest = new BulkArrayValueUpdateRequest(Set.of(key1, key2, key3, key4), "attributes.labels.valueList.values", REMOVE, subDocuments);
BulkUpdateResult bulkUpdateResult = collection.bulkOperationOnArrayValue(bulkArrayValueUpdateRequest);
assertEquals(4, bulkUpdateResult.getUpdatedCount());
// get all documents
Query query = new Query();
Iterator<Document> results = collection.search(query);
List<Document> documents = new ArrayList<>();
while (results.hasNext()) {
documents.add(results.next());
}
assertEquals(4, documents.size());
Map<String, JsonNode> actualDocs = convertToMap(documents, "id");
Map<String, JsonNode> expectedDocs = convertToMap(List.of(key1ExpectedDocument, key2ExpectedDocument, key3ExpectedDocument, key4ExpectedDocument), "id");
// Verify that the documents returned are as expected
for (Map.Entry<String, JsonNode> entry : actualDocs.entrySet()) {
String key = entry.getKey();
JsonNode attributesJsonNode = entry.getValue().get("attributes");
JsonNode expectedAttributesJsonNode = expectedDocs.get(key).get("attributes");
assertEquals(expectedAttributesJsonNode, attributesJsonNode);
}
}
use of org.hypertrace.core.documentstore.BulkArrayValueUpdateRequest in project entity-service by hypertrace.
the class EntityQueryServiceImplTest method testBulkUpdateEntityArrayAttribute.
@Test
void testBulkUpdateEntityArrayAttribute() throws Exception {
List<String> entityIds = IntStream.rangeClosed(1, 5).mapToObj(i -> UUID.randomUUID().toString()).collect(Collectors.toList());
BulkEntityArrayAttributeUpdateRequest request = BulkEntityArrayAttributeUpdateRequest.newBuilder().addAllEntityIds(entityIds).setAttribute(ColumnIdentifier.newBuilder().setColumnName(ATTRIBUTE_ID3).build()).setEntityType(TEST_ENTITY_TYPE).setOperation(BulkEntityArrayAttributeUpdateRequest.Operation.OPERATION_ADD).addAllValues(List.of(LiteralConstant.newBuilder().setValue(Value.newBuilder().setString("Label1")).build(), LiteralConstant.newBuilder().setValue(Value.newBuilder().setString("Label2")).build())).build();
when(mockAttributeMapping.getDocStorePathByAttributeId(requestContext, ATTRIBUTE_ID3)).thenReturn(Optional.of(EDS_COLUMN_NAME3));
StreamObserver<BulkEntityArrayAttributeUpdateResponse> mockResponseObserver = mock(StreamObserver.class);
Context.current().withValue(RequestContext.CURRENT, mockRequestContextWithTenantId()).call(() -> {
EntityQueryServiceImpl eqs = new EntityQueryServiceImpl(entitiesCollection, mockAttributeMapping, 1, false);
eqs.bulkUpdateEntityArrayAttribute(request, mockResponseObserver);
return null;
});
ArgumentCaptor<BulkArrayValueUpdateRequest> argumentCaptor = ArgumentCaptor.forClass(BulkArrayValueUpdateRequest.class);
verify(entitiesCollection, times(1)).bulkOperationOnArrayValue(argumentCaptor.capture());
BulkArrayValueUpdateRequest bulkArrayValueUpdateRequest = argumentCaptor.getValue();
assertEquals(entityIds.stream().map(entityId -> new SingleValueKey("tenant1", entityId)).collect(Collectors.toCollection(LinkedHashSet::new)), bulkArrayValueUpdateRequest.getKeys());
assertEquals(BulkArrayValueUpdateRequest.Operation.ADD, bulkArrayValueUpdateRequest.getOperation());
assertEquals(EDS_COLUMN_NAME3 + ".valueList.values", bulkArrayValueUpdateRequest.getSubDocPath());
List<Document> subDocuments = bulkArrayValueUpdateRequest.getSubDocuments();
assertEquals(2, subDocuments.size());
assertEquals("{\"value\":{\"string\":\"Label1\"}}", subDocuments.get(0).toString());
assertEquals("{\"value\":{\"string\":\"Label2\"}}", subDocuments.get(1).toString());
}
use of org.hypertrace.core.documentstore.BulkArrayValueUpdateRequest in project document-store by hypertrace.
the class MongoDocStoreTest method test_bulkOperationOnArrayValue_setOperation.
@Test
public void test_bulkOperationOnArrayValue_setOperation() throws Exception {
datastore.createCollection(COLLECTION_NAME, null);
Collection collection = datastore.getCollection(COLLECTION_NAME);
Key key1 = new SingleValueKey("default", "testKey1");
Document key1InsertedDocument = Utils.createDocument(ImmutablePair.of("id", "testKey1"), ImmutablePair.of("attributes", Map.of("name", "testKey1", "labels", ImmutablePair.of("valueList", ImmutablePair.of("values", List.of(ImmutablePair.of("value", Map.of("string", "Label1"))))))));
Document key1ExpectedDocument = Utils.createDocument(ImmutablePair.of("id", "testKey1"), ImmutablePair.of("attributes", Map.of("name", "testKey1", "labels", ImmutablePair.of("valueList", ImmutablePair.of("values", List.of(ImmutablePair.of("value", Map.of("string", "Label2")), ImmutablePair.of("value", Map.of("string", "Label3"))))))));
collection.upsert(key1, key1InsertedDocument);
Key key2 = new SingleValueKey("default", "testKey2");
Document key2InsertedDocument = Utils.createDocument(ImmutablePair.of("id", "testKey2"), ImmutablePair.of("attributes", Map.of("name", "testKey2", "labels", ImmutablePair.of("valueList", ImmutablePair.of("values", List.of(ImmutablePair.of("value", Map.of("string", "Label2"))))))));
Document key2ExpectedDocument = Utils.createDocument(ImmutablePair.of("id", "testKey2"), ImmutablePair.of("attributes", Map.of("name", "testKey2", "labels", ImmutablePair.of("valueList", ImmutablePair.of("values", List.of(ImmutablePair.of("value", Map.of("string", "Label2")), ImmutablePair.of("value", Map.of("string", "Label3"))))))));
collection.upsert(key2, key2InsertedDocument);
Key key3 = new SingleValueKey("default", "testKey3");
Document key3InsertedDocument = Utils.createDocument(ImmutablePair.of("id", "testKey3"), ImmutablePair.of("attributes", Map.of("name", "testKey3")));
Document key3ExpectedDocument = Utils.createDocument(ImmutablePair.of("id", "testKey3"), ImmutablePair.of("attributes", Map.of("name", "testKey3", "labels", ImmutablePair.of("valueList", ImmutablePair.of("values", List.of(ImmutablePair.of("value", Map.of("string", "Label2")), ImmutablePair.of("value", Map.of("string", "Label3"))))))));
collection.upsert(key3, key3InsertedDocument);
Key key4 = new SingleValueKey("default", "testKey4");
Document key4InsertedDocument = Utils.createDocument(ImmutablePair.of("id", "testKey4"), ImmutablePair.of("attributes", Map.of("name", "testKey4", "labels", ImmutablePair.of("valueList", ImmutablePair.of("values", List.of(ImmutablePair.of("value", Map.of("string", "Label1")), ImmutablePair.of("value", Map.of("string", "Label2")), ImmutablePair.of("value", Map.of("string", "Label3"))))))));
Document key4ExpectedDocument = Utils.createDocument(ImmutablePair.of("id", "testKey4"), ImmutablePair.of("attributes", Map.of("name", "testKey4", "labels", ImmutablePair.of("valueList", ImmutablePair.of("values", List.of(ImmutablePair.of("value", Map.of("string", "Label2")), ImmutablePair.of("value", Map.of("string", "Label3"))))))));
collection.upsert(key4, key4InsertedDocument);
Document label2Document = Utils.createDocument(ImmutablePair.of("value", Map.of("string", "Label2")));
Document label3Document = Utils.createDocument(ImmutablePair.of("value", Map.of("string", "Label3")));
List<Document> subDocuments = List.of(label2Document, label3Document);
BulkArrayValueUpdateRequest bulkArrayValueUpdateRequest = new BulkArrayValueUpdateRequest(Set.of(key1, key2, key3, key4), "attributes.labels.valueList.values", SET, subDocuments);
BulkUpdateResult bulkUpdateResult = collection.bulkOperationOnArrayValue(bulkArrayValueUpdateRequest);
assertEquals(4, bulkUpdateResult.getUpdatedCount());
// get all documents
Query query = new Query();
Iterator<Document> results = collection.search(query);
List<Document> documents = new ArrayList<>();
while (results.hasNext()) {
documents.add(results.next());
}
assertEquals(4, documents.size());
Map<String, JsonNode> actualDocs = convertToMap(documents, "id");
Map<String, JsonNode> expectedDocs = convertToMap(List.of(key1ExpectedDocument, key2ExpectedDocument, key3ExpectedDocument, key4ExpectedDocument), "id");
// Verify that the documents returned are as expected
for (Map.Entry<String, JsonNode> entry : actualDocs.entrySet()) {
String key = entry.getKey();
JsonNode attributesJsonNode = entry.getValue().get("attributes");
JsonNode expectedAttributesJsonNode = expectedDocs.get(key).get("attributes");
assertEquals(expectedAttributesJsonNode, attributesJsonNode);
}
}
use of org.hypertrace.core.documentstore.BulkArrayValueUpdateRequest in project entity-service by hypertrace.
the class EntityQueryServiceImpl method bulkUpdateEntityArrayAttribute.
@Override
public void bulkUpdateEntityArrayAttribute(BulkEntityArrayAttributeUpdateRequest request, StreamObserver<BulkEntityArrayAttributeUpdateResponse> responseObserver) {
RequestContext requestContext = RequestContext.CURRENT.get();
String tenantId = requestContext.getTenantId().orElse(null);
if (isNull(tenantId)) {
responseObserver.onError(new ServiceException("Tenant id is missing in the request."));
return;
}
try {
Set<Key> keys = request.getEntityIdsList().stream().map(entityId -> new SingleValueKey(tenantId, entityId)).collect(Collectors.toCollection(LinkedHashSet::new));
String attributeId = request.getAttribute().getColumnName();
String subDocPath = entityAttributeMapping.getDocStorePathByAttributeId(requestContext, attributeId).orElseThrow(() -> new IllegalArgumentException("Unknown attribute " + attributeId));
List<Document> subDocuments = request.getValuesList().stream().map(this::convertToJsonDocument).collect(toUnmodifiableList());
BulkArrayValueUpdateRequest bulkArrayValueUpdateRequest = new BulkArrayValueUpdateRequest(keys, subDocPath + ARRAY_VALUE_PATH_SUFFIX, getMatchingOperation(request.getOperation()), subDocuments);
entitiesCollection.bulkOperationOnArrayValue(bulkArrayValueUpdateRequest);
responseObserver.onNext(BulkEntityArrayAttributeUpdateResponse.newBuilder().build());
responseObserver.onCompleted();
} catch (Exception e) {
responseObserver.onError(e);
}
}
Aggregations