Releases: linux-nvme/nvme-stas
v2.0
Summary
-
Add support for PLEO - Port-Local Entries Only, see TP8010.
- Add new configuration parameter to stafd.conf:
pleo=[enabled|disabled] - This requires
libnvme1.2 or later although nvme-stas can still operate with 1.1 (but PLEO will not be supported).
- Add new configuration parameter to stafd.conf:
-
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
pyudevevents 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-connectionsbydisconnect-scopeanddisconnect-trtypes, which is needed so that hosts can better react to Fabric Zoning changes at the CDC. - Add
connect-attempts-on-nccto control how stacd will react to the NCC bit (Not Connected to CDC).
- This is to replace
-
When the host's symbolic name is changed in
sys.conf, allow re-issuing the DIM command (register with DC) on areloadsignal (systemctl reload stafd). -
Replace
blacklist=byexclude=isstafd.confandstacd.conf. Warning: this may create an incompatibility for people that were usingblacklist=. Althoughblacklist=will continue to be supported for a while (~2 years) it would be a good idea to manually replace it byexclude=. -
Change
TID.__eq__()andTID.__ne__()to recognize a TID object even when thehost-ifaceis not set. This is to fix system audits wherenvme-staswould not recognize connections made bynvme-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, andhost-iface).nvme-stascan scan thesysfs(/sys/class/nvme/) to find exiting NVMe connections. It relies on theaddressand other attributes for that. For example the attribute/sys/class/nvme/nvme0/addressmay contain something like:traddr=192.168.56.1,trsvcid=8009,host_iface=enp0s8.nvme-stasalways specify thehost-ifacewhen making connections butnvme-clitypically does not. Instead,nvme-clirelies on the routing table to select the interface. This creates a discrepancy between theaddressattribute of connections made bynvme-cliand those made bynvme-stas(i.e.host_iface=is missing fornvme-cliconnections). And this results innvme-stasnot being able to recognize connections made bynvme-cli. Two solutions have been proposed to workaround this problem:- First, a short term solution changes
TID.__eq__()andTID.__ne__()so that thehost-ifacehas a lesser weight when comparing two TIDs. This way, the TID of a connection created bynvme-clican be compared to the TID of a connection made withnvme-stasand still result in a match. The downside to this approach is that a connection made withnvme-clithat is going over the wrong interface (e.g. bad routing table entry), will now be accepted bynvme-stasas 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-ifaceparameter. The kernel driver will now expose the source address of all NVMe connections through thesysfs. This will be identified by the key=value pair "src_addr=[ip-address]" in theaddressattribute. 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.
- First, a short term solution changes
What's Changed
- build(deps): bump docker/build-push-action from 3.0.0 to 3.1.0 by @dependabot in #196
- build: increase libnvme subproject revision number by @martin-belanger in #197
- build(deps): bump docker/build-push-action from 3.1.0 to 3.1.1 by @dependabot in #198
- Add I/O controller disconnect policy by @martin-belanger in #199
- doc: update version number on html documents by @martin-belanger in #200
- doc: Clarify that Hosts don't have access to Fabric Zoning configuration by @martin-belanger in #201
- stacd: fix bug disconnect-trtypes=rdma+fc by @martin-belanger in #202
- release: 1.2-rc2 by @martin-belanger in #203
- stacd: support str_addr attribute from sysfs by @martin-belanger in #204
- config: Add backward compatibility support by @martin-belanger in #205
- stafd: Add PLEO support by @martin-belanger in #206
- stacd: Restrict udev-rule=disabled to suppress TCP connections only by @martin-belanger in #207
- Target udev-rule option at TCP connections only by @martin-belanger in #208
- release: v2.0-rc2 by @martin-belanger in #209
- Resync with DC on pleo config change by @martin-belanger in #210
- stafd: Always invoke Controller's reload_hdlr() on a reload command by @martin-belanger in #211
- doc: Fix missing HTML links by @martin-belanger in #245
- doc: Set html_extra_path in the Sphinx conf.py file by @martin-belanger in #246
- doc: Convert html to rst by @martin-belanger in #247
- read-the-docs: convert html to rst by @martin-belanger in #248
- read-the-docs: Fix broken build by @martin-belanger in #249
- doc: Clean up. Unable to generate usable RST from HTML. by @martin-belanger in #250
- build(deps): bump docker/metadata-action from 4.0.1 to 4.1.0 by @dependabot in #255
- build(deps): bump docker/build-push-action from 3.1.1 to 3.2.0 by @dependabot in #254
- build(deps): bump docker/login-action from 2.0.0 to 2.1.0 by @dependabot in #253
- build: Rework mesong dependencies by @martin-belanger in #256
- Support libnvme 1.1 and 1.2 by @martin-belanger in #257
- test: Add more unit tests by @martin-belanger in #258
- stafd: Use introspection instead of version no. to determine what libnvme supports by @martin-belanger in #259
- release: v2.0-rc4 by @martin-belanger in #260
- build(deps): bump docker/metadata-action from 4.1.0 to 4.1.1 by @dependabot in #262
- Improve config error handling by @martin-belanger in #263
- packages: Update debian package info by @martin-belanger in #264
- Rework glibudev by @martin-belanger in #265
- release: v2.0-rc5 by @martin-belanger in #266
- test: Make run-time dependencies for tests optional by @martin-belanger in #267
- release: Sync dependencies with newly released libnvme 1.2. by @martin-belanger in #268
- staslib: Fix pyudev deadlock waiting for events forever loop. by @martin-belanger in #269
- staslib: Trim white spaces from transport identifiers by @martin-belanger in #272
- utils: New utility to convert "stafctl ls" output to nvme-cli discove… by @martin-belanger in #273
- staslib: Minor cosmetic changes to debug messages by @martin-belanger in #274
- test: Always run tests using libnvme subproject by @martin-belanger in #275
- release: Set version to 2.0 by @martin-belanger in #276
- utils: Add "Usage" to mk-discovery-conf.py by @martin-belanger in #277
- tests: Make sure that "import libnvme" succeeds to allow tests by @martin-belanger in #278
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...
v2.0 Release Candidate 5
Summary
This release tries to fix missing pyudev events. The pyudev event handler was completely redesigned.
What's Changed
- build(deps): bump docker/metadata-action from 4.1.0 to 4.1.1 by @dependabot in #262
- Improve config error handling by @martin-belanger in #263
- packages: Update debian package info by @martin-belanger in #264
- Rework glibudev by @martin-belanger in #265
- release: v2.0-rc5 by @martin-belanger in #266
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
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
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
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
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
Changes in this release:
- Add support for NCC bit (Not Connected to CDC).
- Add support for new
sysfsattributesrc_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
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
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
blacklistbyexcludeinstafd.confandstacd.conf - Set
udev-ruletodisabledby default instacd.conf - Remove
sticky-connectionsfromstacd.conf(seeI/O controller disconnect policyabove) - 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
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