diff --git a/pom.xml b/pom.xml index d1744433e..9e01e7b92 100644 --- a/pom.xml +++ b/pom.xml @@ -44,10 +44,10 @@ 2.12.1 1.6.6 - 1.10.19 + 4.3.1 1.3 - 1.0.6 + 1.0.7 UTF-8 @@ -58,18 +58,35 @@ + + + org.apache.maven.plugins + maven-enforcer-plugin + 3.0.0 + + + enforce-maven + + enforce + + + + + 3.1.1 + + + + + + + org.apache.maven.plugins maven-compiler-plugin - 3.6.1 + 3.8.1 - 1.8 - 1.8 - - -Xlint:deprecation - -Xlint:unchecked - + 11 @@ -77,12 +94,12 @@ org.apache.maven.plugins maven-surefire-plugin - 2.20 + 3.0.0-M5 maven-assembly-plugin - 3.0.0 + 3.3.0 storm-backend-server false @@ -104,7 +121,7 @@ org.apache.maven.plugins maven-jar-plugin - 3.0.2 + 3.2.2 @@ -146,6 +163,12 @@ + + com.fasterxml.jackson.dataformat + jackson-dataformat-xml + ${jacksonVersion} + + com.google.guava guava @@ -240,6 +263,12 @@ org.codehaus.jettison jettison ${jettisonVersion} + + + stax + stax-api + + @@ -275,6 +304,10 @@ javax.servlet servlet-api + + xml-apis + xml-apis + @@ -343,6 +376,12 @@ xalan ${xalanVersion} runtime + + + xml-apis + xml-apis + + @@ -352,12 +391,13 @@ runtime - + org.mockito - mockito-all + mockito-core ${mockitoVersion} test + org.hamcrest hamcrest-all @@ -381,6 +421,12 @@ xerces xercesImpl ${xercesImplVersion} + + + xml-apis + xml-apis + + diff --git a/src/main/java/it/grid/storm/Main.java b/src/main/java/it/grid/storm/Main.java index 5f390b2df..a113939b0 100644 --- a/src/main/java/it/grid/storm/Main.java +++ b/src/main/java/it/grid/storm/Main.java @@ -4,10 +4,17 @@ import java.io.IOException; +import javax.xml.parsers.ParserConfigurationException; + +import org.apache.commons.configuration.ConfigurationException; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import org.w3c.dom.DOMException; +import org.xml.sax.SAXException; import it.grid.storm.config.Configuration; +import it.grid.storm.namespace.Namespace; +import it.grid.storm.namespace.NamespaceException; import it.grid.storm.startup.Bootstrap; import it.grid.storm.startup.BootstrapException; @@ -17,15 +24,19 @@ public class Main { public static final String DEFAULT_CONFIG_DIR = "/etc/storm/backend-server"; public static final String DEFAULT_CONFIG_FILE = DEFAULT_CONFIG_DIR + "/storm.properties"; + public static final String DEFAULT_NAMESPACE_FILE = DEFAULT_CONFIG_DIR + "/namespace.xml"; + public static final String DEFAULT_NAMESPACE_SCHEMA_FILE = + DEFAULT_CONFIG_DIR + "/namespace-1.5.0.xsd"; public static final String DEFAULT_LOGGING_FILE = DEFAULT_CONFIG_DIR + "/logging.xml"; private Main() {} public static void main(String[] args) { - log.debug("Configure logging from {} ...", DEFAULT_LOGGING_FILE); + log.info("Configure logging from {} ...", DEFAULT_LOGGING_FILE); Bootstrap.configureLogging(DEFAULT_LOGGING_FILE); - log.debug("Load configuration from {} ...", DEFAULT_CONFIG_FILE); + + log.info("Load configuration from {} ...", DEFAULT_CONFIG_FILE); try { Configuration.init(DEFAULT_CONFIG_FILE); } catch (IOException e) { @@ -33,7 +44,16 @@ public static void main(String[] args) { exit(1); } - StoRM storm = new StoRM(Configuration.getInstance()); + log.info("Load namespace from {} ...", DEFAULT_NAMESPACE_FILE); + try { + Namespace.init(DEFAULT_NAMESPACE_FILE); + } catch (DOMException | ConfigurationException | ParserConfigurationException | SAXException + | IOException | NamespaceException e) { + log.error(e.getMessage(), e); + exit(1); + } + + StoRM storm = new StoRM(Configuration.getInstance(), Namespace.getInstance()); try { storm.init(); diff --git a/src/main/java/it/grid/storm/StoRM.java b/src/main/java/it/grid/storm/StoRM.java index dfd33ea7c..e720fdb99 100644 --- a/src/main/java/it/grid/storm/StoRM.java +++ b/src/main/java/it/grid/storm/StoRM.java @@ -40,7 +40,6 @@ import it.grid.storm.health.HealthDirector; import it.grid.storm.info.du.DiskUsageService; import it.grid.storm.metrics.StormMetricsReporter; -import it.grid.storm.namespace.NamespaceDirector; import it.grid.storm.namespace.NamespaceInterface; import it.grid.storm.namespace.VirtualFSInterface; import it.grid.storm.rest.RestServer; @@ -93,10 +92,12 @@ public class StoRM { private final Configuration config; private final ReservedSpaceCatalog spaceCatalog; + private final NamespaceInterface namespace; - public StoRM(Configuration config) { + public StoRM(Configuration config, NamespaceInterface namespace) { this.config = config; + this.namespace = namespace; this.spaceCatalog = ReservedSpaceCatalog.getInstance(); this.picker = new AdvancedPicker(); @@ -122,8 +123,6 @@ public void init() throws BootstrapException { configureMetricsReporting(); - NamespaceDirector.init(); - HealthDirector.initializeDirector(); loadPathAuthzDBConfiguration(); @@ -415,7 +414,6 @@ private void configureDiskUsageService() { int delay = config.getDiskUsageServiceInitialDelay(); long period = config.getDiskUsageServiceTasksInterval(); - NamespaceInterface namespace = NamespaceDirector.getNamespace(); List quotaEnabledVfs = namespace.getVFSWithQuotaEnabled(); List sas = namespace.getAllDefinedVFS() .stream() diff --git a/src/main/java/it/grid/storm/asynch/BoL.java b/src/main/java/it/grid/storm/asynch/BoL.java index 32cc02cef..9f3a324cd 100644 --- a/src/main/java/it/grid/storm/asynch/BoL.java +++ b/src/main/java/it/grid/storm/asynch/BoL.java @@ -29,7 +29,7 @@ import it.grid.storm.griduser.AbstractGridUser; import it.grid.storm.griduser.GridUserInterface; import it.grid.storm.namespace.InvalidSURLException; -import it.grid.storm.namespace.NamespaceDirector; +import it.grid.storm.namespace.Namespace; import it.grid.storm.namespace.NamespaceException; import it.grid.storm.namespace.StoRI; import it.grid.storm.namespace.UnapprochableSurlException; @@ -197,7 +197,7 @@ public void doIt() { StoRI fileStoRI = null; try { - fileStoRI = NamespaceDirector.getNamespace().resolveStoRIbySURL(surl, gu); + fileStoRI = Namespace.getInstance().resolveStoRIbySURL(surl, gu); } catch (IllegalArgumentException e) { log.error( "Unable to build a stori for surl '{}' and user '{}'. " + "IllegalArgumentException: {}", diff --git a/src/main/java/it/grid/storm/asynch/BoLFeeder.java b/src/main/java/it/grid/storm/asynch/BoLFeeder.java index 078895705..c924b97c7 100644 --- a/src/main/java/it/grid/storm/asynch/BoLFeeder.java +++ b/src/main/java/it/grid/storm/asynch/BoLFeeder.java @@ -17,6 +17,11 @@ package it.grid.storm.asynch; +import java.util.Collection; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + import it.grid.storm.catalogs.BoLChunkCatalog; import it.grid.storm.catalogs.RequestSummaryCatalog; import it.grid.storm.griduser.GridUserInterface; @@ -24,7 +29,7 @@ import it.grid.storm.namespace.InvalidDescendantsFileRequestException; import it.grid.storm.namespace.InvalidDescendantsPathRequestException; import it.grid.storm.namespace.InvalidSURLException; -import it.grid.storm.namespace.NamespaceDirector; +import it.grid.storm.namespace.Namespace; import it.grid.storm.namespace.NamespaceException; import it.grid.storm.namespace.StoRI; import it.grid.storm.namespace.UnapprochableSurlException; @@ -38,11 +43,6 @@ import it.grid.storm.srm.types.TSURL; import it.grid.storm.synchcall.data.DataHelper; -import java.util.Collection; - -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - /** * This class represents a BringOnLine Feeder: the Feeder that will handle the srmBringOnLine * statements. It chops a multifile request, and for each part it checks whether the dir option is @@ -247,7 +247,7 @@ private void manageIsDirectory(BoLPersistentChunkData chunkData) { StoRI stori = null; try { - stori = NamespaceDirector.getNamespace().resolveStoRIbySURL(surl, gu); + stori = Namespace.getInstance().resolveStoRIbySURL(surl, gu); } catch (IllegalArgumentException e) { log.error( "Unable to build a stori for surl {} for user {}. " + "IllegalArgumentException: {}", diff --git a/src/main/java/it/grid/storm/asynch/PtG.java b/src/main/java/it/grid/storm/asynch/PtG.java index c9ec8b5e8..7138d9671 100644 --- a/src/main/java/it/grid/storm/asynch/PtG.java +++ b/src/main/java/it/grid/storm/asynch/PtG.java @@ -36,7 +36,7 @@ import it.grid.storm.griduser.LocalUser; import it.grid.storm.namespace.InvalidGetTURLProtocolException; import it.grid.storm.namespace.InvalidSURLException; -import it.grid.storm.namespace.NamespaceDirector; +import it.grid.storm.namespace.Namespace; import it.grid.storm.namespace.NamespaceException; import it.grid.storm.namespace.StoRI; import it.grid.storm.namespace.TURLBuildingException; @@ -142,7 +142,7 @@ public void doIt() { try { if (!downgradedToAnonymous && requestData instanceof IdentityInputData) { try { - fileStoRI = NamespaceDirector.getNamespace() + fileStoRI = Namespace.getInstance() .resolveStoRIbySURL(surl, ((IdentityInputData) requestData).getUser()); } catch (UnapprochableSurlException e) { unapprochableSurl = true; @@ -161,7 +161,7 @@ public void doIt() { } } else { try { - fileStoRI = NamespaceDirector.getNamespace().resolveStoRIbySURL(requestData.getSURL()); + fileStoRI = Namespace.getInstance().resolveStoRIbySURL(requestData.getSURL()); } catch (UnapprochableSurlException e) { failure = true; log.info("Unable to build a stori for surl {}. " + "UnapprochableSurlException: {}", surl, @@ -198,7 +198,7 @@ public void doIt() { } else { if (requestData.getTransferProtocols().allows(Protocol.HTTP)) { try { - fileStoRI = NamespaceDirector.getNamespace().resolveStoRIbySURL(requestData.getSURL()); + fileStoRI = Namespace.getInstance().resolveStoRIbySURL(requestData.getSURL()); } catch (UnapprochableSurlException e) { failure = true; log.info("Unable to build a stori for surl {}. " + "UnapprochableSurlException: {}", diff --git a/src/main/java/it/grid/storm/asynch/PtGFeeder.java b/src/main/java/it/grid/storm/asynch/PtGFeeder.java index b4c08e6ca..ca90eaddf 100644 --- a/src/main/java/it/grid/storm/asynch/PtGFeeder.java +++ b/src/main/java/it/grid/storm/asynch/PtGFeeder.java @@ -17,13 +17,18 @@ package it.grid.storm.asynch; +import java.util.Collection; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + import it.grid.storm.catalogs.PtGChunkCatalog; import it.grid.storm.catalogs.RequestSummaryCatalog; import it.grid.storm.namespace.InvalidDescendantsEmptyRequestException; import it.grid.storm.namespace.InvalidDescendantsFileRequestException; import it.grid.storm.namespace.InvalidDescendantsPathRequestException; import it.grid.storm.namespace.InvalidSURLException; -import it.grid.storm.namespace.NamespaceDirector; +import it.grid.storm.namespace.Namespace; import it.grid.storm.namespace.NamespaceException; import it.grid.storm.namespace.StoRI; import it.grid.storm.namespace.UnapprochableSurlException; @@ -37,11 +42,6 @@ import it.grid.storm.srm.types.TSURL; import it.grid.storm.synchcall.data.DataHelper; -import java.util.Collection; - -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - /** * This class represents a PrepareToGet Feeder: the Feeder that will handle the srmPrepareToGet * statements. It chops a multifile request, and for each part it checks whether the dir option is @@ -263,7 +263,7 @@ private void manageIsDirectory(PtGPersistentChunkData chunkData) { /* Build StoRI for current chunk */ StoRI stori = null; try { - stori = NamespaceDirector.getNamespace().resolveStoRIbySURL(surl, chunkData.getUser()); + stori = Namespace.getInstance().resolveStoRIbySURL(surl, chunkData.getUser()); } catch (IllegalArgumentException e) { log.error( "Unable to build a stori for surl {} for user {}. " + "IllegalArgumentException: {}", diff --git a/src/main/java/it/grid/storm/asynch/PtP.java b/src/main/java/it/grid/storm/asynch/PtP.java index c8b288835..72d0f41d9 100644 --- a/src/main/java/it/grid/storm/asynch/PtP.java +++ b/src/main/java/it/grid/storm/asynch/PtP.java @@ -37,7 +37,7 @@ import it.grid.storm.namespace.ExpiredSpaceTokenException; import it.grid.storm.namespace.InvalidGetTURLProtocolException; import it.grid.storm.namespace.InvalidSURLException; -import it.grid.storm.namespace.NamespaceDirector; +import it.grid.storm.namespace.Namespace; import it.grid.storm.namespace.NamespaceException; import it.grid.storm.namespace.StoRI; import it.grid.storm.namespace.TURLBuildingException; @@ -181,10 +181,10 @@ public void doIt() { try { if (requestData instanceof IdentityInputData) { - fileStoRI = NamespaceDirector.getNamespace() + fileStoRI = Namespace.getInstance() .resolveStoRIbySURL(surl, ((IdentityInputData) requestData).getUser()); } else { - fileStoRI = NamespaceDirector.getNamespace().resolveStoRIbySURL(surl); + fileStoRI = Namespace.getInstance().resolveStoRIbySURL(surl); } } catch (UnapprochableSurlException e) { @@ -487,7 +487,7 @@ private void updateUsedSpace(LocalFile dir) { VirtualFSInterface vfs; try { - vfs = NamespaceDirector.getNamespace().resolveVFSbyLocalFile(dir); + vfs = Namespace.getInstance().resolveVFSbyLocalFile(dir); } catch (NamespaceException e) { log.error("srmPtP: Error during used space update - {}", e.getMessage()); return; diff --git a/src/main/java/it/grid/storm/authz/remote/resource/PermissionEvaluator.java b/src/main/java/it/grid/storm/authz/remote/resource/PermissionEvaluator.java index a6fa89cb8..c759600fd 100644 --- a/src/main/java/it/grid/storm/authz/remote/resource/PermissionEvaluator.java +++ b/src/main/java/it/grid/storm/authz/remote/resource/PermissionEvaluator.java @@ -41,7 +41,7 @@ import it.grid.storm.griduser.FQAN; import it.grid.storm.griduser.GridUserInterface; import it.grid.storm.griduser.GridUserManager; -import it.grid.storm.namespace.NamespaceDirector; +import it.grid.storm.namespace.Namespace; import it.grid.storm.namespace.NamespaceException; import it.grid.storm.namespace.VirtualFSInterface; import it.grid.storm.namespace.model.MappingRule; @@ -68,7 +68,7 @@ static Boolean evaluateVomsGridUserPermission(String DNDecoded, String FQANSDeco VirtualFSInterface fileVFS; try { - fileVFS = NamespaceDirector.getNamespace().resolveVFSbyAbsolutePath(filePathDecoded); + fileVFS = Namespace.getInstance().resolveVFSbyAbsolutePath(filePathDecoded); } catch (NamespaceException e) { log.error("Unable to determine a VFS that maps the requested file " + "path '{}'. NamespaceException: {}", filePathDecoded, e.getMessage()); @@ -110,7 +110,7 @@ static Boolean evaluateVomsGridUserPermission(String DNDecoded, String FQANSDeco VirtualFSInterface fileVFS; try { - fileVFS = NamespaceDirector.getNamespace().resolveVFSbyAbsolutePath(filePathDecoded); + fileVFS = Namespace.getInstance().resolveVFSbyAbsolutePath(filePathDecoded); } catch (NamespaceException e) { log.error("Unable to determine a VFS that maps the requested file " + "path '{}'. NamespaceException: {}", filePathDecoded, e.getMessage()); @@ -134,7 +134,7 @@ static Boolean evaluateAnonymousPermission(String filePathDecoded, PathOperation VirtualFSInterface fileVFS; try { - fileVFS = NamespaceDirector.getNamespace().resolveVFSbyAbsolutePath(filePathDecoded); + fileVFS = Namespace.getInstance().resolveVFSbyAbsolutePath(filePathDecoded); } catch (NamespaceException e) { log.error("Unable to determine a VFS that maps the requested file " + "path '{}'. NamespaceException: {}", filePathDecoded, e.getMessage()); @@ -156,7 +156,7 @@ static Boolean evaluateAnonymousPermission(String filePathDecoded, SRMFileReques VirtualFSInterface fileVFS; try { - fileVFS = NamespaceDirector.getNamespace().resolveVFSbyAbsolutePath(filePathDecoded); + fileVFS = Namespace.getInstance().resolveVFSbyAbsolutePath(filePathDecoded); } catch (NamespaceException e) { log.error("Unable to determine a VFS that maps the requested file " + "path '{}'. NamespaceException: {}", filePathDecoded, e.getMessage()); diff --git a/src/main/java/it/grid/storm/catalogs/VolatileAndJiTCatalog.java b/src/main/java/it/grid/storm/catalogs/VolatileAndJiTCatalog.java index 97a544511..0af59a4e6 100644 --- a/src/main/java/it/grid/storm/catalogs/VolatileAndJiTCatalog.java +++ b/src/main/java/it/grid/storm/catalogs/VolatileAndJiTCatalog.java @@ -37,7 +37,7 @@ import it.grid.storm.filesystem.FilesystemPermission; import it.grid.storm.filesystem.LocalFile; import it.grid.storm.griduser.LocalUser; -import it.grid.storm.namespace.NamespaceDirector; +import it.grid.storm.namespace.Namespace; import it.grid.storm.persistence.dao.VolatileAndJiTDAO; import it.grid.storm.persistence.impl.mysql.VolatileAndJiTDAOMySql; import it.grid.storm.persistence.model.JiTData; @@ -277,7 +277,7 @@ public synchronized void purge() { log.info("VolatileAndJiT CATALOG. Removing ACL {} on file {} for " + "user {},{}", jitacl, jitfile, jituid, jitgid); LocalFile auxFile = - NamespaceDirector.getNamespace().resolveStoRIbyPFN(PFN.make(jitfile)).getLocalFile(); + Namespace.getInstance().resolveStoRIbyPFN(PFN.make(jitfile)).getLocalFile(); LocalUser auxUser = new LocalUser(jituid, jitgid); FilesystemPermission auxACL = new FilesystemPermission(jitacl); @@ -308,7 +308,7 @@ public synchronized void purge() { try { log.info("VolatileAndJiT CATALOG. Deleting file {}", auxPFN); LocalFile auxFile = - NamespaceDirector.getNamespace().resolveStoRIbyPFN(PFN.make(auxPFN)).getLocalFile(); + Namespace.getInstance().resolveStoRIbyPFN(PFN.make(auxPFN)).getLocalFile(); boolean ok = auxFile.delete(); if (!ok) { throw new Exception("Java File deletion failed!"); diff --git a/src/main/java/it/grid/storm/check/SimpleCheckManager.java b/src/main/java/it/grid/storm/check/SimpleCheckManager.java index 41c3d0e23..c33f9c4f4 100644 --- a/src/main/java/it/grid/storm/check/SimpleCheckManager.java +++ b/src/main/java/it/grid/storm/check/SimpleCheckManager.java @@ -24,7 +24,7 @@ import it.grid.storm.check.sanity.filesystem.NamespaceFSExtendedACLUsageCheck; import it.grid.storm.check.sanity.filesystem.NamespaceFSExtendedAttributeUsageCheck; import it.grid.storm.filesystem.MtabUtil; -import it.grid.storm.namespace.NamespaceDirector; +import it.grid.storm.namespace.Namespace; import it.grid.storm.namespace.VirtualFSInterface; /** @@ -77,7 +77,7 @@ private Check getNamespaceFSAssociationCheck() { if (log.isDebugEnabled()) { log.debug("Retrieved MountPoints: {}", printMapCouples(mountPoints)); } - List vfsSet = NamespaceDirector.getNamespace().getAllDefinedVFS(); + List vfsSet = Namespace.getInstance().getAllDefinedVFS(); return new NamespaceFSAssociationCheck(mountPoints, vfsSet); } diff --git a/src/main/java/it/grid/storm/check/sanity/filesystem/NamespaceFSExtendedACLUsageCheck.java b/src/main/java/it/grid/storm/check/sanity/filesystem/NamespaceFSExtendedACLUsageCheck.java index de3d9ab45..a05698ffa 100644 --- a/src/main/java/it/grid/storm/check/sanity/filesystem/NamespaceFSExtendedACLUsageCheck.java +++ b/src/main/java/it/grid/storm/check/sanity/filesystem/NamespaceFSExtendedACLUsageCheck.java @@ -10,6 +10,13 @@ */ package it.grid.storm.check.sanity.filesystem; +import java.io.File; +import java.io.IOException; +import java.util.Calendar; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + import it.grid.storm.check.Check; import it.grid.storm.check.CheckResponse; import it.grid.storm.check.CheckStatus; @@ -19,14 +26,9 @@ import it.grid.storm.griduser.CannotMapUserException; import it.grid.storm.griduser.GridUserInterface; import it.grid.storm.griduser.LocalUser; -import it.grid.storm.namespace.NamespaceDirector; +import it.grid.storm.namespace.Namespace; import it.grid.storm.namespace.NamespaceException; import it.grid.storm.namespace.VirtualFSInterface; -import java.io.File; -import java.io.IOException; -import java.util.Calendar; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; /** * @author Michele Dibenedetto @@ -64,7 +66,7 @@ public CheckResponse execute() throws GenericCheckException { } try { // load declared file systems from namespace.xml - for (VirtualFSInterface vfs : NamespaceDirector.getNamespace().getAllDefinedVFS()) { + for (VirtualFSInterface vfs : Namespace.getInstance().getAllDefinedVFS()) { String fsRootPath = vfs.getRootPath().trim(); if (fsRootPath.charAt(fsRootPath.length() - 1) != File.separatorChar) { fsRootPath += File.separatorChar; diff --git a/src/main/java/it/grid/storm/check/sanity/filesystem/NamespaceFSExtendedAttributeUsageCheck.java b/src/main/java/it/grid/storm/check/sanity/filesystem/NamespaceFSExtendedAttributeUsageCheck.java index a46239211..a10f62851 100644 --- a/src/main/java/it/grid/storm/check/sanity/filesystem/NamespaceFSExtendedAttributeUsageCheck.java +++ b/src/main/java/it/grid/storm/check/sanity/filesystem/NamespaceFSExtendedAttributeUsageCheck.java @@ -25,7 +25,7 @@ import it.grid.storm.ea.ExtendedAttributes; import it.grid.storm.ea.ExtendedAttributesException; import it.grid.storm.ea.ExtendedAttributesFactory; -import it.grid.storm.namespace.NamespaceDirector; +import it.grid.storm.namespace.Namespace; import it.grid.storm.namespace.VirtualFSInterface; /** @@ -69,7 +69,7 @@ public CheckResponse execute() throws GenericCheckException { CheckStatus status = CheckStatus.SUCCESS; String errorMessage = ""; // load declared file systems from namespace.xml - for (VirtualFSInterface vfs : NamespaceDirector.getNamespace().getAllDefinedVFS()) { + for (VirtualFSInterface vfs : Namespace.getInstance().getAllDefinedVFS()) { String fsRootPath = vfs.getRootPath().trim(); if (fsRootPath.charAt(fsRootPath.length() - 1) != File.separatorChar) { fsRootPath += File.separatorChar; diff --git a/src/main/java/it/grid/storm/info/SpaceInfoManager.java b/src/main/java/it/grid/storm/info/SpaceInfoManager.java index 1f7baf70b..68b1ca32e 100644 --- a/src/main/java/it/grid/storm/info/SpaceInfoManager.java +++ b/src/main/java/it/grid/storm/info/SpaceInfoManager.java @@ -29,7 +29,7 @@ import it.grid.storm.catalogs.ReservedSpaceCatalog; import it.grid.storm.common.types.SizeUnit; import it.grid.storm.config.Configuration; -import it.grid.storm.namespace.NamespaceDirector; +import it.grid.storm.namespace.Namespace; import it.grid.storm.namespace.NamespaceInterface; import it.grid.storm.namespace.VirtualFSInterface; import it.grid.storm.persistence.exceptions.DataAccessException; @@ -51,8 +51,8 @@ public class SpaceInfoManager { // Reference to the Catalog private final ReservedSpaceCatalog spaceCatalog = ReservedSpaceCatalog.getInstance(); - // Reference to the NamespaceDirector - private final NamespaceInterface namespace = NamespaceDirector.getNamespace(); + // Reference to the Namespace + private final NamespaceInterface namespace = Namespace.getInstance(); private SpaceInfoManager() {} diff --git a/src/main/java/it/grid/storm/namespace/Namespace.java b/src/main/java/it/grid/storm/namespace/Namespace.java index 9be643a54..0187263f8 100644 --- a/src/main/java/it/grid/storm/namespace/Namespace.java +++ b/src/main/java/it/grid/storm/namespace/Namespace.java @@ -29,7 +29,13 @@ import java.util.UUID; import java.util.stream.Collectors; +import javax.xml.parsers.ParserConfigurationException; + +import org.apache.commons.configuration.ConfigurationException; import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.w3c.dom.DOMException; +import org.xml.sax.SAXException; import com.google.common.base.Preconditions; import com.google.common.collect.Lists; @@ -43,7 +49,10 @@ import it.grid.storm.griduser.AbstractGridUser; import it.grid.storm.griduser.CannotMapUserException; import it.grid.storm.griduser.GridUserInterface; +import it.grid.storm.namespace.config.NamespaceLoader; import it.grid.storm.namespace.config.NamespaceParser; +import it.grid.storm.namespace.config.xml.XMLNamespaceLoader; +import it.grid.storm.namespace.config.xml.XMLNamespaceParser; import it.grid.storm.namespace.model.ApproachableRule; import it.grid.storm.namespace.model.MappingRule; import it.grid.storm.namespace.model.Quota; @@ -57,12 +66,33 @@ public class Namespace implements NamespaceInterface { + private static Namespace instance = null; + + private static final Logger log = LoggerFactory.getLogger(Namespace.class); + private static final String SPACE_FILE_NAME_SUFFIX = ".space"; private static final char SPACE_FILE_NAME_SEPARATOR = '_'; - private final Logger log = NamespaceDirector.getLogger(); + private final NamespaceParser parser; - public Namespace(NamespaceParser parser) { + public static void init(String namespaceFilePath) throws DOMException, ConfigurationException, + ParserConfigurationException, SAXException, IOException, NamespaceException { + + NamespaceLoader loader = null; + + log.info("Initializing Namespace from {} ...", namespaceFilePath); + loader = new XMLNamespaceLoader(namespaceFilePath); + + instance = new Namespace(new XMLNamespaceParser(loader)); + + log.debug("NAMESPACE INITIALIZATION : ... done!"); + } + + public static Namespace getInstance() { + return instance; + } + + private Namespace(NamespaceParser parser) { this.parser = parser; } diff --git a/src/main/java/it/grid/storm/namespace/NamespaceDirector.java b/src/main/java/it/grid/storm/namespace/NamespaceDirector.java deleted file mode 100644 index 516011eff..000000000 --- a/src/main/java/it/grid/storm/namespace/NamespaceDirector.java +++ /dev/null @@ -1,99 +0,0 @@ -/* - * - * Copyright (c) Istituto Nazionale di Fisica Nucleare (INFN). 2006-2010. - * - * Licensed 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 it.grid.storm.namespace; - -import it.grid.storm.config.Configuration; -import it.grid.storm.namespace.config.NamespaceLoader; -import it.grid.storm.namespace.config.NamespaceParser; -import it.grid.storm.namespace.config.xml.XMLNamespaceLoader; -import it.grid.storm.namespace.config.xml.XMLNamespaceParser; - -import static java.io.File.separatorChar; - -import java.io.IOException; - -import javax.xml.parsers.ParserConfigurationException; - -import org.apache.commons.configuration.ConfigurationException; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.w3c.dom.DOMException; -import org.xml.sax.SAXException; - -public class NamespaceDirector { - - private static final Logger log = LoggerFactory.getLogger(NamespaceDirector.class); - - private static NamespaceInterface namespaceIstance; - private static NamespaceLoader loader; - private static NamespaceParser parser; - - private NamespaceDirector() {} - - public static void init() { - - log.debug("NAMESPACE INITIALIZATION : ... started!"); - Configuration config = Configuration.getInstance(); - String configurationDir = config.getConfigurationDir().getAbsolutePath(); - String namespaceFileName = config.getNamespaceConfigFilename(); - String namespaceAbsoluteFilePath = getNamespaceFileAbsolutePath(configurationDir, namespaceFileName); - - log.info("Initializing Namespace from {} ...", namespaceAbsoluteFilePath); - try { - loader = new XMLNamespaceLoader(namespaceAbsoluteFilePath); - } catch (DOMException | ConfigurationException | ParserConfigurationException | SAXException - | IOException | NamespaceException e) { - log.error(e.getMessage(), e); - System.exit(1); - } - - parser = new XMLNamespaceParser(loader); - namespaceIstance = new Namespace(parser); - - log.debug("NAMESPACE INITIALIZATION : ... done!"); - } - - private static String getNamespaceFileAbsolutePath(String configurationDir, String namespaceFileName) { - - if (configurationDir.charAt(configurationDir.length() - 1) != separatorChar) { - configurationDir += Character.toString(separatorChar); - } - return configurationDir + namespaceFileName; - } - - public static NamespaceInterface getNamespace() { - - return namespaceIstance; - } - - public static NamespaceParser getNamespaceParser() { - - return parser; - } - - public static NamespaceLoader getNamespaceLoader() { - - return loader; - } - - public static Logger getLogger() { - - return log; - } - -} diff --git a/src/main/java/it/grid/storm/namespace/StoRIImpl.java b/src/main/java/it/grid/storm/namespace/StoRIImpl.java index 5bbadc04d..d35bdac7a 100644 --- a/src/main/java/it/grid/storm/namespace/StoRIImpl.java +++ b/src/main/java/it/grid/storm/namespace/StoRIImpl.java @@ -17,6 +17,19 @@ package it.grid.storm.namespace; +import static org.apache.commons.lang.StringUtils.join; + +import java.io.File; +import java.net.UnknownHostException; +import java.util.ArrayList; +import java.util.Calendar; +import java.util.Collection; +import java.util.Date; +import java.util.List; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + import it.grid.storm.balancer.BalancingStrategy; import it.grid.storm.balancer.BalancingStrategyException; import it.grid.storm.balancer.Node; @@ -49,21 +62,9 @@ import it.grid.storm.srm.types.TSpaceToken; import it.grid.storm.srm.types.TTURL; -import static org.apache.commons.lang.StringUtils.join; - -import java.io.File; -import java.net.UnknownHostException; -import java.util.ArrayList; -import java.util.Calendar; -import java.util.Collection; -import java.util.Date; -import java.util.List; - -import org.slf4j.Logger; - public class StoRIImpl implements StoRI { - private Logger log = NamespaceDirector.getLogger(); + private Logger log = LoggerFactory.getLogger(StoRIImpl.class); private final Configuration config = Configuration.getInstance(); @@ -291,7 +292,7 @@ public ArrayList getChildren(TDirOption dirOption) log.debug("SURL point to an EMPTY DIRECTORY"); throw new InvalidDescendantsEmptyRequestException(fileHandle, pathList); } else { // Creation of StoRI LIST - NamespaceInterface namespace = NamespaceDirector.getNamespace(); + NamespaceInterface namespace = Namespace.getInstance(); for (String childPath : pathList) { log.debug(":Creation of new StoRI with path: {}", childPath); try { diff --git a/src/main/java/it/grid/storm/namespace/TURLBuilder.java b/src/main/java/it/grid/storm/namespace/TURLBuilder.java index 52c43d308..226a0a578 100644 --- a/src/main/java/it/grid/storm/namespace/TURLBuilder.java +++ b/src/main/java/it/grid/storm/namespace/TURLBuilder.java @@ -17,6 +17,9 @@ package it.grid.storm.namespace; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + import it.grid.storm.common.types.PFN; import it.grid.storm.config.Configuration; import it.grid.storm.namespace.model.Authority; @@ -24,11 +27,9 @@ import it.grid.storm.srm.types.InvalidTTURLAttributesException; import it.grid.storm.srm.types.TTURL; -import org.slf4j.Logger; - public class TURLBuilder { - private static Logger log = NamespaceDirector.getLogger(); + private static Logger log = LoggerFactory.getLogger(TURLBuilder.class); public TURLBuilder() { diff --git a/src/main/java/it/grid/storm/namespace/config/NamespaceCheck.java b/src/main/java/it/grid/storm/namespace/config/NamespaceCheck.java index bf696c36e..80ecba6af 100644 --- a/src/main/java/it/grid/storm/namespace/config/NamespaceCheck.java +++ b/src/main/java/it/grid/storm/namespace/config/NamespaceCheck.java @@ -17,15 +17,6 @@ package it.grid.storm.namespace.config; -import it.grid.storm.namespace.CapabilityInterface; -import it.grid.storm.namespace.NamespaceDirector; -import it.grid.storm.namespace.VirtualFSInterface; -import it.grid.storm.namespace.model.ACLEntry; -import it.grid.storm.namespace.model.ApproachableRule; -import it.grid.storm.namespace.model.DefaultACL; -import it.grid.storm.namespace.model.MappingRule; -import it.grid.storm.namespace.util.userinfo.LocalGroups; - import java.io.File; import java.util.ArrayList; import java.util.Iterator; @@ -33,6 +24,15 @@ import java.util.Map; import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import it.grid.storm.namespace.CapabilityInterface; +import it.grid.storm.namespace.VirtualFSInterface; +import it.grid.storm.namespace.model.ACLEntry; +import it.grid.storm.namespace.model.ApproachableRule; +import it.grid.storm.namespace.model.DefaultACL; +import it.grid.storm.namespace.model.MappingRule; +import it.grid.storm.namespace.util.userinfo.LocalGroups; /** *

@@ -56,7 +56,7 @@ */ public class NamespaceCheck { - private final Logger log = NamespaceDirector.getLogger(); + private final Logger log = LoggerFactory.getLogger(NamespaceCheck.class); private final Map vfss; private final Map maprules; private final Map apprules; diff --git a/src/main/java/it/grid/storm/namespace/config/xml/XMLNamespaceParser.java b/src/main/java/it/grid/storm/namespace/config/xml/XMLNamespaceParser.java index 2528a9a0d..3c02aa424 100644 --- a/src/main/java/it/grid/storm/namespace/config/xml/XMLNamespaceParser.java +++ b/src/main/java/it/grid/storm/namespace/config/xml/XMLNamespaceParser.java @@ -30,6 +30,7 @@ import org.apache.commons.configuration.ConfigurationException; import org.apache.commons.configuration.XMLConfiguration; import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import com.google.common.collect.Maps; @@ -37,7 +38,6 @@ import it.grid.storm.check.sanity.filesystem.SupportedFSType; import it.grid.storm.namespace.CapabilityInterface; import it.grid.storm.namespace.DefaultValuesInterface; -import it.grid.storm.namespace.NamespaceDirector; import it.grid.storm.namespace.NamespaceException; import it.grid.storm.namespace.PropertyInterface; import it.grid.storm.namespace.VirtualFSInterface; @@ -93,7 +93,7 @@ public class XMLNamespaceParser implements NamespaceParser { - private final Logger log = NamespaceDirector.getLogger(); + private final Logger log = LoggerFactory.getLogger(XMLNamespaceParser.class); private String version; private Map vfss; diff --git a/src/main/java/it/grid/storm/namespace/model/ApproachableRule.java b/src/main/java/it/grid/storm/namespace/model/ApproachableRule.java index 668db52e7..92cad6e05 100644 --- a/src/main/java/it/grid/storm/namespace/model/ApproachableRule.java +++ b/src/main/java/it/grid/storm/namespace/model/ApproachableRule.java @@ -17,16 +17,16 @@ package it.grid.storm.namespace.model; -import it.grid.storm.griduser.AbstractGridUser; -import it.grid.storm.griduser.DistinguishedName; -import it.grid.storm.griduser.GridUserInterface; -import it.grid.storm.namespace.NamespaceDirector; -import it.grid.storm.namespace.VirtualFSInterface; - import java.util.LinkedList; import java.util.List; import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import it.grid.storm.griduser.AbstractGridUser; +import it.grid.storm.griduser.DistinguishedName; +import it.grid.storm.griduser.GridUserInterface; +import it.grid.storm.namespace.VirtualFSInterface; /** *

@@ -50,7 +50,7 @@ */ public class ApproachableRule implements Comparable { - private Logger log = NamespaceDirector.getLogger(); + private Logger log = LoggerFactory.getLogger(ApproachableRule.class); private final String ruleName; private final SubjectRules subjectRules; diff --git a/src/main/java/it/grid/storm/namespace/model/Capability.java b/src/main/java/it/grid/storm/namespace/model/Capability.java index 17841fdd1..c09bcce54 100644 --- a/src/main/java/it/grid/storm/namespace/model/Capability.java +++ b/src/main/java/it/grid/storm/namespace/model/Capability.java @@ -17,14 +17,6 @@ package it.grid.storm.namespace.model; -import it.grid.storm.balancer.BalancingStrategy; -import it.grid.storm.balancer.BalancingStrategyFactory; -import it.grid.storm.balancer.Node; -import it.grid.storm.balancer.ftp.FTPNode; -import it.grid.storm.namespace.CapabilityInterface; -import it.grid.storm.namespace.NamespaceDirector; -import it.grid.storm.namespace.NamespaceException; - import java.util.ArrayList; import java.util.Hashtable; import java.util.LinkedList; @@ -32,6 +24,14 @@ import java.util.Map; import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import it.grid.storm.balancer.BalancingStrategy; +import it.grid.storm.balancer.BalancingStrategyFactory; +import it.grid.storm.balancer.Node; +import it.grid.storm.balancer.ftp.FTPNode; +import it.grid.storm.namespace.CapabilityInterface; +import it.grid.storm.namespace.NamespaceException; /** *

@@ -56,7 +56,7 @@ public class Capability implements CapabilityInterface { - private Logger log = NamespaceDirector.getLogger(); + private Logger log = LoggerFactory.getLogger(Capability.class); private ACLMode aclMode = ACLMode.UNDEF; private Quota quota = null; // List of TransportProtocol by Protocol. diff --git a/src/main/java/it/grid/storm/namespace/model/DefaultValues.java b/src/main/java/it/grid/storm/namespace/model/DefaultValues.java index 77833f51b..7d45f2f07 100644 --- a/src/main/java/it/grid/storm/namespace/model/DefaultValues.java +++ b/src/main/java/it/grid/storm/namespace/model/DefaultValues.java @@ -17,10 +17,12 @@ package it.grid.storm.namespace.model; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + import it.grid.storm.common.types.SizeUnit; import it.grid.storm.common.types.TimeUnit; import it.grid.storm.namespace.DefaultValuesInterface; -import it.grid.storm.namespace.NamespaceDirector; import it.grid.storm.namespace.NamespaceException; import it.grid.storm.srm.types.InvalidTSizeAttributesException; import it.grid.storm.srm.types.TFileStorageType; @@ -28,8 +30,6 @@ import it.grid.storm.srm.types.TSizeInBytes; import it.grid.storm.srm.types.TSpaceType; -import org.slf4j.Logger; - /** *

* Title: @@ -52,7 +52,7 @@ */ public class DefaultValues implements DefaultValuesInterface { - private Logger log = NamespaceDirector.getLogger(); + private Logger log = LoggerFactory.getLogger(DefaultValues.class); private SpaceDefault spaceDefault; private FileDefault fileDefault; diff --git a/src/main/java/it/grid/storm/namespace/model/Property.java b/src/main/java/it/grid/storm/namespace/model/Property.java index 2a0dce335..3260f80e4 100644 --- a/src/main/java/it/grid/storm/namespace/model/Property.java +++ b/src/main/java/it/grid/storm/namespace/model/Property.java @@ -17,18 +17,18 @@ package it.grid.storm.namespace.model; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + import it.grid.storm.common.types.SizeUnit; -import it.grid.storm.namespace.NamespaceDirector; import it.grid.storm.namespace.NamespaceException; import it.grid.storm.namespace.PropertyInterface; import it.grid.storm.srm.types.InvalidTSizeAttributesException; import it.grid.storm.srm.types.TSizeInBytes; -import org.slf4j.Logger; - public class Property implements PropertyInterface { - private Logger log = NamespaceDirector.getLogger(); + private Logger log = LoggerFactory.getLogger(Property.class); private TSizeInBytes totalOnlineSize = TSizeInBytes.makeEmpty(); private TSizeInBytes totalNearlineSize = TSizeInBytes.makeEmpty(); private RetentionPolicy retentionPolicy = RetentionPolicy.UNKNOWN; @@ -157,7 +157,7 @@ public boolean isOnlineSpaceLimited() { */ public static class SizeUnitType { - private Logger log = NamespaceDirector.getLogger(); + private Logger log = LoggerFactory.getLogger(SizeUnitType.class); /** * mappingRules = new ArrayList(); - List approachableRules = new ArrayList(); + List mappingRules = Lists.newArrayList(); + List approachableRules = Lists.newArrayList(); Configuration config; StorageClassType storageClass = null; TSpaceToken spaceToken; @@ -1319,8 +1320,7 @@ public void storeSpaceByToken(StorageSpaceData spaceData) public StoRI retrieveSpaceFileByPFN(PFN pfn, long totalSize) throws NamespaceException { - NamespaceInterface namespace = NamespaceDirector.getNamespace(); - StoRI stori = namespace.resolveStoRIbyPFN(pfn); + StoRI stori = Namespace.getInstance().resolveStoRIbyPFN(pfn); stori.setStoRIType(StoRIType.SPACE); // Create the Space istance log.debug("VFS: retrieveSpace, relative {}-{}", stori.getRelativePath(), stori); diff --git a/src/main/java/it/grid/storm/namespace/naming/NamespaceUtil.java b/src/main/java/it/grid/storm/namespace/naming/NamespaceUtil.java index f25e0cd6f..5d65ddba2 100644 --- a/src/main/java/it/grid/storm/namespace/naming/NamespaceUtil.java +++ b/src/main/java/it/grid/storm/namespace/naming/NamespaceUtil.java @@ -29,7 +29,7 @@ import com.google.common.collect.Lists; import it.grid.storm.griduser.VONameMatchingRule; -import it.grid.storm.namespace.NamespaceDirector; +import it.grid.storm.namespace.Namespace; import it.grid.storm.namespace.NamespaceException; import it.grid.storm.namespace.VirtualFSInterface; import it.grid.storm.namespace.model.MappingRule; @@ -103,7 +103,7 @@ public static String getFileName(String stfn) { */ public static Collection getResidentVFS(String mountPointPath) { - List vfsSet = NamespaceDirector.getNamespace().getAllDefinedVFS(); + List vfsSet = Namespace.getInstance().getAllDefinedVFS(); for (VirtualFSInterface vfs : vfsSet) { String vfsRootPath; boolean enclosed; diff --git a/src/main/java/it/grid/storm/namespace/naming/SURL.java b/src/main/java/it/grid/storm/namespace/naming/SURL.java index 86d88dc2d..acae9165e 100644 --- a/src/main/java/it/grid/storm/namespace/naming/SURL.java +++ b/src/main/java/it/grid/storm/namespace/naming/SURL.java @@ -17,20 +17,20 @@ package it.grid.storm.namespace.naming; -import it.grid.storm.namespace.NamespaceDirector; -import it.grid.storm.namespace.NamespaceException; -import it.grid.storm.namespace.model.Protocol; - import java.net.URI; import java.util.Set; import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import com.google.common.collect.Sets; +import it.grid.storm.namespace.NamespaceException; +import it.grid.storm.namespace.model.Protocol; + public class SURL extends SRMURL { - private static Logger log = NamespaceDirector.getLogger(); + private static Logger log = LoggerFactory.getLogger(SURL.class); private static Set schemes = Sets.newHashSet("srm"); private static Set servicePaths = Sets.newHashSet("/srm/managerv2", "/srm/managerv1"); diff --git a/src/main/java/it/grid/storm/namespace/remote/resource/VirtualFSResource.java b/src/main/java/it/grid/storm/namespace/remote/resource/VirtualFSResource.java index 4643456b8..dca595cb2 100644 --- a/src/main/java/it/grid/storm/namespace/remote/resource/VirtualFSResource.java +++ b/src/main/java/it/grid/storm/namespace/remote/resource/VirtualFSResource.java @@ -13,7 +13,7 @@ import com.google.common.collect.Maps; -import it.grid.storm.namespace.NamespaceDirector; +import it.grid.storm.namespace.Namespace; import it.grid.storm.namespace.NamespaceException; import it.grid.storm.namespace.VirtualFSInterface; import it.grid.storm.namespace.model.SAInfo; @@ -36,7 +36,7 @@ public class VirtualFSResource { public Map listVFS() { log.debug("Serving VFS resource listing"); - List vfsCollection = NamespaceDirector.getNamespace().getAllDefinedVFS(); + List vfsCollection = Namespace.getInstance().getAllDefinedVFS(); Map output = Maps.newHashMap(); for (VirtualFSInterface vfs : vfsCollection) { diff --git a/src/main/java/it/grid/storm/namespace/remote/resource/VirtualFSResourceCompat_1_0.java b/src/main/java/it/grid/storm/namespace/remote/resource/VirtualFSResourceCompat_1_0.java index b18da5365..f50a797ff 100644 --- a/src/main/java/it/grid/storm/namespace/remote/resource/VirtualFSResourceCompat_1_0.java +++ b/src/main/java/it/grid/storm/namespace/remote/resource/VirtualFSResourceCompat_1_0.java @@ -13,7 +13,7 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import it.grid.storm.namespace.NamespaceDirector; +import it.grid.storm.namespace.Namespace; import it.grid.storm.namespace.NamespaceException; import it.grid.storm.namespace.VirtualFSInterface; import it.grid.storm.namespace.model.MappingRule; @@ -37,7 +37,7 @@ public String listVFS() { log.info("Serving VFS resource listing"); String vfsListString = ""; - List vfsCollection = NamespaceDirector.getNamespace().getAllDefinedVFS(); + List vfsCollection = Namespace.getInstance().getAllDefinedVFS(); for (VirtualFSInterface vfs : vfsCollection) { if (!vfsListString.equals("")) { vfsListString += Constants.VFS_LIST_SEPARATOR; diff --git a/src/main/java/it/grid/storm/namespace/remote/resource/VirtualFSResourceCompat_1_1.java b/src/main/java/it/grid/storm/namespace/remote/resource/VirtualFSResourceCompat_1_1.java index 7d539251e..6b92c7d4b 100644 --- a/src/main/java/it/grid/storm/namespace/remote/resource/VirtualFSResourceCompat_1_1.java +++ b/src/main/java/it/grid/storm/namespace/remote/resource/VirtualFSResourceCompat_1_1.java @@ -14,7 +14,7 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import it.grid.storm.namespace.NamespaceDirector; +import it.grid.storm.namespace.Namespace; import it.grid.storm.namespace.NamespaceException; import it.grid.storm.namespace.VirtualFSInterface; import it.grid.storm.namespace.model.MappingRule; @@ -39,7 +39,7 @@ public String listVFS() { log.info("Serving VFS resource listing"); String vfsListString = ""; - List vfsCollection = NamespaceDirector.getNamespace().getAllDefinedVFS(); + List vfsCollection = Namespace.getInstance().getAllDefinedVFS(); for (VirtualFSInterface vfs : vfsCollection) { if (!vfsListString.equals("")) { vfsListString += Constants.VFS_LIST_SEPARATOR; diff --git a/src/main/java/it/grid/storm/namespace/remote/resource/VirtualFSResourceCompat_1_2.java b/src/main/java/it/grid/storm/namespace/remote/resource/VirtualFSResourceCompat_1_2.java index f65a927f7..1d8604961 100644 --- a/src/main/java/it/grid/storm/namespace/remote/resource/VirtualFSResourceCompat_1_2.java +++ b/src/main/java/it/grid/storm/namespace/remote/resource/VirtualFSResourceCompat_1_2.java @@ -19,7 +19,7 @@ import com.google.common.collect.Lists; -import it.grid.storm.namespace.NamespaceDirector; +import it.grid.storm.namespace.Namespace; import it.grid.storm.namespace.NamespaceException; import it.grid.storm.namespace.VirtualFSInterface; import it.grid.storm.namespace.model.MappingRule; @@ -44,7 +44,7 @@ public class VirtualFSResourceCompat_1_2 { public String listVFS() { log.info("Serving VFS resource listing"); - List vfsCollection = NamespaceDirector.getNamespace().getAllDefinedVFS(); + List vfsCollection = Namespace.getInstance().getAllDefinedVFS(); List encodedVFSs = Lists.newArrayList(); vfsCollection.forEach(vfs -> { try { diff --git a/src/main/java/it/grid/storm/persistence/impl/mysql/PtGChunkDAOMySql.java b/src/main/java/it/grid/storm/persistence/impl/mysql/PtGChunkDAOMySql.java index c7d76a65c..d254e5a35 100644 --- a/src/main/java/it/grid/storm/persistence/impl/mysql/PtGChunkDAOMySql.java +++ b/src/main/java/it/grid/storm/persistence/impl/mysql/PtGChunkDAOMySql.java @@ -47,7 +47,7 @@ import com.google.common.collect.Sets; import it.grid.storm.ea.StormEA; -import it.grid.storm.namespace.NamespaceDirector; +import it.grid.storm.namespace.Namespace; import it.grid.storm.namespace.NamespaceException; import it.grid.storm.namespace.StoRI; import it.grid.storm.namespace.naming.SURL; @@ -975,7 +975,7 @@ public synchronized Collection transitExpiredSRM_FILE_PINNED() { expiredSurlList.add(surl); StoRI stori; try { - stori = NamespaceDirector.getNamespace().resolveStoRIbySURL(surl); + stori = Namespace.getInstance().resolveStoRIbySURL(surl); } catch (Throwable e) { log.error("Invalid SURL {} cannot release the pin. {}: {}", surlEntry.getKey(), e.getClass().getCanonicalName(), e.getMessage(), e); diff --git a/src/main/java/it/grid/storm/rest/RestServer.java b/src/main/java/it/grid/storm/rest/RestServer.java index 4b9af0416..89ea24e7a 100644 --- a/src/main/java/it/grid/storm/rest/RestServer.java +++ b/src/main/java/it/grid/storm/rest/RestServer.java @@ -52,6 +52,7 @@ import it.grid.storm.namespace.remote.resource.VirtualFSResourceCompat_1_1; import it.grid.storm.namespace.remote.resource.VirtualFSResourceCompat_1_2; import it.grid.storm.rest.auth.RestTokenFilter; +import it.grid.storm.rest.info.namespace.NamespaceInfoEndpoint; import it.grid.storm.rest.metadata.Metadata; import it.grid.storm.tape.recalltable.providers.TapeRecallTOListMessageBodyWriter; import it.grid.storm.tape.recalltable.resources.TaskResource; @@ -112,15 +113,16 @@ private void configure() { resourceConfig.register(TasksResource.class); resourceConfig.register(TasksCardinality.class); resourceConfig.register(TapeRecallTOListMessageBodyWriter.class); - resourceConfig.register(AuthorizationResource.class); - resourceConfig.register(AuthorizationResourceCompat_1_0.class); - resourceConfig.register(VirtualFSResource.class); - resourceConfig.register(VirtualFSResourceCompat_1_0.class); - resourceConfig.register(VirtualFSResourceCompat_1_1.class); - resourceConfig.register(VirtualFSResourceCompat_1_2.class); - resourceConfig.register(StormEAResource.class); +// resourceConfig.register(AuthorizationResource.class); +// resourceConfig.register(AuthorizationResourceCompat_1_0.class); +// resourceConfig.register(VirtualFSResource.class); +// resourceConfig.register(VirtualFSResourceCompat_1_0.class); +// resourceConfig.register(VirtualFSResourceCompat_1_1.class); +// resourceConfig.register(VirtualFSResourceCompat_1_2.class); + resourceConfig.register(NamespaceInfoEndpoint.class); +// resourceConfig.register(StormEAResource.class); resourceConfig.register(Metadata.class); - resourceConfig.register(Ping.class); +// resourceConfig.register(Ping.class); resourceConfig.register(SpaceStatusResource.class); /* JSON POJO support: */ resourceConfig.register(JacksonFeature.class); diff --git a/src/main/java/it/grid/storm/rest/info/namespace/NamespaceInfoEndpoint.java b/src/main/java/it/grid/storm/rest/info/namespace/NamespaceInfoEndpoint.java new file mode 100644 index 000000000..6901ce0aa --- /dev/null +++ b/src/main/java/it/grid/storm/rest/info/namespace/NamespaceInfoEndpoint.java @@ -0,0 +1,55 @@ +package it.grid.storm.rest.info.namespace; + +import static java.io.File.separatorChar; +import static javax.ws.rs.core.MediaType.APPLICATION_JSON; + +import java.io.IOException; + +import javax.ws.rs.GET; +import javax.ws.rs.Path; +import javax.ws.rs.Produces; + +import com.fasterxml.jackson.core.JsonParseException; +import com.fasterxml.jackson.databind.JsonMappingException; +import com.fasterxml.jackson.dataformat.xml.XmlMapper; + +import it.grid.storm.config.Configuration; +import it.grid.storm.rest.info.namespace.model.Namespace; + +@Path("/info/namespace") +public class NamespaceInfoEndpoint { + + private Namespace info; + + public NamespaceInfoEndpoint() throws JsonParseException, JsonMappingException, IOException { + + buildNamespace(); + } + + private void buildNamespace() throws JsonParseException, JsonMappingException, IOException { + + Configuration config = Configuration.getInstance(); + String configurationDir = config.getConfigurationDir().getAbsolutePath(); + String namespaceFileName = config.getNamespaceConfigFilename(); + String namespaceAbsoluteFilePath = getNamespaceFileAbsolutePath(configurationDir, namespaceFileName); + + // read JSON from namespace.xml + XmlMapper xmlMapper = new XmlMapper(); + info = xmlMapper.readValue(namespaceAbsoluteFilePath, Namespace.class); + } + + @GET + @Produces(APPLICATION_JSON) + public Namespace getNamespace() { + + return info; + } + + private static String getNamespaceFileAbsolutePath(String configurationDir, String namespaceFileName) { + + if (configurationDir.charAt(configurationDir.length() - 1) != separatorChar) { + configurationDir += Character.toString(separatorChar); + } + return configurationDir + namespaceFileName; + } +} diff --git a/src/main/java/it/grid/storm/rest/info/namespace/model/AccessLatency.java b/src/main/java/it/grid/storm/rest/info/namespace/model/AccessLatency.java new file mode 100644 index 000000000..3497d527b --- /dev/null +++ b/src/main/java/it/grid/storm/rest/info/namespace/model/AccessLatency.java @@ -0,0 +1,6 @@ +package it.grid.storm.rest.info.namespace.model; + +public enum AccessLatency { + + online, nearline, offline +} diff --git a/src/main/java/it/grid/storm/rest/info/namespace/model/AclEntry.java b/src/main/java/it/grid/storm/rest/info/namespace/model/AclEntry.java new file mode 100644 index 000000000..6a939f3c4 --- /dev/null +++ b/src/main/java/it/grid/storm/rest/info/namespace/model/AclEntry.java @@ -0,0 +1,34 @@ +package it.grid.storm.rest.info.namespace.model; + +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonInclude.Include; + +@JsonInclude(Include.NON_NULL) +public class AclEntry { + + private String groupName; + private PermissionType permissions; + + @JsonProperty("groupName") + public String getGroupName() { + return groupName; + } + + @JsonProperty("groupName") + public void setGroupName(String groupName) { + this.groupName = groupName; + } + + @JsonProperty("permissions") + public PermissionType getPermissions() { + return permissions; + } + + @JsonProperty("permissions") + public void setPermissions(PermissionType permissions) { + this.permissions = permissions; + } + + +} diff --git a/src/main/java/it/grid/storm/rest/info/namespace/model/AclMode.java b/src/main/java/it/grid/storm/rest/info/namespace/model/AclMode.java new file mode 100644 index 000000000..de77df459 --- /dev/null +++ b/src/main/java/it/grid/storm/rest/info/namespace/model/AclMode.java @@ -0,0 +1,6 @@ +package it.grid.storm.rest.info.namespace.model; + +public enum AclMode { + + AoT, JiT +} diff --git a/src/main/java/it/grid/storm/rest/info/namespace/model/ApproachableRule.java b/src/main/java/it/grid/storm/rest/info/namespace/model/ApproachableRule.java new file mode 100644 index 000000000..ae8e13b2b --- /dev/null +++ b/src/main/java/it/grid/storm/rest/info/namespace/model/ApproachableRule.java @@ -0,0 +1,56 @@ +package it.grid.storm.rest.info.namespace.model; + +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonInclude.Include; + +@JsonInclude(Include.NON_NULL) +public class ApproachableRule { + + private String name; + private Subject subjects; + private String approachableFs; + private Boolean anonymousHttpRead; + + @JsonProperty("name") + public String getName() { + return name; + } + + @JsonProperty("name") + public void setName(String name) { + this.name = name; + } + + @JsonProperty("subjects") + public Subject getSubjects() { + return subjects; + } + + @JsonProperty("subjects") + public void setSubjects(Subject subjects) { + this.subjects = subjects; + } + + @JsonProperty("approachableFs") + public String getApproachableFs() { + return approachableFs; + } + + @JsonProperty("approachable-fs") + public void setApproachableFs(String approachableFs) { + this.approachableFs = approachableFs; + } + + @JsonProperty("anonymousHttpRead") + public Boolean getAnonymousHttpRead() { + return anonymousHttpRead; + } + + @JsonProperty("anonymous-http-read") + public void setAnonymousHttpRead(Boolean anonymousHttpRead) { + this.anonymousHttpRead = anonymousHttpRead; + } + + +} diff --git a/src/main/java/it/grid/storm/rest/info/namespace/model/BalanceStrategy.java b/src/main/java/it/grid/storm/rest/info/namespace/model/BalanceStrategy.java new file mode 100644 index 000000000..35e31311a --- /dev/null +++ b/src/main/java/it/grid/storm/rest/info/namespace/model/BalanceStrategy.java @@ -0,0 +1,19 @@ +package it.grid.storm.rest.info.namespace.model; + +import com.fasterxml.jackson.annotation.JsonValue; + +public enum BalanceStrategy { + + ROUND_ROBIN("round-robin"), RANDOM("random"), WEIGHT("weight"), SMART_ROUND_ROBIN("smart-rr"); + + private String value; + + private BalanceStrategy(String value) { + this.value = value; + } + + @JsonValue + public String getValue() { + return value; + } +} diff --git a/src/main/java/it/grid/storm/rest/info/namespace/model/Capabilities.java b/src/main/java/it/grid/storm/rest/info/namespace/model/Capabilities.java new file mode 100644 index 000000000..a988136ab --- /dev/null +++ b/src/main/java/it/grid/storm/rest/info/namespace/model/Capabilities.java @@ -0,0 +1,69 @@ +package it.grid.storm.rest.info.namespace.model; + +import java.util.List; + +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonInclude.Include; + +@JsonInclude(Include.NON_NULL) +public class Capabilities { + + private AclMode aclMode; + private List defaultAcl; + private List quota; + private List transProt; + private Pool pool; + + @JsonProperty("aclMode") + public AclMode getAclMode() { + return aclMode; + } + + @JsonProperty("aclMode") + public void setAclMode(AclMode aclMode) { + this.aclMode = aclMode; + } + + @JsonProperty("defaultAcl") + public List getDefaultAcl() { + return defaultAcl; + } + + @JsonProperty("default-acl") + public void setDefaultAcl(List defaultAcl) { + this.defaultAcl = defaultAcl; + } + + @JsonProperty("quota") + public List getQuota() { + return quota; + } + + @JsonProperty("quota") + public void setQuota(List quota) { + this.quota = quota; + } + + @JsonProperty("transferProtocols") + public List getTransProt() { + return transProt; + } + + @JsonProperty("trans-prot") + public void setTransProt(List transProt) { + this.transProt = transProt; + } + + @JsonProperty("pool") + public Pool getPool() { + return pool; + } + + @JsonProperty("pool") + public void setPool(Pool pool) { + this.pool = pool; + } + + +} diff --git a/src/main/java/it/grid/storm/rest/info/namespace/model/DefaultAcl.java b/src/main/java/it/grid/storm/rest/info/namespace/model/DefaultAcl.java new file mode 100644 index 000000000..b90e9b04e --- /dev/null +++ b/src/main/java/it/grid/storm/rest/info/namespace/model/DefaultAcl.java @@ -0,0 +1,25 @@ +package it.grid.storm.rest.info.namespace.model; + +import java.util.List; + +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonInclude.Include; + +@JsonInclude(Include.NON_NULL) +public class DefaultAcl { + + private List aclEntry; + + @JsonProperty("aclEntries") + public List getAclEntry() { + return aclEntry; + } + + @JsonProperty("acl-entry") + public void setAclEntry(List aclEntry) { + this.aclEntry = aclEntry; + } + + +} diff --git a/src/main/java/it/grid/storm/rest/info/namespace/model/ExpirationMode.java b/src/main/java/it/grid/storm/rest/info/namespace/model/ExpirationMode.java new file mode 100644 index 000000000..1602f000a --- /dev/null +++ b/src/main/java/it/grid/storm/rest/info/namespace/model/ExpirationMode.java @@ -0,0 +1,6 @@ +package it.grid.storm.rest.info.namespace.model; + +public enum ExpirationMode { + + neverExpire, warnWhenExpire, releaseWhenExpire +} diff --git a/src/main/java/it/grid/storm/rest/info/namespace/model/Filesystem.java b/src/main/java/it/grid/storm/rest/info/namespace/model/Filesystem.java new file mode 100644 index 000000000..1a2e46d68 --- /dev/null +++ b/src/main/java/it/grid/storm/rest/info/namespace/model/Filesystem.java @@ -0,0 +1,122 @@ +package it.grid.storm.rest.info.namespace.model; + +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonInclude.Include; + +@JsonInclude(Include.NON_NULL) +public class Filesystem { + + private String name; + private FilesystemType fsType; + private String spaceTokenDescription; + private StorageClass storageClass; + private String root; + private FilesystemDriver filesystemDriver; + private SpacesystemDriver spacesystemDriver; + private Object storageAreaAuthz; + private Properties properties; + private Capabilities capabilities; + + @JsonProperty("name") + public String getName() { + return name; + } + + @JsonProperty("name") + public void setName(String name) { + this.name = name; + } + + @JsonProperty("fsType") + public FilesystemType getFsType() { + return fsType; + } + + @JsonProperty("fs_type") + public void setFsType(FilesystemType fsType) { + this.fsType = fsType; + } + + @JsonProperty("spaceToken") + public String getSpaceTokenDescription() { + return spaceTokenDescription; + } + + @JsonProperty("space-token-description") + public void setSpaceTokenDescription(String spaceTokenDescription) { + this.spaceTokenDescription = spaceTokenDescription; + } + + @JsonProperty("storageClass") + public StorageClass getStorageClass() { + return storageClass; + } + + @JsonProperty("storage-class") + public void setStorageClass(StorageClass storageClass) { + this.storageClass = storageClass; + } + + @JsonProperty("rootPath") + public String getRoot() { + return root; + } + + @JsonProperty("root") + public void setRoot(String root) { + this.root = root; + } + + @JsonProperty("filesystemDriver") + public FilesystemDriver getFilesystemDriver() { + return filesystemDriver; + } + + @JsonProperty("filesystem-driver") + public void setFilesystemDriver(FilesystemDriver filesystemDriver) { + this.filesystemDriver = filesystemDriver; + } + + @JsonProperty("spacesystemDriver") + public SpacesystemDriver getSpacesystemDriver() { + return spacesystemDriver; + } + + @JsonProperty("spacesystem-driver") + public void setSpacesystemDriver(SpacesystemDriver spacesystemDriver) { + this.spacesystemDriver = spacesystemDriver; + } + + @JsonProperty("storageAreaAuthz") + public Object getStorageAreaAuthz() { + return storageAreaAuthz; + } + + @JsonProperty("storage-area-authz") + public void setStorageAreaAuthz(Object storageAreaAuthz) { + this.storageAreaAuthz = storageAreaAuthz; + } + + @JsonProperty("properties") + public Properties getProperties() { + return properties; + } + + @JsonProperty("properties") + public void setProperties(Properties properties) { + this.properties = properties; + } + + @JsonProperty("capabilities") + public Capabilities getCapabilities() { + return capabilities; + } + + @JsonProperty("capabilities") + public void setCapabilities(Capabilities capabilities) { + this.capabilities = capabilities; + } + + +} diff --git a/src/main/java/it/grid/storm/rest/info/namespace/model/FilesystemDriver.java b/src/main/java/it/grid/storm/rest/info/namespace/model/FilesystemDriver.java new file mode 100644 index 000000000..4861dff11 --- /dev/null +++ b/src/main/java/it/grid/storm/rest/info/namespace/model/FilesystemDriver.java @@ -0,0 +1,23 @@ +package it.grid.storm.rest.info.namespace.model; + +import com.fasterxml.jackson.annotation.JsonValue; + +public enum FilesystemDriver { + + POSIX_FS("it.grid.storm.filesystem.swig.posixfs"), + GPSF("it.grid.storm.filesystem.swig.gpfs"), + GPFS23("it.grid.storm.filesystem.swig.gpfs23"), + XFS("it.grid.storm.filesystem.swig.xfs"), + TEST("it.grid.storm.filesystem.swig.test"); + + private String value; + + private FilesystemDriver(String value) { + this.value = value; + } + + @JsonValue + public String getValue() { + return value; + } +} diff --git a/src/main/java/it/grid/storm/rest/info/namespace/model/FilesystemType.java b/src/main/java/it/grid/storm/rest/info/namespace/model/FilesystemType.java new file mode 100644 index 000000000..8f3ab7623 --- /dev/null +++ b/src/main/java/it/grid/storm/rest/info/namespace/model/FilesystemType.java @@ -0,0 +1,6 @@ +package it.grid.storm.rest.info.namespace.model; + +public enum FilesystemType { + + ext3, gpfs, xfs +} diff --git a/src/main/java/it/grid/storm/rest/info/namespace/model/MappingRule.java b/src/main/java/it/grid/storm/rest/info/namespace/model/MappingRule.java new file mode 100644 index 000000000..44910f5c6 --- /dev/null +++ b/src/main/java/it/grid/storm/rest/info/namespace/model/MappingRule.java @@ -0,0 +1,44 @@ +package it.grid.storm.rest.info.namespace.model; + +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonInclude.Include; + +@JsonInclude(Include.NON_NULL) +public class MappingRule { + + private String name; + private String stfnRoot; + private String mappedFs; + + @JsonProperty("name") + public String getName() { + return name; + } + + @JsonProperty("name") + public void setName(String name) { + this.name = name; + } + + @JsonProperty("stfnRoot") + public String getStfnRoot() { + return stfnRoot; + } + + @JsonProperty("stfn-root") + public void setStfnRoot(String stfnRoot) { + this.stfnRoot = stfnRoot; + } + + @JsonProperty("mappedFs") + public String getMappedFs() { + return mappedFs; + } + + @JsonProperty("mapped-fs") + public void setMappedFs(String mappedFs) { + this.mappedFs = mappedFs; + } + +} diff --git a/src/main/java/it/grid/storm/rest/info/namespace/model/Member.java b/src/main/java/it/grid/storm/rest/info/namespace/model/Member.java new file mode 100644 index 000000000..c962f2009 --- /dev/null +++ b/src/main/java/it/grid/storm/rest/info/namespace/model/Member.java @@ -0,0 +1,35 @@ +package it.grid.storm.rest.info.namespace.model; + +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonInclude.Include; + +@JsonInclude(Include.NON_NULL) +public class Member { + + private Integer memberId; + private Integer weight; + + @JsonProperty("memberId") + public Integer getMemberId() { + return memberId; + } + + @JsonProperty("member-id") + public void setMemberId(Integer memberId) { + this.memberId = memberId; + } + + @JsonProperty("weight") + public Integer getWeight() { + return weight; + } + + @JsonProperty("weight") + public void setWeight(Integer weight) { + this.weight = weight; + } + + + +} diff --git a/src/main/java/it/grid/storm/rest/info/namespace/model/Namespace.java b/src/main/java/it/grid/storm/rest/info/namespace/model/Namespace.java new file mode 100644 index 000000000..c38e7db08 --- /dev/null +++ b/src/main/java/it/grid/storm/rest/info/namespace/model/Namespace.java @@ -0,0 +1,57 @@ +package it.grid.storm.rest.info.namespace.model; + +import java.util.List; + +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonProperty; + +@JsonIgnoreProperties({"noNamespaceSchemaLocation"}) +public class Namespace { + + private String version; + private List filesystems; + private List mappingRules; + private List approachableRules; + + @JsonProperty("version") + public String getVersion() { + return version; + } + + @JsonProperty("version") + public void setVersion(String version) { + this.version = version; + } + + @JsonProperty("filesystems") + public List getFilesystems() { + return filesystems; + } + + @JsonProperty("filesystems") + public void setFilesystems(List filesystems) { + this.filesystems = filesystems; + } + + @JsonProperty("mappingRules") + public List getMappingRules() { + return mappingRules; + } + + @JsonProperty("mapping-rules") + public void setMappingRules(List mappingRules) { + this.mappingRules = mappingRules; + } + + @JsonProperty("approachableRules") + public List getApproachableRules() { + return approachableRules; + } + + @JsonProperty("approachable-rules") + public void setApproachableRules(List approachableRules) { + this.approachableRules = approachableRules; + } + + +} diff --git a/src/main/java/it/grid/storm/rest/info/namespace/model/PermissionType.java b/src/main/java/it/grid/storm/rest/info/namespace/model/PermissionType.java new file mode 100644 index 000000000..d92ab41c3 --- /dev/null +++ b/src/main/java/it/grid/storm/rest/info/namespace/model/PermissionType.java @@ -0,0 +1,6 @@ +package it.grid.storm.rest.info.namespace.model; + +public enum PermissionType { + + R, W, RW; +} diff --git a/src/main/java/it/grid/storm/rest/info/namespace/model/Pool.java b/src/main/java/it/grid/storm/rest/info/namespace/model/Pool.java new file mode 100644 index 000000000..395712893 --- /dev/null +++ b/src/main/java/it/grid/storm/rest/info/namespace/model/Pool.java @@ -0,0 +1,36 @@ +package it.grid.storm.rest.info.namespace.model; + +import java.util.List; + +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonInclude.Include; + +@JsonInclude(Include.NON_NULL) +public class Pool { + + private BalanceStrategy balanceStrategy; + private List members; + + @JsonProperty("balanceStrategy") + public BalanceStrategy getBalanceStrategy() { + return balanceStrategy; + } + + @JsonProperty("balance-strategy") + public void setBalanceStrategy(BalanceStrategy balanceStrategy) { + this.balanceStrategy = balanceStrategy; + } + + @JsonProperty("members") + public List getMembers() { + return members; + } + + @JsonProperty("members") + public void setMembers(List members) { + this.members = members; + } + + +} diff --git a/src/main/java/it/grid/storm/rest/info/namespace/model/Properties.java b/src/main/java/it/grid/storm/rest/info/namespace/model/Properties.java new file mode 100644 index 000000000..2202839c7 --- /dev/null +++ b/src/main/java/it/grid/storm/rest/info/namespace/model/Properties.java @@ -0,0 +1,66 @@ +package it.grid.storm.rest.info.namespace.model; + +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonInclude.Include; + +@JsonInclude(Include.NON_NULL) +public class Properties { + + private RetentionPolicy retentionPolicy; + private AccessLatency accessLatency; + private ExpirationMode expirationMode; + private TotalOnlineSize totalOnlineSize; + private TotalNearLineSize totalNearlineSize; + + @JsonProperty("retentionPolicy") + public RetentionPolicy getRetentionPolicy() { + return retentionPolicy; + } + + @JsonProperty("RetentionPolicy") + public void setRetentionPolicy(RetentionPolicy retentionPolicy) { + this.retentionPolicy = retentionPolicy; + } + + @JsonProperty("accessLatency") + public AccessLatency getAccessLatency() { + return accessLatency; + } + + @JsonProperty("AccessLatency") + public void setAccessLatency(AccessLatency accessLatency) { + this.accessLatency = accessLatency; + } + + @JsonProperty("expirationMode") + public ExpirationMode getExpirationMode() { + return expirationMode; + } + + @JsonProperty("ExpirationMode") + public void setExpirationMode(ExpirationMode expirationMode) { + this.expirationMode = expirationMode; + } + + @JsonProperty("totalOnlineSize") + public TotalOnlineSize getTotalOnlineSize() { + return totalOnlineSize; + } + + @JsonProperty("TotalOnlineSize") + public void setTotalOnlineSize(TotalOnlineSize totalOnlineSize) { + this.totalOnlineSize = totalOnlineSize; + } + + @JsonProperty("totalNearlineSize") + public TotalNearLineSize getTotalNearlineSize() { + return totalNearlineSize; + } + + @JsonProperty("TotalNearlineSize") + public void setTotalNearlineSize(TotalNearLineSize totalNearlineSize) { + this.totalNearlineSize = totalNearlineSize; + } + +} diff --git a/src/main/java/it/grid/storm/rest/info/namespace/model/Prot.java b/src/main/java/it/grid/storm/rest/info/namespace/model/Prot.java new file mode 100644 index 000000000..8aa30486c --- /dev/null +++ b/src/main/java/it/grid/storm/rest/info/namespace/model/Prot.java @@ -0,0 +1,67 @@ +package it.grid.storm.rest.info.namespace.model; + +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonInclude.Include; +import com.fasterxml.jackson.annotation.JsonProperty; + +@JsonInclude(Include.NON_NULL) +public class Prot { + + private String name; + private Integer id; + private String schema; + private String host; + private Integer port; + + @JsonProperty("name") + public String getName() { + return name; + } + + @JsonProperty("name") + public void setName(String name) { + this.name = name; + } + + @JsonProperty("id") + public Integer getId() { + return id; + } + + @JsonProperty("id") + public void setId(Integer id) { + this.id = id; + } + + @JsonProperty("schema") + public String getSchema() { + return schema; + } + + @JsonProperty("schema") + public void setSchema(String schema) { + this.schema = schema; + } + + @JsonProperty("host") + public String getHost() { + return host; + } + + @JsonProperty("host") + public void setHost(String host) { + this.host = host; + } + + @JsonProperty("port") + public Integer getPort() { + return port; + } + + @JsonProperty("port") + public void setPort(Integer port) { + this.port = port; + } + + +} diff --git a/src/main/java/it/grid/storm/rest/info/namespace/model/Protocol.java b/src/main/java/it/grid/storm/rest/info/namespace/model/Protocol.java new file mode 100644 index 000000000..3fdb46569 --- /dev/null +++ b/src/main/java/it/grid/storm/rest/info/namespace/model/Protocol.java @@ -0,0 +1,21 @@ +package it.grid.storm.rest.info.namespace.model; + +import com.fasterxml.jackson.annotation.JsonPropertyOrder; +import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlProperty; + +@JsonPropertyOrder({"id", "schema", "hostname", "port"}) +public class Protocol { + + @JacksonXmlProperty(isAttribute = true, localName = "name") + String name; + + @JacksonXmlProperty(localName = "id") + Integer id; + @JacksonXmlProperty(localName = "schema") + String schema; + @JacksonXmlProperty(localName = "hostname") + String hostname; + @JacksonXmlProperty(localName = "port") + Integer port; + +} diff --git a/src/main/java/it/grid/storm/rest/info/namespace/model/Quota.java b/src/main/java/it/grid/storm/rest/info/namespace/model/Quota.java new file mode 100644 index 000000000..a8c7d98a2 --- /dev/null +++ b/src/main/java/it/grid/storm/rest/info/namespace/model/Quota.java @@ -0,0 +1,45 @@ +package it.grid.storm.rest.info.namespace.model; + +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonInclude.Include; + +@JsonInclude(Include.NON_NULL) +public class Quota { + + private Boolean enabled; + private String device; + private Object quotaElement; + + @JsonProperty("enabled") + public Boolean getEnabled() { + return enabled; + } + + @JsonProperty("enabled") + public void setEnabled(Boolean enabled) { + this.enabled = enabled; + } + + @JsonProperty("device") + public String getDevice() { + return device; + } + + @JsonProperty("device") + public void setDevice(String device) { + this.device = device; + } + + @JsonProperty("quotaElement") + public Object getQuotaElement() { + return quotaElement; + } + + @JsonProperty("quotaElement") + public void setQuotaElement(Object quotaElement) { + this.quotaElement = quotaElement; + } + + +} diff --git a/src/main/java/it/grid/storm/rest/info/namespace/model/RetentionPolicy.java b/src/main/java/it/grid/storm/rest/info/namespace/model/RetentionPolicy.java new file mode 100644 index 000000000..5c03fb44d --- /dev/null +++ b/src/main/java/it/grid/storm/rest/info/namespace/model/RetentionPolicy.java @@ -0,0 +1,5 @@ +package it.grid.storm.rest.info.namespace.model; + +public enum RetentionPolicy { + custodial, output, replica +} diff --git a/src/main/java/it/grid/storm/rest/info/namespace/model/SpacesystemDriver.java b/src/main/java/it/grid/storm/rest/info/namespace/model/SpacesystemDriver.java new file mode 100644 index 000000000..ae36d2914 --- /dev/null +++ b/src/main/java/it/grid/storm/rest/info/namespace/model/SpacesystemDriver.java @@ -0,0 +1,22 @@ +package it.grid.storm.rest.info.namespace.model; + +import com.fasterxml.jackson.annotation.JsonValue; + +public enum SpacesystemDriver { + + GPFS_SPACESYSTEM("it.grid.storm.filesystem.GPFSSpaceSystem"), + MOCK_SPACESYSTEM("it.grid.storm.filesystem.MockSpaceSystem"), + XFS_SPACESYSTEM("it.grid.storm.filesystem.XFSSpaceSystem"); + + private String value; + + private SpacesystemDriver(String value) { + this.value = value; + } + + @JsonValue + public String getValue() { + return value; + } +} + diff --git a/src/main/java/it/grid/storm/rest/info/namespace/model/StorageClass.java b/src/main/java/it/grid/storm/rest/info/namespace/model/StorageClass.java new file mode 100644 index 000000000..1749198e3 --- /dev/null +++ b/src/main/java/it/grid/storm/rest/info/namespace/model/StorageClass.java @@ -0,0 +1,6 @@ +package it.grid.storm.rest.info.namespace.model; + +public enum StorageClass { + + T0D0, T0D1, T1D1, T1D0 +} diff --git a/src/main/java/it/grid/storm/rest/info/namespace/model/Subject.java b/src/main/java/it/grid/storm/rest/info/namespace/model/Subject.java new file mode 100644 index 000000000..8c7047610 --- /dev/null +++ b/src/main/java/it/grid/storm/rest/info/namespace/model/Subject.java @@ -0,0 +1,34 @@ +package it.grid.storm.rest.info.namespace.model; + +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonInclude.Include; + +@JsonInclude(Include.NON_NULL) +public class Subject { + + private String dn; + private String voName; + + @JsonProperty("dn") + public String getDn() { + return dn; + } + + @JsonProperty("dn") + public void setDn(String dn) { + this.dn = dn; + } + + @JsonProperty("voName") + public String getVoName() { + return voName; + } + + @JsonProperty("vo-name") + public void setVoName(String voName) { + this.voName = voName; + } + + +} diff --git a/src/main/java/it/grid/storm/rest/info/namespace/model/TotalNearLineSize.java b/src/main/java/it/grid/storm/rest/info/namespace/model/TotalNearLineSize.java new file mode 100644 index 000000000..965f2eb59 --- /dev/null +++ b/src/main/java/it/grid/storm/rest/info/namespace/model/TotalNearLineSize.java @@ -0,0 +1,34 @@ +package it.grid.storm.rest.info.namespace.model; + +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonInclude.Include; +import com.fasterxml.jackson.databind.annotation.JsonDeserialize; + +@JsonDeserialize(using = TotalNearLineSizeDeserializer.class) +@JsonInclude(Include.NON_NULL) +public class TotalNearLineSize { + + private UnitType unit; + private Long value; + + @JsonProperty("unit") + public UnitType getUnit() { + return unit; + } + + @JsonProperty("unit") + public void setUnit(UnitType unit) { + this.unit = unit; + } + + @JsonProperty("value") + public Long getValue() { + return value; + } + + @JsonProperty("value") + public void setValue(Long value) { + this.value = value; + } +} diff --git a/src/main/java/it/grid/storm/rest/info/namespace/model/TotalNearLineSizeDeserializer.java b/src/main/java/it/grid/storm/rest/info/namespace/model/TotalNearLineSizeDeserializer.java new file mode 100644 index 000000000..3ac823426 --- /dev/null +++ b/src/main/java/it/grid/storm/rest/info/namespace/model/TotalNearLineSizeDeserializer.java @@ -0,0 +1,44 @@ +package it.grid.storm.rest.info.namespace.model; + +import java.io.IOException; + +import com.fasterxml.jackson.core.JsonParser; +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.DeserializationContext; +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.deser.std.StdDeserializer; + +public class TotalNearLineSizeDeserializer extends StdDeserializer { + + /** + * + */ + private static final long serialVersionUID = 1L; + + protected TotalNearLineSizeDeserializer() { + this(null); + } + + protected TotalNearLineSizeDeserializer(Class vc) { + super(vc); + } + + @Override + public TotalNearLineSize deserialize(JsonParser jp, DeserializationContext ctxt) + throws IOException, JsonProcessingException { + + TotalNearLineSize result = new TotalNearLineSize(); + JsonNode node = jp.getCodec().readTree(jp); + // unit is optional + JsonNode unitNode = node.get("unit"); + if (unitNode != null) { + result.setUnit(UnitType.valueOf(unitNode.asText())); + } else { + result.setUnit(UnitType.TB); + } + // value is required + result.setValue(node.get("").asLong()); + return result; + } + +} diff --git a/src/main/java/it/grid/storm/rest/info/namespace/model/TotalOnlineSize.java b/src/main/java/it/grid/storm/rest/info/namespace/model/TotalOnlineSize.java new file mode 100644 index 000000000..1719a9034 --- /dev/null +++ b/src/main/java/it/grid/storm/rest/info/namespace/model/TotalOnlineSize.java @@ -0,0 +1,47 @@ +package it.grid.storm.rest.info.namespace.model; + +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonInclude.Include; +import com.fasterxml.jackson.databind.annotation.JsonDeserialize; + +@JsonDeserialize(using = TotalOnlineSizeDeserializer.class) +@JsonInclude(Include.NON_NULL) +public class TotalOnlineSize { + + private UnitType unit; + private Boolean limitedSize; + private Long value; + + @JsonProperty("unit") + public UnitType getUnit() { + return unit; + } + + @JsonProperty("unit") + public void setUnit(UnitType unit) { + this.unit = unit; + } + + @JsonProperty("limitedSize") + public Boolean getLimitedSize() { + return limitedSize; + } + + @JsonProperty("limited-size") + public void setLimitedSize(Boolean limitedSize) { + this.limitedSize = limitedSize; + } + + @JsonProperty("value") + public Long getValue() { + return value; + } + + @JsonProperty("value") + public void setValue(Long value) { + this.value = value; + } + + +} diff --git a/src/main/java/it/grid/storm/rest/info/namespace/model/TotalOnlineSizeDeserializer.java b/src/main/java/it/grid/storm/rest/info/namespace/model/TotalOnlineSizeDeserializer.java new file mode 100644 index 000000000..c389db372 --- /dev/null +++ b/src/main/java/it/grid/storm/rest/info/namespace/model/TotalOnlineSizeDeserializer.java @@ -0,0 +1,46 @@ +package it.grid.storm.rest.info.namespace.model; + +import java.io.IOException; + +import com.fasterxml.jackson.core.JsonParser; +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.DeserializationContext; +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.deser.std.StdDeserializer; + +public class TotalOnlineSizeDeserializer extends StdDeserializer { + + /** + * + */ + private static final long serialVersionUID = 1L; + + protected TotalOnlineSizeDeserializer() { + this(null); + } + + protected TotalOnlineSizeDeserializer(Class vc) { + super(vc); + } + + @Override + public TotalOnlineSize deserialize(JsonParser jp, DeserializationContext ctxt) + throws IOException, JsonProcessingException { + + TotalOnlineSize result = new TotalOnlineSize(); + JsonNode node = jp.getCodec().readTree(jp); + // unit is optional + JsonNode unitNode = node.get("unit"); + if (unitNode != null) { + result.setUnit(UnitType.valueOf(unitNode.asText())); + } else { + result.setUnit(UnitType.TB); + } + // limited size is required + result.setLimitedSize(node.get("limited-size").asBoolean()); + // value is required + result.setValue(node.get("").asLong()); + return result; + } + +} diff --git a/src/main/java/it/grid/storm/rest/info/namespace/model/UnitType.java b/src/main/java/it/grid/storm/rest/info/namespace/model/UnitType.java new file mode 100644 index 000000000..d392c1307 --- /dev/null +++ b/src/main/java/it/grid/storm/rest/info/namespace/model/UnitType.java @@ -0,0 +1,6 @@ +package it.grid.storm.rest.info.namespace.model; + +public enum UnitType { + + Byte, KB, MB, GB, TB +} diff --git a/src/main/java/it/grid/storm/rest/metadata/Metadata.java b/src/main/java/it/grid/storm/rest/metadata/Metadata.java index 4e1905454..0e25c7d42 100644 --- a/src/main/java/it/grid/storm/rest/metadata/Metadata.java +++ b/src/main/java/it/grid/storm/rest/metadata/Metadata.java @@ -5,17 +5,6 @@ import static javax.ws.rs.core.Response.Status.INTERNAL_SERVER_ERROR; import static javax.ws.rs.core.Response.Status.NOT_FOUND; -import it.grid.storm.namespace.NamespaceDirector; -import it.grid.storm.namespace.NamespaceException; -import it.grid.storm.namespace.NamespaceInterface; -import it.grid.storm.rest.metadata.model.StoriMetadata; -import it.grid.storm.rest.metadata.service.ResourceNotFoundException; -import it.grid.storm.rest.metadata.service.ResourceService; -import it.grid.storm.rest.metadata.service.StoriMetadataService; - -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - import java.io.File; import javax.ws.rs.GET; @@ -24,6 +13,17 @@ import javax.ws.rs.Produces; import javax.ws.rs.WebApplicationException; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import it.grid.storm.namespace.Namespace; +import it.grid.storm.namespace.NamespaceException; +import it.grid.storm.namespace.NamespaceInterface; +import it.grid.storm.rest.metadata.model.StoriMetadata; +import it.grid.storm.rest.metadata.service.ResourceNotFoundException; +import it.grid.storm.rest.metadata.service.ResourceService; +import it.grid.storm.rest.metadata.service.StoriMetadataService; + @Path("/metadata") public class Metadata { @@ -33,7 +33,7 @@ public class Metadata { public Metadata() throws NamespaceException { - NamespaceInterface namespace = NamespaceDirector.getNamespace(); + NamespaceInterface namespace = Namespace.getInstance(); metadataService = new StoriMetadataService( new ResourceService(namespace.getAllDefinedVFS(), namespace.getAllDefinedMappingRules())); } diff --git a/src/main/java/it/grid/storm/srm/types/ArrayOfTSpaceToken.java b/src/main/java/it/grid/storm/srm/types/ArrayOfTSpaceToken.java index 4191fb964..f6d18cdd0 100644 --- a/src/main/java/it/grid/storm/srm/types/ArrayOfTSpaceToken.java +++ b/src/main/java/it/grid/storm/srm/types/ArrayOfTSpaceToken.java @@ -26,7 +26,6 @@ package it.grid.storm.srm.types; import java.io.Serializable; -import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.Map; @@ -47,23 +46,7 @@ public class ArrayOfTSpaceToken implements Serializable { public static final String PNAME_ARRAYOFSPACETOKENS = "arrayOfSpaceTokens"; - ArrayList tokenList; - - /** - * Constructor that requires a String. If it is null, then an - * InvalidArrayOfTTSpaceTokenAttributeException is thrown. - */ - public ArrayOfTSpaceToken(TSpaceToken[] tokenArray) - throws InvalidArrayOfTSpaceTokenAttributeException { - - if (tokenArray == null) - throw new InvalidArrayOfTSpaceTokenAttributeException(tokenArray); - } - - public ArrayOfTSpaceToken() { - - tokenList = new ArrayList(); - } + private List tokenList = Lists.newArrayList(); public static ArrayOfTSpaceToken decode(Map inputParam, String fieldName) throws InvalidArrayOfTSpaceTokenAttributeException { @@ -94,13 +77,12 @@ public static ArrayOfTSpaceToken decode(Map inputParam, String f public TSpaceToken getTSpaceToken(int i) { - return (TSpaceToken) tokenList.get(i); + return tokenList.get(i); } public TSpaceToken[] getTSpaceTokenArray() { - TSpaceToken[] array = new TSpaceToken[0]; - return tokenList.toArray(array); + return tokenList.toArray(new TSpaceToken[0]); } public void addTSpaceToken(TSpaceToken token) { @@ -124,7 +106,7 @@ public void encode(Map outputParam, String name) { List vector = Lists.newArrayList(); for (int i = 0; i < tokenList.size(); i++) { - ((TSpaceToken) tokenList.get(i)).encode(vector); + tokenList.get(i).encode(vector); } outputParam.put(name, vector); diff --git a/src/main/java/it/grid/storm/synchcall/FileSystemUtility.java b/src/main/java/it/grid/storm/synchcall/FileSystemUtility.java index 5e3e9de87..65c221575 100644 --- a/src/main/java/it/grid/storm/synchcall/FileSystemUtility.java +++ b/src/main/java/it/grid/storm/synchcall/FileSystemUtility.java @@ -21,13 +21,14 @@ import static it.grid.storm.metrics.StormMetricRegistry.METRIC_REGISTRY; import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import it.grid.storm.filesystem.Filesystem; import it.grid.storm.filesystem.FilesystemIF; import it.grid.storm.filesystem.LocalFile; import it.grid.storm.filesystem.MetricsFilesystemAdapter; import it.grid.storm.filesystem.swig.genericfs; -import it.grid.storm.namespace.NamespaceDirector; +import it.grid.storm.namespace.Namespace; import it.grid.storm.namespace.NamespaceException; import it.grid.storm.namespace.VirtualFSInterface; @@ -53,7 +54,7 @@ */ public class FileSystemUtility { - private static Logger log = NamespaceDirector.getLogger(); + private static Logger log = LoggerFactory.getLogger(FileSystemUtility.class); public static LocalFile getLocalFileByAbsolutePath(String absolutePath) throws NamespaceException { @@ -63,8 +64,7 @@ public static LocalFile getLocalFileByAbsolutePath(String absolutePath) genericfs fsDriver = null; FilesystemIF fs = null; try { - vfs = NamespaceDirector.getNamespace().resolveVFSbyAbsolutePath( - absolutePath); + vfs = Namespace.getInstance().resolveVFSbyAbsolutePath(absolutePath); } catch (NamespaceException ex) { log.error("Unable to retrieve VFS by Absolute Path", ex); } diff --git a/src/main/java/it/grid/storm/synchcall/command/datatransfer/ExtendFileLifeTimeCommand.java b/src/main/java/it/grid/storm/synchcall/command/datatransfer/ExtendFileLifeTimeCommand.java index 2a94524bd..db7405e70 100644 --- a/src/main/java/it/grid/storm/synchcall/command/datatransfer/ExtendFileLifeTimeCommand.java +++ b/src/main/java/it/grid/storm/synchcall/command/datatransfer/ExtendFileLifeTimeCommand.java @@ -17,6 +17,15 @@ package it.grid.storm.synchcall.command.datatransfer; +import java.util.Calendar; +import java.util.LinkedList; +import java.util.List; +import java.util.Map; +import java.util.Map.Entry; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + import it.grid.storm.authz.AuthzException; import it.grid.storm.catalogs.VolatileAndJiTCatalog; import it.grid.storm.catalogs.surl.SURLStatusManager; @@ -24,7 +33,7 @@ import it.grid.storm.filesystem.LocalFile; import it.grid.storm.griduser.GridUserInterface; import it.grid.storm.namespace.InvalidSURLException; -import it.grid.storm.namespace.NamespaceDirector; +import it.grid.storm.namespace.Namespace; import it.grid.storm.namespace.NamespaceException; import it.grid.storm.namespace.NamespaceInterface; import it.grid.storm.namespace.StoRI; @@ -50,15 +59,6 @@ import it.grid.storm.synchcall.surl.ExpiredTokenException; import it.grid.storm.synchcall.surl.UnknownTokenException; -import java.util.Calendar; -import java.util.LinkedList; -import java.util.List; -import java.util.Map; -import java.util.Map.Entry; - -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - /** * This class is part of the StoRM project. Copyright (c) 2008 INFN-CNAF. *

@@ -217,7 +217,7 @@ private TReturnStatus manageExtendSURLLifetime( ExtendFileLifeTimeCommand.log .debug("Function manageExtendSURLLifetime, class ExtendFileLifeTimeExecutor: parameter details is NULL"); } - NamespaceInterface namespace = NamespaceDirector.getNamespace(); + NamespaceInterface namespace = Namespace.getInstance(); VolatileAndJiTCatalog catalog = VolatileAndJiTCatalog.getInstance(); boolean requestSuccess = true; boolean requestFailure = true; @@ -423,7 +423,7 @@ private TReturnStatus manageExtendPinLifetime(TRequestToken requestToken, ExtendFileLifeTimeCommand.log.debug("Found SURL: " + surl.getSURLString() + " (status: " + statusOfTheSURL.toString() + ")"); - NamespaceInterface namespace = NamespaceDirector.getNamespace(); + NamespaceInterface namespace = Namespace.getInstance(); StoRI stori = null; try { stori = namespace.resolveStoRIbySURL(surl, guser); diff --git a/src/main/java/it/grid/storm/synchcall/command/datatransfer/PtPAbortExecutor.java b/src/main/java/it/grid/storm/synchcall/command/datatransfer/PtPAbortExecutor.java index 791ab9c65..71fbed40c 100644 --- a/src/main/java/it/grid/storm/synchcall/command/datatransfer/PtPAbortExecutor.java +++ b/src/main/java/it/grid/storm/synchcall/command/datatransfer/PtPAbortExecutor.java @@ -25,6 +25,29 @@ */ package it.grid.storm.synchcall.command.datatransfer; +import static it.grid.storm.srm.types.TStatusCode.SRM_ABORTED; +import static it.grid.storm.srm.types.TStatusCode.SRM_AUTHORIZATION_FAILURE; +import static it.grid.storm.srm.types.TStatusCode.SRM_FAILURE; +import static it.grid.storm.srm.types.TStatusCode.SRM_INTERNAL_ERROR; +import static it.grid.storm.srm.types.TStatusCode.SRM_INVALID_PATH; +import static it.grid.storm.srm.types.TStatusCode.SRM_INVALID_REQUEST; +import static it.grid.storm.srm.types.TStatusCode.SRM_PARTIAL_SUCCESS; +import static it.grid.storm.srm.types.TStatusCode.SRM_REQUEST_INPROGRESS; +import static it.grid.storm.srm.types.TStatusCode.SRM_REQUEST_QUEUED; +import static it.grid.storm.srm.types.TStatusCode.SRM_REQUEST_TIMED_OUT; +import static it.grid.storm.srm.types.TStatusCode.SRM_SPACE_AVAILABLE; +import static it.grid.storm.srm.types.TStatusCode.SRM_SUCCESS; + +import java.util.Collection; +import java.util.Iterator; +import java.util.List; +import java.util.Map; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import com.google.common.collect.Lists; + import it.grid.storm.authz.AuthzException; import it.grid.storm.catalogs.PtPChunkCatalog; import it.grid.storm.catalogs.RequestSummaryCatalog; @@ -34,7 +57,7 @@ import it.grid.storm.filesystem.LocalFile; import it.grid.storm.griduser.GridUserInterface; import it.grid.storm.namespace.InvalidSURLException; -import it.grid.storm.namespace.NamespaceDirector; +import it.grid.storm.namespace.Namespace; import it.grid.storm.namespace.NamespaceException; import it.grid.storm.namespace.NamespaceInterface; import it.grid.storm.namespace.StoRI; @@ -59,29 +82,6 @@ import it.grid.storm.synchcall.surl.ExpiredTokenException; import it.grid.storm.synchcall.surl.UnknownTokenException; -import static it.grid.storm.srm.types.TStatusCode.SRM_ABORTED; -import static it.grid.storm.srm.types.TStatusCode.SRM_AUTHORIZATION_FAILURE; -import static it.grid.storm.srm.types.TStatusCode.SRM_FAILURE; -import static it.grid.storm.srm.types.TStatusCode.SRM_INTERNAL_ERROR; -import static it.grid.storm.srm.types.TStatusCode.SRM_INVALID_PATH; -import static it.grid.storm.srm.types.TStatusCode.SRM_INVALID_REQUEST; -import static it.grid.storm.srm.types.TStatusCode.SRM_PARTIAL_SUCCESS; -import static it.grid.storm.srm.types.TStatusCode.SRM_REQUEST_INPROGRESS; -import static it.grid.storm.srm.types.TStatusCode.SRM_REQUEST_QUEUED; -import static it.grid.storm.srm.types.TStatusCode.SRM_REQUEST_TIMED_OUT; -import static it.grid.storm.srm.types.TStatusCode.SRM_SPACE_AVAILABLE; -import static it.grid.storm.srm.types.TStatusCode.SRM_SUCCESS; - -import java.util.Collection; -import java.util.Iterator; -import java.util.List; -import java.util.Map; - -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import com.google.common.collect.Lists; - public class PtPAbortExecutor implements AbortExecutorInterface { private static final Logger log = LoggerFactory.getLogger(PtPAbortExecutor.class); @@ -97,7 +97,7 @@ public class PtPAbortExecutor implements AbortExecutorInterface { public AbortGeneralOutputData doIt(AbortInputData inputData) { // Used to delete the physical file - namespace = NamespaceDirector.getNamespace(); + namespace = Namespace.getInstance(); AbortGeneralOutputData outputData = new AbortGeneralOutputData(); ArrayOfTSURLReturnStatus arrayOfTSurlRetStatus = new ArrayOfTSURLReturnStatus(); @@ -418,7 +418,7 @@ private TSURLReturnStatus manageAuthorizedAbort(GridUserInterface user, TRequest TSURL surl, TReturnStatus status, AbortInputData inputData) { boolean failure = false; - namespace = NamespaceDirector.getNamespace(); + namespace = Namespace.getInstance(); TSURLReturnStatus surlReturnStatus = new TSURLReturnStatus(); surlReturnStatus.setSurl(surl); @@ -587,8 +587,7 @@ private TSURLReturnStatus manageAuthorizedAbort(GridUserInterface user, TRequest surlReturnStatus .setStatus(new TReturnStatus(SRM_SUCCESS, "File request successfully aborted.")); try { - NamespaceDirector.getNamespace() - .resolveVFSbyLocalFile(fileToRemove) + Namespace.getInstance().resolveVFSbyLocalFile(fileToRemove) .decreaseUsedSpace(sizeToRemove); } catch (NamespaceException e) { log.error(e.getMessage()); diff --git a/src/main/java/it/grid/storm/synchcall/command/datatransfer/PutDoneCommand.java b/src/main/java/it/grid/storm/synchcall/command/datatransfer/PutDoneCommand.java index b79d2610d..51abdfd28 100644 --- a/src/main/java/it/grid/storm/synchcall/command/datatransfer/PutDoneCommand.java +++ b/src/main/java/it/grid/storm/synchcall/command/datatransfer/PutDoneCommand.java @@ -15,6 +15,30 @@ package it.grid.storm.synchcall.command.datatransfer; +import static com.google.common.base.Preconditions.checkArgument; +import static com.google.common.base.Preconditions.checkNotNull; +import static it.grid.storm.srm.types.TStatusCode.SRM_ABORTED; +import static it.grid.storm.srm.types.TStatusCode.SRM_AUTHORIZATION_FAILURE; +import static it.grid.storm.srm.types.TStatusCode.SRM_DUPLICATION_ERROR; +import static it.grid.storm.srm.types.TStatusCode.SRM_FAILURE; +import static it.grid.storm.srm.types.TStatusCode.SRM_INTERNAL_ERROR; +import static it.grid.storm.srm.types.TStatusCode.SRM_INVALID_PATH; +import static it.grid.storm.srm.types.TStatusCode.SRM_INVALID_REQUEST; +import static it.grid.storm.srm.types.TStatusCode.SRM_PARTIAL_SUCCESS; +import static it.grid.storm.srm.types.TStatusCode.SRM_REQUEST_TIMED_OUT; +import static it.grid.storm.srm.types.TStatusCode.SRM_SUCCESS; +import static it.grid.storm.synchcall.command.CommandHelper.buildStatus; + +import java.util.Calendar; +import java.util.List; +import java.util.Map; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import com.google.common.base.Preconditions; +import com.google.common.collect.Lists; + import it.grid.storm.authz.AuthzException; import it.grid.storm.catalogs.VolatileAndJiTCatalog; import it.grid.storm.catalogs.surl.SURLStatusManager; @@ -25,7 +49,7 @@ import it.grid.storm.griduser.CannotMapUserException; import it.grid.storm.griduser.GridUserInterface; import it.grid.storm.griduser.LocalUser; -import it.grid.storm.namespace.NamespaceDirector; +import it.grid.storm.namespace.Namespace; import it.grid.storm.namespace.NamespaceException; import it.grid.storm.namespace.StoRI; import it.grid.storm.namespace.VirtualFSInterface; @@ -45,30 +69,6 @@ import it.grid.storm.synchcall.surl.ExpiredTokenException; import it.grid.storm.synchcall.surl.UnknownTokenException; -import java.util.Calendar; -import java.util.List; -import java.util.Map; - -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import static com.google.common.base.Preconditions.checkArgument; -import static com.google.common.base.Preconditions.checkNotNull; -import static it.grid.storm.srm.types.TStatusCode.SRM_ABORTED; -import static it.grid.storm.srm.types.TStatusCode.SRM_AUTHORIZATION_FAILURE; -import static it.grid.storm.srm.types.TStatusCode.SRM_DUPLICATION_ERROR; -import static it.grid.storm.srm.types.TStatusCode.SRM_FAILURE; -import static it.grid.storm.srm.types.TStatusCode.SRM_INTERNAL_ERROR; -import static it.grid.storm.srm.types.TStatusCode.SRM_INVALID_PATH; -import static it.grid.storm.srm.types.TStatusCode.SRM_INVALID_REQUEST; -import static it.grid.storm.srm.types.TStatusCode.SRM_PARTIAL_SUCCESS; -import static it.grid.storm.srm.types.TStatusCode.SRM_REQUEST_TIMED_OUT; -import static it.grid.storm.srm.types.TStatusCode.SRM_SUCCESS; -import static it.grid.storm.synchcall.command.CommandHelper.buildStatus; - -import com.google.common.base.Preconditions; -import com.google.common.collect.Lists; - /** * This class is part of the StoRM project. Copyright (c) 2008 INFN-CNAF. */ @@ -372,7 +372,7 @@ public static boolean executePutDone(TSURL surl, GridUserInterface user) try { - stori = NamespaceDirector.getNamespace().resolveStoRIbySURL(surl, user); + stori = Namespace.getInstance().resolveStoRIbySURL(surl, user); } catch (IllegalArgumentException e) { @@ -433,7 +433,7 @@ public static boolean executePutDone(TSURL surl, GridUserInterface user) VirtualFSInterface vfs = null; try { - vfs = NamespaceDirector.getNamespace().resolveVFSbyLocalFile(localFile); + vfs = Namespace.getInstance().resolveVFSbyLocalFile(localFile); } catch (NamespaceException e) { log.error(e.getMessage(), e); return false; diff --git a/src/main/java/it/grid/storm/synchcall/command/datatransfer/ReleaseFilesCommand.java b/src/main/java/it/grid/storm/synchcall/command/datatransfer/ReleaseFilesCommand.java index caf3184ab..738169333 100644 --- a/src/main/java/it/grid/storm/synchcall/command/datatransfer/ReleaseFilesCommand.java +++ b/src/main/java/it/grid/storm/synchcall/command/datatransfer/ReleaseFilesCommand.java @@ -17,12 +17,22 @@ package it.grid.storm.synchcall.command.datatransfer; +import java.util.ArrayList; +import java.util.Collection; +import java.util.EnumSet; +import java.util.LinkedList; +import java.util.List; +import java.util.Map; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + import it.grid.storm.authz.AuthzException; import it.grid.storm.catalogs.surl.SURLStatusManager; import it.grid.storm.catalogs.surl.SURLStatusManagerFactory; import it.grid.storm.ea.StormEA; import it.grid.storm.griduser.GridUserInterface; -import it.grid.storm.namespace.NamespaceDirector; +import it.grid.storm.namespace.Namespace; import it.grid.storm.namespace.StoRI; import it.grid.storm.srm.types.ArrayOfTSURLReturnStatus; import it.grid.storm.srm.types.TRequestToken; @@ -41,16 +51,6 @@ import it.grid.storm.synchcall.data.datatransfer.ManageFileTransferRequestFilesInputData; import it.grid.storm.synchcall.data.datatransfer.ManageFileTransferRequestInputData; -import java.util.ArrayList; -import java.util.Collection; -import java.util.EnumSet; -import java.util.LinkedList; -import java.util.List; -import java.util.Map; - -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - /** * * This class is part of the StoRM project. Copyright (c) 2008 INFN-CNAF. @@ -382,7 +382,7 @@ private void removePinneExtendedAttribute(List surlToRelease) { try { - stori = NamespaceDirector.getNamespace().resolveStoRIbySURL(surl); + stori = Namespace.getInstance().resolveStoRIbySURL(surl); } catch (Throwable e) { diff --git a/src/main/java/it/grid/storm/synchcall/command/directory/LsCommand.java b/src/main/java/it/grid/storm/synchcall/command/directory/LsCommand.java index b17c93474..a408e33a0 100644 --- a/src/main/java/it/grid/storm/synchcall/command/directory/LsCommand.java +++ b/src/main/java/it/grid/storm/synchcall/command/directory/LsCommand.java @@ -43,7 +43,7 @@ import it.grid.storm.namespace.InvalidDescendantsFileRequestException; import it.grid.storm.namespace.InvalidDescendantsPathRequestException; import it.grid.storm.namespace.InvalidSURLException; -import it.grid.storm.namespace.NamespaceDirector; +import it.grid.storm.namespace.Namespace; import it.grid.storm.namespace.NamespaceException; import it.grid.storm.namespace.NamespaceInterface; import it.grid.storm.namespace.StoRI; @@ -103,7 +103,7 @@ public class LsCommand extends DirectoryCommand implements Command { public LsCommand() { - namespace = NamespaceDirector.getNamespace(); + namespace = Namespace.getInstance(); } /** diff --git a/src/main/java/it/grid/storm/synchcall/command/directory/MkdirCommand.java b/src/main/java/it/grid/storm/synchcall/command/directory/MkdirCommand.java index f4b9ab31a..bca0ec413 100644 --- a/src/main/java/it/grid/storm/synchcall/command/directory/MkdirCommand.java +++ b/src/main/java/it/grid/storm/synchcall/command/directory/MkdirCommand.java @@ -47,7 +47,7 @@ import it.grid.storm.griduser.GridUserInterface; import it.grid.storm.griduser.LocalUser; import it.grid.storm.namespace.InvalidSURLException; -import it.grid.storm.namespace.NamespaceDirector; +import it.grid.storm.namespace.Namespace; import it.grid.storm.namespace.NamespaceException; import it.grid.storm.namespace.NamespaceInterface; import it.grid.storm.namespace.StoRI; @@ -115,7 +115,7 @@ public class MkdirCommand extends DirectoryCommand implements Command { public MkdirCommand() { - namespace = NamespaceDirector.getNamespace(); + namespace = Namespace.getInstance(); configuration = Configuration.getInstance(); aclManager = AclManagerFS.getInstance(); } diff --git a/src/main/java/it/grid/storm/synchcall/command/directory/MvCommand.java b/src/main/java/it/grid/storm/synchcall/command/directory/MvCommand.java index fdd78a27e..e9505797d 100644 --- a/src/main/java/it/grid/storm/synchcall/command/directory/MvCommand.java +++ b/src/main/java/it/grid/storm/synchcall/command/directory/MvCommand.java @@ -29,7 +29,7 @@ import it.grid.storm.catalogs.surl.SURLStatusManagerFactory; import it.grid.storm.filesystem.LocalFile; import it.grid.storm.namespace.InvalidSURLException; -import it.grid.storm.namespace.NamespaceDirector; +import it.grid.storm.namespace.Namespace; import it.grid.storm.namespace.NamespaceException; import it.grid.storm.namespace.NamespaceInterface; import it.grid.storm.namespace.StoRI; @@ -65,7 +65,7 @@ public class MvCommand extends DirectoryCommand implements Command { public MvCommand() { - namespace = NamespaceDirector.getNamespace(); + namespace = Namespace.getInstance(); } diff --git a/src/main/java/it/grid/storm/synchcall/command/directory/RmCommand.java b/src/main/java/it/grid/storm/synchcall/command/directory/RmCommand.java index 141938807..802936119 100644 --- a/src/main/java/it/grid/storm/synchcall/command/directory/RmCommand.java +++ b/src/main/java/it/grid/storm/synchcall/command/directory/RmCommand.java @@ -30,7 +30,7 @@ import it.grid.storm.filesystem.LocalFile; import it.grid.storm.griduser.GridUserInterface; import it.grid.storm.namespace.InvalidSURLException; -import it.grid.storm.namespace.NamespaceDirector; +import it.grid.storm.namespace.Namespace; import it.grid.storm.namespace.NamespaceException; import it.grid.storm.namespace.NamespaceInterface; import it.grid.storm.namespace.StoRI; @@ -76,7 +76,7 @@ public class RmCommand implements Command { public RmCommand() { - namespace = NamespaceDirector.getNamespace(); + namespace = Namespace.getInstance(); } @@ -202,7 +202,7 @@ private TReturnStatus removeFile(TSURL surl, GridUserInterface user, RmInputData returnStatus = new TReturnStatus(TStatusCode.SRM_SUCCESS, "File removed"); try { - NamespaceDirector.getNamespace().resolveVFSbyLocalFile(localFile).decreaseUsedSpace(fileSize); + namespace.resolveVFSbyLocalFile(localFile).decreaseUsedSpace(fileSize); } catch (NamespaceException e) { log.error(e.getMessage()); returnStatus.extendExplaination("Unable to decrease used space: " + e.getMessage()); diff --git a/src/main/java/it/grid/storm/synchcall/command/directory/RmdirCommand.java b/src/main/java/it/grid/storm/synchcall/command/directory/RmdirCommand.java index 8ead85380..3de460db4 100644 --- a/src/main/java/it/grid/storm/synchcall/command/directory/RmdirCommand.java +++ b/src/main/java/it/grid/storm/synchcall/command/directory/RmdirCommand.java @@ -28,7 +28,7 @@ import it.grid.storm.filesystem.LocalFile; import it.grid.storm.griduser.GridUserInterface; import it.grid.storm.namespace.InvalidSURLException; -import it.grid.storm.namespace.NamespaceDirector; +import it.grid.storm.namespace.Namespace; import it.grid.storm.namespace.NamespaceException; import it.grid.storm.namespace.NamespaceInterface; import it.grid.storm.namespace.StoRI; @@ -99,7 +99,7 @@ public class RmdirCommand extends DirectoryCommand implements Command { public RmdirCommand() { - namespace = NamespaceDirector.getNamespace(); + namespace = Namespace.getInstance(); } @@ -239,9 +239,7 @@ private boolean isRecursive(RmdirInputData data) { private void decreaseUsedSpace(LocalFile localFile, long sizeToRemove) throws NamespaceException { - NamespaceDirector.getNamespace() - .resolveVFSbyLocalFile(localFile) - .decreaseUsedSpace(sizeToRemove); + namespace.resolveVFSbyLocalFile(localFile).decreaseUsedSpace(sizeToRemove); } private TReturnStatus removeFolder(LocalFile dir, boolean recursive, TSize size) diff --git a/src/main/java/it/grid/storm/synchcall/command/space/ReserveSpaceCommand.java b/src/main/java/it/grid/storm/synchcall/command/space/ReserveSpaceCommand.java index 692a42c3f..95c1bc448 100644 --- a/src/main/java/it/grid/storm/synchcall/command/space/ReserveSpaceCommand.java +++ b/src/main/java/it/grid/storm/synchcall/command/space/ReserveSpaceCommand.java @@ -17,6 +17,11 @@ package it.grid.storm.synchcall.command.space; +import java.util.Date; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + import it.grid.storm.acl.AclManager; import it.grid.storm.acl.AclManagerFS; import it.grid.storm.catalogs.ReservedSpaceCatalog; @@ -29,7 +34,7 @@ import it.grid.storm.griduser.CannotMapUserException; import it.grid.storm.griduser.GridUserInterface; import it.grid.storm.griduser.LocalUser; -import it.grid.storm.namespace.NamespaceDirector; +import it.grid.storm.namespace.Namespace; import it.grid.storm.namespace.NamespaceException; import it.grid.storm.namespace.NamespaceInterface; import it.grid.storm.namespace.StoRI; @@ -63,11 +68,6 @@ import it.grid.storm.synchcall.data.space.ReserveSpaceInputData; import it.grid.storm.synchcall.data.space.ReserveSpaceOutputData; -import java.util.Date; - -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - /** * This class is part of the StoRM project. Copyright: Copyright (c) 2008 Company: INFN-CNAF and * ICTP/EGRID project @@ -122,7 +122,7 @@ private void logRequestFailure(GridUserInterface user, TSizeInBytes desSize, public ReserveSpaceCommand() { - namespace = NamespaceDirector.getNamespace(); + namespace = Namespace.getInstance(); catalog = ReservedSpaceCatalog.getInstance(); } diff --git a/src/main/java/it/grid/storm/tape/recalltable/model/PutTapeRecallStatusValidator.java b/src/main/java/it/grid/storm/tape/recalltable/model/PutTapeRecallStatusValidator.java index 547f1cbfc..d9e29edcc 100644 --- a/src/main/java/it/grid/storm/tape/recalltable/model/PutTapeRecallStatusValidator.java +++ b/src/main/java/it/grid/storm/tape/recalltable/model/PutTapeRecallStatusValidator.java @@ -17,13 +17,6 @@ package it.grid.storm.tape.recalltable.model; -import it.grid.storm.namespace.NamespaceDirector; -import it.grid.storm.namespace.StoRI; -import it.grid.storm.srm.types.InvalidTSURLAttributesException; -import it.grid.storm.srm.types.TSURL; -import it.grid.storm.util.SURLValidator; -import it.grid.storm.util.TokenValidator; - import java.util.StringTokenizer; import javax.ws.rs.core.Response; @@ -31,6 +24,13 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import it.grid.storm.namespace.Namespace; +import it.grid.storm.namespace.StoRI; +import it.grid.storm.srm.types.InvalidTSURLAttributesException; +import it.grid.storm.srm.types.TSURL; +import it.grid.storm.util.SURLValidator; +import it.grid.storm.util.TokenValidator; + public class PutTapeRecallStatusValidator implements RequestValidator { private static final Logger log = LoggerFactory @@ -142,7 +142,7 @@ private boolean validateSurl(String surlString) { return false; } try { - stori = NamespaceDirector.getNamespace().resolveStoRIbySURL(surl); + stori = Namespace.getInstance().resolveStoRIbySURL(surl); } catch (Exception e) { log.warn("Unable to build a stori for surl {} UnapprochableSurlException: {}" , surl , e.getMessage(),e); return false; diff --git a/src/main/java/it/grid/storm/tape/recalltable/resources/TaskResource.java b/src/main/java/it/grid/storm/tape/recalltable/resources/TaskResource.java index 33454b92e..8543cecaf 100644 --- a/src/main/java/it/grid/storm/tape/recalltable/resources/TaskResource.java +++ b/src/main/java/it/grid/storm/tape/recalltable/resources/TaskResource.java @@ -24,27 +24,6 @@ import static javax.ws.rs.core.Response.Status.INTERNAL_SERVER_ERROR; import static javax.ws.rs.core.Response.Status.NOT_FOUND; -import com.fasterxml.jackson.core.JsonProcessingException; -import com.fasterxml.jackson.databind.ObjectMapper; -import it.grid.storm.config.Configuration; -import it.grid.storm.namespace.NamespaceDirector; -import it.grid.storm.namespace.NamespaceException; -import it.grid.storm.namespace.NamespaceInterface; -import it.grid.storm.namespace.StoRI; -import it.grid.storm.persistence.exceptions.DataAccessException; -import it.grid.storm.persistence.model.TapeRecallTO; -import it.grid.storm.rest.metadata.service.ResourceNotFoundException; -import it.grid.storm.rest.metadata.service.ResourceService; -import it.grid.storm.tape.recalltable.TapeRecallCatalog; -import it.grid.storm.tape.recalltable.TapeRecallException; -import it.grid.storm.tape.recalltable.model.PutTapeRecallStatusLogic; -import it.grid.storm.tape.recalltable.model.PutTapeRecallStatusValidator; -import it.grid.storm.tape.recalltable.model.TapeRecallStatus; -import it.grid.storm.tape.recalltable.model.TaskInsertRequestValidator; - -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; @@ -66,6 +45,28 @@ import javax.ws.rs.core.GenericEntity; import javax.ws.rs.core.Response; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.ObjectMapper; + +import it.grid.storm.config.Configuration; +import it.grid.storm.namespace.Namespace; +import it.grid.storm.namespace.NamespaceException; +import it.grid.storm.namespace.NamespaceInterface; +import it.grid.storm.namespace.StoRI; +import it.grid.storm.persistence.exceptions.DataAccessException; +import it.grid.storm.persistence.model.TapeRecallTO; +import it.grid.storm.rest.metadata.service.ResourceNotFoundException; +import it.grid.storm.rest.metadata.service.ResourceService; +import it.grid.storm.tape.recalltable.TapeRecallCatalog; +import it.grid.storm.tape.recalltable.TapeRecallException; +import it.grid.storm.tape.recalltable.model.PutTapeRecallStatusLogic; +import it.grid.storm.tape.recalltable.model.PutTapeRecallStatusValidator; +import it.grid.storm.tape.recalltable.model.TapeRecallStatus; +import it.grid.storm.tape.recalltable.model.TaskInsertRequestValidator; + /** * @author Riccardo Zappi * @author Enrico Vianello @@ -84,7 +85,7 @@ public class TaskResource { public TaskResource() throws NamespaceException { - NamespaceInterface ns = NamespaceDirector.getNamespace(); + NamespaceInterface ns = Namespace.getInstance(); recallCatalog = new TapeRecallCatalog(); service = new ResourceService(ns.getAllDefinedVFS(), ns.getAllDefinedMappingRules()); } diff --git a/src/main/java/it/grid/storm/util/VirtualFSHelper.java b/src/main/java/it/grid/storm/util/VirtualFSHelper.java index aec536a48..fdad9527d 100644 --- a/src/main/java/it/grid/storm/util/VirtualFSHelper.java +++ b/src/main/java/it/grid/storm/util/VirtualFSHelper.java @@ -5,7 +5,7 @@ import com.google.common.collect.Lists; import it.grid.storm.namespace.CapabilityInterface; -import it.grid.storm.namespace.NamespaceDirector; +import it.grid.storm.namespace.Namespace; import it.grid.storm.namespace.VirtualFSInterface; import it.grid.storm.namespace.model.Quota; @@ -39,7 +39,7 @@ public static final boolean isGPFSQuotaEnabledForVFS(VirtualFSInterface vfs) { public static List getGPFSQuotaEnabledFilesystems() { List fss = Lists.newArrayList(); - List allVFS = NamespaceDirector.getNamespace().getAllDefinedVFS(); + List allVFS = Namespace.getInstance().getAllDefinedVFS(); for (VirtualFSInterface vfs : allVFS) { if (isGPFSQuotaEnabledForVFS(vfs)) diff --git a/src/test/java/it/grid/storm/rest/info/namespace/model/NamespaceTest.java b/src/test/java/it/grid/storm/rest/info/namespace/model/NamespaceTest.java new file mode 100644 index 000000000..629099bec --- /dev/null +++ b/src/test/java/it/grid/storm/rest/info/namespace/model/NamespaceTest.java @@ -0,0 +1,29 @@ +package it.grid.storm.rest.info.namespace.model; + +import java.io.File; +import java.io.IOException; + +import org.junit.Assert; +import org.junit.Test; + +import com.fasterxml.jackson.core.JsonParseException; +import com.fasterxml.jackson.databind.JsonMappingException; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.dataformat.xml.XmlMapper; + +public class NamespaceTest { + + @Test + public void test() throws JsonParseException, JsonMappingException, IOException { + + ClassLoader classLoader = getClass().getClassLoader(); + File file = new File(classLoader.getResource("namespace.xml").getFile()); + XmlMapper xmlMapper = new XmlMapper(); + Namespace info = xmlMapper.readValue(file, Namespace.class); + Assert.assertEquals("TESTVO-FS", info.getFilesystems().get(0).getName()); + ObjectMapper jsonMapper = new ObjectMapper(); + System.out.println(jsonMapper.writeValueAsString(info)); + + } + +} diff --git a/src/test/resources/namespace-1.5.0.xsd b/src/test/resources/namespace-1.5.0.xsd new file mode 100644 index 000000000..142bb247f --- /dev/null +++ b/src/test/resources/namespace-1.5.0.xsd @@ -0,0 +1,344 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/test/resources/namespace.xml b/src/test/resources/namespace.xml new file mode 100644 index 000000000..424e93fbc --- /dev/null +++ b/src/test/resources/namespace.xml @@ -0,0 +1,523 @@ + + + + TESTVO_TOKEN + T0D1 + /storage/test.vo + it.grid.storm.filesystem.swig.posixfs + it.grid.storm.filesystem.MockSpaceSystem + + permit-all + + + replica + online + neverExpire + 4000000000 + 0 + + + AoT + + + file + + + 0 + gsiftp + omii005-vm03.cnaf.infn.it + 2811 + + + root + omii005-vm03.cnaf.infn.it + 1094 + + + 1 + xroot + omii005-vm03.cnaf.infn.it + 1094 + + + 2 + https + omii005-vm03.cnaf.infn.it + 8443 + + + 3 + http + omii005-vm03.cnaf.infn.it + 8085 + + + + round-robin + + + + + + + + + TESTVO2_TOKEN + T0D1 + /storage/test.vo.2 + it.grid.storm.filesystem.swig.posixfs + it.grid.storm.filesystem.MockSpaceSystem + + permit-all + + + replica + online + neverExpire + 4000000000 + 0 + + + AoT + + + file + + + 0 + gsiftp + omii005-vm03.cnaf.infn.it + 2811 + + + root + omii005-vm03.cnaf.infn.it + 1094 + + + 1 + xroot + omii005-vm03.cnaf.infn.it + 1094 + + + 2 + https + omii005-vm03.cnaf.infn.it + 8443 + + + 3 + http + omii005-vm03.cnaf.infn.it + 8085 + + + + round-robin + + + + + + + + + IGI_TOKEN + T0D1 + /storage/igi + it.grid.storm.filesystem.swig.posixfs + it.grid.storm.filesystem.MockSpaceSystem + + permit-all + + + replica + online + neverExpire + 4000000000 + 0 + + + AoT + + + file + + + 0 + gsiftp + omii005-vm03.cnaf.infn.it + 2811 + + + root + omii005-vm03.cnaf.infn.it + 1094 + + + 1 + xroot + omii005-vm03.cnaf.infn.it + 1094 + + + 2 + https + omii005-vm03.cnaf.infn.it + 8443 + + + 3 + http + omii005-vm03.cnaf.infn.it + 8085 + + + + round-robin + + + + + + + + + NOAUTH_TOKEN + T0D1 + /storage/noauth + it.grid.storm.filesystem.swig.posixfs + it.grid.storm.filesystem.MockSpaceSystem + + permit-all + + + replica + online + neverExpire + 4000000000 + 0 + + + AoT + + + file + + + 0 + gsiftp + omii005-vm03.cnaf.infn.it + 2811 + + + root + omii005-vm03.cnaf.infn.it + 1094 + + + 1 + xroot + omii005-vm03.cnaf.infn.it + 1094 + + + 2 + https + omii005-vm03.cnaf.infn.it + 8443 + + + 3 + http + omii005-vm03.cnaf.infn.it + 8085 + + + + round-robin + + + + + + + + + TESTVOBIS_TOKEN + T0D1 + /storage/test.vo.bis + it.grid.storm.filesystem.swig.posixfs + it.grid.storm.filesystem.MockSpaceSystem + + permit-all + + + replica + online + neverExpire + 4000000000 + 0 + + + AoT + + + file + + + 0 + gsiftp + omii005-vm03.cnaf.infn.it + 2811 + + + root + omii005-vm03.cnaf.infn.it + 1094 + + + 1 + xroot + omii005-vm03.cnaf.infn.it + 1094 + + + 2 + https + omii005-vm03.cnaf.infn.it + 8443 + + + 3 + http + omii005-vm03.cnaf.infn.it + 8085 + + + + round-robin + + + + + + + + + NESTED_TOKEN + T0D1 + /storage/nested + it.grid.storm.filesystem.swig.posixfs + it.grid.storm.filesystem.MockSpaceSystem + + permit-all + + + replica + online + neverExpire + 4000000000 + 0 + + + AoT + + + file + + + 0 + gsiftp + omii005-vm03.cnaf.infn.it + 2811 + + + root + omii005-vm03.cnaf.infn.it + 1094 + + + 1 + xroot + omii005-vm03.cnaf.infn.it + 1094 + + + 2 + https + omii005-vm03.cnaf.infn.it + 8443 + + + 3 + http + omii005-vm03.cnaf.infn.it + 8085 + + + + round-robin + + + + + + + + + TAPE_TOKEN + T1D0 + /storage/tape + it.grid.storm.filesystem.swig.test + it.grid.storm.filesystem.MockSpaceSystem + + permit-all + + + custodial + nearline + neverExpire + 4000000000 + 8000000000 + + + AoT + + + file + + + 0 + gsiftp + omii005-vm03.cnaf.infn.it + 2811 + + + root + omii005-vm03.cnaf.infn.it + 1094 + + + 1 + xroot + omii005-vm03.cnaf.infn.it + 1094 + + + 2 + https + omii005-vm03.cnaf.infn.it + 8443 + + + 3 + http + omii005-vm03.cnaf.infn.it + 8085 + + + + round-robin + + + + + + + + + + + /test.vo + TESTVO-FS + + + /test.vo.2 + TESTVO2-FS + + + /igi + IGI-FS + + + /noauth + NOAUTH-FS + + + /test.vo.bis + TESTVOBIS-FS + + + /test.vo.2/nested + NESTED-FS + + + /alias + NESTED-FS + + + /tape + TAPE-FS + + + + + + * + test.vo + + TESTVO-FS + false + + + + * + test.vo.2 + + TESTVO2-FS + false + + + + * + test.vo + + IGI-FS + false + + + + * + test.vo + + NOAUTH-FS + false + + + + * + test.vo.2 + + TESTVOBIS-FS + false + + + + * + test.vo.2 + + NESTED-FS + false + + + + * + test.vo.2 + + TAPE-FS + false + + + \ No newline at end of file