|
From: Chris B. <buc...@us...> - 2012-05-17 19:52:42
|
This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "SFCB - Small Footprint CIM Broker".
The branch, master has been updated
via d2a83f4428ca7e82afc72eafb6616af0e94cb45d (commit)
via d52b477e301eb3e499c56b4635011339c8f1a571 (commit)
from 93cfecefeae968e8ffafb80aea1f8e885f934573 (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
- Log -----------------------------------------------------------------
commit d2a83f4428ca7e82afc72eafb6616af0e94cb45d
Author: buccella <buc...@li...>
Date: Thu May 17 15:50:35 2012 -0400
[ 3527674 ] Faster Startup
commit d52b477e301eb3e499c56b4635011339c8f1a571
Author: buccella <buc...@li...>
Date: Wed May 16 15:41:08 2012 -0400
Additional cleanup found during 2966659
-----------------------------------------------------------------------
Summary of changes:
diff --git a/ChangeLog b/ChangeLog
index 7cc6870..c271ea1 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+2012-05-17 Chris Buccella <buc...@li...>
+
+ * classProviderGz.c, httpAdapter.c, interopProvider.c,
+ msgqueue.c, msgqueue.h, providerMgr.c:
+ [ 3527674 ] Faster Startup
+
2012-05-16 Chris Buccella <buc...@li...>
* control.c, msgqueue.c, msgqueue.h, sfcBroker.c:
diff --git a/NEWS b/NEWS
index 9879903..8969355 100644
--- a/NEWS
+++ b/NEWS
@@ -11,6 +11,8 @@ New features:
Bugs fixed:
- 3495804 Cleanup: httpProcId still defined, wrong define in cimXmlGen
- 3516167 Force kill sfcbd on stop if needed
+- 2966659 Cleanup https daemon remnants
+- 3527674 Faster Startup
Changes in 1.4.2
================
@@ -63,8 +65,6 @@ New features:
Bugs fixed:
-- 2966659 Cleanup https daemon remnants
-
Everything in 1.3.10, plus:
- 3130727 CMPIPropertyMIFT.setProperty() missing objectpath keys
diff --git a/classProviderGz.c b/classProviderGz.c
index ebe79d1..546a100 100644
--- a/classProviderGz.c
+++ b/classProviderGz.c
@@ -1138,6 +1138,9 @@ ClassProviderInvokeMethod(CMPIMethodMI * mi,
atoi(val + sizeof(char))) > 0) ? cacheLimit : 10;
}
+ /* let providerMgr know that we're odne init'ing */
+ semRelease(sfcbSem,INIT_CLASS_PROV_ID);
+
st.rc = CMPI_RC_OK;
}
diff --git a/httpAdapter.c b/httpAdapter.c
index 0ea9b4a..47aa3cc 100644
--- a/httpAdapter.c
+++ b/httpAdapter.c
@@ -91,7 +91,7 @@ int chunkMode = CHUNK_ALLOW;
int sfcbSSLMode = 0; /* used as a global sslMode */
int httpLocalOnly = 0; /* 1 = only listen on loopback
* interface */
-static int hMax;
+static long hMax;
static int httpProcIdX;
static int stopAccepting = 0;
static int running = 0;
@@ -1855,8 +1855,7 @@ httpDaemon(int argc, char *argv[], int sslMode)
int i,
rc;
char *cp;
- long procs,
- httpPort;
+ long httpPort;
int httpListenFd = -1;
int enableHttp = 0;
fd_set httpfds;
@@ -1906,10 +1905,8 @@ httpDaemon(int argc, char *argv[], int sslMode)
udsPath = "/tmp/sfcbHttpSocket";
#endif
- hMax = htMax; /* max number of http procs */
-
- if (getControlNum("httpProcs", &procs))
- procs = 10;
+ if (getControlNum("httpProcs", &hMax))
+ hMax = 10;
if (getControlBool("enableHttp", &enableHttp))
enableHttp = 1;
#ifdef HAVE_UDS
@@ -1925,7 +1922,7 @@ httpDaemon(int argc, char *argv[], int sslMode)
* note: we check for enableHttps in sfcBroker
*/
- initHttpProcCtl(procs);
+ initHttpProcCtl(hMax);
if (getControlBool("doBasicAuth", &doBa))
doBa = 0;
@@ -2102,6 +2099,10 @@ httpDaemon(int argc, char *argv[], int sslMode)
maxfdp1 = (maxfdp1 > udsListenFd) ? maxfdp1 : (udsListenFd + 1);
#endif
+ /* wait until providerMgr is ready to start accepting reqs
+ (that is, when interopProvider is finished initializing) */
+ semAcquire(sfcbSem, INIT_PROV_MGR_ID);
+
for (;;) {
/*
diff --git a/interopProvider.c b/interopProvider.c
index 192b062..c7545d0 100644
--- a/interopProvider.c
+++ b/interopProvider.c
@@ -1568,6 +1568,8 @@ InteropProviderInvokeMethod(CMPIMethodMI * mi,
else if (strcasecmp(methodName, "_startup") == 0) {
initInterOp(_broker, ctx);
+ /* let httpAdapter know that he can continue */
+ semRelease(sfcbSem,INIT_PROV_MGR_ID);
}
else {
diff --git a/msgqueue.c b/msgqueue.c
index 53ba7ac..61158ea 100644
--- a/msgqueue.c
+++ b/msgqueue.c
@@ -122,7 +122,7 @@ semSetValue(int semid, int semnum, int value)
}
int
-initSem(int https, int provs)
+initSem(int provs)
{
union semun sun;
int i;
@@ -133,8 +133,10 @@ initSem(int https, int provs)
semctl(sfcbSem, 0, IPC_RMID, sun);
if ((sfcbSem =
- semget(sfcbSemKey, 4 + (provs * 3) + 3,
+ semget(sfcbSemKey,
+ PROV_PROC_BASE_ID + (provs * PROV_PROC_NUM_SEMS) + PROV_PROC_NUM_SEMS,
IPC_CREAT | IPC_EXCL | 0600)) == -1) {
+
char *emsg = strerror(errno);
mlogf(M_ERROR, M_SHOW,
"\n--- SFCB semaphore create key: 0x%x failed: %s\n", sfcbSemKey,
@@ -145,10 +147,9 @@ initSem(int https, int provs)
abort();
}
- sun.val = 1;
- semctl(sfcbSem, HTTP_GUARD_ID, SETVAL, sun);
- sun.val = https;
- semctl(sfcbSem, HTTP_PROCS_ID, SETVAL, sun);
+ sun.val = 0; /* init as unacquirable */
+ semctl(sfcbSem, INIT_CLASS_PROV_ID, SETVAL, sun);
+ semctl(sfcbSem, INIT_PROV_MGR_ID, SETVAL, sun);
for (i = 0; i < provs; i++) {
sun.val = 1;
diff --git a/msgqueue.h b/msgqueue.h
index 869cbcb..13fdd30 100644
--- a/msgqueue.h
+++ b/msgqueue.h
@@ -148,7 +148,7 @@ extern int semReleaseUnDo(int semid, int semnum);
extern int semMultiRelease(int semid, int semnum, int n);
extern int semGetValue(int semid, int semnum);
extern int semSetValue(int semid, int semnum, int value);
-extern int initSem(int https, int provs);
+extern int initSem(int provs);
extern int provProcSem;
extern int provWorkSem;
@@ -166,8 +166,10 @@ extern char *httpPauseStr;
/*
* static ids
*/
-#define HTTP_GUARD_ID 0
-#define HTTP_PROCS_ID 1
+
+#define INIT_CLASS_PROV_ID 0
+#define INIT_PROV_MGR_ID 1
+
/*
* PROV_PROC_BASE_ID must be updated if the number of id's in the above
@@ -195,9 +197,7 @@ extern char *httpPauseStr;
#define PROV_ALIVE(id) (((id)*(int)(PROV_PROC_NUM_SEMS))+PROV_PROC_ALIVE_ID+PROV_PROC_BASE_ID)
extern ComSockets *sPairs;
-extern int ptBase,
- htBase,
- htMax;
+extern int ptBase;
extern void stopLocalConnectServer();
extern void localConnectServer();
diff --git a/providerMgr.c b/providerMgr.c
index 4db8f91..a7d47d5 100644
--- a/providerMgr.c
+++ b/providerMgr.c
@@ -998,12 +998,17 @@ processProviderMgrRequests()
sigprocmask(SIG_SETMASK, &mask, &old_mask);
startUpProvider("root/interop", "$ClassProvider$");
+ /* wait until classProvider is finished init'ing */
+ semAcquire(sfcbSem,INIT_CLASS_PROV_ID);
#ifdef SFCB_INCL_INDICATION_SUPPORT
if (interOpProvInfoPtr != forceNoProvInfoPtr) {
- sleep(2);
startUpProvider("root/interop", "$InterOpProvider$");
+ /* note: we don't wait here for interopProvider to finish init'ing,
+ because its init has some reqs that providerMgr will need to process.
+ httpAdapter waits for interop to init before accepting HTTP requests */
}
+
#endif
#ifdef HAVE_SLP
startUpProvider("root/interop", "$ProfileProvider$");
@@ -1144,8 +1149,7 @@ getProviderContext(BinRequestContext * ctx)
{
unsigned long int l;
int rc = 0,
- i,
- x;
+ i;
char *buf;
ProvAddr *as;
ComSockets sockets;
@@ -1167,7 +1171,6 @@ getProviderContext(BinRequestContext * ctx)
((OperationHdr *) buf)->nameSpace.data = (void *) l;
l += ohdr->nameSpace.length;
memcpy(buf + l, ohdr->className.data, ohdr->className.length);
- x = l;
((OperationHdr *) buf)->className.data = (void *) l;
l += ohdr->className.length;
diff --git a/sfcBroker.c b/sfcBroker.c
index 77951d0..7d2e4b7 100644
--- a/sfcBroker.c
+++ b/sfcBroker.c
@@ -865,7 +865,7 @@ main(int argc, char *argv[])
startHttp = 1;
}
- initSem(dSockets, pSockets);
+ initSem(pSockets);
initProvProcCtl(pSockets);
init_sfcBroker();
initSocketPairs(pSockets, dSockets);
hooks/post-receive
--
SFCB - Small Footprint CIM Broker
|