(file) Return to readme.pulloperations CVS log (file) (dir) Up to [Pegasus] / pegasus

  1 karl  1.2         Using the CIM/XML Pull Operations
  2           
  3           STATUS
  4           
  5           <<< The TODO section is being maintained during the review and checkin process
  6           to keep track of problems, errors, notes, etc.  Must be deleted before
  7           release or reduced to those things that are considered FUTURE and not for
  8           this release. Please feel free to add notes, etc in this
  9           section as you review/test.>>>>>>
 10           
 11           TODO list:
 12              1. Binary operation from OOP.  Need to add counter to binary
 13                 protocol to be able to count objects in response. Generates
 14                 warnings in things like messageserializer and does not work with
 15                 OOP right now.  Fixed by converting to XML. Concluded that we do not
 16                 need to do this. The binary response is not really used often
 17                 in the current environment So double mapping it is not a major issue.
 18                 Leave this as FUTURE
 19              2. DONE OpenExecQuery - Code is incomplete in that it does not include the
 20                 return from the exec query function to the aggregator yet. Code for Pull
 21                 part of OpenQueryInstancesRequest a) should be part of the common
 22 karl  1.2       CIMOperationRequestDispatcher execCommon code. DONE, not tested. 29 May
 23                  30 May tested with simple cli calls.
 24              3. DONE The changes to WQLCIMOperationRequestDispatcher and CQL... for handling
 25                 pull not completed so we feed the responses back to the EnmerationContext
 26                 queues. DONE Not tested 29 May 30 May DONE,  some testing done
 27              4. Minor TODOs, diagnostics, etc. still in the code. Reduced almost to
 28                 none now.  We are leaving some in as PEGASUS_DEBUG
 29              5. Extension to avoid double move of objects in CIMResponseData (one
 30                 into enumerationContext queue and second to new cimResponseData for
 31                 response.  Want to avoid second move by extending Open/Pull response
 32                 messages to include count and CIMResponse data to count objects out
 33                 of queue when converting (avoids the second move). This would mean
 34                 extending the output writers to allow the count field to be supplied
 35                 so they would only create output for up to the count supplied.(Make
 36                 this future beyond bug 9676). This is fairly extensive because it
 37                 extends beyond CIMResponseData to SCMO and XML writers where the
 38                 XmlWriters used by encodeXmlResponse would have to have counters
 39                 added. Then instead of copying on getCache we would simply pass the
 40                 cache and count on and the writer would take and remove.
 41              6. Add more static tests (currently only OpenEnumerateInstances and
 42                 OpenEnumerateInstanceNames covered). 
 43 karl  1.2       Low priority because most of this except exact XML covered in other
 44                 tests. note that we can only add very limited tests since a) no
 45                 way to test multiple operations in sequence(i.e. open/pull) and
 46                 cannot be sure how many responses will come back in all cases even
 47                 for open.  The only reason for most of these tests is to assure that
 48                 we do not change XML inadvertendtly in future with change that is
 49                 compatible to both our server and client but breaks other clients or
 50                 servers. In any case we can do only minimal tests because most real
 51                 testing involves both open and pull and the static tests are by their
 52                 nature single operation.
 53              8. Correct issue between operations and HTTP where we are sending
 54                 trailers with exceptions. Modify response mechanisms so that we
 55                 set non-chunked for all responses where we send error responses to
 56                 avoid the trailers. NOTE: There should be now a bug on this in general
 57                 where we would want to send an initial error without the trailer. Should
 58                 have always done that.
 59              9. It would be more efficient in dispatcher to always use exception for
 60                  rejects and change the _reject functions so that they never return
 61                  when they reject. This is VERY LOW PRIORITY and primarily saves
 62                  a few lines of code in the reject functions and their calls.  Means we
 63                  would code.
 64 karl  1.2        _rejectIfEnumerationToBroad(...);
 65                  _rejectIfThisParameterIncorrect(...);
 66           
 67                  instead of
 68                  if (_rejectIfEnum...)
 69                  {
 70                      return true
 71                  }
 72                  It would mean that the method trace for the handlers would not return
 73                  an exit if we rejected. VERY LOW PRIORITY. Possibly FUTURE. No behavior
 74                  change, just more compact source code but it messes with the method
 75                  trace logic.
 76               10. There are still a couple of template functions around the task of
 77                  distributing requests to the multiple providers.
 78                  In fact there are two similiar but different templates for
 79                  the associators(i.e. assoc, ref, etc.) functions and the parallel
 80                  openAssoc functions.  It would be nice to consolidate that logic and
 81                  further to try to create a non-template form for those functions. LOW
 82                  PRIORITY and not for bug 9676 ACTION: Define in new bug
 83               11. External runtime variables. bug 9676 leaves these variables as
 84                  internal to CIMOperationRequestDispatcher.cpp.  
 85 karl  1.2        See bug 9819 for the changes to externalize these variables, both
 86                  the runtime and buildtime variables.  The Work group discussion
 87                  documents what the variables are and how they tie to statistics info.
 88                  See the OpenPegasus Wiki, Pull operations work group.
 89               12. Trace functions in CIMResponseData,h & cpp should be PEGASUS_DEBUG.
 90                  Same for trace function in EnumerationContext and
 91                  EnumerationContextTable
 92               13.Question. We added trace in CIMRequestOperationDispatcher.cpp if
 93                  query enum is recevied with no object path.  However, since this is
 94                  a provider problem should we be doing something other than a trace
 95                  (ex. log) since traces are often not really used and they do generate
 96                  lots of data whereby something like this could get lost. Also, need
 97                  to review what level of trace if we keep trace.
 98              14. Note that the build-a-class argument on OpenQueryInstances always
 99                  returns error since we do not build the class.  We propose to deprecate
