Skip to content

Releases: linux-nvme/nvme-stas

v2.0

03 Nov 14:27
ed799b4

Choose a tag to compare

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-ru...
Read more

v2.0 Release Candidate 5

27 Oct 16:30
ead9120

Choose a tag to compare

Pre-release

Summary

This release tries to fix missing pyudev events. The pyudev event handler was completely redesigned.

What's Changed

List of commits between v2.0-rc4 and v2.0-rc5:

Martin Belanger (8):
      staslib: Add more debug messages
      conf: Improve config error handling
      packages: Update debian package info
      build: Add update-subprojects to Makefile
      staslib: Complete rewrite of glibudev.py
      staslib: Remove glibudev.py
      staslib: Use black to fix code coding style
      release: v2.0-rc5

dependabot[bot] (1):
      build(deps): bump docker/metadata-action from 4.1.0 to 4.1.1

Full Changelog: v2.0-rc4...v2.0-rc5

v2.0 Release Candidate 4

20 Oct 18:11
19e9f9c

Choose a tag to compare

Pre-release

In this release

This release allows nvme-stas 2.0 to run with libnvme 1.1. nvme-stas 2.0 really requires libnvme 1.2 for full feature support (e.g. PLEO). However, nvme-stas 2.0 can now run with an older libnvme 1.1, in which case warning messages in the syslog will recommend to upgrade libnvme.

List of commits between v2.0-rc3 and v2.0-rc4:

Martin Belanger (12):
      build: Rework mesong dependencies
      doc: Fix broken path
      stafd: Add backward compatibility for PLEO support
      test: Add more unit/coverage tests
      test: Collect meson log on Github action failure
      test: Collect meson-log.txt and testlog.txt on Github actions failure
      test: Collect all log files on Github actions failure
      test: Fix PYTHONPATH
      test: Add more unit tests
      test: Fix failing test for disconnect_trtypes
      stafd: Use introspection instead of version no. to determine what libnvme supports
      release: v2.0-rc4

dependabot[bot] (3):
      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

v2.0 Release Candidate 3

11 Oct 18:05
004d9b1

Choose a tag to compare

Pre-release

In this release

A lot of changes related to documentation generation on Read-The-Docs. A few fixes related to changing PLEO configuration and followed by a "reload" command.

List of commits between v2.0-rc2 and v2.0-rc3:

Martin Belanger (10):
      doc: Update documentation on 'udev-rule'
      stafd: Resync with DC when "pleo" config is changed
      stafd: Always invoke Controller's reload_hdlr() on a reload command
      doc: Change read-the-docs Makefile to build documentation from source
      doc: Fix missing HTML links
      doc: Set html_extra_path in the Sphinx conf.py file
      doc: Convert html to rst
      read-the-docs: convert html to rst
      read-the-docs: Fix broken build
      doc: Clean up. Unable to generate usable RST from HTML.

v2.0 Release Candidate 2

03 Oct 16:48
b70d504

Choose a tag to compare

Pre-release

This release contains changes to the way nvme-stas interacts with nvme-cli's udev rules. First, in stacd.conf, udev-rule is set to disabled by default, meaning that nvme-cli's udev rules are disabled by nvme-stas. However, this only impacts TCP connections. In other words, udev rules for other types of transport (rdma, fc, loop) are not affected.

Martin Belanger (3):
      stacd: Restrict udev-rule=disabled to suppress TCP connections only
      stacd: Target udev-rule at TCP connections only
      doc: Upfate HTML documents

v2.0 Release Candidate 1

29 Sep 17:05
99cf2c0

Choose a tag to compare

Pre-release

Release 2.0 was needed because of incompatibilities in stacd.conf (i.e. replacing sticky-connections by the pair disconnect-scope + disconnect-trtypes). There will be no official 1.2 release.

Also note that nvme-stas 2.0 will require libnvme 1.2, which is yet to be released.

List of commits between v1.2-rc3 and v2.0-rc1:

Martin Belanger (3):
      config: Add backward compatibility support (blacklist vs. exclude)
      test: Fix unit test
      stafd: Add PLEO support

v1.2 Release Candidate 3

12 Sep 15:48
1a73510

Choose a tag to compare

Pre-release

Changes in this release:

  • Add support for NCC bit (Not Connected to CDC).
  • Add support for new sysfs attribute src_addr.

List of commits between v1.2-rc2 and v1.2-rc3:

Martin Belanger (2):
      staslib: Fine tune TID's __eq__ and __ne__ methods
      stacd: Add support for new src_addr attribute in sysfs

v1.2 Release Candidate 2

29 Aug 16:20
a966729

Choose a tag to compare

Pre-release

Issue when disconnect-scope=all-connections-matching-disconnect-trtypes and disconnect_trtypes=rdma+fc. For this configuration all tcp connections should be sticky, but they were being removed anyway. Release v1.2-rc2 fixes this issue.

List of commits between v1.2-rc1 and v1.2-rc2:

Martin Belanger (3):
      doc: Clarify that Hosts don't have access to Fabric Zoning configuration
      stacd: fix bug disconnect-trtypes=rdma+fc
      release: 1.2-rc2

v1.2 Release Candidate 1

25 Aug 12:06
1e7b1ed

Choose a tag to compare

Pre-release

This release adds a new configuration section in stacd.conf called "[I/O controller disconnect policy]". This is used to configure how stacd will react to Fabric Zoning changes at the CDC. Mainly, when a storage subsystem that was zoned for the host is removed from the zone, should the host disconnect immediately form it, or maintain the connection (sticky connection) and let users decide whether to manually remove the connection.

Other changes:

  • Replace blacklist by exclude in stafd.conf and stacd.conf
  • Set udev-rule to disabled by default in stacd.conf
  • Remove sticky-connections from stacd.conf (see I/O controller disconnect policy above)
  • Remove host-iface from Transport ID comparison algorithm. This means that two identical IP addresses assigned to two different interfaces will be considered to be one and the same as it ought to. It's simply not legal to have the same IP address show up on two interfaces as SAN-A / SAN-B networks must be assigned different subnets. This also allows stas to identify existing configuration that were made w/o specifying the host-iface.

List of commits between v1.1.6 and v1.2-rc1:

Martin Belanger (4):
      build: increase libnvme subproject revision number to pull libnvme 1.1
      stacd: Add zoning enforcement support
      release: nvme-stas 1.2-rc1
      doc: update version number on html documents

dependabot[bot] (2):
      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

v1.1.6

21 Jul 16:12
f2bd997

Choose a tag to compare

This release fixes issues related to I/O controller connection audits and zoning enforcement.
This release also enables sticky-connections by default.

List of commits between v1.1.5 and v1.1.6:

Boris Glimcher (4):
      ci: add docker to dependabot.yml
      docker: remove build args
      CI: add dockerfile hadolint checker
      docker: fix linter errors

Martin Belanger (12):
      doc: cosmetic changes to documentation
      systemd: add explicit dependency to modprobe@nvme_fabrics.service
      test: limit modprobe to "nvmet-tcp", "nvmet-fc", or "nvmet-rdma".
      staslib: add override support
      staslib: add __version__ to staslib package
      staslib: remove unused parameter (udev_obj) from a few methods
      test: fix pylint issues
      test: fix typo
      stacd: fix I/O controller connection audits
      staslib: check that async operation hasn't been cancelled before proceeding
      stas: refactoring code to allow for module override
      conf: Enable sticky-connections by default

dependabot[bot] (1):
      build(deps): bump fedora from 33 to 36