Skip to content

Commit 3c6f08b

Browse files
committed
CBRAIN Release 7.0.0
1 parent 9d3f173 commit 3c6f08b

File tree

2 files changed

+703
-345
lines changed

2 files changed

+703
-345
lines changed

Release-Notes.md

Lines changed: 294 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,300 @@
11

22
## CBRAIN/NeuroHub Release Notes
33

4+
#### Version 7.0.0 Released 2025-05-26
5+
6+
It has been two years since the previous release, and enough
7+
significant architectural changes and overall improvements have
8+
accumulated that we decided to bump the version number to 7.0!
9+
10+
There are hundreds of small bug fixes and small changes that are
11+
not even mentioned in the lists below.
12+
13+
###### User support and user interface changes:
14+
15+
* A bunch of layout and appearance improvements.
16+
* All code that depended on the label of the buttons pressed
17+
was changed to make it work independently of those labels. Makes
18+
it easier on users with translation engines in their browsers.
19+
* When users save task parameter presets, the description is also
20+
saved and restored when the preset it reloaded.
21+
* Users can now create their own private SSH DataProvider with a
22+
private key owned by CBRAIN.
23+
* Users can also create their own S3 DataProviders.
24+
* The QC panels have better viewers.
25+
* Users can create projects and make them 'public'.
26+
* The main Projects page has been re-organized with tabs.
27+
* The public-facing 'available' page was redesigned.
28+
* The Tasks index page now show a column for the DP where results
29+
are saved.
30+
* Users are warned if they try to launch tasks on archived/compressed
31+
files.
32+
* Users can track actions they perform in background. See the entry
33+
for BackgroundActivity below.
34+
* Some pages have a 'Copy to clipboard' button (e.g. for tokens).
35+
* ANSI sequences are stipped from task STDOUT, STDERR outputs before
36+
being shown.
37+
* When a user switches to a public project, the "show all files"
38+
option is automatically turned on.
39+
* Users can launch task arrays by leaving blank one mandatory file
40+
input for the tool, and having selected a bunch of other files,
41+
these files will be used to generate all the tasks, one per file.
42+
* The SimpleFileExtractor task now allows users up to 50GB of
43+
data caching before refusing to work.
44+
* When users edit a task and change the parameters, a better log entry
45+
is created to document those changes.
46+
47+
###### New Userfile models:
48+
49+
These models are part of the core CBRAIN distributions. Many other
50+
models were added in science-specific plugins, but these are in
51+
other GitHub repositories.
52+
53+
* ApptainerImage
54+
* SquashfsFile
55+
* HtmlFile (with viewer)
56+
* SVGs can be viewed (as ImageFile)
57+
* HdfFile
58+
59+
###### API improvements:
60+
61+
* Syncing or marking-as-newer is now available as JSON requests.
62+
* An admin can create API tokens for another user.
63+
* A user can request their personal public key.
64+
* Many asynchronous operations now return BackgroundActivity object
65+
IDs.
66+
* A user can query these BackgroundActivity objects.
67+
* A new API call, dispatcher_file_copy, can launch CopyFile BACs.
68+
* Users can obtain a task's captured STDOUT and STDERR files.
69+
* Users can view the JSON structure of a CbrainTask object in the
70+
interface, making it easier to write code to submit such tasks
71+
with the API.
72+
73+
###### Administrative functions or configuration changes:
74+
75+
* Running tasks can be configured with capture mountpoints that
76+
mount one or several EXT3 filesystem-in-a-file.
77+
* Tasks integrated with Boutiques can be configued for these EXT3
78+
mounts using a new module, BoutiquesExt3Capturer.
79+
* DiskQuotas are enforced when users try to copy or move files from
80+
one DataProvider to another.
81+
* Revision numbers of custom Boutiques modules are now always logged.
82+
* Owners of DataProviders are validated better to avoid a situation
83+
where an admin somehow gives too many privileges to a normal user.
84+
* Tasks containerized in Apptainer can have their internal paths
85+
shortened to "/T12345" internally through bindmounts.
86+
* A new DataProvider type, SquashifierEnCbrainSshDataProvider,
87+
automatically runs mksquashfs and unsquashfs on FileCollections. On
88+
the provider side, the files are kept squashified at all times.
89+
* Another new DataProvider type, MultilevelSingSquashfsDataProvider,
90+
was added. It's the same as SingSquashfsDataProvider but with
91+
browse_path support.
92+
* Yet two more DataProvider types: MultiLevelLocalDataProvider
93+
and the smart version, MultiLevelSmartDataProvider.
94+
* CbrainTasks that are in states involving restarts and recovery
95+
are handled before other tasks (in order to free up resources,
96+
if possible).
97+
* The main SSH key used by the system was changed from RSA to ed25519.
98+
* User's individual SSH keys are now also ed25519.
99+
* The 'update_cb_all.sh' script was improved.
100+
* An internal IP ban list was added; it can be configured to execute
101+
an external script so that the system can also ban packets.
102+
* Some special BackgroundActivities (see below) are specific to
103+
administrative tasks, including scheduling regular cleanups,
104+
archiving, or even running arbitrary Ruby commands (danger!).
105+
* An admin can configure small bash scripts to be run at boot time
106+
for both the Portal or Bourreau; nice place to check things, and
107+
when these script fail, the boot process is stopped.
108+
* OIDC subsystem. The old Globus-specific codebase was re-engineered
109+
to be a more generic, configurable OIDC. Sysadmins need to configure
110+
the new file 'oidc.yml.erb' in the config folder.
111+
* A GoogleCloud SCIR connector was added, so that an admin can
112+
deploy a Bourreau on GoogleCloud. It requires a lot of manual
113+
configuration on the cloud side, though.
114+
* Admins can configure some projects to have HTML links in their
115+
descriptions.
116+
* Admins can decide not to compress the archives of task workdirectories.
117+
* Destroying tasks has been improved, with the case where a Bourreau's
118+
BackgroundActivity worker is requested to do it only for tasks that
119+
still have a work directory.
120+
* Some new checks are performed at boot time, especially to validate
121+
the 'type' column of tables using single table inheritance. The
122+
Portal or Bourreau will refuse to boot if a spurious type entry
123+
is found. Can be fixed with a Rails console (might require
124+
CBRAIN_SKIP_VALIDATIONS).
125+
* A new CpuQuota framework was implemented. It is based on the same DB
126+
table as the existing DiskQuota system. Admins can configure quotas
127+
for three time windows: the past week, the past month, and ever.
128+
Quotas can apply to individual Bourreaux, individual users, or
129+
groups of users.
130+
* A new ToolConfigurator panel has been added. It is implemented
131+
as a task, and helps facilitate the configuration of a ToolConfig.
132+
When configuring a new ToolConfig, the admin can select a previous
133+
version for the same tool, and copy its attributes. The
134+
ToolConfigurator can launch a "apptainer build" step on a Bourreaux
135+
that is equipped with Docker and Apptainer, to build the SIF image
136+
of the new ToolConfig.
137+
* The way plugins are integrated into CBRAIN was improved such that
138+
the symlinks to all the userfile models are now placed together in
139+
a single directory, instead of in a bunch of subdirectories.
140+
Requires a "rake cbrain:plugins:clean:all" once, then a "rake
141+
cbrain:plugins:install:all".
142+
* All the extensions to the Rails console have been documented much
143+
better within the console itself. Type 'cbhelp' to see it.
144+
* Users forced to authenticate with an OIDC server can no longer reset
145+
their password (duh).
146+
* An admin can configure special notes that show up in the form to launch
147+
a task by adding a field in the 'custom' section of a descriptor. Code
148+
can do so by invoking a new helper method.
149+
150+
###### BackgroundActivity subsystem:
151+
152+
This is a new subsystem that can execute 'operations' independently
153+
of the Portal or the Bourreaux on a list of 'items'. Portals and
154+
Bourreaux both start asynchronous workers to handle these, and these
155+
workers connect to the database and check every 5 seconds if there
156+
is something to do.
157+
158+
The different operations are implemented as distinct subclasses of
159+
the core BackgroundActivity class (e.g. BackgroundActivity::CopyFile).
160+
161+
The system is rich in features: the BACs have their own state
162+
diagram, BACs can be scheduled in advance, the list of items can
163+
be fixed or generated at start time, the success/failure of each
164+
item is recorded, and and admin can pause/resume the activities.
165+
BAC that are completely failed or partially failed can be retried,
166+
and only the failed items are retried.
167+
168+
Users see a simplified version of all their activities, admins have
169+
a more complete view of everything.
170+
171+
Most operations that users triggered with the interface have been
172+
re-engineered to launch BackgroundActivities instead.
173+
174+
The 'ibc' command-line client has been extended to allow the admin
175+
to start or stop these workers (aka BAC workers), just like it is
176+
possible for the standard task workers (aka BourreauWorkers).
177+
178+
A utility class BacItemsCollector was also created to help developers
179+
schedule multiple BAC objects out of any code that produces the
180+
list of items dynamically, given each BAC object has a limit to the
181+
their number of items.
182+
183+
The current list of supported BACs are:
184+
185+
* ArchiveTaskWorkdir
186+
* CheckMissingWorkdir
187+
* CleanCache
188+
* CompressFile
189+
* CopyFile
190+
* CopyFileAndUnregister
191+
* DestroyFile
192+
* DestroyTask
193+
* DestroyTaskWithoutWorkdir
194+
* DestroyUnregisteredFile
195+
* DuplicateTask
196+
* EraseBackgroundActivities
197+
* FileOnProviderIsNewer
198+
* HoldTask
199+
* MoveFile
200+
* RandomActivity
201+
* RecoverTask
202+
* RegisterAndCopyFile
203+
* RegisterAndMoveFile
204+
* RegisterFile
205+
* ReleaseTask
206+
* RemoveTaskWorkdir
207+
* RestartTask
208+
* ResumeTask
209+
* RubyRunner
210+
* SaveTaskWorkdir
211+
* SuspendTask
212+
* SyncFile
213+
* TerminateTask
214+
* UnarchiveTaskWorkdir
215+
* UncompressFile
216+
* UnregisterFile
217+
* UpdateTaskWorkdirSize
218+
* VerifyDataProvider
219+
* WipeOldCache
220+
221+
###### New Boutiques custom modules:
222+
223+
These new modules can be included in the JSON file for Boutiques
224+
descriptiors, in the custom section, and provide methods that
225+
override the task integration framework. They provide new special
226+
capabilities outside of the core Boutiques integration system.
227+
228+
* BoutiquesExt3Capturer
229+
* BoutiquesSaveStdOutStdErr
230+
* BoutiquesCollectionBasenamesListMaker
231+
* BoutiquesTaskLogsCopier
232+
* BoutiquesInputValueFixer
233+
* BoutiquesInputRegexChecker
234+
* BoutiquesInputCopier
235+
* BoutiquesFileNameVerifier
236+
* BoutiquesDirMaker
237+
238+
###### Code refactoring or code improvement changes:
239+
240+
* Bourreaux will now pre-load in advance the git version numbers
241+
of the CbrainTask classes, so that the Workers started later will
242+
have them all in memory persistently, instead of invoking 'git
243+
describe' over and over.
244+
* Better recording of the actual return code of the commands of
245+
CbrainTasks, even within the many layers of wrappers that CBRAIN
246+
create.
247+
* Fixed a long-standing rare race condition bug involving syncing
248+
files.
249+
* The internal Boutiques JSON generators were extended to add pretty
250+
outputs, and the BoutiquesDescriptorMaker task can call them,
251+
allowing users to generate nice JSON.
252+
* Fixed a S3 sync_to_cache problem involving empty subdirectories.
253+
* Added special handling code for Apptainer containers that take a
254+
long time to setup (e.g. on slow or heavily loaded machines).
255+
* Added configurable CORS.
256+
* The DataProvider class now has a new optional 'direct-upload'
257+
mechanism, allowing a programmer to send files to a destination
258+
without first copying it in the local CBRAIN cache. Support exist
259+
for SSH and S3 DPs.
260+
* The DataProvider class has support for copying subsets of directory
261+
trees. Only available for SSH and S3 DPs.
262+
* The BoutiquesInputSubdirMaker (a modules that existed in the
263+
previous release) can now install files as physical copies.
264+
* Boutiques tasks that have a descriptor with a 'suggested-resources'
265+
structure with 'walltime-estimate', 'ram' or 'cpu-cores' now see
266+
these values propagated to the submitted task (but, SLURM only).
267+
* We no longer use a lockfile for the AgentLocker subprocess.
268+
* If a Boutiques descriptor contains an error code message table,
269+
those messages are logged, as needed.
270+
* Internally, invitations to join a project contained an attribute
271+
"group_id" for the project, but that was confusing and it was renamed
272+
"invitation_group_id".
273+
274+
###### Deprecations and code removal
275+
276+
* Removed all CARMIN API stuff.
277+
* Removed all the old code that implemented an ExecutionServer based
278+
on launching virtual machines. It was experimental, clumsy code.
279+
We do have a replacement in the new ScirGcloud class, in a way.
280+
* The old Boutiques integrator that was based on templates is no
281+
longer supported; the new Boutiques integrator is the only one
282+
that will get improved and supported.
283+
* A special API endpoint to copy files existed for a period of
284+
time, and was then deleted. The current release has no trace of it.
285+
* Many old 'time-of-death' counters have been removed (for DPs and Bourreaux).
286+
* We removed the old AlterTask message that the Portal would send
287+
to the Bourreaux to trigger operations on tasks. The BackgroundActivity
288+
framework handle all these operations now.
289+
* Some old data-fixing or validation code related to how the CBRAIN
290+
system evolved in its first few years have been removed.
291+
* We removed the old subsystem that allowed running cluster jobs
292+
to submit new jobs using small JSON files that were monitored by
293+
the BourreauWorkers.
294+
* Some old ApplicationRecord utilities written by us in the early days,
295+
raw-first-column() and raw-rows() (true names have underscores, darn
296+
it markdown) were replaced by the modern equivalent, pluck().
297+
4298
#### Version 6.3.0 Released 2023-01-26
5299

6300
(Nearly a full year since the previous release! The diff is 19,773 lines long!)

0 commit comments

Comments
 (0)