-
Dual locking: instead of using one global lock for a joedb file, this version locks head and tail separately. This allows a much nicer handling of concurrent access to files:
- Journal construction locks the head only, so it does not block if a transaction is in progress or the file was opened in exclusive mode since both of those situations lock the tail only.
- Concurrent reads use a shared lock on the head of the file to read the checkpoint, and can be blocked only during very short periods of time when a writable journal is constructed or when the checkpoint is modified.
-
Write access to exclusive and shared files is completely unified, so
Connection
andFile_Connection
can now handle both exclusive and shared files. -
Explicit handling of pull-only connections. The server can now cleanly serve a read-only file.
-
New
CURL_File
allows opening any URL as a read-only file. An http server supporting range access can serve a read-only database. -
SQL dump connection
-
Generated code produces an error if compiled with a version of joedb different from the version that was used to generate it.
-
Incompatibilities with previous version:
- In Posix environments, locking changed from using
flock
to usingfcntl
. Those two locking mechanisms are not compatible in Linux, so it is important to avoid mixing joedb versions because they may not understand each-other's locks. Windows and MacOS do not have this problem. - The network protocol changed to indicate a pull-only connection during handshake, so it is not compatible with the previous version.
Local_Connection
is removed since it can be replaced by a plainConnection
.Pullable_Database
is removed and replaced byReadonly_Client
.
- In Posix environments, locking changed from using