diff options
Diffstat (limited to 'glusterfsd')
-rw-r--r-- | glusterfsd/src/glusterfsd-mgmt.c | 72 | ||||
-rw-r--r-- | glusterfsd/src/glusterfsd.c | 13 | ||||
-rw-r--r-- | glusterfsd/src/glusterfsd.h | 2 |
3 files changed, 22 insertions, 65 deletions
diff --git a/glusterfsd/src/glusterfsd-mgmt.c b/glusterfsd/src/glusterfsd-mgmt.c index bce8d5cc276..91c75069627 100644 --- a/glusterfsd/src/glusterfsd-mgmt.c +++ b/glusterfsd/src/glusterfsd-mgmt.c @@ -185,73 +185,18 @@ glusterfs_terminate_response_send (rpcsvc_request_t *req, int op_ret) return ret; } -static int -xlator_mem_free (xlator_t *xl) -{ - volume_opt_list_t *vol_opt = NULL; - volume_opt_list_t *tmp = NULL; - - if (!xl) - return 0; - - GF_FREE (xl->name); - GF_FREE (xl->type); - xl->name = NULL; - xl->type = NULL; - - if (xl->options) { - dict_ref (xl->options); - dict_unref (xl->options); - xl->options = NULL; - } - - list_for_each_entry_safe (vol_opt, tmp, &xl->volume_options, list) { - list_del_init (&vol_opt->list); - GF_FREE (vol_opt); - } - - return 0; -} - void -xlator_call_fini (xlator_t *this) { - if (!this) - return; - xlator_call_fini (this->next); - this->fini (this); -} - -void -xlator_mem_cleanup (xlator_t *this) { - xlator_list_t *list = this->children; - xlator_t *trav = list->xlator; - inode_table_t *inode_table = NULL; - xlator_t *prev = trav; - - inode_table = this->itable; - - xlator_call_fini (trav); - - while (prev) { - trav = prev->next; - xlator_mem_free (prev); - prev = trav; - } - - if (inode_table) { - inode_table_destroy (inode_table); - this->itable = NULL; - } - - if (this->fini) { - this->fini (this); - } - - xlator_mem_free (this); +glusterfs_autoscale_threads (glusterfs_ctx_t *ctx, int incr, xlator_t *this) +{ + struct event_pool *pool = ctx->event_pool; + server_conf_t *conf = this->private; + int thread_count = pool->eventthreadcount; + pool->auto_thread_count += incr; + (void) event_reconfigure_threads (pool, thread_count+incr); + rpcsvc_ownthread_reconf (conf->rpc, pool->eventthreadcount); } - int glusterfs_handle_terminate (rpcsvc_request_t *req) { @@ -318,7 +263,6 @@ glusterfs_handle_terminate (rpcsvc_request_t *req) gf_log (THIS->name, GF_LOG_INFO, "detaching not-only" " child %s", xlator_req.name); top->notify (top, GF_EVENT_CLEANUP, victim); - xlator_mem_cleanup (victim); } err: if (!lockflag) diff --git a/glusterfsd/src/glusterfsd.c b/glusterfsd/src/glusterfsd.c index 3de12bc125f..f589ce69ecd 100644 --- a/glusterfsd/src/glusterfsd.c +++ b/glusterfsd/src/glusterfsd.c @@ -1563,7 +1563,20 @@ cleanup_and_exit (int signum) } #endif + /* call fini() of each xlator */ + + /*call fini for glusterd xlator */ + /* TODO : Invoke fini for rest of the xlators */ trav = NULL; + if (ctx->active) + trav = ctx->active->top; + while (trav) { + if (should_call_fini(ctx, trav)) { + THIS = trav; + trav->fini (trav); + } + trav = trav->next; + } /* NOTE: Only the least significant 8 bits i.e (signum & 255) will be available to parent process on calling exit() */ diff --git a/glusterfsd/src/glusterfsd.h b/glusterfsd/src/glusterfsd.h index 496a4d95352..cd5dea2f21c 100644 --- a/glusterfsd/src/glusterfsd.h +++ b/glusterfsd/src/glusterfsd.h @@ -131,7 +131,7 @@ int glusterfs_volume_top_read_perf (uint32_t blk_size, uint32_t blk_count, char *brick_path, double *throughput, double *time); void -xlator_mem_cleanup (xlator_t *this); +glusterfs_autoscale_threads (glusterfs_ctx_t *ctx, int incr, xlator_t *this); extern glusterfs_ctx_t *glusterfsd_ctx; #endif /* __GLUSTERFSD_H__ */ |