summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--libglusterfs/src/mem-types.h2
-rw-r--r--xlators/cluster/dht/src/dht-rebalance.c17
2 files changed, 16 insertions, 3 deletions
diff --git a/libglusterfs/src/mem-types.h b/libglusterfs/src/mem-types.h
index 455ee641..d0384da 100644
--- a/libglusterfs/src/mem-types.h
+++ b/libglusterfs/src/mem-types.h
@@ -161,6 +161,8 @@ enum gf_common_mem_types_ {
gf_common_mt_tbf_t,
gf_common_mt_tbf_bucket_t,
gf_common_mt_tbf_throttle_t,
+
+ gf_common_mt_pthread_t,
gf_common_mt_end
};
#endif
diff --git a/xlators/cluster/dht/src/dht-rebalance.c b/xlators/cluster/dht/src/dht-rebalance.c
index d763237..81a8677 100644
--- a/xlators/cluster/dht/src/dht-rebalance.c
+++ b/xlators/cluster/dht/src/dht-rebalance.c
@@ -25,7 +25,6 @@
#define GF_DISK_SECTOR_SIZE 512
#define DHT_REBALANCE_PID 4242 /* Change it if required */
#define DHT_REBALANCE_BLKSIZE (128 * 1024)
-#define MAX_MIGRATOR_THREAD_COUNT 40
#define MAX_MIGRATE_QUEUE_COUNT 500
#define MIN_MIGRATE_QUEUE_COUNT 200
@@ -3419,7 +3418,7 @@ gf_defrag_start_crawl (void *data)
int thread_index = 0;
int err = 0;
int thread_spawn_count = 0;
- pthread_t tid[MAX_MIGRATOR_THREAD_COUNT];
+ pthread_t *tid = NULL;
gf_boolean_t is_tier_detach = _gf_false;
this = data;
@@ -3556,7 +3555,8 @@ gf_defrag_start_crawl (void *data)
gf_dht_mt_container_t);
if (!defrag->queue) {
- gf_log (this->name, GF_LOG_INFO, "No memory for queue");
+ gf_log (this->name, GF_LOG_ERROR, "No memory for "
+ "queue");
ret = -1;
goto out;
}
@@ -3568,6 +3568,15 @@ gf_defrag_start_crawl (void *data)
gf_msg_debug (this->name, 0, "thread_spawn_count: %d",
thread_spawn_count);
+ tid = GF_CALLOC (thread_spawn_count, sizeof (pthread_t),
+ gf_common_mt_pthread_t);
+ if (!tid) {
+ gf_log (this->name, GF_LOG_ERROR, "Insufficient memory "
+ "for tid");
+ ret = -1;
+ goto out;
+ }
+
defrag->current_thread_count = thread_spawn_count;
/*Spawn Threads Here*/
@@ -3657,6 +3666,8 @@ out:
pthread_join (tid[i], NULL);
}
+ GF_FREE (tid);
+
if (defrag->cmd == GF_DEFRAG_CMD_START_TIER) {
/* Wait for the tier fixlayout to
* complete if its was started.*/