This is an automated email from the ASF dual-hosted git repository.

reschke pushed a commit to branch OAK-10562
in repository https://gitbox.apache.org/repos/asf/jackrabbit-oak.git

commit 81fadb4e1b7657d829bf1ffb06b0e1e265b9bbc7
Author: Julian Reschke <resc...@apache.org>
AuthorDate: Thu Nov 23 18:17:35 2023 +0100

    OAK-10562: make setClock() picky
---
 .../jackrabbit/oak/plugins/document/ClusterNodeInfo.java  | 12 ++++++++++++
 .../apache/jackrabbit/oak/plugins/document/Revision.java  | 15 ++++++++++++++-
 2 files changed, 26 insertions(+), 1 deletion(-)

diff --git 
a/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/ClusterNodeInfo.java
 
b/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/ClusterNodeInfo.java
index d53e1822f9..8b503ba133 100644
--- 
a/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/ClusterNodeInfo.java
+++ 
b/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/ClusterNodeInfo.java
@@ -27,6 +27,7 @@ import java.lang.management.ManagementFactory;
 import java.net.NetworkInterface;
 import java.util.AbstractMap;
 import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.Collections;
 import java.util.Enumeration;
 import java.util.HashMap;
@@ -1163,6 +1164,9 @@ public class ClusterNodeInfo {
                 "invisible: " + invisible;
     }
 
+    /** keep track of test classes that have set a custom clock */
+    static Exception lastClockSetter;
+
     /**
      * Specify a custom clock to be used for determining current time.
      *
@@ -1170,6 +1174,13 @@ public class ClusterNodeInfo {
      */
     static void setClock(Clock c) {
         checkNotNull(c);
+
+        if (lastClockSetter != null) {
+            throw new RuntimeException(
+                    "custom clock (" + clock + ") already in use, set by: " + 
Arrays.asList(lastClockSetter.getStackTrace()));
+        }
+        lastClockSetter = new Exception("call stack");
+
         clock = c;
     }
 
@@ -1178,6 +1189,7 @@ public class ClusterNodeInfo {
      */
     static void resetClockToDefault() {
         clock = Clock.SIMPLE;
+        lastClockSetter = null;
     }
 
     private static long getProcessId() {
diff --git 
a/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/Revision.java
 
b/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/Revision.java
index 13431cd2bf..dc76c90bcd 100644
--- 
a/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/Revision.java
+++ 
b/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/Revision.java
@@ -22,6 +22,8 @@ import org.apache.jackrabbit.oak.stats.Clock;
 
 import static 
org.apache.jackrabbit.guava.common.base.Preconditions.checkNotNull;
 
+import java.util.Arrays;
+
 /**
  * A revision.
  */
@@ -61,6 +63,9 @@ public final class Revision implements CacheValue {
      */
     private final boolean branch;
 
+    /** keep track of test classes that have set a custom clock */
+    static Exception lastClockSetter;
+
     /** Only set for testing */
     private static Clock clock;
 
@@ -74,6 +79,13 @@ public final class Revision implements CacheValue {
      */
     static void setClock(Clock c) {
         checkNotNull(c);
+
+        if (lastClockSetter != null) {
+            throw new RuntimeException(
+                    "custom clock (" + clock + ") already in use, set by: " + 
Arrays.asList(lastClockSetter.getStackTrace()));
+        }
+        lastClockSetter = new Exception("call stack");
+
         clock = c;
         lastTimestamp = clock.getTime();
         lastRevisionTimestamp = clock.getTime();
@@ -86,7 +98,8 @@ public final class Revision implements CacheValue {
      * </b>
      */
     static void resetClockToDefault() {
-        setClock(Clock.SIMPLE);
+        clock = Clock.SIMPLE;
+        lastClockSetter = null;
     }
 
     public Revision(long timestamp, int counter, int clusterId) {

Reply via email to