diff options
| -rw-r--r-- | libglusterfs/src/common-utils.c | 72 | ||||
| -rw-r--r-- | libglusterfs/src/common-utils.h | 17 | ||||
| -rw-r--r-- | xlators/features/changelog/lib/src/gf-changelog.c | 21 | ||||
| -rw-r--r-- | xlators/mgmt/glusterd/src/glusterd-hooks.c | 4 | ||||
| -rw-r--r-- | xlators/mgmt/glusterd/src/glusterd-snapshot.c | 6 | ||||
| -rw-r--r-- | xlators/mgmt/glusterd/src/glusterd-store.c | 22 | ||||
| -rw-r--r-- | xlators/mgmt/glusterd/src/glusterd-store.h | 14 | ||||
| -rw-r--r-- | xlators/mgmt/glusterd/src/glusterd-utils.c | 72 | ||||
| -rw-r--r-- | xlators/mgmt/glusterd/src/glusterd-utils.h | 3 | 
9 files changed, 126 insertions, 105 deletions
diff --git a/libglusterfs/src/common-utils.c b/libglusterfs/src/common-utils.c index b1afa082844..3bd7c3d8fa2 100644 --- a/libglusterfs/src/common-utils.c +++ b/libglusterfs/src/common-utils.c @@ -3558,3 +3558,75 @@ err:                  GF_FREE (absolute_path);          return ret;  } + +/* This is an utility function which will recursively delete + * a folder and its contents. + * + * @param delete_path folder to be deleted. + * + * @return 0 on success and -1 on failure. + */ +int +recursive_rmdir (const char *delete_path) +{ +        int             ret             = -1; +        char            path[PATH_MAX]  = {0,}; +        struct stat     st              = {0,}; +        DIR            *dir             = NULL; +        struct dirent  *entry           = NULL; +        xlator_t       *this            = NULL; + +        this = THIS; +        GF_ASSERT (this); +        GF_VALIDATE_OR_GOTO (this->name, delete_path, out); + +        dir = opendir (delete_path); +        if (!dir) { +                gf_log (this->name, GF_LOG_DEBUG, "Failed to open directory %s." +                        " Reason : %s", delete_path, strerror (errno)); +                ret = 0; +                goto out; +        } + +        GF_FOR_EACH_ENTRY_IN_DIR (entry, dir); +        while (entry) { +                snprintf (path, PATH_MAX, "%s/%s", delete_path, entry->d_name); +                ret = lstat (path, &st); +                if (ret == -1) { +                        gf_log (this->name, GF_LOG_DEBUG, "Failed to stat " +                                "entry %s : %s", path, strerror (errno)); +                        goto out; +                } + +                if (S_ISDIR (st.st_mode)) +                        ret = recursive_rmdir (path); +                else +                        ret = unlink (path); + +                if (ret) { +                        gf_log (this->name, GF_LOG_DEBUG, " Failed to remove " +                                "%s. Reason : %s", path, strerror (errno)); +                } + +                gf_log (this->name, GF_LOG_DEBUG, "%s %s", +                                ret ? "Failed to remove":"Removed", +                                entry->d_name); + +                GF_FOR_EACH_ENTRY_IN_DIR (entry, dir); +        } + +        ret = closedir (dir); +        if (ret) { +                gf_log (this->name, GF_LOG_DEBUG, "Failed to close dir %s. " +                        "Reason : %s", delete_path, strerror (errno)); +        } + +        ret = rmdir (delete_path); +        if (ret) { +                gf_log (this->name, GF_LOG_DEBUG, "Failed to rmdir: %s,err: %s", +                        delete_path, strerror (errno)); +        } + +out: +        return ret; +} diff --git a/libglusterfs/src/common-utils.h b/libglusterfs/src/common-utils.h index 23a932b71aa..2a46f768e75 100644 --- a/libglusterfs/src/common-utils.h +++ b/libglusterfs/src/common-utils.h @@ -28,6 +28,7 @@  #include <alloca.h>  #endif  #include <limits.h> +#include <fnmatch.h>  void trap (void); @@ -273,6 +274,19 @@ union gf_sock_union {  #define IOV_MIN(n) min(IOV_MAX,n) +#define GF_FOR_EACH_ENTRY_IN_DIR(entry, dir) \ +        do {\ +                entry = NULL;\ +                if (dir) { \ +                        entry = readdir (dir); \ +                        while (entry && (!strcmp (entry->d_name, ".") || \ +                            !fnmatch ("*.tmp", entry->d_name, 0) || \ +                            !strcmp (entry->d_name, ".."))) { \ +                                entry = readdir (dir); \ +                        } \ +                } \ +        } while (0) +  static inline void  iov_free (struct iovec *vector, int count)  { @@ -660,4 +674,7 @@ fop_log_level (glusterfs_fop_t fop, int op_errno);  int32_t  gf_build_absolute_path (char *current_path, char *relative_path, char **path); +int +recursive_rmdir (const char *delete_path); +  #endif /* _COMMON_UTILS_H */ diff --git a/xlators/features/changelog/lib/src/gf-changelog.c b/xlators/features/changelog/lib/src/gf-changelog.c index f3f6ffbe976..a2257a66930 100644 --- a/xlators/features/changelog/lib/src/gf-changelog.c +++ b/xlators/features/changelog/lib/src/gf-changelog.c @@ -108,10 +108,22 @@ gf_changelog_open_dirs (gf_changelog_t *gfc)          DIR *dir                    = NULL;          int  tracker_fd             = 0;          char tracker_path[PATH_MAX] = {0,}; +        xlator_t *this              = NULL; + +        this = THIS; +        GF_ASSERT (this);          (void) snprintf (gfc->gfc_current_dir, PATH_MAX,                           "%s/"GF_CHANGELOG_CURRENT_DIR"/",                           gfc->gfc_working_dir); + +        ret = recursive_rmdir (gfc->gfc_current_dir); +        if (ret) +                gf_log (this->name, GF_LOG_ERROR, +                        "Failed to rmdir: %s, err: %s", +                        gfc->gfc_current_dir, strerror (errno)); +                goto out; +          ret = mkdir_p (gfc->gfc_current_dir, 0600, _gf_false);          if (ret)                  goto out; @@ -119,6 +131,7 @@ gf_changelog_open_dirs (gf_changelog_t *gfc)          (void) snprintf (gfc->gfc_processed_dir, PATH_MAX,                           "%s/"GF_CHANGELOG_PROCESSED_DIR"/",                           gfc->gfc_working_dir); +          ret = mkdir_p (gfc->gfc_processed_dir, 0600, _gf_false);          if (ret)                  goto out; @@ -126,6 +139,14 @@ gf_changelog_open_dirs (gf_changelog_t *gfc)          (void) snprintf (gfc->gfc_processing_dir, PATH_MAX,                           "%s/"GF_CHANGELOG_PROCESSING_DIR"/",                           gfc->gfc_working_dir); + +        ret = recursive_rmdir (gfc->gfc_processing_dir); +        if (ret) +                gf_log (this->name, GF_LOG_ERROR, +                        "Failed to rmdir: %s, err: %s", +                        gfc->gfc_processing_dir, strerror (errno)); +                goto out; +          ret = mkdir_p (gfc->gfc_processing_dir, 0600, _gf_false);          if (ret)                  goto out; diff --git a/xlators/mgmt/glusterd/src/glusterd-hooks.c b/xlators/mgmt/glusterd/src/glusterd-hooks.c index f36764e4832..f875c8d36d3 100644 --- a/xlators/mgmt/glusterd/src/glusterd-hooks.c +++ b/xlators/mgmt/glusterd/src/glusterd-hooks.c @@ -337,7 +337,7 @@ glusterd_hooks_run_hooks (char *hooks_path, glusterd_op_t op, dict_t *op_ctx,          ret = -1;          line_count = 0; -        glusterd_for_each_entry (entry, hookdir); +        GF_FOR_EACH_ENTRY_IN_DIR (entry, hookdir);          while (entry) {                  if (line_count == N-1) {                          N *= 2; @@ -351,7 +351,7 @@ glusterd_hooks_run_hooks (char *hooks_path, glusterd_op_t op, dict_t *op_ctx,                          line_count++;                  } -                glusterd_for_each_entry (entry, hookdir); +                GF_FOR_EACH_ENTRY_IN_DIR (entry, hookdir);          }          lines[line_count] = NULL; diff --git a/xlators/mgmt/glusterd/src/glusterd-snapshot.c b/xlators/mgmt/glusterd/src/glusterd-snapshot.c index 759f5c460f6..f1e5fbb7dda 100644 --- a/xlators/mgmt/glusterd/src/glusterd-snapshot.c +++ b/xlators/mgmt/glusterd/src/glusterd-snapshot.c @@ -2493,7 +2493,7 @@ remove_brick_path:          }          if (is_brick_dir_present == _gf_true) { -                ret = glusterd_recursive_rmdir (brick_dir); +                ret = recursive_rmdir (brick_dir);                  if (ret) {                          if (errno == ENOTEMPTY) {                                  /* Will occur when multiple glusterds @@ -7208,7 +7208,7 @@ glusterd_snapshot_restore_cleanup (dict_t *rsp_dict,          }          /* Delete the backup copy of volume folder */ -        ret = glusterd_recursive_rmdir (delete_path); +        ret = recursive_rmdir (delete_path);          if (ret) {                  gf_log (this->name, GF_LOG_ERROR, "Failed to remove "                          "backup dir (%s)", delete_path); @@ -7255,7 +7255,7 @@ glusterd_snapshot_revert_partial_restored_vol (glusterd_volinfo_t *volinfo,          /* Since snapshot restore failed we cannot rely on the volume           * data stored under vols folder. Therefore delete the origin           * volume's backend folder.*/ -        ret = glusterd_recursive_rmdir (pathname); +        ret = recursive_rmdir (pathname);          if (ret) {                  gf_log (this->name, GF_LOG_ERROR, "Failed to remove "                          "%s directory", pathname); diff --git a/xlators/mgmt/glusterd/src/glusterd-store.c b/xlators/mgmt/glusterd/src/glusterd-store.c index bde97ceadc9..54c8263a292 100644 --- a/xlators/mgmt/glusterd/src/glusterd-store.c +++ b/xlators/mgmt/glusterd/src/glusterd-store.c @@ -636,7 +636,7 @@ glusterd_store_remove_bricks (glusterd_volinfo_t *volinfo, char *delete_path)          dir = opendir (brickdir); -        glusterd_for_each_entry (entry, dir); +        GF_FOR_EACH_ENTRY_IN_DIR (entry, dir);          while (entry) {                  snprintf (path, sizeof (path), "%s/%s", @@ -646,7 +646,7 @@ glusterd_store_remove_bricks (glusterd_volinfo_t *volinfo, char *delete_path)                          gf_log (this->name, GF_LOG_DEBUG, "Unable to unlink %s, "                                  "reason: %s", path, strerror(errno));                  } -                glusterd_for_each_entry (entry, dir); +                GF_FOR_EACH_ENTRY_IN_DIR (entry, dir);          }          closedir (dir); @@ -1702,7 +1702,7 @@ glusterd_store_delete_volume (glusterd_volinfo_t *volinfo)                  goto out;          } -        ret = glusterd_recursive_rmdir (trashdir); +        ret = recursive_rmdir (trashdir);          if (ret) {                  gf_log (this->name, GF_LOG_DEBUG, "Failed to rmdir: %s, Reason:"                          " %s", trashdir, strerror (errno)); @@ -1774,7 +1774,7 @@ glusterd_store_delete_snap (glusterd_snap_t *snap)                  goto out;          } -        glusterd_for_each_entry (entry, dir); +        GF_FOR_EACH_ENTRY_IN_DIR (entry, dir);          while (entry) {                  snprintf (path, PATH_MAX, "%s/%s", delete_path, entry->d_name);                  ret = stat (path, &st); @@ -1799,7 +1799,7 @@ glusterd_store_delete_snap (glusterd_snap_t *snap)                                  entry->d_name);  stat_failed:                  memset (path, 0, sizeof(path)); -                glusterd_for_each_entry (entry, dir); +                GF_FOR_EACH_ENTRY_IN_DIR (entry, dir);          }          ret = closedir (dir); @@ -3050,7 +3050,7 @@ glusterd_store_retrieve_volumes (xlator_t  *this, glusterd_snap_t *snap)                  goto out;          } -        glusterd_for_each_entry (entry, dir); +        GF_FOR_EACH_ENTRY_IN_DIR (entry, dir);          while (entry) {                  if (snap && ((!strcmp (entry->d_name, "geo-replication")) || @@ -3084,7 +3084,7 @@ glusterd_store_retrieve_volumes (xlator_t  *this, glusterd_snap_t *snap)                  }  next: -                glusterd_for_each_entry (entry, dir); +                GF_FOR_EACH_ENTRY_IN_DIR (entry, dir);          }          ret = 0; @@ -3584,7 +3584,7 @@ glusterd_store_retrieve_snaps (xlator_t  *this)                  goto out;          } -        glusterd_for_each_entry (entry, dir); +        GF_FOR_EACH_ENTRY_IN_DIR (entry, dir);          while (entry) {                  if (strcmp (entry->d_name, GLUSTERD_MISSED_SNAPS_LIST_FILE)) { @@ -3596,7 +3596,7 @@ glusterd_store_retrieve_snaps (xlator_t  *this)                                  goto out;                          }                  } -                glusterd_for_each_entry (entry, dir); +                GF_FOR_EACH_ENTRY_IN_DIR (entry, dir);          }          /* Retrieve missed_snaps_list */ @@ -4010,7 +4010,7 @@ glusterd_store_retrieve_peers (xlator_t *this)                  goto out;          } -        glusterd_for_each_entry (entry, dir); +        GF_FOR_EACH_ENTRY_IN_DIR (entry, dir);          while (entry) {                  snprintf (filepath, PATH_MAX, "%s/%s", path, entry->d_name); @@ -4087,7 +4087,7 @@ glusterd_store_retrieve_peers (xlator_t *this)                  peerinfo->shandle = shandle;                  peerinfo = NULL; -                glusterd_for_each_entry (entry, dir); +                GF_FOR_EACH_ENTRY_IN_DIR (entry, dir);          }          args.mode = GD_MODE_ON; diff --git a/xlators/mgmt/glusterd/src/glusterd-store.h b/xlators/mgmt/glusterd/src/glusterd-store.h index 99bbb39683a..b2d21d3a70c 100644 --- a/xlators/mgmt/glusterd/src/glusterd-store.h +++ b/xlators/mgmt/glusterd/src/glusterd-store.h @@ -95,20 +95,6 @@ typedef enum glusterd_store_ver_ac_{  #define GLUSTERD_STORE_KEY_VOL_CAPS             "caps" -#define glusterd_for_each_entry(entry, dir) \ -        do {\ -                entry = NULL;\ -                if (dir) {\ -                        entry = readdir (dir);\ -                        while (entry && (!strcmp (entry->d_name, ".") ||\ -                            !fnmatch ("*.tmp", entry->d_name, 0) ||\ -                            !strcmp (entry->d_name, ".."))) {\ -                                entry = readdir (dir);\ -                        }\ -                }\ -        } while (0); \ - -  int32_t  glusterd_store_volinfo (glusterd_volinfo_t *volinfo, glusterd_volinfo_ver_ac_t ac); diff --git a/xlators/mgmt/glusterd/src/glusterd-utils.c b/xlators/mgmt/glusterd/src/glusterd-utils.c index a7c7bd9cb88..5ff09d5a4ce 100644 --- a/xlators/mgmt/glusterd/src/glusterd-utils.c +++ b/xlators/mgmt/glusterd/src/glusterd-utils.c @@ -9884,78 +9884,6 @@ glusterd_compare_volume_name(struct list_head *list1, struct list_head *list2)          return strcmp(volinfo1->volname, volinfo2->volname);  } -/* This is an utility function which will recursively delete - * a folder and its contents. - * - * @param delete_path folder to be deleted. - * - * @return 0 on success and -1 on failure. - */ -int -glusterd_recursive_rmdir (const char *delete_path) -{ -        int             ret             = -1; -        char            path [PATH_MAX] = {0,}; -        struct stat     st              = {0,}; -        DIR            *dir             = NULL; -        struct dirent  *entry           = NULL; -        xlator_t       *this            = NULL; - -        this = THIS; -        GF_ASSERT (this); -        GF_VALIDATE_OR_GOTO (this->name, delete_path, out); - -        dir = opendir (delete_path); -        if (!dir) { -                gf_log (this->name, GF_LOG_DEBUG, "Failed to open directory %s." -                        " Reason : %s", delete_path, strerror (errno)); -                ret = 0; -                goto out; -        } - -        glusterd_for_each_entry (entry, dir); -        while (entry) { -                snprintf (path, PATH_MAX, "%s/%s", delete_path, entry->d_name); -                ret = lstat (path, &st); -                if (ret == -1) { -                        gf_log (this->name, GF_LOG_DEBUG, "Failed to stat " -                                "entry %s : %s", path, strerror (errno)); -                        goto out; -                } - -                if (S_ISDIR (st.st_mode)) -                        ret = glusterd_recursive_rmdir (path); -                else -                        ret = unlink (path); - -                if (ret) { -                        gf_log (this->name, GF_LOG_DEBUG, " Failed to remove " -                                "%s. Reason : %s", path, strerror (errno)); -                } - -                gf_log (this->name, GF_LOG_DEBUG, "%s %s", -                                ret ? "Failed to remove":"Removed", -                                entry->d_name); - -                glusterd_for_each_entry (entry, dir); -        } - -        ret = closedir (dir); -        if (ret) { -                gf_log (this->name, GF_LOG_DEBUG, "Failed to close dir %s. " -                        "Reason : %s", delete_path, strerror (errno)); -        } - -        ret = rmdir (delete_path); -        if (ret) { -                gf_log (this->name, GF_LOG_DEBUG, "Failed to rmdir: %s,err: %s", -                        delete_path, strerror (errno)); -        } - -out: -        return ret; -} -  static int  gd_default_synctask_cbk (int ret, call_frame_t *frame, void *opaque)  { diff --git a/xlators/mgmt/glusterd/src/glusterd-utils.h b/xlators/mgmt/glusterd/src/glusterd-utils.h index 6c3c8ffed62..f14c6119fe1 100644 --- a/xlators/mgmt/glusterd/src/glusterd-utils.h +++ b/xlators/mgmt/glusterd/src/glusterd-utils.h @@ -674,9 +674,6 @@ glusterd_lvm_snapshot_remove (dict_t *rsp_dict, glusterd_volinfo_t *snap_vol);  gf_boolean_t  gd_vol_is_geo_rep_active (glusterd_volinfo_t *volinfo); -int -glusterd_recursive_rmdir (const char *delete_path); -  int32_t  glusterd_get_brick_mount_dir (char *brickpath, char *hostname, char *mount_dir);  | 
