Skip to content

Commit e22503b

Browse files
authored
Merge pull request #8534 from tangledbytes/utkarsh/fix/amz-restore-header
2 parents aaeeb19 + 888259b commit e22503b

File tree

3 files changed

+60
-2
lines changed

3 files changed

+60
-2
lines changed

src/endpoint/s3/s3_utils.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -314,7 +314,7 @@ function set_response_object_md(res, object_md) {
314314
if (storage_class !== STORAGE_CLASS_STANDARD) {
315315
res.setHeader('x-amz-storage-class', storage_class);
316316
}
317-
if (object_md.restore_status) {
317+
if (object_md.restore_status?.ongoing || object_md.restore_status?.expiry_time) {
318318
const restore = [`ongoing-request="${object_md.restore_status.ongoing}"`];
319319
if (!object_md.restore_status.ongoing && object_md.restore_status.expiry_time) {
320320
// Expiry time is in UTC format

src/sdk/nsfs_glacier_backend/backend.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -156,7 +156,7 @@ class GlacierBackend {
156156
static get_restore_status(xattr, now, file_path) {
157157
if (xattr[GlacierBackend.STORAGE_CLASS_XATTR] !== s3_utils.STORAGE_CLASS_GLACIER) return;
158158

159-
// Total 6 states (2x restore_request, 3x restore_expiry)
159+
// Total 8 states (2x restore_request, 4x restore_expiry)
160160
let restore_request;
161161
let restore_expiry;
162162

src/test/unit_tests/jest_tests/test_s3_utils.test.js

+58
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,19 @@ const s3_utils = require('../../../endpoint/s3/s3_utils');
55
const { S3Error } = require('../../../endpoint/s3/s3_errors');
66
const config = require('../../../../config');
77

8+
function create_dummy_nb_response() {
9+
return {
10+
headers: {},
11+
setHeader: function(k, v) {
12+
if (Array.isArray(v)) {
13+
v = v.join(',');
14+
}
15+
16+
this.headers[k] = v;
17+
}
18+
};
19+
}
20+
821
describe('s3_utils', () => {
922
describe('parse_restrore_request_days', () => {
1023
it('should parse correctly when 0 < days < max days', () => {
@@ -57,4 +70,49 @@ describe('s3_utils', () => {
5770
config.S3_RESTORE_REQUEST_MAX_DAYS_BEHAVIOUR = initial;
5871
});
5972
});
73+
74+
describe('set_response_object_md', () => {
75+
it('should return no restore status when restore_status is absent', () => {
76+
const object_md = {
77+
xattr: {}
78+
};
79+
const res = create_dummy_nb_response();
80+
81+
// @ts-ignore
82+
s3_utils.set_response_object_md(res, object_md);
83+
84+
expect(res.headers['x-amz-restore']).toBeUndefined();
85+
});
86+
87+
it('should return restore status when restore is requested and ongoing', () => {
88+
const object_md = {
89+
xattr: {},
90+
restore_status: {
91+
ongoing: true,
92+
},
93+
};
94+
const res = create_dummy_nb_response();
95+
96+
// @ts-ignore
97+
s3_utils.set_response_object_md(res, object_md);
98+
99+
expect(res.headers['x-amz-restore']).toBeDefined();
100+
});
101+
102+
it('should return restore status when restore is completed', () => {
103+
const object_md = {
104+
xattr: {},
105+
restore_status: {
106+
ongoing: false,
107+
expiry_time: new Date(),
108+
},
109+
};
110+
const res = create_dummy_nb_response();
111+
112+
// @ts-ignore
113+
s3_utils.set_response_object_md(res, object_md);
114+
115+
expect(res.headers['x-amz-restore']).toBeDefined();
116+
});
117+
});
60118
});

0 commit comments

Comments
 (0)