diff options
| -rw-r--r-- | glusterfsd/src/glusterfsd-mgmt.c | 15 | ||||
| -rw-r--r-- | libglusterfs/src/glusterfs.h | 4 | ||||
| -rw-r--r-- | libglusterfs/src/graph.c | 5 | 
3 files changed, 19 insertions, 5 deletions
diff --git a/glusterfsd/src/glusterfsd-mgmt.c b/glusterfsd/src/glusterfsd-mgmt.c index 9b76c7576d4..a22568c3323 100644 --- a/glusterfsd/src/glusterfsd-mgmt.c +++ b/glusterfsd/src/glusterfsd-mgmt.c @@ -827,6 +827,7 @@ glusterfs_handle_attach (rpcsvc_request_t *req)          int32_t                 ret             = -1;          gd1_mgmt_brick_op_req   xlator_req      = {0,};          xlator_t                *this           = NULL; +        glusterfs_graph_t       *newgraph       = NULL;          GF_ASSERT (req);          this = THIS; @@ -840,13 +841,22 @@ glusterfs_handle_attach (rpcsvc_request_t *req)                  req->rpc_err = GARBAGE_ARGS;                  return -1;          } +        ret = 0;          if (this->ctx->active) {                  gf_log (this->name, GF_LOG_INFO,                          "got attach for %s", xlator_req.name);                  ret = glusterfs_graph_attach (this->ctx->active, -                                              xlator_req.name); +                                              xlator_req.name, &newgraph);                  if (ret == 0) { +                        ret = glusterfs_graph_parent_up (newgraph); +                        if (ret) { +                                gf_msg (this->name, GF_LOG_ERROR, 0, +                                        LG_MSG_EVENT_NOTIFY_FAILED, +                                        "Parent up notification " +                                        "failed"); +                                goto out; +                        }                          glusterfs_autoscale_threads (this->ctx, 1);                  }          } else { @@ -857,10 +867,11 @@ glusterfs_handle_attach (rpcsvc_request_t *req)          glusterfs_translator_info_response_send (req, ret, NULL, NULL); +out:          free (xlator_req.input.input_val);          free (xlator_req.name); -        return 0; +        return ret;  }  int diff --git a/libglusterfs/src/glusterfs.h b/libglusterfs/src/glusterfs.h index 2e709b9d703..7eaeb0c7dbd 100644 --- a/libglusterfs/src/glusterfs.h +++ b/libglusterfs/src/glusterfs.h @@ -583,7 +583,9 @@ int glusterfs_graph_init (glusterfs_graph_t *graph);  glusterfs_graph_t *glusterfs_graph_new (void);  int glusterfs_graph_reconfigure (glusterfs_graph_t *oldgraph,                                    glusterfs_graph_t *newgraph); -int glusterfs_graph_attach (glusterfs_graph_t *orig_graph, char *path); +int glusterfs_graph_attach (glusterfs_graph_t *orig_graph, char *path, +                            glusterfs_graph_t **newgraph); +int glusterfs_graph_parent_up (glusterfs_graph_t *graph);  void  gf_free_mig_locks (lock_migration_info_t *locks); diff --git a/libglusterfs/src/graph.c b/libglusterfs/src/graph.c index 86d08f0e25b..11d2a0adf1e 100644 --- a/libglusterfs/src/graph.c +++ b/libglusterfs/src/graph.c @@ -1049,7 +1049,8 @@ out:  int -glusterfs_graph_attach (glusterfs_graph_t *orig_graph, char *path) +glusterfs_graph_attach (glusterfs_graph_t *orig_graph, char *path, +                        glusterfs_graph_t **newgraph)  {          xlator_t                *this   = THIS;          FILE                    *fp; @@ -1086,7 +1087,7 @@ glusterfs_graph_attach (glusterfs_graph_t *orig_graph, char *path)                  xl = FIRST_CHILD(xl);          }          graph->first = xl; - +        *newgraph = graph;          volfile_id = strstr (path, "/snaps/");          if (!volfile_id) {  | 
