From 880816b62023a0d952ba3040a5f01fedea87b012 Mon Sep 17 00:00:00 2001 From: nruest Date: Thu, 23 Mar 2017 15:14:10 -0400 Subject: [PATCH] Move Atomic Batch Operations into its own specification. * Partially resolves https://github.com/fcrepo/fcrepo-specification/issues/76 --- .gitignore | 4 ++ .travis.yml | 9 +++ index.html | 179 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 192 insertions(+) create mode 100644 .gitignore create mode 100644 .travis.yml create mode 100644 index.html diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..744f8bf --- /dev/null +++ b/.gitignore @@ -0,0 +1,4 @@ +*~ +*.swp +.DS_Store + diff --git a/.travis.yml b/.travis.yml new file mode 100644 index 0000000..cdbf569 --- /dev/null +++ b/.travis.yml @@ -0,0 +1,9 @@ +language: java +jdk: + - oraclejdk8 + +install: + - pip install --user html5validator + +script: html5validator + diff --git a/index.html b/index.html new file mode 100644 index 0000000..94d8ba6 --- /dev/null +++ b/index.html @@ -0,0 +1,179 @@ + + + + Fedora Atomic Batch Operations Specification + + + + + + +
+
+
+
+
+
+
+

Atomic Operations

+ +
+

Introduction

+

+ Fedora provides factilities by which to conduct multiple operations against a repository + in an atomic fashion. This is accomplished by the use of headers on requests. An atomic + series of operations should not require any more requests than the same series of + operations performed non-atomically. +

+
+ +
+

Beginning an atomic series of operations

+

+ A client begins an atomic series of requests by sending any request to any resource with + the header Atomic-Start. The server MUST respond by including a header + Atomic-ID with a unique identifier for the series. The effect of the + request, if it has one, and if the request is successful, MUST be visible to clients + using that identifier to add to this series of requests, as described + below, until the series expires or is finished. The effect of the + request, if it has one, and if the request is successful, SHOULD NOT be visible to + clients not using that identifier to add to this series of requests. The effect of the + request MUST NOT be durable unless and until the series is successfully + finished. +

+
+ +
+

Adding to an atomic series of operations

+

+ A client adds to an atomic series of requests by sending any request to any resource with + the header Atomic-ID and the identifier for that series. The effect of the + request, if it has one, and if the request is successful, MUST be visible to clients + using that identifier to add to this series of requests, until the series expires or is + finished. The effect of the request, if it has one, and if the request is successful, + SHOULD NOT be visible to clients not using that identifier to add to this series of + requests. The effect of the request MUST NOT be durable unless and until the series is + successfully finished. An implementation MUST respond + to any request with multiple Atomic-ID headers with different values or + with an Atomic-ID header with a value that has not been assigned to a + series or that has expired (see below) with a 409 response. + That response MUST include an Atomic-Invalid header or headers with the + invalid identifier or identifiers. +

+
+ +
+

Expiration

+

+ An implementation MAY enforce automatic expiration for an atomic series of requests. + If so, the response to any request made as part of the series MUST have a + Atomic-Expires header with the HTTP datetime at which the series will + expire. An implementation MAY extend the lifetime of a series upon the receipt of any + request specifying the unique identifier of that series in the Atomic-ID + header. +

+
+ +
+

Committing a series

+

+ A client can finish an atomic series of requests by sending any + PUT/POST/PATCH/DELETE request + including both a Atomic-Commit header and a Atomic-ID + header with the unique identifier of an existing series. The effects of all requests + in the series MUST become durable and MUST become visible to all clients. The unique + identifier of the series MUST be expired and MUST NOT be reused. +

+
+ +
+

Aborting a series

+

+ A client can finish an atomic series of requests by sending any request including + both a Atomic-Abort header and a Atomic-ID header with + the unique identifier of an existing series. The effects of all requests in the + series MUST disappear to all clients, and MUST be durably gone. The unique identifier + of the series MUST be expired and MUST NOT be reused. +

+
+
+
+

Acknowledgments

+

+

+
+ +