Skip to content

Commit

Permalink
NSFS : s3 rm with --recursive option does not delete all the objects
Browse files Browse the repository at this point in the history
  • Loading branch information
naveenpaul1 committed Aug 29, 2024
1 parent bc4eff6 commit fa2ec76
Showing 1 changed file with 17 additions and 7 deletions.
24 changes: 17 additions & 7 deletions src/sdk/namespace_fs.js
Original file line number Diff line number Diff line change
Expand Up @@ -258,6 +258,11 @@ function get_entry_name(e) {
return e.name;
}

function get_entry_for_sorting(e) {
const check = e.key.includes('.') ? e.key.slice(e.key.indexOf(".")).includes('/') : false;
return check ? e.key.slice('/')[0] : e.key;
}

/**
* @param {string} name
* @returns {fs.Dirent}
Expand Down Expand Up @@ -663,14 +668,20 @@ class NamespaceFS {
}
const marker_dir = key_marker.slice(0, dir_key.length);
const marker_ent = key_marker.slice(dir_key.length);
// dir_key and marker_dir comparison will fail when there are folder with structure slimier to
// "dir_prfix.12345/" and "dir_prfix.12345.old/" because "/" considered greater than "." to fix this
// all the backslash is replaced with space. This updated marker and dir_key used only for comparison.
const updated_marker_dir = marker_dir.replaceAll('/', ' ');
const updated_dir_key = dir_key.replaceAll('/', ' ');
// marker is after dir so no keys in this dir can apply
if (dir_key < marker_dir) {
if (updated_dir_key < updated_marker_dir) {
// dbg.log0(`marker is after dir so no keys in this dir can apply: dir_key=${dir_key} marker_dir=${marker_dir}`);
return;
}
// when the dir portion of the marker is completely below the current dir
// then every key in this dir satisfies the marker and marker_ent should not be used.
const marker_curr = (marker_dir < dir_key) ? '' : marker_ent;
const marker_curr = (updated_marker_dir < updated_dir_key) ? '' : marker_ent;
const marker_sorting_entry = get_entry_for_sorting({key: marker_curr});
// dbg.log0(`process_dir: dir_key=${dir_key} prefix_ent=${prefix_ent} marker_curr=${marker_curr}`);
/**
* @typedef {{
Expand All @@ -685,7 +696,7 @@ class NamespaceFS {
// they are in order
if (results.length && r.key < results[results.length - 1].key &&
!this._is_hidden_version_path(r.key)) {
pos = _.sortedLastIndexBy(results, r, a => a.key);
pos = _.sortedLastIndexBy(results, r, get_entry_for_sorting);
} else {
pos = results.length;
}
Expand Down Expand Up @@ -715,7 +726,7 @@ class NamespaceFS {
const process_entry = async ent => {
// dbg.log0('process_entry', dir_key, ent.name);
if ((!ent.name.startsWith(prefix_ent) ||
ent.name < marker_curr ||
ent.name < marker_sorting_entry ||
ent.name === this.get_bucket_tmpdir_name() ||
ent.name === config.NSFS_FOLDER_OBJECT_NAME) &&
!this._is_hidden_version_path(ent.name)) {
Expand Down Expand Up @@ -756,7 +767,7 @@ class NamespaceFS {
// insert dir object to objects list if its key is lexicographicly bigger than the key marker &&
// no delimiter OR prefix is the current directory entry
const is_dir_content = cached_dir.stat.xattr && cached_dir.stat.xattr[XATTR_DIR_CONTENT];
if (is_dir_content && dir_key > key_marker && (!delimiter || dir_key === prefix)) {
if (is_dir_content && updated_dir_key > updated_marker_dir && (!delimiter || dir_key === prefix)) {
const r = { key: dir_key, common_prefix: false };
await insert_entry_to_results_arr(r);
}
Expand All @@ -781,7 +792,7 @@ class NamespaceFS {
} else {
marker_index = _.sortedLastIndexBy(
sorted_entries,
make_named_dirent(marker_curr),
make_named_dirent(marker_sorting_entry),
get_entry_name
);
}
Expand Down Expand Up @@ -3222,4 +3233,3 @@ NamespaceFS._restore_wal = null;

module.exports = NamespaceFS;
module.exports.multi_buffer_pool = multi_buffer_pool;

0 comments on commit fa2ec76

Please sign in to comment.