[Libvir] PATCH 4/9: Remove startup/reload handling into driver.c
Daniel P. Berrange
berrange at redhat.com
Mon Jun 18 02:16:52 UTC 2007
This patch moves a little more code dealing with VMs / networks out of the
qemud.c file into the driver.c file. Specifically code to load configs at
startup, code to re-load config files on SIGHUP, and some code to cleanup
unused inactive VM / network config file structs.
driver.c | 82 ++++++++++++++++++++++++++++++++++++++++-----------------------
driver.h | 2 +
qemud.c | 45 ++--------------------------------
3 files changed, 58 insertions(+), 71 deletions(-)
Dan.
--
|=- Red Hat, Engineering, Emerging Technologies, Boston. +1 978 392 2496 -=|
|=- Perl modules: http://search.cpan.org/~danberr/ -=|
|=- Projects: http://freshmeat.net/~danielpb/ -=|
|=- GnuPG: 7D3B9505 F3C9 553F A1DA 4AC2 5648 23C1 B3DF F742 7D3B 9505 -=|
-------------- next part --------------
diff -r 0dda5e885666 qemud/driver.c
--- a/qemud/driver.c Sun Jun 17 17:37:40 2007 -0400
+++ b/qemud/driver.c Sun Jun 17 22:10:55 2007 -0400
@@ -65,6 +65,19 @@ void qemudReportError(struct qemud_serve
static void qemudDispatchVMEvent(int fd, int events, void *opaque);
+int qemudStartup(struct qemud_server *server) {
+ return qemudScanConfigs(server);
+}
+
+void qemudReload(struct qemud_server *server) {
+ qemudScanConfigs(server);
+
+ if (server->iptables) {
+ qemudLog(QEMUD_INFO, "Reloading iptables rules");
+ iptablesReloadRules(server->iptables);
+ }
+}
+
void qemudShutdown(struct qemud_server *server) {
struct qemud_vm *vm;
struct qemud_network *network;
@@ -420,7 +433,7 @@ int qemudStartVMDaemon(struct qemud_serv
int qemudStartVMDaemon(struct qemud_server *server,
struct qemud_vm *vm) {
char **argv = NULL, **tmp;
- int i, ret = -1;
+ int i;
char logfile[PATH_MAX];
if (qemudIsActiveVM(vm)) {
@@ -497,23 +510,11 @@ int qemudStartVMDaemon(struct qemud_serv
server->ninactivevms--;
server->nactivevms++;
server->nvmfds += 2;
-
- virEventAddHandle(vm->stdout,
- POLLIN | POLLERR | POLLHUP,
- qemudDispatchVMEvent,
- server);
- virEventAddHandle(vm->stderr,
- POLLIN | POLLERR | POLLHUP,
- qemudDispatchVMEvent,
- server);
-
- ret = 0;
-
- if (qemudWaitForMonitor(server, vm) < 0) {
- qemudShutdownVMDaemon(server, vm);
- ret = -1;
- }
- }
+ }
+
+ for (i = 0 ; argv[i] ; i++)
+ free(argv[i]);
+ free(argv);
if (vm->tapfds) {
for (i = 0; vm->tapfds[i] != -1; i++) {
@@ -524,12 +525,30 @@ int qemudStartVMDaemon(struct qemud_serv
vm->tapfds = NULL;
vm->ntapfds = 0;
}
-
- for (i = 0 ; argv[i] ; i++)
- free(argv[i]);
- free(argv);
-
- return ret;
+
+ if (virEventAddHandle(vm->stdout,
+ POLLIN | POLLERR | POLLHUP,
+ qemudDispatchVMEvent,
+ server) < 0) {
+ qemudShutdownVMDaemon(server, vm);
+ return -1;
+ }
+
+ if (virEventAddHandle(vm->stderr,
+ POLLIN | POLLERR | POLLHUP,
+ qemudDispatchVMEvent,
+ server) < 0) {
+ qemudShutdownVMDaemon(server, vm);
+ return -1;
+ }
+
+
+ if (qemudWaitForMonitor(server, vm) < 0) {
+ qemudShutdownVMDaemon(server, vm);
+ return -1;
+ }
+
+ return 0;
}
static int qemudVMData(struct qemud_server *server ATTRIBUTE_UNUSED,
@@ -607,6 +626,9 @@ int qemudShutdownVMDaemon(struct qemud_s
server->nactivevms--;
server->ninactivevms++;
+
+ if (!vm->configFile[0])
+ qemudRemoveInactiveVM(server, vm);
return 0;
}
@@ -1070,6 +1092,9 @@ int qemudShutdownNetworkDaemon(struct qe
server->nactivenetworks--;
server->ninactivenetworks++;
+ if (!network->configFile[0])
+ qemudRemoveInactiveNetwork(server, network);
+
return 0;
}
@@ -1090,11 +1115,10 @@ static void qemudDispatchVMEvent(int fd,
if (!vm)
return;
- if (events == POLLIN &&
- qemudDispatchVMLog(server, vm, fd) == 0)
- return;
-
- qemudDispatchVMFailure(server, vm, fd);
+ if (events == POLLIN)
+ qemudDispatchVMLog(server, vm, fd);
+ else
+ qemudDispatchVMFailure(server, vm, fd);
}
int qemudMonitorCommand(struct qemud_server *server ATTRIBUTE_UNUSED,
diff -r 0dda5e885666 qemud/driver.h
--- a/qemud/driver.h Sun Jun 17 17:37:40 2007 -0400
+++ b/qemud/driver.h Sun Jun 17 22:10:55 2007 -0400
@@ -39,6 +39,8 @@ int qemudShutdownNetworkDaemon(struct qe
int qemudShutdownNetworkDaemon(struct qemud_server *server,
struct qemud_network *network);
+int qemudStartup(struct qemud_server *server);
+void qemudReload(struct qemud_server *server);
void qemudShutdown(struct qemud_server *server);
void qemudReportError(struct qemud_server *server,
diff -r 0dda5e885666 qemud/qemud.c
--- a/qemud/qemud.c Sun Jun 17 17:37:40 2007 -0400
+++ b/qemud/qemud.c Sun Jun 17 22:10:54 2007 -0400
@@ -57,8 +57,6 @@
#include "../src/remote_internal.h"
#include "../src/conf.h"
#include "dispatch.h"
-#include "conf.h"
-#include "iptables.h"
#include "driver.h"
#include "event.h"
@@ -209,12 +207,7 @@ static void qemudDispatchSignalEvent(int
case SIGHUP:
qemudLog(QEMUD_INFO, "Reloading configuration on SIGHUP");
if (!remote) {
- ret = qemudScanConfigs(server);
-
- if (server->iptables) {
- qemudLog(QEMUD_INFO, "Reloading iptables rules");
- iptablesReloadRules(server->iptables);
- }
+ qemudReload(server);
}
break;
@@ -733,7 +726,7 @@ static struct qemud_server *qemudInitial
goto cleanup;
if (!remote) /* qemud only */ {
- if (qemudScanConfigs(server) < 0) {
+ if (qemudStartup(server) < 0) {
goto cleanup;
}
} else /* remote only */ {
@@ -1493,37 +1486,7 @@ static void qemudDispatchServerEvent(int
}
-static void qemudCleanupInactive(struct qemud_server *server) {
- struct qemud_vm *vm = server->vms;
- struct qemud_network *network = server->networks;
-
- /* Cleanup any VMs which shutdown & dont have an associated
- config file */
- while (vm) {
- struct qemud_vm *next = vm->next;
-
- if (!qemudIsActiveVM(vm) && !vm->configFile[0])
- qemudRemoveInactiveVM(server, vm);
-
- vm = next;
- }
-
- /* Cleanup any networks too */
- while (network) {
- struct qemud_network *next = network->next;
-
- if (!qemudIsActiveNetwork(network) && !network->configFile[0])
- qemudRemoveInactiveNetwork(server, network);
-
- network = next;
- }
-
- return;
-}
-
-
-
-static int qemudOneLoop(struct qemud_server *server) {
+static int qemudOneLoop(struct qemud_server *server ATTRIBUTE_UNUSED) {
sig_atomic_t errors;
if (virEventRunOnce() < 0)
@@ -1538,8 +1501,6 @@ static int qemudOneLoop(struct qemud_ser
errors, strerror (sig_lasterrno));
return -1;
}
-
- qemudCleanupInactive(server);
return 0;
}
More information about the libvir-list
mailing list