Messaging: Difference between revisions

From SambaWiki
(adding a link to images' sources)
m (renaming sections)
Line 1: Line 1:
Multiple [[smbd]] processes usually run simultaneously - a main daemon process and couple of connections processes. Samba code has special API that allows different processes send messages each other. There are two implementations of the [[messaging]] code - different in current [[Samba3]] and [[Samba4]] code.
Multiple [[smbd]] processes usually run simultaneously - a main daemon process and couple of connections processes. Samba code has special API that allows different processes send messages each other. There are two implementations of the [[messaging]] code - different in current [[Samba3]] and [[Samba4]] code.


=== Samba 3 implementation ===
=== TDB implementation (samba3 and trunk) ===


This implementaion uses [[TDB]] file for storing messages and UNIX signals for notifying message receiver.
This implementaion uses [[TDB]] file for storing messages and UNIX signals for notifying message receiver.
Line 22: Line 22:
(you can get image source here - [http://fedoseev.net/samba/messaging.svg])
(you can get image source here - [http://fedoseev.net/samba/messaging.svg])


=== Samba 4 implementation ===
=== UNIX datagram sockets implementation (samba4) ===


This implementation uses UNIX domain sockets. Each [[smbd]] listens on a unix domain socket with the name based on its pid. All sockets are located in ''var/locks'' directory. One message is packed into one datagram, so now we have message size problem - there is no way to send messages with size larger than allowed by a datagram.
This implementation uses UNIX domain sockets. Each [[smbd]] listens on a unix domain (datagram) socket with the name based on its pid. All sockets are located in ''var/locks'' directory. One message is packed into one datagram, so now we have message size problem - there is no way to send messages with size larger than allowed by a datagram.


[[Image:messaging-socket.png]]
[[Image:messaging-socket.png]]

Revision as of 12:18, 18 May 2006

Multiple smbd processes usually run simultaneously - a main daemon process and couple of connections processes. Samba code has special API that allows different processes send messages each other. There are two implementations of the messaging code - different in current Samba3 and Samba4 code.

TDB implementation (samba3 and trunk)

This implementaion uses TDB file for storing messages and UNIX signals for notifying message receiver.

All messages are stored in messages.tdb file (one can find it in var/locks directory). Each message is just a database record that has six fields:

  • messaging version (there is only one version now - 1)
  • message type
  • sender process id
  • receiver process id
  • message data length
  • message data

There are lot of message types in Samba3, you can see them all in include/messages.h file.

Process sends a message to other process with special function message_send_pid and to all processes with message_send_all. Each process should call message_dispatch routinely to check if messages were received and run appropriate handler.

Messaging-tdb.png

(you can get image source here - [1])

UNIX datagram sockets implementation (samba4)

This implementation uses UNIX domain sockets. Each smbd listens on a unix domain (datagram) socket with the name based on its pid. All sockets are located in var/locks directory. One message is packed into one datagram, so now we have message size problem - there is no way to send messages with size larger than allowed by a datagram.

Messaging-socket.png

Testing

You can test messaging speed with LOCAL-MESSAGING test from Samba4 smbtorture. Present implementations have almost similar speed.