diff --git a/kayenta-core/src/main/java/com/netflix/kayenta/canary/CanaryConfig.java b/kayenta-core/src/main/java/com/netflix/kayenta/canary/CanaryConfig.java index 317f18064..26dbfbd83 100644 --- a/kayenta-core/src/main/java/com/netflix/kayenta/canary/CanaryConfig.java +++ b/kayenta-core/src/main/java/com/netflix/kayenta/canary/CanaryConfig.java @@ -39,6 +39,8 @@ public class CanaryConfig { @NotNull @Getter @Setter private String name; + @Getter private String id; + @NotNull @Getter private String description; @NotNull @Getter private String configVersion; diff --git a/kayenta-web/src/main/java/com/netflix/kayenta/controllers/CanaryConfigController.java b/kayenta-web/src/main/java/com/netflix/kayenta/controllers/CanaryConfigController.java index 28433eaaf..536a5093f 100644 --- a/kayenta-web/src/main/java/com/netflix/kayenta/controllers/CanaryConfigController.java +++ b/kayenta-web/src/main/java/com/netflix/kayenta/controllers/CanaryConfigController.java @@ -111,14 +111,20 @@ public CanaryConfigUpdateResponse storeCanaryConfig( canaryConfig.setUpdatedTimestampIso( Instant.ofEpochMilli(canaryConfig.getUpdatedTimestamp()).toString()); - String canaryConfigId = UUID.randomUUID() + ""; + if (StringUtils.isEmpty(canaryConfig.getId())) { + // Ensure that the canary config id is stored within the canary config itself. + canaryConfig = canaryConfig.toBuilder().id(UUID.randomUUID() + "").build(); + } + + String canaryConfigId = canaryConfig.getId(); - // TODO(duftler): Serialize the canary config within a canary run? validateNameAndApplicationAttributes(canaryConfig); try { configurationService.loadObject( resolvedConfigurationAccountName, ObjectType.CANARY_CONFIG, canaryConfigId); + + throw new IllegalArgumentException("Canary config '" + canaryConfigId + "' already exists."); } catch (NotFoundException e) { configurationService.storeObject( resolvedConfigurationAccountName, @@ -130,8 +136,6 @@ public CanaryConfigUpdateResponse storeCanaryConfig( return CanaryConfigUpdateResponse.builder().canaryConfigId(canaryConfigId).build(); } - - throw new IllegalArgumentException("Canary config '" + canaryConfigId + "' already exists."); } @ApiOperation(value = "Update a canary config") @@ -170,6 +174,11 @@ public CanaryConfigUpdateResponse updateCanaryConfig( throw new IllegalArgumentException("Canary config '" + canaryConfigId + "' does not exist."); } + // Ensure that the canary config id is stored within the canary config itself. + if (StringUtils.isEmpty(canaryConfig.getId())) { + canaryConfig = canaryConfig.toBuilder().id(canaryConfigId).build(); + } + configurationService.storeObject( resolvedConfigurationAccountName, ObjectType.CANARY_CONFIG,