From: sailer Date: Thu, 28 Aug 2003 12:08:07 +0000 (+0000) Subject: 2003-08-28 Benjamin Sailer X-Git-Url: https://jspc29.x-matter.uni-frankfurt.de/git/?a=commitdiff_plain;h=f502011ee5e5f1a370eff17dd7fbedd1aa272d9a;p=daqdata.git 2003-08-28 Benjamin Sailer * Removed threads and dynamic PV allocation again. enlarged MAX_NUM_PV (in pas). * added asynchronous cache table update (oraParam.pc) --- diff --git a/allParam/ChangeLog b/allParam/ChangeLog index bbf535f..477ee2f 100644 --- a/allParam/ChangeLog +++ b/allParam/ChangeLog @@ -1,3 +1,10 @@ +2003-08-28 Benjamin Sailer + + * Removed threads and dynamic PV allocation again. enlarged MAX_NUM_PV + (in pas). + + * added asynchronous cache table update (oraParam.pc) + 2003-07-24 Benjamin Sailer * Changed pas to fulfill Param_store*() asynchronously, returning diff --git a/allParam/ca/server/paramIntRecord.cc b/allParam/ca/server/paramIntRecord.cc index 6fac611..13aa950 100644 --- a/allParam/ca/server/paramIntRecord.cc +++ b/allParam/ca/server/paramIntRecord.cc @@ -1,5 +1,5 @@ -static const char rcsId[] = "$Header: /misc/hadesprojects/daq/cvsroot/eventbuilder/allParam/ca/server/paramIntRecord.cc,v 1.15 2003-07-24 11:17:12 sailer Exp $"; -#define _POSIX_C_SOURCE 199506L +static const char rcsId[] = "$Header: /misc/hadesprojects/daq/cvsroot/eventbuilder/allParam/ca/server/paramIntRecord.cc,v 1.16 2003-08-28 12:08:24 sailer Exp $"; +#define _POSIX_C_SOURCE 199509L #if HAVE_CONFIG_H #include @@ -8,10 +8,7 @@ static const char rcsId[] = "$Header: /misc/hadesprojects/daq/cvsroot/eventbuild extern "C" { #include - #include #include - - #include "storeThread.h" } #include "paramIntRecord.h" @@ -163,19 +160,11 @@ caStatus ParamIntRecord::write(const casCtx &ctx, const gdd &value) caStatus ParamIntRecord::write(const casCtx &ctx, gdd &value) #endif { - pthread_t threadS, *thread = &threadS; aitUint32 intValue; - ParamStoreIntArg *arg; value.getConvert(intValue); - arg = new ParamStoreIntArg; - - arg->param = param; - arg->name = name; - arg->idx = idx; - arg->value = (unsigned long int) intValue; - pthread_create(thread, NULL, storeIntThread, arg); - pthread_detach(*thread); + + Param_storeInt(param, name, idx, (unsigned long int) intValue); return S_cas_success; } diff --git a/allParam/ca/server/paramRecordSet.cc b/allParam/ca/server/paramRecordSet.cc index b815e30..d0b24db 100644 --- a/allParam/ca/server/paramRecordSet.cc +++ b/allParam/ca/server/paramRecordSet.cc @@ -1,4 +1,4 @@ -static const char rcsId[] = "$Header: /misc/hadesprojects/daq/cvsroot/eventbuilder/allParam/ca/server/paramRecordSet.cc,v 1.12 2003-07-23 15:37:04 sailer Exp $"; +static const char rcsId[] = "$Header: /misc/hadesprojects/daq/cvsroot/eventbuilder/allParam/ca/server/paramRecordSet.cc,v 1.13 2003-08-28 12:08:24 sailer Exp $"; #define _POSIX_C_SOURCE 199509L #if HAVE_CONFIG_H @@ -30,22 +30,17 @@ ParamRecordSet::ParamRecordSet(unsigned int pvCountEstimate) : { numParamSrc = 0; numPv = 0; - pv = NULL; } ParamRecordSet::~ParamRecordSet() { - Record *current; - Record *next; - for (current = pv; current != NULL; current = next) { - next = current->getNext(); - delete current; - } - for (int i = 0 ; i < numParamSrc ; i++) { desParam(param[i]); delete param[i]; } + for (int i = 0 ; i < numPv ; i++) { + delete pvs[i]; + } } Param *ParamRecordSet::pParam(const char *setup) @@ -56,6 +51,10 @@ Param *ParamRecordSet::pParam(const char *setup) if (strcmp(param[i]->setup, setup) == 0) { return param[i]; } + } else { + if (setup == NULL) { + return param[i]; + } } } } else { @@ -70,7 +69,6 @@ Param *ParamRecordSet::pParam(const char *setup) pvExistReturn ParamRecordSet::pvExistTest(const casCtx &ctx, const char *pPVName) { - Record *current; char *setup; char buf1[PARAM_MAX_NAME_LEN]; char buf2[PARAM_MAX_NAME_LEN]; @@ -80,8 +78,8 @@ pvExistReturn ParamRecordSet::pvExistTest(const casCtx &ctx, const char *pPVName strcpy(buf2, ""); strcpy(buf3, ""); - for (current = pv; current != NULL; current = current->getNext()) { - if(strcmp(pPVName, current->getPVName()) == 0) { + for (int i = 0 ; i < numPv ; i++) { + if(strcmp(pPVName, pvs[i]->getPVName()) == 0) { return pverExistsHere; } } @@ -115,48 +113,12 @@ pvExistReturn ParamRecordSet::pvExistTest(const casCtx &ctx, const char *pPVName return pverDoesNotExistHere; } -int ParamRecordSet::expireParams(int sec) -{ - int now; - int retVal = 0; - Record *previous = NULL; - Record *current = pv; - Record *next; - - now = (int) time(NULL); - - while (current != NULL) { - next = current->getNext(); - if (now - sec > current->getLastAccessTime()) { - syslog(LOG_DEBUG, "Removing param %s", current->getPVName()); - if (previous != NULL) { - previous->setNext(current->getNext()); - } else { - pv = current->getNext(); - } - delete current; - retVal++; - numPv--; - } else { - previous = current; - } - current = next; - } - - if (retVal) { - syslog(LOG_INFO, "%d parameter removed, %d parameter left", retVal, numPv); - } - return retVal; -} - #if EPICS_RELEASE >= 314 pvAttachReturn ParamRecordSet::pvAttach(const casCtx &ctx, const char *pPVName) #else pvCreateReturn ParamRecordSet::createPV(const casCtx &ctx, const char *pPVName) #endif { - Record *previous; - Record *current; char *setup; char type; char buf1[PARAM_MAX_NAME_LEN]; @@ -169,59 +131,46 @@ pvCreateReturn ParamRecordSet::createPV(const casCtx &ctx, const char *pPVName) pvCreateReturn retVal(S_casApp_pvNotFound); #endif - for (current = pv, previous = NULL; - current != NULL && (strcmp(pPVName, current->getPVName()) != 0); - previous = current, current = current->getNext()) { + for (int i = 0 ; i < numPv ; i++) { + if(strcmp(pPVName, pvs[i]->getPVName()) == 0) { + retVal = pvs[i]; + return retVal; + } } - if (current != NULL) { - retVal = current; - current->access(); - } else { - if(strncmp(pPVName, "HAD:P", strlen("HAD:P")) == 0) { - if(sscanf(pPVName, "HAD:P%c:%[^:]:%[^:]:%[^:]", &type, buf1, buf2, buf3) != 4) { - setup = NULL; - } else { - setup = buf1; - for (unsigned int i = 0 ; i < strlen(setup) ; i++) { - setup[i] = tolower(setup[i]); - } + if(strncmp(pPVName, "HAD:P", strlen("HAD:P")) == 0) { + if(sscanf(pPVName, "HAD:P%c:%[^:]:%[^:]:%[^:]", &type, buf1, buf2, buf3) != 4) { + setup = NULL; + } else { + setup = buf1; + for (unsigned int i = 0 ; i < strlen(setup) ; i++) { + setup[i] = tolower(setup[i]); } - if(pParam(setup) != NULL) { - switch (type) { - case('I'): - current = new ParamIntRecord(*this, pParam(setup), pPVName, "Integer"); - syslog(LOG_DEBUG, "Created Integer Record %s", pPVName); - break; - case('S'): - current = new ParamStringRecord(*this, pParam(setup), pPVName, "String"); - syslog(LOG_DEBUG, "Created String Record %s", pPVName); - break; - case('F'): - current = new ParamFilenameRecord(*this, pParam(setup), pPVName, "Filename"); - syslog(LOG_DEBUG, "Created Filename Record %s", pPVName); - break; - case('B'): - current = new ParamBlobRecord(*this, pParam(setup), pPVName, "Binary Large OBject"); - syslog(LOG_DEBUG, "Created Blob Record %s", pPVName); - break; - default: - return S_casApp_pvNotFound; - break; - } - numPv++; - if (previous != NULL) { - previous->setNext(current); - } else { - pv = current; - } - current->access(); - retVal = current; - } else { - retVal = S_casApp_pvNotFound; + } + if(pParam(setup) != NULL) { + switch (type) { + case('I'): + retVal = (pvs[numPv++] = new ParamIntRecord(*this, pParam(setup), pPVName, "Integer")); + syslog(LOG_DEBUG, "Created Integer Record %s", pPVName); + break; + case('S'): + retVal = (pvs[numPv++] = new ParamStringRecord(*this, pParam(setup), pPVName, "String")); + syslog(LOG_DEBUG, "Created String Record %s", pPVName); + break; + case('F'): + retVal = (pvs[numPv++] = new ParamFilenameRecord(*this, pParam(setup), pPVName, "Filename")); + syslog(LOG_DEBUG, "Created Filename Record %s", pPVName); + break; + case('B'): + retVal = (pvs[numPv++] = new ParamBlobRecord(*this, pParam(setup), pPVName, "Binary Large OBject")); + syslog(LOG_DEBUG, "Created Blob Record %s", pPVName); + break; } + return retVal; + } else { + return S_casApp_pvNotFound; } } - return retVal; + return S_casApp_pvNotFound; } diff --git a/allParam/ca/server/paramRecordSet.h b/allParam/ca/server/paramRecordSet.h index f2bcd67..7be01ae 100644 --- a/allParam/ca/server/paramRecordSet.h +++ b/allParam/ca/server/paramRecordSet.h @@ -4,34 +4,30 @@ #include extern "C" { - #include +#include } - #include "record.h" - #define MAX_PARAM_SRC 128 - -class ParamRecordSet : public caServer { +#define MAX_NUM_PV (1024 * 64) +class ParamRecordSet:public caServer { private: - int numPv; - Record *pv; + int numPv; + Record *pvs[MAX_NUM_PV]; - int numParamSrc; - Param *param[MAX_PARAM_SRC]; + int numParamSrc; + Param *param[MAX_PARAM_SRC]; Param *pParam(const char *); public: - ParamRecordSet(unsigned int); + ParamRecordSet(unsigned int); ~ParamRecordSet(); - pvExistReturn pvExistTest(const casCtx &ctx, const char *pPVName); - int expireParams(int sec); + pvExistReturn pvExistTest(const casCtx &, const char *); #if EPICS_RELEASE >= 314 - pvAttachReturn pvAttach(const casCtx &ctx, const char *pPVName); + pvAttachReturn pvAttach(const casCtx & ctx, const char *pPVName); #else - pvCreateReturn createPV(const casCtx &ctx, const char *pPVName); + pvCreateReturn createPV(const casCtx & ctx, const char *pPVName); #endif }; -#endif /* !PARAMRECORDSET_H */ - +#endif /* !PARAMRECORDSET_H */ diff --git a/allParam/ca/server/paramServer.cc b/allParam/ca/server/paramServer.cc index 3556079..1a9c0e7 100644 --- a/allParam/ca/server/paramServer.cc +++ b/allParam/ca/server/paramServer.cc @@ -1,5 +1,5 @@ static const char rcsId[] = - "$Header: /misc/hadesprojects/daq/cvsroot/eventbuilder/allParam/ca/server/paramServer.cc,v 1.11 2003-07-23 15:37:04 sailer Exp $"; + "$Header: /misc/hadesprojects/daq/cvsroot/eventbuilder/allParam/ca/server/paramServer.cc,v 1.12 2003-08-28 12:08:24 sailer Exp $"; #define _POSIX_C_SOURCE 199506L #define SYSLOG_NAMES @@ -23,11 +23,7 @@ extern int optind, opterr, optopt; #include "paramRecordSet.h" -#define MAX_NUM_PV 1024 - -#define SCAN_INTERVAL 100.0 -#define EXPIRE_INTERVAL 300 - +#define FD_DELAY 1000.0 #ifndef NDEBUG static void profSignalHandler(int sig) { @@ -141,13 +137,12 @@ int main(int argc, char *argv[]) syslog(LOG_ERR, "Cannot allocate memory for the RecordSet. Exiting."); exit(EXIT_FAILURE); } - syslog(LOG_INFO, "Parameter Server ready"); cas->setDebugLevel(0u); + syslog(LOG_INFO, "%s: Parameter Server ready", argv[0]); while (aitTrue) { - fileDescriptorManager.process(SCAN_INTERVAL); - cas->expireParams(EXPIRE_INTERVAL); + fileDescriptorManager.process(FD_DELAY); } delete cas; diff --git a/allParam/ca/server/paramStringRecord.cc b/allParam/ca/server/paramStringRecord.cc index d5286fc..b7454ad 100644 --- a/allParam/ca/server/paramStringRecord.cc +++ b/allParam/ca/server/paramStringRecord.cc @@ -1,5 +1,5 @@ -static const char rcsId[] = "$Header: /misc/hadesprojects/daq/cvsroot/eventbuilder/allParam/ca/server/paramStringRecord.cc,v 1.14 2003-07-24 11:17:12 sailer Exp $"; -#define _POSIX_C_SOURCE 199506L +static const char rcsId[] = "$Header: /misc/hadesprojects/daq/cvsroot/eventbuilder/allParam/ca/server/paramStringRecord.cc,v 1.15 2003-08-28 12:08:24 sailer Exp $"; +#define _POSIX_C_SOURCE 199509L #if HAVE_CONFIG_H #include @@ -8,10 +8,7 @@ static const char rcsId[] = "$Header: /misc/hadesprojects/daq/cvsroot/eventbuild extern "C" { #include - #include #include - - #include "storeThread.h" } #include "paramStringRecord.h" @@ -184,19 +181,10 @@ caStatus ParamStringRecord::write(const casCtx &ctx, const gdd &value) caStatus ParamStringRecord::write(const casCtx &ctx, gdd &value) #endif { - pthread_t threadS, *thread = &threadS; aitString stringValue; - ParamStoreStringArg *arg; value.getConvert(stringValue); - arg = new ParamStoreStringArg; - - arg->param = param; - arg->name = name; - arg->idx = idx; - arg->value = (const char *) stringValue; - pthread_create(thread, NULL, storeStringThread, arg); - pthread_detach(*thread); + Param_storeString(param, name, idx, (const char *) stringValue); return S_cas_success; } diff --git a/allParam/ca/server/record.cc b/allParam/ca/server/record.cc index 59a916d..4665c43 100644 --- a/allParam/ca/server/record.cc +++ b/allParam/ca/server/record.cc @@ -1,4 +1,4 @@ -static const char rcsId[] = "$Header: /misc/hadesprojects/daq/cvsroot/eventbuilder/allParam/ca/server/record.cc,v 1.8 2003-07-23 15:37:04 sailer Exp $"; +static const char rcsId[] = "$Header: /misc/hadesprojects/daq/cvsroot/eventbuilder/allParam/ca/server/record.cc,v 1.9 2003-08-28 12:08:24 sailer Exp $"; #define _POSIX_C_SOURCE 199506L #if HAVE_CONFIG_H @@ -25,7 +25,6 @@ Record::Record(caServer &cas, const Param *p, const char *n, const char *u, aitE char buf2[PARAM_MAX_NAME_LEN]; char buf3[PARAM_MAX_NAME_LEN]; - myPNext = NULL; strcpy (pPVName, n); interest = aitFalse; @@ -48,12 +47,10 @@ Record::Record(caServer &cas, const Param *p, const char *n, const char *u, aitE interest = aitFalse; -#if 0 recordScanTimer = new scanTimer(*this); #if EPICS_RELEASE >= 314 timer.start(*recordScanTimer, 100.0); #endif -#endif } Record::~Record() diff --git a/allParam/ca/server/record.h b/allParam/ca/server/record.h index 4925338..b5e5a6b 100644 --- a/allParam/ca/server/record.h +++ b/allParam/ca/server/record.h @@ -3,7 +3,7 @@ #if HAVE_CONFIG_H #include -#endif /* HAVE_CONFIG_H */ +#endif /* HAVE_CONFIG_H */ #include #if EPICS_RELEASE >= 314 @@ -17,32 +17,24 @@ #include extern "C" { - #include - - #include +#include } - #include "arrayDest.h" - class scanTimer; -class Record : public casPV { +class Record:public casPV { protected: const Param *param; const char *units; aitEnum type; gdd *val; #if EPICS_RELEASE >= 314 - epicsTimer &timer; + epicsTimer & timer; #endif -#if 0 scanTimer *recordScanTimer; -#endif aitBool interest; epicsAlarmCondition alarmStatus; epicsAlarmSeverity alarmSeverity; - Record *myPNext; - int lastAccessTime; ArrayDestructor *pDest; char pPVName[PARAM_MAX_VALUE_LEN]; @@ -50,23 +42,18 @@ class Record : public casPV { char idx[PARAM_MAX_VALUE_LEN]; public: - Record(caServer &cas, const Param *p, const char *n, const char *u, aitEnum t); + Record(caServer & cas, const Param * p, const char *n, const char *u, aitEnum t); ~Record(); - inline void setNext(Record *next) { myPNext = next; } - inline Record *getNext() { return myPNext; } - inline void access() { time_t t; t = time(NULL); lastAccessTime = (int) t; } - inline int getLastAccessTime() { return lastAccessTime; } - void destroy(); caStatus interestRegister(); void interestDelete(); const char *getName() const; aitEnum bestExternalType() const; - inline const char *getPVName() { return pPVName; } - - gddAppFuncTableStatus readUnits(gdd &); + inline const char *getPVName() { + return pPVName; + } gddAppFuncTableStatus readUnits(gdd &); gddAppFuncTableStatus readStatus(gdd &); gddAppFuncTableStatus readSeverity(gdd &); gddAppFuncTableStatus readSeconds(gdd &); @@ -94,17 +81,17 @@ class Record : public casPV { }; #if EPICS_RELEASE >= 314 -class scanTimer : public epicsTimerNotify { +class scanTimer:public epicsTimerNotify { private: - Record &procVar; + Record & procVar; public: scanTimer(Record &); - expireStatus expire(const epicsTime &t); + expireStatus expire(const epicsTime & t); }; #else -class scanTimer : public osiTimer { +class scanTimer:public osiTimer { private: - Record &procVar; + Record & procVar; public: scanTimer(Record &); void expire(); @@ -112,5 +99,4 @@ class scanTimer : public osiTimer { }; #endif -#endif /* !RECORD_H */ - +#endif /* !RECORD_H */ diff --git a/allParam/ca/server/storeThread.c b/allParam/ca/server/storeThread.c deleted file mode 100644 index e9ec151..0000000 --- a/allParam/ca/server/storeThread.c +++ /dev/null @@ -1,32 +0,0 @@ -static const char rcsId[] = "$Header:"; - -#define _POSIX_C_SOURCE 199506L - -#include - -#include - -#include "storeThread.h" - -void *storeIntThread(void *a) -{ - ParamStoreIntArg *arg; - - arg = a; - Param_storeInt(arg->param, arg->name, arg->idx, arg->value); - - free(arg); - return NULL; -} - -void *storeStringThread(void *a) -{ - ParamStoreStringArg *arg; - - arg = a; - Param_storeString(arg->param, arg->name, arg->idx, arg->value); - - free(arg); - return NULL; -} - diff --git a/allParam/ca/server/storeThread.h b/allParam/ca/server/storeThread.h deleted file mode 100644 index 1d214fb..0000000 --- a/allParam/ca/server/storeThread.h +++ /dev/null @@ -1,24 +0,0 @@ -#ifndef STORETHREAD_H -#define STORETHREAD_H - -#include - -typedef struct ParamStoreIntArgS { - const Param *param; - const char *name; - const char *idx; - unsigned long int value; -} ParamStoreIntArg; - -typedef struct ParamStoreStringArgS { - const Param *param; - const char *name; - const char *idx; - const char *value; -} ParamStoreStringArg; - -void *storeIntThread(void *a); -void *storeStringThread(void *a); - -#endif /* STORETHREAD_H */ - diff --git a/allParam/ora/oraParam.pc b/allParam/ora/oraParam.pc index 612c275..c42dcf5 100644 --- a/allParam/ora/oraParam.pc +++ b/allParam/ora/oraParam.pc @@ -1,4 +1,4 @@ -static const char rcsId[] = "$Header: /misc/hadesprojects/daq/cvsroot/eventbuilder/allParam/ora/oraParam.pc,v 1.37 2003-07-24 11:43:39 sailer Exp $"; +static const char rcsId[] = "$Header: /misc/hadesprojects/daq/cvsroot/eventbuilder/allParam/ora/oraParam.pc,v 1.38 2003-08-28 12:08:07 sailer Exp $"; #define _POSIX_C_SOURCE 199509L #if HAVE_CONFIG_H @@ -51,7 +51,7 @@ int conSetupParam(Param *my, const char *setup) my->setup = NULL; } my->specParam = malloc(sizeof(OraParam)); - ((OraParam *) (my->specParam))->user = "daq_oper@db-hades.oracle.gsi.de"; + ((OraParam *) (my->specParam))->user = "daq_oper@db-hades.gsi.de"; ((OraParam *) (my->specParam))->passwd = "daqall"; #ifdef PTHREADS @@ -138,6 +138,8 @@ int Param_getIntArray(const Param *my, const char *name, const char *idx, int ma int i; EXEC SQL BEGIN DECLARE SECTION; + int l_jobid; + int l_take_cache; int l_valid; int l_locked; char sqlsetup[PARAM_MAX_NAME_LEN]; @@ -146,6 +148,7 @@ int Param_getIntArray(const Param *my, const char *name, const char *idx, int ma unsigned long int value[PARAM_MAX_ARRAY_LEN]; EXEC SQL END DECLARE SECTION; + printf("Entered Param_getIntArray\n"); if (my->setup != NULL) { for(i = 0 ; i <= strlen(my->setup) ; i++) { sqlsetup[i] = tolower((my->setup)[i]); @@ -168,25 +171,49 @@ int Param_getIntArray(const Param *my, const char *name, const char *idx, int ma EXEC SQL WHENEVER SQLERROR DO Param_rollback(my); if (my->setup != NULL) { + EXEC SQL SELECT + valid, locked + INTO + :l_valid, :l_locked + FROM + daq.cache_table_valid + WHERE + cache_table = 'param_int_cache' + AND + daq_setup_id = daq.public_interface.r_daq_setup_id ( :sqlsetup ) + ; + printf("l_valid: %d, l_locked: %d\n", l_valid, l_locked); EXEC SQL EXECUTE BEGIN - SELECT - valid, locked - INTO - :l_valid, :l_locked - FROM - daq.cache_table_valid - WHERE - cache_table = 'param_int_cache' - AND - daq_setup_id = daq.public_interface.r_daq_setup_id ( :sqlsetup ); IF - :l_valid = 0 AND :l_locked = 0 + :l_valid != 1 AND :l_locked = 0 THEN - daq.daq_oper_interface.validate_cache_table ( 'param_int_cache' ); + IF + :l_valid = 0 + THEN + UPDATE + daq.cache_table_valid + SET + valid = -1 + WHERE + cache_table = 'param_int_cache' + AND + daq_setup_id = daq.public_interface.r_daq_setup_id ( :sqlsetup ) + ; + COMMIT; + DBMS_JOB.SUBMIT ( + :l_jobid, + 'daq.daq_oper_interface.validate_cache_table ( ''param_int_cache'', 6 );' + ); + END IF; + :l_take_cache := 0; + ELSE + :l_take_cache := 1; END IF; END; END-EXEC; + printf("do %stake cache\n", l_take_cache ? "" : "not "); + if (l_take_cache) { EXEC SQL SELECT value INTO @@ -201,26 +228,63 @@ int Param_getIntArray(const Param *my, const char *name, const char *idx, int ma idx = :sqlidx ORDER BY seq_num; - } else { - EXEC SQL EXECUTE - BEGIN - SELECT - valid, locked + } else { + EXEC SQL SELECT + value INTO - :l_valid, :l_locked + :value FROM - daq.cache_table_valid + daq.param_int WHERE - cache_table = 'param_int_cache' + setup = :sqlsetup AND - daq_setup_id IS NULL; + name = :sqlname + AND + idx = :sqlidx + ORDER BY + seq_num; + } + } else { + EXEC SQL SELECT + valid, locked + INTO + :l_valid, :l_locked + FROM + daq.cache_table_valid + WHERE + cache_table = 'param_int_cache' + AND + daq_setup_id IS NULL + ; + EXEC SQL EXECUTE + BEGIN IF - :l_valid = 0 AND :l_locked = 0 + :l_valid != 1 AND :l_locked = 0 THEN - daq.daq_oper_interface.validate_cache_table ( 'param_int_cache' ); + IF + :l_valid = 0 + THEN + UPDATE + daq.cache_table_valid + SET + valid = -1 + WHERE + cache_table = 'param_int_cache' + ; + COMMIT; + DBMS_JOB.SUBMIT ( + :l_jobid, + 'daq.daq_oper_interface.validate_cache_table ( ''param_int_cache'' );' + ); + END IF; + :l_take_cache := 0; + ELSE + :l_take_cache := 1; END IF; END; END-EXEC; + printf("do %stake cache\n", l_take_cache ? "" : "not "); + if (l_take_cache) { EXEC SQL SELECT value INTO @@ -235,6 +299,22 @@ int Param_getIntArray(const Param *my, const char *name, const char *idx, int ma idx = :sqlidx ORDER BY seq_num; + } else { + EXEC SQL SELECT + value + INTO + :value + FROM + daq.param_int + WHERE + setup IS NULL + AND + name = :sqlname + AND + idx = :sqlidx + ORDER BY + seq_num; + } } *rows = sqlca.sqlerrd[2]; @@ -262,6 +342,8 @@ int Param_getStringArray(const Param *my, const char *name, const char *idx, int int i; EXEC SQL BEGIN DECLARE SECTION; + int l_jobid; + int l_take_cache; int l_valid; int l_locked; char sqlsetup[PARAM_MAX_NAME_LEN]; @@ -270,6 +352,7 @@ int Param_getStringArray(const Param *my, const char *name, const char *idx, int char value[PARAM_MAX_ARRAY_LEN][PARAM_MAX_VALUE_LEN]; EXEC SQL END DECLARE SECTION; + printf("Entered Param_getStringArray\n"); if (my->setup != NULL) { for(i = 0 ; i <= strlen(my->setup) ; i++) { sqlsetup[i] = tolower((my->setup)[i]); @@ -292,25 +375,49 @@ int Param_getStringArray(const Param *my, const char *name, const char *idx, int EXEC SQL WHENEVER SQLERROR DO Param_rollback(my); if (my->setup != NULL) { + EXEC SQL SELECT + valid, locked + INTO + :l_valid, :l_locked + FROM + daq.cache_table_valid + WHERE + cache_table = 'param_string_cache' + AND + daq_setup_id = daq.public_interface.r_daq_setup_id ( :sqlsetup ) + ; + printf("l_valid: %d, l_locked: %d\n", l_valid, l_locked); EXEC SQL EXECUTE BEGIN - SELECT - valid, locked - INTO - :l_valid, :l_locked - FROM - daq.cache_table_valid - WHERE - cache_table = 'param_string_cache' - AND - daq_setup_id = daq.public_interface.r_daq_setup_id ( :sqlsetup ); IF - :l_valid = 0 AND :l_locked = 0 + :l_valid != 1 AND :l_locked = 0 THEN - daq.daq_oper_interface.validate_cache_table ( 'param_string_cache' ); + IF + :l_valid = 0 + THEN + UPDATE + daq.cache_table_valid + SET + valid = -1 + WHERE + cache_table = 'param_string_cache' + AND + daq_setup_id = daq.public_interface.r_daq_setup_id ( :sqlsetup ) + ; + COMMIT; + DBMS_JOB.SUBMIT ( + :l_jobid, + 'daq.daq_oper_interface.validate_cache_table ( ''param_string_cache'', 6 );' + ); + END IF; + :l_take_cache := 0; + ELSE + :l_take_cache := 1; END IF; END; END-EXEC; + printf("do %stake cache\n", l_take_cache ? "" : "not "); + if (l_take_cache) { EXEC SQL SELECT value INTO @@ -325,26 +432,63 @@ int Param_getStringArray(const Param *my, const char *name, const char *idx, int idx = :sqlidx ORDER BY seq_num; - } else { - EXEC SQL EXECUTE - BEGIN - SELECT - valid, locked + } else { + EXEC SQL SELECT + value INTO - :l_valid, :l_locked + :value FROM - daq.cache_table_valid + daq.param_string WHERE - cache_table = 'param_string_cache' + setup = :sqlsetup + AND + name = :sqlname AND - daq_setup_id IS NULL; + idx = :sqlidx + ORDER BY + seq_num; + } + } else { + EXEC SQL SELECT + valid, locked + INTO + :l_valid, :l_locked + FROM + daq.cache_table_valid + WHERE + cache_table = 'param_string_cache' + AND + daq_setup_id IS NULL + ; + EXEC SQL EXECUTE + BEGIN IF - :l_valid = 0 AND :l_locked = 0 + :l_valid != 1 AND :l_locked = 0 THEN - daq.daq_oper_interface.validate_cache_table ( 'param_string_cache' ); + IF + :l_valid = 0 + THEN + UPDATE + daq.cache_table_valid + SET + valid = -1 + WHERE + cache_table = 'param_string_cache' + ; + COMMIT; + DBMS_JOB.SUBMIT ( + :l_jobid, + 'daq.daq_oper_interface.validate_cache_table ( ''param_string_cache'' );' + ); + END IF; + :l_take_cache := 0; + ELSE + :l_take_cache := 1; END IF; END; END-EXEC; + printf("do %stake cache\n", l_take_cache ? "" : "not "); + if (l_take_cache) { EXEC SQL SELECT value INTO @@ -359,6 +503,22 @@ int Param_getStringArray(const Param *my, const char *name, const char *idx, int idx = :sqlidx ORDER BY seq_num; + } else { + EXEC SQL SELECT + value + INTO + :value + FROM + daq.param_string + WHERE + setup IS NULL + AND + name = :sqlname + AND + idx = :sqlidx + ORDER BY + seq_num; + } } *rows = sqlca.sqlerrd[2]; @@ -379,9 +539,7 @@ int Param_getStringArray(const Param *my, const char *name, const char *idx, int #endif /* PTHREADS */ if (my->setup != NULL) { - EXEC SQL EXECUTE - BEGIN - SELECT + EXEC SQL SELECT valid, locked INTO :l_valid, :l_locked @@ -390,32 +548,71 @@ int Param_getStringArray(const Param *my, const char *name, const char *idx, int WHERE cache_table = 'param_int_cache' AND - daq_setup_id = daq.public_interface.r_daq_setup_id ( :sqlsetup ); - IF - :l_valid = 0 AND :l_locked = 0 - THEN - daq.daq_oper_interface.validate_cache_table ( 'param_int_cache' ); - END IF; - END; - END-EXEC; - EXEC SQL SELECT - value - INTO - :intvalue - FROM - daq.param_int_all_cache - WHERE - setup = :sqlsetup - AND - name = :sqlname - AND - idx = :sqlidx - ORDER BY - seq_num; + daq_setup_id = daq.public_interface.r_daq_setup_id ( :sqlsetup ) + ; + EXEC SQL EXECUTE + BEGIN + IF + :l_valid != 1 AND :l_locked = 0 + THEN + IF + :l_valid = 0 + THEN + UPDATE + daq.cache_table_valid + SET + valid = -1 + WHERE + cache_table = 'param_ing_cache' + AND + daq_setup_id = daq.public_interface.r_daq_setup_id ( :sqlsetup ) + ; + COMMIT; + DBMS_JOB.SUBMIT ( + :l_jobid, + 'daq.daq_oper_interface.validate_cache_table ( ''param_int_cache'', 6 );' + ); + END IF; + :l_take_cache := 0; + ELSE + :l_take_cache := 1; + END IF; + END; + END-EXEC; + printf("do %stake cache\n", l_take_cache ? "" : "not "); + if (l_take_cache) { + EXEC SQL SELECT + value + INTO + :intvalue + FROM + daq.param_int_all_cache + WHERE + setup = :sqlsetup + AND + name = :sqlname + AND + idx = :sqlidx + ORDER BY + seq_num; + } else { + EXEC SQL SELECT + value + INTO + :intvalue + FROM + daq.param_int + WHERE + setup = :sqlsetup + AND + name = :sqlname + AND + idx = :sqlidx + ORDER BY + seq_num; + } } else { - EXEC SQL EXECUTE - BEGIN - SELECT + EXEC SQL SELECT valid, locked INTO :l_valid, :l_locked @@ -424,28 +621,67 @@ int Param_getStringArray(const Param *my, const char *name, const char *idx, int WHERE cache_table = 'param_int_cache' AND - daq_setup_id IS NULL; - IF - :l_valid = 0 AND :l_locked = 0 - THEN - daq.daq_oper_interface.validate_cache_table ( 'param_int_cache' ); - END IF; - END; - END-EXEC; - EXEC SQL SELECT - value - INTO - :intvalue - FROM - daq.param_int_all_cache - WHERE - setup IS NULL - AND - name = :sqlname - AND - idx = :sqlidx - ORDER BY - seq_num; + daq_setup_id IS NULL + ; + EXEC SQL EXECUTE + BEGIN + IF + :l_valid != 1 AND :l_locked = 0 + THEN + IF + :l_valid = 0 + THEN + UPDATE + daq.cache_table_valid + SET + valid = -1 + WHERE + cache_table = 'param_int_cache' + ; + COMMIT; + DBMS_JOB.SUBMIT ( + :l_jobid, + 'daq.daq_oper_interface.validate_cache_table ( ''param_int_cache'' );' + ); + END IF; + :l_take_cache := 0; + ELSE + :l_take_cache := 1; + END IF; + END; + END-EXEC; + printf("do %stake cache\n", l_take_cache ? "" : "not "); + if (l_take_cache) { + EXEC SQL SELECT + value + INTO + :intvalue + FROM + daq.param_int_all_cache + WHERE + setup IS NULL + AND + name = :sqlname + AND + idx = :sqlidx + ORDER BY + seq_num; + } else { + EXEC SQL SELECT + value + INTO + :intvalue + FROM + daq.param_int + WHERE + setup IS NULL + AND + name = :sqlname + AND + idx = :sqlidx + ORDER BY + seq_num; + } } *rows = sqlca.sqlerrd[2];