Changeset: ef4b6d42eb9a for MonetDB URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=ef4b6d42eb9a Modified Files: tools/merovingian/daemon/snapshot.c Branch: hot-snapshot Log Message:
It snapshots. Barely diffs (76 lines): diff --git a/tools/merovingian/daemon/snapshot.c b/tools/merovingian/daemon/snapshot.c --- a/tools/merovingian/daemon/snapshot.c +++ b/tools/merovingian/daemon/snapshot.c @@ -9,14 +9,68 @@ #include <stdio.h> #include "monetdb_config.h" +#include "msabaoth.h" #include "merovingian.h" +#include "mapi.h" #include "snapshot.h" +/* Create a snapshot of database dbname to file dest. + * TODO: verify that dest is a safe location. + * TODO: Make it work for databases without monetdb/monetdb root account. + */ err snapshot_adhoc(char *dbname, char *dest) { - (void)dbname; + err e = NO_ERR; + sabdb *stats = NULL; + int port = -1; + Mapi conn = NULL; + MapiHdl handle = NULL; + + + /* First look up the database in our administration. */ + e = msab_getStatus(&stats, dbname); + if (e) { + goto bailout; + } + if (!stats) { + e = newErr("No such database: '%s'", dbname); + goto bailout; + } + + /* Connect. This is a dirty hack, making two assumptions: + * 1. we're listening on localhost + * 2. the database has a root user 'monetdb' with password 'monetdb'. + */ + port = getConfNum(_mero_props, "port"); + conn = mapi_connect("localhost", port, "monetdb", "monetdb", "sql", dbname); + if (conn == NULL || mapi_error(conn)) { + e = newErr("connection error: %s", mapi_error_str(conn)); + goto bailout; + } + + /* Trigger the snapshot */ + handle = mapi_prepare(conn, "CALL sys.hot_snapshot(?)"); + if (handle == NULL || mapi_error(conn)) { + e = newErr("prepare failed: %s", mapi_error_str(conn)); + goto bailout; + } + if (mapi_param_string(handle, 0, 12, dest, NULL) != MOK) { + e = newErr("internal error: mapi_param_string: %s", mapi_error_str(conn)); + goto bailout; + } + if (mapi_execute(handle) != MOK) { + e = newErr("internal error: execute failed: %s", mapi_result_error(handle)); + goto bailout; + } + +bailout: + if (handle != NULL) + mapi_close_handle(handle); + if (conn != NULL) + mapi_destroy(conn); + if (stats != NULL) + msab_freeStatus(&stats); (void)dest; - sleep_ms(10 * 1000); - return NO_ERR; + return e; } \ No newline at end of file _______________________________________________ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list