From c9953a2fbbce30b8822131c856424f5186002c4a Mon Sep 17 00:00:00 2001 From: Boris Faure Date: Fri, 24 Apr 2026 11:20:12 +0200 Subject: [PATCH] Fix ETag fallback to dataStoreETag for ring-s3-rdma-http objects When content-md5 is absent (e.g. parts written by ring-s3-rdma-http which stores ETag only as "1:" in dataStoreETag), fall back to extracting the hex portion from dataStoreETag for use as the ETag in list entries. Issue: ARSN-579 --- lib/storage/metadata/MetadataWrapper.js | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/lib/storage/metadata/MetadataWrapper.js b/lib/storage/metadata/MetadataWrapper.js index 93ef63566..0955ebe7f 100644 --- a/lib/storage/metadata/MetadataWrapper.js +++ b/lib/storage/metadata/MetadataWrapper.js @@ -41,11 +41,27 @@ function _parseListEntries(entries) { }; } + // Fall back to dataStoreETag when content-md5 is absent (e.g. parts + // written by ring-s3-rdma-http which stores ETag only as "1:"). + let etag = tmp['content-md5']; + if (!etag) { + const loc = Array.isArray(tmp.partLocations) + ? tmp.partLocations[0] + : tmp.partLocations; + const dst = loc && loc.dataStoreETag; + if (dst) { + const colon = dst.indexOf(':'); + if (colon !== -1) { + etag = dst.slice(colon + 1); + } + } + } + return { key: entry.key, value: { Size: tmp['content-length'], - ETag: tmp['content-md5'], + ETag: etag, VersionId: tmp.versionId, IsNull: tmp.isNull, IsDeleteMarker: tmp.isDeleteMarker,