#slurm #hpc #cluster #plugin #plugin-api #error-message #spank

slurm-spank

对Slurm SPANK API的安全Rust绑定

6个版本

0.3.0 2024年4月20日
0.2.4 2023年10月22日
0.2.3 2023年3月21日

#10 in #slurm

MIT/Apache

100KB
2K SLoC

crates.io docs.rs

slurm-spank-rs

用于编写Slurm SPANK插件的Rust绑定


lib.rs:

用于编写Slurm SPANK插件的Rust绑定

简介

这个crate允许使用Rust编写Slurm SPANK插件。要了解通过SPANK可用的功能,请参阅官方的SPANK文档

要使用此crate创建SPANK插件,您需要定义一个结构体,为其实现Plugin特质,并使用SPANK_PLUGIN!宏使其可作为SPANK插件使用。

Plugin特质的方针对应于由SPANK API定义的回调,如init_post_opttask_post_fork等。这些方法具有默认实现,这意味着您只需实现与您的插件相关的回调。

每个回调方法都传递一个SpankHandle引用,允许通过SPANK API与Slurm交互。

当从回调返回一个[Err]时,默认情况下将显示错误消息并将其记录,具体取决于上下文。此行为可以通过report_error方法覆盖。还配置了默认的Subscriber,以方便在使用SPANK日志功能(如以下示例所示)时使用tracing crate进行日志记录和错误报告。这可以通过setup方法覆盖。

示例:hello.so

以下示例实现了一个简单的hello world插件。更完整的示例可在仓库的示例目录中找到,展示了如何实现与Slurm中C SPANK API示例相同的renice插件。

以下Cargo.toml可用于构建此示例插件

 [package]
 name = "slurm-spank-hello"
 version = "0.1.0"
 edition = "2021"

 [lib]
 crate-type = ["cdylib"]

 [dependencies]
 eyre = "0.6.8"
 slurm-spank = "0.3"
 tracing = "0.1.37"

依赖项

~5.5–8.5MB
~144K SLoC