From 7965fa019f82b55989fb4843f5342bf01ac097f8 Mon Sep 17 00:00:00 2001 From: Roberto Cirillo Date: Wed, 4 Aug 2021 09:43:10 +0200 Subject: [PATCH] add forceClose operation. Update to version 2.13.0-SNAPSHOT --- CHANGELOG.md | 5 +- pom.xml | 57 +++---------------- src/main/java/log4j.properties | 15 ----- .../blobstorage/service/IClient.java | 2 +- .../service/impl/ServiceEngine.java | 6 +- .../operation/{Close.java => ForceClose.java} | 6 +- .../service/operation/OperationFactory.java | 2 + .../transport/TransportManager.java | 2 + .../transport/backend/MongoIOManager.java | 7 +++ .../backend/MongoOperationManager.java | 5 ++ 10 files changed, 34 insertions(+), 73 deletions(-) delete mode 100644 src/main/java/log4j.properties rename src/main/java/org/gcube/contentmanagement/blobstorage/service/operation/{Close.java => ForceClose.java} (88%) diff --git a/CHANGELOG.md b/CHANGELOG.md index 06567b5..3490c9c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,9 @@ # Changelog for storage-manager-core -## [v2.12.1-SNAPSHOT +## [v2.13.0-SNAPSHOT] + * add close operation on IClient interface + +## [v2.12.1-SNAPSHOT] * add check on transport layer instance: if the memory type is not the same, a new transportLayer is instatiated * move memoryType var from super class TransportManager * convert BasicDBObject to DBObject the return type used for metadata collections diff --git a/pom.xml b/pom.xml index abe2007..a3973b2 100644 --- a/pom.xml +++ b/pom.xml @@ -8,7 +8,7 @@ org.gcube.contentmanagement storage-manager-core - 2.12.1-SNAPSHOT + 2.13.0-SNAPSHOT @@ -53,54 +53,11 @@ commons-codec 1.8 + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/src/main/java/log4j.properties b/src/main/java/log4j.properties deleted file mode 100644 index 043a187..0000000 --- a/src/main/java/log4j.properties +++ /dev/null @@ -1,15 +0,0 @@ -log4j.rootLogger=INFO, A1, stdout -log4j.appender.A1=org.apache.log4j.RollingFileAppender -log4j.appender.A1.File=log.txt -log4j.appender.A1.layout=org.apache.log4j.PatternLayout -log4j.appender.A1.layout.ConversionPattern=%-4r [%t] %-5p %c %x - %m%n -# ***** Max file size is set to 100KB -log4j.appender.A1.MaxFileSize=100MB -# ***** Keep one backup file -log4j.appender.A1.MaxBackupIndex=1 - -#CONSOLE -log4j.appender.stdout=org.apache.log4j.ConsoleAppender -log4j.appender.stdout.Threshold=INFO -log4j.appender.stdout.layout=org.apache.log4j.PatternLayout -log4j.appender.stdout.layout.ConversionPattern=[%t] %-5p %c %d{dd MMM yyyy ;HH:mm:ss.SSS} - %m%n diff --git a/src/main/java/org/gcube/contentmanagement/blobstorage/service/IClient.java b/src/main/java/org/gcube/contentmanagement/blobstorage/service/IClient.java index 0b975f0..b005070 100644 --- a/src/main/java/org/gcube/contentmanagement/blobstorage/service/IClient.java +++ b/src/main/java/org/gcube/contentmanagement/blobstorage/service/IClient.java @@ -206,7 +206,7 @@ public RemoteResourceComplexInfo getMetaFile(); /** * close the connections to backend storage system */ -public void close(); +public void forceClose(); public RemoteResource getUrl(boolean forceCreation); diff --git a/src/main/java/org/gcube/contentmanagement/blobstorage/service/impl/ServiceEngine.java b/src/main/java/org/gcube/contentmanagement/blobstorage/service/impl/ServiceEngine.java index 3f24b37..4d6c022 100644 --- a/src/main/java/org/gcube/contentmanagement/blobstorage/service/impl/ServiceEngine.java +++ b/src/main/java/org/gcube/contentmanagement/blobstorage/service/impl/ServiceEngine.java @@ -911,13 +911,13 @@ public class ServiceEngine implements IClient { } @Override - public void close(){ - currentOperation="close"; + public void forceClose(){ + currentOperation="forceclose"; file.setOwner(owner); getMyFile().setRemoteResource(REMOTE_RESOURCE.PATH); setMyFile(file); service.setResource(getMyFile()); - service.setTypeOperation("close"); + service.setTypeOperation("forceclose"); try { if(((file.getInputStream() != null) || (file.getOutputStream()!=null)) || ((file.getLocalPath() != null) || (file.getRemotePath() != null))) service.startOperation(file,file.getRemotePath(), owner, primaryBackend, Costants.DEFAULT_CHUNK_OPTION, getContext(), isReplaceOption()); diff --git a/src/main/java/org/gcube/contentmanagement/blobstorage/service/operation/Close.java b/src/main/java/org/gcube/contentmanagement/blobstorage/service/operation/ForceClose.java similarity index 88% rename from src/main/java/org/gcube/contentmanagement/blobstorage/service/operation/Close.java rename to src/main/java/org/gcube/contentmanagement/blobstorage/service/operation/ForceClose.java index a556795..38df94e 100644 --- a/src/main/java/org/gcube/contentmanagement/blobstorage/service/operation/Close.java +++ b/src/main/java/org/gcube/contentmanagement/blobstorage/service/operation/ForceClose.java @@ -7,7 +7,7 @@ import org.gcube.contentmanagement.blobstorage.transport.backend.RemoteBackendEx import org.slf4j.Logger; import org.slf4j.LoggerFactory; -public class Close extends Operation{ +public class ForceClose extends Operation{ /** * Logger for this class @@ -15,7 +15,7 @@ public class Close extends Operation{ final Logger logger=LoggerFactory.getLogger(GetSize.class); // public String file_separator = ServiceEngine.FILE_SEPARATOR;//System.getProperty("file.separator"); - public Close(String[] server, String user, String pwd, String bucket, Monitor monitor, boolean isChunk, String backendType, String[] dbs) { + public ForceClose(String[] server, String user, String pwd, String bucket, Monitor monitor, boolean isChunk, String backendType, String[] dbs) { super(server, user, pwd, bucket, monitor, isChunk, backendType, dbs); } @@ -24,7 +24,7 @@ public class Close extends Operation{ // TransportManager tm=tmf.getTransport(backendType, myFile.getGcubeMemoryType(), dbNames, myFile.getWriteConcern(), myFile.getReadPreference()); TransportManager tm=getTransport(myFile); try { - tm.close(); + tm.forceClose(); } catch (Exception e) { throw new RemoteBackendException(" Error in GetSize operation ", e.getCause()); } if (logger.isDebugEnabled()) { diff --git a/src/main/java/org/gcube/contentmanagement/blobstorage/service/operation/OperationFactory.java b/src/main/java/org/gcube/contentmanagement/blobstorage/service/operation/OperationFactory.java index f71f871..c6fa6f5 100644 --- a/src/main/java/org/gcube/contentmanagement/blobstorage/service/operation/OperationFactory.java +++ b/src/main/java/org/gcube/contentmanagement/blobstorage/service/operation/OperationFactory.java @@ -52,6 +52,8 @@ public class OperationFactory { op=new Remove(server, user, password, bucket, monitor, isChunk, backendType, dbNames); }else if(operation.equalsIgnoreCase("getSize")){ op=new GetSize(server, user, password, bucket, monitor, isChunk, backendType, dbNames); + }else if(operation.equalsIgnoreCase("forceclose")){ + op=new ForceClose(server, user, password, bucket, monitor, isChunk, backendType, dbNames); }else if(operation.equalsIgnoreCase("duplicate")){ op=new DuplicateOperator(server, user, password, bucket, monitor, isChunk, backendType, dbNames); }else if(operation.equalsIgnoreCase("softcopy")){ diff --git a/src/main/java/org/gcube/contentmanagement/blobstorage/transport/TransportManager.java b/src/main/java/org/gcube/contentmanagement/blobstorage/transport/TransportManager.java index a5b9267..b7fce9e 100644 --- a/src/main/java/org/gcube/contentmanagement/blobstorage/transport/TransportManager.java +++ b/src/main/java/org/gcube/contentmanagement/blobstorage/transport/TransportManager.java @@ -326,6 +326,8 @@ public abstract class TransportManager { public abstract String getField(String remoteIdentifier, String fieldName) throws UnknownHostException ; public abstract void close(); + + public abstract void forceClose(); public abstract void setFileProperty(String remotePath, String propertyField, String propertyValue); diff --git a/src/main/java/org/gcube/contentmanagement/blobstorage/transport/backend/MongoIOManager.java b/src/main/java/org/gcube/contentmanagement/blobstorage/transport/backend/MongoIOManager.java index e4d35cb..86a8f32 100644 --- a/src/main/java/org/gcube/contentmanagement/blobstorage/transport/backend/MongoIOManager.java +++ b/src/main/java/org/gcube/contentmanagement/blobstorage/transport/backend/MongoIOManager.java @@ -1074,6 +1074,13 @@ public class MongoIOManager { // db=null; } + + public void forceClose() { + if(mongo!=null) + mongo.close(); + logger.info("Mongo pool closed"); + } + public void removeGFSFile(GridFSDBFile f, ObjectId idF){ // this field is an advice for oplog collection reader f.put("onDeleting", "true"); diff --git a/src/main/java/org/gcube/contentmanagement/blobstorage/transport/backend/MongoOperationManager.java b/src/main/java/org/gcube/contentmanagement/blobstorage/transport/backend/MongoOperationManager.java index 210999a..f933acf 100644 --- a/src/main/java/org/gcube/contentmanagement/blobstorage/transport/backend/MongoOperationManager.java +++ b/src/main/java/org/gcube/contentmanagement/blobstorage/transport/backend/MongoOperationManager.java @@ -133,6 +133,11 @@ public class MongoOperationManager extends TransportManager{ // mongoSecondaryInstance.close(); } + public void forceClose() { + mongoPrimaryInstance.forceClose(); + mongoSecondaryInstance.forceClose(); + } + /** * Unlock the object specified, this method accept the key field for the unlock operation * @throws FileNotFoundException