Changeset: 4e5d6e5cc8c0 for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=4e5d6e5cc8c0
Modified Files:
monetdb5/scheduler/srvpool.c
monetdb5/scheduler/srvpool.h
monetdb5/scheduler/srvpool.mal
Branch: default
Log Message:
Better connection handling
Make sure we can debug the remote connection.
diffs (105 lines):
diff --git a/monetdb5/scheduler/srvpool.c b/monetdb5/scheduler/srvpool.c
--- a/monetdb5/scheduler/srvpool.c
+++ b/monetdb5/scheduler/srvpool.c
@@ -154,27 +154,29 @@ static void SRVPOOLcleanup(int i)
/* logically disconnect from all servers */
static str
-SRVPOOLdisconnect(void)
+SRVPOOLdisconnect(Client cntxt)
{
int i, ret;
str msg = MAL_SUCCEED;
for ( i=0; i< srvtop; i++)
if ( servers[i].conn != NULL ) {
- msg = RMTdisconnect(&ret,&servers[i].conn);
+ msg = RMTdisconnect(cntxt,&ret,&servers[i].conn);
GDKfree(servers[i].conn);
servers[i].conn = NULL;
}
return msg;
}
/* restart server pool */
-str SRVPOOLreset(int *ret)
+str SRVPOOLreset(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci)
{
int i;
str msg;
- (void) ret;
- msg = SRVPOOLdisconnect();
+ (void) mb;
+ (void) stk;
+ (void) pci;
+ msg = SRVPOOLdisconnect(cntxt);
for ( i=0; i< srvtop; i++){
SRVPOOLcleanup(i);
GDKfree(servers[i].uri);
@@ -256,7 +258,7 @@ SRVPOOLdiscover(Client cntxt)
#ifdef DEBUG_RUN_SRVPOOL
mnstr_printf(cntxt->fdout,"#Worker site %d reports %s \n", j, msg);
#endif
- GDKfree(msg); /* ignore
failure */
+ break;
}
}
@@ -274,6 +276,7 @@ SRVPOOLdiscover(Client cntxt)
mnstr_printf(cntxt->fdout,"#%s\n", msg);
#endif
GDKfree(msg);
+ msg = MAL_SUCCEED;
}
while (srvtop < srvbaseline) {
@@ -414,11 +417,12 @@ SRVPOOLserver(Client cntxt, MalBlkPtr mb
if ( !SRVPOOLfind(cntxt, j,plan) ){
msg = SRVPOOLregisterInternal(cntxt,
servers[i].uri, plan);
if ( msg) {
+ /* registration should succeed on all
hots */
#ifdef DEBUG_RUN_SRVPOOL
mnstr_printf(cntxt->fdout,"#failed to
register %s at %d\n",plan,i);
mnstr_printf(cntxt->fdout,"#%s\n",msg);
#endif
- GDKfree(msg);
+ break;
}
}
if ( SRVPOOLfind(cntxt, j,plan) ){
@@ -435,9 +439,9 @@ SRVPOOLserver(Client cntxt, MalBlkPtr mb
(servers[j].conn?servers[j].conn:"null"));
#endif
}
- if ( fnd != pci->retc)
+ if (msg == MAL_SUCCEED && fnd != pci->retc)
throw(MAL,"srvpool.server","Not enough alife connections");
- return MAL_SUCCEED;
+ return msg;
}
/*
diff --git a/monetdb5/scheduler/srvpool.h b/monetdb5/scheduler/srvpool.h
--- a/monetdb5/scheduler/srvpool.h
+++ b/monetdb5/scheduler/srvpool.h
@@ -44,7 +44,7 @@ mpool_export str SRVPOOLscheduler(Client
mpool_export str SRVPOOLexec(Client cntxt, MalBlkPtr mb, MalStkPtr stk,
InstrPtr p);
mpool_export str SRVPOOLregister(Client cntxt, MalBlkPtr mb, MalStkPtr stk,
InstrPtr pci);
mpool_export str SRVPOOLserver(Client cntxt, MalBlkPtr mb, MalStkPtr stk,
InstrPtr pci);
-mpool_export str SRVPOOLreset(int *ret);
+mpool_export str SRVPOOLreset(Client cntxt, MalBlkPtr mb, MalStkPtr stk,
InstrPtr pci);
mpool_export str SRVPOOLconnect(str *c, str *dbname);
mpool_export str SRVsetServers(Client cntxt, MalBlkPtr mb, MalStkPtr stk,
InstrPtr pci);
#endif /* MAL_RUN_SRVPOOL */
diff --git a/monetdb5/scheduler/srvpool.mal b/monetdb5/scheduler/srvpool.mal
--- a/monetdb5/scheduler/srvpool.mal
+++ b/monetdb5/scheduler/srvpool.mal
@@ -28,7 +28,7 @@ command srvpool.connect(dbname:str):str
address SRVPOOLconnect
comment "Returns the connection to the server dbname.";
-command srvpool.reset(dbname:str):str
+pattern srvpool.reset(dbname:str):str
address SRVPOOLreset
comment "Clear the server cache";
_______________________________________________
Checkin-list mailing list
[email protected]
http://mail.monetdb.org/mailman/listinfo/checkin-list