7 个版本 ()

3.1.8-2-2fcda2023年11月29日
0.2.4 2023年1月27日
0.2.3 2022年9月26日
0.2.2 2021年9月3日
0.1.0 2021年1月28日

#1 in #高可用性

每月 21 次下载

MIT/Apache

315KB
9K SLoC

rust-corosync

corosync 的 Rust 绑定

Rust 绑定 cfg、cmap、cpg、quorum、votequorum 是此源树的一部分,但主要包含在这里是为了保持所有 corosync API 在一个地方,并确保所有内容都在我们的 CI 系统中得到更新和适当的测试。

获取 corosync 的 Rust 软件包的正确位置仍然是 crates.io,就像其他软件包一样。这些将在我们发布新的 corosync 版本时更新。

https://crates.io/crates/rust-corosync

当然,如果您想尝试 API 中可能尚未发布的任何新功能,则可以尝试这些源代码,但请通过电子邮件或 IRC 与我们保持联系。

libera IRC 上的 #clusterlabs 或 #kronosnet [email protected]


lib.rs:

此软件包提供了从 Rust 访问 corosync 库 cpg、cfg、cmap、quorum 及 votequorum 的权限。它们在真正的 API 调用周围是一个相当薄的一层,但带有 Rust 数据类型和迭代器。

Corosync 是高可用性集群的低级集群服务提供程序,有关 corosync 的更多信息,请参阅 https://corosync.github.io/corosync/

此处不会提供有关 corosync 本身的更多信息,预期如果您觉得需要访问 Corosync API 调用,您就知道它们的作用 :)

示例

extern crate rust_corosync as corosync;
use corosync::cmap;

fn main()
{
    // Open connection to corosync libcmap
    let handle =
    match cmap::initialize(cmap::Map::Icmap) {
        Ok(h) => {
            println!("cmap initialized.");
            h
        }
        Err(e) => {
            println!("Error in CMAP (Icmap) init: {}", e);
            return;
        }
    };

    // Set a numeric value (this is a generic fn)
    match cmap::set_number(handle, "test.test_uint32", 456)
    {
        Ok(_) => {}
        Err(e) => {
            println!("Error in CMAP set_u32: {}", e);
            return;
        }
    };

    // Get a value - this will be a Data struct
    match cmap::get(handle, "test.test_uint32")
    {
        Ok(v) => {
            println!("GOT value {}", v);
        }
        Err(e) => {
            println!("Error in CMAP get: {}", e);
            return;
        }
    };

    // Use an iterator
    match cmap::CmapIterStart::new(handle, "totem.") {
        Ok(cmap_iter) => {
            for i in cmap_iter {
                println!("ITER: {:?}", i);
            }
            println!("");
        }
        Err(e) => {
            println!("Error in CMAP iter start: {}", e);
        }
    }

    // Close this connection
    match cmap::finalize(handle)
    {
        Ok(_) => {}
        Err(e) => {
            println!("Error in CMAP get: {}", e);
            return;
        }
    };
}

依赖项

~1.5MB
~37K SLoC