Refactor whole project
Turn EtcdConnector into interface
This commit is contained in:
parent
8c42f0dcb9
commit
ba3fd05932
@ -9,7 +9,7 @@
|
||||
</parent>
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
<artifactId>etcdconnector</artifactId>
|
||||
<version>1.1-SNAPSHOT</version>
|
||||
<version>1.2-SNAPSHOT</version>
|
||||
|
||||
<dependencies>
|
||||
<dependency>
|
||||
|
@ -1,34 +1,80 @@
|
||||
package eu.mikroskeem.utils.etcdconnector;
|
||||
|
||||
import mousio.client.retry.RetryOnce;
|
||||
import mousio.etcd4j.EtcdClient;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.net.URI;
|
||||
import java.util.List;
|
||||
import java.util.function.Function;
|
||||
|
||||
public interface EtcdConnector {
|
||||
|
||||
public class EtcdConnector extends EtcdConnectorBase {
|
||||
/**
|
||||
* Sets up EtcdConnector against
|
||||
* Etcd server with no encryption
|
||||
* Closes Etcd4j client
|
||||
*
|
||||
* @param etcdUrls url(s) where to connect to
|
||||
* @throws IOException Thrown by Etcd4j
|
||||
*/
|
||||
public EtcdConnector(URI... etcdUrls) throws IOException {
|
||||
super();
|
||||
void close() throws IOException;
|
||||
|
||||
/* Set up logger */
|
||||
logger = LoggerFactory.getLogger("EtcdConnector");
|
||||
/**
|
||||
* Gets etcd key value
|
||||
*
|
||||
* @param path Key path
|
||||
* @return Key value
|
||||
*/
|
||||
@Nullable String getKey(@NotNull String path);
|
||||
|
||||
/* Initialize client */
|
||||
initClient(etcdUrls);
|
||||
/**
|
||||
* Gets etcd key value and sets default,
|
||||
* if key isn't defined
|
||||
*
|
||||
* @param path Key path
|
||||
* @param defaultValue Value to set if key is nonexistent
|
||||
* @return Key value
|
||||
*/
|
||||
@Nullable String getKey(@NotNull String path, @NotNull String defaultValue);
|
||||
|
||||
/* Test client */
|
||||
testEtcd();
|
||||
}
|
||||
|
||||
@Override void initClient(URI... urls){
|
||||
etcdClient = new EtcdClient(urls);
|
||||
etcdClient.setRetryHandler(new RetryOnce(5000));
|
||||
}
|
||||
/**
|
||||
* Gets etcd directory contents and returns it as
|
||||
* List of String
|
||||
*
|
||||
* @param path directory path
|
||||
* @return directory contents
|
||||
*/
|
||||
@Nullable List<String> getDir(@NotNull String path);
|
||||
|
||||
/**
|
||||
* Sets etcd key value
|
||||
*
|
||||
* @param path key path
|
||||
* @param value key value
|
||||
* @return whether write succeeded or not
|
||||
*/
|
||||
boolean putKey(@NotNull String path, @NotNull String value);
|
||||
|
||||
/**
|
||||
* Sets etcd key value with TTL
|
||||
*
|
||||
* @param path key path
|
||||
* @param value key value
|
||||
* @param ttl key ttl (seconds)
|
||||
* @return whether write succeeded or not
|
||||
*/
|
||||
boolean putKey(@NotNull String path, @NotNull String value, @NotNull Integer ttl);
|
||||
|
||||
/**
|
||||
* Deletes etcd key
|
||||
*
|
||||
* @param path key path
|
||||
* @return whether delete succeeded or not
|
||||
*/
|
||||
boolean deleteKey(@NotNull String path);
|
||||
|
||||
/**
|
||||
* Waits for key change
|
||||
*
|
||||
* @param path Key path
|
||||
* @param callback Callback to run
|
||||
*/
|
||||
void waitKey(@NotNull String path, @NotNull Function<Object,Void> callback);
|
||||
}
|
@ -3,11 +3,11 @@ package eu.mikroskeem.utils.etcdconnector;
|
||||
|
||||
import com.google.gson.Gson;
|
||||
import mousio.etcd4j.EtcdClient;
|
||||
import mousio.etcd4j.promises.EtcdResponsePromise;
|
||||
import mousio.etcd4j.responses.*;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
@ -15,14 +15,14 @@ import java.net.URI;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.concurrent.TimeoutException;
|
||||
import java.util.function.Function;
|
||||
|
||||
abstract class EtcdConnectorBase {
|
||||
abstract class EtcdConnectorBase implements EtcdConnector {
|
||||
Logger logger;
|
||||
EtcdClient etcdClient;
|
||||
|
||||
EtcdConnectorBase() throws IOException {}
|
||||
|
||||
|
||||
/**
|
||||
* Initializes EtcdClient object
|
||||
*/
|
||||
@ -45,23 +45,12 @@ abstract class EtcdConnectorBase {
|
||||
logger.debug("Etcd is working!");
|
||||
}
|
||||
|
||||
/**
|
||||
* Closes Etcd4j client
|
||||
*
|
||||
* @throws IOException Thrown by Etcd4j
|
||||
*/
|
||||
public void close() throws IOException {
|
||||
if(this.etcdClient != null){
|
||||
this.etcdClient.close();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets etcd key value
|
||||
*
|
||||
* @param path Key path
|
||||
* @return Key value
|
||||
*/
|
||||
@Nullable
|
||||
public String getKey(@NotNull String path){
|
||||
logger.debug("getKey: {}", path);
|
||||
@ -83,14 +72,6 @@ abstract class EtcdConnectorBase {
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets etcd key value and sets default,
|
||||
* if key isn't defined
|
||||
*
|
||||
* @param path Key path
|
||||
* @param defaultValue Value to set if key is nonexistent
|
||||
* @return Key value
|
||||
*/
|
||||
@Nullable
|
||||
public String getKey(@NotNull String path, @NotNull String defaultValue){
|
||||
logger.debug("getKey: {}, {}", path, defaultValue);
|
||||
@ -114,13 +95,6 @@ abstract class EtcdConnectorBase {
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets etcd directory contents and returns it as
|
||||
* List of String
|
||||
*
|
||||
* @param path directory path
|
||||
* @return directory contents
|
||||
*/
|
||||
@Nullable
|
||||
public List<String> getDir(@NotNull String path){
|
||||
logger.debug("getDir: {}", path);
|
||||
@ -140,13 +114,6 @@ abstract class EtcdConnectorBase {
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets etcd key value
|
||||
*
|
||||
* @param path key path
|
||||
* @param value key value
|
||||
* @return whether write succeeded or not
|
||||
*/
|
||||
public boolean putKey(@NotNull String path, @NotNull String value){
|
||||
logger.debug("putKey: {}, {}", path, value);
|
||||
try {
|
||||
@ -160,14 +127,6 @@ abstract class EtcdConnectorBase {
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets etcd key value with TTL
|
||||
*
|
||||
* @param path key path
|
||||
* @param value key value
|
||||
* @param ttl key ttl (seconds)
|
||||
* @return whether write succeeded or not
|
||||
*/
|
||||
public boolean putKey(@NotNull String path, @NotNull String value, @NotNull Integer ttl){
|
||||
logger.debug("putKey: {}, {}, {}", path, value, ttl);
|
||||
try {
|
||||
@ -180,11 +139,6 @@ abstract class EtcdConnectorBase {
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Deletes etcd key
|
||||
* @param path key path
|
||||
* @return whether delete succeeded or not
|
||||
*/
|
||||
public boolean deleteKey(@NotNull String path){
|
||||
logger.debug("deleteKey: {}", path);
|
||||
try {
|
||||
@ -200,4 +154,16 @@ abstract class EtcdConnectorBase {
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
public void waitKey(@NotNull String path, @NotNull Function<Object,Void> callback){
|
||||
logger.debug("waitKey: {}", path);
|
||||
try {
|
||||
EtcdResponsePromise promise = etcdClient.get(path).waitForChange().send();
|
||||
promise.addListener(p -> {
|
||||
callback.apply(p.getNow());
|
||||
});
|
||||
} catch (IOException e){
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -0,0 +1,34 @@
|
||||
package eu.mikroskeem.utils.etcdconnector;
|
||||
|
||||
import mousio.client.retry.RetryOnce;
|
||||
import mousio.etcd4j.EtcdClient;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.net.URI;
|
||||
|
||||
public class EtcdHTTPConnector extends EtcdConnectorBase implements EtcdConnector {
|
||||
/**
|
||||
* Sets up EtcdHTTPConnector against
|
||||
* Etcd server with no encryption
|
||||
*
|
||||
* @param etcdUrls url(s) where to connect to
|
||||
*/
|
||||
public EtcdHTTPConnector(URI... etcdUrls) throws IOException {
|
||||
super();
|
||||
|
||||
/* Set up logger */
|
||||
logger = LoggerFactory.getLogger("EtcdConnector");
|
||||
|
||||
/* Initialize client */
|
||||
initClient(etcdUrls);
|
||||
|
||||
/* Test client */
|
||||
testEtcd();
|
||||
}
|
||||
|
||||
@Override void initClient(URI... urls){
|
||||
etcdClient = new EtcdClient(urls);
|
||||
etcdClient.setRetryHandler(new RetryOnce(5000));
|
||||
}
|
||||
}
|
@ -10,7 +10,7 @@ import javax.net.ssl.SSLException;
|
||||
import java.io.IOException;
|
||||
import java.net.URI;
|
||||
|
||||
public class EtcdSSLConnector extends EtcdConnectorBase {
|
||||
public class EtcdSSLConnector extends EtcdConnectorBase implements EtcdConnector {
|
||||
public EtcdSSLConnector(URI... etcdUrls) throws IOException {
|
||||
super();
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user