Update of /cvsroot/monetdb/MonetDB5/src/tools
In directory sc8-pr-cvs16.sourceforge.net:/tmp/cvs-serv26783
Modified Files:
monetdb.mx
Log Message:
Reuse is good: implemented start, stop and the new kill in one function.
Index: monetdb.mx
===================================================================
RCS file: /cvsroot/monetdb/MonetDB5/src/tools/monetdb.mx,v
retrieving revision 1.23
retrieving revision 1.24
diff -u -d -r1.23 -r1.24
--- monetdb.mx 2 Sep 2007 17:28:42 -0000 1.23
+++ monetdb.mx 2 Sep 2007 19:38:01 -0000 1.24
@@ -79,7 +79,7 @@
printf("Usage: monetdb command
[command-options-and-arguments]\n");
printf(" where command is one of:\n");
printf(" create, destroy, lock, release\n");
- printf(" status, start, stop\n");
+ printf(" status, start, stop, kill\n");
printf(" help, version\n");
printf(" use the help command to get help for a particular
command\n");
} else if (strcmp(argv[1], "create") == 0) {
@@ -124,6 +124,12 @@
printf("Usage: monetdb stop [-a] [database ...]\n");
printf(" Stops the given database, if the MonetDB Database
Server\n");
printf(" is running.\n");
+ } else if (strcmp(argv[1], "kill") == 0) {
+ printf("Usage: monetdb kill [-a] [database ...]\n");
+ printf(" Kills the given database, if the MonetDB Database
Server\n");
+ printf(" is running. Note: killing a database should only be
done\n");
+ printf(" as last resort to stop a database. A database
being\n");
+ printf(" killed may end up with data loss.\n");
} else if (strcmp(argv[1], "help") == 0) {
printf("Yeah , help on help, how desparate can you be? ;)");
} else if (strcmp(argv[1], "version") == 0) {
@@ -442,8 +448,14 @@
}
}
+typedef enum {
+ START = 0,
+ STOP,
+ KILL
+} merocom;
+
static void
-command_start(int argc, char *argv[], char *dbfarm)
+command_merocom(int argc, char *argv[], char *dbfarm, merocom mode)
{
int doall = 0;
char path[8096];
@@ -452,115 +464,23 @@
int i;
err e;
sabdb *stats;
+ char *type;
snprintf(path, 8095, "%s/.merovingian_control", dbfarm);
path[8095] = '\0';
- if (argc == 1) {
- /* print help message for this command */
- command_help(2, &argv[-1]);
- exit(1);
- } else if (argc == 0) {
- exit(2);
- }
-
- /* time to collect some option flags */
- for (i = 1; i < argc; i++) {
- if (argv[i][0] == '-') {
- if (strcmp(&argv[i][1], "a") == 0) {
- doall = 1;
- } else if (strcmp(&argv[i][1], "-") == 0) {
- i = argc;
- } else {
- fprintf(stderr, "start: unknown option: -%c\n",
argv[i][1]);
- command_help(2, &argv[-1]);
- exit(1);
- }
- /* make this option no longer available, for easy use
- * lateron */
- argv[i] = NULL;
- }
- }
-
- /* if Merovingian isn't running, there's not much we can do */
- if (mero_running == 0) {
- fprintf(stderr, "start: cannot start: MonetDB Database Server "
- "(merovingian) is not running\n");
- exit(1);
- }
-
- if ((f = fopen(path, "w")) == NULL) {
- fprintf(stderr, "start: cannot write command: %s\n",
- strerror(errno));
- exit(2);
- }
-
- if (doall == 1) {
- sabdb *orig;
- /* don't even look at the arguments, because we are instructed
- * to start all known databases */
- if ((e = SABAOTHgetStatus(&stats, NULL)) != MAL_SUCCEED) {
- fprintf(stderr, "start: internal error: %s\n", e);
- GDKfree(e);
- exit(2);
- }
-
- orig = stats;
- while (stats != NULL && stats->state != SABdbRunning) {
- snprintf(buf, 256, "%s start\n", stats->dbname);
- fputs(buf, f);
- stats = stats->next;
- }
-
- fflush(f);
- fclose(f);
-
- if (orig != NULL)
- SABAOTHfreeStatus(&orig);
- return;
- }
-
- for (i = 1; i < argc; i++) {
- if (argv[i] != NULL) {
- if ((e = SABAOTHgetStatus(&stats, argv[i])) !=
MAL_SUCCEED) {
- fprintf(stderr, "start: internal error: %s\n",
e);
- GDKfree(e);
- exit(2);
- }
-
- if (stats == NULL) {
- fprintf(stderr, "start: no such database:
%s\n", argv[i]);
- } else {
- if (stats->state == SABdbRunning) {
- printf("start: database is already
running: %s\n", argv[i]);
- } else {
- snprintf(buf, 256, "%s start\n",
stats->dbname);
- fputs(buf, f);
- }
-
- SABAOTHfreeStatus(&stats);
- }
- }
+ switch (mode) {
+ case START:
+ type = "start";
+ break;
+ case STOP:
+ type = "stop";
+ break;
+ case KILL:
+ type = "kill";
+ break;
}
- fflush(f);
- fclose(f);
-}
-
-static void
-command_stop(int argc, char *argv[], char *dbfarm)
-{
- int doall = 0;
- char path[8096];
- FILE *f;
- char buf[256];
- int i;
- err e;
- sabdb *stats;
-
- snprintf(path, 8095, "%s/.merovingian_control", dbfarm);
- path[8095] = '\0';
-
if (argc == 1) {
/* print help message for this command */
command_help(2, &argv[-1]);
@@ -577,7 +497,7 @@
} else if (strcmp(&argv[i][1], "-") == 0) {
i = argc;
} else {
- fprintf(stderr, "stop: unknown option: -%c\n",
argv[i][1]);
+ fprintf(stderr, "%s: unknown option: -%c\n",
type, argv[i][1]);
command_help(2, &argv[-1]);
exit(1);
}
@@ -589,30 +509,34 @@
/* if Merovingian isn't running, there's not much we can do */
if (mero_running == 0) {
- fprintf(stderr, "stop: cannot stop: MonetDB Database Server "
- "(merovingian) is not running\n");
+ fprintf(stderr, "%s: cannot perform: MonetDB Database Server "
+ "(merovingian) is not running\n", type);
exit(1);
}
if ((f = fopen(path, "w")) == NULL) {
- fprintf(stderr, "stop: cannot write command: %s\n",
- strerror(errno));
+ fprintf(stderr, "%s: cannot write command: %s\n",
+ type, strerror(errno));
exit(2);
}
if (doall == 1) {
sabdb *orig;
/* don't even look at the arguments, because we are instructed
- * to stop all known databases */
+ * to work on all known databases */
if ((e = SABAOTHgetStatus(&stats, NULL)) != MAL_SUCCEED) {
- fprintf(stderr, "stop: internal error: %s\n", e);
+ fprintf(stderr, "%s: internal error: %s\n", type, e);
GDKfree(e);
exit(2);
}
orig = stats;
- while (stats != NULL && stats->state == SABdbRunning) {
- snprintf(buf, 256, "%s stop\n", stats->dbname);
+ while (stats != NULL &&
+ (((mode == STOP || mode == KILL)
+ && stats->state == SABdbRunning) ||
+ (mode == START && stats->state !=
SABdbRunning)))
+ {
+ snprintf(buf, 256, "%s %s\n", stats->dbname, type);
fputs(buf, f);
stats = stats->next;
}
@@ -628,18 +552,23 @@
for (i = 1; i < argc; i++) {
if (argv[i] != NULL) {
if ((e = SABAOTHgetStatus(&stats, argv[i])) !=
MAL_SUCCEED) {
- fprintf(stderr, "stop: internal error: %s\n",
e);
+ fprintf(stderr, "%s: internal error: %s\n",
type, e);
GDKfree(e);
exit(2);
}
if (stats == NULL) {
- fprintf(stderr, "stop: no such database: %s\n",
argv[i]);
+ fprintf(stderr, "%s: no such database: %s\n",
type, argv[i]);
} else {
- if (stats->state != SABdbRunning) {
- printf("stop: database is not running:
%s\n", argv[i]);
+ if ((mode == STOP || mode == KILL) &&
+ stats->state != SABdbRunning)
+ {
+ printf("%s: database is not running:
%s\n", type, argv[i]);
+ } else if (mode == START && stats->state ==
SABdbRunning) {
+ printf("%s: database is already
running: %s\n",
+ type, argv[1]);
} else {
- snprintf(buf, 256, "%s stop\n",
stats->dbname);
+ snprintf(buf, 256, "%s %s\n",
stats->dbname, type);
fputs(buf, f);
}
@@ -1033,9 +962,11 @@
} else if (strcmp(argv[1], "status") == 0) {
command_status(argc - 1, &argv[1]);
} else if (strcmp(argv[1], "start") == 0) {
- command_start(argc - 1, &argv[1], dbfarm);
+ command_merocom(argc - 1, &argv[1], dbfarm, START);
} else if (strcmp(argv[1], "stop") == 0) {
- command_stop(argc - 1, &argv[1], dbfarm);
+ command_merocom(argc - 1, &argv[1], dbfarm, STOP);
+ } else if (strcmp(argv[1], "kill") == 0) {
+ command_merocom(argc - 1, &argv[1], dbfarm, KILL);
} else if (strcmp(argv[1], "help") == 0 || strcmp(argv[1], "-h") == 0) {
command_help(argc - 1, &argv[1]);
} else if (strcmp(argv[1], "version") == 0 || strcmp(argv[1], "-v") ==
0) {
-------------------------------------------------------------------------
This SF.net email is sponsored by: Splunk Inc.
Still grepping through log files to find problems? Stop.
Now Search log events and configuration files using AJAX and a browser.
Download your FREE copy of Splunk now >> http://get.splunk.com/
_______________________________________________
Monetdb-checkins mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/monetdb-checkins