This is nearline storage plugin for dCache.
To compile the plugin, run:
mvn package
This produces a tarball in the target directory containing the plugin.
mvn clean package
mkdir -p rpmbuild/{BUILD,RPMS,SOURCES,SPECS,SRPMS}
cp target/dcache-cta*.tar.gz rpmbuild/SOURCES
rpmbuild -ba --define "_topdir `pwd`/rpmbuild" target/SPECS/dcache-cta.spec
To use this plugin with dCache, place the directory containing this file in /usr/local/share/dcache/plugins/ on a dCache pool. Restart the pool to load the plugin.
To verify that the plugin is loaded, navigate to the pool in the dCache admin shell and issue the command:
hsm show providers
The plugin should be listed as dcache-cta.
To activate the plugin, create an HSM instance using:
hsm create osm name dcache-cta [-key=value]...
example:
hsm create osm cta dcache-cta -cta-user=userA \
-cta-group=groupA -cta-instance-name=instanceA \
-cta-frontend-addr=cta-forntend-host1:17017,cta-forntend-host2:17017 \
-cta-use-tls=true \
-io-endpoint=a.b.c.d -io-port=1094
The dCache files stored in CTA will have hsm uri in form
<hsmType>://<hsmName>/<pnfsid>?archiveid=<id>
Where id represents the CTA internal archiveId
for example:
osm://cta/00001D43C0C086CA459298C634D67F68AB6B?archiveid=8402
In the CTA catalog the dCache's pnfsids are referenced as disk_file_id field:
db => select * from archive_file where disk_file_id = '00001D43C0C086CA459298C634D67F68AB6B';
-[ RECORD 1 ]-------+-------------------------------------
archive_file_id | 8402
disk_instance_name | instanceA
disk_file_id | 00001D43C0C086CA459298C634D67F68AB6B
disk_file_uid | 1
disk_file_gid | 1
size_in_bytes | 10482
checksum_blob | \x0a08080112043309f498
checksum_adler32 | 2566129971
storage_class_id | 81
creation_time | 1635150624
reconciliation_time | 1635150624
is_deleted | 0
collocation_hint |
NOTE: dCache-CTA driver doesn't preserve file's ownership, thus values of
uidandgidfields contain arbitrary values.
As CTA has its own scheduler and flush/restore queue the dCache pools should be configured to submit as much request as possible. Thus grouping and collecting request on the pool side should be disabled:
queue define class -expire=0 -pending=0 -total=0 -open <hsmType> *
| Name | Description | required | default |
|---|---|---|---|
| cta-instance-name | The dCache instance name configured in CTA | yes | - |
| cta-frontend-addr | A comma separated list of CTA cta-dcache endpoints |
yes | - |
| cta-user | The dCache instance associated user in CTA | yes | - |
| cta-group | The dCache instance associated group in CTA | yes | - |
| cta-ca-chain | The path to CA root chain for use with TLS | no | - |
| cta-use-tls | A switch (true/false) to enable TLS for CTA control connection | no | false |
| cta-frontend-timeout | How log dCache waits in seconds for CTA frontend to reply | no | 30 |
| io-endpoint | The hostname or IP offered by dCache for IO by CTA | no | hostname |
| io-port | The TCP port offered by dCache for IO by CTA | no | - |
| use-dio | Use Direct-I/O | no | false |
| restore-success-on-close | obsolete | - | - |
If multiple cta-frontend-addr are provided, the driver will try to connect to all endpoints and use round-robin
strategy to distribute the requests. If TLS is used, then all endpoints names should be present in SAN field of the
certificate.
The driver is compatible with all dCache versions staring 7.2. The compatibility CTA versions are:
| CTA Version | dcache-cta version |
|---|---|
| 5.7.12 - 5.10.xx | 0.6.0 - 0.14.0 |
| 5.11.0 - xxx | 0.15.0 |
Each externally submitted patch must have a "Signed-off-by" line. Patches without this line will not be accepted.
The sign-off is a simple line at the end of the explanation for the patch, which certifies that you wrote it or otherwise have the right to pass it on as an open-source patch. The rules are pretty simple: if you can certify the below:
Developer's Certificate of Origin 1.1
By making a contribution to this project, I certify that:
(a) The contribution was created in whole or in part by me and I
have the right to submit it under the open source license
indicated in the file; or
(b) The contribution is based upon previous work that, to the best
of my knowledge, is covered under an appropriate open source
license and I have the right under that license to submit that
work with modifications, whether created in whole or in part
by me, under the same open source license (unless I am
permitted to submit under a different license), as indicated
in the file; or
(c) The contribution was provided directly to me by some other
person who certified (a), (b) or (c) and I have not modified
it.
(d) I understand and agree that this project and the contribution
are public and that a record of the contribution (including all
personal information I submit with it, including my sign-off) is
maintained indefinitely and may be redistributed consistent with
this project or the open source license(s) involved.
then you just add a line saying ( git commit -s )
Signed-off-by: Random J Developer <random@developer.example.org>
using your real name (sorry, no pseudonyms or anonymous contributions.)
This driver is based and inspired by cta-communicator by Lea Morschel and sapphire by Svenja Meyer
