Skip to content

Commit b22ebac

Browse files
nadavMizjackyalbo
authored andcommitted
NSFS | NC | add versioning to object tagging
Signed-off-by: nadav mizrahi <[email protected]> (cherry picked from commit 4898af4)
1 parent c2ddff8 commit b22ebac

File tree

4 files changed

+53
-2
lines changed

4 files changed

+53
-2
lines changed

src/api/object_api.js

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1326,6 +1326,9 @@ module.exports = {
13261326
},
13271327
tagging: {
13281328
$ref: 'common_api#/definitions/tagging'
1329+
},
1330+
version_id: {
1331+
type: 'string'
13291332
}
13301333
}
13311334
},

src/endpoint/s3/ops/s3_put_object_tagging.js

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,10 +8,12 @@ const s3_utils = require('../s3_utils');
88
*/
99
async function put_object_tagging(req, res) {
1010
const tag_set = s3_utils.parse_body_tagging_xml(req);
11+
const version_id = s3_utils.parse_version_id(req.query.versionId);
1112
const reply = await req.object_sdk.put_object_tagging({
1213
bucket: req.params.bucket,
1314
key: req.params.key,
14-
tagging: tag_set
15+
tagging: tag_set,
16+
version_id
1517
});
1618
if (reply.version_id) res.setHeader('x-amz-version-id', reply.version_id);
1719
}

src/sdk/namespace_fs.js

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1983,7 +1983,12 @@ class NamespaceFS {
19831983
for (const [xattr_key, xattr_value] of Object.entries(tagging)) {
19841984
fs_xattr[XATTR_NOOBAA_CUSTOM_PREFIX + xattr_key] = xattr_value;
19851985
}
1986-
const file_path = this._get_file_path(params);
1986+
let file_path;
1987+
if (params.version_id && this._is_versioning_enabled()) {
1988+
file_path = this._get_version_path(params.key, params.version_id);
1989+
} else {
1990+
file_path = this._get_file_path(params);
1991+
}
19871992
const fs_context = this.prepare_fs_context(object_sdk);
19881993
dbg.log0('NamespaceFS.put_object_tagging: fs_xattr ', fs_xattr, 'file_path :', file_path);
19891994
try {

src/test/unit_tests/test_bucketspace_versioning.js

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -800,6 +800,47 @@ mocha.describe('bucketspace namespace_fs - versioning', function() {
800800
});
801801
});
802802

803+
mocha.describe('object tagging', function() {
804+
805+
const tagging_key = "key_tagging";
806+
const tag_set1 = {TagSet: [{Key: "key1", Value: "Value1"}]};
807+
const tag_set2 = {TagSet: [{Key: "key2", Value: "Value2"}]};
808+
let version_id;
809+
810+
mocha.before(async function() {
811+
await s3_uid6.putBucketVersioning({ Bucket: suspended_bucket_name, VersioningConfiguration: { MFADelete: 'Disabled', Status: 'Enabled' } });
812+
const res_put = await s3_uid6.putObject({ Bucket: suspended_bucket_name, Key: tagging_key, Body: body1 });
813+
await s3_uid6.putObject({ Bucket: suspended_bucket_name, Key: tagging_key, Body: body1 });
814+
version_id = res_put.VersionId;
815+
});
816+
817+
mocha.it("put object tagging - no versionId", async function() {
818+
await s3_uid6.putObjectTagging({ Bucket: suspended_bucket_name, Key: tagging_key, Tagging: tag_set1});
819+
const res = await s3_uid6.getObjectTagging({Bucket: suspended_bucket_name, Key: tagging_key});
820+
assert.deepEqual(res.TagSet, tag_set1.TagSet);
821+
});
822+
823+
mocha.it("put object tagging - specific versionId", async function() {
824+
await s3_uid6.putObjectTagging({ Bucket: suspended_bucket_name, Key: tagging_key, Tagging: tag_set2, versionId: version_id});
825+
const res = await s3_uid6.getObjectTagging({Bucket: suspended_bucket_name, Key: tagging_key});
826+
assert.notDeepEqual(res.TagSet, tag_set2);
827+
const version_res = await s3_uid6.getObjectTagging({Bucket: suspended_bucket_name, Key: tagging_key});
828+
assert.deepEqual(version_res.TagSet, tag_set2.TagSet);
829+
});
830+
831+
mocha.it("delete object tagging - no versionId", async function() {
832+
await s3_uid6.deleteObjectTagging({ Bucket: suspended_bucket_name, Key: tagging_key});
833+
const res = await s3_uid6.getObjectTagging({Bucket: suspended_bucket_name, Key: tagging_key});
834+
assert.equal(res.TagSet.length, 0);
835+
});
836+
837+
mocha.it("delete object tagging - specific versionId", async function() {
838+
await s3_uid6.deleteObjectTagging({ Bucket: suspended_bucket_name, Key: tagging_key, versionId: version_id});
839+
const res = await s3_uid6.getObjectTagging({Bucket: suspended_bucket_name, Key: tagging_key, versionId: version_id});
840+
assert.equal(res.TagSet.length, 0);
841+
});
842+
});
843+
803844
// dm = delete marker
804845
mocha.describe('delete object latest - versioning suspended', function() {
805846
const key_to_delete = 'mango.txt';

0 commit comments

Comments
 (0)