diff options
author | Anand Avati <avati@gluster.com> | 2010-09-03 13:58:11 +0000 |
---|---|---|
committer | Vijay Bellur <vijay@dev.gluster.com> | 2010-09-04 01:45:01 -0700 |
commit | 2822157056d8347518f7e1b8bf9ee04bea7286ae (patch) | |
tree | e6d8b6e7f4b3435e190c7303a0b751390f5c8850 /libglusterfs | |
parent | f5661d03f0f59cc2473f60232872ddafd325cd9d (diff) |
gfid: introduce uuid based handles for inodes
gfid represents a gluter file id. This is a universally unique id
assigned to a logical inode, independent of the inode numbers
assigned by the various backend filesystems to that file/directory.
The gfid of a file/directory will be the same on servers depending
on the cluster translator in picture.
The same gfid can be used as a handle across layers of various
translators and across servers and clients. This was not the case
previously as the cluster translators would pick the backend inode
number from one of the servers and convert that into a logical
inode number by performing some mathematical transforms.
This new technique of addressing inodes also makes dynamic volume
management have a more robust implementation as the file handles
remain the same on all versions of the graphs, and allows for
seamless NFS daemon restarts as well.
This change makes way for server originating communication which
was not possible earlier as the servers did not have any reliable
way of addressing client side inodes at all. gfid solves this problem
by preserving the same uuid as the handle on all the servers and
across all clients
Signed-off-by: Anand V. Avati <avati@blackhole.gluster.com>
Signed-off-by: Anand V. Avati <avati@amp.gluster.com>
Signed-off-by: Vijay Bellur <vijay@dev.gluster.com>
BUG: 971 (dynamic volume management)
URL: http://bugs.gluster.com/cgi-bin/bugzilla3/show_bug.cgi?id=971
Diffstat (limited to 'libglusterfs')
-rw-r--r-- | libglusterfs/src/Makefile.am | 2 | ||||
-rw-r--r-- | libglusterfs/src/iatt.h | 2 | ||||
-rw-r--r-- | libglusterfs/src/inode.h | 2 |
3 files changed, 5 insertions, 1 deletions
diff --git a/libglusterfs/src/Makefile.am b/libglusterfs/src/Makefile.am index f6c2cf855..3513419eb 100644 --- a/libglusterfs/src/Makefile.am +++ b/libglusterfs/src/Makefile.am @@ -1,6 +1,6 @@ libglusterfs_la_CFLAGS = -fPIC -Wall -g -shared -nostartfiles $(GF_CFLAGS) $(GF_DARWIN_LIBGLUSTERFS_CFLAGS) -libglusterfs_la_CPPFLAGS = -D_FILE_OFFSET_BITS=64 -D__USE_FILE_OFFSET64 -D_GNU_SOURCE -DXLATORDIR=\"$(libdir)/glusterfs/$(PACKAGE_VERSION)/xlator\" -D$(GF_HOST_OS) -I$(CONTRIBDIR)/rbtree -DSCHEDULERDIR=\"$(libdir)/glusterfs/$(PACKAGE_VERSION)/scheduler\" -I$(CONTRIBDIR)/md5 -I$(CONTRIBDIR)/uuid +libglusterfs_la_CPPFLAGS = -D_FILE_OFFSET_BITS=64 -D__USE_FILE_OFFSET64 -D_GNU_SOURCE -DXLATORDIR=\"$(libdir)/glusterfs/$(PACKAGE_VERSION)/xlator\" -D$(GF_HOST_OS) -I$(CONTRIBDIR)/rbtree -DSCHEDULERDIR=\"$(libdir)/glusterfs/$(PACKAGE_VERSION)/scheduler\" -I$(CONTRIBDIR)/md5 libglusterfs_la_LIBADD = @LEXLIB@ diff --git a/libglusterfs/src/iatt.h b/libglusterfs/src/iatt.h index ef64f9afc..e67d714c2 100644 --- a/libglusterfs/src/iatt.h +++ b/libglusterfs/src/iatt.h @@ -31,6 +31,7 @@ #include <unistd.h> #include "compat.h" +#include "uuid.h" typedef enum { IA_INVAL = 0, @@ -59,6 +60,7 @@ typedef struct { struct iatt { uint64_t ia_ino; /* inode number */ uint64_t ia_gen; /* generation number */ + uuid_t ia_gfid; uint64_t ia_dev; /* backing device ID */ ia_type_t ia_type; /* type of file */ ia_prot_t ia_prot; /* protection */ diff --git a/libglusterfs/src/inode.h b/libglusterfs/src/inode.h index 18081b8f8..a0bb8f8b5 100644 --- a/libglusterfs/src/inode.h +++ b/libglusterfs/src/inode.h @@ -40,6 +40,7 @@ typedef struct _dentry dentry_t; #include "list.h" #include "xlator.h" #include "iatt.h" +#include "uuid.h" struct _inode_table { @@ -94,6 +95,7 @@ struct _inode_ctx { struct _inode { inode_table_t *table; /* the table this inode belongs to */ + uuid_t gfid; gf_lock_t lock; uint64_t nlookup; uint64_t generation; |