Introduction
An effort to implement RFC 4533 is currently being done. We believe that it's a good basis for a MMR system, and it has been proved to work (see OpenLDAP SyncRepl implementation).
This is a description on this ongoing effort.
Data structure
RFC 4533 defines a set of data structures used for communicating to a remote server the changes done locally. Here are those data structure :
No Format |
---|
syncUUID ::= OCTET STRING (SIZE(16)) -- constrained to UUID syncCookie ::= OCTET STRING syncRequestValue ::= SEQUENCE { mode ENUMERATED { -- 0 unused refreshOnly (1), -- 2 reserved refreshAndPersist (3) }, cookie syncCookie OPTIONAL, reloadHint BOOLEAN DEFAULT FALSE } syncStateValue ::= SEQUENCE { state ENUMERATED { present (0), add (1), modify (2), delete (3) }, entryUUID syncUUID, cookie syncCookie OPTIONAL } syncDoneValue ::= SEQUENCE { cookie syncCookie OPTIONAL, refreshDeletes BOOLEAN DEFAULT FALSE } syncInfoValue ::= CHOICE { newcookie [0] syncCookie, refreshDelete [1] SEQUENCE { cookie syncCookie OPTIONAL, refreshDone BOOLEAN DEFAULT TRUE }, refreshPresent [2] SEQUENCE { cookie syncCookie OPTIONAL, refreshDone BOOLEAN DEFAULT TRUE }, syncIdSet [3] SEQUENCE { cookie syncCookie OPTIONAL, refreshDeletes BOOLEAN DEFAULT FALSE, syncUUIDs SET OF syncUUID } } |
The following graphics present the state diagram used to implement those data structure.
syncRequestValue
syncStateValue
syncDoneValue
syncInfoValue