100                  this in DMTF and not implement in in OpenPegasus. TODO add a bug
101                  defining this limitation. This is not a TODO, just a warning for
102                  the future. TODO add bug about this and add to release notes
103              15. Clarify trace of completion of each enumeration sequence.
104              16. Statistics keeping for open, etc. through cimperf.
105           
106 karl  1.2    NEXT TASKS: 
107                 a. finish 8, 12 above. Test against cimperf since there was a bug
108                 in cimperf from before.
109           
110           26 August 2014
111           1. Add flag to pullop to hide warnings when response smaller than requested
112              size. This is because the default operation is to return what exists rather
113              than waiting for a full response to match the MAXOBJECTCNT.  Note that
114              there is a flag in CIMOperationRequestDispatcher that modifies this
115              behavior.
116           2. Modify displays in pullop to display less info during poststarttests.
117           
118           20 August 2014
119           1. Update to greatly reduce the number of KS_TODO comments.  We have reduce
120              the number of these comments to about 50 total of which most are comments
121              to remove diagnostics.
122           2. Internationlize a number of messages in XmlReader, etc. This completes
123              internationalization of messages added for pull operations.
124           3. Added some detailed messages to cimcli to show what is happening in
125              the multiple operations.
126           4. Some efficiency changes (ex. remove String::EMPTY usage)
127 karl  1.2 
128           18 August 2014
129           1. Update to remove some TODOs.
130           2. Mergeout to the task branch.  Note that for some reason there had bee
131              a descrepency in the Pegasus/Server/Tests/TLS last bug fix not getting
132              into the previous mergeout
133               
134           14 August 2014
135           1. Issue with the pullop test in some systems causing an HTTP 413 error (
136           too much data).  We confirmed that this is probably actually a limit in the
137           client with enumerate instances (the response is simply to big in the case
138           where we are asking it to deliver 100,000 responses instances on some systems)
139           Modified the test for the stress test to be 30,000 instances and added a
140           manual test testSizeLimit to the make file to try to deliver up to 600,000
141           instances to determine limits to the environment.
142           
143           Note that this is not actually a failure of the pull operations. In fact
144           where cimcli ei ... fails with 600,000 instances in the response cimcli pei
145           works correctly.
146           
147           Update the Client/tests/pullop/Makefile stresstests to hopefully pass the
148 karl  1.2 nightly test on more systems.
149           
150           2. Eliminated a number of KS_TODOs and code that we had documented out with 
151              //// . Note that there are still a number of the KS_TODOs but most of them
152              are really isolated around 
153           
154           19 August 2014
155           1. Mergeout to head of tree.  We picked up one issue that for some reason
156              the cvs mergeout was missing, a change to Server/tests/TLS...
157           
158           19 August 2014
159           1. Remove a number of KS_TODO notes either by cleaning them up or by
160              change the keyword to FUTURE if they are things that we might consider
161              for the future
162           2. Some efficiency improvements in dealing with strings primarily get
163              rid of use of String::EMPTY in the new code.
164           
165           3. Removed some diagnostic trace output that was used during development.
166           
167           13 August 2014
168           1. Mergeout to head of tree.
169 karl  1.2 
170           11. August 2014
171           1. Correct error in compile in windows (bad reference to sleep(...)
172           
173           29 July 2014
174           1. Cleanup functionality in the unittests for EnumerationContext and
175              its table.
176           
177           23 July 2014
178           1. Mergeout from head of tree to Task branch
179           
180           21 July 2014
181           1. Removed strings.h from pullop.cpp
182           2. Minor cleanup per testing
183           
184           17 July 2014
185           1. Correct error in CIMOperationRequestDispatcher.cpp OpenQueryInstances
186              when PEGASUS_DISABLE_QUERY set.
187           2. Correct issue in diagnostic code in CIMResponseData.cpp that used 
188              snprintf function not available in windows.
189           3. Clean up some miscellaneous code in pullop and Makefile.
190 karl  1.2 4. Minor change to PullErrosrs.
191           
192           2 July 2014
193           1. Corrected error in the new getoopt functions that caused it to fail
194              in build and also in it unit test with the --help option.
195           
196           28 June 2014
197           1. Corrected issue where ZOs was getting errors from pullop because we
198              used getopt to parse command line and the linux getopt is not behavior
199              consistent with ZOs.  Note that the ZOs getopt matches the posix expect and
200              the linux one has extensions (notably it permutes non option arguments to
201              the end of the arguments array.  The easiest and most logical was to move
202              the whole parser to use the internal getoopt which is what we should be
203              using all the time in any case.
204           18 June 2014
205           1. Correct errors in pullop and CMIMessage.cpp identified by Ji Lee as comments 58,59
206           2. Correct error in Makefile identified by Ji Lee as bug comment 60
207           
208           14 June 2014
209           1. Mergeout from head of tree.
210           
211 karl  1.2 12 June 2014
212           1. Implement the basic code for the CIMOperationDispatcher portion of bug 9819
213              Note that the CIMConfig calls are disabled with comments.
214           2. Corrected a number of differences in const declaration and definition for
215              continueOnError and maxObjectCount in CIMClient. This corrects issue
216              documented in bug 9676 comment 53
217           3. Corrected some documentation for Pull operations in CIMClient.
218           4. Corrected similar issue In EnumerationContext class. See comment 54
219           5. Removed ExecInfo.h header from Client/tests/PullErrors/PullErrors.cpp
220           
221           30 May 2014
222           1. Correct issue in UintArgs.  Modified to use smart pointers, consistent
223              with public interfaces. Tested
224           2. Complete code for OpenQueryInstances and PullInstances so that the complete
225              sequence works for both the server and client (i.e. 2, 3 above done
226              except for more tests in pullop).
227           3. Fix issue in cimcli where the OpenQueryInstances was outputting a path
228              component where there is no path transmitted from the server.
229           4. Moved large block of common code in CQLOperationRequestDispatcher.cpp
230              and WQLOperationRequestDispatcher.cpp to common function
231              handleQueryRequestCommon in CIMOperationRequestDispatcher.cpp. These
232 karl  1.2    handlers now reduced to just the parser processing and minimal error
233              checks.
234           5. Cleaned up some code in EnumerationContextTable.CreateContext so only
235              single interface for all requests.
236           6, Commented out a number of PEG_TRACE messages.  Note that they are
237              commented with 4 /s at line beginning to be easily identified.
238              //// code
239              There are still a number of KS_TODOs but they are mostly some questsions,
240              some internationalization (note that almost none of this environment is
241              completely internationlaized (see the decoders)) and a couple of questions
242              about the existing code or exactly what message should be sent.  I argue
243              that the current TODOs should not stop checkin. Will remove after we
244              have tested couple of days and prove that there is no real need.
245           7. Added trace in Query response code if there is no objectPath since that
246              is really an error in the provider
247           
248           
249           29 May 2014
250           1. Correct issue in cimcli that was causing rejects of open operations when
251              there were no filters requested. The standard default is WQL in cimcli
252              so we overrode this for the pull operations.
253 karl  1.2 2. Clean up OpenQueryInstances in CIMMessage.h and CIMMessage.cpp.
254           3. Modify CIMOperationRequestDispatcher and
255              EnumerationContextTable.CreateContext to pass request rather than request
256              parameters.
257           4. Remove a number of diagnostic messages.  Note that there are still some.
258              They are marked KS_TODO with with note to remove before checkin. They are
259              all traces and validations.
260           5. Correct error in inclusion of execinfo.h include in CIMOperationRequestDis.
261              found by Ji Lee.
262           6. Cleaned up execQuery and extended it for OpenQueryInstances.  ExecQuery
263              tested but have not tested OpenQueryInstances yet. One more checkin and we
264              should be able to close 2,3 above (OpenQueryInstances).
265           
266           26 May 2014
267           1. Remove a number of diagnostics.
268           2. Make cache size in EnumerationContextTable dynamic and remove function
269              to set default values. MaximumEnums set from Dispatcher on constructor for
270              EnumerationContextTable and table size set to 1/2 of maximum number of
271              open contexts.
272           3. Clean up some statistics in EnumerationContextTable
273           4. Correct error in query and queryLanguage parameters in cimcli in that
274 karl  1.2    the default for queryLanguage is WQL but must be "" for pull operations.
275              If WQL found they set it to "".
276           
277           
278           9 May 2104
279           1. Converted several  template functions in CIMOperationRequestDispatcher
280              to real functions
281           2. Added intermediate CIMMessage for CIMPullOperationRequestMessage since
282              all of the pulls have exactly the same data. This allowed us to
283              convert the template function processPullRequest from template to
284              real function
285           3. Added intermediate CIMMessage for CIMOpenOperationRequestMessage betweeh\n
286              all of the Opens and the  CIMRequestData message.  This will allow
287              common code to test all of these variables in all 6
288              CIMOperationRequestDispatcher handleOpen... functions
289           3. Added variable in  CIMOperationRequestDispatcher handleEnqueue to make
290              releasing the original request conditional on return from the handle... 
291              for open... and pull... handlers.
292              This allowed us to drop one place where we were creating a new request msg
293              for the delayed response and use the original request.  This meant that
294              we could convert the issueOpenOrPullResponse from template function to
295 karl  1.2    real function.
296           4. Moved open and pull constructors in CIMMessage.h to CIMMessage.cpp. NOTE:
297              openQueryInstances not moved.  Will do when we get this funciton running.
298           5. Added test for correct namespace in pull operations.  Note that it is
299              never really used but since supplied with request, we test to be sure it is
300              same as open request namespace.  added internationalized exception for this.
301           6. We should probably add same test to close just as an input parameter
302              validation.  
303           6. Modified processPullRequest to close the enumeration context if
304              incorrect response type received.  Before we just returned exception and
305              left context open for next request.  Closing is much more logical since the
306              client really did send an erronous request.
307           7. Modified PullErrors to correctly test above changed in behavior.
308           8. Removed a significant number of diagnostic messages.
309           9. Added query and querylanguage parameters to cimcli.
310           
311           
312           4 May 2014
313           1. Clean interface with EnumerationContext timeout thread
314           2. Remove more diagnostics
315           3. Correct issue with enumerationContext Release that was causing
316 karl  1.2    failures during nightly tests.
317           
318           2 May 2014
319           1. Remove Diagnostics from ResponseData.cpp
320           2. Correct setup and start of EnumerationContextTimerThread
321           3. Change limit on max number of enum contexts to be set from Dispatcher.
322           4. Increase size of hashtable for enum contexts.
323           5. Corrected issue causing failures in removeContext. Now runs through nightly
324              tests most of the time.
325           1 May 2014
326           1. Cleanup of code and variable names.
327           2. Removed namespace variable from EnumerationContext.  It was never used.
328           3. Added test for max number of open enumerations.  Right now it is fixed
329              and set about 100. Note that this is tied to the size of hash table
330              so that there is a issue with more dynamic setting of max and the
331              hash table size.
332           4. Removed several unused functions.
333           5. Found one possible issue causing thread conflict but not the core one
334              yet.  
335           
336           30 April
337 karl  1.2 1. Added exception response to dispatcher for Limits exceeded on
338              CreateEnumerationContext. Returns Exceeded server limits CIMException.
339           2. Fixed possible deadlock where we were not unlocking EnumerationContext
340              under error condition
341           
342           
343           27 April - mergeout to head of tree
344           1. Mergeout of the code to the head of tree. Documented that mergeout in
345              the bug
346           
347           27 April 2014
348           1. Clean up in a number of areas, mostly just code without changing
349              functionality.
350           2. Modified CIMMessage.h slightly to clarify names of the pull intermediate
351              messages (the common open and pull response);
352           3. Removed a number of diagnostics from CIMResponseData
353           4. Added new function to ResponseStressTestProvider to be able to terminate
354              output after a defined number of objects with a CIMException.
355           5. Removed a number of other TODOs
356           6. Corrected a couple of errors in the server message bundle.
357           7. Modified ResponseEncoder to only output the error for pull errors.
358 karl  1.2    It was errounously outputting the EndOfSequence, EnumerationContext and
359              the error.  This way, only the error is sent which is spec.
360           8. Removed number of TODOs and cleaned up a couple of others.
361           9. Added static tests for OpenEnumerateInstanceNames.
362           10. Modified a number of the temporary diagnostics to be permanent by
363               changing them to PEGASUS_DEBUG_ASSERTs
364           
365           22 April 2014
366           1. Clean up some messages.
367           2. Still trying to find issue that randomly keeps messages in timeout
368              queue long after they have been closed and returned.
369           3. Fixed memory loss error.
370           4. Added zero reject for OperationTimeout because that effectively disables
371              the whole timeout mechanism so that enumerations could be started, never
372              completed by the client and would just hang around in memory. That
373              would be a significant DDOS attack (start very large enum with no
374              timeout) and never do pulls after open.
375           
376           21 April 2014
377           1. Reorganized code in CIMOperationRequestDecoder.cpp ...Iparam classes.
378              Cleaned up the rejectCIMException code.
379 karl  1.2 2. Cleanup some issues in the EnumerationContextTimeout Thread.
380           3. Fixed issue in pullop where it was using zero as default for default
381              operation timeout where it should have been NULL, the DMTF specified
382              default.
383           4. Enabled the test to reject 0 as operation timeout on a request and but
384              controled by a #define in CIMOperationRequestDispatcher.cpp
385           5. Added test for excessive new OperationContext entries in table.
386           
387           18 April 2014
388           1. Internationalize remaining messages in CIMOperationRequestDecoder.cpp and
389              clean up the decoders for some of the messages so they use the
390              ...Iparam classes.  Note that we did not clean up all of the old message
391              decoders, just the new ones and we did not clean up the Count message
392              since it is deprecated. TODO clean these up so the decoder is really
393              consistent.
394           2. Enabled the EnumerationContext Timer and removed code for alternate
395              non-thread solution.
396           
397           17 April 2014
398           1. Reorganized the lock/unlock for handling the EnumerationContext because
399              there were thread windows (i.e. using the context after it was released
400 karl  1.2    by other thread).
401           2. Modified code for the InteroperationTimerThread and deleted old code that
402              allowed this whole thread to by bypassed.
403           3. Internationalized a number of CIMOperationRequestDispatcher CIMException
404              response messages.
405           4. Fixed stress tests in Client/tests/pullop that were getting timeout. The
406              issue was not the pull code but that fact that the idle client timeout
407              appears to be measureing to the end of the operation and the operation
408              was taking more than 40 seconds which is the default timeout. The idle
409              timeout takes no account of the fact that chunks are being regularly
410              delivered.
411           5. Several minor code changes.
412           NOTE: At this point the code passes extensive tests of the pull operations
413              both in OOP and none OOP mode (but with lots of diagnostics that may
414              be affecting timing).
415           
416           10 April 2014
417           1. Fix issues causing failure with repeated pull operations.
418           2. Consolidate some of the CIMOperationRequestDispatcher.cpp template code
419           
420           7 April 2104
421 karl  1.2   MergeOut of head of tree.
422           
423           7 April 2014
424           1. Permanently fixed issue with getting correct number of objects on response.
425              This was introduced when did a temp fix to the OOP processing, in particular
426              removed the condition variable wait in the CIMOperationDispatcher handle
427              functions for opens and pulls.  This moved the functionality to kick off
428              open and pull responses to the provider threads if there are not enough
429              objects when the handle is processed. Also added a variable to allow us to
430              test with either a) responses are required to satisfy the original 
431              request size or) b, responses are required only to return some objects.
432              We will add statistics to see which of these works best.
433           2. Modified WsmProcessor EnumerationContext class since the name conflicts
434              with the pull Operation EnumerationContext class.
435           3. Created a new intermediate level of CIMMessage, the CIMPullResponseData
436              Message so that all of the open and Pull responses can use common code
437              since there are only two variables (endOfSequence and EnumerationContext)
438              and they are common across all the open and pull responses.
439           4. Removed a number of diagnostics.
440           5. Cleaned up the Dispcatcher so that the open and pulls have common response
441              code and that code can be used from the dispatcher handle functions and
442 karl  1.2    the provider response functions.
443           
444           31 March 2014 - Checkin
445           1. Fixed issues in OOP processing of pull operations, in particular
446              issues with cimxml output format when processed through the
447              *InternalXmlEncoder functions.
448           2. Clean up some of the internalXml functionality
449           3. Found issues causing timeout with a particular provider.  The issue
450              is that the dispatcher and monitor end up using the same thread so the
451              condition variable in the dispatcher thread stops the monitor. Turned
452              off the conditionVariable in getCache for the moment which means that
453              we get number of responses for open... with 0 objects before the
454              providers can begin to respond.  This is only for test.
455           4. Added some statistics for enumerations and display the statistics 
456              when we close the server (same as cache statistics)
457           
458           12 March 2014 - Mergeout and Mergein
459           1. Mergeout to head of tree for this date and mergein for patch update
460              to bug 9676
461           2. Extensions to pullop tests program and tests.
462           3. Added some diagnostics in looking for OOP issue.
463 karl  1.2 4. Removed a number of diagnostics messages and cleaned up code in
464              dispatcher to simplify pull operation processing.
465           
466           15 December 2013
467           1. Mergeout and mergein up to 15 December 2013
468           2. Clean up issues from tests documented in bug 9676 last week.
469           3. Clean up some code in dispatcher
470           4. Remove the filter function from ResponseStressc++Provider.
471           
472           21 November 2013
473           1. Mergeout from head of tree to 21 November 2013.
474           
475           18 November 2013
476           1. Cleanup of a bunch of minor errors and completion of all of the code for
477              the openQueryInstances except for the PullInstances in Dispatcher and
478              the aggregator function.
479           2. OpenqueryInstances added to cimcli.
480           
481           13 October 2013 CVS branch update.
482           1. Integrated bug 9786 into the branch.  Note that we need to test the
483              generated statistics.
484 karl  1.2 2. Mergeout executed to update to head of tree as of 8:00 am 13 October 2013.
485           3. Cleaned up several errors in OOP processing.  Note that there is at least
486              one issue left when we to a pull on ManagedElement in at least one of the
487              namespaces.
488           4. Cleaned up some of the outstanding diagnostic code
489           5. Generally passes all tests except for one test of pullop where it is trying
490              to pull enum instances CIM_ManagedElement from a particular namespace.
491           
492           NOTE: I did not make comments here for changes in October despite the fact
493           that I did 2 mergouts, number of fixes, and a mergein.
494           
495           30 September 2013 - CVS Update
496           Mergeout head of tree up to 29 September 2013.
497           
498           29 September 2013. CVS update.
499           1. Modified calls to statisticalData.cpp to a) directly call with request
500              type, b) incorporate the open, pull, etc. messages.  However, since these
501              are not part of the CIM class, we must do something special with them.
502              See bug 9785 for full solution to this issue.
503           2. Corrected OOP interface to enable new flag to indicate internal operations
504              and set host, etc.
505 karl  1.2 3. Add code to CQLOperationsDispatcher and WQLOperationDispatcher to clean
506              up CIMResponseDataCounter after filtering.
507           4. Modified ProviderAgent to set Host info for some pull operations.
508           5. Added new flag to CIMBinMsgSerializer and Deserializer.
509           
510           17 September 2013 CVS update (Actually two different updates over 3 days)
511           1. Clean up some issues in CIMMessage.h and CIMMessage.cpp
512           2. Extend OpenExecQuery to WQL and CQL processors but return not complete
513           3. Remove memory leak in EnumerationContext and EnumerationContextTable
514              handling.
515           4. Created template functions for much of the pull operations.
516           5. Reversed order of queryLanguage and query (and changed names to match
517              execQuery) in client and server.  Note that these are the execQuery
518              WQL and CQL filters and NOT FQL filters.
519           6. Some code cleanup in dispatcher
520           7. Today, passes all tests in pullop but issue in alltests. For some reason
521              not finding CIMObjectManager instance. Also, leaves enumeration contexts
522              if client terminates since cleanup thread not operating.
523           8. XML from OOP not correctly processed.
524           
525           14 September 2013 CVS update
526 karl  1.2 Merged out up to 25 August.  Cleaned up all operations and standardized code.
527           At this point the non pull operations code is in a set of templates but the
528           pull is not yet.
529           Fixed a significant number of problems so that it appears that the operations
530           except for OpenExecQuery run stably, at least with the pullop test program.
531           Note that there is a problem in that the Interop control provider is not
532           returning its singleton wbemserver object for some reason.  Causes a test
533           failure
534           
535           Fixed for 16 June CVS Update
536              1. Cleaned up the enumerationContext and Table release functions and tested
537                 to confirm that we do not lose memory in either normal sequences or
538                 sequences that close early. Cleaned up pullop and added more tests
539           Taged Before: PREAUG25UPDATE and after POSTAUG25UPDATE
540           
541           Fixed for 9 June CVS update
542              1. Cleaned up code for OpenQueryInstances.  Note that this is incomplete.
543                 No support in WQL or CQL Operations
544              2. 
545           
546           What was fixed for 5 June checkin.
547 karl  1.2    1. Extended ResponseTest MOF for for both CMPI and C++ subclasses
548              2. Fixed issues with pullop.
549              3. Fixed temp issue with CIMResponseData size by putting in mutex. That
550                 is not a permanent fix but it gets around issue probably in the control
551                 of the move logic that meant counts were off.
552              4. Fixed issues in Dispatcher so that associator code works. Still messy
553                 code in the dispatcher.
554              5. Changed name of Enumerationtable.h & cpp to EnumerationContextTable.*
555              6  Changed name of ResponseStressTest module, classes, etc.
556           
557           TAG: TASK_PEP317_5JUNE_2013_2
558           
559           2 June 2013
560           
561           Issues  - KS
562           
563            - Still way to many TODO and KS comments and KS_TEMPS.  Removing bit by bit.
564           
565            - Runtime variable connection for the config parameters not installed. That
566              has been made into a separate bug (see bug 9819)
567           
568 karl  1.2 5. Issue with the threaded timer.  For some reason during tests it
569           eventually calls the timer thread with trash for the parm (which is
570           pointer to the EnumerationTable object). Caught because we do a valid
571           test at beginning of the function.
572           
573           6. Still using the templates in CIMOperationRequestDispatcher to simplify
574           the handle... processing.  
575           
576           7. I think I have a way around the double move of objects in the
577           EnumerationContext so that the outputter will just take a defined number
578           of objects directly from the gathering cache and save the second move.
579           
580           8. Not yet passing all tests but getting closer now. The major test that is
581           causing an error today is the execution of a full enumeration with the
582           forceProviders = true.  This causes a client timeout sometimes.
583           
584           
585           
586           ===========================================
587           
588           OVERVIEW:
589 karl  1.2 
590           The operation extensions for pull operations defined in the DMTF specification
591           DSP0200 V 1.4 were implemented in Pegasus effective Pegasus version 2.11
592           including Client and Server.
593           
594           These operations extend the CIM/XML  individual operations to operation
595           sequences where the server must maintain state between operations in a
596           sequence and the client must execute multiple operations to get the full
597           set of instances or instance paths.
598           
599           The following new CIM/XML operations as defined in DSP0200 are included;
600           
601               -OpenEnumerateInstances
602               -openEnumerateInstancePaths
603               -OpenReferenceInstances
604               -OpenReferenceInstancePaths
605               -OpenAssociatiorInstances
606               -OpenAssociatorInstancePaths
607               -OpenQueryInstances
608               -PullInstancesWithPath
609               -PullInstancePaths
610 karl  1.2     -PullInstances
611               -CloseEnumeration
612               -EnumerationCount
613                OpenExecQuery
614           
615           The following  operations have not been implemented in this version of Pegasus:
616           
617               -OpenQueryInstances
618           
619           The following limitations on the implementation exist;
620           
621           1. The filterQueryLanguage and filterQuery parameters are processed by
622              the Pegasus client but the server returns error if there is any data in
623              either parameter. This work does not include the development of the
624              query language.  Note that a separate effort to extend Pegasus to use
625              the DMTF FQL query language is in process.
626           
627           2. The input parameter continueOnError is processed correctly by the client
628              but the Pegasus server only provides for false since the server does not
629              include logic to continue processing responses after an error is
630              encountered. 
631 karl  1.2    This is consistent with the statement in the specification that use of 
632              this functionality is optional and the fact that the DMTF agrees that all 
633              of the issues of continuing after errors have not been clarified.  
634           
635           3. The operation enumerationCount is not processed by the server today since
636              a) really getting the count would be the same cost as the corresponding
637              enumeration, b) the server does not include a history or estimating
638              mechanism for this to date.
639              NOTE: After a through review as part of the development of the next version
640              of CMPI we have concluded that this operation is probably not worth the
641              effort.  Since it is optional, Pegasus will only return the unknown status
642              at this point
643           
644           Since the concept of sequences of operations linked together (open, pull, close)
645           is a major extension to the original CIM/XML operation concept of completely
646           independent operations several new pieces of functionality are implemented
647           to control interOperationTimeouts, counts of objects to be returned, etc.
648           
649           TBD - Review this
650           
651           CLIENT
652 karl  1.2 
653           The new operations follow the same pattern as the APIs for existing operations
654           in that:
655           
656           1. All errors are handled as CIMException and Exception
657           
658           2. The means of inputting parameters are the same except that there are
659              significantly more input parameters with the open operations and for the 
660              first time operations return parameters as well as objects in the 
661              response.  Specifically the open and pull operations return values for 
662              enumerationContext which is the identity for a pull sequence and 
663              endOfSequence which is the marker the server sends in open and pull 
664              responses when it has no more objects to send.
665           
666           The significant differences include:
667           
668           1. Processing of parameters on responses (i.e. the endOfSequence and
669              enumerationContext parameters are returned for open and pull operations).
670           
671           2. Numeric arguments (Uint32 and Uint64 include the option of NULL in some
672              cases so they are packaged inside classes Uint32Arg and Uint64Arg in the
673 karl  1.2    client api.
674           
675           3. The association and reference operations ONLY process instances.  They do
676              not include the capability to return classes like reference and associator
677              do and therefore return CIMInstance rather than CIMObject.
678           
679           4. Paths are returned in all cases (i.e OpenEnumerateInstances and
680              PullInstancesWithPath where they were not with EnumeratInstances.
681           
682           5. The client must maintain state between operations in a sequence (using
683              the enumerationContext parameter).
684           
685           TBD- Are there more differences.
686           
687           
688           SERVER
689           
690           The Pegasus server attempts to always deliver the requested number of objects
691           for any open or pull request (the specification allows for the server to
692           deliver less than the requested number of objects and specifically to return
693           zero objects on open).  We felt that it was worth any extra cost in processing
694 karl  1.2 to provide the client with exactly what it had requested.
695           
696           The pegasus server always closes an enumeration sequence upon receipt of any
697           error from the providers, repository, etc. Therefore the server will reject
698           any request that has continueOnError = true;
699           
700           Expansion to allow the continue on error may be added in a future version.
701           In any case, the whole purpose of the continue on error is really to allow
702           input from good providers to be mixed with providers that return errors so
703           that generally this would mean simply changing the logic in the return mechanism 
704           to not shutdown when an error is received from any given provider.
705           
706           Generally we do not believe that the providers need to do much more in the
707           future to support the continueOnError other than possibly allowing the provider
708           to continue processing after it has received an error.
709           
710           PROVIDERS
711           
712           This implementation requires NO changes to the existing providers.  The
713           provider APIs operate just as they do with the original operations.
714           
715 karl  1.2 Because the server processing is different however, there may be some
716           behavior differences primarily because the client now controls the speed of
717           delivery of objects.
718           
719           In previous versions of Pegasus, the server attempts to deliver objects as
720           rapidly as then can be put on the network.  In the case of HTTP chunked requests
721           they are delivered in chunks of about 100 objects. The primary delay for the
722           providers was the processing of each segment through the server.  The server
723           is blocked so that no other segment can proceed through the server until that
724           segment is processed and sent on the network.
725           In the case of non-chunkedresponses, they are completely gathered in the serve
726           and then delivered as one non-chunked response. There were no delays for the
727           providers, just lots of possible memory use in the server.
728           
729           The responses from providers (delivered through the deliver(...) interface are
730           gathered into segments of about 100 objects and this group of objects is moved
731           through the server to be delivered to the client.
732           
733           However with the inclusion of the pull operations,   The segments of objects
734           from the providers are cached in the server response path until the 
735           maxObjectCount for that request (open or pull) and that number returned in a
736 karl  1.2 non-chunked response. Thus, if the client is slow to issue pull requests,
737           the providers might be delayed at some point to reduce memory usage in the
738           server (the delay appears as slow response tothe deliver operation).
739           
740           In other words, the time to process large sets of responses from the provider
741           now depends on the speed of handling the client.
742           
743           It is important to remember in developing providers that the Pegasus server
744           can most efficiently process responses if they are passed from the provider
745           to the server individually or in small arrays of objects rather than the
746           provider gathering very large arrays of objects and sending them to the
747           server.
748           
749           NEXT GENERATION PROVIDERS
750           KS_TODO
751           
752           CONFIGURATION PARAMETERS
753           
754           The server includes several configuration parameters to set limits on the
755           processing of pull operations.  All of these configuration parameters are
756           compile time parameters rather than runtime.
757 karl  1.2 
758           1. Maximum value of minimum interoperation time.  This parameter defines the
759           maximum time allowed between the return of an open or pull response and 
760           the receipt of the next pull or a close operation before the server may 
761           close the enumeration.  The specification allows the server to set a 
762           maximum interoperation time and refuse open requests that with requested 
763           operationTimeout greater than that time.  
764           CIM_ERR_INVALID_OPERATION_TIMEOUT
765           
766           This value is set with the Pegasus environment variable
767           PEGASUS_PULL....
768           
769           2. Maximum objects returned in a single open or pull operation.  The server
770           can set a maximum limit on the number of objects that can be returned in
771           a single open or pull oepration with the maxObjectCount parameter.
772           
773           3. Whether the server allows 0 as an interoperation timeout value. The value
774           zero is s special value for the interoperationTimeout in that it tells the
775           server to not timeout any enumeration sequence.
776           
777           With this value for interoperationTimeout, the only way to close an 
778 karl  1.2 enumeration sequence is to complete all of the pulls or issue the close.  
779           If for some reason the sequence is not completed, that enumeration context 
780           would remain open indefinitly.  Since in Pegasus any open enumeration 
781           context uses resources (the context object and any provider resposnes that 
782           have not yet been issued in a response) it would appear that most 
783           platforms would not want to allow the existence of enumeration contexts 
784           that cannot be closed by the server.  
785           
786           4, maximum consecutive pull requests with 0 maxObjectCount.  The use of the
787           pull operation with maxObjectCount set to zero could be used to keep an
788           enumeration context open indefinitly (this tells the server to restart the
789           interoperationTimeout but not send any objects in the response). Therefore the
790           specification allows for the server setting maximum limits on this behavior
791           and returning the error CIM_ERR_SERVER_LIMITS_EXCEEDED if this limit is
792           exceeded.
793           Note that this is maximum CONSECUTIVE pulls so that issuing a pull with
794           a non-zero count resets this counter.
795           
796           KS-TBD - Is this really logical since we can still block by just issuing
797           lots of zero request and an occansional request for one object.
798           
799 karl  1.2 Pegaus sets the value of this limit to 1000 and allows the implementer to
800           modify it with the PEGASUS_MAXIMUM_ZERO_OBJECTCOUNT environment variable.
801           
802           5. Default operationTimeout - 
803           
804           The default of this parameter is to refuse operat
805           
806           In the current release of Pegasus these are all compile time parameters.
807           
808           
809           NOTES On working with task branch.
810           
811           Merge out Process
812           
813              To keep our TASK branch in sync with the current head of tree we need
814              to do a regular merge out.  the TaskMakefile contains the makefile
815              procedures to do this efficiently.  NOTE: Following these procedures is
816              important in that you are merging out new material each time you do
817              the merge out.  If you were just to repeatedly merge out, you would be
818              merging previously merged changes a second time causing a real mess.
819           
820 karl  1.2     Start with new directory and put TaskMakefile above pegasus (needed so you
821               have this file for the initial operations.  
822           
823                 make -f TaskMakefile branch_merge_out BNAME=PEP317-pullop  ## takes a long time
824           
825              This checks out current head, merges it into task branch and sets tags
826              for the mergeout.  Note that at the end of this step this work is
827              part of the TASK... branch.
828           
829              NOW check for conflicts, errors, etc. that resulted from the merge.
830              Look for conflict flags, compare the results (I use linux merge as a
831              good graphic compare tool) and build and test. When you are satisfied
832              that the merge out is clean, you can commit the results to the TASK...
833              branch
834              
835              To commit the work to  this into Task branch
836           
837                 make -f mak/TaskMakefile branch_merge_out_commit BNAME=PEP317-pullop
838           
839             or manually commit and finish as follows
840           
841 karl  1.2     cvs commit
842               make -f mak/TaskMakefile  branch_merge_out_finish BNAME=PEP317-pullop
843           
844           ## This last step is important since it cleans up temporary tags to prepare
845              you for the next checkout
846              
847           COMPARE TASKBRANCH WITH HEAD
848           
849               In a new pegasus work space do same as above for merge out.
850           
851               make -f TaskMakefile BNAME=PEP317-pullop
852           
853               This produces a result which is all of the head merged into the branch.
854               A diff of this is all the new changes to the head of tree that you will
855               include into the merge.
856           

No CVS admin address has been configured
Powered by
ViewCVS 0.9.2