From 2ac48e6489e770afda038d657fc77f5da5d14ee3 Mon Sep 17 00:00:00 2001 From: saxenakshitiz Date: Fri, 17 Dec 2021 15:21:38 +0530 Subject: [PATCH 1/2] Fix label update scenario where description, color, enabled fields are updated --- .../service/LabelsConfigServiceImpl.java | 8 +++- .../service/LabelsConfigServiceImplTest.java | 38 ++++++++++++++++++- 2 files changed, 43 insertions(+), 3 deletions(-) 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 c24f49ea..c6b98148 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 @@ -16,6 +16,7 @@ import java.util.HashMap; 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; @@ -246,7 +247,7 @@ public void updateLabel( responseObserver.onError(new StatusRuntimeException(Status.INVALID_ARGUMENT)); return; } - if (isDuplicateKey(requestContext, updateLabelData.getKey())) { + if (isDuplicateKey(requestContext, request.getId(), updateLabelData.getKey())) { responseObserver.onError(new StatusRuntimeException(Status.ALREADY_EXISTS)); return; } @@ -301,6 +302,11 @@ public void deleteLabel( } } + private boolean isDuplicateKey(RequestContext requestContext, String id, String key) { + return Optional.ofNullable(getLabelsMap(requestContext).get(key)).stream() + .anyMatch(label -> !label.getId().equals(id)); + } + private boolean isDuplicateKey(RequestContext requestContext, String key) { return getLabelsMap(requestContext).containsKey(key); } diff --git a/labels-config-service-impl/src/test/java/org/hypertrace/label/config/service/LabelsConfigServiceImplTest.java b/labels-config-service-impl/src/test/java/org/hypertrace/label/config/service/LabelsConfigServiceImplTest.java index 85f1ab6f..cca2ae14 100644 --- a/labels-config-service-impl/src/test/java/org/hypertrace/label/config/service/LabelsConfigServiceImplTest.java +++ b/labels-config-service-impl/src/test/java/org/hypertrace/label/config/service/LabelsConfigServiceImplTest.java @@ -253,7 +253,8 @@ void test_updateLabel() { .build()); }); assertEquals(Status.ALREADY_EXISTS, Status.fromThrowable(exception1)); - // Updating the labels by appending the keys of labels with a "new" + + // Updating the labels by adding description List