-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathTODO
237 lines (181 loc) · 6.85 KB
/
TODO
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
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
v0.3
v0.4
- ENOSPC
- finish client failure recovery (reconnect after long eviction; and slow delayed reconnect)
- make kclient use ->sendpage?
- rip out io interruption?
big items
- ENOSPC
- quotas
/ - accounting
- enforcement
- rados cow/snapshot infrastructure
- mds snapshots
- mds security enforcement
- client, user authentication
- cas
- use libuuid
userspace client
- handle session STALE
- time out caps, wake up waiters on renewal
- link caps with mds session
- validate dn leases
- fix lease validation to check session ttl
- clean up ll_ interface, now that we have leases!
- clean up client mds session vs mdsmap behavior?
- stop using mds's inode_t?
- fix readdir vs fragment race by keeping a separate frag pos, and ignoring dentries below it
kernel client
- make writepages maybe skip pages with errors?
- EIO, or ENOSPC?
- ... writeback vs ENOSPC vs flush vs close()... hrm...
- set mapping bits for ENOSPC, EIO?
- flush caps on sync, fsync, etc.
- do we need to block?
- timeout mds session close on umount
- deal with CAP_RDCACHE properly: invalidate cache pages?
- procfs/debugfs
- adjust granular debug levels too
- should we be using debugfs?
- a dir for each client instance (client###)?
- hooks to get mds, osd, monmap epoch #s
- vfs
- can we use dentry_path(), if it gets merged into mainline?
- io / osd client
- osd ack vs commit handling. hmm!
- fix readdir vs fragment race by keeping a separate frag pos, and ignoring dentries below it
vfs issues
- real_lookup() race:
1- hash lookup find no dentry
2- real_lookup() takes dir i_mutex, but then finds a dentry
3- drops mutex, then calld d_revalidate. if that fails, we return ENOENT (instead of looping?)
- vfs_rename_dir()
client
- clean up client mds session vs mdsmap behavior?
osdmon
- monitor needs to monitor some osds...
crush
- more efficient failure when all/too many osds are down
- allow forcefeed for more complicated rule structures. (e.g. make force_stack a list< set<int> >)
- "knob" bucket
pgmon
- monitor pg states, notify on out?
- watch osd utilization; adjust overload in cluster map
mon
- paxos need to clean up old states.
- some sort of tester for PaxosService...
- osdmon needs to lower-bound old osdmap versions it keeps around?
mds
- proper handling of cache expire messages during rejoin phase?
-> i think cache expires are fine; the rejoin_ack handler just has to behave if rejoining items go missing
- try_remove_unlinked_dn thing
- rerun destro trace against latest, with various journal lengths
- lease length heuristics
- mds lock last_change stamp?
- handle slow client reconnect (i.e. after mds has gone active)
- fix reconnect/rejoin open file weirdness
- get rid of C*Discover objects for replicate_to .. encode to bufferlists directly?
- can we get rid of the dirlock remote auth_pin weirdness on subtree roots?
- anchor_destroy needs to xlock linklock.. which means it needs a Mutation wrapper?
- ... when it gets a caller.. someday..
- make truncate faster with a trunc_seq, attached to objects as attributes?
- osd needs a set_floor_and_read op for safe failover/STOGITH-like semantics.
- could mark dir complete in EMetaBlob by counting how many dentries are dirtied in the current log epoch in CDir...
- FIXME how to journal/store root and stray inode content?
- in particular, i care about dirfragtree.. get it on rejoin?
- and dir sizes, if i add that... also on rejoin?
- efficient stat for single writers
- add FILE_CAP_EXTEND capability bit
journaler
- fix up for large events (e.g. imports)
- use set_floor_and_read for safe takeover from possibly-not-quite-dead otherguy.
- should we pad with zeros to avoid splitting individual entries?
- make it a g_conf flag?
- have to fix reader to skip over zeros (either <4 bytes for size, or zeroed sizes)
- need to truncate at detected (valid) write_pos to clear out any other partial trailing writes
fsck
- fsck.ebofs
- online mds fsck?
- object backpointer attrs to hint catastrophic reconstruction?
rados snapshots
- integrate revisions into ObjectCacher?
- clean up oid.rev vs op.rev in osd+osdc
- attr.crev is rev we were created in.
- oid.rev=0 is "live". defined for attr.crev <= rev.
- otherwise, defined for attr.crev <= rev < oid.rev (i.e. oid.rev is upper bound, non-inclusive.)
- write|delete is tagged with op.rev
- if attr.crev < op.rev
- we clone to oid.rev=rev (clone keeps old crev)
- change live attr.crev=rev.
- apply update
- read is tagged with op.rev
- if 0, we read from 0 (if it exists).
- otherwise we choose object rev based on op.rev vs oid.rev, and then verifying attr.crev <= op.rev.
objecter
- fix failure handler...
- generic mon client?
- maybe_request_map should set a timer event to periodically re-request.
- transaction prepare/commit?
- read+floor_lockout
osd/rados
- how does an admin intervene when a pg needs a dead osd to repeer?
- a more general fencing mechanism? per-object granularity isn't usually a good match.
- consider implications of nvram writeahead logs
- flag missing log entries on crash recovery --> WRNOOP? or WRLOST?
- efficiently replicate clone() objects
- fix heartbeat wrt new replication
- mark residual pgs obsolete ???
- rdlocks
- optimize remove wrt recovery pushes
- report crashed pgs?
messenger
- fix messenger shutdown.. we shouldn't delete messenger, since the caller may be referencing it, etc.
simplemessenger
- close idle connections
objectcacher
- merge clean bh's
- ocacher caps transitions vs locks
- test read locks
reliability
- heartbeat vs ping?
- osdmonitor, filter
ebofs
- btrees
- checksums
- dups
- sets
- optionally scrub deallocated extents
- clone()
- map ObjectStore
- verify proper behavior of conflicting/overlapping reads of clones
- combine inodes and/or cnodes into same blocks
- fix bug in node rotation on insert (and reenable)
- fix NEAR_LAST_FWD (?)
- awareness of underlying software/hardware raid in allocator so that we
write full stripes _only_.
- hmm, that's basically just a large block size.
- rewrite the btree code!
- multithreaded
- eliminate nodepools
- allow btree sets
- allow arbitrary embedded data?
- allow arbitrary btrees
- allow root node(s?) to be embedded in onode, or whereever.
- keys and values can be uniform (fixed-size) or non-uniform.
- fixed size (if any) is a value in the btree struct.
- negative indicates bytes of length value? (1 -> 255bytes, 2 -> 65535 bytes, etc.?)
- non-uniform records preceeded by length.
- keys sorted via a comparator defined in btree root.
- lexicographically, by default.
- goal
- object btree key->value payload, not just a data blob payload.
- better threading behavior.
- with transactional goodness!
- onode
- object attributes.. as a btree?
- blob stream
- map stream.
- allow blob values.
-
remaining hard problems
- how to cope with file size changes and read/write sharing