<feed xmlns='http://www.w3.org/2005/Atom'>
<title>glusterfs.git/libglusterfs/src/common-utils.c, branch v3.5qa2</title>
<subtitle></subtitle>
<link rel='alternate' type='text/html' href='http://git.gluster.org/cgit/glusterfs.git/'/>
<entry>
<title>core: add dht_is_linkfile helper procedure.</title>
<updated>2013-11-26T18:26:44+00:00</updated>
<author>
<name>Raghavendra G</name>
<email>rgowdapp@redhat.com</email>
</author>
<published>2013-11-14T11:40:09+00:00</published>
<link rel='alternate' type='text/html' href='http://git.gluster.org/cgit/glusterfs.git/commit/?id=1a2f51144fcbd920a6f3769d6b2f3ceeefdc220d'/>
<id>1a2f51144fcbd920a6f3769d6b2f3ceeefdc220d</id>
<content type='text'>
components other than distribute (like marker to exclude linkfiles
from being accounted) also need awareness of what constitutes a
linkfile. Hence its good to separate out this functionality into
core.

Change-Id: Ib944eeacc991bb1de464c9e73ee409fc7a689ff1
BUG: 1022995
Signed-off-by: Raghavendra G &lt;rgowdapp@redhat.com&gt;
Reviewed-on: http://review.gluster.org/6152
Tested-by: Gluster Build System &lt;jenkins@build.gluster.com&gt;
Reviewed-by: Anand Avati &lt;avati@redhat.com&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
components other than distribute (like marker to exclude linkfiles
from being accounted) also need awareness of what constitutes a
linkfile. Hence its good to separate out this functionality into
core.

Change-Id: Ib944eeacc991bb1de464c9e73ee409fc7a689ff1
BUG: 1022995
Signed-off-by: Raghavendra G &lt;rgowdapp@redhat.com&gt;
Reviewed-on: http://review.gluster.org/6152
Tested-by: Gluster Build System &lt;jenkins@build.gluster.com&gt;
Reviewed-by: Anand Avati &lt;avati@redhat.com&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>cli/glusterd: Changes to quota command Quota feature</title>
<updated>2013-11-26T18:25:27+00:00</updated>
<author>
<name>Raghavendra G</name>
<email>rgowdapp@redhat.com</email>
</author>
<published>2013-11-14T11:35:26+00:00</published>
<link rel='alternate' type='text/html' href='http://git.gluster.org/cgit/glusterfs.git/commit/?id=0d5cd92f51c02b8d664000b5a2d22a2ddbbc23b6'/>
<id>0d5cd92f51c02b8d664000b5a2d22a2ddbbc23b6</id>
<content type='text'>
 re-work.

Following are the cli commands that are new/re-worked:
======================================================

volume quota &lt;VOLNAME&gt; {enable|disable|list [&lt;path&gt; ...]|remove &lt;path&gt;| default-soft-limit &lt;percent&gt;} |
volume quota &lt;VOLNAME&gt; {limit-usage &lt;path&gt; &lt;size&gt; [&lt;percent&gt;]} |
volume quota &lt;VOLNAME&gt; {alert-time|soft-timeout|hard-timeout} {&lt;time&gt;}
volume status [all | &lt;VOLNAME&gt; [nfs|shd|&lt;BRICK&gt;|quotad]] [detail|clients|mem|inode|fd|callpool]
volume statedump &lt;VOLNAME&gt; [nfs|quotad] [all|mem|iobuf|callpool|priv|fd|inode|history]

glusterd changes:
=================
* Quota limits are now set as extended attributes by glusterd from
  the aux mount created by the cli.
* The gfids of the directories on which quota limits are set
  for a given volume are stored in
  /var/lib/glusterd/vols/&lt;volname&gt;/quota.conf file in binary format,
  and whose cksum and version is stored in
  /var/lib/glusterd/vols/&lt;volname&gt;/quota.cksum.

Original-author: Krutika Dhananjay &lt;kdhananj@redhat.com&gt;
Original-author: Krishnan Parthasarathi &lt;kparthas@redhat.com&gt;

BUG: 969461
Change-Id: If32bba36c67f9c2a30417af9c6389045b2b7c13b
Signed-off-by: Krutika Dhananjay &lt;kdhananj@redhat.com&gt;
Signed-off-by: Raghavendra G &lt;rgowdapp@redhat.com&gt;
Reviewed-on: http://review.gluster.org/6003
Tested-by: Gluster Build System &lt;jenkins@build.gluster.com&gt;
Reviewed-by: Anand Avati &lt;avati@redhat.com&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
 re-work.

Following are the cli commands that are new/re-worked:
======================================================

volume quota &lt;VOLNAME&gt; {enable|disable|list [&lt;path&gt; ...]|remove &lt;path&gt;| default-soft-limit &lt;percent&gt;} |
volume quota &lt;VOLNAME&gt; {limit-usage &lt;path&gt; &lt;size&gt; [&lt;percent&gt;]} |
volume quota &lt;VOLNAME&gt; {alert-time|soft-timeout|hard-timeout} {&lt;time&gt;}
volume status [all | &lt;VOLNAME&gt; [nfs|shd|&lt;BRICK&gt;|quotad]] [detail|clients|mem|inode|fd|callpool]
volume statedump &lt;VOLNAME&gt; [nfs|quotad] [all|mem|iobuf|callpool|priv|fd|inode|history]

glusterd changes:
=================
* Quota limits are now set as extended attributes by glusterd from
  the aux mount created by the cli.
* The gfids of the directories on which quota limits are set
  for a given volume are stored in
  /var/lib/glusterd/vols/&lt;volname&gt;/quota.conf file in binary format,
  and whose cksum and version is stored in
  /var/lib/glusterd/vols/&lt;volname&gt;/quota.cksum.

Original-author: Krutika Dhananjay &lt;kdhananj@redhat.com&gt;
Original-author: Krishnan Parthasarathi &lt;kparthas@redhat.com&gt;

BUG: 969461
Change-Id: If32bba36c67f9c2a30417af9c6389045b2b7c13b
Signed-off-by: Krutika Dhananjay &lt;kdhananj@redhat.com&gt;
Signed-off-by: Raghavendra G &lt;rgowdapp@redhat.com&gt;
Reviewed-on: http://review.gluster.org/6003
Tested-by: Gluster Build System &lt;jenkins@build.gluster.com&gt;
Reviewed-by: Anand Avati &lt;avati@redhat.com&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>features/quota: Improvements to quota</title>
<updated>2013-11-26T18:24:02+00:00</updated>
<author>
<name>Raghavendra G</name>
<email>rgowdapp@redhat.com</email>
</author>
<published>2013-09-16T12:16:50+00:00</published>
<link rel='alternate' type='text/html' href='http://git.gluster.org/cgit/glusterfs.git/commit/?id=ab3ab1978a4768e9eed8e23b47e72b25046e607a'/>
<id>ab3ab1978a4768e9eed8e23b47e72b25046e607a</id>
<content type='text'>
* Two stages of quota enforcement is done:

  Soft and hard quota Upon reaching soft quota limit on the directory
  it logs/alerts in the quota daemon log (ie DEFAULT_LOG_DIR/quotad.log)
  and no more writes allowed after hard
  quota limit. After reaching the soft-limit the daemon alerts the
  user/admin repeatively for every 'alert-time', which is
  configurable.

* Quota enforcer is moved to server-side.

  It  takes care of enforcing quota. Since enforcer doesn't have the
  cluster view, it relies on another service called
  quota-aggregator. Aggregator, on query can return the size of a
  directory based on the cluster view.

  Enforcer is always loaded in the server graph and is by passed if
  the feature is not enabled.

  Options specific to enforcer:

  server-quota - Specifies whether the feature is on/off. It is used
  to by pass the quota if turned off.

  deem-statfs - If set to on, it takes quota limits into consideration
  while estimating fs size. (df command). The algorithm followed is,
  i.   Adjust statvfs based on limit configured on root.
  ii.  If limit is set on the inode passed, use size/limits on that inode to
       populate statvfs. Otherwise, use size/limits configured on root.
  iii. Upon statvfs, update the ctx-&gt;size on the inode.
  iv.  Don't let DHT aggregate, instead take the maximum of the usages from the
       subvols of the DHT, since each of it contains the complete information.

  Enforcer also makes use of gfid-to-path conversion functionality to
  work correctly when a client like nfs predominently relies on
  nameless lookups.

* Quota Aggregator acts as a thin client to provide cluster view

  Its a lightweight *gluster client* process with no mount point,
  started upon enabling quota or restarting the volume. This is a
  single process run on each brick, which can answer queries on all
  volumes in the cluster. Its volfile stored in
  GLUSTERD_DEFAULT_WORKING_DIR/quotad/quotad.vol.

Credits:
Raghavendra Bhat        &lt;rabhat@redhat.com&gt;
Varun Shastry           &lt;vshastry@redhat.com&gt;
Shishir Gowda           &lt;sgowda@redhat.com&gt;
Kruthika Dhananjay      &lt;kdhananj@redhat.com&gt;
Brian Foster            &lt;bfoster@redhat.com&gt;
Krishnan Parthasarathi  &lt;kparthas@redhat.com&gt;

Change-Id: Id1cb25b414951da34c665a55f77385d482e0f9de
BUG: 969461
Signed-off-by: Raghavendra G &lt;rgowdapp@redhat.com&gt;
Reviewed-on: http://review.gluster.org/5952
Tested-by: Gluster Build System &lt;jenkins@build.gluster.com&gt;
Reviewed-by: Anand Avati &lt;avati@redhat.com&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
* Two stages of quota enforcement is done:

  Soft and hard quota Upon reaching soft quota limit on the directory
  it logs/alerts in the quota daemon log (ie DEFAULT_LOG_DIR/quotad.log)
  and no more writes allowed after hard
  quota limit. After reaching the soft-limit the daemon alerts the
  user/admin repeatively for every 'alert-time', which is
  configurable.

* Quota enforcer is moved to server-side.

  It  takes care of enforcing quota. Since enforcer doesn't have the
  cluster view, it relies on another service called
  quota-aggregator. Aggregator, on query can return the size of a
  directory based on the cluster view.

  Enforcer is always loaded in the server graph and is by passed if
  the feature is not enabled.

  Options specific to enforcer:

  server-quota - Specifies whether the feature is on/off. It is used
  to by pass the quota if turned off.

  deem-statfs - If set to on, it takes quota limits into consideration
  while estimating fs size. (df command). The algorithm followed is,
  i.   Adjust statvfs based on limit configured on root.
  ii.  If limit is set on the inode passed, use size/limits on that inode to
       populate statvfs. Otherwise, use size/limits configured on root.
  iii. Upon statvfs, update the ctx-&gt;size on the inode.
  iv.  Don't let DHT aggregate, instead take the maximum of the usages from the
       subvols of the DHT, since each of it contains the complete information.

  Enforcer also makes use of gfid-to-path conversion functionality to
  work correctly when a client like nfs predominently relies on
  nameless lookups.

* Quota Aggregator acts as a thin client to provide cluster view

  Its a lightweight *gluster client* process with no mount point,
  started upon enabling quota or restarting the volume. This is a
  single process run on each brick, which can answer queries on all
  volumes in the cluster. Its volfile stored in
  GLUSTERD_DEFAULT_WORKING_DIR/quotad/quotad.vol.

Credits:
Raghavendra Bhat        &lt;rabhat@redhat.com&gt;
Varun Shastry           &lt;vshastry@redhat.com&gt;
Shishir Gowda           &lt;sgowda@redhat.com&gt;
Kruthika Dhananjay      &lt;kdhananj@redhat.com&gt;
Brian Foster            &lt;bfoster@redhat.com&gt;
Krishnan Parthasarathi  &lt;kparthas@redhat.com&gt;

Change-Id: Id1cb25b414951da34c665a55f77385d482e0f9de
BUG: 969461
Signed-off-by: Raghavendra G &lt;rgowdapp@redhat.com&gt;
Reviewed-on: http://review.gluster.org/5952
Tested-by: Gluster Build System &lt;jenkins@build.gluster.com&gt;
Reviewed-by: Anand Avati &lt;avati@redhat.com&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>NetBSD missing backtrace(3) portability fix</title>
<updated>2013-11-19T21:30:39+00:00</updated>
<author>
<name>Emmanuel Dreyfus</name>
<email>manu@netbsd.org</email>
</author>
<published>2013-11-17T14:05:42+00:00</published>
<link rel='alternate' type='text/html' href='http://git.gluster.org/cgit/glusterfs.git/commit/?id=5d2439657f7f81f1dcdc45e960c91ce4196ae118'/>
<id>5d2439657f7f81f1dcdc45e960c91ce4196ae118</id>
<content type='text'>
Implement backtrace(3) and backtrace_symbols(3) which do not exist in NetBSD
While there, remove duplicate #include &lt;stdio.h&gt;

