Forum: VoltDB Architecture

Post: MpInitiator threads "send" vs "deliver"

MpInitiator threads "send" vs "deliver"
fathersson
Aug 21, 2014
Hi, I'm looking into the details of how it's organised - I'm very exciting about performance of VoltDb and would like to know some specifics.
I realise that Mailbox is a way to coordinate the cluster, but I don't understand why there are two so similar threads named "MpInitiator deliver" and "MpInitiator send". What's the reason to have two of them, what's their role in the overall architecture? They seem to do the same - provide some message for the others.
aweisberg
Aug 25, 2014
Hi,

The deliver thread was created to resolve an out of order lock acquisition (https://issues.voltdb.com/browse/ENG-4062) issue with the MpInitiator delivering messages to local mailboxes as well as threads delivering to local mailboxes delivering to the MpInitiator. By giving the MpInitiator a dedicated thread to process incoming events we were able to remove all locking around it. At the time sites didn't not have a dedicated thread for their transaction scheduling and threads would lock before doing the scheduling work. Now the thread that does transaction execution also processes all transaction scheduling events.

The send thread was added as part of running multiple RO queries concurrently. See https://github.com/VoltDB/voltdb/commit/6dc098d81443372e46887dfa0cc9896bd1c08fe0 and https://issues.voltdb.com/browse/ENG-4062. I don't know why a thread was helpful for this. Maybe Izzy can shed some light.

Ariel