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
libnvme
1.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
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
bydisconnect-scope
anddisconnect-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).
- 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 areload
signal (systemctl reload stafd
). -
Replace
blacklist=
byexclude=
isstafd.conf
andstacd.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-iface
is not set. This is to fix system audits wherenvme-stas
would 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-stas
can scan thesysfs
(/sys/class/nvme/
) to find exiting NVMe connections. It relies on theaddress
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 thehost-iface
when making connections butnvme-cli
typically does not. Instead,nvme-cli
relies on the routing table to select the interface. This creates a discrepancy between theaddress
attribute of connections made bynvme-cli
and those made bynvme-stas
(i.e.host_iface=
is missing fornvme-cli
connections). And this results innvme-stas
not 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-iface
has a lesser weight when comparing two TIDs. This way, the TID of a connection created bynvme-cli
can be compared to the TID of a connection made withnvme-stas
and still result in a match. The downside to this approach is that a connection made withnvme-cli
that is going over the wrong interface (e.g. bad routing table entry), will now be accepted bynvme-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 thesysfs
. This will be identified by the key=value pair "src_addr=[ip-address]
" in theaddress
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.
- 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-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