summaryrefslogtreecommitdiffstats
path: root/Features/gfid-access.md
blob: 2d324a18bdb9a1f4d89c6dd5536e4f9237346db2 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
#Gfid-access Translator
The 'gfid-access' translator provides access to data in glusterfs using a
virtual path. This particular translator is designed to provide direct access to
files in glusterfs using its gfid. 'GFID' is glusterfs's inode number for a file
to identify it uniquely. As of now, Geo-replication is the only consumer of this
translator. The changelog translator logs the 'gfid' with corresponding file
operation in journals which are consumed by Geo-Replication to replicate the
files using gfid-access translator very efficiently.

###Implications and Usage
A new virtual directory called '.gfid' is exposed in the aux-gfid mount
point when gluster volume is mounted with 'aux-gfid-mount' option.
All the gfids of files are exposed in one level under the '.gfid' directory.
No matter at what level the file resides, it is accessed using its
gfid under this virutal directory as shown in example below. All access
protocols work seemlessly, as the complexities are handled internally.

###Testing
1. Mount glusterfs client with '-o aux-gfid-mount' as follows.

      mount -t glusterfs -o aux-gfid-mount <node-ip>:<volname> <mountpoint>

      Example:

        #mount -t glusterfs -o aux-gfid-mount rhs1:master /master-aux-mnt

2. Get the 'gfid' of a file using normal mount or aux-gfid-mount and do some
   operations as follows.

      getfattr -n glusterfs.gfid.string <file>

      Example:

        #getfattr -n glusterfs.gfid.string  /master-aux-mnt/file
        # file: file
        glusterfs.gfid.string="796d3170-0910-4853-9ff3-3ee6b1132080"

        #cat /master-aux-mnt/file
        sample data

        #stat /master-aux-mnt/file
           File: `file'
           Size: 12             Blocks: 1          IO Block: 131072 regular file
         Device: 13h/19d        Inode: 11525625031905452160  Links: 1
         Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/   root)
         Access: 2014-05-23 20:43:33.239999863 +0530
         Modify: 2014-05-23 17:36:48.224999989 +0530
         Change: 2014-05-23 20:44:10.081999938 +0530


3. Access files using virtual path as follows.

      /mountpoint/.gfid/<actual-canonical-gfid-of-the-file\>'

      Example:

        #cat /master-aux-mnt/.gfid/796d3170-0910-4853-9ff3-3ee6b1132080
        sample data
        #stat /master-aux-mnt/.gfid/796d3170-0910-4853-9ff3-3ee6b1132080
           File: `.gfid/796d3170-0910-4853-9ff3-3ee6b1132080'
           Size: 12             Blocks: 1          IO Block: 131072 regular file
         Device: 13h/19d        Inode: 11525625031905452160  Links: 1
         Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/   root)
         Access: 2014-05-23 20:43:33.239999863 +0530
         Modify: 2014-05-23 17:36:48.224999989 +0530
         Change: 2014-05-23 20:44:10.081999938 +0530

   We can notice that 'cat' command on the 'file' using path and using virtual
   path displays the same data. Similarly 'stat' command on the 'file' and using
   virtual path with gfid gives same Inode Number confirming that its same file.

###Nature of changes
This feature is introduced with 'gfid-access' translator.