Skip to content

Commit 880816b

Browse files
committed
Move Atomic Batch Operations into its own specification.
* Partially resolves fcrepo/fcrepo-specification#76
1 parent b14322b commit 880816b

File tree

3 files changed

+192
-0
lines changed

3 files changed

+192
-0
lines changed

.gitignore

+4
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
*~
2+
*.swp
3+
.DS_Store
4+

.travis.yml

+9
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
language: java
2+
jdk:
3+
- oraclejdk8
4+
5+
install:
6+
- pip install --user html5validator
7+
8+
script: html5validator
9+

index.html

+179
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,179 @@
1+
<!DOCTYPE html>
2+
<html lang="en">
3+
<head>
4+
<title>Fedora Atomic Batch Operations Specification</title>
5+
<meta charset='utf-8'>
6+
<meta name="description" content="Fedora Atomic Operations Specification">
7+
<script src='https://www.w3.org/Tools/respec/respec-w3c-common'
8+
async class='remove'></script>
9+
<script class='remove'>
10+
var respecConfig = {
11+
specStatus: "unofficial",
12+
shortName: "fedora-abo",
13+
includePermalinks: true,
14+
editors: [
15+
{ name: "Ben Armintor",
16+
company: "Columbia University",
17+
companyURL: "http://library.columbia.edu/"},
18+
{ name: "Aaron Birkland",
19+
company: "Johns Hopkins",
20+
companyURL: "http://www.library.jhu.edu/"},
21+
{ name: "Aaron Coburn",
22+
company: "Amherst College",
23+
companyURL: "https://www.amherst.edu/"},
24+
{ name: "Sergio Fernández",
25+
company: "Redlink",
26+
companyURL: "http://redlink.co/"},
27+
{ name: "Tom Johnson",
28+
company: "Digital Public Library of America",
29+
companyURL: "https://dp.la/"},
30+
{ name: "Nick Ruest",
31+
company: "York University",
32+
companyURL: "http://www.library.yorku.ca"},
33+
{ name: "Rob Sanderson",
34+
company: "The Getty Trust",
35+
companyURL: "http://www.getty.edu/"},
36+
{ name: "Bethany Seeger",
37+
company: "Amherst College",
38+
companyURL: "https://www.amherst.edu/library"},
39+
{ name: "Adam Soroka",
40+
company: "University of Virginia",
41+
companyURL: "https://www.virginia.edu/"},
42+
{ name: "Simeon Warner",
43+
company: "Cornell University",
44+
companyURL: "http://www.cornell.edu/"},
45+
{ name: "Joshua Westgard",
46+
company: "University of Maryland",
47+
companyURL: "http://www.lib.umd.edu/"},
48+
{ name: "Jared Whiklo",
49+
company: "University of Manitoba",
50+
companyURL: "http://umanitoba.ca"},
51+
{ name: "Andrew Woods",
52+
company: "DuraSpace",
53+
companyURL: "http://duraspace.org/"}
54+
],
55+
edDraftURI: "https://fcrepo.github.io/fcrepo-specification/",
56+
testSuiteURI: "https://github.com/fcrepo/fcrepo-tcks",
57+
wg: "Fedora Specification Working Group",
58+
wgURI: "https://wiki.duraspace.org/display/FEDORAAPI/Fedora+Specification",
59+
wgPublicList: "https://groups.google.com/forum/#!forum/fedora-community",
60+
otherLinks: [{
61+
key: "Repository",
62+
data: [
63+
{
64+
value: "Github",
65+
href: "https://github.com/fcrepo/fcrepo-specification"
66+
},
67+
{
68+
value: "Issues",
69+
href: "https://github.com/fcrepo/fcrepo-specification/issues"
70+
},
71+
{
72+
value: "Commits",
73+
href: "https://github.com/fcrepo/fcrepo-specification/commits"
74+
}
75+
]
76+
}],
77+
maxTocLevel: 3,
78+
logos: [{src: "http://fedora.info/assets/fedora_logo.png"}],
79+
overrideCopyright: "<p class='copyright'>This document is licensed under a <a class='subfoot' href='https://creativecommons.org/licenses/by/4.0/' rel='license'>Creative Commons Attribution 4.0 License</a>.</p>"
80+
};
81+
</script>
82+
</head>
83+
<body>
84+
<section id='abstract' class='informative'>
85+
</section>
86+
<section id="conformance">
87+
</section>
88+
<section id="terminology">
89+
</section>
90+
<section id ="atomic-operations">
91+
<h2>Atomic Operations</h2>
92+
93+
<section id="atomic-operations-introduction" class="informative">
94+
<h2>Introduction</h2>
95+
<p>
96+
Fedora provides factilities by which to conduct multiple operations against a repository
97+
in an atomic fashion. This is accomplished by the use of headers on requests. An atomic
98+
series of operations should not require any more requests than the same series of
99+
operations performed non-atomically.
100+
</p>
101+
</section>
102+
103+
<section id="begin">
104+
<h2>Beginning an atomic series of operations</h2>
105+
<p>
106+
A client begins an atomic series of requests by sending any request to any resource with
107+
the header <code>Atomic-Start</code>. The server MUST respond by including a header
108+
<code>Atomic-ID</code> with a unique identifier for the series. The effect of the
109+
request, if it has one, and if the request is successful, MUST be visible to clients
110+
using that identifier to add to this series of requests, as described
111+
<a href="#adding">below</a>, until the series expires or is finished. The effect of the
112+
request, if it has one, and if the request is successful, SHOULD NOT be visible to
113+
clients not using that identifier to add to this series of requests. The effect of the
114+
request MUST NOT be durable unless and until the series is successfully
115+
<a href="#commit">finished</a>.
116+
</p>
117+
</section>
118+
119+
<section id="adding">
120+
<h2>Adding to an atomic series of operations</h2>
121+
<p>
122+
A client adds to an atomic series of requests by sending any request to any resource with
123+
the header <code>Atomic-ID</code> and the identifier for that series. The effect of the
124+
request, if it has one, and if the request is successful, MUST be visible to clients
125+
using that identifier to add to this series of requests, until the series expires or is
126+
finished. The effect of the request, if it has one, and if the request is successful,
127+
SHOULD NOT be visible to clients not using that identifier to add to this series of
128+
requests. The effect of the request MUST NOT be durable unless and until the series is
129+
successfully <a href="#commit">finished</a>. An implementation MUST respond
130+
to any request with multiple <code>Atomic-ID</code> headers with different values or
131+
with an <code>Atomic-ID</code> header with a value that has not been assigned to a
132+
series or that has expired (see <a href="#expiration">below</a>) with a 409 response.
133+
That response MUST include an <code>Atomic-Invalid</code> header or headers with the
134+
invalid identifier or identifiers.
135+
</p>
136+
</section>
137+
138+
<section id="expiration">
139+
<h2>Expiration</h2>
140+
<p>
141+
An implementation MAY enforce automatic expiration for an atomic series of requests.
142+
If so, the response to any request made as part of the series MUST have a
143+
<code>Atomic-Expires</code> header with the HTTP datetime at which the series will
144+
expire. An implementation MAY extend the lifetime of a series upon the receipt of any
145+
request specifying the unique identifier of that series in the <code>Atomic-ID</code>
146+
header.
147+
</p>
148+
</section>
149+
150+
<section id="commit">
151+
<h2>Committing a series</h2>
152+
<p>
153+
A client can finish an atomic series of requests by sending any
154+
<code>PUT</code>/<code>POST</code>/<code>PATCH</code>/<code>DELETE</code> request
155+
including both a <code>Atomic-Commit</code> header and a <code>Atomic-ID</code>
156+
header with the unique identifier of an existing series. The effects of all requests
157+
in the series MUST become durable and MUST become visible to all clients. The unique
158+
identifier of the series MUST be expired and MUST NOT be reused.
159+
</p>
160+
</section>
161+
162+
<section id="abort">
163+
<h2>Aborting a series</h2>
164+
<p>
165+
A client can finish an atomic series of requests by sending any request including
166+
both a <code>Atomic-Abort</code> header and a <code>Atomic-ID</code> header with
167+
the unique identifier of an existing series. The effects of all requests in the
168+
series MUST disappear to all clients, and MUST be durably gone. The unique identifier
169+
of the series MUST be expired and MUST NOT be reused.
170+
</p>
171+
</section>
172+
</section>
173+
<section class='appendix'>
174+
<h2>Acknowledgments</h2>
175+
<p>
176+
</p>
177+
</section>
178+
</body>
179+
</html>

0 commit comments

Comments
 (0)