Project

General

Profile

Osd - Locally repairable code

Summary

Locally repairable codes can be used to avoid using inter datacenter bandwidth when recovering from the loss of a single OSD.
Let say an erasure coded pool is configured so that an object is split in 10 data chunks (X1 to X10) and 4 parity chunks (P1 to P4) and the crush map splits the chunks evenly in two datacenters (X1,X2,X3,X4,X5,P1,P2 in datacenter 1 and X6,X7,X8,X9,X10,P3,P4 in datacenter 2). If X3 is missing, all chunks are needed to recover it. If the primary OSD in charge of scrubbing is X1 (i.e. in datacenter 1), it will need to get X6,X7,X8,X9,X10,P3,P4 from datacenter 2.
One additional parity chunk is calculated in each datacenter. The S1 chunk is calculated with the chunks from datacenter 1 and is stored in datacenter 1. The S2 chunk is calculated with the chunks from datacenter 2 and is stored in datacenter 2. If X3 is missing and X1 is the primary OSD in charge of scrubbing, it can use X1,X2,X4,X5 and S1 to recover X3 instead of reading from datacenter 2. Reading all chunks is only required when more than one chunk goes missing in the same data center.

Note:

This is a followup of the Pyramid Erasure Code blueprint ( https://wiki.ceph.com/Planning/Blueprints/Giant/Pyramid_Erasure_Code ). It has been renamed to avoid confusion with more sophisticated recovery techniques.

Owners

Interested Parties

  • Name (Affiliation)
  • Name (Affiliation)
  • Name

Current Status

The first implementation is complete and is being reviewed and tested at https://github.com/ceph/ceph/pull/1921

Work items

pad http://pad.ceph.com/p/GH-locally-repairable-code

lr.png View (38.7 KB) Jessica Mack, 06/30/2015 11:54 PM