summaryrefslogtreecommitdiffstats
path: root/accepted/granular-entry-self-healing.md
blob: 681a82e72fe4b241bbdeb444d208bcf8d7ffa148 (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
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
# Granular Entry Self-healing

## Goal

Better self-heal performance for glusterfs volumes having a replicate 
configuration (AFR).

## Summary

As of today, entry self-heal and data-selfheal in AFR are network/ CPU intensive
operations. This can lead to clients observing reduced performance/ stalling
when accessing a volume when self-heal is in progress. The changes proposed below
make entry-self-heal more granular.

## Owners

Anuradha Talur <atalur@redhat.com>
Krutika Dhananjay <kdhananj@redhat.com>
Pranith Kumar K <pkarampu@redhat.com>
Ravishankar N <ravishankar@redhat.com>

## Current status

Patches posted for review:
http://review.gluster.org/12442
http://review.gluster.org/#/c/12482/

Dependency on compound fops feature

## Related Bug

https://bugzilla.redhat.com/show_bug.cgi?id=1269461

## Detailed Description

Both afr and ec at the moment do lot of readdirs and lookups to figure out the
differences between the directories to perform heals. To avoid this, the base
algorithm is to store only the names that need heal in
.glusterfs/indices/entry-changes/<parent-dir-gfid>/ as links to base file in
.glusterfs/indices/entry-changes of the bricks. So only the names that need to
be healed will be going through name heals instead of the currently implemented approach of 
'lookup all files in sink directory  remove the ones not present in the source directory' + 
'lookup all files in source directory  remove the ones not present in the sink directory' 
When all the names under this directory are healed, we need to reset the
pending afr xattrs of the dir, indicating that the heal is complete, and also
remove the directory .glusterfs/indices/entry-changes/<parent-dir-gfid>.
This method is for healing files that are created while a brick is down.

For healing directories (and files inside it) that are created when a brick
is down, we need to mark the dir's AFR xattrs' data bits with a special value 
say 0xFFFFFFF. For such directories, we can do a complete name heal of the 
entries to the sink. When readdir returns no more entries, clear the xattrs. 
          
## Benefit to GlusterFS

Improved entry self-heal performance- i.e faster heal times and lesser
consumption of resources.

## Scope

## Nature of proposed change

Changes involve modification to AFR and index xlators.

## Implications on manageability

None.

## Implications on presentation layer

None.

## Implications on persistence layer

None.

## Implications on 'GlusterFS' backend

The .glusterfs/indices directory will contain new entries to keep track of entry heals. 

## Modification to GlusterFS metadata

Changes to AFR's xattrs and its interpretation.

## Implications on 'glusterd'

None.

## How To Test

TBD.

## User Experience

Users will see better performance during entry self-heal and more judicious
utilization of resources.

## Dependencies

Part of the changes in self-heal daemon code will depend on compound fops feature.

## Documentation

TBD

## Status

Design complete. Implementation done. The only thing pending is the compounding of two fops in shd code.

## Comments and Discussion