Update of /cvsroot/monetdb/sql/src/backends/monet5/merovingian
In directory 23jxhf1.ch3.sourceforge.com:/tmp/cvs-serv4046

Modified Files:
        merovingian_controlrunner.c monetdb_lock.c monetdb_release.c 
Log Message:
implemented merovingian-side lock and release commands

U monetdb_lock.c
Index: monetdb_lock.c
===================================================================
RCS file: /cvsroot/monetdb/sql/src/backends/monet5/merovingian/monetdb_lock.c,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -d -r1.2 -r1.3
--- monetdb_lock.c      10 Sep 2009 08:04:00 -0000      1.2
+++ monetdb_lock.c      10 Sep 2009 08:47:15 -0000      1.3
@@ -32,16 +32,31 @@
 
        /* do for each listed database */
        for (i = 1; i < argc; i++) {
-               char *e;
+               hadwork = 1;
+               if (mero_running == 0) {
+                       char *e;
 
-               if ((e = db_lock(argv[i])) != NULL) {
-                       fprintf(stderr, "lock: %s\n", e);
-                       free(e);
-                       state |= 1;
+                       if ((e = db_lock(argv[i])) != NULL) {
+                               fprintf(stderr, "%s: %s\n", argv[0], e);
+                               free(e);
+                               state |= 1;
+                               continue;
+                       }
                } else {
-                       printf("database '%s' is now under maintenance\n", 
argv[i]);
+                       char *res;
+                       char *out;
+
+                       out = control_send(&res, mero_control, -1, argv[i], 
argv[0]);
+                       if (out != NULL || strcmp(res, "OK") != 0) {
+                               res = out == NULL ? res : out;
+                               fprintf(stderr, "%s: %s\n", argv[0], res);
+                               state |= 1;
+                               free(res);
+                               continue;
+                       }
+                       free(res);
                }
-               hadwork = 1;
+               printf("database '%s' is now under maintenance\n", argv[i]);
        }
 
        if (hadwork == 0) {

U monetdb_release.c
Index: monetdb_release.c
===================================================================
RCS file: 
/cvsroot/monetdb/sql/src/backends/monet5/merovingian/monetdb_release.c,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -d -r1.2 -r1.3
--- monetdb_release.c   10 Sep 2009 08:20:33 -0000      1.2
+++ monetdb_release.c   10 Sep 2009 08:47:15 -0000      1.3
@@ -32,17 +32,32 @@
 
        /* do for each listed database */
        for (i = 1; i < argc; i++) {
-               char *e;
+               hadwork = 1;
+               if (mero_running == 0) {
+                       char *e;
 
-               if ((e = db_release(argv[i])) != NULL) {
-                       fprintf(stderr, "release: %s\n", e);
-                       free(e);
-                       state |= 1;
+                       if ((e = db_release(argv[i])) != NULL) {
+                               fprintf(stderr, "%s: %s\n", argv[0], e);
+                               free(e);
+                               state |= 1;
+                               continue;
+                       }
                } else {
-                       printf("database '%s' has been taken out of maintenance 
mode\n",
-                                       argv[i]);
+                       char *res;
+                       char *out;
+
+                       out = control_send(&res, mero_control, -1, argv[i], 
argv[0]);
+                       if (out != NULL || strcmp(res, "OK") != 0) {
+                               res = out == NULL ? res : out;
+                               fprintf(stderr, "%s: %s\n", argv[0], res);
+                               state |= 1;
+                               free(res);
+                               continue;
+                       }
+                       free(res);
                }
-               hadwork = 1;
+               printf("database '%s' has been taken out of maintenance mode\n",
+                               argv[i]);
        }
 
        if (hadwork == 0) {

U merovingian_controlrunner.c
Index: merovingian_controlrunner.c
===================================================================
RCS file: 
/cvsroot/monetdb/sql/src/backends/monet5/merovingian/merovingian_controlrunner.c,v
retrieving revision 1.12
retrieving revision 1.13
diff -u -d -r1.12 -r1.13
--- merovingian_controlrunner.c 9 Sep 2009 20:12:19 -0000       1.12
+++ merovingian_controlrunner.c 10 Sep 2009 08:47:15 -0000      1.13
@@ -240,6 +240,54 @@
                                                len = snprintf(buf2, 
sizeof(buf2), "OK\n");
                                                send(msgsock, buf2, len, 0);
                                        }
+                               } else if (strcmp(p, "lock") == 0) {
+                                       char *e = db_lock(q);
+                                       if (e != NULL) {
+                                               Mfprintf(_mero_ctlerr, "failed 
to lock "
+                                                               "database '%s': 
%s\n", q, getErrMsg(e));
+                                               len = snprintf(buf2, 
sizeof(buf2),
+                                                               "%s\n", 
getErrMsg(e));
+                                               send(msgsock, buf2, len, 0);
+                                               free(e);
+                                       } else {
+                                               /* we go under maintenance, 
unshare it, take
+                                                * spam if database happened to 
be unshared "for
+                                                * love" */
+                                               leavedb(q);
+                                               Mfprintf(_mero_ctlout, "locked 
database '%s'\n", q);
+                                               len = snprintf(buf2, 
sizeof(buf2), "OK\n");
+                                               send(msgsock, buf2, len, 0);
+                                       }
+                               } else if (strcmp(p, "release") == 0) {
+                                       char *e = db_release(q);
+                                       if (e != NULL) {
+                                               Mfprintf(_mero_ctlerr, "failed 
to release "
+                                                               "database '%s': 
%s\n", q, getErrMsg(e));
+                                               len = snprintf(buf2, 
sizeof(buf2),
+                                                               "%s\n", 
getErrMsg(e));
+                                               send(msgsock, buf2, len, 0);
+                                               free(e);
+                                       } else {
+                                               /* announce database, but need 
to do it the
+                                                * right way so we don't 
accidentially announce
+                                                * an unshared database */
+                                               if ((e = 
SABAOTHgetStatus(&stats, q)) != MAL_SUCCEED) {
+                                                       len = snprintf(buf2, 
sizeof(buf2),
+                                                                       
"internal error, please review the logs\n");
+                                                       send(msgsock, buf2, 
len, 0);
+                                                       Mfprintf(_mero_ctlerr, 
"release: SABAOTHgetStatus: "
+                                                                       "%s\n", 
e);
+                                                       freeErr(e);
+                                                       /* we need to OK 
regardless, as releasing
+                                                        * succeed */
+                                               } else {
+                                                       anncdbS(stats);
+                                                       
SABAOTHfreeStatus(&stats);
+                                               }
+                                               Mfprintf(_mero_ctlout, 
"released database '%s'\n", q);
+                                               len = snprintf(buf2, 
sizeof(buf2), "OK\n");
+                                               send(msgsock, buf2, len, 0);
+                                       }
                                } else if (strncmp(p, "share=", 
strlen("share=")) == 0) {
                                        sabdb *stats;
                                        err e;


------------------------------------------------------------------------------
Let Crystal Reports handle the reporting - Free Crystal Reports 2008 30-Day 
trial. Simplify your report design, integration and deployment - and focus on 
what you do best, core application coding. Discover what's new with 
Crystal Reports now.  http://p.sf.net/sfu/bobj-july
_______________________________________________
Monetdb-sql-checkins mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/monetdb-sql-checkins

Reply via email to