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
32710c91
Commit
32710c91
authored
Sep 09, 2010
by
Rusty Russell
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
tdb2: update documentation.
parent
e9c5dc68
Changes
4
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
304 additions
and
9 deletions
+304
-9
ccan/tdb2/doc/design.lyx
ccan/tdb2/doc/design.lyx
+117
-2
ccan/tdb2/doc/design.lyx,v
ccan/tdb2/doc/design.lyx,v
+139
-5
ccan/tdb2/doc/design.pdf
ccan/tdb2/doc/design.pdf
+0
-0
ccan/tdb2/doc/design.txt
ccan/tdb2/doc/design.txt
+48
-2
No files found.
ccan/tdb2/doc/design.lyx
View file @
32710c91
...
...
@@ -53,8 +53,8 @@ Rusty Russell, IBM Corporation
\change_deleted 0 1283307542
26-July
\change_inserted 0 128
330754
4
1
-September
\change_inserted 0 128
401685
4
9
-September
\change_unchanged
-2010
\end_layout
...
...
@@ -835,6 +835,18 @@ Internal locking is required to make sure that fcntl locks do not overlap
\begin_layout Standard
The aim is that building tdb with -DTDB_PTHREAD will result in a pthread-safe
version of the library, and otherwise no overhead will exist.
\change_inserted 0 1284016998
Alternatively, a hooking mechanism similar to that proposed for
\begin_inset CommandInset ref
LatexCommand ref
reference "Proposed-Solution-locking-hook"
\end_inset
could be used to enable pthread locking at runtime.
\change_unchanged
\end_layout
\begin_layout Subsection
...
...
@@ -1183,6 +1195,109 @@ reference "TDB_CLEAR_IF_FIRST-Imposes-Performance"
\end_inset
.
\change_inserted 0 1284015637
\end_layout
\begin_layout Subsection
\change_inserted 0 1284015716
Extending The Header Is Difficult
\end_layout
\begin_layout Standard
\change_inserted 0 1284015906
We have reserved (zeroed) words in the TDB header, which can be used for
future features.
If the future features are compulsory, the version number must be updated
to prevent old code from accessing the database.
But if the future feature is optional, we have no way of telling if older
code is accessing the database or not.
\end_layout
\begin_layout Subsubsection
\change_inserted 0 1284015637
Proposed Solution
\end_layout
\begin_layout Standard
\change_inserted 0 1284016114
The header should contain a
\begin_inset Quotes eld
\end_inset
format variant
\begin_inset Quotes erd
\end_inset
value (64-bit).
This is divided into two 32-bit parts:
\end_layout
\begin_layout Enumerate
\change_inserted 0 1284016149
The lower part reflects the format variant understood by code accessing
the database.
\end_layout
\begin_layout Enumerate
\change_inserted 0 1284016639
The upper part reflects the format variant you must understand to write
to the database (otherwise you can only open for reading).
\end_layout
\begin_layout Standard
\change_inserted 0 1284016821
The latter field can only be written at creation time, the former should
be written under the OPEN_LOCK when opening the database for writing, if
the variant of the code is lower than the current lowest variant.
\end_layout
\begin_layout Standard
\change_inserted 0 1284016803
This should allow backwards-compatible features to be added, and detection
if older code (which doesn't understand the feature) writes to the database.
\change_deleted 0 1284016101
\end_layout
\begin_layout Subsection
\change_inserted 0 1284015634
Record Headers Are Not Expandible
\end_layout
\begin_layout Standard
\change_inserted 0 1284015634
If we later want to add (say) checksums on keys and data, it would require
another format change, which we'd like to avoid.
\end_layout
\begin_layout Subsubsection
\change_inserted 0 1284015634
Proposed Solution
\end_layout
\begin_layout Standard
\change_inserted 0 1284016847
We often have extra padding at the tail of a record.
If we ensure that the first byte (if any) of this padding is zero, we will
have a way for future changes to detect code which doesn't understand a
new format: the new code would write (say) a 1 at the tail, and thus if
there is no tail or the first byte is 0, we would know the extension is
not present on that record.
\change_unchanged
\end_layout
\begin_layout Section
...
...
ccan/tdb2/doc/design.lyx,v
View file @
32710c91
head 1.
8
;
head 1.
9
;
access;
symbols;
locks; strict;
comment @# @;
1.9
date 2010.09.09.07.25.12; author rusty; state Exp;
branches;
next 1.8;
1.8
date 2010.09.02.02.29.05; author rusty; state Exp;
branches;
...
...
@@ -51,9 +56,9 @@ desc
@
1.
8
1.
9
log
@
Remove bogus footnote
@
Extension mechanism.
@
text
@#LyX 1.6.5 created this file. For more info see http://www.lyx.org/
...
...
@@ -111,8 +116,8 @@ Rusty Russell, IBM Corporation
\change_deleted 0 1283307542
26-July
\change_inserted 0 128
330754
4
1
-September
\change_inserted 0 128
401685
4
9
-September
\change_unchanged
-2010
\end_layout
...
...
@@ -893,6 +898,18 @@ Internal locking is required to make sure that fcntl locks do not overlap
\begin_layout Standard
The aim is that building tdb with -DTDB_PTHREAD will result in a pthread-safe
version of the library, and otherwise no overhead will exist.
\change_inserted 0 1284016998
Alternatively, a hooking mechanism similar to that proposed for
\begin_inset CommandInset ref
LatexCommand ref
reference "Proposed-Solution-locking-hook"
\end_inset
could be used to enable pthread locking at runtime.
\change_unchanged
\end_layout
\begin_layout Subsection
...
...
@@ -1241,6 +1258,109 @@ reference "TDB_CLEAR_IF_FIRST-Imposes-Performance"
\end_inset
.
\change_inserted 0 1284015637
\end_layout
\begin_layout Subsection
\change_inserted 0 1284015716
Extending The Header Is Difficult
\end_layout
\begin_layout Standard
\change_inserted 0 1284015906
We have reserved (zeroed) words in the TDB header, which can be used for
future features.
If the future features are compulsory, the version number must be updated
to prevent old code from accessing the database.
But if the future feature is optional, we have no way of telling if older
code is accessing the database or not.
\end_layout
\begin_layout Subsubsection
\change_inserted 0 1284015637
Proposed Solution
\end_layout
\begin_layout Standard
\change_inserted 0 1284016114
The header should contain a
\begin_inset Quotes eld
\end_inset
format variant
\begin_inset Quotes erd
\end_inset
value (64-bit).
This is divided into two 32-bit parts:
\end_layout
\begin_layout Enumerate
\change_inserted 0 1284016149
The lower part reflects the format variant understood by code accessing
the database.
\end_layout
\begin_layout Enumerate
\change_inserted 0 1284016639
The upper part reflects the format variant you must understand to write
to the database (otherwise you can only open for reading).
\end_layout
\begin_layout Standard
\change_inserted 0 1284016821
The latter field can only be written at creation time, the former should
be written under the OPEN_LOCK when opening the database for writing, if
the variant of the code is lower than the current lowest variant.
\end_layout
\begin_layout Standard
\change_inserted 0 1284016803
This should allow backwards-compatible features to be added, and detection
if older code (which doesn't understand the feature) writes to the database.
\change_deleted 0 1284016101
\end_layout
\begin_layout Subsection
\change_inserted 0 1284015634
Record Headers Are Not Expandible
\end_layout
\begin_layout Standard
\change_inserted 0 1284015634
If we later want to add (say) checksums on keys and data, it would require
another format change, which we'd like to avoid.
\end_layout
\begin_layout Subsubsection
\change_inserted 0 1284015634
Proposed Solution
\end_layout
\begin_layout Standard
\change_inserted 0 1284016847
We often have extra padding at the tail of a record.
If we ensure that the first byte (if any) of this padding is zero, we will
have a way for future changes to detect code which doesn't understand a
new format: the new code would write (say) a 1 at the tail, and thus if
there is no tail or the first byte is 0, we would know the extension is
not present on that record.
\change_unchanged
\end_layout
\begin_layout Section
...
...
@@ -2519,6 +2639,20 @@ At some later point, a sync would allow recovery of the old data into the
@
1.8
log
@Remove bogus footnote
@
text
@d56 2
a57 2
\change_inserted 0 1283307544
1-September
d838 12
d1198 103
@
1.7
log
@Moving hash table does not work.
...
...
ccan/tdb2/doc/design.pdf
View file @
32710c91
No preview for this file type
ccan/tdb2/doc/design.txt
View file @
32710c91
...
...
@@ -2,7 +2,7 @@ TDB2: A Redesigning The Trivial DataBase
Rusty Russell, IBM Corporation
1
-September-2010
9
-September-2010
Abstract
...
...
@@ -277,7 +277,9 @@ maintained.
The aim is that building tdb with -DTDB_PTHREAD will result in a
pthread-safe version of the library, and otherwise no overhead
will exist.
will exist. Alternatively, a hooking mechanism similar to that
proposed for [Proposed-Solution-locking-hook] could be used to
enable pthread locking at runtime.
2.8 *_nonblock Functions And *_mark Functions Expose
Implementation
...
...
@@ -473,6 +475,50 @@ it alone has opened the TDB and will erase it.
Remove TDB_CLEAR_IF_FIRST. Other workarounds are possible, but
see [TDB_CLEAR_IF_FIRST-Imposes-Performance].
2.15 Extending The Header Is Difficult
We have reserved (zeroed) words in the TDB header, which can be
used for future features. If the future features are compulsory,
the version number must be updated to prevent old code from
accessing the database. But if the future feature is optional, we
have no way of telling if older code is accessing the database or
not.
2.15.1 Proposed Solution
The header should contain a “format variant” value (64-bit). This
is divided into two 32-bit parts:
1. The lower part reflects the format variant understood by code
accessing the database.
2. The upper part reflects the format variant you must understand
to write to the database (otherwise you can only open for
reading).
The latter field can only be written at creation time, the former
should be written under the OPEN_LOCK when opening the database
for writing, if the variant of the code is lower than the current
lowest variant.
This should allow backwards-compatible features to be added, and
detection if older code (which doesn't understand the feature)
writes to the database.
2.16 Record Headers Are Not Expandible
If we later want to add (say) checksums on keys and data, it
would require another format change, which we'd like to avoid.
2.16.1 Proposed Solution
We often have extra padding at the tail of a record. If we ensure
that the first byte (if any) of this padding is zero, we will
have a way for future changes to detect code which doesn't
understand a new format: the new code would write (say) a 1 at
the tail, and thus if there is no tail or the first byte is 0, we
would know the extension is not present on that record.
3 Performance And Scalability Issues
3.1 <TDB_CLEAR_IF_FIRST-Imposes-Performance>TDB_CLEAR_IF_FIRST
...
...
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