# Release notes for Gluster 5.0 This is a major release that includes a range of code improvements and stability fixes among a few features as noted below. A selection of the key features and changes are documented on this page. A full list of bugs that have been addressed is included further below. - [Announcements](#announcements) - [Major changes and features](#major-changes-and-features) - [Major issues](#major-issues) - [Bugs addressed in the release](#bugs-addressed) ## Announcements 1. Releases that receive maintenance updates post release 5 are, 4.1 ([reference](https://www.gluster.org/release-schedule/)) **NOTE:** 3.12 long term maintenance release, will reach end of life (EOL) with the release of 5.0. ([reference](https://www.gluster.org/release-schedule/)) 2. Release 5 will receive maintenance updates around the 10th of every month for the first 3 months post release (i.e Nov'18, Dec'18, Jan'18). Post the initial 3 months, it will receive maintenance updates every 2 months till EOL. ([reference](https://lists.gluster.org/pipermail/announce/2018-July/000103.html)) ## Major changes and features Features are categorized into the following sections, - [Management](#management) - [Standalone](#standalone) ### Management #### GlusterD2 > **IMP:** GlusterD2 in Gluster-5 is still considered a preview and is > experimental. It should not be considered ready for production use. Users > should still expect some breaking changes even though all efforts would be > taken to ensure that these can be avoided. As GD2 is still under heavy > development, new features can be expected throughout the Gluster 5 release. The following major changes have been committed to GlusterD2 since v4.1.0. 1. Volume snapshots : Most snapshot operations are available including create, delete, activate, deactivate, clone and restore. 2. Volume heal: Support for full heal and index heal for replicate volumes has been implemented. 3. Tracing with Opencensus: Support for tracing distributed operations has been implemented in GD2, using the Opencensus API. Tracing instrumentation has been done for volume create, list and delete operations. Other operations will follow subsequently. 4. Portmap refactoring: Portmap in GlisterD2 no longer selects a port for the bricks to listen on, instead leaving the choice upto the bricks. Portmap only saves port information provided by brick during signin. 5. Smartvol API merged with volume create API: The smart volume API which allows user to create a volume by just specifying a size has been merged with the normal volume create API. 6. Configure GlusterD2 with environment variables: In addition to CLI flags, and the config file, GD2 configuration options can be set using environment variables. In addition to the above, many changes have been merged for minor bug-fixes and to help with testing. Refer to the user [documentation](https://github.com/gluster/glusterd2#documentation) section for details on how to get started with GlusterD2. ### Standalone #### 1. Entry creation and handling, consistency is improved The dentry serializer feature was introduced in Gluster 4.0, to strengthen the consistency handling of entry operations in the Gluster stack. Entry operations refer to creating, linking, renaming and unlinking of files and directory names into the filesystem space. When this feature was first introduced (in 4.0) it was optional, with this release this feature is enabled by default. #### 2. Python code in Gluster packages is Python 3 ready #### 3. Quota fsck script to correct quota accounting See usage documentation [here](https://github.com/gluster/glusterfs/issues/390#issuecomment-389794575) #### 4. Added noatime option in utime xlator Enabling the utime and ctime feature, enables Gluster to maintain consistent change and modification time stamps on files and directories across bricks. The utime xlator is enhanced with a noatime option and is set by default to enabled, when the utime feature is enabled. This helps to ignore atime updates for operations that change may trigger an atime update on the file system objects. To enable the feature use, ``` # gluster volume set features.utime on # gluster volume set features.ctime on ``` #### 5. Added ctime-invalidation option in quick-read xlator Quick-read xlator by default uses mtime (files last modification time) to identify changes to file data. However, there are applications, like rsync, which explicitly set mtime making it unreliable for the purpose of identifying changes to the file content. Since ctime (files last status change time) also changes when content of a file changes and cannot be set explicitly by applications, it becomes a more reliable source to identify staleness of cached data. The ctime-invalidation option makes quick-read to prefer ctime over mtime to validate staleness of its cache. To enable this option use, ``` # gluster volume set ctime-invalidation on ``` **NOTE:** Using ctime can result in false positives as ctime is updated even on attribute changes, like mode bits, without changes to file data. As a result this option is recommended in situations where mtime is not reliable. #### 6. Added shard-deletion-rate option in shard xlator The `shard-deletion-rate` option is introduced, to configure the number of shards to delete in parallel when a file that is sharded is deleted. The default value is set at 100, but can be increased to delete more shards in parallel for faster space reclamation. To change the defaults for this option use, ``` # gluster volume set shard-deletion-rate ``` **NOTE:** The upper limit is unbounded, use it with caution as a very large number will cause lock contention on the bricks. As an example, during testing, an upper limit of 125000 was enough to cause timeouts and hangs in the gluster processes due to lock contention. #### 7. Removed last usage of MD5 digest in code, towards better FIPS compliance In an effort to ensure that Gluster can be installed and deployed on machines that are compliant with the requirements for FIPS, remaining uses of MD5 digest is removed from the code base. Addressing this feature's requirements was initiated during the 4.0 release, at which point enabling user space snapshots, which still used MD5 for certain needs, broke the FIPS compliance requirements. This limitation is now addressed in this release. #### 8. Code improvements Over the course of this release, the contributors have been active in addressing various Coverity issues, GCC and clang warnings, clang formatting of the code base, micro improvements to GLibC API usage and memory handling around string handling and allocation routines. The above are ongoing efforts, but major strides were made during this release to actively address code quality in these areas. ## Major issues 1. The following options are removed from the code base and require to be unset before an upgrade from releases older than release 4.1.0, - features.lock-heal - features.grace-timeout To check if these options are set use, ``` # gluster volume info ``` and ensure that the above options are not part of the `Options Reconfigured:` section in the output of all volumes in the cluster. If these are set, then unset them using the following commands, ``` # gluster volume reset