Done !

It was quite painful, with many small bugs that took a while to fix, due
to the lack of tooling atm (enough said I had to do many hexdump -C
mavibot.db to analyze the content of the file...)

Here is an exemple of a reformated mavibot.db file after the creation of
a 'test' B-tree and the injection of three elements into it : <3,V3>,
<1,V1> and <5,V5> (test testRecordManagerBrowseWithKeepRevisions) :

0000 RMHeader, FirstFreePage = 1A00, CurrentBOB = 1400, CurrentCP = 2000
0200 test:1 H -> 0400
0400 test:1 RP
0600 test:2 H -> 0800
0800 test:1 RP
0A00 test:0 H -> 0C00
0C00 test:0 RP
0E00 FP[2] -> 1000
1000 FP[3] -|
1200 BOB:4 rp (0A00, 0200, 0600, 1800)
1400 BOB:4 H -> 1200
1600 test:3 RP
1800 test:3 H -> 1600
1A00 FP[0] -> 1C00
1C00 FP[1] -> 0E00
1E00 CP:3 RP
2000 CP:3 H -> 1E00

All the useful pages are there, the freePages list is correct, the
management BTrees (BOB and CP) are also correct.

Here are the content of each page :

00000000  00 00 02 00 00 00 00 01  00 00 00 00 00 00 1a 00 
|................|
00000010  00 00 00 00 00 00 14 00  ff ff ff ff ff ff ff ff 
|................|
00000020  00 00 00 00 00 00 20 00  ff ff ff ff ff ff ff ff  |......
.........|
00000030  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00 
|................|

test:1 H -> 0400
00000200  ff ff ff ff ff ff ff ff  00 00 00 aa
00 00 00 00  00 00 00 01
00 00 00 00  00 00 00 01
00 00 00 00  00 00 04 00 test:1 RP


*
00000400  ff ff ff ff ff ff ff ff  00 00 00 2e 00 00 00 00 
|................|
00000410  00 00 00 01 00 00 00 01  00 00 00 1e 00 00 00 01 
|................|
00000420  00 00 00 0a 00 00 00 06  00 00 00 02 56 33 00 00 
|............V3..|
00000430  00 08 00 00 00 00 00 00  00 03 00 00 00 00 00 00 
|................|
00000440  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00 
|................|

test:2 H -> 0800
00000600  ff ff ff ff ff ff ff ff  00 00 00 aa
00 00 00 00  00 00 00 02
00 00 00 00  00 00 00 02
00 00 00 00  00 00 08 00


test:2 RP
00000800  ff ff ff ff ff ff ff ff  00 00 00 4c 00 00 00 00 
|...........L....|
00000810  00 00 00 02 00 00 00 02  00 00 00 3c 00 00 00 01 
|...........<....|
00000820  00 00 00 0a 00 00 00 06  00 00 00 02 56 31 00 00 
|............V1..|
00000830  00 08 00 00 00 00 00 00  00 01 00 00 00 01 00 00 
|................|
00000840  00 0a 00 00 00 06 00 00  00 02 56 33 00 00 00 08 
|..........V3....|
00000850  00 00 00 00 00 00 00 03  00 00 00 00 00 00 00 00 
|................|
00000860  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00 
|................|


test:0 H ->
00000a00  ff ff ff ff ff ff ff ff  00 00 00 aa
00 00 00 00  00 00 00 00
00 00 00 00  00 00 00 00
00 00 00 00  00 00 0c 00 test:0 RP


test:0 RP
00000c00  ff ff ff ff ff ff ff ff  00 00 00 0c 00 00 00 00 
|................|
00000c10  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00 
|................|


FP[2] -> 1000
00000e00  00 00 00 00 00 00 10 00  00 00 00 88 00 00 00 00 
|................|


FP[3] -|
00001000  ff ff ff ff ff ff ff ff  00 00 00 b2 00 00 00 00 
|................|


BOB rp r4
00001200  ff ff ff ff ff ff ff ff  00 00 00 b0
00 00 00 00  00 00 00 04
00 00 00 04 
00 00 00 a0
  00 00 00 01 
    00 00 00 0c
      00 00 00 08 
        00 00 00 00 00 00 0a 00  test:0 H
    00 00 00 10
      00 00 00 00  00 00 00 00
      00 00 00 04 
        74 65 73 74
  00 00 00 01 
    00 00 00 0c
      00 00 00 08 
        00 00 00 00  00 00 02 00  test:1 H
    00 00 00 10
      00 00 00 00  00 00 00 01
      00 00 00 04 
        74 65 73 74
  00 00 00 01
    00 00 00 0c
      00 00 00 08
        00 00 00 00 00 00 06 00  test:2 H
    00 00 00 10
      00 00 00 00  00 00 00 02
      00 00 00 04 
        74 65 73 74
  00 00 00 01 
    00 00 00 0c
      00 00 00 08 
        00 00 00 00 00 00 18 00  test:3 H
    00 00 00 10
      00 00 00 00  00 00 00 03
      00 00 00 04 
        74 65 73 74
       

BOB H r4
00001400  ff ff ff ff ff ff ff ff  00 00 00 b2
00 00 00 00  00 00 00 04
00 00 00 00  00 00 00 04
00 00 00 00  00 00 12 00 BOB rp r4


test:3 RP
00001600  ff ff ff ff ff ff ff ff  00 00 00 6a 00 00 00 00 
|...........j....|


test:3 H ->
00001800  ff ff ff ff ff ff ff ff  00 00 00 aa
00 00 00 00  00 00 00 03
00 00 00 00  00 00 00 03
00 00 00 00  00 00 16 00 -> test:3 RP


FP[0] -> 1C00
00001a00  00 00 00 00 00 00 1c 00  00 00 00 68 00 00 00 00 
|...........h....|


FP[1] -> 0E00
00001c00  00 00 00 00 00 00 0e 00  00 00 00 b7 00 00 00 00 
|................|


CP:3 RP
00001e00  ff ff ff ff ff ff ff ff  00 00 00 94
00 00 00 00  00 00 00 03
00 00 00 03 
00 00 00 84
  00 00 00 01 
    00 00 00 10
      00 00 00 0c 
        00 00 00 01
        00 00 00 00  00 00 0c 00 CopiedPage test:1/0C00 test:0 RP
    00 00 00 10 
      00 00 00 00 00 00 00 01 
      00 00 00 04
        74 65 73 74 
  00 00 00 01
    00 00 00 10 
      00 00 00 0c
        00 00 00 01 
        00 00 00 00  00 00 04 00 CopiedPage test:2/0400 test:1 RP
    00 00 00 10
      00 00 00 00  00 00 00 02
      00 00 00 04 
        74 65 73 74
  00 00 00 01 
    00 00 00 10
      00 00 00 0c
        00 00 00 01
        00 00 00 00  00 00 08 00 CopiedPage test:3/0800 test:2 RP
    00 00 00 10
      00 00 00 00 00 00 00 03 
      00 00 00 04
        74 65 73 74


CP:3 H -> 1E00
00002000  ff ff ff ff ff ff ff ff  00 00 00 b7
00 00 00 00  00 00 00 03
00 00 00 00  00 00 00 03
00 00 00 00  00 00 1e 00
00 00 00 10  00 00 00 11 5f 63 6f 70


Next step : fixing the failing tests...

-- 
Regards,
Cordialement,
Emmanuel Lécharny
www.iktek.com 

Reply via email to