docs/blueprints: byte range multipart copy

Design proposal for approval to support S3's UploadPartCopy. Major
revision 2.

Change-Id: I9cbe934a773d3496101f32afb19492ea75f48061
This commit is contained in:
Erik van Velzen 2022-07-03 14:20:31 +02:00
parent ea106f8894
commit 0cfbd34da2
15 changed files with 1242 additions and 0 deletions

View File

@ -0,0 +1,305 @@
Byte Range Multipart Copy
===================
This document is a proposal on how to support S3's UploadPartCopy for Storj.
- [Blueprint Background](#Blueprint-Background)
- [Feature Background](#Feature-Background)
- [AWS-CLI Settings](#AWS-CLI-Settings)
- [High-Level Implementation Decision Motivation](#High-Level-Implementation-Decision-Motivation)
- [Restrictions compared to S3 API](#Restrictions-compared-to-S3-API)
- [API additions](#API-additions)
- [Database schema changes](#Database-schema-changes)
- [Metabase data shape](#Metabase-data-shape)
- [Validation](#Validation)
- [Affected existing endpoints](#Affected-existing-endpoints)
- [S3 parameter restrictions](#S3-parameter-restrictions)
- [Stop-gap implementation](#Stop-gap-implementation)
- [Performance impact](#Performance-impact)
- [Optimization of CommitObject](#Optimization-of-CommitObject)
- [Open questions](#Open-questions)
- [Alternative solutions](#Alternative-solutions)
Blueprint Background
------------
- Status: pending design approval, pending sales/product prioritization
- Author: Erik van Velzen
- Issue: https://github.com/storj/storj/issues/4875
- Requirements: https://github.com/storj/roadmap/issues/40
- Review: https://review.dev.storj.io/c/storj/storj/+/8156
- Meetings:
- June 16th 2022: Jacob, Erik, Egon, Bill?, ???
- June 27th 2022: Bill, Michal, Michael/Jacob?, Erik, Steve
- Major revision: 2
Feature Background
--------
UploadPartCopy is S3's method to copy larger objects. It extends multipart upload with the ability to copy byte ranges of existing objects. Amazon [limits CopyObject to 5GB](https://docs.aws.amazon.com/AmazonS3/latest/API/API_CopyObject.html#API_CopyObject_ResponseSyntax), after which you must use UploadPartCopy to copy an object with multiple calls.
Many S3 libraries such as boto3 for Python set a object size threshold, after which, uploads and copies will switch from CopyObject to UploadPartCopy. Given that the Storj S3 gateway does not currently support UploadPartCopy, exceeding this default threshold will return an error.
Customers expect their integrations to “just work” when Storj advertises S3 Compatibility. This feature gap frustrates customers as theyre onboarding and if not resolved, we will lose business.
AWS-CLI Settings
-------------
AWS CLI has the following options which affect UploadPartCopy:
- **multipart_threshold**: This value sets the size threshold for multipart uploads of individual files. The default value is 8 MB.
- **multipart_chunksize**: This value sets the size of each part that the AWS CLI uploads in a multipart upload for an individual file. This setting allows you to break down a larger file (for example, 300 MB) into smaller parts for quicker upload speeds. The default value is 8 MB.
We advise customers to increase these settings to reduce the number of roundtrips and the number of segments created per object. The number of segments is mostly relevant when doing the initial multipart upload.
High-Level Implementation Decision Motivation
----------
Like in the S3 protocol:
- the Storj implementation extends the existing multipart upload functionality
- the copy takes place server-side
The current system has constraints we have to account for with when copying data:
1. The Storj segment keys and metadata keys are encrypted with a content key which is deterministically derived on-demand by Uplink from the bucket, object key (= object identifier, not a cryptographic key) and customer encryption key. This means that for any change in object key the segment keys and metadata keys need to be re-encrypted by Uplink.
2. We have no functionality to create an object from ranges of data. Maybe it will be added when we add small file packing.
3. The current server-side copy schema implies a copy has a single original source object.
4. The current server-side copy schema implies a segment in the copy has the same location (part+index) as in the original object.
This design/implementation will stay within these constraints.
This leads to the following design choices:
1. We only allow full copies of objects. So an object may be copied in multiple steps, but in the end it must result in a complete copy. It is checked on object commit at the latest that this condition holds.
2. We will copy entire segments only. If a byte range does not fully eclipse a segment, the entire segment is copied anyways. This goes for both the start and the end of the range.
3. The requested byte ranges are administered separately.
4. If a segment is in multiple byte ranges to the same destination object, it is only copied once: the segment copies are deduplicated
5. The copy will get the same part structure as the source object, even if the parts are defined differently during the byte-ranged copy.
Note that the ranged copy request may arrive out-of-order, but the resulting copy must still be in-order. This is possible because every copy request has its own different destination part.
Restrictions compared to S3 API
------------
The implementation does not allow for the following scenario's:
1. Create an object from ranges of two or more different objects
2. Create an object from one or more ranges which do not entirely include the source object
3. Create an object from source ranges which overlap
4. Create an object from copied ranges combined with newly uploaded data
These scenario's will be explicitly checked, at the latest when the user commits the multipart upload. A human-readable non-recoverable error is returned. The multipart upload will be cancelled.
See also the section [S3 parameter restrictions](#S3-parameter-restrictions) below for additional caveats.
API additions
----------
We introduce this new method in package `storj.io/uplink/private/multipart`
```go
func CopyObjectRange(
ctx context.Context,
project *uplink.Project,
sourceBucket string,
sourceKey string,
offset int64,
length int64,
uploadID string,
partNumber uint32,
) (uplink.Part, error)
```
And add the following messages to the network protocol:
```protobuf
BeginCopyObjectRangeRequest {
SourceBucket
SourceEncryptedObjectKey
SourceOffset
Size
}
BeginCopyObjectRangeResponse {
SegmentKeys
}
FinishCopyObjectRangeRequest {
SourceBucket
SourceEncryptedObjectKey
SourceOffset
Size
DestinationStreamID
DestinationBucket
DestinationEncryptedObjectKey
DestinationPart
SegmentKeys
}
FinishCopyObjectRangeResponse {
}
```
SegmentKeys is the existing struct:
```protobuf
EncryptedKeyAndNonce {
Position *SegmentPosition
EncryptedKeyNonce Nonce
EncryptedKey []byte
}
```
Database schema changes
-----------------------
The implementation adds a new table to track pending copied ranges. The table will have one entry per part specified during the multipart byte-ranged copy.
```
CREATE TABLE pending_copy_range
(
project_id BYTEA,
destination_bucket BYTEA,
destination_object_key BYTEA,
destination_stream_id UUID,
destination_part INTEGER,
source_bucket BYTEA,
source_object_key BYTEA,
source_stream_id UUID,
source_offset BIGINT,
plain_size BIGINT,
created_at TIMESTAMP,
PRIMARY KEY
(
project_id,
destination_bucket,
destination_object_key,
destination_stream_id,
destination_part
)
);
```
Sequence diagrams
-----------------
Below are the sequence diagrams for the existing copy and multipart upload flows. The last one is the new UploadPartCopy flow.
Note that the fields are not exhaustive and the naming is not final.
Existing copy:
![copy-object](images/copy-object.svg)
Existing multipart upload:
![multipart-upload](images/multipart-upload.svg)
New multipart copy:
![byte-range-multipart-copy](images/byte-range-multipart-copy.svg)
Metabase data shape
--------
![metabase-shape-160](images/metabase-shape-160.svg)
Below shows an example of the states in metabase when the 256 MiB object above is being copied using 160 MiB part size.
Observe:
- pending_copy_range has entries until commit
- segment_copies entry exist only after commit
Many fields have been elided for clarity.
Multipart upload started:
![metabase-shape-160_001](images/metabase-shape-160_001.svg)
First 160 MiB range copied:
![metabase-shape-160_002](images/metabase-shape-160_002.svg)
Second 160 MiB range copied:
![metabase-shape-160_003](images/metabase-shape-160_003.svg)
Multipart upload committed:
![metabase-shape-160_004](images/metabase-shape-160_004.svg)
Validation
-------
The flow chart below describes the extra validation done to ensure that only full copies end up in the database.
![commit-object-validation](images/commit-object-validation.drawio.svg)
Affected existing endpoints
-------------
- CommitObject must check if there are any entries in pending_copy_range. If so it does the aforementioned range validation, and clear the table.
- In this case CommitObject must also check if the source object still exists, to prevent creating a corrupt orphaned copy.
- DeleteObject, when called with status pending, must also delete entries in pending_copy_range with that destination.
- Cleanup of pending upload must also delete entries in pending_copy_range with that destination.
- When fetching pending parts it should first check pending_copy_range, if nothing there check the actual segments.
- Pending objects are currently always 0 size. This means listing is not affected, but the size will remain 0.
- An error code must be added and propaged through uplink which can be translated into S3's InvalidPart error.
S3 parameter restrictions
----------
Below is an overview of the [previously determined required parameters](https://github.com/storj/roadmap/issues/40) and their
restrictions compared to S3.
Request:
| Param | Description | Supported | Restriction |
|---|-----------------------------------------------|---|---|
| Bucket | Destination bucket name | ✓ | None |
| Key | Destination key | ✓ | None |
| partNumber | Destination part | ✓ | Will not be respected in the final object layout |
| uploadId | Temporary identifier for multpart destination | ✓ | None |
| x-amz-copy-source | Description | ✓ | Has to be the same for every request to the uploadId |
| x-amz-copy-source-range | Description | ✓ | All calls must add up to the full byte range of an object: no gaps or overlapping ranges |
Response:
| Param | Description | Supported | Restriction |
|---|---|---|---|
| ETag | Entity tag of the part | | Currently this is stored in the last segment of the part. We can't reuse that mechanism for pending copied parts. If we want to support it, it can be stored in an extra column the table pending_copy_range and added to the return of uplinks CopyObjectRange and ListUploadParts |
| LastModified | Date and time at which the object was uploaded. | | If we want to support it, it can be stored in an extra column of pending_copy_range and added to the return of uplinks CopyObjectRange and ListUploadParts |
Stop-gap implementation
------------
If desired, the implementer can chose to first code a version which only allows copies if the byte ranges match with the parts. Or if the ranges only match with the segments but not necessarily the parts. And after that the full implementation.
Performance impact
-------------
This can be deduced from the listing under "Affected existing endpoints". The biggest performance impact will probably be in CommitObject because it adds another query to the table `pending_copy_range` unconditionally. The other changed methods are called much less frequently.
Optimization of CommitObject
---------------
It is possible to avoid above-mentioned unconditional query to the table `pending_copy_range`. Existing CommitObject verifies the segments offset already. If we add a column `is_ranged_copy` to the table `segments` which is set to `TRUE` when `CopyObjectRange` inserts a row, that can trigger further validation of `pending_copy_range`. This avoids the extra query in the existing flow by making it conditional. `is_ranged_copy` has to be TRUE or FALSE for all segments in an object, else it is an invalid copy as described under [Validation](#Validation).
Open questions
-------------
- Should we support ETag and creation date per pending part? This can be stored in the table pending_copy_range.
- Is it problematic that the ETags change after commit?
- Do we allow source objects to have segments/parts which are out of order or have gaps in their byte ranges? Think of alternative uplink implementations.
Alternative solutions
--------
- Don't use serverside copy, instead download and re-upload.
- Only allow copying parts which end and start on segment boundries. This would be good as a first implementation but I feel this would be too restrictive and not user-friendly because it means the S3 client will be able to copy some objects but not others depending on how they were uploaded and how the client is configured.
- Collapse small parts into bigger parts: due to e2e encryption this would have to be implemented in a stateful Gateway or Uplink, seems impossible on Satellite within our current data format.
- Allow combining new objects from multiple source objects and other scenarios: This would make our database schema more complex. I don't think our customers will be using this. If they do they should reach out eleborating on their usage pattern, possibly we can easier support the desired subset of S3 functionality.
- Refactor our database schema: disentangle data blocks from segments so we can compose objects from ranges of data blocks. Also useful for implementing small object packing and simplifying copy deletes. This seems desirable and simplifies our system, but it would take longer to implement.

View File

@ -0,0 +1,114 @@
@startuml
S3Client -> Gateway: PUT /bucket/dest?uploads
Gateway -> Uplink: BeginUpload (multipart)
note left
Bucket
Key
Expires
end note
Uplink -> Satellite: BeginObjectRequest
Uplink <-- Satellite: BeginObjectResponse
note right
StreamID
end note
Gateway <-- Uplink: BeginUpload return
note right
StreamID
end note
S3Client <-- Gateway: 200 response
note right
<UploadId />
end note
group loop for every part
S3Client -> Gateway: PUT /bucket/dest?partNumber=1&uploadId=7tKsLOJgNs\nx-amz-copy-source: /bucket/source\nx-amz-copy-source-range:bytes=0-5368709120
Gateway -> Uplink: CopyObjectRange
note left
UploadID
DestinationBucket
DestinationKey
DestinationPart
SourceBucket
SourceKey
StartOffset
EndOffset
end note
Uplink -> Satellite: BeginCopyObjectRangeRequest
note left
SourceBucket
SourceKey //encrypted//
SourceOffset
Size
end note
Uplink <-- Satellite: BeginCopyObjectRangeResponse
note right
SegmentKeys //encrypted//
end note
Uplink -> Satellite: FinishCopyObjectRangeRequest
note left
DestinationStreamID
DestinationBucket
DestinationKey //encrypted//
DestinationPart
...
SegmentKeys //encrypted//
end note
note right #lightgreen
Create entries in segment table
Create 1 entry in pending_copy_part
end note
Uplink <-- Satellite: FinishCopyObjectRangeResponmse
Gateway <-- Uplink: CopyObjectRange return
S3Client <-- Gateway: 200 response
end
S3Client -> Gateway: POST /bucket/dest?uploadId=7tKsLOJgNs
Gateway -> Uplink: CommitUpload
note left
Bucket
Key
UploadID
CustomMetadata
end note
Uplink -> Satellite: ObjectCommitRequest
note left
StreamID
CustomMetadata //encypted//
end note
note right #lightgreen
Verify source object key and stream_id
is the same for every part.
Check that source object still exists
Verify part offsets and sizes
add up to entire object.
Change destination object status from
pending to committed.
end note
Uplink <-- Satellite: ObjectCommitResponse
Gateway <-- Uplink: CommitUpload return
S3Client <-- Gateway: 200 response
@enduml

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 24 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 26 KiB

View File

@ -0,0 +1,46 @@
@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

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 14 KiB

View File

@ -0,0 +1 @@
plantuml -tsvg *.plantuml

View File

@ -0,0 +1,143 @@
@startuml
package Original {
class Original.Object {
key
256 MiB
}
package Part1 {
class Original.Part1.Segment1 {
64 MiB
56 pieces
}
class Original.Part1.Segment2 {
64 MiB
56 pieces
}
class Original.Part1.Segment3 {
64 MiB
56 pieces
}
class Original.Part1.Segment4 {
64 MiB
56 pieces
}
}
}
@enduml
@startuml
package Destination {
class Object {
PENDING
key
??? MiB
}
}
@enduml
@startuml
package Destination {
class Object {
PENDING
key
??? MiB
}
package PendingCopyRange {
class Part1 {
Source=Object1
1-160 MiB
}
}
package Segments.Part1 {
class Segment1 {
64 MiB
0 pieces
}
class Segment2 {
64 MiB
0 pieces
}
class Segment3 {
64 MiB
0 pieces
}
}
}
@enduml
@startuml
package Destination {
class Object {
PENDING
key
??? MiB
}
package PendingCopyRange {
class Part1 {
Source=Object1
1-160 MiB
}
class Part2 {
Source=Object1
160-320 MiB
}
}
package Segments.Part1 {
class Segment1 {
64 MiB
0 pieces
}
class Segment2 {
64 MiB
0 pieces
}
class Segment3 {
64 MiB
0 pieces
}
class Segment4 {
64 MiB
0 pieces
}
}
}
@enduml
@startuml
package Destination {
class Object {
COMMITTED
key
256 MiB
}
class SegmentCopies {
streamID
ancestorStreamID
}
package Segments.Part1 {
class Segment1 {
64 MiB
0 pieces
}
class Segment2 {
64 MiB
0 pieces
}
class Segment3 {
64 MiB
0 pieces
}
class Segment4 {
64 MiB
0 pieces
}
}
}
@enduml

View File

@ -0,0 +1,44 @@
<?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="355px" preserveAspectRatio="none" style="width:406px;height:355px;background:#FFFFFF;" version="1.1" viewBox="0 0 406 355" width="406px" zoomAndPan="magnify"><defs/><g><!--MD5=[2091a99d56b6fc6048501ca10accaca1]
cluster Original--><g id="cluster_Original"><path d="M8.5,6.294 L63.5,6.294 A3.75,3.75 0 0 1 66,8.794 L73,29.0939 L396.5,29.0939 A2.5,2.5 0 0 1 399,31.5939 L399,345.794 A2.5,2.5 0 0 1 396.5,348.294 L8.5,348.294 A2.5,2.5 0 0 1 6,345.794 L6,8.794 A2.5,2.5 0 0 1 8.5,6.294 " fill="none" style="stroke:#000000;stroke-width:1.5;"/><line style="stroke:#000000;stroke-width:1.5;" x1="6" x2="73" y1="29.0939" y2="29.0939"/><text fill="#000000" font-family="sans-serif" font-size="14" font-weight="bold" lengthAdjust="spacing" textLength="54" x="10" y="21.2999">Original</text></g><!--MD5=[e37146ac15805e55994d64fd1e8da51f]
cluster Part1--><g id="cluster_Part1"><path d="M117.5,49.294 L153.5,49.294 A3.75,3.75 0 0 1 156,51.794 L163,72.0939 L372.5,72.0939 A2.5,2.5 0 0 1 375,74.5939 L375,321.794 A2.5,2.5 0 0 1 372.5,324.294 L117.5,324.294 A2.5,2.5 0 0 1 115,321.794 L115,51.794 A2.5,2.5 0 0 1 117.5,49.294 " fill="none" style="stroke:#000000;stroke-width:1.5;"/><line style="stroke:#000000;stroke-width:1.5;" x1="115" x2="163" y1="72.0939" y2="72.0939"/><text fill="#000000" font-family="sans-serif" font-size="14" font-weight="bold" lengthAdjust="spacing" textLength="35" x="119" y="64.2999">Part1</text></g><!--MD5=[767ca0b6417354f0c2e4ab66caef88a6]
class Original.Object--><g id="elem_Original.Object"><rect codeLine="2" fill="#F1F1F1" height="81.5999" id="Original.Object" rx="2.5" ry="2.5" style="stroke:#181818;stroke-width:0.5;" width="73" x="22.5" y="84.294"/><ellipse cx="37.5" cy="100.294" fill="#ADD1B2" rx="11" ry="11" style="stroke:#181818;stroke-width:1.0;"/><path d="M32.5,101.4502 C32.5,103.9502 34.6406,105.7627 37.5625,105.7627 C38.7969,105.7627 39.9688,105.4659 40.7188,104.9502 C41.3281,104.5284 41.6563,104.1065 41.6563,103.7002 C41.6563,103.2315 41.2344,102.8252 40.7344,102.8252 C40.5,102.8252 40.2813,102.9034 40.0781,103.1065 C39.6406,103.544 39.6406,103.544 39.4688,103.6377 C39.0156,103.8721 38.375,104.0127 37.6094,104.0127 C35.6094,104.0127 34.3281,102.9971 34.3281,101.419 L34.3281,100.3721 C34.3281,98.669 35.5469,97.4659 37.25,97.4659 C37.8281,97.4659 38.4063,97.6065 38.875,97.8565 C39.3438,98.1221 39.5156,98.3096 39.5781,98.669 C39.7031,99.3409 39.9531,99.5909 40.4844,99.5909 C40.7656,99.5909 41.0469,99.4502 41.2344,99.2315 C41.3594,99.0596 41.4063,98.8877 41.4063,98.4502 L41.4063,97.0909 C41.4063,96.669 41.3906,96.5284 41.2656,96.3565 C41.0938,96.1065 40.8125,95.9502 40.4844,95.9502 C40.1719,95.9502 39.9688,96.0596 39.75,96.3252 C38.5781,95.8252 38.1406,95.7159 37.1875,95.7159 C34.5156,95.7159 32.5,97.7315 32.5,100.3565 L32.5,101.4502 Z " fill="#000000"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="41" x="51.5" y="104.9">Object</text><line style="stroke:#181818;stroke-width:0.5;" x1="23.5" x2="94.5" y1="116.294" y2="116.294"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="22" x="28.5" y="133.2999">key</text><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="52" x="28.5" y="150.0999">256 MiB</text><line style="stroke:#181818;stroke-width:0.5;" x1="23.5" x2="94.5" y1="157.8938" y2="157.8938"/></g><!--MD5=[7510921fd2f081a0783c42a54e541879]
class Original.Part1.Segment1--><g id="elem_Original.Part1.Segment1"><rect codeLine="8" fill="#F1F1F1" height="81.5999" id="Original.Part1.Segment1" rx="2.5" ry="2.5" style="stroke:#181818;stroke-width:0.5;" width="97" x="130.5" y="84.294"/><ellipse cx="145.5" cy="100.294" fill="#ADD1B2" rx="11" ry="11" style="stroke:#181818;stroke-width:1.0;"/><path d="M140.5,101.4502 C140.5,103.9502 142.6406,105.7627 145.5625,105.7627 C146.7969,105.7627 147.9688,105.4659 148.7188,104.9502 C149.3281,104.5284 149.6563,104.1065 149.6563,103.7002 C149.6563,103.2315 149.2344,102.8252 148.7344,102.8252 C148.5,102.8252 148.2813,102.9034 148.0781,103.1065 C147.6406,103.544 147.6406,103.544 147.4688,103.6377 C147.0156,103.8721 146.375,104.0127 145.6094,104.0127 C143.6094,104.0127 142.3281,102.9971 142.3281,101.419 L142.3281,100.3721 C142.3281,98.669 143.5469,97.4659 145.25,97.4659 C145.8281,97.4659 146.4063,97.6065 146.875,97.8565 C147.3438,98.1221 147.5156,98.3096 147.5781,98.669 C147.7031,99.3409 147.9531,99.5909 148.4844,99.5909 C148.7656,99.5909 149.0469,99.4502 149.2344,99.2315 C149.3594,99.0596 149.4063,98.8877 149.4063,98.4502 L149.4063,97.0909 C149.4063,96.669 149.3906,96.5284 149.2656,96.3565 C149.0938,96.1065 148.8125,95.9502 148.4844,95.9502 C148.1719,95.9502 147.9688,96.0596 147.75,96.3252 C146.5781,95.8252 146.1406,95.7159 145.1875,95.7159 C142.5156,95.7159 140.5,97.7315 140.5,100.3565 L140.5,101.4502 Z " fill="#000000"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="65" x="159.5" y="104.9">Segment1</text><line style="stroke:#181818;stroke-width:0.5;" x1="131.5" x2="226.5" y1="116.294" y2="116.294"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="44" x="136.5" y="133.2999">64 MiB</text><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="61" x="136.5" y="150.0999">56 pieces</text><line style="stroke:#181818;stroke-width:0.5;" x1="131.5" x2="226.5" y1="157.8938" y2="157.8938"/></g><!--MD5=[f3010e98423157c58b7a8b4d1ae636f7]
class Original.Part1.Segment2--><g id="elem_Original.Part1.Segment2"><rect codeLine="12" fill="#F1F1F1" height="81.5999" id="Original.Part1.Segment2" rx="2.5" ry="2.5" style="stroke:#181818;stroke-width:0.5;" width="97" x="262.5" y="84.294"/><ellipse cx="277.5" cy="100.294" fill="#ADD1B2" rx="11" ry="11" style="stroke:#181818;stroke-width:1.0;"/><path d="M272.5,101.4502 C272.5,103.9502 274.6406,105.7627 277.5625,105.7627 C278.7969,105.7627 279.9688,105.4659 280.7188,104.9502 C281.3281,104.5284 281.6563,104.1065 281.6563,103.7002 C281.6563,103.2315 281.2344,102.8252 280.7344,102.8252 C280.5,102.8252 280.2813,102.9034 280.0781,103.1065 C279.6406,103.544 279.6406,103.544 279.4688,103.6377 C279.0156,103.8721 278.375,104.0127 277.6094,104.0127 C275.6094,104.0127 274.3281,102.9971 274.3281,101.419 L274.3281,100.3721 C274.3281,98.669 275.5469,97.4659 277.25,97.4659 C277.8281,97.4659 278.4063,97.6065 278.875,97.8565 C279.3438,98.1221 279.5156,98.3096 279.5781,98.669 C279.7031,99.3409 279.9531,99.5909 280.4844,99.5909 C280.7656,99.5909 281.0469,99.4502 281.2344,99.2315 C281.3594,99.0596 281.4063,98.8877 281.4063,98.4502 L281.4063,97.0909 C281.4063,96.669 281.3906,96.5284 281.2656,96.3565 C281.0938,96.1065 280.8125,95.9502 280.4844,95.9502 C280.1719,95.9502 279.9688,96.0596 279.75,96.3252 C278.5781,95.8252 278.1406,95.7159 277.1875,95.7159 C274.5156,95.7159 272.5,97.7315 272.5,100.3565 L272.5,101.4502 Z " fill="#000000"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="65" x="291.5" y="104.9">Segment2</text><line style="stroke:#181818;stroke-width:0.5;" x1="263.5" x2="358.5" y1="116.294" y2="116.294"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="44" x="268.5" y="133.2999">64 MiB</text><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="61" x="268.5" y="150.0999">56 pieces</text><line style="stroke:#181818;stroke-width:0.5;" x1="263.5" x2="358.5" y1="157.8938" y2="157.8938"/></g><!--MD5=[56e086a98ce6943da3fa88f0dfbc3e1d]
class Original.Part1.Segment3--><g id="elem_Original.Part1.Segment3"><rect codeLine="16" fill="#F1F1F1" height="81.5999" id="Original.Part1.Segment3" rx="2.5" ry="2.5" style="stroke:#181818;stroke-width:0.5;" width="97" x="130.5" y="226.294"/><ellipse cx="145.5" cy="242.294" fill="#ADD1B2" rx="11" ry="11" style="stroke:#181818;stroke-width:1.0;"/><path d="M140.5,243.4502 C140.5,245.9502 142.6406,247.7627 145.5625,247.7627 C146.7969,247.7627 147.9688,247.4659 148.7188,246.9502 C149.3281,246.5284 149.6563,246.1065 149.6563,245.7002 C149.6563,245.2315 149.2344,244.8252 148.7344,244.8252 C148.5,244.8252 148.2813,244.9034 148.0781,245.1065 C147.6406,245.544 147.6406,245.544 147.4688,245.6377 C147.0156,245.8721 146.375,246.0127 145.6094,246.0127 C143.6094,246.0127 142.3281,244.9971 142.3281,243.419 L142.3281,242.3721 C142.3281,240.669 143.5469,239.4659 145.25,239.4659 C145.8281,239.4659 146.4063,239.6065 146.875,239.8565 C147.3438,240.1221 147.5156,240.3096 147.5781,240.669 C147.7031,241.3409 147.9531,241.5909 148.4844,241.5909 C148.7656,241.5909 149.0469,241.4502 149.2344,241.2315 C149.3594,241.0596 149.4063,240.8877 149.4063,240.4502 L149.4063,239.0909 C149.4063,238.669 149.3906,238.5284 149.2656,238.3565 C149.0938,238.1065 148.8125,237.9502 148.4844,237.9502 C148.1719,237.9502 147.9688,238.0596 147.75,238.3252 C146.5781,237.8252 146.1406,237.7159 145.1875,237.7159 C142.5156,237.7159 140.5,239.7315 140.5,242.3565 L140.5,243.4502 Z " fill="#000000"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="65" x="159.5" y="246.9">Segment3</text><line style="stroke:#181818;stroke-width:0.5;" x1="131.5" x2="226.5" y1="258.294" y2="258.294"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="44" x="136.5" y="275.2999">64 MiB</text><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="61" x="136.5" y="292.0999">56 pieces</text><line style="stroke:#181818;stroke-width:0.5;" x1="131.5" x2="226.5" y1="299.8938" y2="299.8938"/></g><!--MD5=[8a8bf79654d0eafcaf07e47d812a1192]
class Original.Part1.Segment4--><g id="elem_Original.Part1.Segment4"><rect codeLine="20" fill="#F1F1F1" height="81.5999" id="Original.Part1.Segment4" rx="2.5" ry="2.5" style="stroke:#181818;stroke-width:0.5;" width="97" x="262.5" y="226.294"/><ellipse cx="277.5" cy="242.294" fill="#ADD1B2" rx="11" ry="11" style="stroke:#181818;stroke-width:1.0;"/><path d="M272.5,243.4502 C272.5,245.9502 274.6406,247.7627 277.5625,247.7627 C278.7969,247.7627 279.9688,247.4659 280.7188,246.9502 C281.3281,246.5284 281.6563,246.1065 281.6563,245.7002 C281.6563,245.2315 281.2344,244.8252 280.7344,244.8252 C280.5,244.8252 280.2813,244.9034 280.0781,245.1065 C279.6406,245.544 279.6406,245.544 279.4688,245.6377 C279.0156,245.8721 278.375,246.0127 277.6094,246.0127 C275.6094,246.0127 274.3281,244.9971 274.3281,243.419 L274.3281,242.3721 C274.3281,240.669 275.5469,239.4659 277.25,239.4659 C277.8281,239.4659 278.4063,239.6065 278.875,239.8565 C279.3438,240.1221 279.5156,240.3096 279.5781,240.669 C279.7031,241.3409 279.9531,241.5909 280.4844,241.5909 C280.7656,241.5909 281.0469,241.4502 281.2344,241.2315 C281.3594,241.0596 281.4063,240.8877 281.4063,240.4502 L281.4063,239.0909 C281.4063,238.669 281.3906,238.5284 281.2656,238.3565 C281.0938,238.1065 280.8125,237.9502 280.4844,237.9502 C280.1719,237.9502 279.9688,238.0596 279.75,238.3252 C278.5781,237.8252 278.1406,237.7159 277.1875,237.7159 C274.5156,237.7159 272.5,239.7315 272.5,242.3565 L272.5,243.4502 Z " fill="#000000"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="65" x="291.5" y="246.9">Segment4</text><line style="stroke:#181818;stroke-width:0.5;" x1="263.5" x2="358.5" y1="258.294" y2="258.294"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="44" x="268.5" y="275.2999">64 MiB</text><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="61" x="268.5" y="292.0999">56 pieces</text><line style="stroke:#181818;stroke-width:0.5;" x1="263.5" x2="358.5" y1="299.8938" y2="299.8938"/></g><!--MD5=[307d2af527a82531d38bc8ae47b081b2]
@startuml
package Original {
class Original.Object {
key
256 MiB
}
package Part1 {
class Original.Part1.Segment1 {
64 MiB
56 pieces
}
class Original.Part1.Segment2 {
64 MiB
56 pieces
}
class Original.Part1.Segment3 {
64 MiB
56 pieces
}
class Original.Part1.Segment4 {
64 MiB
56 pieces
}
}
}
@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>

After

Width:  |  Height:  |  Size: 12 KiB

View File

@ -0,0 +1,21 @@
<?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="162px" preserveAspectRatio="none" style="width:119px;height:162px;background:#FFFFFF;" version="1.1" viewBox="0 0 119 162" width="119px" zoomAndPan="magnify"><defs/><g><!--MD5=[e99e64f544e03e74d5532d92e9db740c]
cluster Destination--><g id="cluster_Destination"><path d="M8.5,6.294 L88.5,6.294 A3.75,3.75 0 0 1 91,8.794 L98,29.0939 L109.5,29.0939 A2.5,2.5 0 0 1 112,31.5939 L112,152.794 A2.5,2.5 0 0 1 109.5,155.294 L8.5,155.294 A2.5,2.5 0 0 1 6,152.794 L6,8.794 A2.5,2.5 0 0 1 8.5,6.294 " fill="none" style="stroke:#000000;stroke-width:1.5;"/><line style="stroke:#000000;stroke-width:1.5;" x1="6" x2="98" y1="29.0939" y2="29.0939"/><text fill="#000000" font-family="sans-serif" font-size="14" font-weight="bold" lengthAdjust="spacing" textLength="79" x="10" y="21.2999">Destination</text></g><!--MD5=[aa7f586532e18719e6cefa70fc650583]
class Object--><g id="elem_Object"><rect codeLine="30" fill="#F1F1F1" height="98.3998" id="Object" rx="2.5" ry="2.5" style="stroke:#181818;stroke-width:0.5;" width="75" x="21.5" y="41.294"/><ellipse cx="37.4" cy="57.294" fill="#ADD1B2" rx="11" ry="11" style="stroke:#181818;stroke-width:1.0;"/><path d="M32.4,58.4502 C32.4,60.9502 34.5406,62.7627 37.4625,62.7627 C38.6969,62.7627 39.8688,62.4659 40.6188,61.9502 C41.2281,61.5284 41.5563,61.1065 41.5563,60.7002 C41.5563,60.2315 41.1344,59.8252 40.6344,59.8252 C40.4,59.8252 40.1813,59.9034 39.9781,60.1065 C39.5406,60.544 39.5406,60.544 39.3688,60.6377 C38.9156,60.8721 38.275,61.0127 37.5094,61.0127 C35.5094,61.0127 34.2281,59.9971 34.2281,58.419 L34.2281,57.3721 C34.2281,55.669 35.4469,54.4659 37.15,54.4659 C37.7281,54.4659 38.3063,54.6065 38.775,54.8565 C39.2438,55.1221 39.4156,55.3096 39.4781,55.669 C39.6031,56.3409 39.8531,56.5909 40.3844,56.5909 C40.6656,56.5909 40.9469,56.4502 41.1344,56.2315 C41.2594,56.0596 41.3063,55.8877 41.3063,55.4502 L41.3063,54.0909 C41.3063,53.669 41.2906,53.5284 41.1656,53.3565 C40.9938,53.1065 40.7125,52.9502 40.3844,52.9502 C40.0719,52.9502 39.8688,53.0596 39.65,53.3252 C38.4781,52.8252 38.0406,52.7159 37.0875,52.7159 C34.4156,52.7159 32.4,54.7315 32.4,57.3565 L32.4,58.4502 Z " fill="#000000"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="41" x="51.6" y="61.9">Object</text><line style="stroke:#181818;stroke-width:0.5;" x1="22.5" x2="95.5" y1="73.294" y2="73.294"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="63" x="27.5" y="90.2999">PENDING</text><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="22" x="27.5" y="107.0999">key</text><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="52" x="27.5" y="123.8998">??? MiB</text><line style="stroke:#181818;stroke-width:0.5;" x1="22.5" x2="95.5" y1="131.6938" y2="131.6938"/></g><!--MD5=[bdbc92162828467eb79ac7cd201f9876]
@startuml
package Destination {
class Object {
PENDING
key
??? MiB
}
}
@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>

After

Width:  |  Height:  |  Size: 3.3 KiB

View File

@ -0,0 +1,49 @@
<?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="363px" preserveAspectRatio="none" style="width:584px;height:363px;background:#FFFFFF;" version="1.1" viewBox="0 0 584 363" width="584px" zoomAndPan="magnify"><defs/><g><!--MD5=[e99e64f544e03e74d5532d92e9db740c]
cluster Destination--><g id="cluster_Destination"><path d="M8.5,6.294 L88.5,6.294 A3.75,3.75 0 0 1 91,8.794 L98,29.0939 L574.5,29.0939 A2.5,2.5 0 0 1 577,31.5939 L577,353.794 A2.5,2.5 0 0 1 574.5,356.294 L8.5,356.294 A2.5,2.5 0 0 1 6,353.794 L6,8.794 A2.5,2.5 0 0 1 8.5,6.294 " fill="none" style="stroke:#000000;stroke-width:1.5;"/><line style="stroke:#000000;stroke-width:1.5;" x1="6" x2="98" y1="29.0939" y2="29.0939"/><text fill="#000000" font-family="sans-serif" font-size="14" font-weight="bold" lengthAdjust="spacing" textLength="79" x="10" y="21.2999">Destination</text></g><!--MD5=[e32ea201eac9c26a2182d9fc82f320db]
cluster PendingCopyRange--><g id="cluster_PendingCopyRange"><path d="M402.5,49.294 L540.5,49.294 A3.75,3.75 0 0 1 543,51.794 L550,72.0939 L550.5,72.0939 A2.5,2.5 0 0 1 553,74.5939 L553,179.794 A2.5,2.5 0 0 1 550.5,182.294 L402.5,182.294 A2.5,2.5 0 0 1 400,179.794 L400,51.794 A2.5,2.5 0 0 1 402.5,49.294 " fill="none" style="stroke:#000000;stroke-width:1.5;"/><line style="stroke:#000000;stroke-width:1.5;" x1="400" x2="550" y1="72.0939" y2="72.0939"/><text fill="#000000" font-family="sans-serif" font-size="14" font-weight="bold" lengthAdjust="spacing" textLength="137" x="404" y="64.2999">PendingCopyRange</text></g><!--MD5=[8729272c8dbef0dd5f62fba128b8720d]
cluster Segments.Part1--><g id="cluster_Segments.Part1"><path d="M118.5,49.294 L226.5,49.294 A3.75,3.75 0 0 1 229,51.794 L236,72.0939 L373.5,72.0939 A2.5,2.5 0 0 1 376,74.5939 L376,329.794 A2.5,2.5 0 0 1 373.5,332.294 L118.5,332.294 A2.5,2.5 0 0 1 116,329.794 L116,51.794 A2.5,2.5 0 0 1 118.5,49.294 " fill="none" style="stroke:#000000;stroke-width:1.5;"/><line style="stroke:#000000;stroke-width:1.5;" x1="116" x2="236" y1="72.0939" y2="72.0939"/><text fill="#000000" font-family="sans-serif" font-size="14" font-weight="bold" lengthAdjust="spacing" textLength="107" x="120" y="64.2999">Segments.Part1</text></g><!--MD5=[aa7f586532e18719e6cefa70fc650583]
class Object--><g id="elem_Object"><rect codeLine="40" fill="#F1F1F1" height="98.3998" id="Object" rx="2.5" ry="2.5" style="stroke:#181818;stroke-width:0.5;" width="75" x="21.5" y="76.294"/><ellipse cx="37.4" cy="92.294" fill="#ADD1B2" rx="11" ry="11" style="stroke:#181818;stroke-width:1.0;"/><path d="M32.4,93.4502 C32.4,95.9502 34.5406,97.7627 37.4625,97.7627 C38.6969,97.7627 39.8688,97.4659 40.6188,96.9502 C41.2281,96.5284 41.5563,96.1065 41.5563,95.7002 C41.5563,95.2315 41.1344,94.8252 40.6344,94.8252 C40.4,94.8252 40.1813,94.9034 39.9781,95.1065 C39.5406,95.544 39.5406,95.544 39.3688,95.6377 C38.9156,95.8721 38.275,96.0127 37.5094,96.0127 C35.5094,96.0127 34.2281,94.9971 34.2281,93.419 L34.2281,92.3721 C34.2281,90.669 35.4469,89.4659 37.15,89.4659 C37.7281,89.4659 38.3063,89.6065 38.775,89.8565 C39.2438,90.1221 39.4156,90.3096 39.4781,90.669 C39.6031,91.3409 39.8531,91.5909 40.3844,91.5909 C40.6656,91.5909 40.9469,91.4502 41.1344,91.2315 C41.2594,91.0596 41.3063,90.8877 41.3063,90.4502 L41.3063,89.0909 C41.3063,88.669 41.2906,88.5284 41.1656,88.3565 C40.9938,88.1065 40.7125,87.9502 40.3844,87.9502 C40.0719,87.9502 39.8688,88.0596 39.65,88.3252 C38.4781,87.8252 38.0406,87.7159 37.0875,87.7159 C34.4156,87.7159 32.4,89.7315 32.4,92.3565 L32.4,93.4502 Z " fill="#000000"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="41" x="51.6" y="96.9">Object</text><line style="stroke:#181818;stroke-width:0.5;" x1="22.5" x2="95.5" y1="108.294" y2="108.294"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="63" x="27.5" y="125.2999">PENDING</text><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="22" x="27.5" y="142.0999">key</text><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="52" x="27.5" y="158.8998">??? MiB</text><line style="stroke:#181818;stroke-width:0.5;" x1="22.5" x2="95.5" y1="166.6938" y2="166.6938"/></g><!--MD5=[351a9df3532dba24ee657e370e0b6cee]
class Part1--><g id="elem_Part1"><rect codeLine="47" fill="#F1F1F1" height="81.5999" id="Part1" rx="2.5" ry="2.5" style="stroke:#181818;stroke-width:0.5;" width="114" x="419" y="84.294"/><ellipse cx="455.6" cy="100.294" fill="#ADD1B2" rx="11" ry="11" style="stroke:#181818;stroke-width:1.0;"/><path d="M450.6,101.4502 C450.6,103.9502 452.7406,105.7627 455.6625,105.7627 C456.8969,105.7627 458.0688,105.4659 458.8188,104.9502 C459.4281,104.5284 459.7563,104.1065 459.7563,103.7002 C459.7563,103.2315 459.3344,102.8252 458.8344,102.8252 C458.6,102.8252 458.3813,102.9034 458.1781,103.1065 C457.7406,103.544 457.7406,103.544 457.5688,103.6377 C457.1156,103.8721 456.475,104.0127 455.7094,104.0127 C453.7094,104.0127 452.4281,102.9971 452.4281,101.419 L452.4281,100.3721 C452.4281,98.669 453.6469,97.4659 455.35,97.4659 C455.9281,97.4659 456.5063,97.6065 456.975,97.8565 C457.4438,98.1221 457.6156,98.3096 457.6781,98.669 C457.8031,99.3409 458.0531,99.5909 458.5844,99.5909 C458.8656,99.5909 459.1469,99.4502 459.3344,99.2315 C459.4594,99.0596 459.5063,98.8877 459.5063,98.4502 L459.5063,97.0909 C459.5063,96.669 459.4906,96.5284 459.3656,96.3565 C459.1938,96.1065 458.9125,95.9502 458.5844,95.9502 C458.2719,95.9502 458.0688,96.0596 457.85,96.3252 C456.6781,95.8252 456.2406,95.7159 455.2875,95.7159 C452.6156,95.7159 450.6,97.7315 450.6,100.3565 L450.6,101.4502 Z " fill="#000000"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="34" x="474.4" y="104.9">Part1</text><line style="stroke:#181818;stroke-width:0.5;" x1="420" x2="532" y1="116.294" y2="116.294"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="102" x="425" y="133.2999">Source=Object1</text><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="65" x="425" y="150.0999">1-160 MiB</text><line style="stroke:#181818;stroke-width:0.5;" x1="420" x2="532" y1="157.8938" y2="157.8938"/></g><!--MD5=[e8c087ca6c91ad88f30ff6f96718cc79]
class Segment1--><g id="elem_Segment1"><rect codeLine="54" fill="#F1F1F1" height="81.5999" id="Segment1" rx="2.5" ry="2.5" style="stroke:#181818;stroke-width:0.5;" width="97" x="131.5" y="84.294"/><ellipse cx="146.5" cy="100.294" fill="#ADD1B2" rx="11" ry="11" style="stroke:#181818;stroke-width:1.0;"/><path d="M141.5,101.4502 C141.5,103.9502 143.6406,105.7627 146.5625,105.7627 C147.7969,105.7627 148.9688,105.4659 149.7188,104.9502 C150.3281,104.5284 150.6563,104.1065 150.6563,103.7002 C150.6563,103.2315 150.2344,102.8252 149.7344,102.8252 C149.5,102.8252 149.2813,102.9034 149.0781,103.1065 C148.6406,103.544 148.6406,103.544 148.4688,103.6377 C148.0156,103.8721 147.375,104.0127 146.6094,104.0127 C144.6094,104.0127 143.3281,102.9971 143.3281,101.419 L143.3281,100.3721 C143.3281,98.669 144.5469,97.4659 146.25,97.4659 C146.8281,97.4659 147.4063,97.6065 147.875,97.8565 C148.3438,98.1221 148.5156,98.3096 148.5781,98.669 C148.7031,99.3409 148.9531,99.5909 149.4844,99.5909 C149.7656,99.5909 150.0469,99.4502 150.2344,99.2315 C150.3594,99.0596 150.4063,98.8877 150.4063,98.4502 L150.4063,97.0909 C150.4063,96.669 150.3906,96.5284 150.2656,96.3565 C150.0938,96.1065 149.8125,95.9502 149.4844,95.9502 C149.1719,95.9502 148.9688,96.0596 148.75,96.3252 C147.5781,95.8252 147.1406,95.7159 146.1875,95.7159 C143.5156,95.7159 141.5,97.7315 141.5,100.3565 L141.5,101.4502 Z " fill="#000000"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="65" x="160.5" y="104.9">Segment1</text><line style="stroke:#181818;stroke-width:0.5;" x1="132.5" x2="227.5" y1="116.294" y2="116.294"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="44" x="137.5" y="133.2999">64 MiB</text><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="53" x="137.5" y="150.0999">0 pieces</text><line style="stroke:#181818;stroke-width:0.5;" x1="132.5" x2="227.5" y1="157.8938" y2="157.8938"/></g><!--MD5=[0c5e25f2d8585a3891e00bf8523de367]
class Segment2--><g id="elem_Segment2"><rect codeLine="58" fill="#F1F1F1" height="81.5999" id="Segment2" rx="2.5" ry="2.5" style="stroke:#181818;stroke-width:0.5;" width="97" x="263.5" y="84.294"/><ellipse cx="278.5" cy="100.294" fill="#ADD1B2" rx="11" ry="11" style="stroke:#181818;stroke-width:1.0;"/><path d="M273.5,101.4502 C273.5,103.9502 275.6406,105.7627 278.5625,105.7627 C279.7969,105.7627 280.9688,105.4659 281.7188,104.9502 C282.3281,104.5284 282.6563,104.1065 282.6563,103.7002 C282.6563,103.2315 282.2344,102.8252 281.7344,102.8252 C281.5,102.8252 281.2813,102.9034 281.0781,103.1065 C280.6406,103.544 280.6406,103.544 280.4688,103.6377 C280.0156,103.8721 279.375,104.0127 278.6094,104.0127 C276.6094,104.0127 275.3281,102.9971 275.3281,101.419 L275.3281,100.3721 C275.3281,98.669 276.5469,97.4659 278.25,97.4659 C278.8281,97.4659 279.4063,97.6065 279.875,97.8565 C280.3438,98.1221 280.5156,98.3096 280.5781,98.669 C280.7031,99.3409 280.9531,99.5909 281.4844,99.5909 C281.7656,99.5909 282.0469,99.4502 282.2344,99.2315 C282.3594,99.0596 282.4063,98.8877 282.4063,98.4502 L282.4063,97.0909 C282.4063,96.669 282.3906,96.5284 282.2656,96.3565 C282.0938,96.1065 281.8125,95.9502 281.4844,95.9502 C281.1719,95.9502 280.9688,96.0596 280.75,96.3252 C279.5781,95.8252 279.1406,95.7159 278.1875,95.7159 C275.5156,95.7159 273.5,97.7315 273.5,100.3565 L273.5,101.4502 Z " fill="#000000"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="65" x="292.5" y="104.9">Segment2</text><line style="stroke:#181818;stroke-width:0.5;" x1="264.5" x2="359.5" y1="116.294" y2="116.294"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="44" x="269.5" y="133.2999">64 MiB</text><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="53" x="269.5" y="150.0999">0 pieces</text><line style="stroke:#181818;stroke-width:0.5;" x1="264.5" x2="359.5" y1="157.8938" y2="157.8938"/></g><!--MD5=[6709f8a889f97bff46691ea82439f452]
class Segment3--><g id="elem_Segment3"><rect codeLine="62" fill="#F1F1F1" height="81.5999" id="Segment3" rx="2.5" ry="2.5" style="stroke:#181818;stroke-width:0.5;" width="97" x="131.5" y="234.294"/><ellipse cx="146.5" cy="250.294" fill="#ADD1B2" rx="11" ry="11" style="stroke:#181818;stroke-width:1.0;"/><path d="M141.5,251.4502 C141.5,253.9502 143.6406,255.7627 146.5625,255.7627 C147.7969,255.7627 148.9688,255.4659 149.7188,254.9502 C150.3281,254.5284 150.6563,254.1065 150.6563,253.7002 C150.6563,253.2315 150.2344,252.8252 149.7344,252.8252 C149.5,252.8252 149.2813,252.9034 149.0781,253.1065 C148.6406,253.544 148.6406,253.544 148.4688,253.6377 C148.0156,253.8721 147.375,254.0127 146.6094,254.0127 C144.6094,254.0127 143.3281,252.9971 143.3281,251.419 L143.3281,250.3721 C143.3281,248.669 144.5469,247.4659 146.25,247.4659 C146.8281,247.4659 147.4063,247.6065 147.875,247.8565 C148.3438,248.1221 148.5156,248.3096 148.5781,248.669 C148.7031,249.3409 148.9531,249.5909 149.4844,249.5909 C149.7656,249.5909 150.0469,249.4502 150.2344,249.2315 C150.3594,249.0596 150.4063,248.8877 150.4063,248.4502 L150.4063,247.0909 C150.4063,246.669 150.3906,246.5284 150.2656,246.3565 C150.0938,246.1065 149.8125,245.9502 149.4844,245.9502 C149.1719,245.9502 148.9688,246.0596 148.75,246.3252 C147.5781,245.8252 147.1406,245.7159 146.1875,245.7159 C143.5156,245.7159 141.5,247.7315 141.5,250.3565 L141.5,251.4502 Z " fill="#000000"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="65" x="160.5" y="254.9">Segment3</text><line style="stroke:#181818;stroke-width:0.5;" x1="132.5" x2="227.5" y1="266.294" y2="266.294"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="44" x="137.5" y="283.2999">64 MiB</text><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="53" x="137.5" y="300.0999">0 pieces</text><line style="stroke:#181818;stroke-width:0.5;" x1="132.5" x2="227.5" y1="307.8938" y2="307.8938"/></g><!--MD5=[5d096717cbca39ab6121e00296a483f6]
@startuml
package Destination {
class Object {
PENDING
key
??? MiB
}
package PendingCopyRange {
class Part1 {
Source=Object1
1-160 MiB
}
}
package Segments.Part1 {
class Segment1 {
64 MiB
0 pieces
}
class Segment2 {
64 MiB
0 pieces
}
class Segment3 {
64 MiB
0 pieces
}
}
}
@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>

After

Width:  |  Height:  |  Size: 13 KiB

View File

@ -0,0 +1,59 @@
<?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="363px" preserveAspectRatio="none" style="width:726px;height:363px;background:#FFFFFF;" version="1.1" viewBox="0 0 726 363" width="726px" zoomAndPan="magnify"><defs/><g><!--MD5=[e99e64f544e03e74d5532d92e9db740c]
cluster Destination--><g id="cluster_Destination"><path d="M8.5,6.294 L88.5,6.294 A3.75,3.75 0 0 1 91,8.794 L98,29.0939 L716.5,29.0939 A2.5,2.5 0 0 1 719,31.5939 L719,353.794 A2.5,2.5 0 0 1 716.5,356.294 L8.5,356.294 A2.5,2.5 0 0 1 6,353.794 L6,8.794 A2.5,2.5 0 0 1 8.5,6.294 " fill="none" style="stroke:#000000;stroke-width:1.5;"/><line style="stroke:#000000;stroke-width:1.5;" x1="6" x2="98" y1="29.0939" y2="29.0939"/><text fill="#000000" font-family="sans-serif" font-size="14" font-weight="bold" lengthAdjust="spacing" textLength="79" x="10" y="21.2999">Destination</text></g><!--MD5=[e32ea201eac9c26a2182d9fc82f320db]
cluster PendingCopyRange--><g id="cluster_PendingCopyRange"><path d="M402.5,49.294 L540.5,49.294 A3.75,3.75 0 0 1 543,51.794 L550,72.0939 L692.5,72.0939 A2.5,2.5 0 0 1 695,74.5939 L695,179.794 A2.5,2.5 0 0 1 692.5,182.294 L402.5,182.294 A2.5,2.5 0 0 1 400,179.794 L400,51.794 A2.5,2.5 0 0 1 402.5,49.294 " fill="none" style="stroke:#000000;stroke-width:1.5;"/><line style="stroke:#000000;stroke-width:1.5;" x1="400" x2="550" y1="72.0939" y2="72.0939"/><text fill="#000000" font-family="sans-serif" font-size="14" font-weight="bold" lengthAdjust="spacing" textLength="137" x="404" y="64.2999">PendingCopyRange</text></g><!--MD5=[8729272c8dbef0dd5f62fba128b8720d]
cluster Segments.Part1--><g id="cluster_Segments.Part1"><path d="M118.5,49.294 L226.5,49.294 A3.75,3.75 0 0 1 229,51.794 L236,72.0939 L373.5,72.0939 A2.5,2.5 0 0 1 376,74.5939 L376,329.794 A2.5,2.5 0 0 1 373.5,332.294 L118.5,332.294 A2.5,2.5 0 0 1 116,329.794 L116,51.794 A2.5,2.5 0 0 1 118.5,49.294 " fill="none" style="stroke:#000000;stroke-width:1.5;"/><line style="stroke:#000000;stroke-width:1.5;" x1="116" x2="236" y1="72.0939" y2="72.0939"/><text fill="#000000" font-family="sans-serif" font-size="14" font-weight="bold" lengthAdjust="spacing" textLength="107" x="120" y="64.2999">Segments.Part1</text></g><!--MD5=[aa7f586532e18719e6cefa70fc650583]
class Object--><g id="elem_Object"><rect codeLine="72" fill="#F1F1F1" height="98.3998" id="Object" rx="2.5" ry="2.5" style="stroke:#181818;stroke-width:0.5;" width="75" x="21.5" y="76.294"/><ellipse cx="37.4" cy="92.294" fill="#ADD1B2" rx="11" ry="11" style="stroke:#181818;stroke-width:1.0;"/><path d="M32.4,93.4502 C32.4,95.9502 34.5406,97.7627 37.4625,97.7627 C38.6969,97.7627 39.8688,97.4659 40.6188,96.9502 C41.2281,96.5284 41.5563,96.1065 41.5563,95.7002 C41.5563,95.2315 41.1344,94.8252 40.6344,94.8252 C40.4,94.8252 40.1813,94.9034 39.9781,95.1065 C39.5406,95.544 39.5406,95.544 39.3688,95.6377 C38.9156,95.8721 38.275,96.0127 37.5094,96.0127 C35.5094,96.0127 34.2281,94.9971 34.2281,93.419 L34.2281,92.3721 C34.2281,90.669 35.4469,89.4659 37.15,89.4659 C37.7281,89.4659 38.3063,89.6065 38.775,89.8565 C39.2438,90.1221 39.4156,90.3096 39.4781,90.669 C39.6031,91.3409 39.8531,91.5909 40.3844,91.5909 C40.6656,91.5909 40.9469,91.4502 41.1344,91.2315 C41.2594,91.0596 41.3063,90.8877 41.3063,90.4502 L41.3063,89.0909 C41.3063,88.669 41.2906,88.5284 41.1656,88.3565 C40.9938,88.1065 40.7125,87.9502 40.3844,87.9502 C40.0719,87.9502 39.8688,88.0596 39.65,88.3252 C38.4781,87.8252 38.0406,87.7159 37.0875,87.7159 C34.4156,87.7159 32.4,89.7315 32.4,92.3565 L32.4,93.4502 Z " fill="#000000"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="41" x="51.6" y="96.9">Object</text><line style="stroke:#181818;stroke-width:0.5;" x1="22.5" x2="95.5" y1="108.294" y2="108.294"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="63" x="27.5" y="125.2999">PENDING</text><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="22" x="27.5" y="142.0999">key</text><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="52" x="27.5" y="158.8998">??? MiB</text><line style="stroke:#181818;stroke-width:0.5;" x1="22.5" x2="95.5" y1="166.6938" y2="166.6938"/></g><!--MD5=[351a9df3532dba24ee657e370e0b6cee]
class Part1--><g id="elem_Part1"><rect codeLine="79" fill="#F1F1F1" height="81.5999" id="Part1" rx="2.5" ry="2.5" style="stroke:#181818;stroke-width:0.5;" width="114" x="565" y="84.294"/><ellipse cx="601.6" cy="100.294" fill="#ADD1B2" rx="11" ry="11" style="stroke:#181818;stroke-width:1.0;"/><path d="M596.6,101.4502 C596.6,103.9502 598.7406,105.7627 601.6625,105.7627 C602.8969,105.7627 604.0688,105.4659 604.8188,104.9502 C605.4281,104.5284 605.7563,104.1065 605.7563,103.7002 C605.7563,103.2315 605.3344,102.8252 604.8344,102.8252 C604.6,102.8252 604.3813,102.9034 604.1781,103.1065 C603.7406,103.544 603.7406,103.544 603.5688,103.6377 C603.1156,103.8721 602.475,104.0127 601.7094,104.0127 C599.7094,104.0127 598.4281,102.9971 598.4281,101.419 L598.4281,100.3721 C598.4281,98.669 599.6469,97.4659 601.35,97.4659 C601.9281,97.4659 602.5063,97.6065 602.975,97.8565 C603.4438,98.1221 603.6156,98.3096 603.6781,98.669 C603.8031,99.3409 604.0531,99.5909 604.5844,99.5909 C604.8656,99.5909 605.1469,99.4502 605.3344,99.2315 C605.4594,99.0596 605.5063,98.8877 605.5063,98.4502 L605.5063,97.0909 C605.5063,96.669 605.4906,96.5284 605.3656,96.3565 C605.1938,96.1065 604.9125,95.9502 604.5844,95.9502 C604.2719,95.9502 604.0688,96.0596 603.85,96.3252 C602.6781,95.8252 602.2406,95.7159 601.2875,95.7159 C598.6156,95.7159 596.6,97.7315 596.6,100.3565 L596.6,101.4502 Z " fill="#000000"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="34" x="620.4" y="104.9">Part1</text><line style="stroke:#181818;stroke-width:0.5;" x1="566" x2="678" y1="116.294" y2="116.294"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="102" x="571" y="133.2999">Source=Object1</text><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="65" x="571" y="150.0999">1-160 MiB</text><line style="stroke:#181818;stroke-width:0.5;" x1="566" x2="678" y1="157.8938" y2="157.8938"/></g><!--MD5=[f74e29a2b1373b86cd5728da30dd0b5c]
class Part2--><g id="elem_Part2"><rect codeLine="83" fill="#F1F1F1" height="81.5999" id="Part2" rx="2.5" ry="2.5" style="stroke:#181818;stroke-width:0.5;" width="114" x="416" y="84.294"/><ellipse cx="452.6" cy="100.294" fill="#ADD1B2" rx="11" ry="11" style="stroke:#181818;stroke-width:1.0;"/><path d="M447.6,101.4502 C447.6,103.9502 449.7406,105.7627 452.6625,105.7627 C453.8969,105.7627 455.0688,105.4659 455.8188,104.9502 C456.4281,104.5284 456.7563,104.1065 456.7563,103.7002 C456.7563,103.2315 456.3344,102.8252 455.8344,102.8252 C455.6,102.8252 455.3813,102.9034 455.1781,103.1065 C454.7406,103.544 454.7406,103.544 454.5688,103.6377 C454.1156,103.8721 453.475,104.0127 452.7094,104.0127 C450.7094,104.0127 449.4281,102.9971 449.4281,101.419 L449.4281,100.3721 C449.4281,98.669 450.6469,97.4659 452.35,97.4659 C452.9281,97.4659 453.5063,97.6065 453.975,97.8565 C454.4438,98.1221 454.6156,98.3096 454.6781,98.669 C454.8031,99.3409 455.0531,99.5909 455.5844,99.5909 C455.8656,99.5909 456.1469,99.4502 456.3344,99.2315 C456.4594,99.0596 456.5063,98.8877 456.5063,98.4502 L456.5063,97.0909 C456.5063,96.669 456.4906,96.5284 456.3656,96.3565 C456.1938,96.1065 455.9125,95.9502 455.5844,95.9502 C455.2719,95.9502 455.0688,96.0596 454.85,96.3252 C453.6781,95.8252 453.2406,95.7159 452.2875,95.7159 C449.6156,95.7159 447.6,97.7315 447.6,100.3565 L447.6,101.4502 Z " fill="#000000"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="34" x="471.4" y="104.9">Part2</text><line style="stroke:#181818;stroke-width:0.5;" x1="417" x2="529" y1="116.294" y2="116.294"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="102" x="422" y="133.2999">Source=Object1</text><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="81" x="422" y="150.0999">160-320 MiB</text><line style="stroke:#181818;stroke-width:0.5;" x1="417" x2="529" y1="157.8938" y2="157.8938"/></g><!--MD5=[e8c087ca6c91ad88f30ff6f96718cc79]
class Segment1--><g id="elem_Segment1"><rect codeLine="90" fill="#F1F1F1" height="81.5999" id="Segment1" rx="2.5" ry="2.5" style="stroke:#181818;stroke-width:0.5;" width="97" x="131.5" y="84.294"/><ellipse cx="146.5" cy="100.294" fill="#ADD1B2" rx="11" ry="11" style="stroke:#181818;stroke-width:1.0;"/><path d="M141.5,101.4502 C141.5,103.9502 143.6406,105.7627 146.5625,105.7627 C147.7969,105.7627 148.9688,105.4659 149.7188,104.9502 C150.3281,104.5284 150.6563,104.1065 150.6563,103.7002 C150.6563,103.2315 150.2344,102.8252 149.7344,102.8252 C149.5,102.8252 149.2813,102.9034 149.0781,103.1065 C148.6406,103.544 148.6406,103.544 148.4688,103.6377 C148.0156,103.8721 147.375,104.0127 146.6094,104.0127 C144.6094,104.0127 143.3281,102.9971 143.3281,101.419 L143.3281,100.3721 C143.3281,98.669 144.5469,97.4659 146.25,97.4659 C146.8281,97.4659 147.4063,97.6065 147.875,97.8565 C148.3438,98.1221 148.5156,98.3096 148.5781,98.669 C148.7031,99.3409 148.9531,99.5909 149.4844,99.5909 C149.7656,99.5909 150.0469,99.4502 150.2344,99.2315 C150.3594,99.0596 150.4063,98.8877 150.4063,98.4502 L150.4063,97.0909 C150.4063,96.669 150.3906,96.5284 150.2656,96.3565 C150.0938,96.1065 149.8125,95.9502 149.4844,95.9502 C149.1719,95.9502 148.9688,96.0596 148.75,96.3252 C147.5781,95.8252 147.1406,95.7159 146.1875,95.7159 C143.5156,95.7159 141.5,97.7315 141.5,100.3565 L141.5,101.4502 Z " fill="#000000"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="65" x="160.5" y="104.9">Segment1</text><line style="stroke:#181818;stroke-width:0.5;" x1="132.5" x2="227.5" y1="116.294" y2="116.294"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="44" x="137.5" y="133.2999">64 MiB</text><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="53" x="137.5" y="150.0999">0 pieces</text><line style="stroke:#181818;stroke-width:0.5;" x1="132.5" x2="227.5" y1="157.8938" y2="157.8938"/></g><!--MD5=[0c5e25f2d8585a3891e00bf8523de367]
class Segment2--><g id="elem_Segment2"><rect codeLine="94" fill="#F1F1F1" height="81.5999" id="Segment2" rx="2.5" ry="2.5" style="stroke:#181818;stroke-width:0.5;" width="97" x="263.5" y="84.294"/><ellipse cx="278.5" cy="100.294" fill="#ADD1B2" rx="11" ry="11" style="stroke:#181818;stroke-width:1.0;"/><path d="M273.5,101.4502 C273.5,103.9502 275.6406,105.7627 278.5625,105.7627 C279.7969,105.7627 280.9688,105.4659 281.7188,104.9502 C282.3281,104.5284 282.6563,104.1065 282.6563,103.7002 C282.6563,103.2315 282.2344,102.8252 281.7344,102.8252 C281.5,102.8252 281.2813,102.9034 281.0781,103.1065 C280.6406,103.544 280.6406,103.544 280.4688,103.6377 C280.0156,103.8721 279.375,104.0127 278.6094,104.0127 C276.6094,104.0127 275.3281,102.9971 275.3281,101.419 L275.3281,100.3721 C275.3281,98.669 276.5469,97.4659 278.25,97.4659 C278.8281,97.4659 279.4063,97.6065 279.875,97.8565 C280.3438,98.1221 280.5156,98.3096 280.5781,98.669 C280.7031,99.3409 280.9531,99.5909 281.4844,99.5909 C281.7656,99.5909 282.0469,99.4502 282.2344,99.2315 C282.3594,99.0596 282.4063,98.8877 282.4063,98.4502 L282.4063,97.0909 C282.4063,96.669 282.3906,96.5284 282.2656,96.3565 C282.0938,96.1065 281.8125,95.9502 281.4844,95.9502 C281.1719,95.9502 280.9688,96.0596 280.75,96.3252 C279.5781,95.8252 279.1406,95.7159 278.1875,95.7159 C275.5156,95.7159 273.5,97.7315 273.5,100.3565 L273.5,101.4502 Z " fill="#000000"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="65" x="292.5" y="104.9">Segment2</text><line style="stroke:#181818;stroke-width:0.5;" x1="264.5" x2="359.5" y1="116.294" y2="116.294"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="44" x="269.5" y="133.2999">64 MiB</text><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="53" x="269.5" y="150.0999">0 pieces</text><line style="stroke:#181818;stroke-width:0.5;" x1="264.5" x2="359.5" y1="157.8938" y2="157.8938"/></g><!--MD5=[6709f8a889f97bff46691ea82439f452]
class Segment3--><g id="elem_Segment3"><rect codeLine="98" fill="#F1F1F1" height="81.5999" id="Segment3" rx="2.5" ry="2.5" style="stroke:#181818;stroke-width:0.5;" width="97" x="131.5" y="234.294"/><ellipse cx="146.5" cy="250.294" fill="#ADD1B2" rx="11" ry="11" style="stroke:#181818;stroke-width:1.0;"/><path d="M141.5,251.4502 C141.5,253.9502 143.6406,255.7627 146.5625,255.7627 C147.7969,255.7627 148.9688,255.4659 149.7188,254.9502 C150.3281,254.5284 150.6563,254.1065 150.6563,253.7002 C150.6563,253.2315 150.2344,252.8252 149.7344,252.8252 C149.5,252.8252 149.2813,252.9034 149.0781,253.1065 C148.6406,253.544 148.6406,253.544 148.4688,253.6377 C148.0156,253.8721 147.375,254.0127 146.6094,254.0127 C144.6094,254.0127 143.3281,252.9971 143.3281,251.419 L143.3281,250.3721 C143.3281,248.669 144.5469,247.4659 146.25,247.4659 C146.8281,247.4659 147.4063,247.6065 147.875,247.8565 C148.3438,248.1221 148.5156,248.3096 148.5781,248.669 C148.7031,249.3409 148.9531,249.5909 149.4844,249.5909 C149.7656,249.5909 150.0469,249.4502 150.2344,249.2315 C150.3594,249.0596 150.4063,248.8877 150.4063,248.4502 L150.4063,247.0909 C150.4063,246.669 150.3906,246.5284 150.2656,246.3565 C150.0938,246.1065 149.8125,245.9502 149.4844,245.9502 C149.1719,245.9502 148.9688,246.0596 148.75,246.3252 C147.5781,245.8252 147.1406,245.7159 146.1875,245.7159 C143.5156,245.7159 141.5,247.7315 141.5,250.3565 L141.5,251.4502 Z " fill="#000000"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="65" x="160.5" y="254.9">Segment3</text><line style="stroke:#181818;stroke-width:0.5;" x1="132.5" x2="227.5" y1="266.294" y2="266.294"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="44" x="137.5" y="283.2999">64 MiB</text><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="53" x="137.5" y="300.0999">0 pieces</text><line style="stroke:#181818;stroke-width:0.5;" x1="132.5" x2="227.5" y1="307.8938" y2="307.8938"/></g><!--MD5=[71b18ec3900e68539b655371ac057fe5]
class Segment4--><g id="elem_Segment4"><rect codeLine="102" fill="#F1F1F1" height="81.5999" id="Segment4" rx="2.5" ry="2.5" style="stroke:#181818;stroke-width:0.5;" width="97" x="263.5" y="234.294"/><ellipse cx="278.5" cy="250.294" fill="#ADD1B2" rx="11" ry="11" style="stroke:#181818;stroke-width:1.0;"/><path d="M273.5,251.4502 C273.5,253.9502 275.6406,255.7627 278.5625,255.7627 C279.7969,255.7627 280.9688,255.4659 281.7188,254.9502 C282.3281,254.5284 282.6563,254.1065 282.6563,253.7002 C282.6563,253.2315 282.2344,252.8252 281.7344,252.8252 C281.5,252.8252 281.2813,252.9034 281.0781,253.1065 C280.6406,253.544 280.6406,253.544 280.4688,253.6377 C280.0156,253.8721 279.375,254.0127 278.6094,254.0127 C276.6094,254.0127 275.3281,252.9971 275.3281,251.419 L275.3281,250.3721 C275.3281,248.669 276.5469,247.4659 278.25,247.4659 C278.8281,247.4659 279.4063,247.6065 279.875,247.8565 C280.3438,248.1221 280.5156,248.3096 280.5781,248.669 C280.7031,249.3409 280.9531,249.5909 281.4844,249.5909 C281.7656,249.5909 282.0469,249.4502 282.2344,249.2315 C282.3594,249.0596 282.4063,248.8877 282.4063,248.4502 L282.4063,247.0909 C282.4063,246.669 282.3906,246.5284 282.2656,246.3565 C282.0938,246.1065 281.8125,245.9502 281.4844,245.9502 C281.1719,245.9502 280.9688,246.0596 280.75,246.3252 C279.5781,245.8252 279.1406,245.7159 278.1875,245.7159 C275.5156,245.7159 273.5,247.7315 273.5,250.3565 L273.5,251.4502 Z " fill="#000000"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="65" x="292.5" y="254.9">Segment4</text><line style="stroke:#181818;stroke-width:0.5;" x1="264.5" x2="359.5" y1="266.294" y2="266.294"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="44" x="269.5" y="283.2999">64 MiB</text><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="53" x="269.5" y="300.0999">0 pieces</text><line style="stroke:#181818;stroke-width:0.5;" x1="264.5" x2="359.5" y1="307.8938" y2="307.8938"/></g><!--MD5=[634640b163f2bab7f9a6b131bcf77c49]
@startuml
package Destination {
class Object {
PENDING
key
??? MiB
}
package PendingCopyRange {
class Part1 {
Source=Object1
1-160 MiB
}
class Part2 {
Source=Object1
160-320 MiB
}
}
package Segments.Part1 {
class Segment1 {
64 MiB
0 pieces
}
class Segment2 {
64 MiB
0 pieces
}
class Segment3 {
64 MiB
0 pieces
}
class Segment4 {
64 MiB
0 pieces
}
}
}
@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>

After

Width:  |  Height:  |  Size: 17 KiB

View File

@ -0,0 +1,51 @@
<?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="363px" preserveAspectRatio="none" style="width:600px;height:363px;background:#FFFFFF;" version="1.1" viewBox="0 0 600 363" width="600px" zoomAndPan="magnify"><defs/><g><!--MD5=[e99e64f544e03e74d5532d92e9db740c]
cluster Destination--><g id="cluster_Destination"><path d="M8.5,6.294 L88.5,6.294 A3.75,3.75 0 0 1 91,8.794 L98,29.0939 L590.5,29.0939 A2.5,2.5 0 0 1 593,31.5939 L593,353.794 A2.5,2.5 0 0 1 590.5,356.294 L8.5,356.294 A2.5,2.5 0 0 1 6,353.794 L6,8.794 A2.5,2.5 0 0 1 8.5,6.294 " fill="none" style="stroke:#000000;stroke-width:1.5;"/><line style="stroke:#000000;stroke-width:1.5;" x1="6" x2="98" y1="29.0939" y2="29.0939"/><text fill="#000000" font-family="sans-serif" font-size="14" font-weight="bold" lengthAdjust="spacing" textLength="79" x="10" y="21.2999">Destination</text></g><!--MD5=[8729272c8dbef0dd5f62fba128b8720d]
cluster Segments.Part1--><g id="cluster_Segments.Part1"><path d="M311.5,49.294 L419.5,49.294 A3.75,3.75 0 0 1 422,51.794 L429,72.0939 L566.5,72.0939 A2.5,2.5 0 0 1 569,74.5939 L569,329.794 A2.5,2.5 0 0 1 566.5,332.294 L311.5,332.294 A2.5,2.5 0 0 1 309,329.794 L309,51.794 A2.5,2.5 0 0 1 311.5,49.294 " fill="none" style="stroke:#000000;stroke-width:1.5;"/><line style="stroke:#000000;stroke-width:1.5;" x1="309" x2="429" y1="72.0939" y2="72.0939"/><text fill="#000000" font-family="sans-serif" font-size="14" font-weight="bold" lengthAdjust="spacing" textLength="107" x="313" y="64.2999">Segments.Part1</text></g><!--MD5=[aa7f586532e18719e6cefa70fc650583]
class Object--><g id="elem_Object"><rect codeLine="112" fill="#F1F1F1" height="98.3998" id="Object" rx="2.5" ry="2.5" style="stroke:#181818;stroke-width:0.5;" width="98" x="191" y="76.294"/><ellipse cx="217.25" cy="92.294" fill="#ADD1B2" rx="11" ry="11" style="stroke:#181818;stroke-width:1.0;"/><path d="M212.25,93.4502 C212.25,95.9502 214.3906,97.7627 217.3125,97.7627 C218.5469,97.7627 219.7188,97.4659 220.4688,96.9502 C221.0781,96.5284 221.4063,96.1065 221.4063,95.7002 C221.4063,95.2315 220.9844,94.8252 220.4844,94.8252 C220.25,94.8252 220.0313,94.9034 219.8281,95.1065 C219.3906,95.544 219.3906,95.544 219.2188,95.6377 C218.7656,95.8721 218.125,96.0127 217.3594,96.0127 C215.3594,96.0127 214.0781,94.9971 214.0781,93.419 L214.0781,92.3721 C214.0781,90.669 215.2969,89.4659 217,89.4659 C217.5781,89.4659 218.1563,89.6065 218.625,89.8565 C219.0938,90.1221 219.2656,90.3096 219.3281,90.669 C219.4531,91.3409 219.7031,91.5909 220.2344,91.5909 C220.5156,91.5909 220.7969,91.4502 220.9844,91.2315 C221.1094,91.0596 221.1563,90.8877 221.1563,90.4502 L221.1563,89.0909 C221.1563,88.669 221.1406,88.5284 221.0156,88.3565 C220.8438,88.1065 220.5625,87.9502 220.2344,87.9502 C219.9219,87.9502 219.7188,88.0596 219.5,88.3252 C218.3281,87.8252 217.8906,87.7159 216.9375,87.7159 C214.2656,87.7159 212.25,89.7315 212.25,92.3565 L212.25,93.4502 Z " fill="#000000"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="41" x="233.75" y="96.9">Object</text><line style="stroke:#181818;stroke-width:0.5;" x1="192" x2="288" y1="108.294" y2="108.294"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="86" x="197" y="125.2999">COMMITTED</text><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="22" x="197" y="142.0999">key</text><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="52" x="197" y="158.8998">256 MiB</text><line style="stroke:#181818;stroke-width:0.5;" x1="192" x2="288" y1="166.6938" y2="166.6938"/></g><!--MD5=[6ad779f986f08eda59f5d9c1ddce10be]
class SegmentCopies--><g id="elem_SegmentCopies"><rect codeLine="118" fill="#F1F1F1" height="81.5999" id="SegmentCopies" rx="2.5" ry="2.5" style="stroke:#181818;stroke-width:0.5;" width="133" x="22.5" y="84.294"/><ellipse cx="37.5" cy="100.294" fill="#ADD1B2" rx="11" ry="11" style="stroke:#181818;stroke-width:1.0;"/><path d="M32.5,101.4502 C32.5,103.9502 34.6406,105.7627 37.5625,105.7627 C38.7969,105.7627 39.9688,105.4659 40.7188,104.9502 C41.3281,104.5284 41.6563,104.1065 41.6563,103.7002 C41.6563,103.2315 41.2344,102.8252 40.7344,102.8252 C40.5,102.8252 40.2813,102.9034 40.0781,103.1065 C39.6406,103.544 39.6406,103.544 39.4688,103.6377 C39.0156,103.8721 38.375,104.0127 37.6094,104.0127 C35.6094,104.0127 34.3281,102.9971 34.3281,101.419 L34.3281,100.3721 C34.3281,98.669 35.5469,97.4659 37.25,97.4659 C37.8281,97.4659 38.4063,97.6065 38.875,97.8565 C39.3438,98.1221 39.5156,98.3096 39.5781,98.669 C39.7031,99.3409 39.9531,99.5909 40.4844,99.5909 C40.7656,99.5909 41.0469,99.4502 41.2344,99.2315 C41.3594,99.0596 41.4063,98.8877 41.4063,98.4502 L41.4063,97.0909 C41.4063,96.669 41.3906,96.5284 41.2656,96.3565 C41.0938,96.1065 40.8125,95.9502 40.4844,95.9502 C40.1719,95.9502 39.9688,96.0596 39.75,96.3252 C38.5781,95.8252 38.1406,95.7159 37.1875,95.7159 C34.5156,95.7159 32.5,97.7315 32.5,100.3565 L32.5,101.4502 Z " fill="#000000"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="101" x="51.5" y="104.9">SegmentCopies</text><line style="stroke:#181818;stroke-width:0.5;" x1="23.5" x2="154.5" y1="116.294" y2="116.294"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="58" x="28.5" y="133.2999">streamID</text><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="115" x="28.5" y="150.0999">ancestorStreamID</text><line style="stroke:#181818;stroke-width:0.5;" x1="23.5" x2="154.5" y1="157.8938" y2="157.8938"/></g><!--MD5=[e8c087ca6c91ad88f30ff6f96718cc79]
class Segment1--><g id="elem_Segment1"><rect codeLine="124" fill="#F1F1F1" height="81.5999" id="Segment1" rx="2.5" ry="2.5" style="stroke:#181818;stroke-width:0.5;" width="97" x="324.5" y="84.294"/><ellipse cx="339.5" cy="100.294" fill="#ADD1B2" rx="11" ry="11" style="stroke:#181818;stroke-width:1.0;"/><path d="M334.5,101.4502 C334.5,103.9502 336.6406,105.7627 339.5625,105.7627 C340.7969,105.7627 341.9688,105.4659 342.7188,104.9502 C343.3281,104.5284 343.6563,104.1065 343.6563,103.7002 C343.6563,103.2315 343.2344,102.8252 342.7344,102.8252 C342.5,102.8252 342.2813,102.9034 342.0781,103.1065 C341.6406,103.544 341.6406,103.544 341.4688,103.6377 C341.0156,103.8721 340.375,104.0127 339.6094,104.0127 C337.6094,104.0127 336.3281,102.9971 336.3281,101.419 L336.3281,100.3721 C336.3281,98.669 337.5469,97.4659 339.25,97.4659 C339.8281,97.4659 340.4063,97.6065 340.875,97.8565 C341.3438,98.1221 341.5156,98.3096 341.5781,98.669 C341.7031,99.3409 341.9531,99.5909 342.4844,99.5909 C342.7656,99.5909 343.0469,99.4502 343.2344,99.2315 C343.3594,99.0596 343.4063,98.8877 343.4063,98.4502 L343.4063,97.0909 C343.4063,96.669 343.3906,96.5284 343.2656,96.3565 C343.0938,96.1065 342.8125,95.9502 342.4844,95.9502 C342.1719,95.9502 341.9688,96.0596 341.75,96.3252 C340.5781,95.8252 340.1406,95.7159 339.1875,95.7159 C336.5156,95.7159 334.5,97.7315 334.5,100.3565 L334.5,101.4502 Z " fill="#000000"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="65" x="353.5" y="104.9">Segment1</text><line style="stroke:#181818;stroke-width:0.5;" x1="325.5" x2="420.5" y1="116.294" y2="116.294"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="44" x="330.5" y="133.2999">64 MiB</text><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="53" x="330.5" y="150.0999">0 pieces</text><line style="stroke:#181818;stroke-width:0.5;" x1="325.5" x2="420.5" y1="157.8938" y2="157.8938"/></g><!--MD5=[0c5e25f2d8585a3891e00bf8523de367]
class Segment2--><g id="elem_Segment2"><rect codeLine="128" fill="#F1F1F1" height="81.5999" id="Segment2" rx="2.5" ry="2.5" style="stroke:#181818;stroke-width:0.5;" width="97" x="456.5" y="84.294"/><ellipse cx="471.5" cy="100.294" fill="#ADD1B2" rx="11" ry="11" style="stroke:#181818;stroke-width:1.0;"/><path d="M466.5,101.4502 C466.5,103.9502 468.6406,105.7627 471.5625,105.7627 C472.7969,105.7627 473.9688,105.4659 474.7188,104.9502 C475.3281,104.5284 475.6563,104.1065 475.6563,103.7002 C475.6563,103.2315 475.2344,102.8252 474.7344,102.8252 C474.5,102.8252 474.2813,102.9034 474.0781,103.1065 C473.6406,103.544 473.6406,103.544 473.4688,103.6377 C473.0156,103.8721 472.375,104.0127 471.6094,104.0127 C469.6094,104.0127 468.3281,102.9971 468.3281,101.419 L468.3281,100.3721 C468.3281,98.669 469.5469,97.4659 471.25,97.4659 C471.8281,97.4659 472.4063,97.6065 472.875,97.8565 C473.3438,98.1221 473.5156,98.3096 473.5781,98.669 C473.7031,99.3409 473.9531,99.5909 474.4844,99.5909 C474.7656,99.5909 475.0469,99.4502 475.2344,99.2315 C475.3594,99.0596 475.4063,98.8877 475.4063,98.4502 L475.4063,97.0909 C475.4063,96.669 475.3906,96.5284 475.2656,96.3565 C475.0938,96.1065 474.8125,95.9502 474.4844,95.9502 C474.1719,95.9502 473.9688,96.0596 473.75,96.3252 C472.5781,95.8252 472.1406,95.7159 471.1875,95.7159 C468.5156,95.7159 466.5,97.7315 466.5,100.3565 L466.5,101.4502 Z " fill="#000000"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="65" x="485.5" y="104.9">Segment2</text><line style="stroke:#181818;stroke-width:0.5;" x1="457.5" x2="552.5" y1="116.294" y2="116.294"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="44" x="462.5" y="133.2999">64 MiB</text><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="53" x="462.5" y="150.0999">0 pieces</text><line style="stroke:#181818;stroke-width:0.5;" x1="457.5" x2="552.5" y1="157.8938" y2="157.8938"/></g><!--MD5=[6709f8a889f97bff46691ea82439f452]
class Segment3--><g id="elem_Segment3"><rect codeLine="132" fill="#F1F1F1" height="81.5999" id="Segment3" rx="2.5" ry="2.5" style="stroke:#181818;stroke-width:0.5;" width="97" x="324.5" y="234.294"/><ellipse cx="339.5" cy="250.294" fill="#ADD1B2" rx="11" ry="11" style="stroke:#181818;stroke-width:1.0;"/><path d="M334.5,251.4502 C334.5,253.9502 336.6406,255.7627 339.5625,255.7627 C340.7969,255.7627 341.9688,255.4659 342.7188,254.9502 C343.3281,254.5284 343.6563,254.1065 343.6563,253.7002 C343.6563,253.2315 343.2344,252.8252 342.7344,252.8252 C342.5,252.8252 342.2813,252.9034 342.0781,253.1065 C341.6406,253.544 341.6406,253.544 341.4688,253.6377 C341.0156,253.8721 340.375,254.0127 339.6094,254.0127 C337.6094,254.0127 336.3281,252.9971 336.3281,251.419 L336.3281,250.3721 C336.3281,248.669 337.5469,247.4659 339.25,247.4659 C339.8281,247.4659 340.4063,247.6065 340.875,247.8565 C341.3438,248.1221 341.5156,248.3096 341.5781,248.669 C341.7031,249.3409 341.9531,249.5909 342.4844,249.5909 C342.7656,249.5909 343.0469,249.4502 343.2344,249.2315 C343.3594,249.0596 343.4063,248.8877 343.4063,248.4502 L343.4063,247.0909 C343.4063,246.669 343.3906,246.5284 343.2656,246.3565 C343.0938,246.1065 342.8125,245.9502 342.4844,245.9502 C342.1719,245.9502 341.9688,246.0596 341.75,246.3252 C340.5781,245.8252 340.1406,245.7159 339.1875,245.7159 C336.5156,245.7159 334.5,247.7315 334.5,250.3565 L334.5,251.4502 Z " fill="#000000"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="65" x="353.5" y="254.9">Segment3</text><line style="stroke:#181818;stroke-width:0.5;" x1="325.5" x2="420.5" y1="266.294" y2="266.294"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="44" x="330.5" y="283.2999">64 MiB</text><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="53" x="330.5" y="300.0999">0 pieces</text><line style="stroke:#181818;stroke-width:0.5;" x1="325.5" x2="420.5" y1="307.8938" y2="307.8938"/></g><!--MD5=[71b18ec3900e68539b655371ac057fe5]
class Segment4--><g id="elem_Segment4"><rect codeLine="136" fill="#F1F1F1" height="81.5999" id="Segment4" rx="2.5" ry="2.5" style="stroke:#181818;stroke-width:0.5;" width="97" x="456.5" y="234.294"/><ellipse cx="471.5" cy="250.294" fill="#ADD1B2" rx="11" ry="11" style="stroke:#181818;stroke-width:1.0;"/><path d="M466.5,251.4502 C466.5,253.9502 468.6406,255.7627 471.5625,255.7627 C472.7969,255.7627 473.9688,255.4659 474.7188,254.9502 C475.3281,254.5284 475.6563,254.1065 475.6563,253.7002 C475.6563,253.2315 475.2344,252.8252 474.7344,252.8252 C474.5,252.8252 474.2813,252.9034 474.0781,253.1065 C473.6406,253.544 473.6406,253.544 473.4688,253.6377 C473.0156,253.8721 472.375,254.0127 471.6094,254.0127 C469.6094,254.0127 468.3281,252.9971 468.3281,251.419 L468.3281,250.3721 C468.3281,248.669 469.5469,247.4659 471.25,247.4659 C471.8281,247.4659 472.4063,247.6065 472.875,247.8565 C473.3438,248.1221 473.5156,248.3096 473.5781,248.669 C473.7031,249.3409 473.9531,249.5909 474.4844,249.5909 C474.7656,249.5909 475.0469,249.4502 475.2344,249.2315 C475.3594,249.0596 475.4063,248.8877 475.4063,248.4502 L475.4063,247.0909 C475.4063,246.669 475.3906,246.5284 475.2656,246.3565 C475.0938,246.1065 474.8125,245.9502 474.4844,245.9502 C474.1719,245.9502 473.9688,246.0596 473.75,246.3252 C472.5781,245.8252 472.1406,245.7159 471.1875,245.7159 C468.5156,245.7159 466.5,247.7315 466.5,250.3565 L466.5,251.4502 Z " fill="#000000"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="65" x="485.5" y="254.9">Segment4</text><line style="stroke:#181818;stroke-width:0.5;" x1="457.5" x2="552.5" y1="266.294" y2="266.294"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="44" x="462.5" y="283.2999">64 MiB</text><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="53" x="462.5" y="300.0999">0 pieces</text><line style="stroke:#181818;stroke-width:0.5;" x1="457.5" x2="552.5" y1="307.8938" y2="307.8938"/></g><!--MD5=[f3d6350694750b9cd130d27d4c72db17]
@startuml
package Destination {
class Object {
COMMITTED
key
256 MiB
}
class SegmentCopies {
streamID
ancestorStreamID
}
package Segments.Part1 {
class Segment1 {
64 MiB
0 pieces
}
class Segment2 {
64 MiB
0 pieces
}
class Segment3 {
64 MiB
0 pieces
}
class Segment4 {
64 MiB
0 pieces
}
}
}
@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>

After

Width:  |  Height:  |  Size: 14 KiB

View File

@ -0,0 +1,109 @@
@startuml
S3Client -> Gateway: PUT /bucket/dest?uploads
Gateway -> Uplink: BeginUpload (multipart)
note left
Bucket
Key
Expires
end note
Uplink -> Satellite: BeginObjectRequest
Uplink <-- Satellite: BeginObjectResponse
note right
StreamID
end note
Gateway <-- Uplink: BeginUpload return
note right
StreamID
end note
S3Client <-- Gateway: 200 response
note right
<UploadId />
end note
group loop for every part
S3Client -> Gateway: PUT /bucket/dest?partNumber=1&uploadId=7tKsLOJgNs
Gateway -> Uplink: UploadPart
note left
Bucket
Key
UploadID
PartNumber
end note
Gateway -> Uplink: UploadPart.write
group loop for every segment
Uplink -> Satellite: SegmentBeginRequest
note left
StreamID
Position
end note
Uplink <-- Satellite: SegmentBeginResponse
note right
SegmentID
OrderLimits
PiecePrivateKey
end note
collections StorageNodes
Uplink -> StorageNodes: PieceUploadRequest
Uplink <-- StorageNodes: PieceUploadResponse
Uplink -> Satellite: SegmentCommitRequest
note left
SegmentID
EncryptedKey
Size
[]SegmentPieceUploadResult
end note
Uplink <-- Satellite: SegmentCommitResponse
else if inline
Uplink -> Satellite: SegmentMakeInlineRequest
Uplink <-- Satellite: SegmentMakeInlineResponse
end
Gateway <-- Uplink: UploadPart return
S3Client <-- Gateway: 200 response
end
S3Client -> Gateway: POST /bucket/dest?uploadId=7tKsLOJgNs
Gateway -> Uplink: CommitUpload
note left
Bucket
Key
UploadID
CustomMetadata
end note
Uplink -> Satellite: ObjectCommitRequest
note left
StreamID
CustomMetadata //encypted//
end note
note right #lightgreen
Change object status from
pending to committed
end note
Uplink <-- Satellite: ObjectCommitResponse
Gateway <-- Uplink: CommitUpload return
S3Client <-- Gateway: 200 response
@enduml

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 24 KiB