Changeset: 816ebddb6533 for MonetDB URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=816ebddb6533 Modified Files: tools/merovingian/daemon/argvcmds.c tools/merovingian/daemon/argvcmds.h tools/merovingian/daemon/discoveryrunner.c tools/merovingian/daemon/discoveryrunner.h tools/merovingian/daemon/merovingian.c Branch: transaction-replication Log Message:
Add initial support for manually connecting to a remote monetdbd instance diffs (128 lines): diff --git a/tools/merovingian/daemon/argvcmds.c b/tools/merovingian/daemon/argvcmds.c --- a/tools/merovingian/daemon/argvcmds.c +++ b/tools/merovingian/daemon/argvcmds.c @@ -34,6 +34,7 @@ #include "merovingian.h" #include "argvcmds.h" +#include "discoveryrunner.h" int command_help(int argc, char *argv[]) @@ -43,7 +44,7 @@ command_help(int argc, char *argv[]) if (argc < 2) { printf("usage: monetdbd [ command [ command-options ] ] <dbfarm>\n"); printf(" where command is one of:\n"); - printf(" create, start, stop, get, set, version or help\n"); + printf(" create, start, stop, get, set, add, version or help\n"); printf(" use the help command to get help for a particular command\n"); printf(" The dbfarm to operate on must always be given to\n"); printf(" monetdbd explicitly.\n"); @@ -67,6 +68,10 @@ command_help(int argc, char *argv[]) printf("usage: monetdbd get <\"all\" | property,...> <dbfarm>\n"); printf(" Gets value for property for the given dbfarm, or\n"); printf(" retrieves all properties.\n"); + } else if (strcmp(argv[1], "add") == 0) { + printf("usage: monetdbd add <dbname> <connection> [<tt>]\n"); + printf(" Connects to a (remote) monetdbd instance and database.\n"); + printf(" Useful when auto-discovery does not work.\n"); } else { printf("help: unknown command: %s\n", argv[1]); exitcode = 1; @@ -512,3 +517,51 @@ command_stop(confkeyval *ckv, int argc, return(0); } + +int +command_add(confkeyval *ckv, int argc, char *argv[]) +{ + char *dbname; + char *conn; + char *ttl; + (void)ckv; + + // we need at 3 values: add <dbnam> <conn>, ttl is optional + if (argc < 3) { + command_help(2, &argv[-1]); + return(1); + } + + dbname = argv[1]; + conn = argv[2]; + if (argc > 3) { + ttl = argv[3]; + } else { + // default t o 600 seconds... as a string, we will convert it to int later + // + ttl = "600"; + } + + if (dbname == NULL) { + fprintf(stderr, "incorrect dbname monetdbd[%d]: %s\n", (int)daemon, strerror(errno)); + return(1); + } + if (conn == NULL) { + fprintf(stderr, "incorrect conn monetdbd[%d]: %s\n", (int)daemon, strerror(errno)); + return(1); + } + if (ttl == NULL) { + fprintf(stderr, "incorrect ttl monetdbd[%d]: %s\n", (int)daemon, strerror(errno)); + return(1); + } + + if (addRemoteDB(dbname, conn, atoi(ttl)) == 1) { + if (strcmp(dbname, "*") == 0) { + Mfprintf(_mero_discout, "registered neighbour %s\n", conn); + } else { + Mfprintf(_mero_discout, "new database %s%s (ttl=%ss)\n", conn, dbname, ttl); + } + } + + return(0); +} diff --git a/tools/merovingian/daemon/argvcmds.h b/tools/merovingian/daemon/argvcmds.h --- a/tools/merovingian/daemon/argvcmds.h +++ b/tools/merovingian/daemon/argvcmds.h @@ -28,5 +28,6 @@ int command_create(int argc, char *argv[ int command_get(confkeyval *ckv, int argc, char *argv[]); int command_set(confkeyval *ckv, int argc, char *argv[]); int command_stop(confkeyval *ckv, int argc, char *argv[]); +int command_add(confkeyval *ckv, int argc, char *argv[]); #endif diff --git a/tools/merovingian/daemon/discoveryrunner.c b/tools/merovingian/daemon/discoveryrunner.c --- a/tools/merovingian/daemon/discoveryrunner.c +++ b/tools/merovingian/daemon/discoveryrunner.c @@ -106,7 +106,7 @@ removeRemoteDB(const char *dbname, const return(hadmatch); } -static int +int addRemoteDB(const char *dbname, const char *conn, const int ttl) { remotedb rdb; remotedb prv; diff --git a/tools/merovingian/daemon/discoveryrunner.h b/tools/merovingian/daemon/discoveryrunner.h --- a/tools/merovingian/daemon/discoveryrunner.h +++ b/tools/merovingian/daemon/discoveryrunner.h @@ -38,6 +38,7 @@ typedef struct _remotedb { struct _remotedb* next; }* remotedb; +int addRemoteDB(const char *dbname, const char *conn, const int ttl); sabdb *getRemoteDB(char *database); extern remotedb _mero_remotedbs; diff --git a/tools/merovingian/daemon/merovingian.c b/tools/merovingian/daemon/merovingian.c --- a/tools/merovingian/daemon/merovingian.c +++ b/tools/merovingian/daemon/merovingian.c @@ -522,6 +522,8 @@ main(int argc, char *argv[]) exit(command_get(ckv, argc - 1, &argv[1])); } else if (strcmp(argv[1], "set") == 0) { exit(command_set(ckv, argc - 1, &argv[1])); + } else if (strcmp(argv[1], "add") == 0) { + exit(command_add(ckv, argc - 1, &argv[1])); } else if (strcmp(argv[1], "start") == 0) { if (argc > 3 && strcmp(argv[2], "-n") == 0) merodontfork = 1; _______________________________________________ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list