File Re-assembling

Components

sr_watch: You can use sr3_watch to watch a directory for incoming partition files (.Part) from sr_subscribe or sr_sender, both have the ability to send a file in partitions. In the config file for sr3_watch the important parameters to include are:

  • path <path of directory to watch>

  • on_part /usr/lib/python3/dist-packages/sarra/plugins/part_file_assemble.py

  • accept *.Part

  • accept_unmatch False # Makes it only acccept the pattern above

Part_File_Assemble (plugin): This plugin is an on_part plugin which triggers the assembly code in sr_file

sr_file: Contains the reassembly code… The algorithm is described below

Algorithm

After being triggered by a downloaded part file:

  • if the target_file doesn’t exist:

    • if the downloaded part file was the first partition (Part 0):

      • create a new empty target_file

  • find which partition number needs to be inserted next (i)

  • while i < total blocks:

    • file_insert_part()

      • inserts the part file into target file and computes checksum of the inserted portion

    • verify insertion by comparing checksums of partition file and inserted block in the file

    • delete file if okay, otherwise retry

    • trigger on_file

Testing

Create an sr3_watch config file according to the template above Start the process by typing the following command: `sr_watch foreground path/to/config_file.cfg`

Then create a subcriber config file and include `inplace off` so the file will be downloaded in parts Start the subscriber by typring `sr_subscribe foreground path/to/config_file.cfg`

Now, you must send post messages of the file for the subscriber for example: `./sr_post.py -pb amqp://tsource@localhost/ -pbu sftp://<user>@localhost/ -p /home/<user>/test_file -px xs_tsource  --blocksize 12M`