Re: draft of CHECKOUT method

Bradley Sergeant (Bradley.Sergeant@merant.com)
Wed, 13 Oct 1999 12:44:23 -0700


Message-ID: <F3B2A0DB2FC1D211A511006097FFDDF53438A8@BEAVMAIL>
From: Bradley Sergeant <Bradley.Sergeant@merant.com>
To: "'jamsden@us.ibm.com'" <jamsden@us.ibm.com>, ietf-dav-versioning@w3.org
Date: Wed, 13 Oct 1999 12:44:23 -0700
Subject: RE: draft of CHECKOUT method

See <bhs> below

-----Original Message-----
From:	jamsden@us.ibm.com [mailto:jamsden@us.ibm.com]
Sent:	Wednesday, October 13, 1999 11:13 AM
To:	ietf-dav-versioning@w3.org
Subject:	RE: draft of CHECKOUT method

Bradley Sergeant <Bradley.Sergeant@merant.com> on 10/13/99 01:16:25 PM

To:   Jim Amsden/Raleigh/IBM@IBMUS, ietf-dav-versioning@w3.org
cc:

Subject:  RE: draft of CHECKOUT method

<soapbox>
One man's chaos is another man's art.

We should be careful to avoid imposing overly restrictive semantics to
"protect" users from themselves.  By this I mean we should try to create the
core protocol necessary to form the building blocks of a collaborative
authoring solution, and avoid dictating a single style of solution.
</soapbox>
<jra>
Agreed, but in this case, activities were not protecting users, or
preventing
them from doing anything the wanted, the just encourage proactive change
management.
</jra>
<bhs>
My point is that they are one way to deal with parallel development.  Not
the only way.  So we don't require it in the protocol.
</bhs>

The fact is that activities are not required to do parallel development.
<jra>
But the activities are really effectively still there, they're just
anonymous.
</jra>
<bhs> 
You're over my head.  They are not required or necessary even under the
covers.  Please, explain.
</bhs>

As I read Jim Whitehead's suggestion the following suggestion came to
mind...
The DAV:single-checkout property handles the parallel checkout policy for
all users, but there is also the case of users wanting individual control.
Rather than returning the DAV:working-resources list in each CHECKOUT method
response, we could add an optional DAV:single-checkout element to
DAV:coparams to tell the CHECKOUT method to cancel the check out for
resources that already working resources.  The affect is the same as setting
the DAV:single-checkout on the revision, except that it only affects the one
method call.  In the case where DAV:single-checkout (either the property or
the DAV:coparams element) causes the cancellation of a checkout we could
then return the list of working revisions in the DAV:coresults.
Alternatively, we could make the client explicitly query for that info.  I'd
suggest the latter as being sufficient and I prefer it for its simplicity.
<jra>
This is a nice idea, but we are starting to get a lot of control coupling in
CHECKOUT. This will make the method hard to understand and use, hard to
implement with reliable interoperability, and hard to maintain.
</jra>
<bhs>
We're talking about adding the <DAV:single-checkout/> element to
DAV:coparams to trigger the same semantics as the DAV:single-checkout
property.
You're saying this makes CHECKOUT harder to understand, use, implement, and
maintain.
That does not seem true to me.
  It is not hard to understand.  It is simply a way for the client to say he
doesn't want to trigger parallel development, even on revisions that allow
it.
  It is certainly easier to use for clients not using activities.  They now
have a simple way to control if they as a single client want to do parallel
development or not.
  The implementation seems straight forward, reusing much of that for the
DAV:single-checkout property.
  No extra maintenance is apparent to me.

Perhaps you are still taking the stance that everyone must always use
activities for all parallel development and therefore this is unneeded
baggage.  If this is where you are coming from then you should be pushing to
make activities required in the protocol for doing parallel development.
Until that day, the protocol can and should support simple non
activity-aware clients and servers as well as activity-based clients and
servers.
</bhs>

--Sarge

-----Original Message-----
From:     jamsden@us.ibm.com [mailto:jamsden@us.ibm.com]
Sent:     Wednesday, October 13, 1999 7:31 AM
To:  ietf-dav-versioning@w3.org
Subject:  RE: draft of CHECKOUT method



Jim,
I assume you meant a list of working resources of the revision being checked
out, not its parent collection? Perhaps a status code indicating the
resource is
already checked out would suffice.

The model was that a revision could not be checked out more than once in the
same activity. We relaxed that to support parallel development with servers
that
don't support activities. However, I have never been comfortable with this
decision as it allows uncontrolled parallel development with no support for
merging. In a distributed multi-user environment, this can lead to revision
chaos. The purpose of activities is to refuse the checkout if the revision
is
already checked out and require the user to purposefully create a new
activity
that they know has to merge later so they can plan for it. The alternative
is to
have them be forced to do the merge on checkin when they didn't even know
anyone
else was working on the same revision, and don't have access to the
information
required to figure out how the merge should be done. Sometimes simple
clients
and servers don't result in simple scenarios for the user.

I thing your suggestion is a good compromise as at least it gives a client a
chance to warn the user that they are introducing parallel development, and
cancel the checkout if they are not prepared to, or cannot deal with the
consequences. I do think it should be just a status code, and not overload
REPORT which should be used to query information about versioned resources.






Jim Whitehead <ejw@ics.uci.edu> on 10/12/99 07:06:26 PM

To:   ietf-dav-versioning@w3.org
cc:

Subject:  RE: draft of CHECKOUT method



One thought I had on CHECKOUT today is that I think we want CHECKOUT to
return a list of other working resources that are currently active and were
also created by a checkout against the same parent.  An authoring client
would use this information to inform a user that they are about to enter a
parallel development/authoring situation, and give them the option to not
continue if they do not wish to merge.

While a client could query for this before performing the checkout, there's
no guarantee someone else wouldn't sneak in a checkout between the query and
the following checkout, thus making the query result out-of-date.

Thoughts?

- Jim

> Here is my first draft of the CHECKOUT method.  There are more
> details that
> need to be nailed down, especially WRT CHECKOUT of collections,
> but I wanted
> to get this out for some feedback.
>
>  <<bhscheckout.doc>>
> --Sarge
>
>