36. Release LBM 4.0 - May 2010

36.1. LBM 4.0

36.1.1. New Features

  • LBM now supports Datagram Bypass Layer (DBL) transport acceleration in conjunction with DBL-enabled Myricom® 10-Gigabit Ethernet NICs for Linux and Microsoft® Windows®. DBL is a kernel-bypass technology that accelerates sending and receiving UDP traffic. See Transport Acceleration Options for more information. Note: The initial valid version of the Myricom DBL shared library is Version 0.4.8. Do not download any version prior to this version.

36.1.2. Updated Features

  • 29West topic resolution has been enhanced to provide more flexibility. Three phases have been implemented.

    • Initial Phase - Period that allows you to resolve a topic aggressively. Can be used to resolve all known topics before message sending begins. This phase can be configured to run differently from the defaults or completely disabled.

    • Sustaining Phase - Period that allows new receivers to resolve a topic after the Initial Phase. This phase is most like the existing topic resolution and can also be the primary period of topic resolution if you disable the Initial Phase. It can also be configured to run differently from the defaults or completely disabled.

    • Quiescent Phase - The "steady state" period during which a topic is resolved and LBM uses no system resources for topic resolution.

    See Topic Resolution for more information.

  • Two changes have been made to the LBT-IPC transport.

    • Receiver pacing has been added to the LBT-IPC transport. When the IPC shared memory area is full, sources either block or return an error (EWOULDBLOCK). You configure source or receiver pacing with transport_lbtipc_behavior.

    • LBM now monitors receiver "health". If a receiver goes away, the source receives a disconnect event the next time the sending application sends a message. As a result, the LBT-IPC Shared Memory Layout now has a lock-free design and the configuration options, transport_lbtipc_client_activity_timeout and transport_lbtipc_acknowledgement_interval have been deprecated.

    See Transport LBT-IPC for more information.

  • In the C API, the previously deprecated functions have been removed.

    lbm_context_attr_init()
    lbm_event_queue_attr_init()
    lbm_rcv_topic_attr_init()
    lbm_src_topic_attr_init()
    lbm_wildcard_rcv_attr_init()
    lbm_context_attr_cleanup()
    lbm_event_queue_attr_cleanup()
    lbm_rcv_topic_attr_cleanup()
    lbm_src_topic_attr_cleanup()
    lbm_wildcard_topic_attr_cleanup()
                        
    


  • In the Java API, the previously deprecated JAVA APIs have been removed.

    LBMSource:
    LBMSource(LBMContext lbmctx, LBMTopic lbmtopic, LBMSourceCallback cb, Object cbArg)
    LBMSource(LBMContext lbmctx, LBMTopic lbmtopic, LBMSourceCallback cb, Object cbArg, 
                 LBMEventQueue lbmevq)
    addSourceCallback(LBMSourceCallback cb)
    addSourceCallback(LBMSourceCallback cb, Object cbArg)
    removeSourceCallback(LBMSourceCallback cb)
    removeSourceCallback(LBMSourceCallback cb, Object cbArg)
    onSourceEvent(int event, byte [] eventData)
    send(byte [] data, int dataLength, LBMResponseCallback cb, LBMEventQueue lbmevq, int flags)
    send(byte [] data, int dataLength, LBMResponseCallback cb, int flags)
    
    LBMContext:
    setCallback(LBMImmediateMessageCallback cb, Object cbArg)
    setCallback(LBMImmediateMessageCallback cb, Object cbArg, LBMEventQueue lbmevq)
    createSource(LBMTopic lbmtopic, LBMSourceCallback cb, Object cbArg)
    createSource(LBMTopic lbmtopic, LBMSourceCallback cb, Object cbArg, LBMEventQueue lbmevq)
    
    LBMContextAttributes:
    setSourceNotifyCallback(LBMSourceNotification cb, Object cbArg)
    
    LBMEventQueue:
    size()
    
    LBMSourceCallback: (entire interface)
                        
    
    The previously deprecated JAVA APIs have been undeprecated.
    LBMEventQueue:
    LBMEventQueue(LBMEventQueueCallback cb, Object cbArg)
    LBMEventQueue(LBMEventQueueAttributes lbmevqattr, LBMEventQueueCallback cb, Object cbArg)
    LBMContext:
    send(String target, String topic, byte [] data, int dataLength, LBMResponseCallback cb, 
          Object cbArg, LBMEventQueue lbmevq, int flags)
    send(String target, String topic, byte [] data, int dataLength, LBMResponseCallback cb, 
          Object cbArg, int flags)
    send(String topic, byte [] data, int dataLength, LBMResponseCallback cb, Object cbArg, 
          LBMEventQueue lbmevq, int flags)
    send(String topic, byte [] data, int dataLength, LBMResponseCallback cb, Object cbArg, int flags)
    createReceiver(LBMTopic lbmtopic, LBMReceiverCallback cb, Object cbArg)
    createReceiver(LBMTopic lbmtopic, LBMReceiverCallback cb, Object cbArg, LBMEventQueue lbmevq)
                        
    
    The following JAVA APIs have been deprecated. A null pointer check has also been added to LBMEventQueue.addMonitor().
    LBMEventQueue.propertySize()
    LBMContext:
    createReceiver(LBMTopic lbmtopic)
    createReceiver(LBMTopic lbmtopic, LBMEventQueue lbmevq)
    createHotFailoverReceiver(LBMTopic lbmtopic, LBMEventQueue lbmevq)
    createHotFailoverReceiver(LBMTopic lbmtopic)
                        
    
    The following JAVA APIs have been changed from public to protected.
    LBMReceiver(LBMContext lbmctx, LBMTopic lbmtopic)
    LBMReceiver(LBMContext lbmctx, LBMTopic lbmtopic, LBMEventQueue lbmevq)
    LBMReceiverBase(LBMContext lbmctx, LBMReceiverAttributes lbmrcvattr, LBMEventQueue lbmevq)
    LBMReceiverBase(LBMContext lbmctx, LBMReceiverAttributes lbmrcvattr)
    LBMHotFailoverReceiver(LBMContext lbmctx, LBMTopic lbmtopic)
    LBMHotFailoverReceiver(LBMContext lbmctx, LBMTopic lbmtopic, LBMEventQueue lbmevq)
                        
    


  • In the .NET API, the previously deprecated .NET APIs have been removed.

    LBMSource:
    addSourceCallback(LBMSourceCallback cb)
    addSourceCallback(LBMSourceCallback cb, object cbArg)
    removeSourceCallback(LBMSourceCallback cb)
    removeSourceCallback(LBMSourceCallback cb, object cbArg)
    LBMSource(LBMContext lbmctx, LBMTopic lbmtopic, LBMSourceCallback cb, object cbArg)
    LBMSource(LBMContext lbmctx, LBMTopic lbmtopic, LBMSourceCallback cb, object cbArg, 
                 LBMEventQueue lbmevq)
    delegate void LBMSourceCallback(object cbArg, int evtype, byte[] eventData)
    
    LBMContext:
    createSource(LBMTopic lbmtopic, LBMSourceCallback cb, object cbArg)
    createSource(LBMTopic lbmtopic, LBMSourceCallback cb, object cbArg, LBMEventQueue lbmevq)
    
    LBMContextAttributes:
    setSourceNotifyCallback(LBMSourceNotification cb, object cbArg)
                        
    
    The following .NET APIs have been deprecated.
    LBMContext:
    createReceiver(LBMTopic lbmtopic)
    createReceiver(LBMTopic lbmtopic, LBMEventQueue lbmevq)
    createHotFailoverReceiver(LBMTopic lbmtopic)
    createHotFailoverReceiver(LBMTopic lbmtopic, LBMEventQueue lbmevq)
                        
    
    The following .NET APIs have been changed from public to protected.
    LBMReceiver(LBMContext lbmctx, LBMTopic lbmtopic)
    LBMReceiver(LBMContext lbmctx, LBMTopic lbmtopic, LBMEventQueue lbmevq)
    LBMHotFailoverReceiver(LBMContext lbmctx, LBMTopic lbmtopic)
    LBMHotFailoverReceiver(LBMContext lbmctx, LBMTopic lbmtopic, LBMEventQueue lbmevq)
                           
    


  • Added const qualifier to optval parameters of all lbm_*_attr_setopt() API functions. Added const qualifier to attributes pointer parameters of functions used to create LBM objects such as lbm_context_create(), lbm_src_create(), lbm_rcv_create(), etc.

  • Configuration Change Required for LBM 3.5.3 / UME 2.2.4 or earlier: Added the Configuration Option, disable_extended_topic_resolution_message_options, for backward compatibility. If you use LBM 3.5.3 / UME 2.2.4 or less, you should set this option to "1" to disable the internal topic resolution message options. Not disabling these message options produces warnings and deaf receivers. No action is required for LBM 3.6 / UME 3.0 and later.

  • Added the Configuration Options, mim_delivery_control_activity_check_interval and mim_delivery_control_activity_timeout to check for duplicate MIM messages forwarded through multiple Gateways.

  • Added a new statistic in lbm_rcv_transport_stats_lbtrm_t structure for datagrams received out of order. The new statistic is available to the C API, the Java API and the .NET API. The statistic has also been added to the Ultra Messaging® MIB and the InterMapper probe files. In addition, all example applications support the statistic.

  • Blocking sends from within a context-thread callback are no longer permitted and now return an LBM_EINVAL error. This restriction eliminates a possible deadlock. Non-blocking sends from a context-thread callback are still permitted, and any type of send is permitted outside a context-thread callback.

  • Some API calls that were formerly never safe to call from within a context-thread callback (due to a deadlock condition) are now always safe to call from within a context-thread callback. These API calls include:

    • lbm_request_delete()

    • lbm_request_delete_ex()

    • lbm_response_delete()

    Additionally, the following send-related API calls are now safe to call from within a context-thread callback provided you set the LBM_SRC_NONBLOCK flag.

    • lbm_multicast_immediate_message()

    • lbm_multicast_immediate_request()

    • lbm_unicast_immediate_message()

    • lbm_unicast_immediate_request()

    • lbm_send_response()

  • Added ability to set a LBM Configuration Option interface by name. When setting by name the configuration option's value must be wrapped in quotes.

