Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
C
ccan
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
mirror
ccan
Commits
b6df44dc
Commit
b6df44dc
authored
Mar 01, 2011
by
Rusty Russell
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
tdb2: update design.lyx
parent
399c393d
Changes
2
Show whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
235 additions
and
152 deletions
+235
-152
ccan/tdb2/doc/design.lyx
ccan/tdb2/doc/design.lyx
+45
-3
ccan/tdb2/doc/design.lyx,v
ccan/tdb2/doc/design.lyx,v
+190
-149
No files found.
ccan/tdb2/doc/design.lyx
View file @
b6df44dc
...
...
@@ -698,7 +698,13 @@ Status
\end_layout
\begin_layout Standard
\change_deleted 0 1298979572
Incomplete; nesting flag is still defined as per tdb1.
\change_inserted 0 1298979584
Complete; the nesting flag has been removed.
\change_unchanged
\end_layout
\begin_layout Subsection
...
...
@@ -870,14 +876,32 @@ Proposed Solution
\begin_layout Standard
Reachitecting the API to include a tdb_errcode pointer would be a great
deal of churn; we are better to guarantee that the tdb_errcode is per-thread
so the current programming model can be maintained.
deal of churn
\change_inserted 0 1298979557
, but fortunately most functions return 0 on success and -1 on error: we
can change these to return 0 on success and a negative error code on error,
and the API remains similar to previous.
The tdb_fetch, tdb_firstkey and tdb_nextkey functions need to take a TDB_DATA
pointer and return an error code.
It is also simpler to have tdb_nextkey replace its key argument in place,
freeing up any old .dptr.
\end_layout
\begin_layout Standard
\change_deleted 0 1298979438
; we are better to guarantee that the tdb_errcode is per-thread so the current
programming model can be maintained.
\end_layout
\begin_layout Standard
\change_deleted 0 1298979438
This requires dynamic per-thread allocations, which is awkward with POSIX
threads (pthread_key_create space is limited and we cannot simply allocate
a key for every TDB).
\change_unchanged
\end_layout
\begin_layout Standard
...
...
@@ -903,7 +927,13 @@ Status
\end_layout
\begin_layout Standard
Incomplete.
Incomplete
\change_inserted 0 1298979681
; API has been changed but thread safety has not been implemented.
\change_deleted 0 1298979669
.
\change_unchanged
\end_layout
\begin_layout Subsection
...
...
@@ -1291,7 +1321,13 @@ Status
\end_layout
\begin_layout Standard
\change_deleted 0 1298979699
Incomplete, TDB_CLEAR_IF_FIRST still defined, but not implemented.
\change_inserted 0 1298979700
Complete.
\change_unchanged
\end_layout
\begin_layout Subsection
...
...
@@ -1497,7 +1533,13 @@ Status
\end_layout
\begin_layout Standard
\change_deleted 0 1298979837
Incomplete; TDB_CLEAR_IF_FIRST still defined, but does nothing.
\change_inserted 0 1298979837
Complete.
\change_unchanged
\end_layout
\begin_layout Subsection
...
...
ccan/tdb2/doc/design.lyx,v
View file @
b6df44dc
...
...
@@ -6,7 +6,7 @@ comment @# @;
1.13
date 201
0.12.01.12.22.08
; author rusty; state Exp;
date 201
1.03.01.11.46.54
; author rusty; state Exp;
branches;
next 1.12;
...
...
@@ -78,7 +78,7 @@ desc
1.13
log
@
Merged changes.
@
Thread-safe API
@
text
@#LyX 1.6.7 created this file. For more info see http://www.lyx.org/
...
...
@@ -781,7 +781,13 @@ Status
\end_layout
\begin_layout Standard
\change_deleted 0 1298979572
Incomplete; nesting flag is still defined as per tdb1.
\change_inserted 0 1298979584
Complete; the nesting flag has been removed.
\change_unchanged
\end_layout
\begin_layout Subsection
...
...
@@ -953,14 +959,32 @@ Proposed Solution
\begin_layout Standard
Reachitecting the API to include a tdb_errcode pointer would be a great
deal of churn; we are better to guarantee that the tdb_errcode is per-thread
so the current programming model can be maintained.
deal of churn
\change_inserted 0 1298979557
, but fortunately most functions return 0 on success and -1 on error: we
can change these to return 0 on success and a negative error code on error,
and the API remains similar to previous.
The tdb_fetch, tdb_firstkey and tdb_nextkey functions need to take a TDB_DATA
pointer and return an error code.
It is also simpler to have tdb_nextkey replace its key argument in place,
freeing up any old .dptr.
\end_layout
\begin_layout Standard
\change_deleted 0 1298979438
; we are better to guarantee that the tdb_errcode is per-thread so the current
programming model can be maintained.
\end_layout
\begin_layout Standard
\change_deleted 0 1298979438
This requires dynamic per-thread allocations, which is awkward with POSIX
threads (pthread_key_create space is limited and we cannot simply allocate
a key for every TDB).
\change_unchanged
\end_layout
\begin_layout Standard
...
...
@@ -986,7 +1010,13 @@ Status
\end_layout
\begin_layout Standard
Incomplete.
Incomplete
\change_inserted 0 1298979681
; API has been changed but thread safety has not been implemented.
\change_deleted 0 1298979669
.
\change_unchanged
\end_layout
\begin_layout Subsection
...
...
@@ -1374,7 +1404,13 @@ Status
\end_layout
\begin_layout Standard
\change_deleted 0 1298979699
Incomplete, TDB_CLEAR_IF_FIRST still defined, but not implemented.
\change_inserted 0 1298979700
Complete.
\change_unchanged
\end_layout
\begin_layout Subsection
...
...
@@ -1580,7 +1616,13 @@ Status
\end_layout
\begin_layout Standard
\change_deleted 0 1298979837
Incomplete; TDB_CLEAR_IF_FIRST still defined, but does nothing.
\change_inserted 0 1298979837
Complete.
\change_unchanged
\end_layout
\begin_layout Subsection
...
...
@@ -2822,211 +2864,210 @@ a693 2
a696 2
\change_inserted 0 1291204640
a700 2
d702 1
a702 1
\change_inserted 0 1291204665
a701 2
\change_unchanged
a722 2
d704 2
a728 2
\change_inserted 0 1291204671
a7
25
2
a7
31
2
\change_inserted 0 1291204671
a7
29
2
a7
35
2
\change_inserted 0 1291204673
a73
0
2
a73
6
2
\change_unchanged
a7
74
2
a7
80
2
\change_inserted 0 1291204731
a7
77
2
a7
83
2
\change_inserted 0 1291204732
a78
1
2
a78
7
2
\change_inserted 0 1291204779
a7
84
2
a7
90
2
\change_unchanged
a8
36
2
a8
42
2
\change_inserted 0 1291204830
a8
39
2
a8
45
2
\change_inserted 0 1291204831
a84
3
2
a84
9
2
\change_inserted 0 1291204834
a8
44
2
a8
50
2
\change_unchanged
a898 2
d879 9
a887 2
deal of churn; we are better to guarantee that the tdb_errcode is per-thread
so the current programming model can be maintained.
d891 9
d903 2
a922 2
\change_inserted 0 1291204847
a9
01
2
a9
25
2
\change_inserted 0 1291204847
a905 2
d930 5
a934 3
\change_inserted 0 1291204852
a906 2
\change_unchanged
a1021 2
Incomplete.
a1051 2
\change_inserted 0 1291204881
a10
2
4 2
a10
5
4 2
\change_inserted 0 1291204881
a10
2
8 2
a10
5
8 2
\change_inserted 0 1291204885
a10
2
9 2
a10
5
9 2
\change_unchanged
a11
1
0 2
a11
4
0 2
\change_inserted 0 1291204898
a11
1
3 2
a11
4
3 2
\change_inserted 0 1291204898
a11
1
7 2
a11
4
7 2
\change_inserted 0 1291204901
a11
1
8 2
a11
4
8 2
\change_unchanged
a1
19
4 2
a1
22
4 2
\change_inserted 0 1291204908
a1
19
7 2
a1
22
7 2
\change_inserted 0 1291204908
a12
0
1 2
a12
3
1 2
\change_inserted 0 1291204908
a12
0
2 2
a12
3
2 2
\change_unchanged
a12
4
1 2
a12
7
1 2
\change_inserted 0 1291204917
a12
4
4 2
a12
7
4 2
\change_inserted 0 1291204917
a12
4
8 2
a12
7
8 2
\change_inserted 0 1291204920
a12
4
9 2
a12
7
9 2
\change_unchanged
a1
28
6 2
a1
31
6 2
\change_inserted 0 1291204927
a1
28
9 2
a1
31
9 2
\change_inserted 0 1291204928
a1293 2
d1325 1
a1325 1
\change_inserted 0 1291204942
a1294 2
\change_unchanged
a1345 2
d1327 2
a1381 2
\change_inserted 0 1291205003
a13
48
2
a13
84
2
\change_inserted 0 1291205004
a13
52
2
a13
88
2
\change_inserted 0 1291205007
a1
375
2
a1
411
2
\change_inserted 0 1291205019
a1
378
2
a1
414
2
\change_inserted 0 1291205019
a1
382
2
a1
418
2
\change_inserted 0 1291205023
a1
383
2
a1
419
2
\change_unchanged
a14
29
2
a14
65
2
\change_inserted 0 1291205029
a14
32
2
a14
68
2
\change_inserted 0 1291205029
a14
36
2
a14
72
2
\change_inserted 0 1291206020
a14
37
2
a14
73
2
\change_unchanged
a1
492
2
a1
528
2
\change_inserted 0 1291205043
a1
495
2
a1
531
2
\change_inserted 0 1291205043
a1499 2
d1537 1
a1537 1
\change_inserted 0 1291205057
a1500 2
\change_unchanged
a1547 2
d1539 2
a1589 2
\change_inserted 0 1291205062
a15
50
2
a15
92
2
\change_inserted 0 1291205062
a15
54
2
a15
96
2
\change_inserted 0 1291205062
a15
55
2
a15
97
2
\change_unchanged
a1
584
2
a1
626
2
\change_inserted 0 1291205072
a1
587
2
a1
629
2
\change_inserted 0 1291205073
a1
591
2
a1
633
2
\change_inserted 0 1291205073
a1
592
2
a1
634
2
\change_unchanged
a16
32
4
a16
74
4
\change_deleted 0 1291204504
\change_unchanged
a16
57
2
a16
99
2
\change_inserted 0 1291205079
a1
660
2
a1
702
2
\change_inserted 0 1291205080
a1
664
2
a1
706
2
\change_inserted 0 1291205080
a1
665
2
a1
707
2
\change_unchanged
a1
791
2
a1
833
2
\change_inserted 0 1291205090
d18
27
2
a18
28
7
d18
69
2
a18
70
7
is to divide the file into zones, and using a free list (or
\change_inserted 0 1291205498
table
...
...
@@ -3034,13 +3075,13 @@ table
set
\change_unchanged
of free lists) for each.
a18
29
2
a18
71
2
\change_inserted 0 1291205203
a18
32
2
a18
74
2
\change_inserted 0 1291205358
a18
48
21
a18
90
21
\change_unchanged
\end_layout
...
...
@@ -3062,8 +3103,8 @@ reshuffling the free lists is trivial: we simply merge every consecutive
pair of free lists.
\change_unchanged
d18
57
1
a18
57
7
d18
99
1
a18
99
7
Identify the correct
\change_inserted 0 1291205366
free list
...
...
@@ -3071,8 +3112,8 @@ free list
zone
\change_unchanged
.
d1
865
2
a1
866
7
d1
907
2
a1
908
7
Re-check the
\change_inserted 0 1291205372
list
...
...
@@ -3080,15 +3121,15 @@ list
zone
\change_unchanged
(we didn't have a lock, sizes could have changed): relock if necessary.
d1
870
1
a1
870
5
d1
912
1
a1
912
5
Place the freed entry in the list
\change_deleted 0 1291205382
for that zone
\change_unchanged
.
d1
879
1
a1
879
15
d1
921
1
a1
921
15
Pick a
\change_deleted 0 1291205403
zone either the zone we last freed into, or based on a
...
...
@@ -3104,7 +3145,7 @@ random
free table; usually the previous one.
\change_unchanged
a1
883
10
a1
925
10
\change_deleted 0 1291205432
\end_layout
...
...
@@ -3115,8 +3156,8 @@ a1883 10
Re-check the zone: relock if necessary.
\change_unchanged
d1
892
1
a1
892
7
d1
934
1
a1
934
7
unlock the list and try the next
\change_inserted 0 1291205455
largest list
...
...
@@ -3124,19 +3165,19 @@ largest list
zone.
\change_inserted 0 1291205457
a1
895
2
a1
937
2
\change_inserted 0 1291205476
a1
896
2
a1
938
2
\change_unchanged
a19
24
2
a19
66
2
\change_inserted 0 1291205542
a19
27
2
a19
69
2
\change_inserted 0 1291205591
a19
29
70
a19
71
70
\change_unchanged
\end_layout
...
...
@@ -3207,20 +3248,20 @@ means 0 gives a minimal 65536-byte zone, 15 gives the maximal
\change_inserted 0 1291205139
d2
176
1
a2
176
5
d2
218
1
a2
218
5
uint32_t
\change_inserted 0 1291205758
used_
\change_unchanged
magic : 16,
a2
180
4
a2
222
4
\change_deleted 0 1291205693
prev_is_free: 1,
\change_unchanged
d2
188
1
a2
188
7
d2
230
1
a2
230
7
top_hash: 1
\change_inserted 0 1291205704
1
...
...
@@ -3228,8 +3269,8 @@ a2188 7
0
\change_unchanged
;
d22
12
1
a22
12
9
d22
54
1
a22
54
9
uint
\change_inserted 0 1291205725
64
...
...
@@ -3239,10 +3280,10 @@ a2212 9
_t
\change_inserted 0 1291205753
free_magic: 8,
a22
15
2
a22
57
2
\change_inserted 0 1291205746
a22
20
24
a22
62
24
\change_deleted 0 1291205749
free_magic;
\change_unchanged
...
...
@@ -3267,8 +3308,8 @@ total_length
;
\change_unchanged
d22
24
1
a22
24
7
d22
66
1
a22
66
7
uint64_t
\change_deleted 0 1291205801
prev,
...
...
@@ -3276,20 +3317,20 @@ prev,
next;
\change_deleted 0 1291205811
d22
28
1
a22
28
3
d22
70
1
a22
70
3
\change_deleted 0 1291205811
...
d22
32
1
a22
32
5
d22
74
1
a22
74
5
\change_deleted 0 1291205808
uint64_t tailer
\change_unchanged
;
d22
41
5
a22
45
16
d22
83
5
a22
87
16
\change_deleted 0 1291205827
We might want to take some bits from the used record's top_hash (and the
free record which has 32 bits of padding to spare anyway) if we use variable
...
...
@@ -3306,90 +3347,90 @@ reference "freelist-in-zone"
\change_inserted 0 1291205885
Note that by limiting valid offsets to 56 bits, we can pack everything
we need into 3 64-byte words, meaning our minimum record size is 8 bytes.
a22
48
2
a22
90
2
\change_inserted 0 1291205886
a22
52
2
a22
94
2
\change_inserted 0 1291205886
a22
53
2
a22
95
2
\change_unchanged
a23
43
2
a23
85
2
\change_inserted 0 1291205894
a23
46
2
a23
88
2
\change_inserted 0 1291205894
a23
50
2
a23
92
2
\change_inserted 0 1291205902
a23
51
2
a23
93
2
\change_unchanged
a2
373
4
a2
415
4
\change_deleted 0 1291204504
\change_unchanged
a24
03
2
a24
45
2
\change_inserted 0 1291205910
a24
06
2
a24
48
2
\change_inserted 0 1291205910
a24
10
2
a24
52
2
\change_inserted 0 1291205914
a24
11
2
a24
53
2
\change_unchanged
a24
43
2
a24
85
2
\change_inserted 0 1291205919
a24
46
2
a24
88
2
\change_inserted 0 1291205919
a24
50
2
a24
92
2
\change_inserted 0 1291205922
a24
51
2
a24
93
2
\change_unchanged
a2
491
2
a2
533
2
\change_inserted 0 1291205929
a2
494
2
a2
536
2
\change_inserted 0 1291205929
a2
498
2
a2
540
2
\change_inserted 0 1291205929
a2
499
2
a2
541
2
\change_unchanged
a25
36
2
a25
78
2
\change_inserted 0 1291205932
a25
39
2
a25
81
2
\change_inserted 0 1291205933
a25
43
2
a25
85
2
\change_inserted 0 1291205933
a25
44
2
a25
86
2
\change_unchanged
a2
682
2
a2
724
2
\change_inserted 0 1291205944
a2
685
2
a2
727
2
\change_inserted 0 1291205945
a2
689
2
a2
731
2
\change_inserted 0 1291205948
a2
690
2
a2
732
2
\change_unchanged
@
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment