libglusterfs: Fix incorrect NULL check

Change-Id: I22e1bf1669e639b5097b2b56c90b47e8b733a34d
BUG: 825197
Reviewed-on: http://review.gluster.com/3467
Reviewed-by: Amar Tumballi <amarts@redhat.com>
Tested-by: Gluster Build System <jenkins@build.gluster.com>
Reviewed-by: Anand Avati <avati@redhat.com>
build: Update licensing in buildspec

Change-Id: I1d3348a99dad621608eccb08a71c85766e9ae451
BUG: 820551
Signed-off-by: Vijay Bellur <vijay@gluster.com>
Reviewed-on: http://review.gluster.com/3469
Tested-by: Gluster Build System <jenkins@build.gluster.com>
Reviewed-by: Anand Avati <avati@redhat.com>
storage/posix: readdirp enhancements

- avoid multiple calls to posix_istat(). use cheaper posix_pstat()
- code re-org

Change-Id: I4a2e32626ade49b7d18158952849c6fe7bd6875c
BUG: 816140
Reviewed-on: http://review.gluster.com/3460
Tested-by: Gluster Build System <jenkins@build.gluster.com>
Reviewed-by: Amar Tumballi <amarts@redhat.com>
Reviewed-by: Anand Avati <avati@redhat.com>
nfs/nlm: statedump of locks

This change allows statedump of nlm locks
giving number of clients, number of locks
each client holds and the files on which lock(s)
is/are held.

Change-Id: I6341c12ec58005ef71b93b316b527e610ff7ee8f
BUG: 824804
Signed-off-by: Rajesh Amaravathi <rajesh@redhat.com>
Reviewed-on: http://review.gluster.com/3432
Tested-by: Gluster Build System <jenkins@build.gluster.com>
Reviewed-by: Anand Avati <avati@redhat.com>
glusterd: Run post hooks on a different thread

This change ensures post hooks can 'wait' if need be
and _not_ prevent glusterd from being able to run other operations
meanwhile.

Also ensures that post hook scripts are 'serialized'
between transactions. ie, post hook scripts of txn1 are completed
before post hook scripts of txn2 are started, where txn1 happens before
txn2.

Change-Id: Iaeb676737d8c67e7151127c8d1fd8c2891e10aee
BUG: 806996
Signed-off-by: Krishnan Parthasarathi <kp@gluster.com>
Reviewed-on: http://review.gluster.com/3450
Tested-by: Gluster Build System <jenkins@build.gluster.com>
Reviewed-by: Amar Tumballi <amarts@redhat.com>
Tested-by: Amar Tumballi <amarts@redhat.com>
Reviewed-by: Vijay Bellur <vijay@gluster.com>
swift: Fix for multiple mounts on the same mount point.

When swift server receives multiple requests on a volume and if the
volume is not mounted before hand, for each request swift tries to
mount the GlusterFS volume on the mount point. This process is racy
and may mount multiple times on the same mount point.

Also added a new option object_only in fs.conf which should be enabled
only if the user requires ReST interface and will have better performance.
By default it is set "off".

Change-Id: Ie1718554c5aaf577e823bbd84da8e78d803e954d
BUG: 821310
Signed-off-by: Mohammed Junaid <junaid@redhat.com>
Reviewed-on: http://review.gluster.com/3477
Tested-by: Gluster Build System <jenkins@build.gluster.com>
Reviewed-by: Vijay Bellur <vijay@gluster.com>
server protocol : logging and negative case logic fixes

* log 'resolve' gfid, instead of inode gfid, which fails to log
  for everything which fails to resolve.

* in case of 'op_ret == -1' never look into xdata or any other
  argument.

* bring uniformity in the _cbk() code.

BUG: 821139

This patch is not complete fix for above mentioned bug, but is
useful the debug it properly

Change-Id: I159becdde70720cba072e494f70951395dc6868f
Signed-off-by: Amar Tumballi <amarts@redhat.com>
Reviewed-on: http://review.gluster.com/3437
Tested-by: Gluster Build System <jenkins@build.gluster.com>
Reviewed-by: Anand Avati <avati@redhat.com>
performance/md-cache: make cache timeout reconfigurable via cli

