storj/docs/blueprints/byte-range-multipart-copy/images/copy-object.svg
Erik van Velzen 0cfbd34da2 docs/blueprints: byte range multipart copy
Design proposal for approval to support S3's UploadPartCopy. Major
revision 2.

Change-Id: I9cbe934a773d3496101f32afb19492ea75f48061
2022-10-13 12:03:17 +00:00

55 lines
14 KiB
XML

<?xml version="1.0" encoding="UTF-8" standalone="no"?><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" contentStyleType="text/css" height="656px" preserveAspectRatio="none" style="width:757px;height:656px;background:#FFFFFF;" version="1.1" viewBox="0 0 757 656" width="757px" zoomAndPan="magnify"><defs/><g><line style="stroke:#181818;stroke-width:0.5;stroke-dasharray:5.0,5.0;" x1="38" x2="38" y1="36.7999" y2="620.3003"/><line style="stroke:#181818;stroke-width:0.5;stroke-dasharray:5.0,5.0;" x1="267.5" x2="267.5" y1="36.7999" y2="620.3003"/><line style="stroke:#181818;stroke-width:0.5;stroke-dasharray:5.0,5.0;" x1="396" x2="396" y1="36.7999" y2="620.3003"/><line style="stroke:#181818;stroke-width:0.5;stroke-dasharray:5.0,5.0;" x1="581.5" x2="581.5" y1="36.7999" y2="620.3003"/><rect fill="#E2E2F0" height="30.7999" rx="2.5" ry="2.5" style="stroke:#181818;stroke-width:0.5;" width="67" x="5" y="5"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="53" x="12" y="25.0059">S3Client</text><rect fill="#E2E2F0" height="30.7999" rx="2.5" ry="2.5" style="stroke:#181818;stroke-width:0.5;" width="67" x="5" y="619.3003"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="53" x="12" y="639.3062">S3Client</text><rect fill="#E2E2F0" height="30.7999" rx="2.5" ry="2.5" style="stroke:#181818;stroke-width:0.5;" width="70" x="232.5" y="5"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="56" x="239.5" y="25.0059">Gateway</text><rect fill="#E2E2F0" height="30.7999" rx="2.5" ry="2.5" style="stroke:#181818;stroke-width:0.5;" width="70" x="232.5" y="619.3003"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="56" x="239.5" y="639.3062">Gateway</text><rect fill="#E2E2F0" height="30.7999" rx="2.5" ry="2.5" style="stroke:#181818;stroke-width:0.5;" width="53" x="370" y="5"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="39" x="377" y="25.0059">Uplink</text><rect fill="#E2E2F0" height="30.7999" rx="2.5" ry="2.5" style="stroke:#181818;stroke-width:0.5;" width="53" x="370" y="619.3003"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="39" x="377" y="639.3062">Uplink</text><rect fill="#E2E2F0" height="30.7999" rx="2.5" ry="2.5" style="stroke:#181818;stroke-width:0.5;" width="64" x="549.5" y="5"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="50" x="556.5" y="25.0059">Satellite</text><rect fill="#E2E2F0" height="30.7999" rx="2.5" ry="2.5" style="stroke:#181818;stroke-width:0.5;" width="64" x="549.5" y="619.3003"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="50" x="556.5" y="639.3062">Satellite</text><polygon fill="#181818" points="255.5,80,265.5,84,255.5,88,259.5,84" style="stroke:#181818;stroke-width:1.0;"/><line style="stroke:#181818;stroke-width:1.0;" x1="38.5" x2="261.5" y1="84" y2="84"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="102" x="45.5" y="62.8769">PUT /bucket/dest</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="205" x="45.5" y="78.477">x-amz-copy-source: /bucket/source</text><polygon fill="#181818" points="384.5,136,394.5,140,384.5,144,388.5,140" style="stroke:#181818;stroke-width:1.0;"/><line style="stroke:#181818;stroke-width:1.0;" x1="267.5" x2="390.5" y1="140" y2="140"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="92" x="274.5" y="134.477">CopyObject call</text><path d="M177,97 L177,169 L262,169 L262,107 L252,97 L177,97 " fill="#FEFFDD" style="stroke:#181818;stroke-width:0.5;"/><path d="M252,97 L252,107 L262,107 L252,97 " fill="#FEFFDD" style="stroke:#181818;stroke-width:0.5;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="58" x="183" y="114.077">oldBucket</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="40" x="183" y="129.677">oldKey</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="64" x="183" y="145.277">newBucket</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="46" x="183" y="160.877">newKey</text><polygon fill="#181818" points="569.5,220.35,579.5,224.35,569.5,228.35,573.5,224.35" style="stroke:#181818;stroke-width:1.0;"/><line style="stroke:#181818;stroke-width:1.0;" x1="396.5" x2="575.5" y1="224.35" y2="224.35"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="149" x="403.5" y="218.827">BeginCopyObjectRequest</text><path d="M223,179.4 L223,255.4 L391,255.4 L391,189.4 L381,179.4 L223,179.4 " fill="#FEFFDD" style="stroke:#181818;stroke-width:0.5;"/><path d="M381,179.4 L381,189.4 L391,189.4 L381,179.4 " fill="#FEFFDD" style="stroke:#181818;stroke-width:0.5;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="41" x="229" y="196.477">Bucket</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="61" x="229" y="214.027">ObjectKey</text><text fill="#000000" font-family="sans-serif" font-size="13" font-style="italic" lengthAdjust="spacing" textLength="57" x="294" y="214.3">encrypted</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="66" x="229" y="229.627">NewBucket</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="86" x="229" y="247.1771">NewObjectKey</text><text fill="#000000" font-family="sans-serif" font-size="13" font-style="italic" lengthAdjust="spacing" textLength="57" x="319" y="247.4501">encrypted</text><polygon fill="#181818" points="407.5,298.8501,397.5,302.8501,407.5,306.8501,403.5,302.8501" style="stroke:#181818;stroke-width:1.0;"/><line style="stroke:#181818;stroke-width:1.0;stroke-dasharray:2.0,2.0;" x1="401.5" x2="580.5" y1="302.8501" y2="302.8501"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="159" x="413.5" y="297.3271">BeginCopyObjectResponse</text><path d="M586,265.7001 L586,325.7001 L750,325.7001 L750,275.7001 L740,265.7001 L586,265.7001 " fill="#FEFFDD" style="stroke:#181818;stroke-width:0.5;"/><path d="M740,265.7001 L740,275.7001 L750,275.7001 L740,265.7001 " fill="#FEFFDD" style="stroke:#181818;stroke-width:0.5;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="53" x="592" y="282.7771">StreamId</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="82" x="592" y="300.3271">SegmentKeys</text><text fill="#000000" font-family="sans-serif" font-size="13" font-style="italic" lengthAdjust="spacing" textLength="57" x="678" y="300.6001">encrypted</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="77" x="592" y="317.8771">MetadataKey</text><text fill="#000000" font-family="sans-serif" font-size="13" font-style="italic" lengthAdjust="spacing" textLength="57" x="673" y="318.1501">encrypted</text><polygon fill="#181818" points="569.5,411.4752,579.5,415.4752,569.5,419.4752,573.5,415.4752" style="stroke:#181818;stroke-width:1.0;"/><line style="stroke:#181818;stroke-width:1.0;" x1="396.5" x2="575.5" y1="415.4752" y2="415.4752"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="151" x="403.5" y="409.9522">FinishCopyObjectRequest</text><path d="M196,336.4001 L196,480.4001 L391,480.4001 L391,346.4001 L381,336.4001 L196,336.4001 " fill="#FEFFDD" style="stroke:#181818;stroke-width:0.5;"/><path d="M381,336.4001 L381,346.4001 L391,346.4001 L381,336.4001 " fill="#FEFFDD" style="stroke:#181818;stroke-width:0.5;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="53" x="202" y="353.4771">StreamId</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="41" x="202" y="369.0771">Bucket</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="61" x="202" y="386.6271">ObjectKey</text><text fill="#000000" font-family="sans-serif" font-size="13" font-style="italic" lengthAdjust="spacing" textLength="57" x="267" y="386.9001">encrypted</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="66" x="202" y="402.2272">NewBucket</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="86" x="202" y="419.7772">NewObjectKey</text><text fill="#000000" font-family="sans-serif" font-size="13" font-style="italic" lengthAdjust="spacing" textLength="57" x="292" y="420.0502">encrypted</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="82" x="202" y="437.3272">SegmentKeys</text><text fill="#000000" font-family="sans-serif" font-size="13" font-style="italic" lengthAdjust="spacing" textLength="57" x="288" y="437.6002">encrypted</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="77" x="202" y="454.8772">MetadataKey</text><text fill="#000000" font-family="sans-serif" font-size="13" font-style="italic" lengthAdjust="spacing" textLength="57" x="283" y="455.1502">encrypted</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="113" x="202" y="472.4272">MetaData (optional)</text><text fill="#000000" font-family="sans-serif" font-size="13" font-style="italic" lengthAdjust="spacing" textLength="57" x="319" y="472.7002">encrypted</text><polygon fill="#181818" points="407.5,507.5252,397.5,511.5252,407.5,515.5252,403.5,511.5252" style="stroke:#181818;stroke-width:1.0;"/><line style="stroke:#181818;stroke-width:1.0;stroke-dasharray:2.0,2.0;" x1="401.5" x2="580.5" y1="511.5252" y2="511.5252"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="161" x="413.5" y="506.0022">FinishCopyObjectResponse</text><path d="M586,490.9502 L586,517.9502 L706,517.9502 L706,500.9502 L696,490.9502 L586,490.9502 " fill="#FEFFDD" style="stroke:#181818;stroke-width:0.5;"/><path d="M696,490.9502 L696,500.9502 L706,500.9502 L696,490.9502 " fill="#FEFFDD" style="stroke:#181818;stroke-width:0.5;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="38" x="592" y="509.9772">Object</text><text fill="#000000" font-family="sans-serif" font-size="13" font-style="italic" lengthAdjust="spacing" textLength="57" x="634" y="510.2502">encrypted</text><polygon fill="#181818" points="278.5,544.1003,268.5,548.1003,278.5,552.1003,274.5,548.1003" style="stroke:#181818;stroke-width:1.0;"/><line style="stroke:#181818;stroke-width:1.0;stroke-dasharray:2.0,2.0;" x1="272.5" x2="395.5" y1="548.1003" y2="548.1003"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="105" x="284.5" y="542.5772">CopyObject return</text><path d="M401,528.5002 L401,553.5002 L460,553.5002 L460,538.5002 L450,528.5002 L401,528.5002 " fill="#FEFFDD" style="stroke:#181818;stroke-width:0.5;"/><path d="M450,528.5002 L450,538.5002 L460,538.5002 L450,528.5002 " fill="#FEFFDD" style="stroke:#181818;stroke-width:0.5;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="38" x="407" y="545.5772">Object</text><polygon fill="#181818" points="49.5,587.5003,39.5,591.5003,49.5,595.5003,45.5,591.5003" style="stroke:#181818;stroke-width:1.0;"/><line style="stroke:#181818;stroke-width:1.0;stroke-dasharray:2.0,2.0;" x1="43.5" x2="266.5" y1="591.5003" y2="591.5003"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="78" x="55.5" y="585.9773">200 response</text><path d="M272,564.1003 L272,605.1003 L391,605.1003 L391,574.1003 L381,564.1003 L272,564.1003 " fill="#FEFFDD" style="stroke:#181818;stroke-width:0.5;"/><path d="M381,564.1003 L381,574.1003 L391,574.1003 L381,564.1003 " fill="#FEFFDD" style="stroke:#181818;stroke-width:0.5;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="55" x="278" y="581.1773">&lt;ETag /&gt;</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="98" x="278" y="596.7773">&lt;LastModified /&gt;</text><!--MD5=[c68d0cdce1f5ef1209089073f7131a5d]
@startuml
S3Client -> Gateway: PUT /bucket/dest\nx-amz-copy-source: /bucket/source
Gateway -> Uplink: CopyObject call
note left
oldBucket
oldKey
newBucket
newKey
end note
Uplink -> Satellite: BeginCopyObjectRequest
note left
Bucket
ObjectKey //encrypted//
NewBucket
NewObjectKey //encrypted//
end note
Uplink <- - Satellite: BeginCopyObjectResponse
note right
StreamId
SegmentKeys //encrypted//
MetadataKey //encrypted//
end note
Uplink -> Satellite: FinishCopyObjectRequest
note left
StreamId
Bucket
ObjectKey //encrypted//
NewBucket
NewObjectKey //encrypted//
SegmentKeys //encrypted//
MetadataKey //encrypted//
MetaData (optional) //encrypted//
end note
Uplink <- - Satellite: FinishCopyObjectResponse
note right: Object //encrypted//
Gateway <- - Uplink: CopyObject return
note right: Object
S3Client <- - Gateway: 200 response
note right
<ETag />
<LastModified />
end note
@enduml
PlantUML version 1.2022.7(Mon Aug 22 19:01:30 CEST 2022)
(GPL source distribution)
Java Runtime: OpenJDK Runtime Environment
JVM: OpenJDK 64-Bit Server VM
Default Encoding: UTF-8
Language: en
Country: US
--></g></svg>