BUG: 764655
Change-Id: Iccd695765906e085c3f8fcb670506d4fea68fa39
Signed-off-by: Emmanuel Dreyfus &lt;manu@netbsd.org&gt;
Reviewed-on: http://review.gluster.org/6285
Tested-by: Gluster Build System &lt;jenkins@build.gluster.com&gt;
Reviewed-by: Anand Avati &lt;avati@redhat.com&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Implement backtrace(3) and backtrace_symbols(3) which do not exist in NetBSD
While there, remove duplicate #include &lt;stdio.h&gt;

BUG: 764655
Change-Id: Iccd695765906e085c3f8fcb670506d4fea68fa39
Signed-off-by: Emmanuel Dreyfus &lt;manu@netbsd.org&gt;
Reviewed-on: http://review.gluster.org/6285
Tested-by: Gluster Build System &lt;jenkins@build.gluster.com&gt;
Reviewed-by: Anand Avati &lt;avati@redhat.com&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>libglusterfs: Propositions should be logical</title>
<updated>2013-10-22T01:31:58+00:00</updated>
<author>
<name>Harshavardhana</name>
<email>harsha@harshavardhana.net</email>
</author>
<published>2013-10-21T04:45:45+00:00</published>
<link rel='alternate' type='text/html' href='http://git.gluster.org/cgit/glusterfs.git/commit/?id=34990cf1838fe85d995c15ea25bc0f77bfd66ed6'/>
<id>34990cf1838fe85d995c15ea25bc0f77bfd66ed6</id>
<content type='text'>
Mutually exclusive tests shouldn't be
non-contradictory
 -- (A is B) &amp;&amp; (A is not B) is not valid

Change-Id: Icf97d1704fedca4b8eeeb67da8b7d4c8d4b578d5
BUG: 769692
Signed-off-by: Harshavardhana &lt;harsha@harshavardhana.net&gt;
Reviewed-on: http://review.gluster.org/6115
Tested-by: Gluster Build System &lt;jenkins@build.gluster.com&gt;
Reviewed-by: Anand Avati &lt;avati@redhat.com&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Mutually exclusive tests shouldn't be
non-contradictory
 -- (A is B) &amp;&amp; (A is not B) is not valid

Change-Id: Icf97d1704fedca4b8eeeb67da8b7d4c8d4b578d5
BUG: 769692
Signed-off-by: Harshavardhana &lt;harsha@harshavardhana.net&gt;
Reviewed-on: http://review.gluster.org/6115
Tested-by: Gluster Build System &lt;jenkins@build.gluster.com&gt;
Reviewed-by: Anand Avati &lt;avati@redhat.com&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>libglusterfs: Return 'ERANGE' for ASCII string to number system</title>
<updated>2013-10-18T00:05:18+00:00</updated>
<author>
<name>Harshavardhana</name>
<email>harsha@harshavardhana.net</email>
</author>
<published>2013-10-17T04:24:32+00:00</published>
<link rel='alternate' type='text/html' href='http://git.gluster.org/cgit/glusterfs.git/commit/?id=05d8c37c1e1b0554985196d507df3a65c764873b'/>
<id>05d8c37c1e1b0554985196d507df3a65c764873b</id>
<content type='text'>
Using 'EOVERFLOW' should be limited to data structure
alignments not Number systems.

Change-Id: I7d337d414e998c0a729c95661df239e36c753a38
BUG: 1017746
Signed-off-by: Harshavardhana &lt;harsha@harshavardhana.net&gt;
Reviewed-on: http://review.gluster.org/6101
Reviewed-by: Kaushal M &lt;kaushal@redhat.com&gt;
Tested-by: Gluster Build System &lt;jenkins@build.gluster.com&gt;
Reviewed-by: Anand Avati &lt;avati@redhat.com&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Using 'EOVERFLOW' should be limited to data structure
alignments not Number systems.

