Hi,

I'm experimenting with the qpidd broker supplied with Fedora 10 (qpidd (qpidc) 
version 0.5 - the install should be up to date as of yesterday).
Basically, I'm having a problem where I've been able to enqueue enough messages 
that my journal is full and I can't start the broker because of this.  This is 
contrary to my understanding of how persistent queues were supposed to work, in 
a number of ways:

1) I thought producers were not allowed to commit messages past the 80% full 
point.

2) I thought the flow-to-disk policy would result in excess messages being 
accepted into a slower interim storage, not being rejected or causing the 
broker to crash.

3) It appears as though I was able to crash the broker and cause the apparent 
loss of acked messages simply by sending the broker too many?

...

Here are some details about what I was doing:

I created a queue with the following command:

qpid-config --durable add queue test3 --durable --limit-policy flow-to-disk

This created the following journal files:

[r...@prattrs-fedora test3]# ll
total 12356
-rw-r----- 1 qpidd qpidd 1573376 2009-07-23 17:26 JournalData.0000.jdat
-rw-r----- 1 qpidd qpidd 1573376 2009-07-23 17:27 JournalData.0001.jdat
-rw-r----- 1 qpidd qpidd 1573376 2009-07-23 17:28 JournalData.0002.jdat
-rw-r----- 1 qpidd qpidd 1573376 2009-07-23 17:28 JournalData.0003.jdat
-rw-r----- 1 qpidd qpidd 1573376 2009-07-23 17:28 JournalData.0004.jdat
-rw-r----- 1 qpidd qpidd 1573376 2009-07-23 17:29 JournalData.0005.jdat
-rw-r----- 1 qpidd qpidd 1573376 2009-07-23 17:22 JournalData.0006.jdat
-rw-r----- 1 qpidd qpidd 1573376 2009-07-23 17:22 JournalData.0007.jdat
-rw-r----- 1 qpidd qpidd     866 2009-07-22 14:23 JournalData.jinf
[r...@prattrs-fedora test3]# du -h
13M    .
[r...@prattrs-fedora test3]#

I then did a test where I ran some producers in Java JMS for a while without 
any consumers running:

                                                                                
                                TextMessage msg = 
sendSession.createTextMessage(testContext.getPrefix()
                                                                                
                                                                + 
RandomUtils.randomAlphaNumericString(4085));
                                                                                
                                producer.send(msg, DeliveryMode.PERSISTENT, 
Message.DEFAULT_PRIORITY,
                                                                                
                                                                
Message.DEFAULT_TIME_TO_LIVE);

Unsurprisingly, my journal quickly filled up and the broker showed this in logs:

Jul 23 17:29:32 localhost qpidd[2550]: 2009-07-23 17:29:32 error Failed to 
prepare: Journal full on queue "test3". (JournalImpl.cpp:586)
Jul 23 17:29:32 localhost qpidd[2550]: 2009-07-23 17:29:32 critical Journal 
"test3": Journal full on queue "test3".
Jul 23 17:29:32 localhost qpidd[2550]: 2009-07-23 17:29:32 error Error 
completing xid 
yu\x00\x00\x00\x00\x00\x00\x97\xD6\xA9aP\x18IM\xB6\x91\xFA\xF1\xE6\x18}W: 
Journal full on queue "test3". (JournalImpl.cpp:586)
Jul 23 17:29:32 localhost qpidd[2550]: 2009-07-23 17:29:32 error Commit failed 
with exception: Journal full on queue "test3". (JournalImpl.cpp:586)
Jul 23 17:29:32 localhost qpidd[2550]: 2009-07-23 17:29:32 error Execution 
exception: internal-error: Commit failed (qpid/broker/SemanticState.cpp:123)
Jul 23 17:29:32 localhost qpidd[2550]: 2009-07-23 17:29:32 error Channel 
exception: not-attached: Channel 0 is not attached 
(qpid/amqp_0_10/SessionHandler.cpp:40)
Jul 23 17:29:33 localhost qpidd[2550]: 2009-07-23 17:29:33 critical Journal 
"test3": Journal full on queue "test3".
Jul 23 17:29:33 localhost qpidd[2550]: 2009-07-23 17:29:33 error Unexpected 
exception: Journal full on queue "test3". (JournalImpl.cpp:586)
Jul 23 17:29:33 localhost qpidd[2550]: 2009-07-23 17:29:33 error Connection 
153.32.227.108:57837 closed by error: Journal full on queue "test3". 
(JournalImpl.cpp:586)(501)

I can sort of understand this, although it means flow-to-disk is not 
functioning for my queue, I suppose.  However, it turns out that I can't 
restart the broker either:

Jul 23 17:40:00 localhost qpidd[6303]: 2009-07-23 17:40:00 notice Store module 
initialized; dir=/var/lib/qpidd
Jul 23 17:40:00 localhost qpidd[6303]: 2009-07-23 17:40:00 notice Journal 
"test1": Created
Jul 23 17:40:00 localhost qpidd[6303]: 2009-07-23 17:40:00 notice Journal 
"test2": Created
Jul 23 17:40:00 localhost qpidd[6303]: 2009-07-23 17:40:00 warning Journal 
"test2": Recovery found 12 files (different from --num-jfiles value of 8).
Jul 23 17:40:00 localhost qpidd[6303]: 2009-07-23 17:40:00 warning Journal 
"test2": Recovery found file size = 12 (different from --jfile-size-pgs value 
of 24).
Jul 23 17:40:00 localhost qpidd[6303]: 2009-07-23 17:40:00 notice Journal 
"test3": Created
Jul 23 17:40:01 localhost qpidd[6303]: 2009-07-23 17:40:01 critical Daemon 
startup failed: Queue test3: recoverQueues() failed: jexception 0x0205 
jcntl::recover() threw JERR_JCNTL_RECOVERJFULL: Journal data files full, cannot 
write. (MessageStoreImpl.cpp:785)
Jul 23 17:40:01 localhost qpidd[6302]: 2009-07-23 17:40:01 critical Broker 
start-up failed: Daemon startup failed: Queue test3: recoverQueues() failed: 
jexception 0x0205 jcntl::recover() threw JERR_JCNTL_RECOVERJFULL: Journal data 
files full, cannot write. (MessageStoreImpl.cpp:785)

My client jars are qpid-client-M5.1.jar and qpid-common-M5.1.jar.

Thanks in advance to anyone who can help.   Questions are listed above.

Sandy




Reply via email to