<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.c3g-app.sd4h.ca/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Sbonami</id>
	<title>SD4H wiki - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.c3g-app.sd4h.ca/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Sbonami"/>
	<link rel="alternate" type="text/html" href="https://wiki.c3g-app.sd4h.ca/wiki/Special:Contributions/Sbonami"/>
	<updated>2026-06-06T18:40:21Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.39.17</generator>
	<entry>
		<id>https://wiki.c3g-app.sd4h.ca/index.php?title=Technical_Documentation&amp;diff=223</id>
		<title>Technical Documentation</title>
		<link rel="alternate" type="text/html" href="https://wiki.c3g-app.sd4h.ca/index.php?title=Technical_Documentation&amp;diff=223"/>
		<updated>2026-03-06T19:55:10Z</updated>

		<summary type="html">&lt;p&gt;Sbonami: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;strong&amp;gt;Welcome to the technical documentation wiki of the Secure Data for Health (SD4H) project.&amp;lt;/strong&amp;gt;&lt;br /&gt;
This is the primary source for users with questions on equipment and services.&lt;br /&gt;
&lt;br /&gt;
== Infrastructure ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; &lt;br /&gt;
|+ Computing&lt;br /&gt;
|-&lt;br /&gt;
! Hardware   !! Description !!  Availability&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | Compute VM   ||  Up to 64 vcores and 480 GB of RAM||   7 680 cores&lt;br /&gt;
|-&lt;br /&gt;
    || Up to 64 vcores and 240 GB of RAM || 10 176 cores  &lt;br /&gt;
|-&lt;br /&gt;
| High Availability VM ||  Up to 64 cores and 480 GB &amp;lt;br&amp;gt; Connected to UPS and Diesel Generators || 3 072 cores&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | GPU   ||  Up to 2 A100-40 per VM || 20 GPU&lt;br /&gt;
|-&lt;br /&gt;
    || Up to 2-A100-80 per VM || 8 GPU&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; &lt;br /&gt;
