diff options
author | Mikolaj Golub <trociny@FreeBSD.org> | 2013-10-26 08:38:21 +0000 |
---|---|---|
committer | Mikolaj Golub <trociny@FreeBSD.org> | 2013-10-26 08:38:21 +0000 |
commit | 6b66c350a7fe8a2e29a86e8898fc1f27cb84f3e6 (patch) | |
tree | 5dd698fe27c250542cf190e8f372eb9d1afcc679 /sbin/hastd/secondary.c | |
parent | d03a08e5e6f5ba513b3b2724d9f5e98c7c085cb7 (diff) | |
download | src-6b66c350a7fe8a2e29a86e8898fc1f27cb84f3e6.tar.gz src-6b66c350a7fe8a2e29a86e8898fc1f27cb84f3e6.zip |
Make hastctl list command output current queue sizes.
Reviewed by: pjd
MFC after: 1 month
Notes
Notes:
svn path=/head/; revision=257155
Diffstat (limited to 'sbin/hastd/secondary.c')
-rw-r--r-- | sbin/hastd/secondary.c | 17 |
1 files changed, 17 insertions, 0 deletions
diff --git a/sbin/hastd/secondary.c b/sbin/hastd/secondary.c index 067c5d93639f..899ee92d0ab6 100644 --- a/sbin/hastd/secondary.c +++ b/sbin/hastd/secondary.c @@ -82,18 +82,21 @@ static struct hast_resource *gres; * until some in-progress requests are freed. */ static TAILQ_HEAD(, hio) hio_free_list; +static size_t hio_free_list_size; static pthread_mutex_t hio_free_list_lock; static pthread_cond_t hio_free_list_cond; /* * Disk thread (the one that does I/O requests) takes requests from this list. */ static TAILQ_HEAD(, hio) hio_disk_list; +static size_t hio_disk_list_size; static pthread_mutex_t hio_disk_list_lock; static pthread_cond_t hio_disk_list_cond; /* * Thread that sends requests back to primary takes requests from this list. */ static TAILQ_HEAD(, hio) hio_send_list; +static size_t hio_send_list_size; static pthread_mutex_t hio_send_list_lock; static pthread_cond_t hio_send_list_cond; @@ -112,6 +115,7 @@ static void *send_thread(void *arg); mtx_lock(&hio_##name##_list_lock); \ _wakeup = TAILQ_EMPTY(&hio_##name##_list); \ TAILQ_INSERT_TAIL(&hio_##name##_list, (hio), hio_next); \ + hio_##name##_list_size++; \ mtx_unlock(&hio_##name##_list_lock); \ if (_wakeup) \ cv_broadcast(&hio_##name##_list_cond); \ @@ -122,11 +126,22 @@ static void *send_thread(void *arg); cv_wait(&hio_##name##_list_cond, \ &hio_##name##_list_lock); \ } \ + PJDLOG_ASSERT(hio_##name##_list_size != 0); \ + hio_##name##_list_size--; \ TAILQ_REMOVE(&hio_##name##_list, (hio), hio_next); \ mtx_unlock(&hio_##name##_list_lock); \ } while (0) static void +output_status_aux(struct nv *nvout) +{ + + nv_add_uint64(nvout, (uint64_t)hio_free_list_size, "idle_queue_size"); + nv_add_uint64(nvout, (uint64_t)hio_disk_list_size, "local_queue_size"); + nv_add_uint64(nvout, (uint64_t)hio_send_list_size, "send_queue_size"); +} + +static void hio_clear(struct hio *hio) { @@ -190,6 +205,7 @@ init_environment(void) } hio_clear(hio); TAILQ_INSERT_HEAD(&hio_free_list, hio, hio_next); + hio_free_list_size++; } } @@ -441,6 +457,7 @@ hastd_secondary(struct hast_resource *res, struct nv *nvin) } gres = res; + res->output_status_aux = output_status_aux; mode = pjdlog_mode_get(); debuglevel = pjdlog_debug_get(); |