Change-Id: I7d337d414e998c0a729c95661df239e36c753a38
BUG: 1017746
Signed-off-by: Harshavardhana &lt;harsha@harshavardhana.net&gt;
Reviewed-on: http://review.gluster.org/6101
Reviewed-by: Kaushal M &lt;kaushal@redhat.com&gt;
Tested-by: Gluster Build System &lt;jenkins@build.gluster.com&gt;
Reviewed-by: Anand Avati &lt;avati@redhat.com&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>libglusterfs: Account for overflow in gf_string2bytesize</title>
<updated>2013-10-14T22:00:25+00:00</updated>
<author>
<name>Kaushal M</name>
<email>kaushal@redhat.com</email>
</author>
<published>2013-10-10T11:50:57+00:00</published>
<link rel='alternate' type='text/html' href='http://git.gluster.org/cgit/glusterfs.git/commit/?id=793f8491789e58791b090a74472959df117e404b'/>
<id>793f8491789e58791b090a74472959df117e404b</id>
<content type='text'>
gf_string2bytesize will now return an error when a value is greater than
UINT64_MAX and set errno to EOVERFLOW. This is needed because casting a
double value greater than UINT64_MAX to uint64_t will convert it to 0.

BUG: 1017746
Change-Id: I6f96efc1e3a1c236685593a6fb7f806a87e46019
Signed-off-by: Kaushal M &lt;kaushal@redhat.com&gt;
Reviewed-on: http://review.gluster.org/6068
Tested-by: Gluster Build System &lt;jenkins@build.gluster.com&gt;
Reviewed-by: Anand Avati &lt;avati@redhat.com&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
gf_string2bytesize will now return an error when a value is greater than
UINT64_MAX and set errno to EOVERFLOW. This is needed because casting a
double value greater than UINT64_MAX to uint64_t will convert it to 0.

BUG: 1017746
Change-Id: I6f96efc1e3a1c236685593a6fb7f806a87e46019
Signed-off-by: Kaushal M &lt;kaushal@redhat.com&gt;
Reviewed-on: http://review.gluster.org/6068
Tested-by: Gluster Build System &lt;jenkins@build.gluster.com&gt;
Reviewed-by: Anand Avati &lt;avati@redhat.com&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>core: block unused signals in created threads</title>
<updated>2013-09-25T08:33:16+00:00</updated>
<author>
<name>Anand Avati</name>
<email>avati@redhat.com</email>
</author>
<published>2013-09-24T16:45:08+00:00</published>
<link rel='alternate' type='text/html' href='http://git.gluster.org/cgit/glusterfs.git/commit/?id=84fa8af38d2eab0f72349abb8136811bd3e96570'/>
<id>84fa8af38d2eab0f72349abb8136811bd3e96570</id>
<content type='text'>
Block all signal except those which are set for explicit handling
in glusterfs_signals_setup(). Since thread spawning code in
libglusterfs and xlators can get called from application threads
when used through libgfapi, it is necessary to do this blocking.

Change-Id: Ia320f80521a83d2edcda50b9ad414583a0175281
BUG: 1011662
Signed-off-by: Anand Avati &lt;avati@redhat.com&gt;
Reviewed-on: http://review.gluster.org/5995
Tested-by: Gluster Build System &lt;jenkins@build.gluster.com&gt;
Reviewed-by: Amar Tumballi &lt;amarts@redhat.com&gt;
Reviewed-by: Vijay Bellur &lt;vbellur@redhat.com&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Block all signal except those which are set for explicit handling
in glusterfs_signals_setup(). Since thread spawning code in
libglusterfs and xlators can get called from application threads
when used through libgfapi, it is necessary to do this blocking.

Change-Id: Ia320f80521a83d2edcda50b9ad414583a0175281
BUG: 1011662
Signed-off-by: Anand Avati &lt;avati@redhat.com&gt;
Reviewed-on: http://review.gluster.org/5995
Tested-by: Gluster Build System &lt;jenkins@build.gluster.com&gt;
Reviewed-by: Amar Tumballi &lt;amarts@redhat.com&gt;
Reviewed-by: Vijay Bellur &lt;vbellur@redhat.com&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>logging: Expose set_log_file_path() in libglusterfs.</title>
<updated>2013-09-24T19:00:54+00:00</updated>
<author>
<name>Vijay Bellur</name>
<email>vbellur@redhat.com</email>
</author>
<published>2013-09-13T09:50:45+00:00</published>
<link rel='alternate' type='text/html' href='http://git.gluster.org/cgit/glusterfs.git/commit/?id=aa971f439d6eef9e52091915ce7ab1127aac1368'/>
<id>aa971f439d6eef9e52091915ce7ab1127aac1368</id>
<content type='text'>
This patch also changes the behavior of glfs_set_logging().
If logfile argument is not provided to glfs_set_logging(),
libgfapi uses set_log_file_path() to create a logfile.

