GT 4.2.0 Release Notes: XIO


1. Component Overview

Globus XIO is an extensible input/output library written in C for the Globus Toolkit. It provides a single API (open/close/read/write) that supports multiple wire protocols, with protocol implementations encapsulated as drivers. The XIO drivers distributed with 4.2.0 include TCP, UDP, file, HTTP, GSI, GSSAPI_FTP, TELNET and queuing. In addition, Globus XIO provides a driver development interface for use by protocol developers. This interface allows the developer to concentrate on writing protocol code rather than infrastructure, as XIO provides a framework for error handling, asynchronous message delivery, timeouts, etc. The XIO driver-based approach maximizes the reuse of code by supporting the notion of a driver stack. XIO drivers can be written as atomic units and stacked on top of one another. This modularization provides maximum flexibility and simplifies the design and evaluation of individual protocols.

2. Feature summary

Features new in release 4.2.0

  • Driver specific string attributes. Set values like tcp buffer size via string at runtime.
  • UDT driver.
  • Mode E Driver
  • Telnet Driver
  • Queuing Driver
  • Ordering Driver
  • Dynamically loadable drivers.

Other Supported Features

  • Single API to swappable IO implementations.
  • Asynchronous IO support.
  • Native timeout support.
  • Data descriptors for providing driver specific hints.
  • Modular driver stacks to maximize code reuse.
  • TCP, UDP, file, HTTP, telnet, mode E, GSI drivers.

Deprecated Features

  • GSSAPI_FTP driver now distributed with the GridFTP Server

3. Summary of Changes in XIO

The only significant change to Globus XIO in this release is the addition of "string attributes". The previous method of handling attributes still works in an entirely backward compatible way, but the string attributes adds a much needed convenience. Drivers can now provide a list of key=value pairs. A user can then specify these options at the command line and at runtime. This makes run time configuration much more flexible.

A driver can choose to expose parameters in a string form. This feature makes dynamically setting driver-specific options much easier. A user can then load the driver by name and set specific options by name all at runtime with no object module references. For example, a TCP driver can be loaded with the string tcp and the options can be set with the string port=50668;keepalive=yes;nodelay=N.

This would set the port to 50668, keepalive to true and nodelay to false. The particular string definition is defined by the TCP driver. This is done by creating a globus_i_xio_attr_parse_table_t array within the driver's source code. See the TCP driver source code for an example. Each row of the array is 1 option. There are 3 sub-members of each row entry: key, cmd, and parse function. The key is a string that defines what option is to be set. In the above example, string port would be a key. cmd tells the driver what cntl is associated with the key. In other words, once the string is parsed out it converts the key into a driver-specific control enum. XIO then uses that enum as it would if a driver-specific option was set in the source code. For more information on controls, see globus_xio_attr_cntl.

5. Known Problems

The following problems and limitations are known to exist for XIO at the time of the 4.2.0 release:

5.1. Limitations

  • [list limitations]

5.2. Outstanding bugs

6. Technology dependencies

XIO depends on the following GT components:

  • Globus Core
  • Globus Common
  • Globus GSSAPI

7. Tested platforms

Tested Platforms for XIO:

  • Linux

    • Mandrakelinux release 10.1
    • SuSE Linux 9.1 (i586)
    • Debian GNU/Linux 3.1
    • Red Hat Linux release 9

  • SunOS

    • SunOS 5.9 sun4u sparc SUNW,Sun-Fire-280R

  • MacOS

    • Darwin Kernel Version 7.9.0

  • Additionally, all platforms supported by GT 4.2.0 Platforms.

8. Backward compatibility summary

Protocol changes since GT version 4.0.x

  • None.

API changes since GT version 4.0.x

  • globus_xio_stack_copy added to the API. This allows a user to duplicated a configured stack.
  • globus_xio_driver_set_eof_received added to the driver API. This function allows drivers to have multiple outstanding reads at one time.
  • globus_xio_driver_eof_received added to the driver API. Working in conjunction with globus_xio_driver_set_eof_received to allow drivers to have multiple outstanding reads.
  • Users can now pass in a NULL callback for timeouts and it is assumed that when time expires the user wants the operation to timeout. Previously a user callback was required where the user would decide if they wanted the timeout.

9. Associated Standards

Adoption of standards in XIO is determined by the drivers. All drivers distributed by XIO are compliant with the protocol they implement.

10. For More Information

See XIO for more information about this component.