Uploaded image for project: 'Qpid Proton'
  1. Qpid Proton
  2. PROTON-1344

Provide C "proactor" API for multi-threaded proton applications

    XMLWordPrintableJSON

Details

    • Improvement
    • Status: Closed
    • Major
    • Resolution: Fixed
    • None
    • proton-0.16.0
    • proton-c
    • None

    Description

      This work will pull together work that has been going on with the experimental pn_connection_engine_t and work on a new C multi-threaded libuv C driver. This work has matured to the point of putting together a coherent and complete pn_proactor API to (eventually) replace the pn_reactor.

      The big differences:

      • proactive not reactive: e.g. void proactor_connect() does not return a bound connection, it starts an asynchronous connection process. All results are reported asynchronously as events, not as synchrouns return values.
      • application controls threading: application thread(s) call wait() to block for events. There are no callbacks to application code from unknown threading contexts.
      • enforces threading model to ensure that events from one connection engine are only handled in one thread at a time. The application does not need locks to or tables to manage this.
      • provides simple inter-thread singalling - any thread can "wake" a connection, causing the proactor to return an event in a thread-safe way for application-triggered work.

      The big similarities:

      Same proton protocol engine API is unchanged - the pn_connection_engine will dissappear as a separate entity but it's functions will be folded back into pn_connection and pn_transport.

      Same event model: existing code that processes events is unchanged, instead of registering `void my_handler(pn_event_t *)` with the reactor, the application calls my_handler(pn_driver_wait()) in its own threads. There will be a handful of new proactor-related events.

      Attachments

        Issue Links

          Activity

            People

              aconway Alan Conway
              aconway Alan Conway
              Votes:
              0 Vote for this issue
              Watchers:
              4 Start watching this issue

              Dates

                Created:
                Updated:
                Resolved: