Hard Links
June 9-11, 2020
User Group Meeting
Virtual Conference
Kory Draughn
korydraughn@renci.org
Software Developer, iRODS Consortium
Hard Links
Hard Links - Why?
- Applications such as WinSCP implement some operations using hard links.
- Provide a generic solution for the community and future projects (e.g. SMBRODS).
What is a hard link?
In Linux, all file information is stored in an i-node.
A hard link is the mapping between a filename and an i-node.
i-nodes can have multiple hard links.
Hard Link representation in iRODS
A hard link has the following characteristics:
- All affiliated data objects have different logical paths
- All affiliated data objects point to the same replica
- All affiliated data objects have the following AVU:
- name: irods::hard_link
- value: <UUID>
- unit: <resource_id>
The (UUID, resource_id) tuple uniquely identifies a hard linked replica.
A data object can be a member of multiple hard link groups.
Policy Enforcement Points
- pep_api_data_obj_rename_pre
- pep_api_data_obj_trim_pre
- pep_api_data_obj_unlink_pre
- pep_api_data_obj_phymv_post
Maintaining the behavior of these operations required changes to the Rule Engine Plugin Framework (REPF).
- RULE_ENGINE_SKIP_OPERATION
- Instructs the REPF to skip everything following the pre-PEP
- Allows PEPs to override operations
- "finally" PEPs are always triggered
Example: Creating a Hard Link
- Generates new metadata and attaches it to each data object
- Or, attaches the existing metadata to the newly registered data object
- Copies all permissions from the source data object to the newly registered data object
Example: Renaming a Hard Link
- Renaming or moving a hard linked data object only updates the logical path of that data object
- The physical path is never touched
Example: Unlinking a Hard Link
- The data object being unlinked is a member of two hard link groups
- The targeted data object is unregistered and all metadata is removed from the remaining hard link members
- The result is two data objects without any hard link metadata
Example: Trimming a Hard Link
- Trimming a hard linked data object never unlinks it
- Replica two is unregistered from the targeted data object
- The metadata shared by the data objects pointing to replica two is removed from both data objects.
$ itrim -n2
Example: Physically moving a hard linked replica
- The units of the hard link metadata is updated to reference the new resource id
- All data objects in the hard link group are updated to reflect the new location of the replica
$ iphymv -S <src_resource> -R <dst_resource>
Important things to know
- Never modify the hard link metadata directly
- Hard links do not track the first data object which referenced the replica
- "post" PEPs are never triggered when handling a hard linked data object
- "finally" PEPs are always triggered
Questions?
Hard Links Resources:
UGM 2020 - Hard Links Rule Engine Plugin
By korydraughn
UGM 2020 - Hard Links Rule Engine Plugin
- 995