[Monetdb-developers] Remote Merovingian control

Fabian Groffen Fabian.Groffen at cwi.nl
Fri Sep 25 12:06:23 CEST 2009

This message only applies to the current development branch of MonetDB,
and is informational only, mainly addressed to others working with the
current development branch.

monetdb[1] goes abroad

After quite some hacking to move code back and forth between components,
we now got the first version of merovingian[2] and monetdb[1] that can
do remote control.  I will give some small examples here so everyone
that is interested can get up to speed fast, and/or get an idea on the

Basically, all functionality that used to be implemented in monetdb, is
now implemented in merovingian.  That means, for instance creation of a
database is performed by merovingian.  A positive side-effect of this is
that the discovery aspect of databases is now real-time, e.g.:

% monetdb release dumptest
taken database out of maintenance mode: dumptest

2009-09-25 11:54:10 MSG control[8590]: (local): released database 'dumptest'
2009-09-25 11:54:10 MSG discovery[8590]: new database mapi:monetdb://pegasus.ins.cwi.nl:50000/dumptest (ttl=660s)

We can see that when database is released again using monetdb release,
it is immediately announced in the network, making it available for use.
Locking a database has the oposite effect, of course.
Next, the "(local)" string indicates that this control command was
received over the local UNIX socket, as was the case in previous
releases of merovingian.  In addition to this local access, monetdb now
also can connect over a TCP socket, which needs not to be remote, e.g.:

% monetdb -hjarl.ins.cwi.nl -Pxxxxxx status
         name            state     uptime       health       last crash
testdbatjenniesmachine  stopped               100%,  4m  -

2009-09-25 11:56:19 MSG control[11449]: pegasus.ins.cwi.nl:49652: served status list

Here we can see that the merovingian at jarl reports it served a status
list to pegasus, which is the host I performed the monetdb status at.
Note the -Pxxxxxxxx in there, which is the passphrase of the remote
merovingian.  This passphrase is by default a random string, but can be
set to something else by editing the .merovingian_pass file in the
dbfarm and restarting merovingian.

The way to find other merovingians in the vincinity is by using monetdb
discover.  Its output now includes how to reach each merovingian, if
remote control is enabled for them.  Remote control over TCP can be
disabled in monetdb5.conf by unsetting mero_controlport.  Control
entries can be recognised in discover's output by the trailing asterisk,
which one can also glob for:

% monetdb discover "*\*"

This command just returned all merovingians that have remote control
enabled and reports their hostname and port to connect to.

The remote control protocol is very simple, and I'm planning to make at
least a Java library available to perform these commands, such that
monetdb[1] no longer needs to be the only application to perform
commands with merovingian.

[1] http://homepages.cwi.nl/~fabian/MonetDB/Man%20Pages.html/monetdb.html
[2] http://homepages.cwi.nl/~fabian/MonetDB/Man%20Pages.html/merovingian.html

More information about the developers-list mailing list