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
|