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