From bdb8da5cd3824bc6859af80d28ec64e202a88521 Mon Sep 17 00:00:00 2001 From: Marina Sahakyan Date: Wed, 6 Mar 2024 13:46:40 +0100 Subject: [PATCH] Revert "chimera: make list method to support virtual directory listing" This reverts commit 1fbd7ae388b756314597db2c4d035878a100157f. --- .../java/org/dcache/chimera/FsInodeType.java | 4 +- .../org/dcache/chimera/FsInode_LABEL.java | 64 ------------------- .../java/org/dcache/chimera/FsSqlDriver.java | 7 +- .../main/java/org/dcache/chimera/JdbcFs.java | 23 +------ .../java/org/dcache/chimera/JdbcFsTest.java | 40 ------------ .../namespace/ChimeraNameSpaceProvider.java | 7 -- 6 files changed, 6 insertions(+), 139 deletions(-) delete mode 100644 modules/chimera/src/main/java/org/dcache/chimera/FsInode_LABEL.java diff --git a/modules/chimera/src/main/java/org/dcache/chimera/FsInodeType.java b/modules/chimera/src/main/java/org/dcache/chimera/FsInodeType.java index f367f7d9a25..a238bab5c9c 100644 --- a/modules/chimera/src/main/java/org/dcache/chimera/FsInodeType.java +++ b/modules/chimera/src/main/java/org/dcache/chimera/FsInodeType.java @@ -32,8 +32,8 @@ public enum FsInodeType { PCRC(11), // the content of the inode is a name-value list of checksum types and checksums SURI(12), // read, write or update/overwrite location info for type TAPE PINS(13), // the content of the inode is a list of current pins - CKSTYP(14), // the available checksum types - LABEL(15); // virtual directory type (ls labels) + CKSTYP(14); // the available checksum types + private final int _id; FsInodeType(int id) { diff --git a/modules/chimera/src/main/java/org/dcache/chimera/FsInode_LABEL.java b/modules/chimera/src/main/java/org/dcache/chimera/FsInode_LABEL.java deleted file mode 100644 index 9002c75950a..00000000000 --- a/modules/chimera/src/main/java/org/dcache/chimera/FsInode_LABEL.java +++ /dev/null @@ -1,64 +0,0 @@ -/* - * dCache - http://www.dcache.org/ - * - * Copyright (C) 2023 Deutsches Elektronen-Synchrotron - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see . - */ -package org.dcache.chimera; - -import java.util.Set; - -public class FsInode_LABEL extends FsInode { - - public String getLabel() { - return _label; - } - - private final String _label; - - /** - * @param fs pointer to 'File System' - * @param ino inode number of the label_id - * @param label - */ - public FsInode_LABEL(FileSystemProvider fs, long ino, String label) { - super(fs, ino, FsInodeType.LABEL); - _label = label; - } - - @Override - public boolean exists() { - boolean rc = false; - try { - Set list = _fs.getLabels(this); - if (list.contains(_label)) { - rc = true; - } - } catch (Exception e) { - } - return rc; - } - - @Override - public boolean isDirectory() { - return true; - } - - @Override - public boolean isLink() { - return false; - } - -} diff --git a/modules/chimera/src/main/java/org/dcache/chimera/FsSqlDriver.java b/modules/chimera/src/main/java/org/dcache/chimera/FsSqlDriver.java index c0a11037286..18452ca51b7 100644 --- a/modules/chimera/src/main/java/org/dcache/chimera/FsSqlDriver.java +++ b/modules/chimera/src/main/java/org/dcache/chimera/FsSqlDriver.java @@ -2134,12 +2134,9 @@ void addLabel(FsInode inode, String labelname) throws ChimeraFsException { * @param labelname a name of the label attached to files * @return stream of files having the given label */ - DirectoryStreamB virtualDirectoryStream(FsInode dir) - throws ChimeraFsException { - + DirectoryStreamB virtualDirectoryStream(FsInode dir, String labelname) { return new DirectoryStreamB() { - - final VirtualDirectoryStreamImpl stream = new VirtualDirectoryStreamImpl(((FsInode_LABEL)dir).getLabel(), + final VirtualDirectoryStreamImpl stream = new VirtualDirectoryStreamImpl(labelname, _jdbc); diff --git a/modules/chimera/src/main/java/org/dcache/chimera/JdbcFs.java b/modules/chimera/src/main/java/org/dcache/chimera/JdbcFs.java index 9fb5c35faa9..2d450bdc40a 100644 --- a/modules/chimera/src/main/java/org/dcache/chimera/JdbcFs.java +++ b/modules/chimera/src/main/java/org/dcache/chimera/JdbcFs.java @@ -539,17 +539,13 @@ public void createFileWithId(FsInode parent, String id, String name, int owner, @Override public DirectoryStreamB newDirectoryStream(FsInode dir) throws ChimeraFsException { - if ((dir instanceof FsInode_LABEL)) { - return _sqlDriver.virtualDirectoryStream(dir); - } else { - return _sqlDriver.newDirectoryStream(dir); - } + return _sqlDriver.newDirectoryStream(dir); } @Override public DirectoryStreamB virtualDirectoryStream(FsInode dir, String labelname) throws ChimeraFsException { - return _sqlDriver.virtualDirectoryStream(dir); + return _sqlDriver.virtualDirectoryStream(dir, labelname); } @Override @@ -867,21 +863,6 @@ public FsInode inodeOf(FsInode parent, String name, StatCacheOption cacheOption) return nameofInode; } - if (name.startsWith(".(collection)(")) { - String[] cmd = PnfsCommandProcessor.process(name); - if (cmd.length != 2) { - throw FileNotFoundChimeraFsException.ofFileInDirectory(parent, name); - } - - FsInode labelInode = new FsInode_LABEL(this, _sqlDriver.getLabel(cmd[1]), cmd[1]); - if (!(labelInode.type() == FsInodeType.LABEL)) { - if (!labelInode.exists()) { - throw FileNotFoundChimeraFsException.ofFileInDirectory(parent, name); - } - } - return labelInode; - } - if (name.startsWith(".(const)(")) { String[] cmd = PnfsCommandProcessor.process(name); if (cmd.length != 2) { diff --git a/modules/chimera/src/test/java/org/dcache/chimera/JdbcFsTest.java b/modules/chimera/src/test/java/org/dcache/chimera/JdbcFsTest.java index 1a1fc93e2fc..e30df3b31ac 100644 --- a/modules/chimera/src/test/java/org/dcache/chimera/JdbcFsTest.java +++ b/modules/chimera/src/test/java/org/dcache/chimera/JdbcFsTest.java @@ -27,9 +27,7 @@ import java.util.ArrayList; import java.util.Collection; import java.util.Collections; -import java.util.HashSet; import java.util.List; -import java.util.Set; import org.dcache.acl.ACE; import org.dcache.acl.enums.AccessMask; import org.dcache.acl.enums.AceType; @@ -1849,44 +1847,6 @@ public void testGetLabels() throws Exception { assertThat("List labels without order", labelsSet, containsInAnyOrder(labels)); - } - - @Test - public void testLsWithLabel() throws Exception { - - FsInode dir = _fs.mkdir("/test"); - FsInode inodeA = _fs.createFile(dir, "aFile"); - FsInode inodeB = _fs.createFile(dir, "bFile"); - FsInode inodeC = _fs.createFile(dir, "cFile"); - - FsInode dir1 = _fs.mkdir("/test1"); - FsInode inodeB2 = _fs.createFile(dir1, "bFile"); - - String[] labels = {"cat", "dog", "yellow", "green"}; - - for (String labelName : labels) { - _fs.addLabel(inodeA, labelName); - _fs.addLabel(inodeB, labelName); - _fs.addLabel(inodeB2, labelName); - } - - FsInode newInode = _fs.inodeOf(_rootInode, (".(collection)(cat)"), NO_STAT); - - Collection dirLs = new HashSet<>(); - try (DirectoryStreamB dirStream = _fs.newDirectoryStream( - newInode)) { - - for (ChimeraDirectoryEntry entry : dirStream) { - dirLs.add(entry.getInode().getId()); - - } - } - - assertThat("List file's pnfsid without order", dirLs, - containsInAnyOrder(inodeA.getId(), inodeB.getId(), inodeB2.getId())); - assertEquals("Unexpected number of entries", 3, getDirEntryCount(newInode)); - - } @Test diff --git a/modules/dcache-chimera/src/main/java/org/dcache/chimera/namespace/ChimeraNameSpaceProvider.java b/modules/dcache-chimera/src/main/java/org/dcache/chimera/namespace/ChimeraNameSpaceProvider.java index 3eaafa0c95e..b984eb9991e 100644 --- a/modules/dcache-chimera/src/main/java/org/dcache/chimera/namespace/ChimeraNameSpaceProvider.java +++ b/modules/dcache-chimera/src/main/java/org/dcache/chimera/namespace/ChimeraNameSpaceProvider.java @@ -96,7 +96,6 @@ import org.dcache.chimera.FileSystemProvider; import org.dcache.chimera.FileSystemProvider.SetXattrMode; import org.dcache.chimera.FsInode; -import org.dcache.chimera.FsInode_LABEL; import org.dcache.chimera.NoXdataChimeraException; import org.dcache.chimera.NotDirChimeraException; import org.dcache.chimera.StorageGenericLocation; @@ -263,11 +262,6 @@ private ExtendedInode pathToInode(Subject subject, String path) return new ExtendedInode(_fs, _fs.path2inode(path)); } - if (path.startsWith("/.(collection)")) { - ExtendedInode dir = new ExtendedInode(_fs, _fs.path2inode(path)); - return dir.inodeOf(path, STAT); - } - List inodes; try { inodes = _fs.path2inodes(path); @@ -1295,7 +1289,6 @@ public void list(Subject subject, String path, Glob glob, Range range, try { Pattern pattern = (glob == null) ? null : glob.toPattern(); ExtendedInode dir = pathToInode(subject, path); - // TODO this should be checkt for virtual directories and test casse for list() must e added if (!dir.isDirectory()) { throw new NotDirCacheException("Not a directory: " + path); }