From ea779e8b2f217a60c14303ceef88b8a5f4924f93 Mon Sep 17 00:00:00 2001 From: saxenakshitiz Date: Tue, 23 Nov 2021 00:23:01 +0530 Subject: [PATCH 1/3] Changes to support bulk create of labels --- .../service/v1/labels_config_service.proto | 16 ++++++ .../service/LabelsConfigServiceImpl.java | 56 +++++++++++++++++++ .../service/LabelsConfigServiceImplTest.java | 51 ++++++++++++++++- 3 files changed, 122 insertions(+), 1 deletion(-) diff --git a/labels-config-service-api/src/main/proto/org/hypertrace/label/config/service/v1/labels_config_service.proto b/labels-config-service-api/src/main/proto/org/hypertrace/label/config/service/v1/labels_config_service.proto index be57bc20..2154575c 100644 --- a/labels-config-service-api/src/main/proto/org/hypertrace/label/config/service/v1/labels_config_service.proto +++ b/labels-config-service-api/src/main/proto/org/hypertrace/label/config/service/v1/labels_config_service.proto @@ -11,6 +11,9 @@ service LabelsConfigService { // create label rpc CreateLabel(CreateLabelRequest) returns (CreateLabelResponse) {} + // create labels + rpc BulkCreateLabels(BulkCreateLabelsRequest) returns (BulkCreateLabelsResponse) {} + // get label by id rpc GetLabel(GetLabelRequest) returns (GetLabelResponse) {} @@ -34,6 +37,19 @@ message CreateLabelResponse { Label label = 1; } +message BulkCreateLabelsRequest { + repeated LabelRequest requests = 1; + + message LabelRequest { + LabelData data = 1; + optional string created_by_application_rule_id = 2; + } +} + +message BulkCreateLabelsResponse { + repeated Label labels = 1; +} + message GetLabelRequest { string id = 1; } diff --git a/labels-config-service-impl/src/main/java/org/hypertrace/label/config/service/LabelsConfigServiceImpl.java b/labels-config-service-impl/src/main/java/org/hypertrace/label/config/service/LabelsConfigServiceImpl.java index a89e689f..bd9cbc35 100644 --- a/labels-config-service-impl/src/main/java/org/hypertrace/label/config/service/LabelsConfigServiceImpl.java +++ b/labels-config-service-impl/src/main/java/org/hypertrace/label/config/service/LabelsConfigServiceImpl.java @@ -13,6 +13,7 @@ import java.util.Collections; import java.util.List; import java.util.Map; +import java.util.Optional; import java.util.UUID; import java.util.concurrent.TimeUnit; import java.util.concurrent.locks.Lock; @@ -25,6 +26,8 @@ import org.hypertrace.config.service.v1.ConfigServiceGrpc; import org.hypertrace.core.grpcutils.client.RequestContextClientCallCredsProviderFactory; import org.hypertrace.core.grpcutils.context.RequestContext; +import org.hypertrace.label.config.service.v1.BulkCreateLabelsRequest; +import org.hypertrace.label.config.service.v1.BulkCreateLabelsResponse; import org.hypertrace.label.config.service.v1.CreateLabelRequest; import org.hypertrace.label.config.service.v1.CreateLabelResponse; import org.hypertrace.label.config.service.v1.DeleteLabelRequest; @@ -136,6 +139,59 @@ public void createLabel( } } + @Override + public void bulkCreateLabels( + BulkCreateLabelsRequest bulkCreateLabelsRequest, + StreamObserver responseObserver) { + try { + RequestContext requestContext = RequestContext.CURRENT.get(); + Lock labelsLock = this.stripedLabelsLock.get(requestContext.getTenantId()); + if (labelsLock.tryLock(WAIT_TIME.getSeconds(), TimeUnit.SECONDS)) { + try { + List