Skip to content

Commit 5f5f4d6

Browse files
authored
Merge pull request #8980 from shirady/nsfs-add-test-delete-object-version
NC | NSFS | Add Concurrency Tests
2 parents be61cd9 + 54ec141 commit 5f5f4d6

File tree

1 file changed

+55
-0
lines changed

1 file changed

+55
-0
lines changed

src/test/unit_tests/jest_tests/test_versioning_concurrency.test.js

+55
Original file line numberDiff line numberDiff line change
@@ -393,6 +393,61 @@ describe('test versioning concurrency', () => {
393393
expect(num_of_latest_versions).toBe(initial_num_of_objects);
394394
}, TEST_TIMEOUT);
395395

396+
it('concurrent delete object version & list object versions', async () => {
397+
const bucket = 'bucket1';
398+
const delete_res_arr = [];
399+
const delete_err_arr = [];
400+
const initial_num_of_versions = 3;
401+
const initial_num_of_objects = 5;
402+
const version_by_key_2_dimension = [];
403+
const list_res_arr_by_key_2_dimension = [];
404+
const list_err_arr_by_key_2_dimension = [];
405+
const object_prefix_name = 'key_put_';
406+
407+
// upload the object versions
408+
for (let i = 0; i < initial_num_of_objects; i++) {
409+
const key = object_prefix_name + i;
410+
const version_arr_by_key = await _upload_versions(bucket, key, initial_num_of_versions);
411+
version_by_key_2_dimension[i] = version_arr_by_key;
412+
}
413+
414+
// delete object version during list object versions
415+
const num_of_concurrency = 3;
416+
for (let i = 0; i < num_of_concurrency; i++) {
417+
const key = object_prefix_name + i;
418+
const version_id = version_by_key_2_dimension[i][0].version_id; // always delete the first version
419+
nsfs.delete_object({ bucket: bucket, key: key, version_id: version_id}, DUMMY_OBJECT_SDK)
420+
.then(res => delete_res_arr.push(res))
421+
.catch(err => delete_err_arr.push(err));
422+
nsfs.list_object_versions({ bucket: bucket }, DUMMY_OBJECT_SDK)
423+
.then(res => {
424+
list_res_arr_by_key_2_dimension[i] = res.objects;
425+
})
426+
.catch(err => {
427+
list_err_arr_by_key_2_dimension[i] = err;
428+
});
429+
}
430+
await P.delay(10000);
431+
432+
// check for no errors
433+
expect(delete_err_arr).toHaveLength(0);
434+
expect(list_err_arr_by_key_2_dimension).toHaveLength(0);
435+
436+
// check for the right number of versions in the end
437+
expect(delete_res_arr).toHaveLength(num_of_concurrency);
438+
const versions = await nsfs.list_object_versions({ bucket: bucket }, DUMMY_OBJECT_SDK);
439+
const expected_total_number_of_versions = initial_num_of_versions * initial_num_of_objects - num_of_concurrency;
440+
expect(versions.objects).toHaveLength(expected_total_number_of_versions);
441+
442+
// no delete markers are expected
443+
const num_of_delete_markers = (versions.objects.filter(version => version.delete_marker === true)).length;
444+
expect(num_of_delete_markers).toBe(0);
445+
446+
// latest version for every key is expected
447+
const num_of_latest_versions = (versions.objects.filter(version => version.is_latest === true)).length;
448+
expect(num_of_latest_versions).toBe(initial_num_of_objects);
449+
}, TEST_TIMEOUT);
450+
396451
it('concurrent puts & list versions - version id paging', async () => {
397452
const bucket = 'bucket1';
398453
const upload_res_arr = [];

0 commit comments

Comments
 (0)