github.com/swiftstack/ProxyFS@v0.0.0-20210203235616-4017c267d62f/docs/source/architecture/uml/bimodal-put-newfile.uml (about)

     1  @startuml
     2  
     3  title Bimodal PUT API - New File Top Directory Case
     4  
     5  autonumber
     6  
     7  box "Swift WSGI"
     8  participant WSGI
     9  participant RPCclient
    10  end box
    11  box "ProxyFS"
    12  participant PFSrpcsvr
    13  participant PFSfs
    14  participant PFSinode
    15  end box
    16  participant SwiftBE
    17  
    18  ->WSGI: <URI>?Put
    19  
    20  WSGI -> WSGI:Virtual account
    21  
    22  WSGI -> RPCclient:<B><I>proxyfs_put_location(authUser, vAccount)</I></B>\n"What pPATH should I use?"
    23  
    24  RPCclient -> PFSrpcsvr:<B><I>RpcPutLocation(authUser,\n<B><I>vAccount)</I></B> i.e. "What pPATH should I use?"
    25  
    26  PFSrpcsvr -> PFSrpcsvr:Extract components of vPATH
    27  
    28  PFSrpcsvr -> PFSrpcsvr:Get mapping of vAccount to volumeName
    29  
    30  PFSrpcsvr -> PFSfs:If volume is not mounted for this user,\n<B><I>fs.Mount(volumeName, mountOptions, authUser)</I></B>
    31  
    32  PFSfs -> PFSrpcsvr:Return mountId, rootInodeNumber, err
    33  
    34  PFSrpcsvr -> PFSfs:<B><I>fs.CallInodeToProvisionObject()</I></B>
    35  
    36  PFSfs -> PFSinode:<B><I>inode.ProvisionObject()</I></B>
    37  
    38  PFSinode -> PFSfs:Respond with pPATH
    39  
    40  PFSfs -> PFSrpcsvr: Returns pPATH for physical\naccount
    41  
    42  PFSrpcsvr -> RPCclient: Response for\n<B><I>RpcPutLocation(vPATH)</I></B>\nis target location of object in\nphysical account.
    43  
    44  RPCclient -> WSGI: Response for\n<B><I>proxyfs_put_location(vPATH)</I></B>\nis target location of object in physical\naccount.
    45  
    46  WSGI -> SwiftBE:<B><I>PUT(BODY, pPATH, data)</I></B>\nPuts data for vPATH in physical account.\nNOTE: User metadata should not be\nwritten!
    47  SwiftBE -> WSGI:Response for <B><I>PUT(pPATH, data)</I></B>\nis status
    48  
    49  WSGI -> RPCclient:<B><I>proxyfs_put_complete(authUser, vPATH,\n<B><I>pPATH, size, metadata)</I></B>\nCompleted writing initial PUT of payload
    50  
    51  RPCclient -> PFSrpcsvr:<B><I>RpcPutComplete(authUser, vPATH,\n<B><I>pPATH, metadata, size)</I></B>.\nCompleted writing initial PUT\nof payload
    52  
    53  PFSrpcsvr -> PFSrpcsvr:Extract components of vPATH
    54  
    55  PFSrpcsvr -> PFSrpcsvr:Get mapping of vAccount to volumeName
    56  
    57  PFSrpcsvr -> PFSfs:If volume is not mounted for this user,\n<B><I>fs.Mount(volumeName, mountOptions, authUser)</I></B>
    58  
    59  PFSfs -> PFSrpcsvr:Return mountId, rootInodeNumber, err
    60  
    61  PFSrpcsvr -> PFSfs:<B><I>fs.Put(mountId, rootInodeNumber, vContainer)</I></B>
    62  
    63  PFSfs -> PFSfs:<B><I>fs.Lookup(mountId, rootInodeNumber, vContainer)</I></B>
    64  PFSfs -> PFSfs:Return dirInode
    65  
    66  PFSfs -> PFSfs:<B><I>fs.CreateFsMetaData(vPATH, pPATH,\n<B><I>dirInode, metadata, size)</I></B>
    67  
    68  PFSfs -> PFSinode:<B><I>inode.CreateFile()</I></B>
    69  PFSinode -> PFSfs:Return fileInodeNumber, err
    70  
    71  PFSfs -> PFSinode:<B><I>inode.Wrote(fileInodeNumber, fileoffset,\n<B><I>objectPath, objectoffset, length,\n<B><I>metadataMap[string]string ????)</I></B>
    72  
    73  PFSinode -> PFSfs:Return status
    74  
    75  PFSinode -> SwiftBE:When flushed,\nwrite btree
    76  SwiftBE -> PFSinode: Response to flush
    77  
    78  PFSfs -> PFSinode:<B><I>inode.Link(dirInode, "/"??,\n<B><I>targetInodeNumber???)</I></B>
    79  PFSinode -> PFSfs:Return status
    80  
    81  PFSinode -> SwiftBE:When flushed,\nwrite btree
    82  
    83  SwiftBE -> PFSinode: Response to flush
    84  
    85  PFSinode -> PFSfs:FsMetaData created\nflush completed
    86  
    87  PFSfs -> PFSfs: Response to <B><I>fs.CreateMetaData()</I></B>\nis status
    88  
    89  PFSfs -> PFSrpcsvr: Response to <B><I>fs.Put()</I></B>\nis status
    90  
    91  PFSrpcsvr -> RPCclient:Response for\n<B><I>RpcPutComplete(vPATH,\n<B><I>pPATH, size, metadata)</I></B>\nis status
    92  
    93  RPCclient -> WSGI:Response for\n<B><I>proxyfs_put_complete(vPATH, pPATH, size,\nmetadata)</I></B>\nis status
    94  
    95  <-WSGI: Return status code
    96  
    97  
    98  @enduml