Skip to content

v2.0

Compare
Choose a tag to compare
@martin-belanger martin-belanger released this 03 Nov 14:27
· 320 commits to main since this release
ed799b4

Summary

  • Add support for PLEO - Port-Local Entries Only, see TP8010.

    • Add new configuration parameter to stafd.conf: pleo=[enabled|disabled]
    • This requires libnvme 1.2 or later although nvme-stas can still operate with 1.1 (but PLEO will not be supported).
  • Target udev-rule= at TCP connections only.

  • Read-the-docs will now build directly from source (instead of using a possibly stale copy)

  • More unit tests were added

  • Refactored the code that handles pyudev events in an effort to fix spurious lost events.

  • In stacd.conf, add a new configuration section, [I/O controller connection management].

    • This is to replace sticky-connections by disconnect-scope and disconnect-trtypes, which is needed so that hosts can better react to Fabric Zoning changes at the CDC.
    • Add connect-attempts-on-ncc to control how stacd will react to the NCC bit (Not Connected to CDC).
  • When the host's symbolic name is changed in sys.conf, allow re-issuing the DIM command (register with DC) on a reload signal (systemctl reload stafd).

  • Replace blacklist= by exclude= is stafd.conf and stacd.conf. Warning: this may create an incompatibility for people that were using blacklist=. Althoughblacklist= will continue to be supported for a while (~2 years) it would be a good idea to manually replace it by exclude=.

  • Change TID.__eq__() and TID.__ne__() to recognize a TID object even when the host-iface is not set. This is to fix system audits where nvme-stas would not recognize connections made by nvme-cli. The TID object, or Transport ID, contains all the parameters needed to establish a connection with a controller, e.g. (trtype, traddr, trsvcid, nqn, host-traddr, and host-iface). nvme-stas can scan the sysfs (/sys/class/nvme/) to find exiting NVMe connections. It relies on the address and other attributes for that. For example the attribute /sys/class/nvme/nvme0/address may contain something like: traddr=192.168.56.1,trsvcid=8009,host_iface=enp0s8.

    nvme-stas always specify the host-iface when making connections but nvme-cli typically does not. Instead, nvme-cli relies on the routing table to select the interface. This creates a discrepancy between the address attribute of connections made by nvme-cli and those made by nvme-stas (i.e. host_iface= is missing for nvme-cli connections). And this results in nvme-stas not being able to recognize connections made by nvme-cli. Two solutions have been proposed to workaround this problem:

    • First, a short term solution changes TID.__eq__() and TID.__ne__() so that the host-iface has a lesser weight when comparing two TIDs. This way, the TID of a connection created by nvme-cli can be compared to the TID of a connection made with nvme-stas and still result in a match. The downside to this approach is that a connection made with nvme-cli that is going over the wrong interface (e.g. bad routing table entry), will now be accepted by nvme-stas as a valid connection.
    • Second, a long term solution that involves a change to the kernel NVMe driver (in Linux 6.1) will allow being able to determine the host interface for any NVMe connections, even those made without specifying the host-iface parameter. The kernel driver will now expose the source address of all NVMe connections through the sysfs. This will be identified by the key=value pair "src_addr=[ip-address]" in the address attribute. And from the source address one can infer the actual host interface. This actually will solve the shortcomings of the "short term" solution discussed above. Unfortunately, it may take several months before this kernel addition is available in a stock Distribution OS. So, the short term solution will need to suffice for now.

What's Changed

List of commits between v1.1.6 and v2.0:

Martin Belanger (56):
      build: Add update-subprojects to Makefile
      build: increase libnvme subproject revision number to pull libnvme 1.1
      build: Rework mesong dependencies
      conf: Improve config error handling
      config: Add backward compatibility support
      doc: Change read-the-docs Makefile to build documentation from source
      doc: Clarify that Hosts don't have access to Fabric Zoning configuration
      doc: Clean up. Unable to generate usable RST from HTML.
      doc: Convert html to rst
      doc: Fix broken path
      doc: Fix missing HTML links
      doc: Set html_extra_path in the Sphinx conf.py file
      doc: Update documentation on 'udev-rule'
      doc: update version number on html documents
      doc: Upfate HTML documents
      packages: Update debian package info
      read-the-docs: convert html to rst
      read-the-docs: Fix broken build
      release: 1.2-rc2
      release: nvme-stas 1.2-rc1
      release: Set version to 2.0
      release: Sync dependencies with newly released libnvme 1.2.
      release: v2.0-rc2
      release: v2.0-rc4
      release: v2.0-rc5
      stacd: Add support for new src_addr attribute in sysfs
      stacd: Add zoning enforcement support
      stacd: fix bug disconnect-trtypes=rdma+fc
      stacd: Restrict udev-rule=disabled to suppress TCP connections only
      stacd: Target udev-rule at TCP connections only
      stafd: Add backward compatibility for PLEO support
      stafd: Add PLEO support
      stafd: Always invoke Controller's reload_hdlr() on a reload command
      stafd: Resync with DC when "pleo" config is changed
      stafd: Use introspection instead of version no. to determine what libnvme supports
      staslib: Add more debug messages
      staslib: Complete rewrite of glibudev.py
      staslib: Fine tune TID's __eq__ and __ne__ methods
      staslib: Fix pyudev deadlock waiting for events forever loop.
      staslib: Minor cosmetic changes to debug messages
      staslib: Remove glibudev.py
      staslib: Trim white spaces from transport identifiers
      staslib: Use black to fix code coding style
      test: Add more unit tests
      test: Add more unit/coverage tests
      test: Always run tests using libnvme subproject
      test: Collect all log files on Github actions failure
      test: Collect meson log on Github action failure
      test: Collect meson-log.txt and testlog.txt on Github actions failure
      test: Fix failing test for disconnect_trtypes
      test: Fix PYTHONPATH
      test: Fix unit test
      test: Make run-time dependencies for tests optional
      tests: Make sure that "import libnvme" succeeds to allow tests
      utils: Add "Usage" to mk-discovery-conf.py
      utils: New utility to convert "stafctl ls" output to nvme-cli discovery.conf

dependabot[bot] (6):
      build(deps): bump docker/build-push-action from 3.0.0 to 3.1.0
      build(deps): bump docker/build-push-action from 3.1.0 to 3.1.1
      build(deps): bump docker/login-action from 2.0.0 to 2.1.0
      build(deps): bump docker/build-push-action from 3.1.1 to 3.2.0
      build(deps): bump docker/metadata-action from 4.0.1 to 4.1.0
      build(deps): bump docker/metadata-action from 4.1.0 to 4.1.1

Full Changelog: v1.1.6...v2.0