|+ Storage&lt;br /&gt;
|-&lt;br /&gt;
! Hardware   !! Description !!  Availability&lt;br /&gt;
|-&lt;br /&gt;
| Block Storage || 3 copies, all SSD   || 740 TB&lt;br /&gt;
|-&lt;br /&gt;
| Object Storage ||  S3 and Swift API, [https://en.wikipedia.org/wiki/Erasure_code EC] 8+3 || 58 PB&lt;br /&gt;
|-&lt;br /&gt;
| Ceph FS || High performance multi read/write &amp;lt;br&amp;gt; NVMe, [https://en.wikipedia.org/wiki/Erasure_code EC] 4+2  || 1.2 PB &lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==How to==&lt;br /&gt;
* [[Store and Share data]] on the platform&lt;br /&gt;
* [[Networking]] between two projects.&lt;br /&gt;
* Install the [[OpenStack Client]]&lt;br /&gt;
* [[SSH to a server via Bastion]]&lt;br /&gt;
&lt;br /&gt;
==Services==&lt;br /&gt;
&lt;br /&gt;
* [[Globus]] Data transfer and Sharing&lt;br /&gt;
* [[Elastic HPC]]: High Performance Computing in the Cloud&lt;br /&gt;
&lt;br /&gt;
==Object Store==&lt;br /&gt;
&lt;br /&gt;
* [[Object Store Quick Start]]&lt;br /&gt;
* [[Backing up Object Store]] buckets to tape&lt;br /&gt;
* Using [[Bucket policy]]&lt;br /&gt;
* Using [[rclone]] on our system&lt;br /&gt;
* Configuring [[Bucket Object Versioning]]&lt;/div&gt;</summary>
		<author><name>Sbonami</name></author>
	</entry>
	<entry>
		<id>https://wiki.c3g-app.sd4h.ca/index.php?title=Elastic_HPC&amp;diff=222</id>
		<title>Elastic HPC</title>
		<link rel="alternate" type="text/html" href="https://wiki.c3g-app.sd4h.ca/index.php?title=Elastic_HPC&amp;diff=222"/>
		<updated>2026-03-06T19:51:24Z</updated>

		<summary type="html">&lt;p&gt;Sbonami: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__FORCETOC__ &lt;br /&gt;
=What is it?=&lt;br /&gt;
&lt;br /&gt;
Elastic-HPC is an SD4H project that lets you have a private HPC &lt;br /&gt;
deployment so you can work on data that cannot be stored on a shared system. &lt;br /&gt;
You and your team will be the sole user of a SLURM cluster coming with all the bells and whistles of the [https://www.alliancecan.ca/en/services/research-software/magic-castle Magic Castle] project. &lt;br /&gt;
&lt;br /&gt;
==Is it for me?==&lt;br /&gt;
&lt;br /&gt;
If you are working with sensible data, need a computing system that can scale, but your data cannot be transferred on shared infrastructure, Elastic-HPC is a good alternative to the [https://www.alliancecan.ca/en/our-services/advanced-research-computing/national-host-sites Canadian national HPC servers by the Alliance]. &lt;br /&gt;
&lt;br /&gt;
== What is Magic Castle? ==&lt;br /&gt;
&lt;br /&gt;
Magic Castle was first a project that aims to reproduce a standard Compute Canada HPC cluster (Compute Canada has been absorbed by the [https://alliancecan.ca/ Alliance]). It has the fully compiled CC software stack, as well as the MUGQIC software stack and the MUGQIC references genomes maintained respectively by the Alliance and the [https://computationalgenomics.ca/ C3G].&lt;br /&gt;
&lt;br /&gt;
=How can I get my own HPC?=&lt;br /&gt;
&lt;br /&gt;
You can send you inquiries at [mailto:juno@calculquebec.ca juno@calculquebec.ca].&lt;/div&gt;</summary>
		<author><name>Sbonami</name></author>
	</entry>
	<entry>
		<id>https://wiki.c3g-app.sd4h.ca/index.php?title=Backing_up_Object_Store&amp;diff=208</id>
		<title>Backing up Object Store</title>
		<link rel="alternate" type="text/html" href="https://wiki.c3g-app.sd4h.ca/index.php?title=Backing_up_Object_Store&amp;diff=208"/>
		<updated>2025-11-13T17:41:02Z</updated>

		<summary type="html">&lt;p&gt;Sbonami: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__FORCETOC__&lt;br /&gt;
&lt;br /&gt;
Object Store data, while stored redundantly via Ceph, is not backed up by default.  Object Store buckets are backed up to the TSM tape system upon request only by following the procedures listed on this page.&lt;br /&gt;
&lt;br /&gt;
== Content and policies ==&lt;br /&gt;
The following are the default contents and policies of requested backups:&lt;br /&gt;
&lt;br /&gt;
What is in the backup?&lt;br /&gt;
 * Only the bucket data is backed up.  We are not currently backing up the IAM policies of the buckets or objects.&lt;br /&gt;
 * Only the current version of the data is seen by the backup system.  Object chunks or versioned objects are not seen by the backups system.&lt;br /&gt;
What is the backup policy?&lt;br /&gt;
 * Backups are run on a daily basis.&lt;br /&gt;
 * The current object and one modified version of object are kept (this is different than full bucket versioning).    &lt;br /&gt;
 * The modified version is kept for 60 days - after that period only the current object is kept. &lt;br /&gt;
 * Deleted objects are kept for 6 months.&lt;br /&gt;
&lt;br /&gt;
= Backup Procedure =&lt;br /&gt;
&lt;br /&gt;
Please follow this procedure to request backups of your buckets. &lt;br /&gt;
&lt;br /&gt;
==Email the list of buckets==&lt;br /&gt;
&lt;br /&gt;
Send a list of buckets to be backed up to [mailto:juno@calculquebec.ca sd4h support] with the name and ID of the project where the buckets live.&lt;br /&gt;
&lt;br /&gt;
==Give us permission==&lt;br /&gt;
&lt;br /&gt;
An IAM policy statement must be applied to &#039;&#039;&#039;all the buckets&#039;&#039;&#039; you want to backup so the TSM robot user in charge of the backup can access them.  This can be done with the [https://awscli.amazonaws.com/v2/documentation/api/latest/index.html aws cli].&lt;br /&gt;
&lt;br /&gt;
First, ensure that &amp;lt;code&amp;gt;my-bucket&amp;lt;/code&amp;gt; currently has no IAM policy.  Check bucket &amp;lt;code&amp;gt;my-bucket&amp;lt;/code&amp;gt; using profile &amp;lt;code&amp;gt;my-profile&amp;lt;/code&amp;gt; (as defined in ~/.aws/config and ~/.aws/credentials files) with: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;$aws s3api get-bucket-policy --profile c3g-data-repos --bucket my-bucket&lt;br /&gt;
&lt;br /&gt;
An error occurred (NoSuchBucketPolicy) when calling the GetBucketPolicy operation: The bucket policy does not exist&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If that command returns something, the new policy statements must be added to the existing policy (which is not covered here).&lt;br /&gt;
&lt;br /&gt;
The following policy.json needs to be applied.&lt;br /&gt;
&amp;lt;div class=&amp;quot;filename&amp;quot;&amp;gt;&#039;&#039;&#039;File :&#039;&#039;&#039; policy.json &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;json&amp;quot; file=&amp;quot;my-policy.json&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
&amp;quot;Statement&amp;quot;: [&lt;br /&gt;
  {&lt;br /&gt;
    &amp;quot;Effect&amp;quot;: &amp;quot;Allow&amp;quot;,&lt;br /&gt;
    &amp;quot;Principal&amp;quot;: {&amp;quot;AWS&amp;quot;: [&amp;quot;arn:aws:iam:::user/tsm&amp;quot;]},&lt;br /&gt;
    &amp;quot;Action&amp;quot;: [&lt;br /&gt;
      &amp;quot;s3:ListBucket&amp;quot;,&lt;br /&gt;
      &amp;quot;s3:GetObject&amp;quot;&lt;br /&gt;
    ],&lt;br /&gt;
    &amp;quot;Resource&amp;quot;: [&lt;br /&gt;
      &amp;quot;arn:aws:s3:::my-bucket/*&amp;quot;,&lt;br /&gt;
      &amp;quot;arn:aws:s3:::my-bucket&amp;quot;&lt;br /&gt;
    ]&lt;br /&gt;
  }&lt;br /&gt;
]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Load the policy onto the bucket &amp;lt;code&amp;gt;my-bucket&amp;lt;/code&amp;gt; using the profile &amp;lt;code&amp;gt;my-profile:&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$aws s3api put-bucket-policy --policy file://my-policy.json --profile my-profile --bucket my-bucket&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Confirm IAM policy applied ==&lt;br /&gt;
As we did before, request the bucket&#039;s IAM policy, ensuring that the contents of policy.json are listed.&lt;br /&gt;
 $aws s3api get-bucket-policy --profile c3g-data-repos --bucket my-bucket&lt;br /&gt;
&lt;br /&gt;
=Restore Procedure=&lt;br /&gt;
&lt;br /&gt;
==List bucket==&lt;br /&gt;
&lt;br /&gt;
Send us the list of buckets or objects to restore at [mailto:juno@calculquebec.ca sd4h support]. &lt;br /&gt;
&lt;br /&gt;
==Give us permission==&lt;br /&gt;
&lt;br /&gt;
For each bucket you want to be restored, you will be asked to create a bucket with the &amp;lt;code&amp;gt;-restore&amp;lt;/code&amp;gt; suffix. &lt;br /&gt;
&lt;br /&gt;
Following the previous procedure, apply this restore IAM policy. &lt;br /&gt;
&amp;lt;div class=&amp;quot;filename&amp;quot;&amp;gt;&#039;&#039;&#039;File :&#039;&#039;&#039; policy.json &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;json&amp;quot; file=&amp;quot;my-policy.json&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
&amp;quot;Statement&amp;quot;: [&lt;br /&gt;
  {&lt;br /&gt;
    &amp;quot;Effect&amp;quot;: &amp;quot;Allow&amp;quot;,&lt;br /&gt;
    &amp;quot;Principal&amp;quot;: {&amp;quot;AWS&amp;quot;: [&amp;quot;arn:aws:iam:::user/tsm&amp;quot;]},&lt;br /&gt;
    &amp;quot;Action&amp;quot;: [&lt;br /&gt;
      &amp;quot;s3:ListBucket&amp;quot;,&lt;br /&gt;
      &amp;quot;s3:GetObject&amp;quot;,&lt;br /&gt;
      &amp;quot;s3:PutObject&amp;quot;,&lt;br /&gt;
      &amp;quot;s3:PutObjectAcl&amp;quot;,&lt;br /&gt;
      &amp;quot;s3:AbortMultipartUpload&amp;quot;&lt;br /&gt;
    ],&lt;br /&gt;
    &amp;quot;Resource&amp;quot;: [&lt;br /&gt;
      &amp;quot;arn:aws:s3:::my-bucket-restore/*&amp;quot;,&lt;br /&gt;
      &amp;quot;arn:aws:s3:::my-bucket-restore&amp;quot;&lt;br /&gt;
    ]&lt;br /&gt;
  }&lt;br /&gt;
]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Once done, we will restore your data to the &amp;lt;code&amp;gt;*-restore&amp;lt;/code&amp;gt; buckets.&lt;/div&gt;</summary>
		<author><name>Sbonami</name></author>
	</entry>
	<entry>
		<id>https://wiki.c3g-app.sd4h.ca/index.php?title=Rclone&amp;diff=207</id>
		<title>Rclone</title>
		<link rel="alternate" type="text/html" href="https://wiki.c3g-app.sd4h.ca/index.php?title=Rclone&amp;diff=207"/>
		<updated>2025-11-11T23:32:56Z</updated>

		<summary type="html">&lt;p&gt;Sbonami: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[https://rclone.org/ Rclone] is a powerful client that can interact with multiple storage backends, it offers a good support for our Ceph version of the S3 api and has good speed transfer out of the box.  It can also be used to mount an Object Store as traditional block file storage.  &lt;br /&gt;
&lt;br /&gt;
== Configuration ==&lt;br /&gt;
&lt;br /&gt;
First [https://rclone.org/downloads/ download rclone] or use the [https://rclone.org/install/#script-installation script installation].  Then [[Store_and_Share_data#Configuring_S3_access|get your S3 &amp;lt;code&amp;gt;id key&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;secret&amp;lt;/code&amp;gt;]] from Open Stack.&lt;br /&gt;
&lt;br /&gt;
Create the following file:  &lt;br /&gt;
&lt;br /&gt;
  ~/.config/rclone/rclone.conf&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
[my-project]&lt;br /&gt;
type = s3&lt;br /&gt;
provider = Other&lt;br /&gt;
env_auth = false&lt;br /&gt;
access_key_id = &amp;lt;S3 ID from previous step&amp;gt;&lt;br /&gt;
secret_access_key = &amp;lt;S3 secret from previous step&amp;gt;&lt;br /&gt;
endpoint = https://objets.juno.calculquebec.ca&lt;br /&gt;
acl = private&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can then list current bucket, create a bucket and then copy a file into it,&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$rclone lsd my-project:&lt;br /&gt;
          -1 2024-01-19 14:12:34        -1 backups&lt;br /&gt;
          -1 2024-03-07 14:23:26        -1 my-bucket&lt;br /&gt;
$rclone mkdir   c3g-prod:test&lt;br /&gt;
$rclone lsd my-project:&lt;br /&gt;
          -1 2024-01-19 14:12:34        -1 backups&lt;br /&gt;
          -1 2024-03-07 14:23:26        -1 my-bucket&lt;br /&gt;
          -1 2025-04-15 18:08:32        -1 test&lt;br /&gt;
$rclone copy my-file.txt my-project:test&lt;br /&gt;
$rclone ls  my-project:test/&lt;br /&gt;
    12408 my-file.txt&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Mounting an Object Store ==&lt;br /&gt;
To allow mounting by non-root users, in /etc/fuse.conf, uncomment:&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
user_allow_other&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Mount the Object Store in daemon mode with:&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
rclone mount &amp;lt;rclone config block&amp;gt;:&amp;lt;bucket&amp;gt; /path/to/mount/dir --daemon --daemon-wait 0 --allow-other --read-only&lt;br /&gt;
# For example:&lt;br /&gt;
#rclone mount c3g-data-repos:ihec_data /mnt/ihec_data_objstr --daemon --daemon-wait 0 --allow-other --read-only&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;A service may be used to auto-mount the Object Store on boot with a service file (in /etc/systemd/system/).&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# Mount the ihec_data_objstr, even after a restart&lt;br /&gt;
[Unit]&lt;br /&gt;
Description=My Object Store automount&lt;br /&gt;
After=network.target&lt;br /&gt;
&lt;br /&gt;
[Service]&lt;br /&gt;
ExecStart=/usr/bin/rclone mount &amp;lt;rclone config block&amp;gt;:&amp;lt;bucket&amp;gt; /path/to/mount/point/dir --no-modtime --fast-list --transfers 50 --checkers 50 --allow-other --read-only&lt;br /&gt;
# For example:&lt;br /&gt;
# ExecStart=/usr/bin/rclone mount c3g-data-repos:ihec_data /mnt/ihec_data_objstr --no-modtime --fast-list --transfers 50 --checkers 50 --allow-other --read-only&lt;br /&gt;
ExecStop=/usr/bin/fusermount -u /mnt/ihec_data_objstr&lt;br /&gt;
Restart=always&lt;br /&gt;
SyslogIdentifier=ihec_data_objstr&lt;br /&gt;
User=ihec&lt;br /&gt;
Group=ihec&lt;br /&gt;
Environment=RCLONE_CONFIG=/home/ihec/.config/rclone/rclone.conf&lt;br /&gt;
TimeoutStopSec=30&lt;br /&gt;
&lt;br /&gt;
[Install]&lt;br /&gt;
WantedBy=multi-user.target&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;enable and start the service.&lt;br /&gt;
&lt;br /&gt;
== Mounting a public Object Store without using credentials ==&lt;br /&gt;
Public Object Stores may be accessed or mounted as read-only without the use of Open Stack credentials.  This relies on a bucket syntax prepended with the Open Stack project ID.&lt;br /&gt;
&lt;br /&gt;
Your ~/.config/rclone/rclone.conf need not contain an access_key_id and secret_access_key but only:&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
[my-public-project]&lt;br /&gt;
type = s3&lt;br /&gt;
provider = Other&lt;br /&gt;
env_auth = false&lt;br /&gt;
endpoint = https://objets.juno.calculquebec.ca&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Then combine the OS project ID and the bucket name like so:&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
rclone lsd my-public-project:&amp;lt;OS project ID&amp;gt;:&amp;lt;bucket name&amp;gt;&lt;br /&gt;
# For example:&lt;br /&gt;
# rclone lsd my-public-project:d5f8b8e8e3e2442f81573b2f0951013b:ihec_data&lt;br /&gt;
# or&lt;br /&gt;
# rclone mount my-public-project:d5f8b8e8e3e2442f81573b2f0951013b:ihec_data /mnt/ihec_data_objstr --daemon --daemon-wait 0 --allow-other --read-only&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== No problems, only solutions ==&lt;br /&gt;
&lt;br /&gt;
=== I cannot upload a file larger than 48GB. === &lt;br /&gt;
In some situations, rclone is not able to guess the size of the file to upload and use the default value of &amp;lt;code&amp;gt;--s3-chunk-size 5M&amp;lt;/code&amp;gt; to spit and upload the file to the bucket. But since the server has a 10,000 chunk limit, the upload crashes.&lt;br /&gt;
&lt;br /&gt;
You can solve that by setting a larger  value:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
rclone copy --s3-chunk-size 50M my-large-file.cram my-project:test&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Another way is to lower the maximum number of parts in a multipart upload using [https://rclone.org/s3/#s3-max-upload-parts --s3-max-upload-parts], for example: &amp;lt;code&amp;gt;--s3-max-upload-parts 1000&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Note that you need the ram of your computer to be larger that chunks.&lt;/div&gt;</summary>
		<author><name>Sbonami</name></author>
	</entry>
	<entry>
		<id>https://wiki.c3g-app.sd4h.ca/index.php?title=Bucket_Object_Versioning&amp;diff=206</id>
		<title>Bucket Object Versioning</title>
		<link rel="alternate" type="text/html" href="https://wiki.c3g-app.sd4h.ca/index.php?title=Bucket_Object_Versioning&amp;diff=206"/>
		<updated>2025-11-11T22:31:40Z</updated>

		<summary type="html">&lt;p&gt;Sbonami: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Object Store data is not versioned by default. Bucket Object Versioning can be useful for protecting against accidental deletions or overwrites, for tracking changes over time and for allowing data recovery to previous states. It&#039;s not an alternative to [[Backing up Object Store|backups]], but rather a complement.&lt;br /&gt;
&lt;br /&gt;
== Procedure using S3 API ==&lt;br /&gt;
Our Object Store provides the S3 API and Bucket Object Versioning can be configured like it would be done in AWS.&lt;br /&gt;
&lt;br /&gt;
When enabled on a bucket, deleting an object doesn’t actually remove its data immediately. Instead, S3 adds a &#039;&#039;delete marker&#039;&#039; that will now represents the latest version of the object. This object will then be hidden from a normal object listing. In the case of overwriting an object, it creates a new version for it that will now represents the latest version of the object.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Enabling for a bucket:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;aws --endpoint-url https://objets.juno.calculquebec.ca s3api put-bucket-versioning --bucket &amp;lt;BUCKET&amp;gt; --versioning-configuration Status=Enabled&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Verifying if it&#039;s enabled for a bucket:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;aws --endpoint-url https://objets.juno.calculquebec.ca s3api get-bucket-versioning --bucket &amp;lt;BUCKET&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note: the &amp;lt;code&amp;gt;MFADelete&amp;lt;/code&amp;gt; attribute should be ignored as it&#039;s not compatible with our Object Store.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Listing object versions:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;aws --endpoint-url https://objets.juno.calculquebec.ca s3api list-object-versions --bucket &amp;lt;BUCKET&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Lifecycle ===&lt;br /&gt;
&lt;br /&gt;
Lifecycle processing rules can be configured to automatically clean up old object versions. Without such rules, every version of every object remains stored indefinitely which could lead to a huge storage usage over time.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Setting a lifecycle configuration on a bucket:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;aws --endpoint-url https://objets.juno.calculquebec.ca s3api put-bucket-lifecycle-configuration --bucket &amp;lt;BUCKET&amp;gt; --lifecycle-configuration file://lifecycle.json&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;lifecycle.json&#039;&#039; example:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;json&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;Rules&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;ID&amp;quot;: &amp;quot;ExpireOldVersions&amp;quot;,&lt;br /&gt;
      &amp;quot;Status&amp;quot;: &amp;quot;Enabled&amp;quot;,&lt;br /&gt;
      &amp;quot;Filter&amp;quot;: {&lt;br /&gt;
        &amp;quot;Prefix&amp;quot;: &amp;quot;&amp;quot;&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;NoncurrentVersionExpiration&amp;quot;: {&lt;br /&gt;
        &amp;quot;NoncurrentDays&amp;quot;: 1,&lt;br /&gt;
        &amp;quot;NewerNoncurrentVersions&amp;quot;: 3&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
  ]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
In this example, it means that we want to automatically permanently delete any noncurrent version that is older than 1 day and not among the 3 most newest versions.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Verifying the lifecycle configuration of a bucket:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;aws --endpoint-url https://objets.juno.calculquebec.ca s3api get-bucket-lifecycle-configuration --bucket &amp;lt;BUCKET&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;Note: lifecycle processing occurs once per day at midnight.&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Procedure using Swift API ==&lt;br /&gt;
Some methods for Bucket Object Versioning are technically possible with the Swift API, but not supported on our Object Store.&lt;/div&gt;</summary>
		<author><name>Sbonami</name></author>
	</entry>
	<entry>
		<id>https://wiki.c3g-app.sd4h.ca/index.php?title=Bucket_Object_Versioning&amp;diff=205</id>
		<title>Bucket Object Versioning</title>
		<link rel="alternate" type="text/html" href="https://wiki.c3g-app.sd4h.ca/index.php?title=Bucket_Object_Versioning&amp;diff=205"/>
		<updated>2025-11-11T20:07:00Z</updated>

		<summary type="html">&lt;p&gt;Sbonami: Created page with &amp;quot;Object Store data is not versioned by default.&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Object Store data is not versioned by default.&lt;/div&gt;</summary>
		<author><name>Sbonami</name></author>
	</entry>
	<entry>
		<id>https://wiki.c3g-app.sd4h.ca/index.php?title=Technical_Documentation&amp;diff=204</id>
		<title>Technical Documentation</title>
		<link rel="alternate" type="text/html" href="https://wiki.c3g-app.sd4h.ca/index.php?title=Technical_Documentation&amp;diff=204"/>
		<updated>2025-11-11T20:05:46Z</updated>

		<summary type="html">&lt;p&gt;Sbonami: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;strong&amp;gt;Welcome to the technical documentation wiki of the Secure Data for Health (SD4H) project.&amp;lt;/strong&amp;gt;&lt;br /&gt;
This is the primary source for users with questions on equipment and services.&lt;br /&gt;
&lt;br /&gt;
== Infrastructure ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; &lt;br /&gt;
|+ Computing&lt;br /&gt;
|-&lt;br /&gt;
! Hardware   !! Description !!  Availability&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | Compute VM   ||  Up to 64 vcores and 480 GB of RAM||   7 680 cores&lt;br /&gt;
|-&lt;br /&gt;
    || Up to 64 vcores and 240 GB of RAM || 10 176 cores  &lt;br /&gt;
|-&lt;br /&gt;
| High Availability VM ||  Up to 64 cores and 480 GB &amp;lt;br&amp;gt; Connected to UPS and Diesel Generators || 3 072 cores&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | GPU   ||  Up to 2 A100-40 per VM || 20 GPU&lt;br /&gt;
|-&lt;br /&gt;
    || Up to 2-A100-80 per VM || 8 GPU&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; &lt;br /&gt;
|+ Storage&lt;br /&gt;
|-&lt;br /&gt;
! Hardware   !! Description !!  Availability&lt;br /&gt;
|-&lt;br /&gt;
| Block Storage || 3 copies, all SSD   || 740 TB&lt;br /&gt;
|-&lt;br /&gt;
| Object Storage ||  S3 and Swift API || 58 PB&lt;br /&gt;
|-&lt;br /&gt;
| Ceph FS || High performance multi read/write &amp;lt;br&amp;gt; NVMe || 1.2 PB &lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==How to==&lt;br /&gt;
* [[Store and Share data]] on the platform&lt;br /&gt;
* [[Networking]] between two projects.&lt;br /&gt;
* Install the [[OpenStack Client]]&lt;br /&gt;
* [[SSH to a server via Bastion]]&lt;br /&gt;
&lt;br /&gt;
==Services==&lt;br /&gt;
&lt;br /&gt;
* [[Globus]] Data transfer and Sharing&lt;br /&gt;
* [[Elastic HPC]]: High perforamce Computing in the Cloud&lt;br /&gt;
&lt;br /&gt;
==Object Store==&lt;br /&gt;
&lt;br /&gt;
* [[Object Store Quick Start]]&lt;br /&gt;
* [[Backing up Object Store]] buckets to tape&lt;br /&gt;
* Using [[rclone]] on our system&lt;br /&gt;
* Configuring [[Bucket Object Versioning]]&lt;/div&gt;</summary>
		<author><name>Sbonami</name></author>
	</entry>
</feed>