Project

General

Profile

Rados redirects » History » Version 1

Jessica Mack, 06/09/2015 07:27 AM

1 1 Jessica Mack
h1. Rados redirects
2
3
h3. Summary
4
5
A redirect is like a symlink: it will transparently redirect librados clients from one object to another.  The main anticipated use-case is to redirect to the same object name in a different pool on a different tier of hardware (e.g., demote cold object from SSD to HDD).
6
This will be useful for existing clusters with multiple hardware types, and in the future for things like erasure coded PGs.
7
8
h3. Owners
9
10
* Sage Weil (Inktank)
11
12
h3. Interested Parties
13
14
* Name (Affiliation)
15
* Name (Affiliation)
16
* Name
17
18
h3. Current Status
19
20
There is nothing like this presenting in rados (server or client)
21
Detailed Description
22
On the OSD, the object has special metadata that marks it as a redirect (much like symlink != file), and points to another pool/object.
23
On the client (Objecter/librados), an operation that encounters a redirect (red or write) will resend the request to the new location.
24
A new rados operation will atomically create a redirect.  Normally it would be a part of a transaction that verifies the existing object is the version we expect (the one we copied to cold storage), removes the old object, and creates the redirect.  The process of demoting cold objects would be racy but safe and could be driven by some external agent.
25
Promoting an object is trickier.  It may require the OSD to do it (blocking IO to the object).  It would be useful to promote on first write or other events.  Or just explicitly via some rados operation (if some external agent is handling the tiering).
26
 
27
h3. Work items
28
29
h3. Coding tasks
30
31
# create redirect types on OSD
32
# extend protocol to allow OSD to send objecter to new location
33
# add rados operations to create a redirect
34
# [optional] add OSD support to safely demote an object, either by blocking IO or by failing with EAGAIN if a conflicting update comes in
35
# [optional] add OSD support to safetly promote an object
36
# build stress test tool, or extend RadosModel accordingly