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
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list