[cvsnt] Feature proposal - Distributed Servers

Daniel Lapolla ldlapolla at yahoo.com
Tue Feb 7 16:06:54 GMT 2006


Hello everyone.

I'm writing this proposal because I'd like to share and receive some 
feedback about this (still raw) basic idea. I'd like to improve the idea 
and uncover the flaws I'm overseeing.

I think it could be implemented in the CVSNT server with relative ease 
and maybe it can be present in some future CVSNT release (hope that not 
in a long term one).

Tony, I'd like to know what you think about this proposal. Is there 
anything like this proposal in the roadmap for the product? By the way: 
is there some sort of roadmap published for the product? It would be 
nice if the community could see what is being planned and for when it's 
being planned.

Regards

Daniel Lapolla



Porposal for Distributed CVSNT Servers
======================================

Motivation:
===========
Several users need to maintain replicated-read-only servers in order to 
support geographic distribution of development teams. The methods to 
maintain and update the replicas are conflict leading because they 
cannot cope with online updates. Also, I think it would be great for the 
product to have such feature.

I'm sure that there are several other motivations and complaints, so 
feel free to add them to the list.

Proposal:
========
CVSNT servers can be configured in two ways: master or slave.
A slave server must have a master server specified during it's setup. A 
master server is a master server.

CVSNT clients are connected only with their respective slave server. As 
far as I could go, they don't need to know that their host is a slave 
and that there is a master server.

Both the master server and it's slaves can accept write operations. The 
catch is that if a slave server receives a write operation, it will be 
forwarded to it's master. I know that it demands a connection with some 
minimal reliability and speed, but comparing this approach to the way 
most people do distributed CVSNT deployments, this is not a worst 
problem than the one we already have, right?

The master maintains a numbered list of successfully executed 
transactions so that slaves can, later, ask for the deltas of new 
transactions since his last update. At each transaction, the master can 
broadcast the availability of a new transaction delta to it's slaves.

If the slave is down for some reason, it can ask for the transactions he 
missed since his last sync, because the master keeps the list of 
transactions (as mentioned above).

For greater "updateness" of the slaves, they could also be configured to 
check for new updates with the master at each update operation performed 
by its users.

Changes to ACLs and other info commonly present in fileattr.xml or 
inside CVSROOT files would take place first in the master and then 
broadcasted to the slaves (or downloaded by them when they come up again).

In the future this schema could be improved to be more fault tolerant. 
For example a slave could be promoted to be a master if the master (or 
its connection) fails.

But for now, it would be a huge improvement over the methods that use 
rsync and other related tools.

That's all for now... Thanks for reading!



More information about the cvsnt mailing list