s3: use listObjectsV2 API

in some minio instances, listObjectV1 is not returning all the objects
This commit is contained in:
Girish Ramakrishnan
2025-05-26 14:16:44 +02:00
parent f6de9918b5
commit 48bf21a537

View File

@@ -155,7 +155,7 @@ async function exists(apiConfig, backupFilePath) {
MaxKeys: 1
};
const [error, listData] = await safe(s3.listObjects(listParams));
const [error, listData] = await safe(s3.listObjectsV2(listParams));
if (error) throw new BoxError(BoxError.EXTERNAL_ERROR, `Error listing objects ${backupFilePath}. Message: ${error.message} HTTP Code: ${error.code}`);
return listData.Contents.length !== 0;
@@ -267,13 +267,13 @@ async function listDir(apiConfig, dir, batchSize, marker) {
Prefix: dir,
MaxKeys: batchSize
};
if (marker) listParams.Marker = marker;
if (marker) listParams.ContinuationToken = marker;
const [error, listData] = await safe(s3.listObjects(listParams));
const [error, listData] = await safe(s3.listObjectsV2(listParams));
if (error) throw new BoxError(BoxError.EXTERNAL_ERROR, `Error listing objects in ${dir}. Message: ${error.message} HTTP Code: ${error.code}`);
if (listData.Contents.length === 0) return { entries: [], marker: null }; // no more
const entries = listData.Contents.map(function (c) { return { fullPath: c.Key, size: c.Size }; });
return { entries, marker: !listData.IsTruncated ? null : listData.Contents[listData.Contents.length - 1].Key };
return { entries, marker: !listData.IsTruncated ? null : listData.NextContinuationToken };
}
// https://github.com/aws/aws-sdk-js/blob/2b6bcbdec1f274fe931640c1b61ece999aae7a19/lib/util.js#L41
@@ -538,7 +538,7 @@ async function testConfig(apiConfig) {
MaxKeys: 1
};
const [listError] = await safe(s3.listObjects(listParams));
const [listError] = await safe(s3.listObjectsV2(listParams));
if (listError) throw new BoxError(BoxError.EXTERNAL_ERROR, `Error listing objects. Message: ${listError.message} HTTP Code: ${listError.code}`);
const delParams = {