Dump file format
This description uses the same conventions as the protocol description.
The dump file format is not final and is subject to change before EdgeDB 1.0.
General Structure
Dump file is structure as follows:
Dump file format marker
\xFF\xD8\x00\x00\xD8EDGEDB\x00DUMP\x00
(17 bytes)Format version number
\x00\x00\x00\x00\x00\x00\x00\x01
(8 bytes)Header block
Any number of data blocks
General Dump Block
Both header and data blocks are formatted as follows:
struct DumpHeader {
int8 mtype;
// SHA1 hash sum of block data
byte sha1sum[20];
// Length of message contents in bytes,
// including self.
int32 message_length;
// Block data. Should be treated in opaque way by a client.
byte data[message_length];
}
Upon receiving a protocol dump data message, the dump client should:
Replace packet type:
@
(0x40) →H
(0x48)=
(0x3d) →D
(0x44)
Prepend SHA1 checksum to the block
Append the entire dump protocol message disregarding the first byte (the message type).
Header Block
Format:
struct DumpHeader {
// Message type ('H')
int8 mtype = 0x48;
// SHA1 hash sum of block data
byte sha1sum[20];
// Length of message contents in bytes,
// including self.
int32 message_length;
// A set of message headers.
Headers headers;
// Protocol version of the dump
int16 major_ver;
int16 minor_ver;
// Schema data
string schema_ddl;
// Type identifiers
int32 num_types;
TypeInfo types[num_types];
// Object descriptors
int32 num_descriptors;
ObjectDesc descriptors[num_descriptors]
};
struct TypeInfo {
string type_name;
string type_class;
byte type_id[16];
}
struct ObjectDesc {
byte object_id[16];
bytes description;
int16 num_dependencies;
byte dependency_id[num_dependencies][16];
}
Known headers:
101
BLOCK_TYPE
– block type, always “I”102
SERVER_TIME
– server time when dump is started as a floating point unix timestamp stringified103
SERVER_VERSION
– full version of server as string
Data Block
Format:
struct DumpBlock {
// Message type ('=')
int8 mtype = 0x3d;
// Length of message contents in bytes,
// including self.
int32 message_length;
// A set of message headers.
Headers headers;
}
Known headers:
101
BLOCK_TYPE
– block type, always “D”110
BLOCK_ID
– block identifier (16 bytes of UUID)111
BLOCK_NUM
– integer block index stringified112
BLOCK_DATA
– the actual block data