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

Reply via email to