diff options
author | bjormel <bjormel@yahooinc.com> | 2023-10-26 13:59:28 +0000 |
---|---|---|
committer | bjormel <bjormel@yahooinc.com> | 2023-10-26 13:59:28 +0000 |
commit | 567be9a1f6353cec41c23bfd1fcd46b4b2a4d2d7 (patch) | |
tree | 4664a743e166a5e11aee7b9acd70ad8ee2617612 /zkfacade/src/main/java/com/yahoo/vespa/curator/SingletonManager.java | |
parent | e9058b555d4dfea2f6c872d9a677e8678b569569 (diff) | |
parent | bce3b8e926bf9da880172acbe1ba4b12d5e026d6 (diff) |
Merge branch 'master' into bjormel/aws-main-controllerbjormel/aws-main-controller
Diffstat (limited to 'zkfacade/src/main/java/com/yahoo/vespa/curator/SingletonManager.java')
-rw-r--r-- | zkfacade/src/main/java/com/yahoo/vespa/curator/SingletonManager.java | 16 |
1 files changed, 11 insertions, 5 deletions
diff --git a/zkfacade/src/main/java/com/yahoo/vespa/curator/SingletonManager.java b/zkfacade/src/main/java/com/yahoo/vespa/curator/SingletonManager.java index e37d561ca1b..35fc9f06eec 100644 --- a/zkfacade/src/main/java/com/yahoo/vespa/curator/SingletonManager.java +++ b/zkfacade/src/main/java/com/yahoo/vespa/curator/SingletonManager.java @@ -1,5 +1,7 @@ +// Copyright Vespa.ai. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. package com.yahoo.vespa.curator; +import ai.vespa.validation.Validation; import com.yahoo.concurrent.UncheckedTimeoutException; import com.yahoo.jdisc.Metric; import com.yahoo.path.Path; @@ -23,6 +25,7 @@ import java.util.concurrent.TimeUnit; import java.util.concurrent.atomic.AtomicBoolean; import java.util.concurrent.atomic.AtomicReference; import java.util.logging.Logger; +import java.util.regex.Pattern; import static java.util.logging.Level.FINE; import static java.util.logging.Level.INFO; @@ -36,6 +39,8 @@ import static java.util.logging.Level.WARNING; class SingletonManager { private static final Logger logger = Logger.getLogger(SingletonManager.class.getName()); + private static final String partPattern = "[a-zA-Z0-9$_]([a-zA-Z0-9$_-]+){0,63}"; + private static final Pattern idPattern = Pattern.compile(partPattern + "(\\." + partPattern + ")*"); private final Curator curator; private final Clock clock; @@ -53,9 +58,8 @@ class SingletonManager { } synchronized CompletableFuture<?> register(String singletonId, SingletonWorker singleton) { - if (singletonId.isEmpty() || singletonId.contains("/") || singletonId.contains("..")) { - throw new IllegalArgumentException("singleton ID must be non-empty, and may not contain '/' or '..', but got " + singletonId); - } + Validation.requireMatch(singletonId, "Singleton ID", idPattern); + Validation.requireLength(singletonId, "Singleton ID", 1, 255); String old = registrations.putIfAbsent(singleton, singletonId); if (old != null) throw new IllegalArgumentException(singleton + " already registered with ID " + old); count.merge(singletonId, 1, Integer::sum); @@ -425,7 +429,8 @@ class SingletonManager { finally { long durationMillis = Duration.between(start, clock.instant()).toMillis(); metric.set(ACTIVATION_MILLIS, durationMillis, context); - logger.log(INFO, "Activation completed in %.3f seconds".formatted(durationMillis * 1e-3)); + logger.log(INFO, "Activation completed " + (failed ? "un" : "") + + "successfully in %.3f seconds".formatted(durationMillis * 1e-3)); if (failed) metric.add(ACTIVATION_FAILURES, 1, context); else isActive = true; ping(); @@ -447,7 +452,8 @@ class SingletonManager { finally { long durationMillis = Duration.between(start, clock.instant()).toMillis(); metric.set(DEACTIVATION_MILLIS, durationMillis, context); - logger.log(INFO, "Deactivation completed in %.3f seconds".formatted(durationMillis * 1e-3)); + logger.log(INFO, "Deactivation completed " + (failed ? "un" : "") + + "successfully in %.3f seconds".formatted(durationMillis * 1e-3)); if (failed) metric.add(DEACTIVATION_FAILURES, 1, context); isActive = false; ping(); |