qpid-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "ASF subversion and git services (JIRA)" <j...@apache.org>
Subject [jira] [Commented] (QPID-5767) [C++ broker][linearstore] broker segfaults when recovering journal file with damaged header
Date Mon, 02 Jun 2014 15:40:01 GMT

    [ https://issues.apache.org/jira/browse/QPID-5767?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14015468#comment-14015468
] 

ASF subversion and git services commented on QPID-5767:
-------------------------------------------------------

Commit 1599243 from [~kpvdr] in branch 'qpid/trunk'
[ https://svn.apache.org/r1599243 ]

QPID-5767: [linearstore] broker segfaults when recovering journal file with damaged header

> [C++ broker][linearstore] broker segfaults when recovering journal file with damaged
header
> -------------------------------------------------------------------------------------------
>
>                 Key: QPID-5767
>                 URL: https://issues.apache.org/jira/browse/QPID-5767
>             Project: Qpid
>          Issue Type: Bug
>          Components: C++ Broker
>    Affects Versions: 0.26
>            Reporter: Pavel Moravec
>            Assignee: Pavel Moravec
>            Priority: Minor
>              Labels: easyfix, patch
>             Fix For: 0.29
>
>
> Description of problem:
> If journal file has corrupted header (example below), especially if EFP identity is invalid,
broker segfaults.
> The reason is:
> EmptyFilePool* EmptyFilePoolManager::getEmptyFilePool(const efpPartitionNumber_t partitionNumber,
>                                                       const efpDataSize_kib_t efpDataSize_kib)
{
>     EmptyFilePoolPartition* efppp = getEfpPartition(partitionNumber);
>     if (efppp != 0)
>         return efppp->getEmptyFilePool(efpDataSize_kib);
>     return 0;
> }
> returns null pointer that is taken in:
> void RecoveryManager::analyzeJournals(const std::vector<std::string>* preparedTransactionListPtr,
>                                       EmptyFilePoolManager* emptyFilePoolManager,
>                                       EmptyFilePool** emptyFilePoolPtrPtr) {
>     // Analyze file headers of existing journal files
>     efpIdentity_t efpIdentity;
>     analyzeJournalFileHeaders(efpIdentity);
>     *emptyFilePoolPtrPtr = emptyFilePoolManager->getEmptyFilePool(efpIdentity);
>     efpFileSize_kib_ = (*emptyFilePoolPtrPtr)->fileSize_kib();
> One real world example to get damaged journal (header): disk gets out of free space just
when generating a new journal file, such that the file is created as truncated and contains
just zeroes.
> Version-Release number of selected component (if applicable):
> qpid-cpp 0.22-38
> How reproducible:
> 100%
> Steps to Reproduce:
> 0. Start broker with empty provisioning
> 1. Create a durable queue:
> qpid-config add queue q --durable
> 2. Create an empty "damaged" journal file and set its permissions:
> dd if=/dev/zero of=/var/lib/qpidd/qls/jrnl/q/$(uuidgen).jrnl bs=1024 count=2052
> chown qpidd:qpidd /var/lib/qpidd/qls/jrnl/q/*
> (To have the reproducer really reliable, remove the journal file that linearstore created.
Just to have there only the "damaged" file with 0s.)
> 3. Restart broker
> Actual results:
> Broker segfaults, logging:
> 2014-05-15 12:42:00.421721427 [Store] warning Linear Store: Journal "q": Journal file
/var/lib/qpidd/qls/jrnl/q/d09e7bfb-5efa-4d96-9071-ad1053377d36.jrnl is uninitialized
> 2014-05-15 12:42:00.616301329 [System] debug Exception constructed: Cannot read from
child process.
> 2014-05-15 12:42:00.616558206 [Broker] critical Unexpected error: Cannot read from child
process.
> Expected results:
> Broker raises critical exception (stopping its kick-off) with a message like "Journal
file .. has unknown EFP identity (pn=0,ds=0), please fix it".
> Additional info:



--
This message was sent by Atlassian JIRA
(v6.2#6252)

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@qpid.apache.org
For additional commands, e-mail: dev-help@qpid.apache.org


Mime
View raw message