monotone-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Monotone-devel] [RFC] Monotone NETSYNC Hook Extension & Abstraction Lay


From: Ralf S. Engelschall
Subject: [Monotone-devel] [RFC] Monotone NETSYNC Hook Extension & Abstraction Layer
Date: Sun, 23 Sep 2007 20:02:46 +0200
User-agent: Mutt/1.5.16 OpenPKG/CURRENT (2007-06-09)

On my road of trying to adopt Monotone for use in my various larger
Open Source projects like OSSP, OpenPKG, etc I've last week worked on
an important issue (at least for me) which perhaps looks strange to the
"maximum distribution is everything which matters" guys in the VCS camp:

   How to best combine the developer-requested distributed VCS nature
   of Monotone with the central ACL nature required at the "master"
   repository of those projects?

To get you an impression how "deep" the problem is we try to solve
here: we want that the developers can use full distributed VCS outside
the central repository. Nevertheless, they have to fulfill a mandatory
contributor agreement (to protect the licensing, etc) which especially
means they are allowed to propagate/merge/pluck only revisions within
a particular branch tree (e.g. "openpkg.*") and inside this tree only
developers who have signed the contributor agreement are allowed
to commit their stuff. As long as a developer is fulfilling these
constraints he will be able to share his revisions (which indirectly
usually carry the revisions of others due to merging) with the master
repository (from which official release tarballs and packages are
rolled). If he breaks out of these constraints, he is _forced_ to stay
out at all.

Please do not confuse this with the idea of policy branches some of
you already discussed. My understanding is that policy branches are
about distributed policy _recommendations_, while I'm talking about
central policy _enforcement_ here. So, this stuff is the other side
of the "policy branches" medal. For a final solution one might wish
both AFAIK. The "policy branches" are for the distribution, while our
solution is for the "master" repository which usually is the middle of
our proposed partial star topology.

My partner Thomas Lotterer and I came up with the idea to solve the
problem at the server-side of the master repository by directly
enforcing the access control on keys, revisions, and certs during
NETSYNC and even _ROLLING BACK_ the _WHOLE_ NETSYNC transaction in
case an ACL fails. And I've now also developed an experimental
implementation for this and I have written a little bit more about this
stuff in my BLOG a few days ago (see the following URL for details:
http://trainofthoughts.org/blog/2007/09/16/distributed-vcs-central-acl/).
We are currently testing this stuff in practice with a few test
repositories. Looks promising so far.

Now comes the time where I would like to let you Monotone hackers review
this stuff in more detail. The stuff mainly looks like this (see the
attachments to this mail for a snapshot of this code):

1. monotone-netsync-hooks.diff

   Monotone was extended in C++ with four additional NETSYNC Lua hooks:
   one for the receiving and storage of each type of data: epoch, key,
   revision, cert. The hook for each data can decide whether to accept,
   ignore or reject it. And for rejecting it can decide whether after
   aborting the NETSYNC session the already received data is kept
   (database transaction commit) or thrown away (database transaction
   rollback).

2. lua-logfile.lua
   lua-dump.lua

   These are reusable auxilliary Lua extensions (not depending on
   Monotone at all actually). The "lua-dump.lua" is like Perl's
   Data::Dumper and a great tool for debugging Lua scripts during
   development. The "lua-logfile" is a little OO class for logfile
   abstraction. It can be optionally be used by "monotone-netsync.lua"
   and "monotone-aaa.lua" to log to a (even common) logfile.

3. monotone-netsync.pod
   monotone-netsync.lua

   This is the generic NETSYNC hooking abstraction layer for Monotone
   Lua which allows arbitrary Lua extensions to easily hook (even in
   parallel) into the NETSYNC processing. The primary consumer certainly
   is the "AAA" extension for Monotone, providing Authentication
   (Access), Authorization (Content) and Accounting (Logging). But is
   can be also used for hooking a mirror extension or whatever else
   interesting into Monotone. All without interference.

4. monotone-aaa.lua
   monotone-aaa.bio

   This is the first cut for an AAA Lua extension which at least
   provides the access control part. It uses a basic_io based ACL file
   for granting read-only or read-write access on certain branches
   to certain keys (corresponding to the users). The difference to
   Monotone's "read-permission" and "write-permission" files is that it
   especially allows the control of write operations to certain branches
   (and not just in general to all branches). Also, it uses a single
   "basic_io" file and leverages from the new NETSYNC abstraction.

5. monotone-server.lua

   This is the --rcfile of the "mtn serve" process for running an ACL
   controlled Monotone server on the "master" repository side.

If you review it, review it in this order, please. Else it certainly is
not such easy too understand as the later parts in the above list depend
on the earlier parts.

My proposal would be that at least "monotone-netsync-hooks.diff" (1)
and "monotone-netsync.{pod,lua}" (3) should be provided by Monotone
out-of-the-box as these are absolutely generic and reusable parts lots
of people could benefit from. The other parts are more specific, but
still could be worth to be included with Monotone (in contrib/ only).

Feedback?
                                       Ralf S. Engelschall
                                       address@hidden
                                       www.engelschall.com

PS: If you think I like Lua just because I coded all this stuff in Lua,
    please see http://trainofthoughts.org/blog/2007/09/16/lua-popularity/
    and give your feedback there, too ;-)

Attachment: monotone-netsync.pod
Description: Text document

Attachment: monotone-netsync.lua
Description: Text document

Attachment: monotone-netsync-hooks.diff
Description: Text document

Attachment: lua-dump.lua
Description: Text document

Attachment: lua-logfile.lua
Description: Text document

Attachment: monotone-server.lua
Description: Text document

Attachment: monotone-aaa.lua
Description: Text document

Attachment: monotone-aaa.bio
Description: Text document


reply via email to

[Prev in Thread] Current Thread [Next in Thread]