]> jspc29.x-matter.uni-frankfurt.de Git - daqdata.git/commitdiff
2003-08-28 Benjamin Sailer <Benjamin.Sailer@ph.tum.de>
authorsailer <sailer>
Thu, 28 Aug 2003 12:08:07 +0000 (12:08 +0000)
committersailer <sailer>
Thu, 28 Aug 2003 12:08:07 +0000 (12:08 +0000)
    * Removed threads and dynamic PV allocation again. enlarged MAX_NUM_PV
      (in pas).

    * added asynchronous cache table update (oraParam.pc)

allParam/ChangeLog
allParam/ca/server/paramIntRecord.cc
allParam/ca/server/paramRecordSet.cc
allParam/ca/server/paramRecordSet.h
allParam/ca/server/paramServer.cc
allParam/ca/server/paramStringRecord.cc
allParam/ca/server/record.cc
allParam/ca/server/record.h
allParam/ca/server/storeThread.c [deleted file]
allParam/ca/server/storeThread.h [deleted file]
allParam/ora/oraParam.pc

index bbf535f87a66e3f5912e8f5e3f566fee2ba8be4b..477ee2f615482ee956e5d54a958640fc72648bd4 100644 (file)
@@ -1,3 +1,10 @@
+2003-08-28     Benjamin Sailer <Benjamin.Sailer@ph.tum.de>
+
+       * 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 <Benjamin.Sailer@ph.tum.de>
 
        * Changed pas to fulfill Param_store*() asynchronously, returning
index 6fac611d51ae3b614515bfe9bb9285b230f06054..13aa95090c00c9851c019c684b92ad638341debf 100644 (file)
@@ -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 <config.h>
@@ -8,10 +8,7 @@ static const char rcsId[] = "$Header: /misc/hadesprojects/daq/cvsroot/eventbuild
 extern "C" {
   #include <unistd.h>
 
-  #include <pthread.h>
   #include <string.h>
-
-  #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;
 }
index b815e3000d2f7e59a7dc6859deb927dd9b351882..d0b24db9bc88c82a155098e40f52206a0fa2d3ca 100644 (file)
@@ -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;
 }
 
index f2bcd67e5d0a887e760b95210e934e618d9ac11d..7be01aea6814dc586c9e78505d322e8ff4f1efcb 100644 (file)
@@ -4,34 +4,30 @@
 #include <casdef.h>
 
 extern "C" {
-  #include <allParam.h>
+#include <allParam.h>
 }
-
 #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 */
index 3556079fb89e22158264c3c7d459cf52d5031e2e..1a9c0e7dc1cb29845589d9e9dc582f6b6f6d604f 100644 (file)
@@ -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;
index d5286fc7b5d91f8f32997890146a0ef48bb049ef..b7454ad973ce7b287b5cdaad67714a2470c5062f 100644 (file)
@@ -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 <config.h>
@@ -8,10 +8,7 @@ static const char rcsId[] = "$Header: /misc/hadesprojects/daq/cvsroot/eventbuild
 extern "C" {
   #include <unistd.h>
 
-  #include <pthread.h>
   #include <string.h>
-
-  #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;
 }
index 59a916d1a5fb84fb754a0185c7f054c12eb882c4..4665c43e8ef909560652f30750101e1b96c19586 100644 (file)
@@ -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()
index 49253383d9437d6556684bd1812ec29d78d4e537..b5e5a6b6484135ae1303ba90f3bdc75a48e78fb5 100644 (file)
@@ -3,7 +3,7 @@
 
 #if HAVE_CONFIG_H
 #include <config.h>
-#endif /* HAVE_CONFIG_H */
+#endif                                                 /* HAVE_CONFIG_H */
 
 #include <casdef.h>
 #if EPICS_RELEASE >= 314
 #include <gddAppFuncTable.h>
 
 extern "C" {
-  #include <time.h>
-
-  #include <allParam.h>
+#include <allParam.h>
 }
-
 #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 (file)
index e9ec151..0000000
+++ /dev/null
@@ -1,32 +0,0 @@
-static const char rcsId[] = "$Header:";
-
-#define _POSIX_C_SOURCE 199506L
-
-#include <unistd.h>
-
-#include <stdlib.h>
-
-#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 (file)
index 1d214fb..0000000
+++ /dev/null
@@ -1,24 +0,0 @@
-#ifndef STORETHREAD_H
-#define STORETHREAD_H
-
-#include <allParam.h>
-
-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 */
-
index 612c275793e1c9ce2866bc688b17d571a4bcd2dd..c42dcf56236c2ed0c469704449f8011f0382b40a 100644 (file)
@@ -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];