From 6be52b830d2fa631d30dbe7bae581bef41a2208b Mon Sep 17 00:00:00 2001 From: Steve Loughran Date: Sun, 19 Feb 2017 22:23:05 +0000 Subject: [PATCH] adding multipart put to blobstore --- .../Files/ProjectNotes/index.xml | 4 +- .../Files/binder.backup | Bin 3624 -> 3613 bytes .../Files/search.indexes | 38 +- .../QuickLook/Thumbnail.jpg | Bin 32071 -> 79724 bytes .../Settings/ui.plist | 53 ++- .../kerberos_the_madness.scrivx | 122 +++---- tlaspecs/blobstore/objectstore.tla | 344 +++++++++++++----- 7 files changed, 384 insertions(+), 177 deletions(-) diff --git a/the_madness_beyond_the_gate/book/kerberos_the_madness.scriv/Files/ProjectNotes/index.xml b/the_madness_beyond_the_gate/book/kerberos_the_madness.scriv/Files/ProjectNotes/index.xml index 03f741c..4b02c93 100644 --- a/the_madness_beyond_the_gate/book/kerberos_the_madness.scriv/Files/ProjectNotes/index.xml +++ b/the_madness_beyond_the_gate/book/kerberos_the_madness.scriv/Files/ProjectNotes/index.xml @@ -1,6 +1,6 @@ - + - + General \ No newline at end of file diff --git a/the_madness_beyond_the_gate/book/kerberos_the_madness.scriv/Files/binder.backup b/the_madness_beyond_the_gate/book/kerberos_the_madness.scriv/Files/binder.backup index 3bb514a919059139d5137669b0e7c1a2b1b7cdae..57f6f7ffbfbf31342cb9dca22191655bcd6989b4 100644 GIT binary patch delta 3555 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

