github.com/swiftstack/ProxyFS@v0.0.0-20210203235616-4017c267d62f/docs/source/architecture/uml/file-write-old.uml (about)

     1  @startuml
     2  
     3  title File Write Path - Old Model
     4  
     5  participant fs
     6  participant inode
     7  participant serializer
     8  participant sortedmap
     9  participant swiftclient
    10  participant swift
    11  participant headhunter
    12  participant disk
    13  
    14  fs->inode: Write(InodeNumber, Data)
    15  inode->headhunter: GetInodeRec(InodeNumber)
    16  headhunter->disk: Read "page" of InodeRec Table
    17  disk->headhunter: returns "page" of InodeRec Table
    18  headhunter->inode: returns LastLogSegment#
    19  inode->swiftclient: ObjectRead(trailer...then JSON'd FileInode)
    20  swiftclient->swift: HTTP GET
    21  swift->swiftclient: returns trailer...then JSON'd FileInode
    22  swiftclient->inode: returns trailer... then JSON'd FileInode
    23  inode->serializer: Do definiteWrite()
    24  serializer->swiftclient: FetchObjectChunkedPutContext()
    25  swiftclient->swift: HTTP PUT Transfer-Encoding: chunked
    26  swiftclient->serializer: returns chunkedPutContext
    27  serializer->swiftclient: SendChunk(Data)
    28  swiftclient->swift: ChunkHeader...then Data
    29  swiftclient->serializer: returns chunk sent status
    30  serializer->sortedmap: Put(FileExtentStruct)
    31  sortedmap->swiftclient: ObjectRead(cstruct'd B+Tree Node)
    32  swiftclient->sortedmap: returns cstruct'd B+Tree Node
    33  sortedmap->serializer: returns insert status
    34  serializer->serializer: Time To Flush
    35  serializer->sortedmap: Flush()
    36  sortedmap->swiftclient: SendChunk(cstruct'd B+Tree Node)
    37  swiftclient->swift: ChunkHeader...then cstruct'd B+Tree Node
    38  swiftclient->sortedmap: returns chunk sent status
    39  sortedmap->serializer: returns flush status
    40  serializer->swiftclient: SendChunk(JSON'd FileInode...then trailer)
    41  swiftclient->swift: ChunkHeader...then JSON'd FileInode...then trailer
    42  swiftclient->serializer: returns chunk sent status
    43  serializer->swiftclient: Close()
    44  swiftclient->swift: Zero-length'd ChunkHeader
    45  swift->swiftclient: returns HTTP Status
    46  swiftclient->serializer: returns HTTP Status
    47  serializer->headhunter: PutLogSegmentRec(LastLogSegment->ObjectPath)
    48  headhunter->disk: Read "page" of LogSegmentRec Table
    49  disk->headhunter: returns "page" of LogSegmentRecTable
    50  headhunter->disk: Write "page" of LogSegmentRec Table
    51  disk->headhunter: returns Write status
    52  headhunter->serializer: returns PutLogSegmentRec() status
    53  serializer->headhunter: PutInodeRec(InodeNumber->LastLogSegment#)
    54  headhunter->disk: Write "page" of InodeRec Table
    55  disk->headhunter: returns Write status
    56  headhunter->serializer: returns PutInodeRec() status
    57  serializer->inode: returns definiteWrite() status
    58  inode->fs: returns Write() status
    59  
    60  @enduml