From 47b22be9fc7c850cf49690be2fe1dbe034fb030d Mon Sep 17 00:00:00 2001 From: Marcus Holland-Moritz Date: Mon, 17 Jul 2023 14:10:48 +0200 Subject: [PATCH] Add mkdwarfs sequence diagram --- doc/mkdwarfs-sequence.puml | 79 +++++++++++++++++ doc/mkdwarfs-sequence.svg | 168 +++++++++++++++++++++++++++++++++++++ 2 files changed, 247 insertions(+) create mode 100644 doc/mkdwarfs-sequence.puml create mode 100644 doc/mkdwarfs-sequence.svg diff --git a/doc/mkdwarfs-sequence.puml b/doc/mkdwarfs-sequence.puml new file mode 100644 index 00000000..4335d265 --- /dev/null +++ b/doc/mkdwarfs-sequence.puml @@ -0,0 +1,79 @@ +@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 diff --git a/doc/mkdwarfs-sequence.svg b/doc/mkdwarfs-sequence.svg new file mode 100644 index 00000000..27a1affb --- /dev/null +++ b/doc/mkdwarfs-sequence.svg @@ -0,0 +1,168 @@ +scannerscannerinode_managerfile_scannerentry_factoryentry_factoryos_accessos_accessscriptscriptcategorizer_managercategorizer_managercreateinode_managercreatefile_scannerScanning Phaseloop[until all files found]create()symlink_info()return new entryalt[ifhas_filter()]filter()[ifhas_transform()]transform()alt[if regular file]access(R_OK)alt[if file accessible]scan()Replace with empty filescan()Remove empty directoriesAssign dir/link inodesDirectories and symboliclinks have been scannedand are assigned inodeswhile file are still scanning.map_file()scan()DeduplicateBoth hard links and "regular"duplicates are handled here.create_inode()job()wait()finalize()Segmentation/Blockifying Phase \ No newline at end of file