Change-Id: I49ec66c7f16f5604ff2f7cf7b365b08a05b5460d
BUG: 764890
Signed-off-by: Vijay Bellur &lt;vbellur@redhat.com&gt;
Reviewed-on: http://review.gluster.org/5910
Reviewed-by: Anand Avati &lt;avati@redhat.com&gt;
Tested-by: Anand Avati &lt;avati@redhat.com&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
This patch also changes the behavior of glfs_set_logging().
If logfile argument is not provided to glfs_set_logging(),
libgfapi uses set_log_file_path() to create a logfile.

Change-Id: I49ec66c7f16f5604ff2f7cf7b365b08a05b5460d
BUG: 764890
Signed-off-by: Vijay Bellur &lt;vbellur@redhat.com&gt;
Reviewed-on: http://review.gluster.org/5910
Reviewed-by: Anand Avati &lt;avati@redhat.com&gt;
Tested-by: Anand Avati &lt;avati@redhat.com&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>features/changelog: changelog translator</title>
<updated>2013-07-22T08:52:24+00:00</updated>
<author>
<name>Avra Sengupta</name>
<email>asengupt@redhat.com</email>
</author>
<published>2013-06-04T08:50:58+00:00</published>
<link rel='alternate' type='text/html' href='http://git.gluster.org/cgit/glusterfs.git/commit/?id=11f6c56f83b977a08f9d74563249cef59e22a05d'/>
<id>11f6c56f83b977a08f9d74563249cef59e22a05d</id>
<content type='text'>
This is the initial version of the Changelog Translator.

What is it
-----------
Goal is to capture changes performed on a GlusterFS volume.
The translator needs to be loaded on the server (bricks) and
captures changes in a plain text file inside a configured
directory path (controlled by "changelog-dir", should be
somewhere in &lt;export&gt;/.glusterfs/changelog by default).

Changes are classified into 3 types:
    - Data:     : TYPE-I
    - Metadata  : TYPE-II
    - Entry     : TYPE-III

Changelog file is rolled over after a certain time interval
(defauls to 60 seconds) after which a changelog is started.
The thing to be noted here is that for a time interval
(time slice) multiple changes for an inode are recorded only
once (ie. say for 100+ writes on an inode that happens within
the time slice has only a single corresponding entry in the
changelog file). That way we do not bloat up the changelog
and also save lots of writes.

Changelog Format
-----------------
TYPE-I and TYPE-II changes have the gfid on the entity on
which the operation happened. TYPE-III being a entry op
requires the parent gfid and the basename. Changelog format
has been kept to a minimal and it's upto the consumers to
do the heavy loading of figuring out deletes, renames etc..
A single changelog file records all three types of changes,
with each change starting with an identifier ("D": DATA,
"M": METADATA and "E": ENTRY). Option is provided for the
encoding type (See TUNABLES).

Consumers
----------
The only consumer as of today would be geo-replication, although
backup utilities, self-heal, bit-rot detection could be possible
consumers in the future.

CLI
----
By default, change-logging is disabled (the translator is present
in the server graph but does nothing). When enabled (via cli) each
brick starts to log the changes. There are a set of tunable that
can be used to change the translators behaviour:

- enable/disable changelog (disabled by default)
  gluster volume set &lt;volume&gt; changelog {on|off}

- set the logging directory (&lt;brick&gt;/.glusterfs/changelogs is the
  default)
  gluster volume set &lt;volume&gt; changelog-dir /path/to/dir

- select encoding type (binary (default) or ascii)
  gluster volume set &lt;volume&gt; encoding {binary|ascii}

- change the rollover time for the logs (60 secs by default)
  gluster volume set &lt;volume&gt; rollover-time &lt;secs&gt;

