parent
d9c1af04f7
commit
c3401c2317
|
@ -2,3 +2,76 @@
|
||||||
|
|
||||||
## Specification
|
## Specification
|
||||||
|
|
||||||
|
1. `JRNL` file signature (4 bytes)
|
||||||
|
2. The offset to the first transaction (8 bytes)
|
||||||
|
3. The offset to the last transaction (8 bytes)
|
||||||
|
4. Transactions
|
||||||
|
1. Previous transaction offset (8 bytes)
|
||||||
|
2. Next transaction offset (8 bytes)
|
||||||
|
3. Creation date in Unix timestamp format (8 bytes)
|
||||||
|
4. Transaction flags (1 byte)
|
||||||
|
5. Operations list
|
||||||
|
1. Transaction type (1 byte)
|
||||||
|
2. Transaction data size (4 bytes)
|
||||||
|
3. Transaction data
|
||||||
|
|
||||||
|
## Transactions
|
||||||
|
|
||||||
|
### Flags
|
||||||
|
|
||||||
|
**TODO**. Now there is the only option -- `JRNL_COMPLETE` on bit 0.
|
||||||
|
|
||||||
|
### Consistency
|
||||||
|
|
||||||
|
If the last transaction was not written completely, journal rollback is started.
|
||||||
|
That means that it will be cleaned since it has not even been written to storage.
|
||||||
|
|
||||||
|
If the last transaction is complete in journal but not in storage (flag `JRNL_COMPLETE` is
|
||||||
|
not set), redo is being done. That means the transaction starts again since the journal is
|
||||||
|
consistent.
|
||||||
|
|
||||||
|
### Operations
|
||||||
|
|
||||||
|
There are several operation types:
|
||||||
|
|
||||||
|
1. Page allocation (`0x01`)
|
||||||
|
2. Page modification (`0x02`)
|
||||||
|
3. Page removal (`0x03`)
|
||||||
|
4. Transaction rollback (`0xFE`)
|
||||||
|
5. Transaction completion (`0xFF`)
|
||||||
|
|
||||||
|
#### Page allocation
|
||||||
|
|
||||||
|
This operation contains this data:
|
||||||
|
|
||||||
|
1. Allocated page offset (8 bytes)
|
||||||
|
2. Last free page offset before operation (8 bytes)
|
||||||
|
3. Last free page offset after operation (8 bytes)
|
||||||
|
|
||||||
|
24 bytes in summary.
|
||||||
|
|
||||||
|
#### Page modification
|
||||||
|
|
||||||
|
This operation contains this data:
|
||||||
|
|
||||||
|
1. Modified page offset (8 bytes)
|
||||||
|
2. Modified page data offset (2 bytes)
|
||||||
|
3. Modified page data size (2 bytes)
|
||||||
|
4. 'Before' data image
|
||||||
|
5. 'After' data image
|
||||||
|
|
||||||
|
12 bytes on header + 2 * (`par. 3`) bytes in summary.
|
||||||
|
Can't be more than 131084.
|
||||||
|
|
||||||
|
#### Page removal
|
||||||
|
|
||||||
|
This operation contains this data:
|
||||||
|
|
||||||
|
1. Removed page offset (8 bytes)
|
||||||
|
2. Last free page offset before operation (8 bytes)
|
||||||
|
|
||||||
|
16 bytes in summary.
|
||||||
|
|
||||||
|
#### Transaction rollback/completion
|
||||||
|
|
||||||
|
This operation *may* contain data. By default it does not.
|
Loading…
Reference in New Issue