Introduction

In order to distribute the data in the object repositories amongst the relay servers, they should be replicated. This design describes how this is done.

Protocol

The repository replication protocol has three commands. The first one is to query the object repositories to check which ones there are and what data they contain. The second command and third commands are get and put.

Querying object repositories

This command can be used to exchange information about available object repositories and the versions they contain. Information is exchanged between the central server and client. You ask the server what versions it has, either for a specific repository or for all repositories. The result is a collection of services and range of versions. You can then act on that and ask for versions you don't have.

GET repository/query - returns a full list of repositories and their version ranges;
GET repository/query?customer=luminis&name=shop - returns a version range numbers for a specific repository;
GET repository/query?filter=(customer='luminis') - returns versions for any repository that matches the filter.

About queries

Queries (for log information or entries) come in three forms:

  1. Without any filter, you simply get everything.
  2. With a filter on customer and name you only get the relevant versions for that repository.
  3. With an LDAP filter, where you can filter on arbitrary keys and use compound expressions and pattern matching.

Getting a version

Here you're asking the other server for data. As part of the request, you ask for specific information about one version for one repository.

GET replicate/checkout?customer=luminis&name=shop&version=x - returns a stream of data for version x from the repository.

Putting a version

Putting a version is done from the client to the server.

POST replication/put?customer=luminis&name=shop&version=x - Put a stream of data into the repository.

  • No labels