- when secs &gt; 0, changelog file is not open()'d with O_SYNC flag
- and fsync is trigerred periodically every &lt;secs&gt; seconds.
  gluster volume set &lt;volume&gt; fsync-interval &lt;secs&gt;

features/changelog: changelog consumer library (libgfchangelog)

A shared library is provided for the consumer of the changelogs
for easy acess via APIs. Application can link against this library
and request for changelog updates. Conversion of binary logs to
human-readable ascii format is also taken care by the library which
keeps a copy of the changelog in application provided working
directory.

Change-Id: I75575fb7f1c53d2bec3dba1a329ea7bb3c628497
BUG: 847839
Original Author: Venky Shankar &lt;vshankar@redhat.com&gt;
Signed-off-by: Avra Sengupta &lt;asengupt@redhat.com&gt;
Reviewed-on: http://review.gluster.org/5127
Tested-by: Gluster Build System &lt;jenkins@build.gluster.com&gt;
Reviewed-by: Vijay Bellur &lt;vbellur@redhat.com&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
This is the initial version of the Changelog Translator.

What is it
-----------
Goal is to capture changes performed on a GlusterFS volume.
The translator needs to be loaded on the server (bricks) and
captures changes in a plain text file inside a configured
directory path (controlled by "changelog-dir", should be
somewhere in &lt;export&gt;/.glusterfs/changelog by default).

Changes are classified into 3 types:
    - Data:     : TYPE-I
    - Metadata  : TYPE-II
    - Entry     : TYPE-III

Changelog file is rolled over after a certain time interval
(defauls to 60 seconds) after which a changelog is started.
The thing to be noted here is that for a time interval
(time slice) multiple changes for an inode are recorded only
once (ie. say for 100+ writes on an inode that happens within
the time slice has only a single corresponding entry in the
changelog file). That way we do not bloat up the changelog
and also save lots of writes.

Changelog Format
-----------------
TYPE-I and TYPE-II changes have the gfid on the entity on
which the operation happened. TYPE-III being a entry op
requires the parent gfid and the basename. Changelog format
has been kept to a minimal and it's upto the consumers to
do the heavy loading of figuring out deletes, renames etc..
A single changelog file records all three types of changes,
with each change starting with an identifier ("D": DATA,
"M": METADATA and "E": ENTRY). Option is provided for the
encoding type (See TUNABLES).

Consumers
----------
The only consumer as of today would be geo-replication, although
backup utilities, self-heal, bit-rot detection could be possible
consumers in the future.

CLI
----
By default, change-logging is disabled (the translator is present
in the server graph but does nothing). When enabled (via cli) each
brick starts to log the changes. There are a set of tunable that
can be used to change the translators behaviour:

- enable/disable changelog (disabled by default)
  gluster volume set &lt;volume&gt; changelog {on|off}

- set the logging directory (&lt;brick&gt;/.glusterfs/changelogs is the
  default)
  gluster volume set &lt;volume&gt; changelog-dir /path/to/dir

- select encoding type (binary (default) or ascii)
  gluster volume set &lt;volume&gt; encoding {binary|ascii}

- change the rollover time for the logs (60 secs by default)
  gluster volume set &lt;volume&gt; rollover-time &lt;secs&gt;

- when secs &gt; 0, changelog file is not open()'d with O_SYNC flag
- and fsync is trigerred periodically every &lt;secs&gt; seconds.
  gluster volume set &lt;volume&gt; fsync-interval &lt;secs&gt;

features/changelog: changelog consumer library (libgfchangelog)

A shared library is provided for the consumer of the changelogs
for easy acess via APIs. Application can link against this library
and request for changelog updates. Conversion of binary logs to
human-readable ascii format is also taken care by the library which
keeps a copy of the changelog in application provided working
directory.

Change-Id: I75575fb7f1c53d2bec3dba1a329ea7bb3c628497
BUG: 847839
Original Author: Venky Shankar &lt;vshankar@redhat.com&gt;
Signed-off-by: Avra Sengupta &lt;asengupt@redhat.com&gt;
Reviewed-on: http://review.gluster.org/5127
Tested-by: Gluster Build System &lt;jenkins@build.gluster.com&gt;
Reviewed-by: Vijay Bellur &lt;vbellur@redhat.com&gt;
</pre>
</div>
</content>
</entry>
</feed>
