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 :

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