|
1 | 1 |
|
2 | 2 | ## CBRAIN/NeuroHub Release Notes |
3 | 3 |
|
| 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 | + |
4 | 298 | #### Version 6.3.0 Released 2023-01-26 |
5 | 299 |
|
6 | 300 | (Nearly a full year since the previous release! The diff is 19,773 lines long!) |
|
0 commit comments