diff --git a/historyserver/pkg/storage/aliyunoss/ray/ray.go b/historyserver/pkg/storage/aliyunoss/ray/ray.go index 7a8b3ee373b..63e4dd6b814 100644 --- a/historyserver/pkg/storage/aliyunoss/ray/ray.go +++ b/historyserver/pkg/storage/aliyunoss/ray/ray.go @@ -105,6 +105,9 @@ func (r *RayLogsHandler) _listFiles(prefix string, delimiter string, onlyBase bo logrus.Infof("[ListFiles]Returned objects in %v. length of Contents: %v, length of CommonPrefixes: %v", prefix+"/", len(page.Contents), len(page.CommonPrefixes)) for _, objects := range page.Contents { + if utils.IsDirectoryMarker(*objects.Key) { + continue + } objName := *objects.Key if onlyBase { objName = path.Base(*objects.Key) @@ -167,6 +170,9 @@ func (r *RayLogsHandler) List() (res []utils.ClusterInfo) { logrus.Infof("[List]Returned objects in %v. length of Contents: %v, length of CommonPrefixes: %v", prefix, len(page.Contents), len(page.CommonPrefixes)) for _, objects := range page.Contents { + if utils.IsDirectoryMarker(*objects.Key) { + continue + } c, err := clustermetadata.DecodePath(*objects.Key, r.OssRootDir) if err != nil { logrus.Errorf("Failed to parse meta file path: %s, error: %v", *objects.Key, err) diff --git a/historyserver/pkg/storage/s3/s3.go b/historyserver/pkg/storage/s3/s3.go index b7e99126066..953819009bd 100644 --- a/historyserver/pkg/storage/s3/s3.go +++ b/historyserver/pkg/storage/s3/s3.go @@ -104,6 +104,9 @@ func (r *RayLogsHandler) _listFiles(prefix string, delimiter string, onlyBase bo prefix+"/", len(page.Contents), len(page.CommonPrefixes)) for _, object := range page.Contents { + if utils.IsDirectoryMarker(*object.Key) { + continue + } objName := *object.Key if onlyBase { objName = path.Base(*object.Key) @@ -169,6 +172,9 @@ func (r *RayLogsHandler) List() (res []utils.ClusterInfo) { prefix, len(page.Contents), len(page.CommonPrefixes)) for _, object := range page.Contents { + if utils.IsDirectoryMarker(*object.Key) { + continue + } c, err := clustermetadata.DecodePath(*object.Key, r.S3RootDir) if err != nil { logrus.Errorf("Failed to parse meta file path: %s, error: %v", *object.Key, err) diff --git a/historyserver/pkg/utils/utils.go b/historyserver/pkg/utils/utils.go index 9cd3cd011d5..2d64b746256 100644 --- a/historyserver/pkg/utils/utils.go +++ b/historyserver/pkg/utils/utils.go @@ -49,6 +49,12 @@ func EndpointPathToStorageKey(endpointPath string) string { return "restful__" + strings.ReplaceAll(trimmed, "/", "__") } +// IsDirectoryMarker reports whether key is an empty directory placeholder +// rather than a real object. +func IsDirectoryMarker(key string) bool { + return strings.HasSuffix(key, "/") +} + const ( // connector is the separator for creating flat storage keys. //