Get a count of the number of workers for all servers that are still
processing a job.
Signed-off-by: John Ferlan <jferlan(a)redhat.com>
---
src/libvirt_remote.syms | 1 +
src/rpc/virnetserver.c | 26 ++++++++++++++++++++++++++
src/rpc/virnetserver.h | 2 ++
3 files changed, 29 insertions(+)
diff --git a/src/libvirt_remote.syms b/src/libvirt_remote.syms
index 3170fbd7c..c6fd156ef 100644
--- a/src/libvirt_remote.syms
+++ b/src/libvirt_remote.syms
@@ -120,6 +120,7 @@ virNetServerQuitRequested;
virNetServerSetClientAuthenticated;
virNetServerStart;
virNetServerUpdateServices;
+virNetServerWorkerCount;
# rpc/virnetserverclient.h
diff --git a/src/rpc/virnetserver.c b/src/rpc/virnetserver.c
index 7114749ab..dc92dfea0 100644
--- a/src/rpc/virnetserver.c
+++ b/src/rpc/virnetserver.c
@@ -846,6 +846,32 @@ virNetServerQuitRequested(virNetServerPtr srv)
}
+/* virNetServerWorkerCount:
+ * @srv: Netserver pointer
+ *
+ * Return the number of workers still waiting to be processed. This
+ * allows the quit requested code to wait for all worker jobs to be
+ * completed before actually quitting.
+ */
+size_t
+virNetServerWorkerCount(virNetServerPtr srv)
+{
+ size_t workerCount;
+
+ virObjectLock(srv);
+
+ workerCount = virThreadPoolGetCurrentWorkers(srv->workers) +
+ virThreadPoolGetPriorityWorkers(srv->workers);
+
+ if (workerCount > 0)
+ VIR_DEBUG("server '%s' still has %zd workers", srv->name,
workerCount);
+
+ virObjectUnlock(srv);
+
+ return workerCount;
+}
+
+
void virNetServerClose(virNetServerPtr srv)
{
size_t i;
diff --git a/src/rpc/virnetserver.h b/src/rpc/virnetserver.h
index a9bd3480b..1b1916814 100644
--- a/src/rpc/virnetserver.h
+++ b/src/rpc/virnetserver.h
@@ -59,6 +59,8 @@ virNetServerPtr virNetServerNewPostExecRestart(virJSONValuePtr object,
void virNetServerQuitRequested(virNetServerPtr srv);
+size_t virNetServerWorkerCount(virNetServerPtr srv);
+
void virNetServerClose(virNetServerPtr srv);
virJSONValuePtr virNetServerPreExecRestart(virNetServerPtr srv);
--
2.13.6