Chapter 3. Notable Bug Fixes

This chapter describes bugs fixed in this release of Red Hat Gluster Storage that have significant impact on users.

Note

Bugzilla IDs that are not hyperlinked are private bugs that have potentially sensitive data attached.

common-ha

BZ#1426523
Stale export entries were not cleaned up correctly from the ganesha.conf file when NFS-Ganesha was disabled; this has now been corrected so that stale export entries are removed.
BZ#1441055
During NFS-Ganesha cluster setup, the pcsd service first destroyed any existing cluster, which disabled the pacemaker service. This meant that the pacemaker service did not start automatically after a reboot. The pacemaker service is now explicitly re-enabled after successful NFS-Ganesha cluster setup, and the pacemaker service is started automatically after node reboot.

core

BZ#1449684
Previously, certain FOPs (fentrylk, rchecksum, seek, lease, getactivelk, setactivelk, compound fops) were missing from volume profile info output. These are now captured as expected.

distribute

BZ#1260779
The getfattr -n replica.split-brain-status path-to-dir command now shows accurate split brain status.
BZ#1381142
Rebalance throttling previously had three modes; however, two of these modes had similar performance because of bottlenecks in thread management. This has been corrected. In addition, rebalance throttling can now be configured by specifying a number of migration threads to use as well as with the previous lazy, normal, and aggressive modes.
BZ#1409474
A bug in the remove-brick code can cause file migration on some files with multiple hard links to fail. Files may be left behind on the removed brick. These will not be available on the gluster volume once the remove-brick operation is committed.
Workaround: Once the remove-brick operation is complete, check for any files left behind on the removed bricks and copy them to the volume via a mount point.
BZ#1411352
Renaming a file could result in duplicate files if multiple clients had caching enabled. This occurred because the lookup operation to verify file existence on the volume was based on the file's GFID and therefore always succeeded. The lookup is now based on the file's name instead of GFID, and duplicates no longer occur in this situation.
BZ#1442943
The maximum block size for rebalance operations (DHT_REBALANCE_BLKSIZE) has been increased to 1MB from the previous value of 128KB in order to improve rebalance operation time for large files.
BZ#1445195
Directories that contained only link to files appeared empty when accessed through the mount point. This meant that when users attempted to remove these directories using rmdir, the remove operation failed with a 'Directory not empty' error. The rmdir operation has been updated to check for and delete all stale link to files in an otherwise empty directory, and now removes the directory as expected in this circumstance.

geo-replication

BZ#1414750
Geo-replication workers now have separate slave mount logs to make debugging easier. Log files are named according to the following format:
master_volume-uuid:master-host:master-brickpath:slavevol.gluster.log

gluster-nfs

BZ#1372283
Sub directories of a volume can now be mounted on Solaris 10 clients using WebNFS.

glusterd

BZ#1351185
The output of the gluster volume status volname clients command has been enhanced to show client operating versions so that compatibility is easier to determine. This works only for clients using Red Hat Gluster Storage 3.3 or higher.

glusterfs

BZ#1445570
Access to the /var/run/gluster/ directory is typically restricted. As a result, attempting to write a state dump to this directory fails. To write to this location, ensure that the user that runs the application is added to the 'gluster' user group, and restart gluster processes so that the new group is applied.

io-cache

BZ#1435357
The ioc_inode_wakeup process did not lock the ioc_inode queue. This meant that the ioc_prune process could free a structure that ioc_inode_wakeup later attempted to access, resulting in an unexpected termination of the gluster mount process. The ioc_inode queue is now locked during access so that this issue cannot occur.

libgfapi

BZ#1378085
The statedump feature now supports gathering information from gfapi applications.

quota

BZ#1414758
Quota list and limit commands now create and destroy aux mounts each time they are run to reduce the risk of encountering stale mount points. Additionally, a separate mount point is now used for list and limit commands in order to avoid issues when these commands are run in parallel.

replicate

BZ#1315781
The rebalance process uses an extended attribute to determine which node migrates a file. In replicated and erasure-coded (dispersed) volumes, only the first node of a replica set was listed in this attribute, so only the first node of a replica set migrated files. Replicated and erasure-coded volumes now list all nodes in a replica set, ensuring that rebalance processes on all nodes migrate files as expected.

sharding

BZ#1447959
The checksum of a file could change when it was copied from a local file system to a volume with sharding enabled. If write and truncate operations were in progress simultaneously, the aggregated size was calculated incorrectly, resulting in a changed checksum. Aggregated file size is now calculated correctly in this circumstance.

snapshot

BZ#1309209
The names and locations of previously cloned and deleted volumes were not cleaned up correctly. This meant that creating a clone with the same name as a previously deleted clone failed with a 'Commit failed' message. Cleanup is now handled correctly and the same name can be used for a clone in this situation.

write-behind

BZ#1297743
The write-behind-window-size parameter was not validated correctly, and could be set to a value greater than its allowed maximum. This has been corrected so that only valid values (524288 - 1073741824) can be set.

gdeploy

BZ#1417596
Previously, checking for the gdeploy version would end up exiting if PyYAML package was not installed. Now PyYAML package check is not done for commands like --version or -- help.
BZ#1394796
With this release, volname is made optional while creating NFS Ganesha cluster, which was mandatory before. You might want to create a NFS Ganesha cluster without exporting or building any volumes i.e. creating a cluster without having any gluster volume.
BZ#1405966
Previously, gdeploy would fail if a subscribed user tries to subscribe again as subscription-manager would report error stating user already subscribed. Since the failure did not report to anything fatal, it can be ignored. Users can also debug in case they face any genuine subscription-manager error.
BZ#1452001
Previously, script module was used which would result in gdeploy failure if NFS-Ganesha packages are not installed in the local system. From this release onward, shell module will be used which runs gdeploy without having the packages installed on the local system.

nfs-ganesha

BZ#1421130
This rebase includes the following enhancements:
  • Rebase package(s) to version:
    • nfs-ganesha-2.4.4
    • nfs-ganesha-gluster-2.4.4
    • nfs-ganesha-debuginfo-2.4.4
  • Includes the dynamic update export feature.
BZ#1425753
When multiple paths with the same parent volume are exported via NFS-Ganesha, the handles maintained by the server of the files/directories common to those paths would get merged. Due to this, unexporting one of those shares may result in segmentation fault of the server when accessed via another share mount-.
With this fix, the refcount of such shared objects is maintained and are released only when all the exports accessing them are unexported. There is hence no issues accessing one share while unexporting another one which shares the same parent volume.
BZ#1451981
The NFS-Ganesha configuration file is stored in shared storage and if the shared storage is not mounted, then the NFS-Ganesha service will not start.
With this fix, system init scripts have been defined and updated to make sure that shared storage is mounted before starting the NFS-Ganesha service and NFS-Ganesha will start post reboot.

samba

BZ#1428368 and BZ#1436265
In the samba configuration, by default the 'posix locking' is enabled and 'stat cache' is disabled. Enabling 'posix locking' sends the file lock request to the bricks too, and disabling 'stat cache' blocks samba to cache certain information at the samba layer. This led to decrease in performance of SMB access of Red Hat Gluster Storage volumes.
As a fix, the following two options are included in the Samba configuration file:
  • posix locking = No
  • stat cache = Yes
Due to this, a slight improvement in the performance is observed.

vulnerability

BZ#1429472
A race condition was found in samba server. A malicious samba client could use this flaw to access files and directories, in areas of the server file system not exported under the share definitions.
BZ#1459464
A flaw was found in the way Samba handled dangling symlinks. An authenticated malicious Samba client could use this flaw to cause the smbd daemon to enter an infinite loop and use an excessive amount of CPU and memory.

gluster-nagios-addons

BZ#1425724 and BZ#1451997
Gluster monitoring stops working when the default NRPE config file is overwritten due to use of configuration management tools. With this update, the gluster command definitions are moved to a custom folder. Hence, the Gluster command definitions are retained and they are not affected by multiple tools writing to the default NRPE config file.

gluster-swift

BZ#1447684 and BZ#1451998
Previously, volume names with underscore symbol [ _ ] could not be used, as swift-gen-builders syntax recognized underscore symbol as a delimiter for device and metadata. With this update, you can now use a verbose syntax with swift-gen-builders and volume names can now contain underscores.

gstatus

BZ#1458249
Previously, gstatus expected the PATH environment variable to be set, and ran the executable using only the executable name. This meant that when the PATH variable was reset to an empty string, the cluster executable could not be located and gstatus failed with an IOError. gstatus now ensures that the environment path is set so that executables can be located in this situation.
BZ#1454544
In deployments with a very large number of volumes, gstatus timed out before it was able to finish gathering data and generating a status report. When this happened, the status report was not provided to users. The timeout value for this process has been increased so that this issue no longer occurs.