Skip to content

Releases: linux-nvme/nvme-stas

v1.1.3

10 Jun 14:23
f24b4b5
Compare
Choose a tag to compare

This release fixes issues found in 1.1.2 related to the removal of connections to controllers. It also adds a way to automatically configure (/etc/nvme/*) nvme-stas if the configuration is missing (see issue #130).

List of commits between v1.1.2 and v1.1.3:

Boris Glimcher (13):
      stacd and stafd: add if name guardian to allow unit testing
      tests: use pyfakefs to rewrite nvme_options
      Fixes IndexError Fixes #131
      tests: add controller test
      ci add python code coverage
      tests: add service test
      test: change if name guardian to allow manual test execution
      test: small fix
      staslib: fix remove_controller with wrong argument
      test: add more code coverage
      test: add gtimer
      test: add avahi
      test: more avahi tests

Martin Belanger (19):
      test: add python module dependency check
      staslib: Define defs.WELL_KNOWN_DISC_NQN
      stafd, stacd: Add man page to systend service file.
      stacd: audit connections
      test: fixing GitHub actions
      stacd: fixed _load_last_known_config()returns None
      test: add RUNTIME_DIRECTORY env. var. to docker-compose
      staslib: Fix cback function deleting object that called the cback.
      staslib: calling wrong cback function on controller removal.
      release: update NEWS.md by documenting release 1.1.3
      test: fix coverage (undefined RUNTIME_DIRECTORY)
      staslib: make sure controller object gets "purged" when removed.
      stacd: fix defered call to remove_controller() with wrong arguments
      test: fix pylint "Unused variable 'ex'"
      staslib: fix race conditions during controller object removal.
      staslib: add Deferred object to manage deferred functions calls
      test: fix test for NvmeOptions failing on Fedora 34
      install: add service to auto-generate hostnqn and hostid if missing
      doc: document stas-config service/target.

v1.1.1

19 May 15:49
6136062
Compare
Choose a tag to compare

Bug fix: In stacd.conf, set "sticky-connections=disabled" by default.

List of commits bundled in v1.1.1:

Martin Belanger (4):
      test: fix github actions.
      test: more GitHub actions fixes
      build: remove subprojects directory from "loc" target
      stacd: make 'sticky-connections=disabled' by default

v1.1

18 May 16:53
012a859
Compare
Choose a tag to compare

nvme-stas version 1.1 introduces two new stacd configuration parameters:

udev-rule=

Takes a string argument "enabled" or "disabled". This option determines whether nvme-cli's udev rule will be executed or ignored.

A udev rule gets intalled with nvme-cli that tells the udev daemon (udevd) to look for Asychronous Event Notifications (AEN) indicating a change of discovery log page entries (DPLE). The udev rule is installed as: /usr/lib/udev/rules.d/70-nvmf-autoconnect.rules

When an AEN is detected, udevd simply instructs systemd to start a one-shot service that will retrieve the changed DPLEs and connect to all the I/O Contollers (IOC) listed in the DPLEs. This is basically the same as perfoming nvme-cli's "connect-all" command.

Unfortunately, stafd and stacd also perform the same operations when an AEN is received. This results in a race condition between udevd and stafd/stacd.

This is not really a problem. stafd and stacd are designed to handle this type of race condition and will conclude, eventually, that the connections succeeded. The only downside is that there may be error messages printed to the syslog when the race condition happens. These messages are printed by the kernel because two processes are trying to connect to the same IOC at the same time. One of them will be rejected by the kernel, but the other will succeed.

The udev-rule option allows a user to disable nvme-cli's udev rule so that udevd will not take action on received AENs. Instead, only stafd/stacd will be allowed to react to AENs and set up IOC connections.

Defaults to "enabled", which means that udevd and stafd/stacd will react to AENs. It also means that the race condition will happen by default and error messages will be printed to the syslog.

sticky-connections=

Takes a string argument "enabled" or "disabled". This option determines whether connections to I/O controllers will be maintained after Discovery Log Page Entry (DLPE) removal.

Zoning configuration is performed at Discovery Controllers (DC). A zone is used to specify the list of I/O controllers that a host is allowed to access. The zone contains a list of hosts and the I/O controllers that these hosts can access. Users can add or remove I/O controllers and/or hosts from zones.

DCs notify hosts of zoning configuration changes by sending Asynchronous Event Notifications (AEN) indicating a "Change of Discovery Log Page (DLP)". The host uses these AENs as a trigger to retrieve the new list of DLPEs (i.e. I/O controllers) by issuing a Get DLP command. This happens in real time, which means that a host that was previously connected to an I/O controller may suddenly be told that it is no longer allowed to connect to that I/O controller and should disconnect from it.

The parameter sticky-connections determines how stacd reacts to the removal of an I/O controller DLPE. In other words, whether it should immediately disconnect from I/O controllers when the DPLE is removed, or whether it should maintain the connection.

Note that nvme-stas was modeled after nvme-cli. nvme-cli maintains I/O controller connections by default (i.e. connections are sticky). That's why nvme-stas also maintains I/O controller connections by default.

With sticky-connections=enabled, the default, stacd does not disconnect from I/O controllers when a DPLE is removed. Instead, users can issue the nvme-cli command "nvme disconnect" to disconnect (or wait until the next system reboot at which time all connections will be removed).

With sticky-connections=disabled, stacd immediately disconnects from a previously connected I/O controller if the response to a Get DLP command no longer contains a DLPE matching that I/O controller.

List of commits bundled in v1.1:

Martin Belanger (12):
      doc: add TOC to api.rst
      stacd: allow disabling nvme-cli auto-connect udev rule.
      stacd: Document the udev-rule option and set version to 1.1
      test: add coverage
      test: add more coverage tests
      test: adding more coverage test cases
      test: fine tune coverage script
      staslib: better handling and clean up of singleton objects.
      doc: troubleshoot guide for missing mDNS packets
      build: add 'uninstall' target
      stacd: Add configuration parameter 'sticky-connections'
      release: complete version 1.1 documentation

dependabot[bot] (4):
      build(deps): bump docker/metadata-action from 3.7.0 to 3.8.0
      build(deps): bump docker/login-action from 1.14.1 to 2
      build(deps): bump docker/metadata-action from 3.8.0 to 4.0.1
      build(deps): bump docker/build-push-action from 2.10.0 to 3

v1.0.1

20 Apr 17:51
39ce8c2
Compare
Choose a tag to compare

The main reason for this release is to install staslib in a non-architecture-dependent location. This involves setting pure: true when invoking install_sources() in staslib/meson.build. This effectively moves /usr/lib64/python3.x/site-packages/staslib/ to /usr/lib/python3.x/site-packages/staslib/ on Fedora, Red Hat, and SuSE. Debian is not affected by this change.

Although many commits are introduced in this release, they are only related to documentation, testing, and coding-style. There is no change in functionality or to the code itself.

Here's the list of commits that are bundled in v1.0.1:

Boris Glimcher (13):
      build: fix libnvme dependency
      build: add docker ignore file
      test: test docker compose up
      tests: load and install dependencies for docker tests
      ci: create first dependabot.yml
      Update README.md
      doc: post documentation to RTD
      doc: move manfolder
      doc: more updates, added installation and quickstart
      doc: add RTD badge
      doc: add rst
      doc: updated rst folder with new generated docs
      doc: expand api and quickstart rst with new files

Martin Belanger (22):
      Add new unit tests
      unit tests: run pylint/pyflakes on groups of files instead of individually.
      test: move all tests to ./test/meson.build
      test: move pylint/pyflakes defs to ./test/meson.build
      tests: fine tuning test environment.
      build: fix spec file
      build: fix "make rpm"
      build: Add redhat-linux-build to .gitignore
      tests: Moving all unit tests to the ./test directory
      pep8: use black to fix style issues (cosmetic)
      doc: add "notes-to-developers.md"
      tests: check minimum python version requirements (vermin)
      doc: Add GitHub badges - "latest tag" and "commits since last tag"
      meson: explicitly set 'check: false' when invoking run_command()
      doc: remove Documentation directory
      doc: rename note-to-developers.md to CONTRIBUTING.md
      doc: fix man page generation
      doc: fix copyright
      test: add more unit tests
      doc: update CONTRIBUTING.md guidelines
      coding-style: fine tune black parameters
      build: install staslib as pure

dependabot[bot] (4):
      build(deps): bump actions/checkout from 2 to 3
      build(deps): bump docker/metadata-action from 3.3.0 to 3.7.0
      build(deps): bump docker/login-action from 1.9.0 to 1.14.1
      build(deps): bump docker/build-push-action from 2.5.0 to 2.10.0

v1.0

05 Apr 18:03
dec6a5f
Compare
Choose a tag to compare

This is the official 1.0 release

v1.0 Release Candidate 7

04 Apr 19:54
55e6d4d
Compare
Choose a tag to compare
Pre-release

This is a pre-release for release 1.0.

Boris Glimcher (2):
      Create pylint.yml
      lint: fix import error
      ci: use pylint from python module

Daniel Wagner (1):
      build: Update libnvme wrap

Martin Belanger (5):
      update documentation
      Linting and scrubbing the code
      fix actions: unable to import certain modules
      Remove deprecated distutils module

v1.0 Release Candidate 6

29 Mar 17:29
08e25b7
Compare
Choose a tag to compare
Pre-release

This is a pre-release for release 1.0.

The main reason for this new release candidate is to fix a KATO issue for connections to discovery controllers (DC). In libnvme and the Linux kernel, connections to DC controllers default to having the KATO disabled (i.e. set to 0) even when specifically specifying that a connection is to be persistent. By opposition, connections to I/O controllers are always assumed to be persistent and are assigned a default KATO of 2 minutes (120 sec). This release ensures that DC connections will be assigned a 30-sec KATO by default unless otherwise configured by users in the stafd.conf file. Why 30 sec and not 120 sec? It's to be consistent with nvme-cli that also defaults DC connections to a 30 second KATO.

Changes in this release.

Martin Belanger (2):
      dbus: return native dbus data instead of json when possible.
      Do not call persistent_set() from libnvme but set a default KATO

v1.0 Release Candidate 5

24 Mar 17:13
52da2fc
Compare
Choose a tag to compare
Pre-release

This is a pre-release for release 1.0.

Here's the list of changes.

Boris Glimcher (1):
      readme: Add github badges

Daniel Wagner (1):
      build: Update libnvme wrap

Martin Belanger (5):
      Document how to increase the number of interfaces that Avahi can monitor.
      Remove misconfiguration check (i.e. remove dependency on python3-netifaces).
      Aligning code with upstream spec files.
      Use one configuration_data object for everything.
      Adding release candidate number to version string.

v1.0 Release Candidate 4

18 Mar 16:30
3fe9da4
Compare
Choose a tag to compare
Pre-release

This is a pre-release for release 1.0.

This release introduces two new configuration parameters that can be set in /etc/stas/sta[cf]d.conf. ignore-iface tells stafd/stacd to ignore the interface returned by Avahi when controllers are discovered using mDNS. In this case, connection won't be forced on a specific interface, but instead will rely on the routing tables to find the right interface. ip-family tells stafd/stacd whether IPv4, IPv6, or both are to be used when connecting to controllers. This can be used to ignore IP address families discovered by Avahi/mDNS.

Boris and Charles added changes to allow building RPM packages. Note that this is not necessarily the same RPM packages that would be built by distros. Distros usually run their own scripts to build RPM according to their specific needs. Here, we're just allowing developers to build their own RPMs.

Boris Glimcher (2):
      rpm: add -ba to actually compile RPM from spec
      build: pass builddir to configure

Charles Rose (1):
      nvme-stas.spec.in: Add package dependencies

Martin Belanger (4):
      Add ignore-iface and ip-family conf. options
      Adding man pages for ip-family and ignore-iface
      Update overview diagram
      Bug fix - Check ignore-iface when creating TransportId object

v1.0 Release Candidate 3

04 Mar 15:48
30952ce
Compare
Choose a tag to compare
Pre-release

This is a pre-release for release 1.0.

No big changes in this release. Mostly documentation fixes, cosmetic changes to log messages, and improving github workflows.

Boris Glimcher (7):
      LOG: enable libnvme debug when trace is enabled
      Add libnvme subproject
      Remove docker stage from libnvme
      Actions: use BSFishy/meson-build
      update readme
      Add missing openssl dependency to dockerfile
      Mount /etc/nvme into docker compose

Martin Belanger (8):
      minor fix to previous change to set the log level on libnvme
      Use the newly added cntlrtype to check the type of controller
      Updated the Distro documentation
      Print descriptive message when unable to run stafctl/stacctl
      When reading the Host NQN, warn people if the NQN seems invalid
      Filter out invalid IP addresses.
      Change default address returned by name resolver
      Update the documentation