Change-Id: I73685bf73a14435884d3489343bbe71c331eb2a5
BUG: 825638
Signed-off-by: Raghavendra Bhat <raghavendra@redhat.com>
Reviewed-on: http://review.gluster.com/3458
Tested-by: Gluster Build System <jenkins@build.gluster.com>
Reviewed-by: Amar Tumballi <amarts@redhat.com>
Reviewed-by: Anand Avati <avati@redhat.com>
glusterd: change working-directory from /etc/glusterd to /var/lib/glusterd

as it is changed in RPM based install (using spec file), makes sense to do
it everywhere, even in source install

Change-Id: Ibe5ebd860b1529aca295b79d683a3b2e6797506c
Signed-off-by: Amar Tumballi <amar@gluster.com>
BUG: 824231
Reviewed-on: http://review.gluster.com/3338
Tested-by: Gluster Build System <jenkins@build.gluster.com>
Reviewed-by: Vijay Bellur <vijay@gluster.com>
fuse: make SELinux support configurable

Make support for SELinux labels (extended attributes) configurable
and disabled by default as it can cause significant performance
penalty when enabled (it need not be enabled unless specially crafted
policies are set -- which is not by default)

Change-Id: I97bc4b1c26cf055fd520e9bf2d49e52b14fe7515
BUG: 811217
Signed-off-by: Anand Avati <avati@redhat.com>
Reviewed-on: http://review.gluster.com/3484
Tested-by: Gluster Build System <jenkins@build.gluster.com>
Reviewed-by: Amar Tumballi <amarts@redhat.com>
protocol: do not log getxattr/ENODATA as warning

When SELinux is enabled, most of the files do not have labels and
result is a ton of unnecessary logs

Change-Id: I0e781e2fb6bcfb3fb12298175a41f7b981af9c39
BUG: 811217
Signed-off-by: Anand Avati <avati@redhat.com>
Reviewed-on: http://review.gluster.com/3486
Tested-by: Gluster Build System <jenkins@build.gluster.com>
Reviewed-by: Amar Tumballi <amarts@redhat.com>
logging: change the 'logfile' value in a locked region

'logfile' is a global variable, and it can change if log-rotate
command is issued. currently 'fprintf(logfile)' happens in a
locked region where as the 'fclose(logfile)' can happen outside
the locked region causing racy behavior.

Change-Id: I40871e5c365303b7c602e2c302b085d64f6b945f
Signed-off-by: Amar Tumballi <amarts@redhat.com>
BUG: 826032
Reviewed-on: http://review.gluster.com/3493
Tested-by: Gluster Build System <jenkins@build.gluster.com>
Reviewed-by: Anand Avati <avati@redhat.com>
glusterd: cut out a standalone socket path calculation routine

Change-Id: If5f196c9154ea59e37b83d3e4cad445fee6e9d45
BUG: 826512
Signed-off-by: Csaba Henk <csaba@redhat.com>
Reviewed-on: http://review.gluster.com/3490
Tested-by: Gluster Build System <jenkins@build.gluster.com>
Reviewed-by: Pranith Kumar Karampuri <pranithk@gluster.com>
glusterd-hooks: added support for separate namespace for 'volume set' keys

The keys in the above mentioned namespace could be used by hook
scripts to peform tasks on 'special' keys as defined by the storage
admin. The choice of the key and its semantics of it are outside
the scope of glusterd. It is the responsibility of the storage admin
to keep the meaning of the key(s) consistent.

If a user gives a command like

 'gluster volume set <VOLNAME> user.for-this-key do-this"

scripts would get 'user.for-this-key=do-this' as argument.

Change-Id: I5509e17d99e4ddd8bf5df968dcd51ff9a80dc3ab
Signed-off-by: Amar Tumballi <amarts@redhat.com>
BUG: 825902
Reviewed-on: http://review.gluster.com/3443
Tested-by: Gluster Build System <jenkins@build.gluster.com>
Reviewed-by: Krishnan Parthasarathi <kp@gluster.com>
Reviewed-by: Anand Avati <avati@redhat.com>
storage/posix: Move landfill inside .glusterfs

