Uploaded image for project: 'JGroups'
  1. JGroups
  2. JGRP-2418

Impedence mismatch between message types and transports

    XMLWordPrintable

    Details

    • Type: Enhancement
    • Status: Closed (View Workflow)
    • Priority: Major
    • Resolution: Won't Do
    • Affects Version/s: None
    • Fix Version/s: 5.1
    • Labels:
      None

      Description

      When sending a message (of any type), it is currently marshalled into a byte[] array, which is handled differently by each transport:

      • UDP wraps it into a DatagramPacket and calls DatagramSocket.send()
      • TCP writes the array to the socket's output stream
      • TCP_NIO2 wraps it into a ByteBuffer and calls SocketChannel.write(ByteBuffer)

      In some cases, there is an impedance mismatch between the type of the message and the type of the transport: for example, when sending an NioMessage (containing a ByteBuffer), we don't actually need the conversion to byte array and the subsequent wrapping into a ByteBuffer; this is superfluous. Even worse, when using off-heap, this creates an unneeded memory allocation. Passing the same ByteBuffer all the way down from the application to the transport would be better.

      This requires changes in the way bundlers accumulate messages. Also, perhaps the transport itself should become an SPI, to which a generic Transport protocol delegates. This would also allow us to implement multiple transports (JGRP-1424) in the same stack.

        Attachments

          Issue Links

            Activity

              People

              Assignee:
              belaban Bela Ban
              Reporter:
              belaban Bela Ban
              Votes:
              0 Vote for this issue
              Watchers:
              1 Start watching this issue

                Dates

                Created:
                Updated:
                Resolved: