Newton Series Release Notes

14.2.4

New Features

  • New variables have been added to allow a deployer to customize a swift systemd unit file to their liking.

  • The task dropping the swift systemd unit files now uses the config_template action plugin allowing deployers access to customize the unit files as they see fit without having to load extra options into the defaults and polute the generic systemd unit file with jinja2 variables and conditionals.

  • For the os_swift role, the systemd unit TimeoutSec value which controls the time between sending a SIGTERM signal and a SIGKILL signal when stopping or restarting the service has been reduced from 300 seconds to 120 seconds. This provides 2 minutes for long-lived sessions to drain while preventing new ones from starting before a restart or a stop. The RestartSec value which controls the time between the service stop and start when restarting has been reduced from 150 seconds to 2 seconds to make the restart happen faster. These values can be adjusted by using the swift_*_init_config_overrides variables which use the config_template task to change template defaults.

Upgrade Notes

  • For the os_swift role, the systemd unit TimeoutSec value which controls the time between sending a SIGTERM signal and a SIGKILL signal when stopping or restarting the service has been reduced from 300 seconds to 120 seconds. This provides 2 minutes for long-lived sessions to drain while preventing new ones from starting before a restart or a stop. The RestartSec value which controls the time between the service stop and start when restarting has been reduced from 150 seconds to 2 seconds to make the restart happen faster. These values can be adjusted by using the swift_*_init_config_overrides variables which use the config_template task to change template defaults.

14.0.5

New Features

  • Swift versioned_writes middleware is added to the pipeline by default. Additionally the allow_versioned_writes settings in the middleware configuration is set to True. This follows the Swift defaults, and enables the use of the X-History-Location metadata Header.

14.0.4

Upgrade Notes

  • The variables swift_requirements_git_repo and swift_requirements_git_install_branch have been removed in favour of using the URL/path to the upper-constraints file using the variable pip_install_upper_constraints instead.

14.0.0

New Features

  • The os_swift role now supports the ability to configure whether apt/yum tasks install the latest available package, or just ensure that the package is present. The default action is to ensure that the latest package is present. The action taken may be changed to only ensure that the package is present by setting swift_package_state to present.

  • The fallocate_reserve` option can now be set (in bytes or as a percentage) for swift by using the ``swift_fallocate_reserve variable in /etc/openstack_deploy/user_variables.yml. This value is the amount of space to reserve on a disk to prevent a situation where swift is unable to remove objects due to a lack of available disk space to work with. The default value is 1% of the total disk size.

  • The openstack-ansible-os_swift role will now prevent deployers from changing the swift_hash_path_prefix and swift_hash_path_suffix variables on clusters that already have a value set in /etc/swift/swift.conf. You can set the new swift_force_change_hashes variable to True to force the swift_hash_path_ variables to be changed. We recommend setting this by running the os-swift.yml playbook with -e swift_force_change_hashes=True, to avoid changing the swift_hash_path_ variables unintentionally. Use with caution, changing the swift_hash_path_ values causes end-user impact.

  • The os_swift role has 3 new variables that will allow a deployer to change the hard, soft and fs.file-max limits. the hard and soft limits are being added to the limits.conf file for the swift system user. The fs.file-max settings are added to storage hosts via kernel tuning. The new options are swift_hard_open_file_limits with a default of 10240 swift_soft_open_file_limits with a default of 4096 swift_max_file_limits with a default of 24 times the value of swift_hard_open_file_limits.

  • The pretend_min_part_hours_passed option can now be passed to swift-ring-builder prior to performing a rebalance. This is set by the swift_pretend_min_part_hours_passed boolean variable. The default for this variable is False. We recommend setting this by running the os-swift.yml playbook with -e swift_pretend_min_part_hours_passed=True, to avoid resetting min_part_hours unintentionally on every run. Setting swift_pretend_min_part_hours_passed to True will reset the clock on the last time a rebalance happened, thus circumventing the min_part_hours check. This should only be used with extreme caution. If you run this command and deploy rebalanced rings before a replication pass completes, you may introduce unavailability in your cluster. This has an end-user imapct.

  • While default python interpreter for swift is cpython, pypy is now an option. This change adds the ability to greatly improve swift performance without the core code modifications. These changes have been implemented using the documentation provided by Intel and Swiftstack. Notes about the performance increase can be seen here.

  • Change the port for devices in the ring by adjusting the port value for services, hosts, or devices. This will not involve a rebalance of the ring.

  • Changing the port for a device, or group of devices, carries a brief period of downtime to the swift storage services for those devices. The devices will be unavailable during period between when the storage service restarts after the port update, and the ring updates to match the new port.

  • Enable rsync module per object server drive by setting the swift_rsync_module_per_drive setting to True. Set this to configure rsync and swift to utilise individual configuration per drive. This is required when disabling rsyncs to individual disks. For example, in a disk full scenario.

  • The os_swift role will now include the swift “staticweb” middleware by default.

  • The os_swift role now allows the permissions for the log files created by the swift account, container and object servers to be set. The variable is swift_syslog_log_perms and is set to 0644 by default.

Upgrade Notes

  • Installation of swift and its dependent pip packages will now only occur within a Python virtual environment. The swift_venv_enabled, swift_venv_bin variables have been removed.

  • The variable swift_apt_packages has been renamed to swift_distro_packages.

  • The os_swift role always checks whether the latest package is installed when executed. If a deployer wishes to change the check to only validate the presence of the package, the option swift_package_state should be set to present.

  • The swift_fallocate_reserve default value has changed from 10737418240 (10GB) to 1% in order to match the OpenStack swift default setting.

  • A new option swift_pypy_enabled has been added to enable or disable the pypy interpreter for swift. The default is “false”.

  • A new option swift_pypy_archive has been added to allow a pre-built pypy archive to be downloaded and moved into place to support swift running under pypy. This option is a dictionary and contains the URL and SHA256 as keys.

  • The swift_max_rsync_connections default value has changed from 2 to 4 in order to match the OpenStack swift documented value.

  • When upgrading a Swift deployment from Mitaka to Newton it should be noted that the enabled middleware list has changed. In Newton the “staticweb” middleware will be loaded by default. While the change adds a feature it is non-disruptive in upgrades.

Bug Fixes

  • Previously, the ansible_managed var was being used to insert a header into the swift.conf that contained date/time information. This meant that swift.conf across different nodes did not have the same MD5SUM, causing swift-recon --md5 to break. We now insert a piece of static text instead to resolve this issue.

  • The XFS filesystem is excluded from the daily mlocate crond job in order to conserve disk IO for large IOPS bursts due to updatedb/mlocate file indexing.