summaryrefslogtreecommitdiffstats
path: root/xlators/cluster/afr/src/afr.h
diff options
context:
space:
mode:
authorVikas Gorur <vikas@gluster.com>2009-11-24 08:45:10 +0000
committerAnand V. Avati <avati@dev.gluster.com>2009-11-24 06:40:12 -0800
commit250edc9e494fe0c59eff580df18080111ecb475e (patch)
tree0e73af8f82f9f644abff21ee5b2f0309e276dc22 /xlators/cluster/afr/src/afr.h
parent74612a456ad1602f8038fae79fee654eb427602a (diff)
cluster/afr: Refactored the self-heal interface.
Cleaned up the self-heal interface to callers. Signed-off-by: Vikas Gorur <vikas@gluster.com> Signed-off-by: Anand V. Avati <avati@dev.gluster.com> BUG: 170 (Auto-heal fails on files that are open()-ed/mmap()-ed) URL: http://bugs.gluster.com/cgi-bin/bugzilla3/show_bug.cgi?id=170
Diffstat (limited to 'xlators/cluster/afr/src/afr.h')
-rw-r--r--xlators/cluster/afr/src/afr.h48
1 files changed, 31 insertions, 17 deletions
diff --git a/xlators/cluster/afr/src/afr.h b/xlators/cluster/afr/src/afr.h
index 56f7a069d..4de1f2820 100644
--- a/xlators/cluster/afr/src/afr.h
+++ b/xlators/cluster/afr/src/afr.h
@@ -75,11 +75,37 @@ typedef struct _afr_private {
} afr_private_t;
typedef struct {
- /* Is this a self-heal triggered to forcibly merge the
- directories? */
- gf_boolean_t forced_merge;
+ /* External interface: These are variables (some optional) that
+ are set by whoever has triggered self-heal */
+
+ gf_boolean_t need_data_self_heal;
+ gf_boolean_t need_metadata_self_heal;
+ gf_boolean_t need_entry_self_heal;
+
+ gf_boolean_t forced_merge; /* Is this a self-heal triggered to
+ forcibly merge the directories? */
+
+ gf_boolean_t healing_fd_opened; /* true if caller has already
+ opened fd */
+
+ gf_boolean_t data_lock_held; /* true if caller has already
+ acquired 0-0 lock */
+
+ fd_t *healing_fd; /* set if callers has opened fd */
+
+ gf_boolean_t background; /* do self-heal in background
+ if possible */
+
+ mode_t mode; /* st_mode of the entry we're doing
+ self-heal on */
+
+ /* Function to call to unwind. If self-heal is being done in the
+ background, this function will be called as soon as possible. */
+
+ int (*unwind) (call_frame_t *frame, xlator_t *this);
+
+ /* End of external interface members */
- glusterfs_fop_t calling_fop;
/* array of stat's, one for each child */
struct stat *buf;
@@ -105,7 +131,6 @@ typedef struct {
mode_t impunging_entry_mode;
const char *linkname;
- fd_t *healing_fd;
int op_failed;
int file_has_holes;
@@ -117,23 +142,16 @@ typedef struct {
call_frame_t *orig_frame;
gf_boolean_t unwound;
- gf_boolean_t background; /* is this self-heal in the background? */
- int (*unwind) (call_frame_t *frame, xlator_t *this);
/* private data for the particular self-heal algorithm */
void *private;
- gf_boolean_t healing_fd_opened; /* set by caller: true if caller
- has already opened fd */
-
- gf_boolean_t data_lock_held; /* set by caller: true if caller
- has already acquired 0-0 lock */
-
int (*flush_self_heal_cbk) (call_frame_t *frame, xlator_t *this);
int (*completion_cbk) (call_frame_t *frame, xlator_t *this);
int (*algo_completion_cbk) (call_frame_t *frame, xlator_t *this);
int (*algo_abort_cbk) (call_frame_t *frame, xlator_t *this);
+
call_frame_t *sh_frame;
} afr_self_heal_t;
@@ -186,9 +204,6 @@ typedef struct _afr_local {
unsigned int success_count;
unsigned int enoent_count;
- unsigned int need_metadata_self_heal;
- unsigned int need_entry_self_heal;
- unsigned int need_data_self_heal;
unsigned int govinda_gOvinda;
unsigned int read_child_index;
@@ -210,7 +225,6 @@ typedef struct _afr_local {
glusterfs_fop_t fop;
unsigned char *child_up;
- int child_count;
int32_t *child_errno;