summaryrefslogtreecommitdiffstats
path: root/doc/dev/rbd-diff.rst
blob: 083c1316583d1b8a78a4954753da95e82b01d93c (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
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
RBD Incremental Backup
======================

This is a simple streaming file format for representing a diff between
two snapshots (or a snapshot and the head) of an RBD image.

Header
~~~~~~

"rbd diff v1\\n"

Metadata records
~~~~~~~~~~~~~~~~

Every record has a one byte "tag" that identifies the record type,
followed by some other data.

Metadata records come in the first part of the image.  Order is not
important, as long as all the metadata records come before the data
records.

From snap
---------

- u8: 'f'
- le32: snap name length
- snap name

To snap
-------

- u8: 't'
- le32: snap name length
- snap name

Size
----

- u8: 's'
- le64: (ending) image size

Data Records
~~~~~~~~~~~~

These records come in the second part of the sequence.

Updated data
------------

- u8: 'w'
- le64: offset
- le64: length
- length bytes of actual data

Zero data
---------

- u8: 'z'
- le64: offset
- le64: length


Final Record
~~~~~~~~~~~~

End
---

- u8: 'e'


Header
~~~~~~

"rbd diff v2\\n"

Metadata records
~~~~~~~~~~~~~~~~

Every record has a one byte "tag" that identifies the record type,
followed by length of data, and then some other data.

Metadata records come in the first part of the image.  Order is not
important, as long as all the metadata records come before the data
records.

In v2, we have the following metadata in each section:
(1 Bytes) tag.
(8 Bytes) length.
(n Bytes) data.

In this way, we can skip the unrecognized tag.

From snap
---------

- u8: 'f'
- le64: length of appending data (4 + length)
- le32: snap name length
- snap name

To snap
-------

- u8: 't'
- le64: length of appending data (4 + length)
- le32: snap name length
- snap name

Size
----

- u8: 's'
- le64: length of appending data (8)
- le64: (ending) image size

Data Records
~~~~~~~~~~~~

These records come in the second part of the sequence.

Updated data
------------

- u8: 'w'
- le64: length of appending data (8 + 8 + length)
- le64: offset
- le64: length
- length bytes of actual data

Zero data
---------

- u8: 'z'
- le64: length of appending data (8 + 8)
- le64: offset
- le64: length


Final Record
~~~~~~~~~~~~

End
---

- u8: 'e'