Bug #375

Fragmentation: Do not transmit full Event Meta-data in all Notifications

Added by J. Moringen almost 13 years ago. Updated over 12 years ago.

Status:ResolvedStart date:06/20/2011
Priority:HighDue date:
Assignee:J. Moringen% Done:

100%

Category:Protocol
Target version:rsb-0.7

Description

Problem
Currently, multiple identical notifications (except for Notification.data_part and Notification.data) are sent, each containing the full set of meta-data.

Implementation
  • Specify new behavior here
  • Make fields of Notification descriptor optional ✓
  • Implement
    • C++ ✓
    • Python ✓
    • Java ✓
    • Common Lisp ✓

Related issues

Related to RSBag - Tasks #509: Create a protocol buffer message for serialized events Resolved 08/18/2011 08/22/2011
Related to RSBag - Tasks #520: Serialize RSB events including meta-data Resolved 08/23/2011
Related to RSBag - Tasks #684: Adapt to new event serialization IDL Resolved 10/27/2011

Associated revisions

Revision 41188f30
Added by J. Moringen over 12 years ago

Improved documentation comments in rsb/protocol/*.proto
refs #375
  • rsb/protocol/FragmentedNotification.proto: added link to explanation
    of Spread-specific event <-> notification conversion
  • rsb/protocol/Notification.proto.in: removed Spread-specific comments

Revision 3bed297a
Added by J. Moringen over 12 years ago

Adapted event fragmentation in Spread transport to protocol changes
refs #375
  • src/transport/spread/conditions.lisp (fragment-problem): adapted to
    changed names in rsb.protocol
    (invalid-fragment-id): likewise
    (duplicate-fragment): likewise
    (fragmentation-problem): new condition; signaled when
    fragmentation-related problem are encountered
    (insufficient-room): new condition; signaled when fragmentation
    fails due to insufficient room
  • src/transport/spread/conversion.lisp (notification->event): adapted
    to changed names in rsb.protocol; simplified
    (one-notification->event): likewise
    (event->notifications): likewise; calculate individual fragment
    payload sizes by first determining the overhead; use
    `fragmented-notification' instances for fragments
    (make-notification): optionally set some notification fields
  • src/transport/spread/fragmentation.lisp
    (assembly-concatenated-data): adapted to changes in rsb.protocol
    (add-fragment! assembly fragmented-notification): likewise; changed
    specializer notification -> fragmented-notification
    (merge-fragment pool fragmented-notification): likewise; changed
    specializer t -> fragmented-notification
    (delete-partial-assemblies): simplified
    (fragment-data): removed; no longer needed
    (make-data-fragment): new function; simple `subseq' wrapper
  • src/transport/spread/package.lisp (package rsb.transport.spread):
    removed shadowing import for meta-data; added shadowing import for
    event-meta-data; added exported symbols fragmentation-problem,
    insufficient-room, fragmentation-problem-required and
    fragmentation-problem-available
  • test/transport/spread/fragmentation.lisp
    (test suite fragmentation-root): changed local function
    make-notification > make-fragment; added local function make-event*
    (test fragmentation-root::assemble-smoke): adapted to fragmentation
    changes
    (test fragmentation-root::fragment-smoke): use
    `event
    >notifications' instead of `fragment-data'; check for
    `insufficient-room' errors
    (test fragmentation-root::roundtrip): use `event-notifications'
    instead of `fragment-data'; added test cases
    (test fragmentation-root::warnings): adapted to changed
    fragmentation
    (test::pruning-assembly-pool-root::prune): likewise
  • test/transport/spread/package.lisp
    (package rsb.transport.spread.test): qualified `defpackage' form
    with cl package; removed additional `in-package' cl-user form;
    removed imported symbol fragment-data; added imported symbol
    event->notifications
  • cl-rsb.asd (system cl-rsb-and-cl-spread): added dependency of
    src/transport/spread/conversion.lisp on
    src/transport/spread/conditions.lisp (system
    cl-rsb-and-cl-protobuf): changed class of protocol module to
    protocol-buffer-descriptor-directory; changed files of the module
    Protocol.proto -> EventId.proto, EventMetaData.proto,
    Notification.proto and FragmentedNotification.proto

Revision 2fcc43ce
Added by J. Moringen over 12 years ago

Adapted event to use RSB's serialization protocol
refs #375
  • src/transform/rsb-event.lisp (rsb-event::holder): adapted to changes
    in rsb.protocol
    (encode rsb-event event): likewise
    (decode rsb-event simple-array): likewise
  • cl-rsbag.asd (system cl-rsbag): changed class of protocol module to
    protocol-buffer-descriptor-directory; changed files of the module
    Protocol.proto -> EventId.proto, EventMetaData.proto,
    Notification.proto and FragmentedNotification.proto

Revision bea5e593
Added by J. Moringen over 12 years ago

Fixed conversion bugs in src/transport/spread/conversion.lisp
refs #375
  • src/transport/spread/in-connector.lisp
    (message->event in-connector simple-array t): unpack as
    `fragmented-notification' instead of `notification'
  • src/transport/spread/conversion.lisp (notification->event): retrieve
    notification from fragment for event conversion
    (event->notifications): cosmetic change

Revision dc8eb96e
Added by J. Moringen over 12 years ago

Fixed conversion in src/transform/rsb-event.lisp
refs #375
  • src/transform/rsb-event.lisp (encode rsb-event event): new data
    definition uses an `event-id' instance instead of sequence-number
    and sender-id fields

Revision 14c281a2
Added by J. Moringen over 12 years ago

Transcoded file test/data/single-event.tide
refs #375
  • test/data/single-event.tide: transcoded for new event serialization
    format

Revision 1a20e52d
Added by J. Wienke over 12 years ago

  • adapted to new protocol files refs #375
  • removed unused introspection stuff refs #682

Revision 8e8bf0be
Added by J. Moringen over 12 years ago

Adapted to changes in rsb-protocol
refs #375
  • setup.py: place file generated by protoc in rsb/protocol directory;
    added an init.py file there
  • rsb/rsbspread/__init__.py: removed event <-> notification
    conversion; adapted fragmentation to new protocol
  • rsb/rsbspread/conversion.py: new file; extracted and adapted event
    <-> notification conversion

Revision 954c1b72
Added by J. Moringen over 12 years ago

(Hopefully) fixed off-by-one error in src/rsb/transport/spread/OutConnector.cpp
refs #375
  • src/rsb/transport/spread/OutConnector.cpp: the loop which constructs
    notification fragments for sending could go beyond the bounds of the
    input string by one

Revision b21c8a08
Added by J. Moringen over 12 years ago

Added comments in rsb/rsbspread/conversion.py
refs #375
  • rsb/rsbspread/conversion.py: added some comments regarding the
    fragmentation of notifications

Revision 17bbaad5
Added by J. Moringen over 12 years ago

Fixed corner case in src/rsb/transport/spread/OutConnector.cpp
refs #375
  • src/rsb/transport/spread/OutConnector.cpp: produce at least one
    notification fragment, even if the payload is empty; for example,
    the void wire-schema uses empty payloads

History

#1 Updated by J. Moringen almost 13 years ago

  • Status changed from New to In Progress
  • Assignee changed from J. Wienke to J. Moringen
  • Priority changed from Normal to High

#2 Updated by J. Moringen almost 13 years ago

  • Description updated (diff)

#3 Updated by J. Moringen almost 13 years ago

  • Description updated (diff)
  • % Done changed from 0 to 20

#4 Updated by J. Wienke over 12 years ago

Now this even includes the cause vector.

#5 Updated by S. Wrede over 12 years ago

  • Target version changed from rsb-0.10 to rsb-0.7

#6 Updated by J. Wienke over 12 years ago

I will do this now as otherwise there is no chance for me to implement the full transmission of RSB meta data in a convenient way for project:rsbtimesync

#7 Updated by J. Wienke over 12 years ago

Or better said, I would like to do this now ;)

#8 Updated by J. Moringen over 12 years ago

  • Assignee changed from J. Moringen to J. Wienke
  • % Done changed from 20 to 30

#9 Updated by J. Moringen over 12 years ago

  • Description updated (diff)

#10 Updated by J. Wienke over 12 years ago

  • Description updated (diff)
  • % Done changed from 30 to 40

#11 Updated by J. Moringen over 12 years ago

  • Description updated (diff)
  • Assignee changed from J. Wienke to J. Moringen
  • % Done changed from 40 to 90

#12 Updated by J. Moringen over 12 years ago

More Java changes in r3009

#13 Updated by J. Moringen over 12 years ago

  • Description updated (diff)

#14 Updated by J. Moringen over 12 years ago

  • Description updated (diff)
  • Status changed from In Progress to Resolved
  • % Done changed from 90 to 100

Also available in: Atom PDF