summaryrefslogtreecommitdiffstats
path: root/glusterfsd
diff options
context:
space:
mode:
Diffstat (limited to 'glusterfsd')
-rw-r--r--glusterfsd/src/glusterfsd-mgmt.c72
-rw-r--r--glusterfsd/src/glusterfsd.c13
-rw-r--r--glusterfsd/src/glusterfsd.h2
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__ */