Changeset: 60e931f12bf9 for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=60e931f12bf9
Modified Files:
        tools/merovingian/client/monetdb.c
        tools/merovingian/daemon/controlrunner.c
        tools/merovingian/utils/database.c
        tools/merovingian/utils/database.h
Branch: wlcr
Log Message:

Intermediate commit for monetdb master command

The code compiles but it is not yet usable. This time the implementation
respects the local code conventions.


diffs (110 lines):

diff --git a/tools/merovingian/client/monetdb.c 
b/tools/merovingian/client/monetdb.c
--- a/tools/merovingian/client/monetdb.c
+++ b/tools/merovingian/client/monetdb.c
@@ -1623,16 +1623,40 @@ command_release(int argc, char *argv[])
 static void
 command_master(int argc, char *argv[])
 {
-       int i;
+       char *e = NULL;
+       sabdb *orig = NULL;
+       sabdb *stats = NULL;
+       char *target_path = NULL;
+
+
        if (argc != 2 && argc != 3) {
                /* print help message for this command */
                command_help(argc + 1, &argv[-1]);
                exit(1);
        }
 
-       fprintf(stderr, "Called master with args:\n");
-       for (i = 0; i < argc; i++)
-               fprintf(stderr, "  %s\n", argv[i]);
+       if (argc == 3)
+               target_path = strdup(argv[2]);
+
+       if ((e = MEROgetStatus(&orig, NULL)) != NULL) {
+               fprintf(stderr, "master: %s\n", e);
+               free(e);
+               exit(2);
+       }
+       stats = globMatchDBS(argc, argv, &orig, "master");
+       msab_freeStatus(&orig);
+       orig = stats;
+
+       if (target_path != NULL) {
+               size_t len = strlen("master path=") + strlen(target_path) + 1;
+               char *cmd = (char *)malloc(len);
+               snprintf(cmd, len, "master path=%s", target_path);
+               simple_argv_cmd(argv[0], orig, cmd,
+                                               "set database as master", NULL);
+       } else {
+               simple_argv_cmd(argv[0], orig, "master",
+                                               "set database as master", NULL);
+       }
 }
 
 static void
@@ -1644,7 +1668,7 @@ command_replica(int argc, char *argv[])
                command_help(argc + 1, &argv[-1]);
                exit(1);
        }
-       fprintf(stderr, "Called replica with args:\n");
+       fprintf(stderr, "Called replica with %d args:\n", argc);
        for (i = 0; i < argc; i++)
                fprintf(stderr, "  %s\n", argv[i]);
 }
diff --git a/tools/merovingian/daemon/controlrunner.c 
b/tools/merovingian/daemon/controlrunner.c
--- a/tools/merovingian/daemon/controlrunner.c
+++ b/tools/merovingian/daemon/controlrunner.c
@@ -618,6 +618,18 @@ static void ctl_handle_client(
                                        len = snprintf(buf2, sizeof(buf2), 
"OK\n");
                                        send_client("=");
                                }
+                       } else if (strcmp(p, "master") == 0 ||
+                                          strncmp(p, "master path=", 
strlen("master path=")) == 0) {
+                               char *e = db_master(q);
+                               if (e != NULL) {
+                                       Mfprintf(_mero_ctlerr, "%s: got command 
master %s: %s\n", origin, q, getErrMsg(e));
+                                       len = snprintf(buf2, sizeof(buf2),
+                                                                  "%s\n", 
getErrMsg(e));
+                                       send_client("!");
+                                       free(e);
+                               } else {
+
+                               }
                        } else if (strncmp(p, "name=", strlen("name=")) == 0) {
                                char *e;
 
diff --git a/tools/merovingian/utils/database.c 
b/tools/merovingian/utils/database.c
--- a/tools/merovingian/utils/database.c
+++ b/tools/merovingian/utils/database.c
@@ -373,3 +373,17 @@ char *db_release(char *dbname) {
 
        return(NULL);
 }
+
+char *db_master(char *dbname) {
+       /* sabdb *stats; */
+       /* char *e; */
+       /* char buf[8096]; */
+
+       /* if ((e = msab_getStatus(&stats, dbname)) != NULL) { */
+       /*      snprintf(buf, sizeof(buf), "internal error: %s", e); */
+       /*      free(e); */
+       /*      return(strdup(buf)); */
+       /* } */
+       (void)dbname;
+       return strdup("executing db_master");
+}
diff --git a/tools/merovingian/utils/database.h 
b/tools/merovingian/utils/database.h
--- a/tools/merovingian/utils/database.h
+++ b/tools/merovingian/utils/database.h
@@ -15,5 +15,6 @@ char* db_destroy(char* dbname);
 char* db_rename(char* olddb, char* newdb);
 char* db_lock(char* dbname);
 char* db_release(char* dbname);
+char* db_master(char *dbname);
 
 #endif
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to