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 25052ab597e9b03c96b15261152a8fc000601e5f Author: Marcos Rico Peng <[email protected]> AuthorDate: Wed Apr 5 02:36:42 2023 -0400 MetaClient LockClient Interface --- .../recipes/lock/LockClientInterface.java | 59 ++++++++++++++++++++++ .../helix/metaclient/recipes/lock/LockInfo.java | 24 +++++++++ 2 files changed, 83 insertions(+) diff --git a/meta-client/src/main/java/org/apache/helix/metaclient/recipes/lock/LockClientInterface.java b/meta-client/src/main/java/org/apache/helix/metaclient/recipes/lock/LockClientInterface.java new file mode 100644 index 000000000..81fe6a35a --- /dev/null +++ b/meta-client/src/main/java/org/apache/helix/metaclient/recipes/lock/LockClientInterface.java @@ -0,0 +1,59 @@ +package org.apache.helix.metaclient.recipes.lock; + +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import org.apache.helix.metaclient.api.MetaClientInterface; + +public interface LockClientInterface { + /** + * Acquires a lock at key. + * @param key key to identify the entry + * @param info Metadata of the lock + * @param mode EntryMode identifying if the entry will be deleted upon client disconnect + * (Persistent, Ephemeral, or TTL) + * @return True if the lock is acquired. Raises exception if fails. + */ + boolean acquireLock(String key, LockInfo info, MetaClientInterface.EntryMode mode); + + /** + * Renews lock for a TTL Node. + * Will fail if key is an invalid path or isn't of type TTL. + * @param key key to identify the entry + * @return True if the lock was renewed. Raises exception if fails. + */ + boolean renewTTLLock(String key); + + /** + * Releases the lock. + * Will fail if key is an invalid path. + * @param key key to identify the entry + * @return True if the lock was released or the lock had already been released. + * Raises exception if fails. + */ + boolean releaseLock(String key); + + /** + * Obtains the metadata of a lock (the LockInfo). + * @param key key to identify the entry + * @return LockInfo object of the node at key. If fails to retrieve, return null. + * If other error, will raise exception. + */ + LockInfo retrieveLock(String key); +} diff --git a/meta-client/src/main/java/org/apache/helix/metaclient/recipes/lock/LockInfo.java b/meta-client/src/main/java/org/apache/helix/metaclient/recipes/lock/LockInfo.java new file mode 100644 index 000000000..85006cdf1 --- /dev/null +++ b/meta-client/src/main/java/org/apache/helix/metaclient/recipes/lock/LockInfo.java @@ -0,0 +1,24 @@ +package org.apache.helix.metaclient.recipes.lock; + +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + + +public class LockInfo { +}
