- From: Andrei Sambra <andrei.sambra@gmail.com>
- Date: Tue, 8 Apr 2014 01:24:12 -0400
- To: Sandro Hawke <sandro@w3.org>
- Cc: ashok malhotra <ashok.malhotra@oracle.com>, Linked Data Platform Working Group <public-ldp-wg@w3.org>
- Message-ID: <CAFG79ej87Pd5yM_PT1QbUvfifNL+uXrwPzzgVKYh_XW8ZFOB+g@mail.gmail.com>
Hi all, Perhaps there is something we can reuse from WebDAV's locking mechanism [1]? Best, Andrei [1] http://www.webdav.org/specs/rfc2518.html#locking On Mon, Apr 7, 2014 at 5:49 PM, Sandro Hawke <sandro@w3.org> wrote: > This all kind of brings me back to my point to Ted. The programming > model over HTTP is *so* different than we're used to in the relational > database world, I really don't think much of that work applies. Like > there's no way to obtain and release a lock. (I mean, we could make a > container of locks you post to, to create a lock. I think that would be a > worst-of-both-worlds design.) > > A useful theory review is probably going to come more from distributed > systems people than database people, I suspect, and they're going to have > to do some work to figure out the system we're describing. It's hard to > see that happening in the next week. > > Perhaps this is also the point to note that we've had comments from some > of the top experts in HTTP. They told us they found our work problematic, > and we told them "so be it", as I recall. > > -- Sandro > > On 04/07/2014 04:25 PM, Sandro Hawke wrote: > >> On April 7, 2014 3:45:19 PM EDT, ashok malhotra < >> ashok.malhotra@oracle.com> wrote: >> >>> Hi Sandro: >>> Yes, snapshotting can be useful for purposes other than paging. >>> Some databases offer a "flashback" capability that allows you to >>> go back to a previous version of a table to recover from errors, etc. >>> >>> But for paging I had a somewhat different design in mind. >>> Assume that we design a prefer header that may have values "snapshot" >>> or "rolling" where rolling gives you the current state of the >>> collection >>> even as it changes from underneath you. >>> >>> Note that paging is about graphs, not containers. Even if it's >> restricted to containers, it's still only about the graph that is the state >> of the container, and has nothing to do with whether items in the container >> change state. >> >> When a request comes in with prefer=snapshot, the server makes a copy >>> of the collection and its members. It then serves those pages. When >>> the >>> client moves away from the collection the snapshot is deleted. >>> >> Thus, >> >>> the >>> snapshot is created on demand only for a specific paging request. >>> >>> So you're suggesting we have snapshot paging and rolling paging, but no >> snapshots unless you're doing paging? That seems likely to be annoying, >> like sometimes you'd want a snapshot, and be frustrated that you can't get >> one since the resource isn't big enough to page. I don't have an immediate >> use case for snapshots outside of paging, though. >> >> Also, how can the server tell that the client has "moved away"? That's >> not really a notion in http.... I fear the best we can do is have >> timeouts. I suppose if the snapshots were per-client, the client could >> delete them when done. But I think we want the server to allow a snapshot >> to be used by multiple clients, so delete isn't right. >> >> - Sandro >> >> Ashok >>> >>> 4/7/2014 2:54 PM, Sandro Hawke wrote: >>> >>>> On 04/07/2014 11:29 AM, Ashok Malhotra wrote: >>>> >>>>> Some of our developers have also been struggling with the paging >>>>> >>>> issue. >>> >>>> In the discussion one potential solution has emerged which may be >>>>> >>>> worth considering. >>> >>>> When a client accesses a collection and starts to page thru it, the >>>>> >>>> server makes a copy >>> >>>> of the collection (snapshot). It then serves that client from that >>>>> >>>> snapshot. The snapshot >>> >>>> is deleted when the clients commits or aborts. >>>>> >>>> Yes, I called this "static" or "snapshot" paging. >>>> >>>> But this is something one wants with or without paging. It's a >>>> >>> general thing that one wants a web server to do. And it can be quite >>> expensive to provide. So I suggest(ed) we keep it orthogonal. >>> >>>> That is, some servers provide the feature where they allow clients to >>>> >>> snapshot a resource, and use that snapshot for some time. This would be >>> useful for paging, certainly. >>> >>>> This is applicable outside of LDP. http://www.w3.org/TR/ldp/ has a >>>> >>> snapshot that's been http://www.w3.org/TR/2014/WD-ldp-20140311/ for >>> some time. For a while before that, the snapshot was >>> http://www.w3.org/TR/2013/WD-ldp-20130730/ . >>> >>>> One simple design for this would be a Link rel=snapshot header. The >>>> >>> server could include that link on any resource for which it's willing >>> to provide a snapshot, and the link would point to that snapshot. >>> The actually text of link would probably include the timestamp or the >>> etag. Or a version number. >>> >>>> This design has the advantage of being very simple, but it has some >>>> >>> weaknesses. For resources that will have many versions that are >>> never snapshot'd, it's more expensive for the server than necessary, >>> because the server needs to some work on every request, not just ones >>> where the client wants to snapshot. That could be addressed with a >>> Prefer: make-snapshot request from the client, I suppose. >>> >>>> Another weakness is it doesn't provide a way to get a consistent >>>> >>> snapshot of multiple resources, such as a container and its contained >>> resources. The simplest protocol I can think of for that is to allow >>> adding a timestamp to the Prefer: make-snapshot. So the client >>> would say >>> >>>> Prefer: make-snapshot date="Mon, 07 Apr 2014 14:48:24 -0400" >>>> >>>> But that requires the server to be able to reconstruct the previous >>>> >>> states of resources in the recent past. For my applications that >>> might be a reasonable thing to require of the server, but it's still a >>> lot. Probably better to let a multi-resource snapshot wait until >>> there's a clearer use case, where we can see how much server >>> implementors would be willing to do. >>> >>>> >>>> -- Sandro >>>> >>> >> >> >> > >
Received on Tuesday, 8 April 2014 05:25:02 UTC