in source/lambda/copyToDestinationBucket/lib/copy.js [70:110]
async function copyMultiPart(key, aid, uploadId, partNo, startByte, endByte) {
let uploadResult = await copyPart(uploadId, key, partNo, startByte, endByte)
let etag = uploadResult.ETag;
let latestStatusRecord = await db.updateChunkStatusGetLatest(aid, partNo, etag)
let cc = parseInt(latestStatusRecord.Attributes.cc.N)
let count = 0
for (const entry in latestStatusRecord.Attributes) {
if (entry.includes("chunk") &&
latestStatusRecord.Attributes[entry].S &&
latestStatusRecord.Attributes[entry].S.length < 64) {
count++
}
}
if (count < cc) return
let eTags = []
Array.from(Array(cc)).forEach((_, i) => {
const chunkId = i + 1
let entry = latestStatusRecord.Attributes[`chunk${chunkId}`].S
eTags.push({
PartNumber: chunkId,
ETag: entry
})
});
await s3.completeMultipartUpload({
Bucket: DESTINATION_BUCKET,
Key: key,
MultipartUpload: {
Parts: eTags
},
UploadId: uploadId
}).promise();
await closeOffRecord(aid, key);
console.log(`Multipart copy completed : ${key}`);
}