overview
$URL
/<db-uuid>/
/replica-uuid
/latest-sequence-no
/replica-version
/cas/records/<substr(sha1,0,1)>/substr(sha1,1,1)/<sha1>
/cas/changesets/<substr(sha1,0,1)>/substr(sha1,1,1)/<sha1>
/records (optional?)
/<record type> (for resolution is actually _prophet-resolution-<cas-key>)
/<record uuid> which is a file containing a list of 0 or more rows
last-changed-sequence-no : cas key
/changesets.idx
index which has records:
each record is : local-replica-seq-no : original-uuid : original-seq-no : cas key
...
/resolutions/
/replica-uuid
/latest-sequence-no
/cas/<substr(sha1,0,1)>/substr(sha1,1,1)/<sha1>
/content (optional?)
/_prophet-resolution-<cas-key> (cas-key == a hash the conflicting change)
/<record uuid> (record uuid == the originating replica)
last-changed-sequence-no : <cas key to the content of the resolution>
/changesets.idx
index which has records:
each record is : local-replica-seq-no : original-uuid : original-seq-no : cas key
...
Inside the top level directory for the mirror, you'll find a directory named as
a hex-encoded UUID. This directory is the root of the published
replica. The uuid uniquely identifes the database being replicated. All
replicas of this database will share the same UUID.
Inside the
<db-uuid> directory, are a set of files and directories
that make up the actual content of the database replica:
- "replica-uuid"
- Contains the replica's hex-encoded UUID.
- "replica-version"
- Contains a single integer that defines the replica format.
The current replica version is 1.
- "latest-sequence-no"
- Contains a single integer, the replica's most recent
sequence number.
- "cas/records"
- "cas/changesets"
- The "cas" directory holds changesets and records,
each keyed by a hex-encoded hash of the item's content. Inside the
"cas" directory, you'll find a two-level deep directory tree of
single-character hex digits. You'll find the changeset with the sha1
digest "f4b7489b21f8d107ad8df78750a410c028abbf6c" inside
"cas/changesets/f/4/f4b7489b21f8d107ad8df78750a410c028abbf6c".
You'll find the record with the sha1 digest
"dd6fb674de879a1a4762d690141cdfee138daf65" inside
"cas/records/d/d/dd6fb674de879a1a4762d690141cdfee138daf65".
TODO: define the format for changesets and records
- "records"
- Files inside the "records" directory are index
files which list off all published versions of a record and the key
necessary to retrieve the record from the content-addressed store.
Inside the "records" directory, you'll warn "Got types
".join(',',@types);find directories named for each "type"
in your database. Inside each "type" directory, you'll find a
two-level directory tree of single hexadecimal digits. You'll find the
record with the type <Foo> and the UUID
"29A3CA16-03C5-11DD-9AE0-E25CFCEE7EC4" stored in
records/Foo/2/9/29A3CA16-03C5-11DD-9AE0-E25CFCEE7EC4
The format of record files is:
<unsigned-long-int: last-changed-sequence-no><40 chars of hex: cas key>
The file is sorted in asecnding order by revision id.
- "changesets.idx"
- The "changesets.idx" file lists each changeset in
this replica and provides an index into the content-addressed
storage to fetch the content of the changeset.
The format of record files is:
<unsigned-long-int: sequence-no><16 bytes: changeset original source uuid><unsigned-long-int: changeset original source sequence no><16 bytes: cas key - sha1 sum of the changeset's content>
The file is sorted in ascending order by revision id.
- "resolutions"
BUILD¶
Open a connection to the prophet replica source identified by
"$self-"url>.
replica_version¶
Returns this replica's version.
set_replica_version¶
Sets the replica's version to the given integer.
uuid¶
Return the replica's UUID
Internals of record handling¶
changesets_for_record { uuid => $uuid, type => $type, limit
=> $int }¶
Returns an ordered set of changeset objects for all changesets containing
changes to this object.
Note that changesets may include changes to other records
If "limit" is specified, only returns that many changesets (starting
from record creation).