You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@helix.apache.org by xy...@apache.org on 2023/04/27 20:36:33 UTC

[helix] 24/37: TTL Node Interface Methods (#2388)

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

xyuanlu pushed a commit to branch metaclient
in repository https://gitbox.apache.org/repos/asf/helix.git

commit 04e2c83404b6c2de44b1906e0e372f640f803315
Author: Marcos Rico Peng <55...@users.noreply.github.com>
AuthorDate: Mon Mar 6 12:36:29 2023 -0500

    TTL Node Interface Methods (#2388)
    
    TTL Node Interface Methods
    Co-authored-by: mapeng <ma...@linkedin.com>
---
 .../helix/metaclient/api/MetaClientInterface.java  | 47 +++++++++++++++++++++-
 .../helix/metaclient/impl/zk/ZkMetaClient.java     | 10 +++++
 2 files changed, 56 insertions(+), 1 deletion(-)

diff --git a/meta-client/src/main/java/org/apache/helix/metaclient/api/MetaClientInterface.java b/meta-client/src/main/java/org/apache/helix/metaclient/api/MetaClientInterface.java
index e13c61bfb..433184de6 100644
--- a/meta-client/src/main/java/org/apache/helix/metaclient/api/MetaClientInterface.java
+++ b/meta-client/src/main/java/org/apache/helix/metaclient/api/MetaClientInterface.java
@@ -79,6 +79,14 @@ public interface MetaClientInterface<T> {
   class Stat {
     private final int _version;
     private final EntryMode _entryMode;
+    // The expiry time of a TTL node in milliseconds. The default is -1 for nodes without expiry time.
+    private long _expiryTime;
+
+    // The time when the node is created. Measured in milliseconds since the Unix epoch (January 1, 1970, 00:00:00 UTC).
+    private long _creationTime;
+
+    // The time when the node was las modified. Measured in milliseconds since the Unix epoch when the node was last modified.
+    private long _modifiedTime;
 
     public EntryMode getEntryType() {
       return _entryMode;
@@ -88,9 +96,30 @@ public interface MetaClientInterface<T> {
       return _version;
     }
 
+    public long getExpiryTime() {
+      return _expiryTime;
+    }
+
+    public long getCreationTime() {
+      return _creationTime;
+    }
+
+    public long getModifiedTime() {
+      return _modifiedTime;
+    }
+
     public Stat (EntryMode mode, int version) {
       _version = version;
       _entryMode = mode;
+      _expiryTime = -1;
+    }
+
+    public Stat (EntryMode mode, int version, long ctime, long mtime, long etime) {
+      _version = version;
+      _entryMode = mode;
+      _creationTime = ctime;
+      _modifiedTime = mtime;
+      _expiryTime = etime;
     }
   }
 
@@ -113,7 +142,23 @@ public interface MetaClientInterface<T> {
    */
   void create(final String key, final T data, final EntryMode mode);
 
-  // TODO: add TTL create and renew API
+  /**
+   * Create an entry of given EntryMode with given key, data, and expiry time (ttl).
+   * The entry will automatically purge when reached expiry time and has no children.
+   * The entry will not be created if there is an existing entry with the same key.
+   * @param key key to identify the entry
+   * @param data value of the entry
+   * @param ttl Time-to-live value of the node in milliseconds.
+   */
+  void createWithTTL(final String key, final T data, final long ttl);
+
+  /**
+   * Renews the specified TTL node adding its original expiry time
+   * to the current time. Throws an exception if the key is not a valid path
+   * or isn't of type TTL.
+   * @param key key to identify the entry
+   */
+  void renewTTLNode(final String key);
 
   /**
    * Set the data for the entry of the given key if it exists and the given version matches the
diff --git a/meta-client/src/main/java/org/apache/helix/metaclient/impl/zk/ZkMetaClient.java b/meta-client/src/main/java/org/apache/helix/metaclient/impl/zk/ZkMetaClient.java
index 42acc72c1..7dedd02d5 100644
--- a/meta-client/src/main/java/org/apache/helix/metaclient/impl/zk/ZkMetaClient.java
+++ b/meta-client/src/main/java/org/apache/helix/metaclient/impl/zk/ZkMetaClient.java
@@ -88,6 +88,16 @@ public class ZkMetaClient<T> implements MetaClientInterface<T>, AutoCloseable {
     }
   }
 
+  @Override
+  public void createWithTTL(String key, T data, long ttl) {
+    throw new UnsupportedOperationException("TTL nodes aren't yet supported.");
+  }
+
+  @Override
+  public void renewTTLNode(String key) {
+    throw new UnsupportedOperationException("TTL nodes aren't yet supported.");
+  }
+
   @Override
   public void set(String key, T data, int version) {
     try {