36.1.3. Bug Fixes

  • Corrected the installation of 64 bit LBM packages. LBM now installs into C:\Program Files instead of C:\Program Files (x86).

  • All include files now reference other include files using lbm/.... This allows your application Makefiles to specify just the parent directory, e.g. /usr/include. You can copy the include/lbm directory as a whole to your common or system include directory.

  • Added a warning "Data received but no callback registered" when data is received and no callbacks are registered in the Java and .NET APIs.

  • Fixed a bug that occurred when using Microsoft Windows IO Completion Ports that could cause a context's request_tcp_port to become permanently unresponsive to incoming TCP connection requests. This condition manifests itself in many ways, such as an inability to participate in LBM Request/Response, Late Join, or an inability to receive Unicast Immediate Messages. This condition occurs if the listening TCP socket created by LBM (e.g. by multiple incoming responses or UIMs) receives multiple TCP connection requests. See also UME 2.2.3.

  • Changed type of queue_size_warning from unsigned long to size_t.

  • Fixed an issue where uninitialized fields in an lbm_msg_t passed a bad pointer to application code. This could sometimes result in exceptions in .NET and Java. The fields in question were only uninitialized in unrecoverable loss messages larger than the transport_datagram_max_size and delivered from hot failover receivers or immediate messages. This issue was introduced in LBM 3.6.

  • Added the option, resolver_unicast_force_alive, which allows an LBM Gateway to begin sending keepalive messages to a Unicast Topic Resolution daemon (lbmrd). The lbmrd can then begin sending topic resolution traffic to the LBM Gateway.

  • Fixed an issue that caused unicast immediate messages sent from a Java application to return a fatal assert.

36.1.4. Known Issues

  • When using Event Queues with the Java API on Mac OS X kernel 9.4, core dumps have occurred. Mac OS X kernel versions prior to 9.4 have not produced this behavior. 29West is investigating this issue.

  • When using LBT-IPC, a seg fault can occur when sending messages larger than 65,535 bytes when ordered_delivery has been set to 0 (zero). The seg fault occurs when fragments are lost. Setting transport_lbtipc_behavior to receiver_paced avoids the seg fault by eliminating loss. 29West is investigating this issue.

Copyright (c) 2004 - 2014 Informatica Corporation. All rights reserved.