Bug 472813 - txtest fails when journal is forced into external (flow-to-disk) mode
Summary: txtest fails when journal is forced into external (flow-to-disk) mode
Keywords:
Status: CLOSED ERRATA
Alias: None
Product: Red Hat Enterprise MRG
Classification: Red Hat
Component: qpid-cpp
Version: 1.1
Hardware: All
OS: Linux
high
high
Target Milestone: 1.1
: ---
Assignee: Kim van der Riet
QA Contact: Kim van der Riet
URL:
Whiteboard:
: 472210 (view as bug list)
Depends On:
Blocks:
TreeView+ depends on / blocked
 
Reported: 2008-11-24 19:50 UTC by Kim van der Riet
Modified: 2009-02-04 15:36 UTC (History)
1 user (show)

Fixed In Version:
Doc Type: Bug Fix
Doc Text:
Clone Of:
Environment:
Last Closed: 2009-02-04 15:36:46 UTC
Target Upstream Version:
Embargoed:


Attachments (Terms of Use)


Links
System ID Private Priority Status Summary Last Updated
Red Hat Product Errata RHEA-2009:0035 0 normal SHIPPED_LIVE Red Hat Enterprise MRG Messaging 1.1 Release 2009-02-04 15:33:44 UTC

Description Kim van der Riet 2008-11-24 19:50:42 UTC
If the broker is forced into extern mode (in which all messages, both transient and durable) are stored in BDB rather than the journal itself, then txtest fails because of a broker exception.

Method: start broker using:
./qpidd --load-module /home/kpvdr/mrg/store.ref/cpp/lib/.libs/msgstore.so --data-dir /tmp --auth no --log-enable info+ --num-jfiles 8 --staging-threshold 25

and txtest in another window using:
./txtest --messages-per-tx 100 --tx-count 100000 --total-messages 10000 --size 64 --queues 4

Wait a few minutes (using extern makes the test run *very* slowly), and the broker will fail with an exception (most of the time):
Queue tx-test-1: loadContent() failed: jexception 0x0000 JournalImpl::loadMsgContent() threw <Unknown error code> (read_data_record() was unable to find rid 7376; last rid found was 24735) (MessageStoreImpl.cpp:1261)

Comment 1 Kim van der Riet 2008-11-24 19:55:25 UTC
This seems to occur because txtest causes transactional writes to occur out of rid order, and when the read pipeline attempts to read these records, it jumps over interim records to do so. However, when these out-of-order records are finally read, the read pointer has passed the record and fails with this message (indicating that we are attempting to read an rid lower than the last one we successfully read).

This is a logic error, and the read pipeline needs to be able to handle out-of-order rids.

Comment 2 Kim van der Riet 2008-11-24 19:57:15 UTC
Fixed in r.2874.

QA: The error above should be readily reproducible using the method above when checked against any revision < 2874.

Comment 3 Kim van der Riet 2008-11-24 19:58:28 UTC
*** Bug 472210 has been marked as a duplicate of this bug. ***

Comment 5 Frantisek Reznicek 2008-12-04 12:25:34 UTC
Issue has been fixed. Validated on RHEL 4.7 / 5.2, i386 / x86_64 on packages:
qpidd-0.3.722891-2.el5, rhm-0.3.2913-1.el5 vs. 719671/2804

->VERIFIED

Comment 7 errata-xmlrpc 2009-02-04 15:36:46 UTC
An advisory has been issued which should help the problem
described in this bug report. This report is therefore being
closed with a resolution of ERRATA. For more information
on therefore solution and/or where to find the updated files,
please follow the link below. You may reopen this bug report
if the solution does not work for you.

http://rhn.redhat.com/errata/RHEA-2009-0035.html


Note You need to log in before you can comment on or make changes to this bug.