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