ODMQueryExecute
Fails to Identify Partial Results
Category: Functionality - Defect Incident ID: X000903 Priority: 6 - Serious Status: Correction Pending Component: ODMA32.dll
2.0.0 andOdma.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
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
valueODM_E_PARTIALSUCCESS
is to be returned.In the implementations of the ODMA 2.0 Connection Managers, versions
ODMA32.dll
2.0.0 andOdma.dll
2.0.0, there is an error such thatODM_E_PARTIALSUCCESS
is never reported. Instead, when there is a partial resultODMQueryExecute
will provide anODM_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.
The following actions are proposed:
- 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]
- 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 ofODM_W_PARTIALSUCCESS
as the preferred naming of theODMSTATUS
value. This can be done as part of Incident X000301. [2000-09-20: Completed]- 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]
- Produce an updated, tested Connection Manager in which the repair is confirmed.
- Announce the Connection Manager revision and have it be available for download.
- Close this incident report when (1-5) are complete and it is clear that proper operation of
ODMQueryExecute
is fully confirmed.
The following steps were taken to confirm the claims made in this incident report:
- The ODMA 2.0 Connection Manager source code for ODMA32.dll 2.0.0 was inspected and the reported defect wasn't found.
- 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.- Analysis of the code around the error point revealed that
client.cpp
functionODMClient::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;
- The
==
should be=
to ever assignODM_E_PARTIALSUCCESS
to the return value.- 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 $