diff --git a/pom.xml b/pom.xml
index e1953bb..c5cd33b 100644
--- a/pom.xml
+++ b/pom.xml
@@ -8,7 +8,7 @@
org.gcube.contentmanagement
storage-manager-wrapper
- 2.6.0-SNAPSHOT
+ 3.0.0-SNAPSHOT
scm:git:https://code-repo.d4science.org/gCubeSystem/${project.artifactId}.git
scm:git:https://code-repo.d4science.org/gCubeSystem/${project.artifactId}.git
diff --git a/src/main/java/org/gcube/contentmanager/storageclient/wrapper/BackendType.java b/src/main/java/org/gcube/contentmanager/storageclient/wrapper/BackendType.java
index f8a8c7a..7a0803a 100644
--- a/src/main/java/org/gcube/contentmanager/storageclient/wrapper/BackendType.java
+++ b/src/main/java/org/gcube/contentmanager/storageclient/wrapper/BackendType.java
@@ -1,5 +1,15 @@
package org.gcube.contentmanager.storageclient.wrapper;
public enum BackendType {
- MongoDB, S3
+ MongoDB, S3;
+
+ @Override
+ public String toString() {
+ switch(this) {
+ case MongoDB: return "MongoDB";
+ case S3: return "S3";
+ default: throw new IllegalArgumentException();
+ }
+ }
+
}
diff --git a/src/main/java/org/gcube/contentmanager/storageclient/wrapper/Configuration.java b/src/main/java/org/gcube/contentmanager/storageclient/wrapper/Configuration.java
index 1624080..e5d955e 100644
--- a/src/main/java/org/gcube/contentmanager/storageclient/wrapper/Configuration.java
+++ b/src/main/java/org/gcube/contentmanager/storageclient/wrapper/Configuration.java
@@ -42,7 +42,7 @@ public class Configuration {
private static final Logger logger = LoggerFactory.getLogger(Configuration.class);
- private static final String DEFAULT_BACKEND_TYPE="MongoDB";
+ protected static final String DEFAULT_BACKEND_TYPE="MongoDB";
private static final String WRITE_CONCERN_PROPERTY_NAME="write_concern";
private static final String READ_PREFERENCE_PROPERTY_NAME="read_preference";
private static final String DB_PROPERTY_NAME="collection";
@@ -114,16 +114,15 @@ public class Configuration {
RRScope=currentScope;
}
logger.debug("RuntimeResource scope "+RRScope);
- ServiceEndpoint resource=getISClient().getStorageEndpoint(RRScope);
-
- //in this case a specific backend type is passed as input parameter
- if (!Objects.isNull(getBackendType()))
- getISClient().setBackendType(getBackendType());
+ //if a specific backend is not passed as input param then take the default one
+ if (Objects.isNull(getBackendType()))
+ setBackendType(DEFAULT_BACKEND_TYPE);
+ ServiceEndpoint resource=getISClient(getBackendType()).getStorageEndpoint(RRScope);
if(resource ==null )
throw new IllegalStateException("the storage resource is not present on IS in scope: "+RRScope);
- List resolverResource =getISClient().getServiceEndpoint(Utils.URI_RESOLVER_RESOURCE_CATEGORY, Utils.URI_RESOLVER_RESOURCE_NAME);
+ List resolverResource =getISClient(getBackendType()).getServiceEndpoint(Utils.URI_RESOLVER_RESOURCE_CATEGORY, Utils.URI_RESOLVER_RESOURCE_NAME);
if(resolverResource !=null && resolverResource.size()> 0)
- setResolverHost(getISClient().getResolverHost(resolverResource.get(0)));
+ setResolverHost(getISClient(getBackendType()).getResolverHost(resolverResource.get(0)));
else
throw new IllegalStateException("the uri resolver resource is not present on IS in scope: "+currentScope);
// old method for retrieve hostedOn field in storage ServiceEndpoint resource
@@ -131,12 +130,12 @@ public class Configuration {
logger.debug("server not set. Try to query IS in scope: "+scopeString);
String[] serverFound=checkVarEnvMongo();
if(serverFound==null){
- serverFound=getISClient().retrieveConnectionInfo(resource);
- setUser(getISClient().getUsername());
- setPassword(getISClient().password);
- setRegion(getISClient().getRegion());
- if (!Objects.isNull(getBackendType()))
- setBackendType(getISClient().getBackendType(resource));
+ serverFound=getISClient(getBackendType()).retrieveConnectionInfo(resource);
+ setUser(getISClient(getBackendType()).getUsername());
+ setPassword(getISClient(getBackendType()).password);
+ setRegion(getISClient(getBackendType()).getRegion());
+ if (Objects.isNull(getBackendType()))
+ setBackendType(getISClient(getBackendType()).getBackendType(resource));
}else{
if (!Objects.isNull(getBackendType()))
setBackendType(checkVarEnvBackendType());
@@ -157,7 +156,7 @@ public class Configuration {
}else{
setEnvironment(setAreaStorage(getSc(), getSn()));
// if the backend is mongodb we should set a separated server for volatile area
- if(getBackendType().equals(BackendType.MongoDB)) {
+ if(getBackendType().equals("MongoDB")) {
setServerHosts(newServer, isclient, resource);
try {
setPassPhrase(retrieveEncryptionField(PASS_PHRASE_FIELD));
@@ -250,11 +249,11 @@ public class Configuration {
String dbString=null;
// check optional properties only if it is not a volatile storage instance
if((getMemoryType() != null) && (!(getMemoryType().equals(MemoryType.VOLATILE.toString())))){
- write=getISClient().retrievePropertyValue(WRITE_CONCERN_PROPERTY_NAME, currentScope);
+ write=getISClient(getBackendType()).retrievePropertyValue(WRITE_CONCERN_PROPERTY_NAME, currentScope);
logger.debug("read preference: read from service endpoint");
- read=getISClient().retrievePropertyValue(READ_PREFERENCE_PROPERTY_NAME, currentScope);
+ read=getISClient(getBackendType()).retrievePropertyValue(READ_PREFERENCE_PROPERTY_NAME, currentScope);
logger.debug(" write preference: read from service endpoint");
- dbString=getISClient().retrievePropertyValue(DB_PROPERTY_NAME, currentScope);
+ dbString=getISClient(getBackendType()).retrievePropertyValue(DB_PROPERTY_NAME, currentScope);
if((write!=null) && (read!=null)){
engine.setWriteConcern(write);
engine.setReadConcern(read);
@@ -273,7 +272,7 @@ public class Configuration {
}
// added db check also on volatile are
}else if((getMemoryType().equals(MemoryType.VOLATILE.toString()))){
- dbString=getISClient().retrievePropertyValue(DB_PROPERTY_NAME, currentScope);
+ dbString=getISClient(getBackendType()).retrievePropertyValue(DB_PROPERTY_NAME, currentScope);
if(dbString!=null){
if (dbString.contains(DB_STRING_SEPARATOR)){
logger.debug("more than one collection read from ServiceEnpoint");
@@ -392,7 +391,7 @@ public class Configuration {
String encryptedKey=null;
// ISClientConnector isclient=getISClient();
logger.info("retrieve encryption phrase from scope "+currentScope);
- encryptedKey=getISClient().retrievePropertyValue("PassPhrase", currentScope);
+ encryptedKey=getISClient(getBackendType()).retrievePropertyValue("PassPhrase", currentScope);
logger.info("encrypted prhase is "+encryptedKey);
String decryptString=org.gcube.common.encryption.StringEncrypter.getEncrypter().decrypt(encryptedKey);
return decryptString;
@@ -404,7 +403,7 @@ public class Configuration {
String encryptedKey=null;
// ISClientConnector isclient=getISClient();
logger.info("retrieve encryption phrase from scope "+currentScope);
- encryptedKey=getISClient().retrievePropertyValue(fieldName, currentScope);
+ encryptedKey=getISClient(getBackendType()).retrievePropertyValue(fieldName, currentScope);
logger.info("encrypted prhase is "+encryptedKey);
String decryptString=(!Objects.isNull(encryptedKey))?org.gcube.common.encryption.StringEncrypter.getEncrypter().decrypt(encryptedKey):null;
return decryptString;
@@ -531,10 +530,14 @@ public class Configuration {
this.resolverHost = resolverHost;
}
- public ISClientConnector getISClient(){
- if (isclient == null)
- isclient=new ISClientConnector();
- return isclient;
+ private ISClientConnector getISClient(String backendType){
+// if ((isclient == null) || (isclient.getBackendType().equals(backendType)))
+// isclient=new ISClientConnector(backendType);
+//
+// return isclient;
+
+ return isclient=((isclient == null) || (!isclient.getBackendType().equals(backendType)))?new ISClientConnector(backendType):isclient;
+
}
public String getSc() {
diff --git a/src/main/java/org/gcube/contentmanager/storageclient/wrapper/ISClientConnector.java b/src/main/java/org/gcube/contentmanager/storageclient/wrapper/ISClientConnector.java
index 3915c34..b656c4d 100644
--- a/src/main/java/org/gcube/contentmanager/storageclient/wrapper/ISClientConnector.java
+++ b/src/main/java/org/gcube/contentmanager/storageclient/wrapper/ISClientConnector.java
@@ -40,6 +40,10 @@ public class ISClientConnector {
public String region;
private static HashMap isCache;
+ public ISClientConnector(String backendType){
+ setBackendType(backendType);
+ }
+
public ISClientConnector(){
}
@@ -91,13 +95,13 @@ public class ISClientConnector {
logger.debug("fillConnectionsFields method ");
if(resource!=null){
logger.debug("checking resource "+resource.id());
- String [] server=new String[resource.profile().accessPoints().size()];
- if(!Objects.isNull(getBackendType())) {
+ ArrayList server=new ArrayList ();//new String[resource.profile().accessPoints().size()];
+ if(!(getBackendType().equals(BackendType.MongoDB.name()))) {
logger.info("searching backend: "+getBackendType());
for (AccessPoint ap:resource.profile().accessPoints()) {
- if((!getBackendType().equals(BackendType.MongoDB) && (ap.name().equals(getBackendType())))){
+ if( (ap.name().equals(getBackendType()))){
//in v1.6.0 we are considering only one accessPoint for a backend except for mongodb.
- server[0] = ap.address();
+ server.add( ap.address());
// if presents, try to get user and password
setUsername(ap.username());
decryptPwd(ap);
@@ -110,21 +114,32 @@ public class ISClientConnector {
for (AccessPoint ap:resource.profile().accessPoints()) {
if (ap.name().equals("server"+(i+1))) {
- // in this case, the backend type has been set in the constructor hence we want to use this one
- // if presents, try to get user and password
+
+ server.add(ap.address());
setUsername(ap.username());
- decryptPwd(ap);
-
+ setPassword("");
+ if(getUsername() != null && getUsername().length() > 0){
+ try {
+ setPassword(StringEncrypter.getEncrypter().decrypt(ap.password()));
+ } catch (Exception e) {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ }
+ }
+ i++;
}
}
- setBackendType(retrievePropertyValue(resource, "type"));
+ logger.info("credentials Mongodb: "+getUsername()+" "+getPassword());
+// setBackendType(retrievePropertyValue(resource, "type"));
}
String [] volatileHost= new String [1];
volatileHost[0]=retrievePropertyValue(resource, "volatile");
setVolatileHost(volatileHost);
logger.info("Type of backend found in RR is "+backendType);
- return server;
+ String [] servers= new String[server.size()];
+ servers=server.toArray(servers);
+ return servers;
}else{
throw new IllegalStateException("Runtime Resource found are more than 1 but all without default priority setted");
@@ -234,7 +249,7 @@ public class ISClientConnector {
return backendType;
}
- public void setBackendType(String backendType) {
+ private void setBackendType(String backendType) {
this.backendType = backendType;
}
diff --git a/src/main/java/org/gcube/contentmanager/storageclient/wrapper/StorageClient.java b/src/main/java/org/gcube/contentmanager/storageclient/wrapper/StorageClient.java
index b375f1f..73e4df3 100644
--- a/src/main/java/org/gcube/contentmanager/storageclient/wrapper/StorageClient.java
+++ b/src/main/java/org/gcube/contentmanager/storageclient/wrapper/StorageClient.java
@@ -437,6 +437,8 @@ public class StorageClient {
public String getBackendType() {
+ if(Objects.isNull(backendType))
+ backendType=Configuration.DEFAULT_BACKEND_TYPE;
logger.debug("backend type returned is "+backendType);
return backendType;
}