diff --git a/CEP/CPA/AppAgent/MeqServer/TODO b/CEP/CPA/AppAgent/MeqServer/TODO index 44c9f7d6f3a58fe4518d0d6dfbca36fcc2a89a8b..f8b0819e133f7c6e8756ea4367de57e56370222a 100644 --- a/CEP/CPA/AppAgent/MeqServer/TODO +++ b/CEP/CPA/AppAgent/MeqServer/TODO @@ -1,20 +1,21 @@ MEQ in general: + - Specify child labels in node constructor; check them in init(). + Process named children properly. + 01/01/04: done, need to test w/glish (glish not working on my laptop) + + - Persistent nodes: Save.Forest, Load.Forest, Clear.Cache commands + 01/01/04: done, need to test w/glish (glish not working on my laptop) + + - Clear.Forest command + 04/01/04: done, need to test w/glish (glish not working on my laptop) + * reconsider order or events in execute(): should cache be checked only after node_state and rider have been processed? Note that for repeated requests, this step is skipped, regardless. - - * Specify child labels in node constructor; check them in init(). - Process named children properly. - - * Delete.All.Nodes command - - * Persistent nodes * Implement request ID hierarchy - * Keep thinking about COWs. - + Document the two types of node_state lookups + Document pollChildren() 12/12/03 @@ -39,17 +40,13 @@ MEQ in general: implement simple copy-on-write as the default policy in DMI? 27/11/03: good to go for now. Still thinking about COW. -Result: - - * Check for USE_THREADS when playing with mutexes (or improve the definition - of mutexes for when not using threads) - Spigot: - * Allow string specification for correlations - * In deliver, just stick the result in the cache and let the caching code take care of everything else. + + + Allow string specification for correlations + 09/01/04: no need, now that Spigots output all correlations at once. Parm: @@ -57,15 +54,13 @@ Parm: Request: - - * Figure out why state_test() (meqtest.g) causes Requests to be fail to + * BUG: Figure out why state_test() (meqtest.g) causes Requests to be fail to unpack upon the first invocation. Possibly related to problem below. See details in report 1 below. - * when Jan supplied an illegal request (wrong fields, unmatched IDs), the + * Buglet: when Jan supplied an illegal request (wrong fields, unmatched IDs), the error message was not exactly descriptive - Vells: * Vells(DataArray*) constructor: if rank<2 but nelements==1, reform the @@ -75,19 +70,27 @@ Function: + Allow cases where a Result has 1 plane and another has N planes: treat the single-plane result as a scalar - 12/12/03 + 12/12/03 done General: - * MSOutputSink: output to new column doesn't work, column stays 'dummy' + * Keep thinking about COWs. Perhaps make hooks implicitl-COW? This would + mean declaring an operator [] on CountedRefs? + + * Bug: MSOutputSink: output to new column doesn't work, column stays 'dummy'. + Ask Ger for help, since I'm obviously misusing tables somehow. - * Check how a zero-length string or hiid array from Glish shows up in + * Bug: Check how a zero-length string or hiid array from Glish shows up in AppAgent -- because it looked like a 1-element DataField when processing child specs. - * Ditto for zero-length arrays ('[]'), i.e., uninitialized domain, etc. + * Bug: Ditto for zero-length arrays ('[]'), i.e., uninitialized domain, etc. + + * Check for USE_THREADS when playing with mutexes (or improve the definition + of mutexes when compiling without threads: declare constructors for + Mutex::Lock and all that crap) - * Figure out why the hell it freezes on a single-CPU machine sometimes. A + * Bug: Figure out why the hell it freezes on a single-CPU machine sometimes. A race condition somewhere? NB: a sure way to do it (on zeppelin) seems to enable wait_reply=T in the Resolve.Children calls in meqtest.g. diff --git a/CEP/CPA/AppAgent/MeqServer/src/AID-MeqServer-Registry.cc b/CEP/CPA/AppAgent/MeqServer/src/AID-MeqServer-Registry.cc index c23d428e9a642797e277101600c92c5801ae01a5..4d1098b21f53912404178bd0b3f940f78bc8177c 100644 --- a/CEP/CPA/AppAgent/MeqServer/src/AID-MeqServer-Registry.cc +++ b/CEP/CPA/AppAgent/MeqServer/src/AID-MeqServer-Registry.cc @@ -38,6 +38,7 @@ BlockableObject * __construct_MeqSpigot (int n) { return n>0 ? new Meq::Spigot [ AtomicID::registerId(-1045,"message")+ AtomicID::registerId(-1164,"code")+ AtomicID::registerId(-1372,"execute")+ + AtomicID::registerId(-1386,"addstate")+ AtomicID::registerId(-1126,"station")+ AtomicID::registerId(-1051,"index")+ AtomicID::registerId(-1280,"tile")+ diff --git a/CEP/CPA/AppAgent/MeqServer/src/AID-MeqServer.h b/CEP/CPA/AppAgent/MeqServer/src/AID-MeqServer.h index 722a46ef00ad65997c48b4a0350094fe656e66af..3d306af0958a1dfc4438a39311b813f29362ca7d 100644 --- a/CEP/CPA/AppAgent/MeqServer/src/AID-MeqServer.h +++ b/CEP/CPA/AppAgent/MeqServer/src/AID-MeqServer.h @@ -213,6 +213,11 @@ const int AidTile_int = -1280; const AtomicID AidVisHandlerNode(-1329); // from /home/oms/LOFAR/CEP/CPA/AppAgent/MeqServer/src/VisHandlerNode.h:7 const int AidVisHandlerNode_int = -1329; #endif +#ifndef _defined_id_Aidaddstate +#define _defined_id_Aidaddstate 1 +const AtomicID Aidaddstate(-1386); // from /home/oms/LOFAR/CEP/CPA/AppAgent/MeqServer/src/MeqServer.h:14 +const int Aidaddstate_int = -1386; +#endif #endif diff --git a/CEP/CPA/AppAgent/MeqServer/src/MeqServer.h b/CEP/CPA/AppAgent/MeqServer/src/MeqServer.h index 5f25d0f41a4443917d2013358f63000b09ae3a92..9636e5fd83953a01d3a24f79ac3a3a36853ca165 100644 --- a/CEP/CPA/AppAgent/MeqServer/src/MeqServer.h +++ b/CEP/CPA/AppAgent/MeqServer/src/MeqServer.h @@ -11,6 +11,7 @@ #pragma aid Create Delete Get Set State Request Resolve Child Children List #pragma aid App Command Args Result Data Processing Error Message Code #pragma aid Execute +#pragma aid addstate namespace Meq { diff --git a/CEP/CPA/AppAgent/MeqServer/test/meqtest.g b/CEP/CPA/AppAgent/MeqServer/test/meqtest.g index c9fae03290bf6461bc071bc225502dcbb90fde5c..c7389c2833b9a9befb36729045be252b999d5074 100644 --- a/CEP/CPA/AppAgent/MeqServer/test/meqtest.g +++ b/CEP/CPA/AppAgent/MeqServer/test/meqtest.g @@ -1,4 +1,4 @@ -# use_suspend := T; + use_suspend := T; # use_nostart := T; # use_valgrind := T; # "--skin=helgrind --logfile=hg.meqserver"; @@ -132,9 +132,9 @@ const state_test_init := function () } } # set verbose debugging messages - mqs.setdebug("MeqNode MeqForest MeqSink MeqSpigot",5); - mqs.setdebug("MeqNode MeqForest MeqSink MeqSpigot",5); - mqs.setdebug("MeqServ MeqVisHandler",5); + mqs.setdebug("MeqNode MeqForest MeqSink MeqSpigot",1); + mqs.setdebug("MeqNode MeqForest MeqSink MeqSpigot",1); + mqs.setdebug("MeqServ MeqVisHandler",1); mqs.setdebug("Glish",5); mqs.setdebug("meqserver",1); # initialize meqserver @@ -241,10 +241,10 @@ const solver_test := function () mqs.init([output_col="PREDICT"],wait=T); # create parms and condeq - defval1 := array([1.,2.,1.5,0.2,1.3,0.5],2,3); - defval2 := array([2.,10.,2.,10.,2.,10],2,3); + defval1 := array([3.,0.5,0.5,0.1],2,2); + defval2 := array([2.,10.,2.,10. ],2,2); print mqs.meq('Create.Node',meqparm('parm1',defval1,config_groups='Solvable.Parm')); - print mqs.meq('Create.Node',meqparm('parm2',defval1,config_groups='Solvable.Parm')); + print mqs.meq('Create.Node',meqparm('parm2',defval2,config_groups='Solvable.Parm')); print mqs.meq('Create.Node',meqnode('MeqCondeq','condeq1',children=[a='parm1',b='parm2'])); # create solver global rec;