?+$%(d`rvgW2rdLe*!j41|T|wg*A2le^5&S z0v-bt0000806l|pN8cr|_fZW10BMf^02=@p00000lhh3>DTSC!R&{s_009K|0RR95 d6aWAKP)h{{000000RRC2VE_OCrVRi9001pj;i~`u delta 3521 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 v0RkQa6aWAK2moWR{6 + @@ -184,11 +184,18 @@ Mitigation strategies 3. Never have your programs ask for more rights than they need, to data, to database tables (and in HBase and Accumulo: columns) 4. Log data in a form which can be used for audit logs. (Issue: what is our story here? Logging to local/remote filesystems isn't it, not if malware could overwrite the logs) - - Discussion - Discussion + + Response to Reviewers' Comments + Response to Reviewers’ Comments -[Insert text here] +We appreciate the detailed comments and suggestions from the reviewers. We have provided our responses below the corresponding comment. + +Reviewer 1 +[Insert reviewers’ comments here] + +[Authors] + +<$fullname> UGI @@ -280,18 +287,8 @@ If you find yourself down at this level you are in trouble. Bear that in mind. Gists - - Response to Reviewers' Comments - Response to Reviewers’ Comments - -We appreciate the detailed comments and suggestions from the reviewers. We have provided our responses below the corresponding comment. - -Reviewer 1 -[Insert reviewers’ comments here] - -[Authors] - -<$fullname> + + Figures Kerberos setup commands @@ -618,8 +615,11 @@ This means that the caller did not have the credentials to talk to a Kerberos-se Past copies Duplicate important drafts into here. - - Figures + + Discussion + Discussion + +[Insert text here] ZOOKEEPER and SASL diff --git a/the_madness_beyond_the_gate/book/kerberos_the_madness.scriv/QuickLook/Thumbnail.jpg b/the_madness_beyond_the_gate/book/kerberos_the_madness.scriv/QuickLook/Thumbnail.jpg index fd38b6c45afa5189487a94b5a41f2a83ddabd1b1..9902d532405dd638a2f1e14c77c2fd315c7db337 100644 GIT binary patch literal 79724 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�J$JEH; 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 Z5v>bl{yjrdPmE)^Xv{qpri*98{{!5sMh^f0 diff --git a/the_madness_beyond_the_gate/book/kerberos_the_madness.scriv/Settings/ui.plist b/the_madness_beyond_the_gate/book/kerberos_the_madness.scriv/Settings/ui.plist index 4278521..c3f1d4b 100644 --- a/the_madness_beyond_the_gate/book/kerberos_the_madness.scriv/Settings/ui.plist +++ b/the_madness_beyond_the_gate/book/kerberos_the_madness.scriv/Settings/ui.plist @@ -46,8 +46,8 @@ 0 binderSplitFrames - {{0, 0}, {205, 981}} - {{206, 0}, {1489, 981}} + {{0, 0}, {174, 756}} + {{175, 0}, {1265, 756}} binderState @@ -140,7 +140,7 @@ mainDocumentEditor.lockedInPlace mainDocumentEditor.scrollRect - {{0, 0}, {606, 304}} + {{0, 0}, {621, 304}} mainDocumentEditor.selectedItemIDs mainDocumentEditor.textEditorState @@ -1002,15 +1002,60 @@ title label status + createdDate + modifiedDate + words + characters + includeInExport + pageBreakBefore + compileAsIs + targetCount + targetCountType + progress + totalWords + totalCharacters + allKeywords + totalTargetCount + totalProgress widths + allKeywords + 64 + characters + 46 + compileAsIs + 110.841796875 + createdDate + 53 + includeInExport + 20 label 114.296875 + modifiedDate + 50 + pageBreakBefore + 66 + progress + 50.041019439697266 status 93.92578125 + targetCount + 50 + targetCountType + 50 title 246 + totalCharacters + 96 + totalProgress + 64 + totalTargetCount + 64 + totalWords + 72 + words + 40 supportingDocumentEditor.outlinerState @@ -1019,7 +1064,7 @@ 10 supportingDocumentEditor.scrollRect - {{0, 0}, {1179.2, 702.40002}} + {{0, 0}, {1012, 522.40002}} supportingDocumentEditor.selectedRanges {13, 0} supportingDocumentEditor.textEditorState diff --git a/the_madness_beyond_the_gate/book/kerberos_the_madness.scriv/kerberos_the_madness.scrivx b/the_madness_beyond_the_gate/book/kerberos_the_madness.scriv/kerberos_the_madness.scrivx index b26220c..903ab0d 100644 --- a/the_madness_beyond_the_gate/book/kerberos_the_madness.scriv/kerberos_the_madness.scrivx +++ b/the_madness_beyond_the_gate/book/kerberos_the_madness.scriv/kerberos_the_madness.scrivx @@ -1,7 +1,7 @@ - - + + - + Draft Yes @@ -14,7 +14,7 @@ - + Front page Yes @@ -26,7 +26,7 @@ 16,0 - + Main content Yes @@ -37,7 +37,7 @@ 0,0 - + Introduction 5 @@ -48,7 +48,7 @@ 206,0 - + Foundational Concepts 5 @@ -59,7 +59,7 @@ 4,0 - + The Limits of Hadoop Security 5 @@ -70,7 +70,7 @@ 3203,0 - + Hadoop IPC Security 5 @@ -81,7 +81,7 @@ 646,0 - + UGI Yes @@ -91,7 +91,7 @@ 2,0 - + SPNEGO 5 @@ -102,7 +102,7 @@ 1239,0 - + ZOOKEEPER and SASL 5 @@ -113,7 +113,7 @@ 833,0 - + java.security.krb5.conf 5 @@ -124,7 +124,7 @@ 1143,0 - + JAAS Configuration 5 @@ -135,7 +135,7 @@ 2,0 - + Logging Yes @@ -145,7 +145,7 @@ 13,0 - + Error Messages to Fear Yes @@ -155,7 +155,7 @@ 2437,0 - + Kerberos Tests with MiniKDC Yes @@ -165,7 +165,7 @@ 2,0 - + Testing against Kerberized Hadoop clusters Yes @@ -175,7 +175,7 @@ 140,0 - + Low-level secrets Yes @@ -185,7 +185,7 @@ 2,0 - + Checklists Yes @@ -197,7 +197,7 @@ - + Acknowledgements Yes @@ -208,7 +208,7 @@ 510,0 - + References Yes @@ -219,7 +219,7 @@ 205,36 - + Figure legends Yes @@ -229,7 +229,7 @@ 0,72 - + Tables Yes @@ -240,7 +240,7 @@ 0,0 - + Table 1 Yes @@ -253,7 +253,7 @@ - + Figures Yes @@ -265,7 +265,7 @@ 0,0 - + Configuring Firefox for SPNEGO Yes @@ -280,7 +280,7 @@ - + Templates Yes @@ -290,7 +290,7 @@ 0,0 - + Table X Yes @@ -302,7 +302,7 @@ 47,0 - + Cover letter Yes @@ -313,7 +313,7 @@ 414,0 - + Response to Reviewers' Comments Yes @@ -324,7 +324,7 @@ 94,0 - + Gists Yes @@ -334,7 +334,7 @@ 0,0 - + META-INF/services/org.apache.hadoop.security.SecurityInfo Yes @@ -346,7 +346,7 @@ - + Chapter Yes @@ -358,13 +358,13 @@ - + Research Yes - + Abstract & keywords Yes @@ -375,7 +375,7 @@ 111,0 - + Kerberos setup commands Yes @@ -385,7 +385,7 @@ 5814,83 - + Hadoop and Kerberos Yes @@ -397,7 +397,7 @@ - + Ideas 0,0 @@ -407,7 +407,7 @@ 0,0 - + To-Do List 0,0 @@ -417,13 +417,13 @@ 39,0 - + Trash Yes - + Methods Yes @@ -433,7 +433,7 @@ 0,0 - + Patients Yes @@ -444,7 +444,7 @@ 35,0 - + Methods/interventions Yes @@ -455,7 +455,7 @@ 8,18 - + Outcome measurements Yes @@ -466,7 +466,7 @@ 21,18 - + Statistical analysis Yes @@ -479,7 +479,7 @@ - + Past copies 0,0 @@ -488,7 +488,7 @@ 0,0 - + 20062014 Submitted to [journal] 1 @@ -501,7 +501,7 @@ - + # Licensed to the Apache Software Foundation (ASF) under Yes @@ -511,7 +511,7 @@ 0,0 - + Methods Yes @@ -522,7 +522,7 @@ 0,27 - + Results Yes @@ -533,7 +533,7 @@ 7,0 - + Discussion Yes @@ -544,7 +544,7 @@ 10,0 - + Background and Significance Yes @@ -555,7 +555,7 @@ 47,0 - + Conclusion Yes @@ -565,7 +565,7 @@ 10,0 - + Untitled Yes @@ -575,7 +575,7 @@ 0,0 - + Untitled Yes @@ -585,7 +585,7 @@ 0,0 - + Untitled Yes @@ -595,7 +595,7 @@ 0,0 - + Notes of Obscurity Yes @@ -605,7 +605,7 @@ 20,0 - + References-1 Yes @@ -657,9 +657,9 @@ Loughran - 0 + 0 0 - + 22 diff --git a/tlaspecs/blobstore/objectstore.tla b/tlaspecs/blobstore/objectstore.tla index 7614304..54c651a 100644 --- a/tlaspecs/blobstore/objectstore.tla +++ b/tlaspecs/blobstore/objectstore.tla @@ -39,56 +39,69 @@ The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL This specification defines -1. A model of an object store: a consistent store of data and metadata, - one without any notion of a "directory hierarchy". It is intended to model - object stores such as Amazon S3 and OpenStack swift, while leaving scope for - optional features which may only be available on other stores. +* A model of a consistent object store: a consistent store of data and metadata, + one without any notion of a "directory hierarchy". It is intended to model + object stores such as Amazon S3, and includes its multipart PUT API. -2. An API for communicating with object stores from Hadoop filesystems. - -3. How the Object Store API must translate into changes in the state of the Object Store - itself. That is: what MUST an implementation do? +* An API for communicating with object stores from Hadoop filesystems. +It is intended to be a foundation for defining algorithms with worth +with S3, such as the s3guard commit algorithm. ============================================================================ *) CONSTANTS - Paths, \* the non-finite set of all possible valid paths - Data, \* the non-finite set of all possible sequences of bytes - MetadataKeys, \* the set of all possible metadata keys + Paths, \* the non-finite set of all possible valid paths + PathsAndRoot, \* Paths and the "root" path; the latter is read-only + Data, \* the non-finite set of all possible sequences of bytes + MetadataKeys, \* the set of all possible metadata keys MetadataValues, \* the non-finite set of all possible metadata values - Timestamp, \* A timestamp - Byte - + Timestamp, \* A timestamp + Byte, + Etag, + MultipartPutId, + PartId, + NonEmptyString -ASSUME Paths \in (STRING \ "") +ASSUME NonEmptyString \in (STRING \ "") +ASSUME PathsAndRoot \in STRING +ASSUME Paths \in (PathsAndRoot \ "") -(* There are some metadata keys which are system MD entries. Those MAY be queried but SHALL NOT be explictly set. *) +(* There are some metadata keys which are system metadata entries. + Those MAY be queried but SHALL NOT be explictly set. (more specifically, they'll be ignored if you try. *) -ASSUME MetadataKeys \in (STRING \ "") +ASSUME MetadataKeys \in NonEmptyString -ASSUME MetadataValues \in (STRING \ "") +ASSUME MetadataValues \in STRING \* Timestamps are positive integers since the epoch. ASSUME Timestamp \in Nat /\ Timestamp > 0 -ASSUME Byte \in 0..256 +\* Byte type +ASSUME Byte \in 0..255 + +(* Data is a sequence of bytes *) +ASSUME Data \in Seq(Byte) + +ASSUME Etag \in NonEmptyString +ASSUME MultipartPutId \in NonEmptyString -ASSUME Data \in Seq(Byte) +(* Only 11,000 parts are allowed *) +ASSUME PartId \in 1..11000 ---------------------------------------------------------------------------------------- -(* +(* There is a predicate to validate a pathname. This is considered implementation-specific. It could be describable as a regular expression specific to each implementation, - though constraints such as "no two adjacent '/' characters" might make for a complex regexp. + though constraints such as "no two adjacent '/' characters" might make for a complex regexp. Perhaps each FS would have a set of regexps which all must be valid for a path to be considered valid. *) @@ -108,17 +121,33 @@ ASSUME \A e \in MetadataKeys: is_valid_metadata_key(e) \in BOOLEAN CONSTANT path_matches(_, _, _) -(* This should really be defined by looking inside the strings. + +(* This should really be defined by looking inside the strings. It is: all paths starting with the prefix up to those ending in the suffix *) ASSUME \A p \in Paths, prefix, delimiter \in Paths: path_matches(p, prefix, delimiter) \in BOOLEAN +(* A function to return an etag of some data *) +CONSTANT etag_of(_) + +(* A function to return an etag of a multipart operation; implementation specific*) +CONSTANT etag_of_multipart_operation(_) + +(* Etags are strings, hence in MetadataValues. *) +ASSUME \A d \in Data: etag_of(d) \in Etag + +(* +This is commented out as it is not a requirement that etags are the same for an equivalent sequence +of bytes. All that matters is that one is generated. +ASSUME \A d, e \in Data: d = e => etag_of(d) = etag_of(e) \in STRING +*) + ---------------------------------------------------------------------------------------- -VARIABLES - store \* The object store - +VARIABLE store \* The object store +VARIABLE pending \* Pending requests + ---------------------------------------------------------------------------------------- @@ -133,41 +162,67 @@ Success == "Success" MetadataEntry == [ - key: MetadataKeys, \* The key of the entry - value: MetadataValues \* the value of this metadata entry - ] + key: MetadataKeys, \* The key of the entry + value: MetadataValues \* the value of this metadata entry +] SystemMetadata == [ size: Nat, created: Timestamp - ] +] (* A store : path -> (data, user-md, system-md) update: PUT, DELETE -query: GET, HEAD, LIST(path) -*) +query: GET, HEAD, LIST(path) +*) StoreEntry == [ - data: Data , \* the data in the entry - created: Timestamp \* timestamp + data: Data , \* the data in the entry + created: Timestamp, \* timestamp + etag: MetadataValues ] ListingEntry == [ path: Paths, \* The path to the entry data: Data , \* the data in the entry - created: Timestamp, \* timestamp + created: Timestamp, \* timestamp + etag: MetadataValues, metadata: MetadataEntry \* it's a set ] - + (* The check for a path having an entry is pulled out for declaring invariants *) has_entry(s, p) == p \in DOMAIN s +PendingMultipartPartRequest == [ + putId: MultipartPutId, + part: PartId, + data: Data +] + +PendingMultipartPartResponse == [ + etag: Etag +] + +PendingMultipartPutPart == [ + data: Data, + etag: Etag +] + + +(* A pending Multipart Upload has an ID and start timne, which is used to define the final + create time of the committed operation *) +PendingMultipartOperation == [ +\* id: STRING, + path: Paths, + started: Timestamp, + parts: [PartId -> PendingMultipartPutPart] +] (* @@ -179,19 +234,19 @@ for those implementors planning to write tests. StoreStateInvariant == /\ store \in [Paths -> StoreEntry] - /\ \A path \in DOMAIN store: has_entry(store, path) - /\ \A path \in (Paths \ DOMAIN store): ~has_entry(store, path) - - + /\ pending \in [MultipartPutId -> PendingMultipartOperation] + + (* The initial state of the store is that it is empty. *) (* Notice how this ignores the root entry, "". This is a special entry: object stores are not filesystems: there is no root node equivalent to "/" *) InitialStoreState == /\ StoreStateInvariant /\ DOMAIN store = {} + /\ DOMAIN pending = {} ----- +---- (* Actions. @@ -207,48 +262,46 @@ final state for testability doPut(path, data, current_time, result) == LET validArgs == path \in Paths /\ data \in Data /\ current_time \in Timestamp - IN + IN \/ /\ ~validArgs /\ result' = BadRequest - /\ UNCHANGED store + /\ UNCHANGED <> \/ /\ validArgs /\ result' = Success - /\ store' = [store EXCEPT ![path] = [data |-> data, created |-> current_time]] + /\ UNCHANGED pending + /\ store' = [store EXCEPT ![path] = [data |-> data, created |-> current_time, etag |-> etag_of(data)]] (* GET: path -> data as well as summary metadata -*) +*) doGet(path, result, metadata, data) == LET - validArgs == path \in Paths /\ data \in Data + validArgs == path \in PathsAndRoot exists == has_entry(store, path) - IN + entry == store[path] + IN \/ /\ ~validArgs /\ result' = BadRequest - /\ UNCHANGED store + /\ UNCHANGED <> + + \/ /\ validArgs + /\ path = "" + /\ result' = Success + /\ UNCHANGED <> + /\ data' = {} + \/ /\ validArgs /\ ~exists /\ result' = NotFound - /\ UNCHANGED store + /\ UNCHANGED <> + \/ /\ validArgs /\ exists /\ result' = Success /\ data' = store[path].data - /\ metadata' = [created |-> store[path].created, length |-> Len(store[path].data)] - /\ UNCHANGED store - -(* -HEAD: the metadata without the data -*) - -(* -doHead2(path, result, metadata) == - LET - data == d \in Data - IN - doGet(path, result', data, metadata') -*) + /\ metadata' = [created |-> entry.created, length |-> Len(entry.data), etag |-> entry.etag] + /\ UNCHANGED <> (* HEAD: the metadata without the data @@ -256,57 +309,72 @@ HEAD: the metadata without the data doHead(path, result, metadata) == LET - validArgs == path \in Paths + validArgs == path \in PathsAndRoot exists == has_entry(store, path) - IN + entry == store[path] + IN \/ /\ ~validArgs /\ result' = BadRequest - /\ UNCHANGED store + /\ UNCHANGED <> + + \/ /\ validArgs + /\ path = "" + /\ result' = Success + /\ metadata' = [created |-> 0, length |-> 0] + /\ UNCHANGED <> + \/ /\ validArgs /\ ~exists /\ result' = NotFound - /\ UNCHANGED store + /\ UNCHANGED <> + \/ /\ validArgs /\ exists /\ result' = Success - /\ metadata' = [created |-> store[path].created, length |-> Len(store[path].data)] - /\ UNCHANGED store + /\ metadata' = [created |-> entry.created, length |-> Len(entry.data), etag |-> entry.etag] + /\ UNCHANGED <> doDelete(path, result) == LET validArgs == path \in Paths exists == has_entry(store, path) - IN + IN \/ /\ ~validArgs /\ result' = BadRequest - /\ UNCHANGED store + /\ UNCHANGED <> + \/ /\ validArgs /\ ~exists /\ result' = NotFound - /\ UNCHANGED store + /\ UNCHANGED <> + \/ /\ validArgs /\ exists /\ result' = Success /\ store' = [p \in (DOMAIN store \ path) |-> store[p]] + /\ UNCHANGED pending doCopy(source, dest, current_time, result) == LET - validArgs == source \in Paths /\ dest \in Paths /\ current_time \in Timestamp - exists == has_entry(store, source) - IN + validArgs == source \in Paths /\ dest \in Paths /\ current_time \in Timestamp + exists == has_entry(store, source) + IN \/ /\ ~validArgs /\ result' = BadRequest - /\ UNCHANGED store + /\ UNCHANGED <> + \/ /\ validArgs /\ ~exists /\ result' = NotFound - /\ UNCHANGED store + /\ UNCHANGED <> + \/ /\ validArgs /\ exists /\ result' = Success /\ store' = [store EXCEPT ![dest] = [data |-> store[source].data, created |-> current_time]] + /\ UNCHANGED pending (* The list operation returns the metadata of all entries in the object store whose path matches the prefix/suffix pattern. S3 also returns a string sequence of common subpath underneath, essential "what look like directories" *) @@ -314,19 +382,113 @@ S3 also returns a string sequence of common subpath underneath, essential "what pathsMatchingPrefix(prefix, suffix) == \A path \in DOMAIN store : path_matches(path, prefix, suffix) doList(prefix, suffix, result, listing) == - /\ prefix \in STRING - /\ suffix \in STRING - /\ result' = Success - /\ listing' = [path \in pathsMatchingPrefix(prefix, suffix) |-> - [path |-> path, created |-> store[path].created, length |-> Len(store[path].data)]] - /\ UNCHANGED store + LET + validArgs == prefix \in STRING /\ suffix \in STRING + IN + \/ /\ ~validArgs + /\ result' = BadRequest + /\ UNCHANGED <> + + \/ /\ validArgs + /\ result' = Success + /\ listing' = [path \in pathsMatchingPrefix(prefix, suffix) |-> + [path |-> path, created |-> store[path].created, length |-> Len(store[path].data), etag |-> store[path].etag]] + /\ UNCHANGED <> +(* +Initiate a multipart PUT. The destination is specified; the create time of the final artifact is set to the current server time. +A unique ID is returned. +There is no requirement for the destination to be unique: multiple requests may target the same destination, with the order of the commit +operation defining the order in which the results become visible. +*) + + +doInitiateMultipartPut(dest, current_time, result, operationId) == + LET + validArgs == dest \in Paths /\ current_time \in Timestamp + newPartId == CHOOSE id \in MultipartPutId: ~id \in DOMAIN pending + IN + \/ /\ ~validArgs + /\ result' = BadRequest + /\ UNCHANGED <> + + \/ /\ validArgs + /\ result' = Success + /\ UNCHANGED store + /\ operationId' = newPartId + /\ pending' = [pending EXCEPT ![newPartId] = [path |-> dest, created |-> current_time]] + +(* +PUT a single part for an operation +*) +doPutPart(operationId, partId, part_data, result, etagResult) == + LET + validArgs == operationId \in DOMAIN pending /\ part_data \in Data /\ partId \in PartId + etagVal == etag_of(part_data) + IN + \/ /\ ~validArgs + /\ result' = BadRequest + /\ UNCHANGED <> + + \/ /\ validArgs + /\ result' = etagVal + /\ etagResult' = etagVal + /\ UNCHANGED store + /\ pending' = [pending EXCEPT + ![operationId] = [ + path |-> pending[operationId].dest, + parts |-> [pending[operationId].parts EXCEPT ![partId] = [data |-> part_data, etag |-> etagVal] ] + ] + ] + +(* + The commit operation is the most complex. The part list supplied defines the order in which the supplied parts + are saved to the store. + TODO: work out how to declare that all data is the ordered appending of the data of the list of parts. Recurse? +*) +doCommitMultipartPut(operationId, parts, result) == + LET + upload == pending[operationId] + validArgs == (operationId \in DOMAIN pending) /\ (parts \in Seq(PartId)) + /\ (\A p \in parts: p \in DOMAIN upload.parts) /\ (\A p \in DOMAIN upload.parts: p \in parts) + \* alldata == \A [part \in (1...Len(parts) -1]) Append(upload[parts[part]], upload[parts[part + 1]) + alldata == parts + etag == etag_of_multipart_operation(upload) + IN + \/ /\ ~validArgs + /\ result' = BadRequest + /\ UNCHANGED <> + + \/ /\ validArgs + /\ result' = Success + /\ pending' = [p \in (DOMAIN pending \ operationId) |-> pending[p]] + /\ store' = [store EXCEPT ![upload.path] = [data |-> alldata, created |-> upload.created, etag |-> etag]] + + +(* + Abort the multipart put operation. + All pending data is deleted; the pending operation record removed. + *) +doAbortMultipartPut(operationId, result) == +LET + validArgs == operationId \in DOMAIN pending +IN + \/ /\ ~validArgs + /\ result' = BadRequest + /\ UNCHANGED <> + + \/ /\ validArgs + /\ result' = Success + /\ UNCHANGED store + /\ pending' = [p \in (DOMAIN pending \ operationId) |-> pending[p]] + + --------- \* PutInvariant == \A p in Paths: doDelete(p, Success) => ~has_entry(store', p) - + \* DeleteInvariant == \A p in Paths: doDelete(p, Success) => ~has_entry(store', p) @@ -343,16 +505,16 @@ GetLengthInvariant == (* GetAndHeadInvariant == \A path \in DOMAIN store, sysMd \in SystemMetadata, data \in Data : - doGet(path, Success, data, sysMd) ==> doHead(path, Success, sysMd) + doGet(path, Success, data, sysMd) ==> doHead(path, Success, sysMd) *) (* The details you get back in a listing match the details you get back from a doGet call on the specific path *) (* of course, on an eventually consistent object store, there may be lag *) (* - - ListAndGetInvariant == TODO - + + ListAndGetInvariant == TODO + *) @@ -400,7 +562,7 @@ listAction == [ (* Process a request, generate a result. *) (* TODO: merge GET data into result *) (* -process(request, result, current_time) == +process(request, result, current_time) == LET verb == request.verb IN \/ verb = "PUT" /\ doPut(request.path, request.data, current_time, result) @@ -409,7 +571,7 @@ process(request, result, current_time) == \/ verb = "DELETE" /\ doDelete(request.path, result) \/ verb = "COPY" /\ doCopy(request.source, request.dest, current_time, result) \/ verb = "LIST" /\ doList(request.prefix, request.suffix, result) - + *) @@ -422,7 +584,7 @@ THEOREM InitialStoreState => []StoreStateInvariant ============================================================================= \* Modification History -\* Last modified Thu Oct 06 15:30:47 BST 2016 by stevel +\* Last modified Sun Feb 19 22:19:11 GMT 2017 by stevel \* Created Sun Jun 19 18:07:44 BST 2016 by stevel