[svn.haxx.se] · SVN Dev · SVN Users · SVN Org · TSVN Dev · TSVN Users · Subclipse Dev · Subclipse Users · this month's index

HTTP v2 commit out-of-dateness checks

From: C. Michael Pilato <cmpilato_at_collab.net>
Date: Mon, 23 Feb 2009 15:56:22 -0500

I started down the path of adding If: headers to the ra_serf commit-related
requests, per the HTTP v2 plan. But I quickly noticed that ra_serf's
delete_entry() implementation already tells the server its caller-provided
base_revision -- only it doesn't use If: but instead a custom header.
Interested as to why we do this, I started digging around and eventually
finally found myself here:

   http://subversion.tigris.org/issues/show_bug.cgi?id=1017#desc11

Are Ben's comments about the problems with using etags and If: accurate? Do
they present an insurmountable challenge?

When I posed a question about why to use If: and etags instead of a custom
header in the http-protocol-v2.txt doc, Greg answer it with:

      A: Because If-Match is standard HTTP, and proxies can/should
          know about etags to improve the overall performance.

          Just jam that base-revision into the etag. In fact, I think
          when mod_dav_svn makes up an etag, it uses that mechanism. ]

I'm not sure I understand the benefit with respect to proxies here, though.
 These are extremely time-sensitive operations against URLs that have
unique-by-design, temporarily-useful transaction names in them. Not the
kind of request that's ever issue more than once across the set of all
clients in the Universe. As such, they seem like the worse type of
candidate for a cache-served response of the sort any proxy aimed at
performance enhancement might wish to offer. So I fail to see how the use
of If: and etags truly helps us. And I wouldn't be pushing the matter if it
weren't the confusing state of the code today. The server generates etags
like so:

  "REV/path/to/item" ### etag
  W/"REV/path/to/item" ### weak version of the etag

but the client doesn't pass that format back to the server in its If:
headers. It uses If: for lock tokens:

  </path/to/item> (<LOCK-TOKEN>) ### used for verifying locks

and uses the custom X-SVN-Version-Name: header to transmit base revisions.

Help?

-- C. Michael Pilato
   Asst. to Mr. H. T. Teepee

-- 
C. Michael Pilato <cmpilato_at_collab.net>
CollabNet   <>   www.collab.net   <>   Distributed Development On Demand
------------------------------------------------------
http://subversion.tigris.org/ds/viewMessage.do?dsForumId=462&dsMessageId=1216601

Received on 2009-02-23 21:56:40 CET

This is an archived mail posted to the Subversion Dev mailing list.