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);
}