Change-Id: Ia2944f891dd62e72f3c79678c3a1fed389854a90
BUG: 811970
Signed-off-by: Pranith Kumar K <pranithk@gluster.com>
Reviewed-on: http://review.gluster.com/3158
Tested-by: Gluster Build System <jenkins@build.gluster.com>
Reviewed-by: Anand Avati <avati@redhat.com>
storage/posix: Prevent gfid handle leaks

The case which can lead to gfid handle leaks:
Self-heal removes directory '/d' with 10 files in it, in brick b1.
This dir is renamed to <landfill>/<hashval of '<brick-path>/d'>
by posix. Before the janitor thread could remove the directory,
self-heal could remove another directory with same path '/d'.
Then again the rename to same path is done by posix as before.
The gfid-handles of the old '/d', 10 files in it are not unlinked.

To prevent such problems, rename the directory to be removed to
<landfill>/<gfid-str>.

Change-Id: Iad13708e1ebcc5222b64c058aa9a2d372e1bfa5b
BUG: 811970
Signed-off-by: Pranith Kumar K <pranithk@gluster.com>
Reviewed-on: http://review.gluster.com/3159
Tested-by: Gluster Build System <jenkins@build.gluster.com>
Reviewed-by: Anand Avati <avati@redhat.com>
mgmt/glusterd: Do shd validation for replicate volumes

Staging needs to build graphs for replicate volumes in stopped
state as well.
Change-Id: I6474cd0fc43c9fa1916826d4a452f301fe7fe811
BUG: 823128
Signed-off-by: Pranith Kumar K <pranithk@gluster.com>
Reviewed-on: http://review.gluster.com/3489
Tested-by: Gluster Build System <jenkins@build.gluster.com>
Reviewed-by: Csaba Henk <csaba@redhat.com>
Reviewed-by: Anand Avati <avati@redhat.com>
distribute: support user-specified layouts.

The new type is DHT_HASH_TYPE_DM_USER=1 (on disk in network byte order) and
we treat it the same as DHT_HASH_TYPE_DM except that we don't stomp on it
during rebalance.

Change-Id: I893571a9b89577acdea2fe868915b18d3663fd77
BUG: 807312
Signed-off-by: Jeff Darcy <jdarcy@redhat.com>
Reviewed-on: http://review.gluster.com/3004
Tested-by: Gluster Build System <jenkins@build.gluster.com>
Reviewed-by: Anand Avati <avati@redhat.com>
replicate: add hashed read-child method.

Both the first-to-respond method and the round-robin method are susceptible
to clients repeatedly choosing the same servers across a series of opens,
creating hot spots.  Also, the code to handle a replica being down will
ignore both methods and just choose the first remaining (which is not an
issue for two-way but can be otherwise).  The hashed method more reliably
avoids such hot spots.  There are three values/modes.

0: use the old (broken) methods.

1: select a read-child based on a hash of the file's GFID, so all clients
   will choose the same subvolume for a file (ensuring maximum consistency)
   but will distribute load for a set of files.

2: select a read-child based on a hash of the file's GFID plus the client's
   PID, so different children will distribute load even for one file.

Mode 2 will probably be optimal for most cases.  Using response time when we
open the file is problematic, both because a single sample might not have
been representative even then and because load might have shifted in the
hours or days since (for long-lived files).  Trying to use more current load
information can lead to "herd following" behavior which is just as bad.
Pseudo-random distribution is likely to be the best we can reasonably do,
just as it is for DHT.

Change-Id: I798c2760411eacf32e82a85f03bb7b08a4a49461
BUG: 802513
Signed-off-by: Jeff Darcy <jdarcy@redhat.com>
Reviewed-on: http://review.gluster.com/2926
Tested-by: Gluster Build System <jenkins@build.gluster.com>
Reviewed-by: Anand Avati <avati@redhat.com>
cluster/distribute: set the inode layout in readdirp_cbk() for files

with this, inode-linking it in readdirp_cbk will be neater.

Change-Id: Ie2cd646438f851e1755e9b6a3fc9898059bee359
Signed-off-by: Amar Tumballi <amar@gluster.com>
BUG: 816140
Reviewed-on: http://review.gluster.com/2717
Tested-by: Gluster Build System <jenkins@build.gluster.com>
Reviewed-by: Jeff Darcy <jdarcy@redhat.com>
Reviewed-by: Anand Avati <avati@redhat.com>