aboutsummaryrefslogtreecommitdiffstats
path: root/container-search/src/main/java/com/yahoo/search/query/SessionId.java
diff options
context:
space:
mode:
Diffstat (limited to 'container-search/src/main/java/com/yahoo/search/query/SessionId.java')
-rw-r--r--container-search/src/main/java/com/yahoo/search/query/SessionId.java36
1 files changed, 36 insertions, 0 deletions
diff --git a/container-search/src/main/java/com/yahoo/search/query/SessionId.java b/container-search/src/main/java/com/yahoo/search/query/SessionId.java
new file mode 100644
index 00000000000..7f8ca6385e1
--- /dev/null
+++ b/container-search/src/main/java/com/yahoo/search/query/SessionId.java
@@ -0,0 +1,36 @@
+// Copyright 2016 Yahoo Inc. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
+package com.yahoo.search.query;
+
+import com.yahoo.container.Server;
+import com.yahoo.text.Utf8String;
+
+import java.util.concurrent.atomic.AtomicLong;
+
+/**
+ * A query id which is unique across this cluster - consisting of
+ * container runtime id + timestamp + serial.
+ *
+ * @author <a href="mailto:bratseth@yahoo-inc.com">Jon Bratseth</a>
+ */
+public class SessionId {
+
+ private static final String serverId = Server.get().getServerDiscriminator();
+ private static final AtomicLong sequenceCounter = new AtomicLong();
+
+ private final Utf8String id;
+
+ private SessionId(String serverId, long timestamp, long sequence) {
+ this.id = new Utf8String(serverId + "." + timestamp + "." + sequence);
+ }
+
+ public Utf8String asUtf8String() { return id; }
+
+ /**
+ * Creates a session id which is unique across the cluster this runtime is a member of each time this is called.
+ * Calling this causes synchronization.
+ */
+ public static SessionId next() {
+ return new SessionId(serverId, System.currentTimeMillis(), sequenceCounter.getAndIncrement());
+ }
+
+}