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