blob: 7dc20ff34cec24fae941c79d427ca8e41d1b6dcf [file] [log] [blame]
/*
* 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.
*/
/*
* 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.
*/
package org.apache.dubbo.remoting.etcd;
import org.apache.dubbo.common.URL;
import java.util.List;
import java.util.concurrent.CancellationException;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.TimeoutException;
public interface EtcdClient {
/**
* save the specified path to the etcd registry.
*
* @param path the path to be saved
*/
void create(String path);
/**
* save the specified path to the etcd registry.
* if node disconnect from etcd, it will be deleted
* automatically by etcd when session timeout.
*
* @param path the path to be saved
* @return the lease of current path.
*/
long createEphemeral(String path);
/**
* remove the specified from etcd registry.
*
* @param path the path to be removed
*/
void delete(String path);
/**
* find direct children directory, excluding path self,
* Never return null.
*
* @param path the path to be found direct children.
* @return direct children directory, contains zero element
* list if children directory not exists.
*/
List<String> getChildren(String path);
/**
* register children listener for specified path.
*
* @param path the path to be watched when children is added, delete or update.
* @param listener when children is changed , listener will be trigged.
* @return direct children directory, contains zero element
* list if children directory not exists.
*/
List<String> addChildListener(String path, ChildListener listener);
/**
* find watcher of the children listener for specified path.
*
* @param path the path to be watched when children is added, delete or update.
* @param listener when children is changed , listener will be trigged.
* @return watcher if find else null
*/
<T> T getChildListener(String path, ChildListener listener);
/**
* unregister children lister for specified path.
*
* @param path the path to be unwatched .
* @param listener when children is changed , lister will be trigged.
*/
void removeChildListener(String path, ChildListener listener);
/**
* support connection notify if connection state was changed.
*
* @param listener if state changed, listener will be triggered.
*/
void addStateListener(StateListener listener);
/**
* remove connection notify if connection state was changed.
*
* @param listener remove already registered listener, if listener
* not exists nothing happened.
*/
void removeStateListener(StateListener listener);
/**
* test if current client is active.
*
* @return true if connection is active else false.
*/
boolean isConnected();
/**
* close current client and release all resourses.
*/
void close();
URL getUrl();
/***
* create new lease from specified second ,it should be waiting if failed.<p>
*
* @param second lease time (support second only).
* @return lease id from etcd
*/
long createLease(long second);
/***
* create new lease from specified ttl second before waiting specified timeout.<p>
*
* @param ttl lease time (support second only).
* @param timeout the maximum time to wait
* @param unit the time unit of the timeout argument
* @throws CancellationException if this future was cancelled
* @throws ExecutionException if this future completed exceptionally
* @throws InterruptedException if the current thread was interrupted
* while waiting
* @throws TimeoutException if the wait timed out
* @return lease id from etcd
*/
long createLease(long ttl, long timeout, TimeUnit unit)
throws InterruptedException, ExecutionException, TimeoutException;
/**
* revoke specified lease, any associated path will removed automatically.
*
* @param lease to be removed lease
*/
void revokeLease(long lease);
/**
* Get the value of the specified key.
* @param key the specified key
* @return null if the value is not found
*/
String getKVValue(String key);
/**
* Put the key value pair to etcd
* @param key the specified key
* @param value the paired value
* @return true if put success
*/
boolean put(String key, String value);
/**
* Put the key value pair to etcd (Ephemeral)
* @param key the specified key
* @param value the paired value
* @return true if put success
*/
boolean putEphemeral(String key, String value);
}