diff --git a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/cifs/CifsFile.java b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/cifs/CifsFile.java index 4886f977fcdb4062b9b91f9cf60fdcf63ee6e19f..d9484efb1869bf00166833fa4d600ee17c693c32 100644 --- a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/cifs/CifsFile.java +++ b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/cifs/CifsFile.java @@ -103,7 +103,7 @@ final class CifsFile extends NetworkFile { throw new IOException("Virtual file '" + file.getAbsolutePath() + "' can not be created."); } - operationLog.info("Open virtual file '" + file.getAbsolutePath() + "'."); + operationLog.debug("Open virtual file '" + file.getAbsolutePath() + "'."); synchronized (file) { if (randomAccessFile == null && file instanceof FtpFileImpl) diff --git a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/cifs/CifsServerLogger.java b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/cifs/CifsServerLogger.java index 3ea269844ae21fa166966b4650d01bc5c664df7d..197f3e400c021553279c606146459f8dfbcfc812 100644 --- a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/cifs/CifsServerLogger.java +++ b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/cifs/CifsServerLogger.java @@ -27,16 +27,15 @@ import ch.systemsx.cisd.common.logging.LogCategory; import ch.systemsx.cisd.common.logging.LogFactory; /** - * - * * @author Franz-Josef Elmer */ public class CifsServerLogger implements DebugInterface { private static final Logger operationLog = LogFactory.getLogger(LogCategory.OPERATION, CifsServerLogger.class); - - private Level level = Level.INFO; + + private Level level = Level.WARN; + private ThreadLocal<StringBuilder> messageBuilder = new ThreadLocal<>(); @Override @@ -54,7 +53,7 @@ public class CifsServerLogger implements DebugInterface @Override public int getLogLevel() { - return Debug.Debug; + return Debug.Warn; } @Override @@ -74,13 +73,13 @@ public class CifsServerLogger implements DebugInterface } builder.append(str); } - + @Override public void debugPrintln(String str) { debugPrintln(str, Debug.Debug); } - + @Override public void debugPrintln(String str, int l) { @@ -94,17 +93,18 @@ public class CifsServerLogger implements DebugInterface builder.setLength(0); } } + @Override public void debugPrintln(Exception ex, int l) { operationLog.log(level, "", ex); - + } - + @Override public void close() { operationLog.info("CifsServerLogger.close()"); } - + } diff --git a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/cifs/DataSetCifsView.java b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/cifs/DataSetCifsView.java index 8b3c81e2be11c953fd6605455c3e850caffda1dc..392f9ddbe5ba42d3512783839f04519036c82944 100644 --- a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/cifs/DataSetCifsView.java +++ b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/cifs/DataSetCifsView.java @@ -127,7 +127,7 @@ public class DataSetCifsView implements DiskInterface FtpFile file = view.getFile(normalizedPath, cache); FileInfo fileInfo = new FileInfo(); Utils.populateFileInfo(fileInfo, file); - operationLog.info("provide file info for virtual file '" + file.getAbsolutePath() + "': " + fileInfo); + operationLog.debug("provide file info for virtual file '" + file.getAbsolutePath() + "': " + fileInfo); return fileInfo; } catch (FtpException ex) { @@ -193,7 +193,7 @@ public class DataSetCifsView implements DiskInterface NonExistingFtpFile nonExistingFtpFile = (NonExistingFtpFile) file; throw new FileNotFoundException(path + " does not exist. Reason: " + nonExistingFtpFile.getErrorMessage()); } - operationLog.info("Open file '" + path + "'."); + operationLog.debug("Open file '" + path + "'."); NetworkFile networkFile = new CifsFile(file); networkFile.setAttributes(FileAttribute.ReadOnly); diff --git a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/ftp/v3/V3ExperimentLevelResolver.java b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/ftp/v3/V3ExperimentLevelResolver.java index 6af0152c88148ded6e872e8b10a96f5b0fb3f14a..e46a18eac7944396e754f73b1f732537152b4a8d 100644 --- a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/ftp/v3/V3ExperimentLevelResolver.java +++ b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/ftp/v3/V3ExperimentLevelResolver.java @@ -27,6 +27,7 @@ import ch.ethz.sis.openbis.generic.asapi.v3.dto.experiment.id.IExperimentId; import ch.systemsx.cisd.openbis.dss.generic.server.ftp.FtpPathResolverContext; import ch.systemsx.cisd.openbis.dss.generic.server.ftp.v3.file.V3FtpDirectoryResponse; import ch.systemsx.cisd.openbis.dss.generic.server.ftp.v3.file.V3FtpFile; +import ch.systemsx.cisd.openbis.dss.generic.server.ftp.v3.file.V3FtpNonExistingFile; class V3ExperimentLevelResolver implements V3Resolver { @@ -49,6 +50,11 @@ class V3ExperimentLevelResolver implements V3Resolver context.getV3Api().getExperiments(context.getSessionToken(), Collections.singletonList(experimentId), fetchOptions); Experiment exp = experiments.get(experimentId); + if (exp == null) + { + return new V3FtpNonExistingFile(fullPath, null); + } + V3FtpDirectoryResponse response = new V3FtpDirectoryResponse(fullPath); for (DataSet dataSet : exp.getDataSets()) { diff --git a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/ftp/v3/V3FtpPathResolverRegistry.java b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/ftp/v3/V3FtpPathResolverRegistry.java index 71bd571d3b2726f448f621138948383e2eddc68a..3bd9372cc3eb286660ac149a5953d6b6f08d1119 100644 --- a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/ftp/v3/V3FtpPathResolverRegistry.java +++ b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/ftp/v3/V3FtpPathResolverRegistry.java @@ -85,17 +85,17 @@ public class V3FtpPathResolverRegistry implements IFtpPathResolverRegistry @Override public FtpFile resolve(String path, FtpPathResolverContext resolverContext) { - + String responseCacheKey = resolverContext.getSessionToken() + "$" + path; Cache cache = resolverContext.getCache(); V3FtpFile response = cache.getResponse(responseCacheKey); if (response != null) { - operationLog.info("Path "+path+" requested (found in cache)."); + operationLog.debug("Path " + path + " requested (found in cache)."); return response; } - operationLog.info("Path "+path+" requested."); + operationLog.debug("Path " + path + " requested."); String[] split = path.equals("/") ? new String[] {} : path.substring(1).split("/"); try @@ -152,7 +152,7 @@ public class V3FtpPathResolverRegistry implements IFtpPathResolverRegistry return resolver.resolve(path, remaining, resolverContext); } } - return new V3FtpNonExistingFile(path, "Error when retrieving path"); + return new V3FtpNonExistingFile(path, null); } } } diff --git a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/ftp/v3/V3HierarchicalContentResolver.java b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/ftp/v3/V3HierarchicalContentResolver.java index 6073566ffabecb6eca6bf368cbf34220a769203d..c3f4d44fd12c3f1256a8acc46d46a61708f20445 100644 --- a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/ftp/v3/V3HierarchicalContentResolver.java +++ b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/ftp/v3/V3HierarchicalContentResolver.java @@ -23,6 +23,7 @@ import ch.systemsx.cisd.openbis.dss.generic.server.ftp.FtpPathResolverContext; import ch.systemsx.cisd.openbis.dss.generic.server.ftp.v3.file.V3FtpDirectoryResponse; import ch.systemsx.cisd.openbis.dss.generic.server.ftp.v3.file.V3FtpFile; import ch.systemsx.cisd.openbis.dss.generic.server.ftp.v3.file.V3FtpFileResponse; +import ch.systemsx.cisd.openbis.dss.generic.server.ftp.v3.file.V3FtpNonExistingFile; class V3HierarchicalContentResolver implements V3Resolver { @@ -43,7 +44,12 @@ class V3HierarchicalContentResolver implements V3Resolver rootNode = content.getRootNode(); } else { - rootNode = content.getNode(StringUtils.join(subPath, "/")); + rootNode = content.tryGetNode(StringUtils.join(subPath, "/")); + } + + if (rootNode == null) + { + return new V3FtpNonExistingFile(fullPath, null); } if (false == rootNode.isDirectory()) diff --git a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/ftp/v3/V3ProjectLevelResolver.java b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/ftp/v3/V3ProjectLevelResolver.java index e01a870260cd1763075e2cc101f16862f0c98f4e..c1dca33c8696bcd778160299ec31c415bdf6e295 100644 --- a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/ftp/v3/V3ProjectLevelResolver.java +++ b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/ftp/v3/V3ProjectLevelResolver.java @@ -29,6 +29,7 @@ import ch.ethz.sis.openbis.generic.asapi.v3.dto.project.id.ProjectIdentifier; import ch.systemsx.cisd.openbis.dss.generic.server.ftp.FtpPathResolverContext; import ch.systemsx.cisd.openbis.dss.generic.server.ftp.v3.file.V3FtpDirectoryResponse; import ch.systemsx.cisd.openbis.dss.generic.server.ftp.v3.file.V3FtpFile; +import ch.systemsx.cisd.openbis.dss.generic.server.ftp.v3.file.V3FtpNonExistingFile; class V3ProjectLevelResolver implements V3Resolver { @@ -52,6 +53,10 @@ class V3ProjectLevelResolver implements V3Resolver Project project = projects.get(projectIdentifier); V3FtpDirectoryResponse response = new V3FtpDirectoryResponse(fullPath); + if (project == null) + { + return new V3FtpNonExistingFile(fullPath, null); + } for (Experiment exp : project.getExperiments()) { response.addDirectory(exp.getCode()); diff --git a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/ftp/v3/V3SpaceLevelResolver.java b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/ftp/v3/V3SpaceLevelResolver.java index b55ee5cbc776b6d9afbc638acb71390b06bc215d..73581da211908439f40c53bffdb94bcd565d7da6 100644 --- a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/ftp/v3/V3SpaceLevelResolver.java +++ b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/ftp/v3/V3SpaceLevelResolver.java @@ -17,14 +17,19 @@ package ch.systemsx.cisd.openbis.dss.generic.server.ftp.v3; import java.util.Arrays; -import java.util.List; +import java.util.Collections; +import java.util.Map; import ch.ethz.sis.openbis.generic.asapi.v3.dto.project.Project; -import ch.ethz.sis.openbis.generic.asapi.v3.dto.project.fetchoptions.ProjectFetchOptions; -import ch.ethz.sis.openbis.generic.asapi.v3.dto.project.search.ProjectSearchCriteria; +import ch.ethz.sis.openbis.generic.asapi.v3.dto.space.Space; +import ch.ethz.sis.openbis.generic.asapi.v3.dto.space.fetchoptions.SpaceFetchOptions; +import ch.ethz.sis.openbis.generic.asapi.v3.dto.space.id.ISpaceId; +import ch.ethz.sis.openbis.generic.asapi.v3.dto.space.id.SpacePermId; +import ch.ethz.sis.openbis.generic.asapi.v3.dto.space.search.SpaceSearchCriteria; import ch.systemsx.cisd.openbis.dss.generic.server.ftp.FtpPathResolverContext; import ch.systemsx.cisd.openbis.dss.generic.server.ftp.v3.file.V3FtpDirectoryResponse; import ch.systemsx.cisd.openbis.dss.generic.server.ftp.v3.file.V3FtpFile; +import ch.systemsx.cisd.openbis.dss.generic.server.ftp.v3.file.V3FtpNonExistingFile; class V3SpaceLevelResolver implements V3Resolver { @@ -40,14 +45,25 @@ class V3SpaceLevelResolver implements V3Resolver { if (subPath.length == 0) { - ProjectSearchCriteria searchCriteria = new ProjectSearchCriteria(); - searchCriteria.withSpace().withCode().thatEquals(spaceCode); - ProjectFetchOptions fetchOptions = new ProjectFetchOptions(); - List<Project> projects = - context.getV3Api().searchProjects(context.getSessionToken(), searchCriteria, fetchOptions).getObjects(); + SpaceSearchCriteria searchCriteria = new SpaceSearchCriteria(); + searchCriteria.withCode().thatEquals(spaceCode); + SpaceFetchOptions fetchOptions = new SpaceFetchOptions(); + fetchOptions.withProjects(); + + SpacePermId spaceCodeId = new SpacePermId(spaceCode); + + Map<ISpaceId, Space> spaces = + context.getV3Api().getSpaces(context.getSessionToken(), Collections.singletonList(spaceCodeId), fetchOptions); + + Space space = spaces.get(spaceCodeId); + + if (space == null) + { + return new V3FtpNonExistingFile(fullPath, null); + } V3FtpDirectoryResponse response = new V3FtpDirectoryResponse(fullPath); - for (Project project : projects) + for (Project project : space.getProjects()) { response.addDirectory(project.getCode()); } diff --git a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/ftp/v3/plugins/V3DataSetTypeResolver.java b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/ftp/v3/plugins/V3DataSetTypeResolver.java index 6ed5b42377a4024ac4c5d73ef096a92f40347604..de7c187f4e1f56abb9a6704ca96b6bf92672fcbb 100644 --- a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/ftp/v3/plugins/V3DataSetTypeResolver.java +++ b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/ftp/v3/plugins/V3DataSetTypeResolver.java @@ -77,6 +77,11 @@ public class V3DataSetTypeResolver implements V3Resolver List<DataSet> dataSetsToSearch = searchForDataSetAndParents(dataSetCode, context); + if (dataSetsToSearch == null) + { + return new V3FtpNonExistingFile(fullPath, null); + } + if (requestedFileName != null) { V3FtpFileResponse result = findRequestedNode(fullPath, dataSetsToSearch, requestedFileName, context.getContentProvider()); @@ -168,6 +173,11 @@ public class V3DataSetTypeResolver implements V3Resolver fetchOptions.withParents(); DataSet dataSet = context.getV3Api().getDataSets(context.getSessionToken(), Collections.singletonList(dataId), fetchOptions).get(dataId); + if (dataSet == null) + { + return null; + } + List<DataSet> dataSetsToSearch = new ArrayList<>(); dataSetsToSearch.add(dataSet); dataSetsToSearch.addAll(dataSet.getParents());