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

Reply via email to