Skip to content

Commit d8c66fb

Browse files
committed
fix: handle MissingContentMD5 error from MinIO edge-cicd in setLifecycleRules
MinIO edge-cicd returns MissingContentMD5 for PutBucketLifecycleConfiguration (requires Content-MD5 header the SDK doesn't always send). Add this error code to the graceful degradation catch block so lifecycle rules are best-effort on backends that require this header.
1 parent 975e1a1 commit d8c66fb

2 files changed

Lines changed: 16 additions & 2 deletions

File tree

packages/bucket-provisioner/__tests__/provisioner.test.ts

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -590,6 +590,17 @@ describe('BucketProvisioner — graceful degradation (error-code matching)', ()
590590
]);
591591
});
592592

593+
it('setLifecycleRules tolerates MissingContentMD5 (MinIO edge-cicd)', async () => {
594+
const err = new Error('Missing required header for this request: Content-Md5.');
595+
(err as any).name = 'MissingContentMD5';
596+
mockSend.mockRejectedValueOnce(err);
597+
598+
const provisioner = new BucketProvisioner(defaultOptions);
599+
await provisioner.setLifecycleRules('test-bucket', [
600+
{ id: 'test', prefix: '', expirationDays: 1, enabled: true },
601+
]);
602+
});
603+
593604
it('setLifecycleRules throws on genuine errors', async () => {
594605
mockSend.mockRejectedValueOnce(new Error('Network failure'));
595606

packages/bucket-provisioner/src/provisioner.ts

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -463,15 +463,18 @@ export class BucketProvisioner {
463463
} catch (err: any) {
464464
// Some S3-compatible backends (e.g. MinIO edge-cicd) don't support
465465
// PutBucketLifecycleConfiguration (may require Content-MD5 header
466-
// the SDK doesn't send). Treat XML parse errors or "not implemented"
467-
// responses as non-fatal.
466+
// the SDK doesn't send). Treat XML parse errors, "not implemented",
467+
// or missing-header responses as non-fatal.
468468
if (
469469
err.Code === 'XmlParseException' ||
470470
err.name === 'XmlParseException' ||
471471
err.Code === 'NotImplemented' ||
472472
err.name === 'NotImplemented' ||
473+
err.Code === 'MissingContentMD5' ||
474+
err.name === 'MissingContentMD5' ||
473475
err.message?.includes('not well-formed') ||
474476
err.message?.includes('not implemented') ||
477+
err.message?.includes('Content-Md5') ||
475478
err.message?.includes('LifecycleConfiguration')
476479
) {
477480
return;

0 commit comments

Comments
 (0)