by default, it will do a sync before every reply to a send, but it tries to
batch up writes for concurrent producers.  The sync reply to a a producer
send blocks pending a sync write batch.

For a sanity just use <kahaDB directory="${activemq.data}/**kahadb" /> and
post your producer.
So you should expect calls to fsync (or whatever fd.sync[1] delegates to on
solaris, fsync I think) more frequently than the default checkpoint
interval (5s).

The line of code on trunk is:
https://github.com/apache/activemq/blob/trunk/activemq-kahadb-store/src/main/java/org/apache/activemq/store/kahadb/disk/journal/DataFileAppender.java#L367


[1] java.io.FileDescriptor#sync

I just ran a sanity on trunk with org.apache.activemq.perf.KahaDBQueueTest
and it is doing the right thing.


On 14 January 2013 18:34, Karel Gardas <karel.gar...@centrum.cz> wrote:

>
> Hello,
>
> I'm experimenting with ActiveMQ persistency layer. I'm using recommended
> KahaDB. My part of configuration file looks:
>
>         <persistenceAdapter>
>             <kahaDB directory="${activemq.data}/**kahadb"
>                     journalMaxFileLength="32mb"
>                     enableJournalDiskSyncs="true"
>                     concurrentStoreAndDispatchTopi**cs="false"
>                     concurrentStoreAndDispatchQueu**es="false"
>             />
>         </persistenceAdapter>
>
>
> now, with this I would expect activemq to fsync kahadb's files on every
> delivered message from the producer to the broker. Am I right? If so, then
> I'm afraid this is not happening as my drive barely lights and yet producer
> is pushing a lot of messages to the broker. As I've been suspecting
> something wrong happens here and as I'm using Solaris on this experiment
> I've attached dtrace to the broker java process and run following script:
>
> dtrace -n 'pid$target:libc:fsync:entry { trace(fds[arg0].fi_pathname); }'
> -p 28406
>
> and indeed, I see dtrace reporting fsync usage on following files every 5
> seconds:
>
>   1  75475                      fsync:entry /export/home/karel/Downloads/*
> *CRISIS/ActiveMQ/apache-**activemq-5.7.0/data/kahadb/db.**redo
>   8  75475                      fsync:entry /export/home/karel/Downloads/*
> *CRISIS/ActiveMQ/apache-**activemq-5.7.0/data/kahadb/db.**data
>   9  75475                      fsync:entry /export/home/karel/Downloads/*
> *CRISIS/ActiveMQ/apache-**activemq-5.7.0/data/kahadb/db-**5.log
>
> so fsync is called every 5 seconds instead of what I would expect every
> delivered message. Please note I'm using persistent delivery mode on my
> producer of course.
>
> My question is: am I right assuming with this configuration above activemq
> should fsync every delivered message? If not, is there any other option how
> to force this behavior?
>
> Thanks a lot!
> Karel
>
>


-- 
http://redhat.com
http://blog.garytully.com

Reply via email to