diff options
Diffstat (limited to 'glusterfsd/src/glusterfsd-mgmt.c')
| -rw-r--r-- | glusterfsd/src/glusterfsd-mgmt.c | 24 | 
1 files changed, 22 insertions, 2 deletions
diff --git a/glusterfsd/src/glusterfsd-mgmt.c b/glusterfsd/src/glusterfsd-mgmt.c index 51680e68b67..294c6818819 100644 --- a/glusterfsd/src/glusterfsd-mgmt.c +++ b/glusterfsd/src/glusterfsd-mgmt.c @@ -669,6 +669,7 @@ glusterfs_handle_bitrot (rpcsvc_request_t *req)          char                     xname[1024]  = {0,};          glusterfs_ctx_t          *ctx         = NULL;          glusterfs_graph_t        *active      = NULL; +        char                     *scrub_opt   = NULL;          GF_ASSERT (req);          this = THIS; @@ -722,8 +723,27 @@ glusterfs_handle_bitrot (rpcsvc_request_t *req)                  goto out;          } -        ret = xlator->notify (xlator, GF_EVENT_SCRUB_STATUS, input, -                              output); +        ret = dict_get_str (input, "scrub-value", &scrub_opt); +        if (ret) { +                snprintf (msg, sizeof (msg), "Failed to get scrub value"); +                gf_msg (this->name, GF_LOG_ERROR, 0, glusterfsd_msg_37); +                ret = -1; +                goto out; +        } + +        if (!strncmp (scrub_opt, "status", strlen ("status"))) { +                ret = xlator->notify (xlator, GF_EVENT_SCRUB_STATUS, input, +                                      output); +        } else if (!strncmp (scrub_opt, "ondemand", strlen ("ondemand"))) { +                ret = xlator->notify (xlator, GF_EVENT_SCRUB_ONDEMAND, input, +                                      output); +                if (ret == -2) { +                        snprintf (msg, sizeof (msg), "Scrubber is in " +                                  "Pause/Inactive/Running state"); +                        ret = -1; +                        goto out; +                } +        }  out:          glusterfs_translator_info_response_send (req, ret, msg, output);  | 
