accounting user retrieved by IS
git-svn-id: https://svn.d4science.research-infrastructures.eu/gcube/trunk/content-management/storage-manager-trigger@179728 82a268e6-3cf1-43bd-a215-b396298e98cf
This commit is contained in:
parent
7d899c997b
commit
a0c234ab0e
|
@ -1,4 +1,7 @@
|
|||
<ReleaseNotes>
|
||||
<Changeset component="org.gcube.content-management.storage-manager-trigger.1-9-0" date="2019-06-06">
|
||||
<Change>accounting user retrieved by IS</Change>
|
||||
</Changeset>
|
||||
<Changeset component="org.gcube.content-management.storage-manager-trigger.1-8-0" date="2018-10-01">
|
||||
<Change>enabled ssl connection to mongodb</Change>
|
||||
</Changeset>
|
||||
|
|
2
pom.xml
2
pom.xml
|
@ -8,7 +8,7 @@
|
|||
</parent>
|
||||
<groupId>org.gcube.contentmanagement</groupId>
|
||||
<artifactId>storage-manager-trigger</artifactId>
|
||||
<version>1.8.0-SNAPSHOT</version>
|
||||
<version>1.9.0-SNAPSHOT</version>
|
||||
<scm>
|
||||
<connection>scm:svn:http://svn.d4science.research-infrastructures.eu/gcube/trunk/content-management/${project.artifactId}</connection>
|
||||
<developerConnection>scm:svn:https://svn.d4science.research-infrastructures.eu/gcube/trunk/content-management/${project.artifactId}</developerConnection>
|
||||
|
|
|
@ -145,7 +145,5 @@ public class ReadingMongoOplog extends Thread{
|
|||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
|
|
@ -14,6 +14,7 @@ import org.gcube.common.resources.gcore.GCoreEndpoint.Profile.Endpoint;
|
|||
import org.gcube.common.resources.gcore.ServiceEndpoint;
|
||||
import org.gcube.common.resources.gcore.ServiceEndpoint.AccessPoint;
|
||||
import org.gcube.common.resources.gcore.ServiceEndpoint.Property;
|
||||
import org.gcube.common.resources.gcore.utils.Group;
|
||||
import org.gcube.common.scope.api.ScopeProvider;
|
||||
import org.gcube.contentmanager.storageserver.parse.utils.ValidationUtils;
|
||||
import org.gcube.resources.discovery.client.api.DiscoveryClient;
|
||||
|
@ -30,6 +31,10 @@ public class Configuration {
|
|||
private String backendType;
|
||||
private ArrayList<String> dtsHosts;
|
||||
private boolean activeDTSFilter;
|
||||
private static final String SE_CATEGORY="DataStorage";
|
||||
private static final String SE_NAME="StorageManager";
|
||||
private static final String ACCOUNTING_USERNAME="accounting_user";
|
||||
private static final String ACCOUNTING_PASSWORDNAME="accounting_pwd";
|
||||
Logger logger= LoggerFactory.getLogger(Configuration.class);
|
||||
|
||||
public Configuration(String scope, String user, String password, boolean dtsFilter){
|
||||
|
@ -49,14 +54,14 @@ public class Configuration {
|
|||
|
||||
}
|
||||
|
||||
public String[] getServerAccess(){
|
||||
public String[] getServerAccess(List<ServiceEndpoint> resources){
|
||||
String savedScope=null;
|
||||
if(scope!=null){
|
||||
savedScope=ScopeProvider.instance.get();
|
||||
ScopeProvider.instance.set(scope);
|
||||
}
|
||||
logger.debug("get server from IS ");
|
||||
getServerRRFws();
|
||||
getServerRRFws(resources);
|
||||
if(scope!=null){
|
||||
ScopeProvider.instance.set(savedScope);
|
||||
}
|
||||
|
@ -64,11 +69,8 @@ public class Configuration {
|
|||
return server;
|
||||
}
|
||||
|
||||
public String[] getServerRRFws(){
|
||||
SimpleQuery query = queryFor(ServiceEndpoint.class);
|
||||
query.addCondition("$resource/Profile/Category/text() eq 'DataStorage' and $resource/Profile/Name eq 'StorageManager' ");
|
||||
DiscoveryClient<ServiceEndpoint> client = clientFor(ServiceEndpoint.class);
|
||||
List<ServiceEndpoint> resources = client.submit(query);
|
||||
public String[] getServerRRFws(List<ServiceEndpoint> resources){
|
||||
// List<ServiceEndpoint> resources = getStorageServiceEndpoint();
|
||||
if(resources.size() > 1){
|
||||
logger.info("found "+resources.size()+" RR ");
|
||||
// take the RR with property priority setted to DEFAULT
|
||||
|
@ -83,6 +85,57 @@ public class Configuration {
|
|||
throw new RuntimeException("RUNTIME RESOURCE NOT FOUND IN SCOPE: "+ScopeProvider.instance.get());
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* The accounting user is retrieved from the first serviceEndpoint found in the scope and the first accessPoint inside the serviceEndpoint
|
||||
* @param resources the serviceEndpoint list
|
||||
* @return accounting username
|
||||
*/
|
||||
protected String getAccountingUser(List<ServiceEndpoint> resources){
|
||||
logger.trace("retrieving access point");
|
||||
for (AccessPoint ap:resources.get(0).profile().accessPoints()) {
|
||||
Map<String, Property>map= ap.propertyMap();
|
||||
Property user=map.get(ACCOUNTING_USERNAME);
|
||||
if (user!=null){
|
||||
logger.debug("accounting user found on SE");
|
||||
return user.value();
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* The accounting password is retrieved from the first serviceEndpoint found in the scope and the first accessPoint inside the serviceEndpoint
|
||||
* @param resources the serviceEndpoint list
|
||||
* @return accounting password
|
||||
*/
|
||||
protected String getAccountingPassword(List<ServiceEndpoint> resources){
|
||||
for (AccessPoint ap:resources.get(0).profile().accessPoints()) {
|
||||
Map<String, Property>map= ap.propertyMap();
|
||||
Property pwd=map.get(ACCOUNTING_PASSWORDNAME);
|
||||
if (pwd!=null){
|
||||
logger.debug("password field found on SE");
|
||||
try {
|
||||
return StringEncrypter.getEncrypter().decrypt(pwd.value());
|
||||
} catch (Exception e) {
|
||||
// TODO Auto-generated catch block
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
protected List<ServiceEndpoint> getStorageServiceEndpoint() {
|
||||
logger.debug("query for serviceEndpoint ongoing...");
|
||||
SimpleQuery query = queryFor(ServiceEndpoint.class);
|
||||
query.addCondition("$resource/Profile/Category/text() eq '"+SE_CATEGORY+"' and $resource/Profile/Name eq '"+SE_NAME+"' ");
|
||||
DiscoveryClient<ServiceEndpoint> client = clientFor(ServiceEndpoint.class);
|
||||
List<ServiceEndpoint> resources = client.submit(query);
|
||||
if (resources.size() > 0)
|
||||
logger.debug("resource found on IS");
|
||||
return resources;
|
||||
}
|
||||
|
||||
private String[] getServers(ServiceEndpoint res) {
|
||||
server=new String[res.profile().accessPoints().size()];
|
||||
|
|
|
@ -3,6 +3,7 @@ package org.gcube.contentmanager.storageserver.startup;
|
|||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
|
||||
import org.gcube.common.resources.gcore.ServiceEndpoint;
|
||||
import org.gcube.contentmanager.storageserver.consumer.FolderAccountingConsumer;
|
||||
import org.gcube.contentmanager.storageserver.consumer.UserAccountingConsumer;
|
||||
import org.gcube.contentmanager.storageserver.data.CubbyHole;
|
||||
|
@ -12,8 +13,10 @@ public class Startup {
|
|||
|
||||
private static String user;
|
||||
private static String password;
|
||||
private static String accountingUser;
|
||||
private static String accountingPassword;
|
||||
private static String scope;
|
||||
|
||||
private static List<ServiceEndpoint> se;
|
||||
|
||||
public static void main(String[] args) {
|
||||
|
||||
|
@ -35,7 +38,12 @@ public class Startup {
|
|||
}
|
||||
scope=args[0];
|
||||
String oplogServer= args[1];
|
||||
// user=args[2];
|
||||
// password=args[3];
|
||||
Configuration cfg=new Configuration(scope, false);
|
||||
se=cfg.getStorageServiceEndpoint();
|
||||
accountingUser=cfg.getAccountingUser(se);
|
||||
accountingPassword=cfg.getAccountingPassword(se);
|
||||
String[] server=retrieveServerConfiguration(cfg);
|
||||
|
||||
List<String> dtsHosts=null;//retrieveDTSConfiguration(cfg);
|
||||
|
@ -73,8 +81,8 @@ public class Startup {
|
|||
private static void startProducer(String[] args, String oplogServer,
|
||||
String[] server, CubbyHole c1, CubbyHole c2) {
|
||||
ReadingMongoOplog producer=null;
|
||||
if((args.length == 4 )&& (args[2]!=null) && (args[3]!= null))
|
||||
producer=new ReadingMongoOplog( Arrays.asList(oplogServer), args[2], args[3], c1, c2, 1 );
|
||||
if((user !=null) && (password!= null))
|
||||
producer=new ReadingMongoOplog( Arrays.asList(oplogServer), accountingUser, accountingPassword, c1, c2, 1 );
|
||||
else //if(args.length == 2)
|
||||
producer=new ReadingMongoOplog( Arrays.asList(server), c1, c2, 1 );
|
||||
// else{
|
||||
|
@ -84,7 +92,7 @@ public class Startup {
|
|||
}
|
||||
|
||||
private static String[] retrieveServerConfiguration(Configuration c) {
|
||||
String[] server= c.getServerAccess();
|
||||
String[] server= c.getServerAccess(se);
|
||||
if(user == null)
|
||||
user=c.getUsername();
|
||||
if(password == null)
|
||||
|
|
|
@ -40,6 +40,7 @@ public class MongoDB {
|
|||
protected static final WriteConcern WRITE_TYPE=WriteConcern.REPLICAS_SAFE;
|
||||
|
||||
public MongoDB(String[] server, int port, String user, String password){
|
||||
logger.debug("MongoDB init with "+user+" "+password);
|
||||
this.server=server;
|
||||
this.port=port;
|
||||
this.pwd=password;
|
||||
|
@ -51,6 +52,7 @@ public class MongoDB {
|
|||
}
|
||||
|
||||
public MongoDB(String[] server, String user, String password){
|
||||
logger.debug("MongoDB init with "+user+" "+password);
|
||||
this.server=server;
|
||||
this.pwd=password;
|
||||
this.user=user;
|
||||
|
@ -124,6 +126,7 @@ public class MongoDB {
|
|||
if(mongo==null){
|
||||
logger.debug(" open mongo connection ");
|
||||
MongoClientOptions options=MongoClientOptions.builder().sslEnabled(true).connectionsPerHost(10).connectTimeout(30000).readPreference(READ_PREFERENCE).build();
|
||||
// MongoClientOptions options=MongoClientOptions.builder().connectionsPerHost(10).connectTimeout(30000).readPreference(READ_PREFERENCE).build();
|
||||
if(((pwd != null) && (pwd.length() >0)) && ((user != null) && (user.length() > 0))){
|
||||
MongoCredential credential = MongoCredential.createMongoCRCredential(user, ACCOUNTING_DB, pwd.toCharArray());
|
||||
mongo = new MongoClient(srvList, Arrays.asList(credential), options);
|
||||
|
|
|
@ -1,6 +1,8 @@
|
|||
package org.gcube.contentmanager.storageserver.startup;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import org.gcube.common.resources.gcore.ServiceEndpoint;
|
||||
import org.junit.Assert;
|
||||
import org.junit.BeforeClass;
|
||||
import org.junit.Test;
|
||||
|
@ -21,7 +23,8 @@ public class ConfigurationTest {
|
|||
|
||||
@Test
|
||||
public void serverAccess() {
|
||||
Assert.assertNotNull(c.getServerAccess());
|
||||
List <ServiceEndpoint> se=c.getStorageServiceEndpoint();
|
||||
Assert.assertNotNull(c.getServerAccess(se));
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -11,6 +11,7 @@ public class MongoDBTest {
|
|||
@BeforeClass
|
||||
public static void init(){
|
||||
mongo=new MongoDB(server, "devUser", "d3v_u534");
|
||||
// mongo=new MongoDB(server, "oplogger", "0pl0gg3r_d3v");
|
||||
}
|
||||
|
||||
// @Test
|
||||
|
|
Loading…
Reference in New Issue