ODMA Incident Report

X000903: ODMQueryExecute Fails to Identify Partial Results

Last updated 2001-03-06-08:09 -0800 (pst)
The latest version of this information is available on the AIIM DMware ODMA site.

Category: Functionality - Defect Incident ID: X000903
Priority: 6 - Serious Status: Correction Pending
Component: ODMA32.dll 2.0.0 and Odma.dll 2.0.0
Repaired in: tbd

Assigned To: tbd Reported By: 
V. J. Mohan (2000-09-18)
Date Opened: 2000-09-19 Date Closed: none

Summary (2000-09-20):

The operation ODMQueryExecute is defined to provide partial results.  When a query against multiple DMS integrations is able to obtain results from only a portion of them, ODMSTATUS value ODM_E_PARTIALSUCCESS is to be returned.

In the implementations of the ODMA 2.0 Connection Managers, versions ODMA32.dll 2.0.0 and Odma.dll 2.0.0, there is an error such that ODM_E_PARTIALSUCCESS is never reported.  Instead, when there is a partial result ODMQueryExecute will provide an ODM_SUCCESS  response instead.

This situation is considered important: the functionality defined for ODMA is not being delivered.  There have been no reported incidents of this as an experienced failure in actual usage of ODMA.  This is attributed to the rarity of ODMA-aware applications that provide use of the ODMA-1.5-introduced query extensions.  Also, partial results masquerading as complete results are easily overlooked -- or attributed to DMS problems.

Actions (2000-09-27):

The following actions are proposed:

  1. Record the existence of of the problem and establish an incident report as notification and as documentation of the repair that is needed.  [2000-09-20: Completed]
  2. In the ODMA 2.0 Specification Errata, identify the improper designation of ODM_E_PARTIALSUCCESS as a failure (E) code rather than a warning (W) code and propose introduction of ODM_W_PARTIALSUCCESS as the preferred naming of the ODMSTATUS value.  This can be done as part of Incident X000301. [2000-09-20: Completed]
  3. Open a project for developing a maintenance and functionality release 2.0.1 of the ODMA 2.0 Connection Managers.  That release will include the remedy for this incident, following more-comprehensive analysis.  This will be project P000902. [2000-09-27: Project Opened]
  4. Produce an updated, tested Connection Manager in which the repair is confirmed.  
  5. Announce the Connection Manager revision and have it be available for download.
  6. Close this incident report when (1-5) are complete and it is clear that proper operation of ODMQueryExecute is fully confirmed.

Investigation (2000-09-19):

The following steps were taken to confirm the claims made in this incident report:

  1. The ODMA 2.0 Connection Manager source code for ODMA32.dll 2.0.0 was inspected and the reported defect wasn't found.
  2. The same source code was installed as a Microsoft VC++ 6.0 Project, after being put under source-code control on a development system.  Recompiling using the original project files produced the error message that was reported by V. J. Mohan.  In step (1), Dennis had looked for just the opposite error (= where == was required).  He also misread the consequences of the defective code when it was first located.  Duhh.
  3. Analysis of the code around the error point revealed that client.cpp function ODMClient::ClientQueryExecute has the sequence

        // Set the error code return value
        if (odm == ODM_SUCCESS)
            if (m_queryDMss.IsEmpty())
              
    // no good results yet
               // ... code for the true case ...
           
    else odm == ODM_E_PARTIALSUCCESS;
  4. The == should be = to ever assign ODM_E_PARTIALSUCCESS to the return value.
  5. There are indications that this entire block of code needs to be carefully reviewed and the failure modes analyzed for accuracy of detection and for precision of return-value derivation.

created 2000-09-20-11:50 -0700 (pdt) by orcmid
$$Author: Orcmid $
$$Date: 01-03-06 8:12 $
$$Revision: 4 $