summaryrefslogtreecommitdiffstats
path: root/clustercontroller-reindexer/src/main/java/ai/vespa/reindexing/ReindexingCurator.java
diff options
context:
space:
mode:
Diffstat (limited to 'clustercontroller-reindexer/src/main/java/ai/vespa/reindexing/ReindexingCurator.java')
-rw-r--r--clustercontroller-reindexer/src/main/java/ai/vespa/reindexing/ReindexingCurator.java27
1 files changed, 17 insertions, 10 deletions
diff --git a/clustercontroller-reindexer/src/main/java/ai/vespa/reindexing/ReindexingCurator.java b/clustercontroller-reindexer/src/main/java/ai/vespa/reindexing/ReindexingCurator.java
index c735a27387a..d46ab812aca 100644
--- a/clustercontroller-reindexer/src/main/java/ai/vespa/reindexing/ReindexingCurator.java
+++ b/clustercontroller-reindexer/src/main/java/ai/vespa/reindexing/ReindexingCurator.java
@@ -46,16 +46,23 @@ public class ReindexingCurator {
}
/** If no reindexing data exists (has been wiped), assume current ready documents are already done. */
- public Reindexing readReindexingOrDefault(String cluster, Map<DocumentType, Instant> ready, Instant now) {
- return curator.getData(statusPath(cluster)).map(serializer::deserialize)
- .orElseGet(() -> {
- Reindexing reindexing = Reindexing.empty();
- for (DocumentType type : ready.keySet())
- if (ready.get(type).isBefore(now))
- reindexing = reindexing.with(type, Status.ready(now).running().successful(now));
-
- return reindexing;
- });
+ public void initializeIfEmpty(String cluster, Map<DocumentType, Instant> ready, Instant now) {
+ if ( ! curator.exists(statusPath(cluster))) {
+ try (Lock lock = lockReindexing(cluster)) {
+ if (curator.exists(statusPath(cluster)))
+ return; // Some other node already did this.
+
+ Reindexing reindexing = Reindexing.empty();
+ for (DocumentType type : ready.keySet())
+ if (ready.get(type).isBefore(now))
+ reindexing = reindexing.with(type, Status.ready(now).running().successful(now));
+
+ writeReindexing(reindexing, cluster);
+ }
+ catch (ReindexingLockException ignored) {
+ // Some other node took ownership and is doing this.
+ }
+ }
}
public Reindexing readReindexing(String cluster) {