async function copyMultiPart()

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