Re: checkout/checkin/uncheckout vs. lock/unlock

Chris Kaler (ckaler@microsoft.com)
Mon, 30 Nov 1998 20:47:16 -0800


Message-ID: <4FD6422BE942D111908D00805F3158DF0A75794A@RED-MSG-52>
From: Chris Kaler <ckaler@microsoft.com>
To: "'David G. Durand'" <dgd@cs.bu.edu>, ietf-dav-versioning@w3.org
Date: Mon, 30 Nov 1998 20:47:16 -0800
Subject: RE: checkout/checkin/uncheckout vs. lock/unlock

There are several types of locks.  Shared, Advisory, and Exclusive.  I
cannot see why you would (in most cases) want to check out a resource
without taking one of these locks.  In a collaboration world, you want to
know who else is working on the document.  Locks provide an existing
mechanism to discover and manage this information.

Personally, I don't like the idea of method side-effects: "BTW this
operation also locked something."  

Hopefully we can continue this discussion on Wed.

Chris

		-----Original Message-----
		From:	David G. Durand [mailto:dgd@cs.bu.edu]
		Sent:	Monday, November 30, 1998 6:00 PM
		To:	ietf-dav-versioning@w3.org
		Subject:	RE: checkout/checkin/uncheckout vs.
lock/unlock

		>I'd like to hear who these people are.  Most people I talk
to either do
		>implicit versioning (don't want to be bothered by it, just
make it happen)
		>or use exclusive versioning (which requires locking).  So I
find this
		>requirement confusing.  Not to mean its invalid, I've just
never heard it
		>before.

		I've certainly mentioned it almost every time I open my
mouth. It's one of
		my little obsessions.

		If you're supporting tight collaboration, you may prefer to
allow
		(temporary) divergence in document state in order to achieve
maximal
		progress (automatic forking is one way to avoid locking).
Similarly, if you
		are relying on merge tools (like the CVS model for software
version
		control) you may prefer to create a conflict that can be
resolved later,
		rather than block the human.

		My database teacher always used to point out that some
actions (like making
		a report to a terminal, or starting a user interaction)
inherently
		commitcommit a transaction because you "can't abort the
user." Similarly in
		editing, you may not want to lock out a user, but that
doesn't mean that
		you just want to lose information either.

		Separating checkout (reservation, as we called it in the
requirements
		document) from locking makes this distinction clear. It also
separates the
		"transaction management" function of a checkout (maintaining
whatever state
		the server may need to maintain) from the locking function:
(which enforces
		access conditions on a resource).

		One thing we _could have_ (I'm not advocating this, but some
might) is a
		response that would let a server tell a client that a lock
has been
		assigned as a result of the checkout operation. Servers that
enforce
		locking all the time would then be able to inform clients of
the needed
		lock ID. This makes the protocol more complex, but reduces
the round trips
		for a lock/checkout pair.

		Those of you who are building servers that enforce this kind
of locking
		probably know more than I do about whether that's a needed
tradeoff.

		  -- David
		_________________________________________
		David Durand              dgd@cs.bu.edu  \
david@dynamicDiagrams.com
		Boston University Computer Science        \  Sr. Analyst
		http://www.cs.bu.edu/students/grads/dgd/   \  Dynamic
Diagrams
		--------------------------------------------\
http://www.dynamicDiagrams.com/
		MAPA: mapping for the WWW
\__________________________