Changeset: 8cf405d4a574 for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=8cf405d4a574
Modified Files:
        monetdb5/scheduler/srvpool.c
Branch: default
Log Message:

Various improvements
Use the connection handle properly. Avoid making a new connection
when not needed. Still to do, robust recognition of failed connection,
because they should lead to cleanup of the local admin.


diffs (126 lines):

diff --git a/monetdb5/scheduler/srvpool.c b/monetdb5/scheduler/srvpool.c
--- a/monetdb5/scheduler/srvpool.c
+++ b/monetdb5/scheduler/srvpool.c
@@ -220,14 +220,22 @@ SRVPOOLdiscover(Client cntxt)
        BUN p,q;
        str msg = MAL_SUCCEED, conn, scen = "msql";
        BATiter bi;
-       int i = 0, j;
-       char buf[BUFSIZ], *s= buf;
+       int j;
+       char buf[BUFSIZ], *s= buf, *dbname;
 
 
+       if ( srvbaseline == 0)
+               srvbaseline = 2; /* for debugging */
+
+       dbname= GDKgetenv("gdk_dbname");
+       snprintf(buf,BUFSIZ,"*/srvpool/%s",dbname);
        if ( srvpattern == 0)
-               /* use default pattern */
-               srvpattern = GDKstrdup("*/srvpool");
-       strncpy(buf,srvpattern, BUFSIZ-1);
+               /* set default pattern */
+               srvpattern = GDKstrdup(buf);
+
+       /* first check the validity of the connections */
+
+       /* discover any new servers */
        msg = RMTresolve(&bid,&s);
        if ( msg == MAL_SUCCEED) {
                b = BATdescriptor(bid);
@@ -236,22 +244,26 @@ SRVPOOLdiscover(Client cntxt)
                        BATloop(b,p,q){
                                str t= (str) BUNtail(bi,p);
 
-                               j = SRVPOOLgetServer(t); 
-                               msg = RMTconnectScen(&conn, &servers[j].uri, 
&servers[j].usr, &servers[j].pwd, &scen);
-                               if ( msg == MAL_SUCCEED ) {
-                                       servers[j].conn = GDKstrdup(conn);
-                                       i++;
-                               } else {
+                               for( j = 0; j < srvtop; j++)
+                               if ( strcmp(servers[j].uri, t) == 0) 
+                                       break;
+                               if ( servers[j].conn == NULL) {
+                                       j = SRVPOOLnewServer(t); 
+                                       msg = RMTconnectScen(&conn, 
&servers[j].uri, &servers[j].usr, &servers[j].pwd, &scen);
+                                       if ( msg == MAL_SUCCEED )
+                                               servers[j].conn = 
GDKstrdup(conn);
+                                       else {
 #ifdef DEBUG_RUN_SRVPOOL
-                                       mnstr_printf(cntxt->fdout,"#Worker site 
%d reports %s \n", j, msg);
+                                               
mnstr_printf(cntxt->fdout,"#Worker site %d reports %s \n", j, msg);
 #endif
-                                       GDKfree(msg);   /* ignore failure */
+                                               GDKfree(msg);   /* ignore 
failure */
+                                       }
                                }
 
 #ifdef DEBUG_RUN_SRVPOOL
                                mnstr_printf(cntxt->fdout,"#Worker site %d 
alias %s %s\n", j, (servers[j].conn?servers[j].conn:""), t);
 #endif
-                               assert(i <MAXSITES);
+                               assert(srvtop <MAXSITES);
                        }
                }
                BBPreleaseref(bid);
@@ -263,10 +275,8 @@ SRVPOOLdiscover(Client cntxt)
 #endif
                GDKfree(msg);
        }
-       if ( srvbaseline == 0)
-               srvbaseline = 2;
 
-       while (i < srvbaseline) {
+       while (srvtop < srvbaseline) {
                /* there is a last resort, use local execution */
                /* make sure you have enough connections */
                SABAOTHgetLocalConnection(&s);
@@ -277,15 +287,12 @@ SRVPOOLdiscover(Client cntxt)
                        servers[j].conn = GDKstrdup(conn);
                else  GDKfree(msg);
 #ifdef DEBUG_RUN_SRVPOOL
-               mnstr_printf(cntxt->fdout,"#Worker site %d %s\n", j, s);
+               mnstr_printf(cntxt->fdout,"#Worker site %d connection %s %s\n", 
j, servers[j].conn, s);
 #endif
-               i++;
        }
-       /* announce it for public use. */
-       nrservers = i;
 
 #ifdef DEBUG_RUN_SRVPOOL
-       mnstr_printf(cntxt->fdout,"#Servers available %d\n", nrservers);
+       mnstr_printf(cntxt->fdout,"#Servers available %d\n", srvtop);
 #else
                (void) cntxt;
 #endif
@@ -343,7 +350,7 @@ SRVPOOLregisterInternal(Client cntxt, st
 
        if( !SRVPOOLfind(cntxt, srv, fname) ){
                if ( servers[srv].conn ) {
-                       if ( nrservers > 1) /* register remotely */
+                       if ( srvtop > 1) /* register remotely */
                                msg = RMTregisterInternal(cntxt, 
servers[srv].conn, userRef, fname);
                } else
                        throw(MAL,"srvpool.register","Site not reachable, 
connection missing");
@@ -400,7 +407,9 @@ SRVPOOLserver(Client cntxt, MalBlkPtr mb
        (void) cntxt;
        (void) mb;
 
-       for ( j= i=0; i < pci->retc && j < nrservers; j++)  {
+       if ( pci->retc > srvtop )
+               throw(MAL,"srvpool.server","Not enough servers");
+       for ( j= i=0; i < pci->retc && j < srvtop; j++)  {
                if ( servers[j].conn ) {
                        if ( !SRVPOOLfind(cntxt, j,plan) ){
                                msg = SRVPOOLregisterInternal(cntxt, 
servers[i].uri, plan);
@@ -427,7 +436,7 @@ SRVPOOLserver(Client cntxt, MalBlkPtr mb
 #endif
        }
        if ( fnd != pci->retc)
-               throw(MAL,"srvpool.server","Not enough connections");
+               throw(MAL,"srvpool.server","Not enough alife connections");
        return MAL_SUCCEED;
 }
 
_______________________________________________
Checkin-list mailing list
[email protected]
http://mail.monetdb.org/mailman/listinfo/checkin-list

Reply via email to