dwarfs/doc/mkdwarfs-sequence.puml
2023-08-03 11:34:32 +02:00

80 lines
1.7 KiB
Plaintext

@startuml
activate scanner #lightgreen
scanner -> inode_manager ** : create
scanner -> file_scanner ** : create
== Scanning Phase ==
loop until all files found
scanner -> entry_factory ++ #lightgreen : ""create()""
entry_factory -> os_access ++ #lightgreen : ""symlink_info()""
return
return return new entry
alt if ""has_filter()""
scanner -> script ++ #lightgreen : ""filter()""
return
else if ""has_transform()""
scanner -> script ++ #lightgreen : ""transform()""
return
end
alt if regular file
scanner -> os_access ++ #lightgreen : ""access(R_OK)""
return
alt if file accessible
scanner -> file_scanner ++ #lightgreen : ""scan()""
file_scanner --> scanner
else
scanner -> scanner ++ #lightgreen : Replace with empty file
return
end
else
scanner -> entry_factory ++ #lightgreen : ""scan()""
return
end
end
scanner -> scanner : Remove empty directories
scanner -> scanner : Assign dir/link inodes
note left
Directories and symbolic
links have been scanned
and are assigned inodes
while file are still scanning.
end note
file_scanner -> os_access ++ #lightgreen : ""map_file()""
return
file_scanner -> entry_factory ++ #lightgreen : ""scan()""
return
file_scanner -> file_scanner : Deduplicate
note right
Both hard links and "regular"
duplicates are handled here.
end note
file_scanner -> inode_manager ++ #lightgreen : ""create_inode()""
return
file_scanner -> categorizer_manager ++ #lightgreen : ""job()""
return
scanner -> file_scanner : ""wait()""
return
scanner -> file_scanner ++ #lightgreen : ""finalize()""
return
== Segmentation/Blockifying Phase ==
' TODO to be continued
@enduml