├── .dockerignore
├── docs
├── ceph
│ ├── sidebar-items.js
│ └── index.html
├── FiraSans-Medium.woff
├── FiraSans-Regular.woff
├── Heuristica-Italic.woff
├── SourceSerifPro-Bold.woff
├── SourceCodePro-Regular.woff
├── SourceCodePro-Semibold.woff
├── SourceSerifPro-Regular.woff
├── ceph_rust
│ ├── utils
│ │ ├── sidebar-items.js
│ │ ├── run_cli.v.html
│ │ └── run_args.v.html
│ ├── error
│ │ ├── sidebar-items.js
│ │ ├── RadosError.t.html
│ │ └── RadosResult.t.html
│ ├── sidebar-items.js
│ ├── JsonData.t.html
│ ├── json
│ │ ├── json_data.v.html
│ │ ├── json_find.v.html
│ │ ├── json_as_string.v.html
│ │ └── sidebar-items.js
│ ├── rados
│ │ ├── rados_t.t.html
│ │ ├── AllocFlags.t.html
│ │ ├── XattrFlags.t.html
│ │ ├── rados_snap_t.t.html
│ │ ├── rados_ioctx_t.t.html
│ │ ├── rados_config_t.t.html
│ │ ├── OperationFlags.t.html
│ │ ├── rados_read_op_t.t.html
│ │ ├── rados_watchcb_t.t.html
│ │ ├── rados_callback_t.t.html
│ │ ├── rados_list_ctx_t.t.html
│ │ ├── rados_watchcb2_t.t.html
│ │ ├── rados_write_op_t.t.html
│ │ ├── rados_omap_iter_t.t.html
│ │ ├── rados_completion_t.t.html
│ │ ├── rados_watcherrcb_t.t.html
│ │ ├── rados_xattrs_iter_t.t.html
│ │ ├── rados_log_callback_t.t.html
│ │ ├── LIBRADOS_OP_FLAG_EXCL.v.html
│ │ ├── Struct_rados_pool_stat_t.t.html
│ │ ├── LIBRADOS_CMPXATTR_OP_EQ.v.html
│ │ ├── LIBRADOS_CMPXATTR_OP_GT.v.html
│ │ ├── LIBRADOS_CMPXATTR_OP_LT.v.html
│ │ ├── LIBRADOS_CMPXATTR_OP_NE.v.html
│ │ ├── LIBRADOS_OP_FLAG_FAILOK.v.html
│ │ ├── LIBRADOS_CMPXATTR_OP_GTE.v.html
│ │ ├── LIBRADOS_CMPXATTR_OP_LTE.v.html
│ │ ├── LIBRADOS_OPERATION_NOFLAG.v.html
│ │ ├── Struct_rados_cluster_stat_t.t.html
│ │ ├── LIBRADOS_OPERATION_SKIPRWLOCKS.v.html
│ │ ├── LIBRADOS_OPERATION_IGNORE_CACHE.v.html
│ │ ├── LIBRADOS_OP_FLAG_FADVISE_RANDOM.v.html
│ │ ├── LIBRADOS_OPERATION_BALANCE_READS.v.html
│ │ ├── LIBRADOS_OP_FLAG_FADVISE_NOCACHE.v.html
│ │ ├── LIBRADOS_OPERATION_IGNORE_OVERLAY.v.html
│ │ ├── LIBRADOS_OPERATION_LOCALIZE_READS.v.html
│ │ ├── LIBRADOS_OP_FLAG_FADVISE_DONTNEED.v.html
│ │ ├── LIBRADOS_OP_FLAG_FADVISE_WILLNEED.v.html
│ │ ├── LIBRADOS_OP_FLAG_FADVISE_SEQUENTIAL.v.html
│ │ ├── LIBRADOS_OPERATION_ORDER_READS_WRITES.v.html
│ │ ├── sidebar-items.js
│ │ ├── type.rados_snap_t.html
│ │ ├── constant.LIBRADOS_OP_FLAG_EXCL.html
│ │ ├── constant.LIBRADOS_CMPXATTR_OP_EQ.html
│ │ ├── constant.LIBRADOS_CMPXATTR_OP_GT.html
│ │ ├── constant.LIBRADOS_CMPXATTR_OP_LT.html
│ │ ├── constant.LIBRADOS_CMPXATTR_OP_NE.html
│ │ ├── constant.LIBRADOS_OP_FLAG_FAILOK.html
│ │ ├── constant.LIBRADOS_CMPXATTR_OP_GTE.html
│ │ ├── constant.LIBRADOS_CMPXATTR_OP_LTE.html
│ │ ├── type.rados_t.html
│ │ └── constant.LIBRADOS_OPERATION_NOFLAG.html
│ ├── JsonValue.t.html
│ ├── status
│ │ ├── CephStatus.t.html
│ │ ├── CephStatusPGMap.t.html
│ │ ├── CephStatusHealth.t.html
│ │ ├── CephStatusMDSMap.t.html
│ │ ├── CephStatusMonMap.t.html
│ │ ├── CephStatusHealth2.t.html
│ │ ├── CephStatusMDSRank.t.html
│ │ ├── CephStatusMonRank.t.html
│ │ ├── CephStatusOSDMapH.t.html
│ │ ├── CephStatusOSDMapL.t.html
│ │ ├── CephStatusPGState.t.html
│ │ ├── CephStatusHealthMons.t.html
│ │ ├── CephStatusHealthDetail.t.html
│ │ ├── CephStatusHealthSummary.t.html
│ │ ├── CephStatusHealthServices.t.html
│ │ ├── CephStatusHealthTimeChecks.t.html
│ │ ├── CephStatusHealthServicesMon.t.html
│ │ ├── CephStatusHealthServicesMonStats.t.html
│ │ └── sidebar-items.js
│ ├── type.JsonData.html
│ └── type.JsonValue.html
├── implementors
│ ├── core
│ │ ├── fmt
│ │ │ ├── trait.Display.js
│ │ │ └── trait.Debug.js
│ │ ├── default
│ │ │ └── trait.Default.js
│ │ ├── cmp
│ │ │ ├── trait.Eq.js
│ │ │ ├── trait.Ord.js
│ │ │ ├── trait.PartialEq.js
│ │ │ └── trait.PartialOrd.js
│ │ ├── ops
│ │ │ ├── trait.Not.js
│ │ │ ├── trait.Sub.js
│ │ │ ├── trait.BitOr.js
│ │ │ ├── trait.BitAnd.js
│ │ │ ├── trait.BitXor.js
│ │ │ ├── trait.SubAssign.js
│ │ │ ├── trait.BitOrAssign.js
│ │ │ ├── trait.BitAndAssign.js
│ │ │ └── trait.BitXorAssign.js
│ │ ├── hash
│ │ │ └── trait.Hash.js
│ │ ├── iter
│ │ │ └── traits
│ │ │ │ ├── trait.Extend.js
│ │ │ │ └── trait.FromIterator.js
│ │ ├── marker
│ │ │ └── trait.Copy.js
│ │ ├── clone
│ │ │ └── trait.Clone.js
│ │ └── convert
│ │ │ └── trait.From.js
│ └── std
│ │ └── error
│ │ └── trait.Error.js
├── LICENSE-MIT.txt
├── normalize.css
├── COPYRIGHT.txt
├── SourceSerifPro-LICENSE.txt
├── SourceCodePro-LICENSE.txt
└── FiraSans-LICENSE.txt
├── .gitignore
├── rust-toolchain.toml
├── setup-micro-osd.sh
├── entrypoint.sh
├── examples
├── status.rs
└── rados_striper.rs
├── tests
├── mon_status-hammer
├── mon_status-jewel
├── osd_tree-hammer
├── osd_tree-jewel
├── ceph_health-jewel
├── integration_tests.rs
└── mon_status-nautilus
├── .editorconfig
├── Makefile
├── gen_docs.sh
├── src
├── utils.rs
├── mon_command.rs
├── json.rs
├── admin_sockets.rs
├── lib.rs
├── ceph_version.rs
└── status.rs
├── Cargo.toml
├── Dockerfile
├── .github
└── workflows
│ └── ci.yml
├── micro-osd.sh
├── sample_files
├── ceph_admin_socket_client_commands.json
├── ceph_admin_socket_mon_commands.json
└── ceph_status_format_json.json
└── README.md
/.dockerignore:
--------------------------------------------------------------------------------
1 | /target
2 |
--------------------------------------------------------------------------------
/docs/ceph/sidebar-items.js:
--------------------------------------------------------------------------------
1 | initSidebarItems({});
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | target
2 | **/*.rs.bk
3 | Cargo.lock
4 | vscode.code-workspace
5 | .build-docker
6 |
--------------------------------------------------------------------------------
/rust-toolchain.toml:
--------------------------------------------------------------------------------
1 | [toolchain]
2 | channel = "stable"
3 | components = ["rustfmt", "clippy"]
4 |
--------------------------------------------------------------------------------
/docs/FiraSans-Medium.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ceph/ceph-rust/HEAD/docs/FiraSans-Medium.woff
--------------------------------------------------------------------------------
/docs/FiraSans-Regular.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ceph/ceph-rust/HEAD/docs/FiraSans-Regular.woff
--------------------------------------------------------------------------------
/docs/Heuristica-Italic.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ceph/ceph-rust/HEAD/docs/Heuristica-Italic.woff
--------------------------------------------------------------------------------
/docs/SourceSerifPro-Bold.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ceph/ceph-rust/HEAD/docs/SourceSerifPro-Bold.woff
--------------------------------------------------------------------------------
/docs/SourceCodePro-Regular.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ceph/ceph-rust/HEAD/docs/SourceCodePro-Regular.woff
--------------------------------------------------------------------------------
/docs/SourceCodePro-Semibold.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ceph/ceph-rust/HEAD/docs/SourceCodePro-Semibold.woff
--------------------------------------------------------------------------------
/docs/SourceSerifPro-Regular.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ceph/ceph-rust/HEAD/docs/SourceSerifPro-Regular.woff
--------------------------------------------------------------------------------
/docs/ceph_rust/utils/sidebar-items.js:
--------------------------------------------------------------------------------
1 | initSidebarItems({"fn":[["run_cli","run_cli - pass in a String of a normal command line"]]});
--------------------------------------------------------------------------------
/docs/ceph_rust/error/sidebar-items.js:
--------------------------------------------------------------------------------
1 | initSidebarItems({"enum":[["RadosError","Custom error handling for the library"]],"type":[["RadosResult",""]]});
--------------------------------------------------------------------------------
/docs/ceph_rust/sidebar-items.js:
--------------------------------------------------------------------------------
1 | initSidebarItems({"mod":[["error",""],["json",""],["rados",""],["status",""],["utils",""]],"type":[["JsonData",""],["JsonValue",""]]});
--------------------------------------------------------------------------------
/setup-micro-osd.sh:
--------------------------------------------------------------------------------
1 | #!/bin/bash
2 |
3 | set -e
4 |
5 | rm -rf /tmp/ceph
6 | mkdir /tmp/ceph
7 | /micro-osd.sh /tmp/ceph
8 | export CEPH_CONF=/tmp/ceph/ceph.conf
9 |
10 | set +e
11 |
--------------------------------------------------------------------------------
/entrypoint.sh:
--------------------------------------------------------------------------------
1 | #!/bin/bash
2 |
3 | . /setup-micro-osd.sh
4 |
5 | set -e
6 |
7 | cargo test --features rados_striper
8 |
9 | cargo run --features rados_striper --example rados_striper
10 |
--------------------------------------------------------------------------------
/examples/status.rs:
--------------------------------------------------------------------------------
1 | extern crate ceph;
2 |
3 | use ceph::CephClient;
4 |
5 | pub fn main() {
6 | let ceph_client = CephClient::new("admin", "/etc/ceph/ceph.conf").unwrap();
7 | println!("Status: {}", ceph_client.status().unwrap());
8 | }
9 |
--------------------------------------------------------------------------------
/docs/ceph_rust/utils/run_cli.v.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | Redirecting to fn.run_cli.html ...
8 |
9 |
10 |
--------------------------------------------------------------------------------
/docs/ceph_rust/utils/run_args.v.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | Redirecting to fn.run_args.html ...
8 |
9 |
10 |
--------------------------------------------------------------------------------
/docs/ceph_rust/JsonData.t.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | Redirecting to type.JsonData.html ...
8 |
9 |
10 |
--------------------------------------------------------------------------------
/docs/ceph_rust/json/json_data.v.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | Redirecting to fn.json_data.html ...
8 |
9 |
10 |
--------------------------------------------------------------------------------
/docs/ceph_rust/json/json_find.v.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | Redirecting to fn.json_find.html ...
8 |
9 |
10 |
--------------------------------------------------------------------------------
/docs/ceph_rust/rados/rados_t.t.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | Redirecting to type.rados_t.html ...
8 |
9 |
10 |
--------------------------------------------------------------------------------
/docs/ceph_rust/JsonValue.t.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | Redirecting to type.JsonValue.html ...
8 |
9 |
10 |
--------------------------------------------------------------------------------
/docs/ceph_rust/error/RadosError.t.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | Redirecting to enum.RadosError.html ...
8 |
9 |
10 |
--------------------------------------------------------------------------------
/docs/ceph_rust/error/RadosResult.t.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | Redirecting to type.RadosResult.html ...
8 |
9 |
10 |
--------------------------------------------------------------------------------
/docs/ceph_rust/rados/AllocFlags.t.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | Redirecting to struct.AllocFlags.html ...
8 |
9 |
10 |
--------------------------------------------------------------------------------
/docs/ceph_rust/rados/XattrFlags.t.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | Redirecting to struct.XattrFlags.html ...
8 |
9 |
10 |
--------------------------------------------------------------------------------
/docs/ceph_rust/json/json_as_string.v.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | Redirecting to fn.json_as_string.html ...
8 |
9 |
10 |
--------------------------------------------------------------------------------
/docs/ceph_rust/rados/rados_snap_t.t.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | Redirecting to type.rados_snap_t.html ...
8 |
9 |
10 |
--------------------------------------------------------------------------------
/docs/ceph_rust/status/CephStatus.t.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | Redirecting to struct.CephStatus.html ...
8 |
9 |
10 |
--------------------------------------------------------------------------------
/docs/ceph_rust/rados/rados_ioctx_t.t.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | Redirecting to type.rados_ioctx_t.html ...
8 |
9 |
10 |
--------------------------------------------------------------------------------
/docs/ceph_rust/rados/rados_config_t.t.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | Redirecting to type.rados_config_t.html ...
8 |
9 |
10 |
--------------------------------------------------------------------------------
/docs/ceph_rust/rados/OperationFlags.t.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | Redirecting to struct.OperationFlags.html ...
8 |
9 |
10 |
--------------------------------------------------------------------------------
/docs/ceph_rust/rados/rados_read_op_t.t.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | Redirecting to type.rados_read_op_t.html ...
8 |
9 |
10 |
--------------------------------------------------------------------------------
/docs/ceph_rust/rados/rados_watchcb_t.t.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | Redirecting to type.rados_watchcb_t.html ...
8 |
9 |
10 |
--------------------------------------------------------------------------------
/docs/ceph_rust/rados/rados_callback_t.t.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | Redirecting to type.rados_callback_t.html ...
8 |
9 |
10 |
--------------------------------------------------------------------------------
/docs/ceph_rust/rados/rados_list_ctx_t.t.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | Redirecting to type.rados_list_ctx_t.html ...
8 |
9 |
10 |
--------------------------------------------------------------------------------
/docs/ceph_rust/rados/rados_watchcb2_t.t.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | Redirecting to type.rados_watchcb2_t.html ...
8 |
9 |
10 |
--------------------------------------------------------------------------------
/docs/ceph_rust/rados/rados_write_op_t.t.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | Redirecting to type.rados_write_op_t.html ...
8 |
9 |
10 |
--------------------------------------------------------------------------------
/docs/ceph_rust/rados/rados_omap_iter_t.t.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | Redirecting to type.rados_omap_iter_t.html ...
8 |
9 |
10 |
--------------------------------------------------------------------------------
/docs/ceph_rust/status/CephStatusPGMap.t.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | Redirecting to struct.CephStatusPGMap.html ...
8 |
9 |
10 |
--------------------------------------------------------------------------------
/docs/ceph_rust/rados/rados_completion_t.t.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | Redirecting to type.rados_completion_t.html ...
8 |
9 |
10 |
--------------------------------------------------------------------------------
/docs/ceph_rust/rados/rados_watcherrcb_t.t.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | Redirecting to type.rados_watcherrcb_t.html ...
8 |
9 |
10 |
--------------------------------------------------------------------------------
/docs/ceph_rust/status/CephStatusHealth.t.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | Redirecting to struct.CephStatusHealth.html ...
8 |
9 |
10 |
--------------------------------------------------------------------------------
/docs/ceph_rust/status/CephStatusMDSMap.t.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | Redirecting to struct.CephStatusMDSMap.html ...
8 |
9 |
10 |
--------------------------------------------------------------------------------
/docs/ceph_rust/status/CephStatusMonMap.t.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | Redirecting to struct.CephStatusMonMap.html ...
8 |
9 |
10 |
--------------------------------------------------------------------------------
/docs/ceph_rust/rados/rados_xattrs_iter_t.t.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | Redirecting to type.rados_xattrs_iter_t.html ...
8 |
9 |
10 |
--------------------------------------------------------------------------------
/docs/ceph_rust/status/CephStatusHealth2.t.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | Redirecting to struct.CephStatusHealth2.html ...
8 |
9 |
10 |
--------------------------------------------------------------------------------
/docs/ceph_rust/status/CephStatusMDSRank.t.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | Redirecting to struct.CephStatusMDSRank.html ...
8 |
9 |
10 |
--------------------------------------------------------------------------------
/docs/ceph_rust/status/CephStatusMonRank.t.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | Redirecting to struct.CephStatusMonRank.html ...
8 |
9 |
10 |
--------------------------------------------------------------------------------
/docs/ceph_rust/status/CephStatusOSDMapH.t.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | Redirecting to struct.CephStatusOSDMapH.html ...
8 |
9 |
10 |
--------------------------------------------------------------------------------
/docs/ceph_rust/status/CephStatusOSDMapL.t.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | Redirecting to struct.CephStatusOSDMapL.html ...
8 |
9 |
10 |
--------------------------------------------------------------------------------
/docs/ceph_rust/status/CephStatusPGState.t.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | Redirecting to struct.CephStatusPGState.html ...
8 |
9 |
10 |
--------------------------------------------------------------------------------
/docs/ceph_rust/rados/rados_log_callback_t.t.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | Redirecting to type.rados_log_callback_t.html ...
8 |
9 |
10 |
--------------------------------------------------------------------------------
/docs/ceph_rust/status/CephStatusHealthMons.t.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | Redirecting to struct.CephStatusHealthMons.html ...
8 |
9 |
10 |
--------------------------------------------------------------------------------
/docs/ceph_rust/rados/LIBRADOS_OP_FLAG_EXCL.v.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | Redirecting to constant.LIBRADOS_OP_FLAG_EXCL.html ...
8 |
9 |
10 |
--------------------------------------------------------------------------------
/docs/ceph_rust/status/CephStatusHealthDetail.t.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | Redirecting to struct.CephStatusHealthDetail.html ...
8 |
9 |
10 |
--------------------------------------------------------------------------------
/docs/ceph_rust/rados/Struct_rados_pool_stat_t.t.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | Redirecting to struct.Struct_rados_pool_stat_t.html ...
8 |
9 |
10 |
--------------------------------------------------------------------------------
/docs/ceph_rust/status/CephStatusHealthSummary.t.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | Redirecting to struct.CephStatusHealthSummary.html ...
8 |
9 |
10 |
--------------------------------------------------------------------------------
/tests/mon_status-hammer:
--------------------------------------------------------------------------------
1 | {"name":"ceph02","rank":0,"state":"leader","election_epoch":22,"quorum":[0,1,2],"outside_quorum":[],"extra_probe_peers":[],"sync_provider":[],"monmap":{"epoch":2,"fsid":"ebec4dc1-3b8a-46d2-a2b6-69491a79ac8b","modified":"2017-11-24 09:05:18.428304","created":"0.000000","mons":[{"rank":0,"name":"ceph02","addr":"182.168.1.176:6789\/0"},{"rank":1,"name":"ceph01","addr":"182.168.1.177:6789\/0"},{"rank":2,"name":"ceph03","addr":"182.168.1.209:6789\/0"}]}}
2 |
--------------------------------------------------------------------------------
/docs/ceph_rust/rados/LIBRADOS_CMPXATTR_OP_EQ.v.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | Redirecting to constant.LIBRADOS_CMPXATTR_OP_EQ.html ...
8 |
9 |
10 |
--------------------------------------------------------------------------------
/docs/ceph_rust/rados/LIBRADOS_CMPXATTR_OP_GT.v.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | Redirecting to constant.LIBRADOS_CMPXATTR_OP_GT.html ...
8 |
9 |
10 |
--------------------------------------------------------------------------------
/docs/ceph_rust/rados/LIBRADOS_CMPXATTR_OP_LT.v.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | Redirecting to constant.LIBRADOS_CMPXATTR_OP_LT.html ...
8 |
9 |
10 |
--------------------------------------------------------------------------------
/docs/ceph_rust/rados/LIBRADOS_CMPXATTR_OP_NE.v.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | Redirecting to constant.LIBRADOS_CMPXATTR_OP_NE.html ...
8 |
9 |
10 |
--------------------------------------------------------------------------------
/docs/ceph_rust/rados/LIBRADOS_OP_FLAG_FAILOK.v.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | Redirecting to constant.LIBRADOS_OP_FLAG_FAILOK.html ...
8 |
9 |
10 |
--------------------------------------------------------------------------------
/docs/ceph_rust/status/CephStatusHealthServices.t.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | Redirecting to struct.CephStatusHealthServices.html ...
8 |
9 |
10 |
--------------------------------------------------------------------------------
/docs/ceph_rust/rados/LIBRADOS_CMPXATTR_OP_GTE.v.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | Redirecting to constant.LIBRADOS_CMPXATTR_OP_GTE.html ...
8 |
9 |
10 |
--------------------------------------------------------------------------------
/docs/ceph_rust/rados/LIBRADOS_CMPXATTR_OP_LTE.v.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | Redirecting to constant.LIBRADOS_CMPXATTR_OP_LTE.html ...
8 |
9 |
10 |
--------------------------------------------------------------------------------
/docs/ceph_rust/rados/LIBRADOS_OPERATION_NOFLAG.v.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | Redirecting to constant.LIBRADOS_OPERATION_NOFLAG.html ...
8 |
9 |
10 |
--------------------------------------------------------------------------------
/docs/ceph_rust/rados/Struct_rados_cluster_stat_t.t.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | Redirecting to struct.Struct_rados_cluster_stat_t.html ...
8 |
9 |
10 |
--------------------------------------------------------------------------------
/docs/ceph_rust/status/CephStatusHealthTimeChecks.t.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | Redirecting to struct.CephStatusHealthTimeChecks.html ...
8 |
9 |
10 |
--------------------------------------------------------------------------------
/tests/mon_status-jewel:
--------------------------------------------------------------------------------
1 | {"name":"ceph03","rank":2,"state":"peon","election_epoch":24,"quorum":[0,1,2],"outside_quorum":[],"extra_probe_peers":[],"sync_provider":[],"monmap":{"epoch":2,"fsid":"e4f16f95-413f-484e-a646-76cbf9c6b996","modified":"2017-11-16 15:22:11.240181","created":"2017-11-16 15:21:57.138295","mons":[{"rank":0,"name":"ceph02","addr":"182.168.1.176:6789\/0"},{"rank":1,"name":"ceph01","addr":"182.168.1.177:6789\/0"},{"rank":2,"name":"ceph03","addr":"182.168.1.209:6789\/0"}]}}
2 |
--------------------------------------------------------------------------------
/docs/ceph_rust/status/CephStatusHealthServicesMon.t.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | Redirecting to struct.CephStatusHealthServicesMon.html ...
8 |
9 |
10 |
--------------------------------------------------------------------------------
/.editorconfig:
--------------------------------------------------------------------------------
1 | # NOTE: If using Atom then install the EditorConfig plugin. Go to editorconfig.org.
2 |
3 | root = true
4 |
5 | [*]
6 | indent_style = space
7 | indent_size = 4
8 | end_of_line = lf
9 | charset = utf-8
10 | trim_trailing_whitespace = true
11 | insert_final_newline = true
12 |
13 | # 4 space indentation
14 | [*.py]
15 | indent_size = 4
16 |
17 | # Tab indentation (no size specified)
18 | [Makefile]
19 | indent_style = tab
20 |
21 | [*.md]
22 | trim_trailing_whitespace = false
23 |
--------------------------------------------------------------------------------
/docs/ceph_rust/rados/LIBRADOS_OPERATION_SKIPRWLOCKS.v.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | Redirecting to constant.LIBRADOS_OPERATION_SKIPRWLOCKS.html ...
8 |
9 |
10 |
--------------------------------------------------------------------------------
/docs/ceph_rust/rados/LIBRADOS_OPERATION_IGNORE_CACHE.v.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | Redirecting to constant.LIBRADOS_OPERATION_IGNORE_CACHE.html ...
8 |
9 |
10 |
--------------------------------------------------------------------------------
/docs/ceph_rust/rados/LIBRADOS_OP_FLAG_FADVISE_RANDOM.v.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | Redirecting to constant.LIBRADOS_OP_FLAG_FADVISE_RANDOM.html ...
8 |
9 |
10 |
--------------------------------------------------------------------------------
/docs/ceph_rust/status/CephStatusHealthServicesMonStats.t.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | Redirecting to struct.CephStatusHealthServicesMonStats.html ...
8 |
9 |
10 |
--------------------------------------------------------------------------------
/docs/ceph_rust/rados/LIBRADOS_OPERATION_BALANCE_READS.v.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | Redirecting to constant.LIBRADOS_OPERATION_BALANCE_READS.html ...
8 |
9 |
10 |
--------------------------------------------------------------------------------
/docs/ceph_rust/rados/LIBRADOS_OP_FLAG_FADVISE_NOCACHE.v.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | Redirecting to constant.LIBRADOS_OP_FLAG_FADVISE_NOCACHE.html ...
8 |
9 |
10 |
--------------------------------------------------------------------------------
/docs/ceph_rust/rados/LIBRADOS_OPERATION_IGNORE_OVERLAY.v.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | Redirecting to constant.LIBRADOS_OPERATION_IGNORE_OVERLAY.html ...
8 |
9 |
10 |
--------------------------------------------------------------------------------
/docs/ceph_rust/rados/LIBRADOS_OPERATION_LOCALIZE_READS.v.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | Redirecting to constant.LIBRADOS_OPERATION_LOCALIZE_READS.html ...
8 |
9 |
10 |
--------------------------------------------------------------------------------
/docs/ceph_rust/rados/LIBRADOS_OP_FLAG_FADVISE_DONTNEED.v.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | Redirecting to constant.LIBRADOS_OP_FLAG_FADVISE_DONTNEED.html ...
8 |
9 |
10 |
--------------------------------------------------------------------------------
/docs/ceph_rust/rados/LIBRADOS_OP_FLAG_FADVISE_WILLNEED.v.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | Redirecting to constant.LIBRADOS_OP_FLAG_FADVISE_WILLNEED.html ...
8 |
9 |
10 |
--------------------------------------------------------------------------------
/docs/ceph_rust/rados/LIBRADOS_OP_FLAG_FADVISE_SEQUENTIAL.v.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | Redirecting to constant.LIBRADOS_OP_FLAG_FADVISE_SEQUENTIAL.html ...
8 |
9 |
10 |
--------------------------------------------------------------------------------
/docs/ceph_rust/json/sidebar-items.js:
--------------------------------------------------------------------------------
1 | initSidebarItems({"fn":[["json_as_string","More specific String cast of an individual JsonData object."],["json_data","First json call that takes a JSON formatted string and converts it to JsonData object that can then be traversed using `json_find` via the key path."],["json_find","Looks for the parent object first and then the 'child' object. If the parent object is None then it only looks for the 'child' object. The parent object is used for situations where there may be 'child' objects with the same name."]]});
--------------------------------------------------------------------------------
/docs/ceph_rust/rados/LIBRADOS_OPERATION_ORDER_READS_WRITES.v.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | Redirecting to constant.LIBRADOS_OPERATION_ORDER_READS_WRITES.html ...
8 |
9 |
10 |
--------------------------------------------------------------------------------
/docs/ceph_rust/status/sidebar-items.js:
--------------------------------------------------------------------------------
1 | initSidebarItems({"struct":[["CephStatus",""],["CephStatusHealth",""],["CephStatusHealth2",""],["CephStatusHealthDetail",""],["CephStatusHealthMons",""],["CephStatusHealthServices",""],["CephStatusHealthServicesMon",""],["CephStatusHealthServicesMonStats",""],["CephStatusHealthSummary",""],["CephStatusHealthTimeChecks",""],["CephStatusMDSMap",""],["CephStatusMDSRank",""],["CephStatusMonMap",""],["CephStatusMonRank",""],["CephStatusOSDMapH",""],["CephStatusOSDMapL",""],["CephStatusPGMap",""],["CephStatusPGState",""]]});
--------------------------------------------------------------------------------
/Makefile:
--------------------------------------------------------------------------------
1 | DOCKER_CI_IMAGE = ceph-rust-ci
2 |
3 | build:
4 | cargo build
5 | fmt:
6 | cargo fmt
7 | test:
8 | cargo test
9 |
10 | test-docker: .build-docker
11 | docker run --rm -it -v $(CURDIR):/ceph-rust $(DOCKER_CI_IMAGE)
12 |
13 | shell-docker: .build-docker
14 | docker run --rm -it -v $(CURDIR):/ceph-rust $(DOCKER_CI_IMAGE) bash
15 | # Now you can run
16 | # . /setup-micro-osd.sh
17 | # cargo build
18 |
19 | .build-docker:
20 | docker build -t $(DOCKER_CI_IMAGE) .
21 | @docker inspect -f '{{.Id}}' $(DOCKER_CI_IMAGE) > .build-docker
22 |
--------------------------------------------------------------------------------
/docs/implementors/core/fmt/trait.Display.js:
--------------------------------------------------------------------------------
1 | (function() {var implementors = {};
2 | implementors["ceph_rust"] = ["impl Display for RadosError ",];
3 |
4 | if (window.register_implementors) {
5 | window.register_implementors(implementors);
6 | } else {
7 | window.pending_implementors = implementors;
8 | }
9 |
10 | })()
11 |
--------------------------------------------------------------------------------
/docs/implementors/std/error/trait.Error.js:
--------------------------------------------------------------------------------
1 | (function() {var implementors = {};
2 | implementors["ceph_rust"] = ["impl StdError for RadosError ",];
3 |
4 | if (window.register_implementors) {
5 | window.register_implementors(implementors);
6 | } else {
7 | window.pending_implementors = implementors;
8 | }
9 |
10 | })()
11 |
--------------------------------------------------------------------------------
/gen_docs.sh:
--------------------------------------------------------------------------------
1 | #!/bin/sh
2 | #
3 | # Copyright 2016 LambdaStack All rights reserved.
4 | #
5 | # Licensed under the Apache License, Version 2.0 (the "License");
6 | # you may not use this file except in compliance with the License.
7 | # You may obtain a copy of the License at
8 | #
9 | # http://www.apache.org/licenses/LICENSE-2.0
10 | #
11 | # Unless required by applicable law or agreed to in writing, software
12 | # distributed under the License is distributed on an "AS IS" BASIS,
13 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 | # See the License for the specific language governing permissions and
15 | # limitations under the License.
16 |
17 | cargo doc --no-deps
18 | rm -rf docs/
19 | mkdir docs
20 | cp -r target/doc/* docs/
21 |
--------------------------------------------------------------------------------
/tests/osd_tree-hammer:
--------------------------------------------------------------------------------
1 | {"nodes":[{"id":-1,"name":"default","type":"root","type_id":10,"children":[-4,-3,-2]},{"id":-2,"name":"ceph01","type":"host","type_id":1,"children":[0]},{"id":0,"name":"osd.0","type":"osd","type_id":0,"crush_weight":1.000000,"depth":2,"exists":1,"status":"up","reweight":1.000000,"primary_affinity":1.000000},{"id":-3,"name":"ceph02","type":"host","type_id":1,"children":[1]},{"id":1,"name":"osd.1","type":"osd","type_id":0,"crush_weight":1.000000,"depth":2,"exists":1,"status":"up","reweight":1.000000,"primary_affinity":1.000000},{"id":-4,"name":"ceph03","type":"host","type_id":1,"children":[2]},{"id":2,"name":"osd.2","type":"osd","type_id":0,"crush_weight":1.000000,"depth":2,"exists":1,"status":"up","reweight":1.000000,"primary_affinity":1.000000}],"stray":[]}
2 |
--------------------------------------------------------------------------------
/tests/osd_tree-jewel:
--------------------------------------------------------------------------------
1 | {"nodes":[{"id":-1,"name":"default","type":"root","type_id":10,"children":[-4,-3,-2]},{"id":-2,"name":"ceph01","type":"host","type_id":1,"children":[0]},{"id":0,"name":"osd.0","type":"osd","type_id":0,"crush_weight":0.014587,"depth":2,"exists":1,"status":"up","reweight":1.000000,"primary_affinity":1.000000},{"id":-3,"name":"ceph02","type":"host","type_id":1,"children":[1]},{"id":1,"name":"osd.1","type":"osd","type_id":0,"crush_weight":0.014587,"depth":2,"exists":1,"status":"up","reweight":1.000000,"primary_affinity":1.000000},{"id":-4,"name":"ceph03","type":"host","type_id":1,"children":[2]},{"id":2,"name":"osd.2","type":"osd","type_id":0,"crush_weight":0.014587,"depth":2,"exists":1,"status":"up","reweight":1.000000,"primary_affinity":1.000000}],"stray":[]}
2 |
--------------------------------------------------------------------------------
/docs/implementors/core/default/trait.Default.js:
--------------------------------------------------------------------------------
1 | (function() {var implementors = {};
2 | implementors["ceph_rust"] = ["impl Default for Struct_rados_pool_stat_t ","impl Default for Struct_rados_cluster_stat_t ",];
3 |
4 | if (window.register_implementors) {
5 | window.register_implementors(implementors);
6 | } else {
7 | window.pending_implementors = implementors;
8 | }
9 |
10 | })()
11 |
--------------------------------------------------------------------------------
/docs/LICENSE-MIT.txt:
--------------------------------------------------------------------------------
1 | Permission is hereby granted, free of charge, to any
2 | person obtaining a copy of this software and associated
3 | documentation files (the "Software"), to deal in the
4 | Software without restriction, including without
5 | limitation the rights to use, copy, modify, merge,
6 | publish, distribute, sublicense, and/or sell copies of
7 | the Software, and to permit persons to whom the Software
8 | is furnished to do so, subject to the following
9 | conditions:
10 |
11 | The above copyright notice and this permission notice
12 | shall be included in all copies or substantial portions
13 | of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF
16 | ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED
17 | TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
18 | PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT
19 | SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
20 | CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21 | OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR
22 | IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
23 | DEALINGS IN THE SOFTWARE.
24 |
--------------------------------------------------------------------------------
/docs/implementors/core/cmp/trait.Eq.js:
--------------------------------------------------------------------------------
1 | (function() {var implementors = {};
2 | implementors["ceph_rust"] = ["impl Eq for AllocFlags ","impl Eq for XattrFlags ","impl Eq for OperationFlags ",];
3 |
4 | if (window.register_implementors) {
5 | window.register_implementors(implementors);
6 | } else {
7 | window.pending_implementors = implementors;
8 | }
9 |
10 | })()
11 |
--------------------------------------------------------------------------------
/docs/implementors/core/cmp/trait.Ord.js:
--------------------------------------------------------------------------------
1 | (function() {var implementors = {};
2 | implementors["ceph_rust"] = ["impl Ord for AllocFlags ","impl Ord for XattrFlags ","impl Ord for OperationFlags ",];
3 |
4 | if (window.register_implementors) {
5 | window.register_implementors(implementors);
6 | } else {
7 | window.pending_implementors = implementors;
8 | }
9 |
10 | })()
11 |
--------------------------------------------------------------------------------
/docs/implementors/core/ops/trait.Not.js:
--------------------------------------------------------------------------------
1 | (function() {var implementors = {};
2 | implementors["ceph_rust"] = ["impl Not for AllocFlags ","impl Not for XattrFlags ","impl Not for OperationFlags ",];
3 |
4 | if (window.register_implementors) {
5 | window.register_implementors(implementors);
6 | } else {
7 | window.pending_implementors = implementors;
8 | }
9 |
10 | })()
11 |
--------------------------------------------------------------------------------
/docs/implementors/core/ops/trait.Sub.js:
--------------------------------------------------------------------------------
1 | (function() {var implementors = {};
2 | implementors["ceph_rust"] = ["impl Sub for AllocFlags ","impl Sub for XattrFlags ","impl Sub for OperationFlags ",];
3 |
4 | if (window.register_implementors) {
5 | window.register_implementors(implementors);
6 | } else {
7 | window.pending_implementors = implementors;
8 | }
9 |
10 | })()
11 |
--------------------------------------------------------------------------------
/docs/implementors/core/hash/trait.Hash.js:
--------------------------------------------------------------------------------
1 | (function() {var implementors = {};
2 | implementors["ceph_rust"] = ["impl Hash for AllocFlags ","impl Hash for XattrFlags ","impl Hash for OperationFlags ",];
3 |
4 | if (window.register_implementors) {
5 | window.register_implementors(implementors);
6 | } else {
7 | window.pending_implementors = implementors;
8 | }
9 |
10 | })()
11 |
--------------------------------------------------------------------------------
/docs/implementors/core/ops/trait.BitOr.js:
--------------------------------------------------------------------------------
1 | (function() {var implementors = {};
2 | implementors["ceph_rust"] = ["impl BitOr for AllocFlags ","impl BitOr for XattrFlags ","impl BitOr for OperationFlags ",];
3 |
4 | if (window.register_implementors) {
5 | window.register_implementors(implementors);
6 | } else {
7 | window.pending_implementors = implementors;
8 | }
9 |
10 | })()
11 |
--------------------------------------------------------------------------------
/docs/implementors/core/ops/trait.BitAnd.js:
--------------------------------------------------------------------------------
1 | (function() {var implementors = {};
2 | implementors["ceph_rust"] = ["impl BitAnd for AllocFlags ","impl BitAnd for XattrFlags ","impl BitAnd for OperationFlags ",];
3 |
4 | if (window.register_implementors) {
5 | window.register_implementors(implementors);
6 | } else {
7 | window.pending_implementors = implementors;
8 | }
9 |
10 | })()
11 |
--------------------------------------------------------------------------------
/docs/implementors/core/ops/trait.BitXor.js:
--------------------------------------------------------------------------------
1 | (function() {var implementors = {};
2 | implementors["ceph_rust"] = ["impl BitXor for AllocFlags ","impl BitXor for XattrFlags ","impl BitXor for OperationFlags ",];
3 |
4 | if (window.register_implementors) {
5 | window.register_implementors(implementors);
6 | } else {
7 | window.pending_implementors = implementors;
8 | }
9 |
10 | })()
11 |
--------------------------------------------------------------------------------
/docs/implementors/core/cmp/trait.PartialEq.js:
--------------------------------------------------------------------------------
1 | (function() {var implementors = {};
2 | implementors["ceph_rust"] = ["impl PartialEq for AllocFlags ","impl PartialEq for XattrFlags ","impl PartialEq for OperationFlags ",];
3 |
4 | if (window.register_implementors) {
5 | window.register_implementors(implementors);
6 | } else {
7 | window.pending_implementors = implementors;
8 | }
9 |
10 | })()
11 |
--------------------------------------------------------------------------------
/docs/implementors/core/ops/trait.SubAssign.js:
--------------------------------------------------------------------------------
1 | (function() {var implementors = {};
2 | implementors["ceph_rust"] = ["impl SubAssign for AllocFlags ","impl SubAssign for XattrFlags ","impl SubAssign for OperationFlags ",];
3 |
4 | if (window.register_implementors) {
5 | window.register_implementors(implementors);
6 | } else {
7 | window.pending_implementors = implementors;
8 | }
9 |
10 | })()
11 |
--------------------------------------------------------------------------------
/docs/implementors/core/cmp/trait.PartialOrd.js:
--------------------------------------------------------------------------------
1 | (function() {var implementors = {};
2 | implementors["ceph_rust"] = ["impl PartialOrd for AllocFlags ","impl PartialOrd for XattrFlags ","impl PartialOrd for OperationFlags ",];
3 |
4 | if (window.register_implementors) {
5 | window.register_implementors(implementors);
6 | } else {
7 | window.pending_implementors = implementors;
8 | }
9 |
10 | })()
11 |
--------------------------------------------------------------------------------
/docs/implementors/core/ops/trait.BitOrAssign.js:
--------------------------------------------------------------------------------
1 | (function() {var implementors = {};
2 | implementors["ceph_rust"] = ["impl BitOrAssign for AllocFlags ","impl BitOrAssign for XattrFlags ","impl BitOrAssign for OperationFlags ",];
3 |
4 | if (window.register_implementors) {
5 | window.register_implementors(implementors);
6 | } else {
7 | window.pending_implementors = implementors;
8 | }
9 |
10 | })()
11 |
--------------------------------------------------------------------------------
/tests/ceph_health-jewel:
--------------------------------------------------------------------------------
1 | {"health":{"health_services":[{"mons":[{"name":"ceph02","kb_total":19478204,"kb_used":3221192,"kb_avail":15244532,"avail_percent":78,"last_updated":"2017-11-28 09:40:17.893062","store_stats":{"bytes_total":15697550,"bytes_sst":0,"bytes_log":642962,"bytes_misc":15054588,"last_updated":"0.000000"},"health":"HEALTH_OK"},{"name":"ceph01","kb_total":19478204,"kb_used":3218720,"kb_avail":15247004,"avail_percent":78,"last_updated":"2017-11-28 09:39:32.586626","store_stats":{"bytes_total":16022093,"bytes_sst":0,"bytes_log":964810,"bytes_misc":15057283,"last_updated":"0.000000"},"health":"HEALTH_OK"},{"name":"ceph03","kb_total":19478204,"kb_used":3213940,"kb_avail":15251784,"avail_percent":78,"last_updated":"2017-11-28 09:39:47.820551","store_stats":{"bytes_total":16021442,"bytes_sst":0,"bytes_log":964810,"bytes_misc":15056632,"last_updated":"0.000000"},"health":"HEALTH_OK"}]}]},"timechecks":{"epoch":30,"round":58,"round_status":"finished","mons":[{"name":"ceph02","skew":0.000000,"latency":0.000000,"health":"HEALTH_OK"},{"name":"ceph01","skew":-0.002781,"latency":0.001351,"health":"HEALTH_OK"},{"name":"ceph03","skew":0.000000,"latency":0.001239,"health":"HEALTH_OK"}]},"summary":[],"overall_status":"HEALTH_OK","detail":[]}
2 |
--------------------------------------------------------------------------------
/docs/implementors/core/ops/trait.BitAndAssign.js:
--------------------------------------------------------------------------------
1 | (function() {var implementors = {};
2 | implementors["ceph_rust"] = ["impl BitAndAssign for AllocFlags ","impl BitAndAssign for XattrFlags ","impl BitAndAssign for OperationFlags ",];
3 |
4 | if (window.register_implementors) {
5 | window.register_implementors(implementors);
6 | } else {
7 | window.pending_implementors = implementors;
8 | }
9 |
10 | })()
11 |
--------------------------------------------------------------------------------
/docs/implementors/core/ops/trait.BitXorAssign.js:
--------------------------------------------------------------------------------
1 | (function() {var implementors = {};
2 | implementors["ceph_rust"] = ["impl BitXorAssign for AllocFlags ","impl BitXorAssign for XattrFlags ","impl BitXorAssign for OperationFlags ",];
3 |
4 | if (window.register_implementors) {
5 | window.register_implementors(implementors);
6 | } else {
7 | window.pending_implementors = implementors;
8 | }
9 |
10 | })()
11 |
--------------------------------------------------------------------------------
/docs/ceph_rust/rados/sidebar-items.js:
--------------------------------------------------------------------------------
1 | initSidebarItems({"constant":[["LIBRADOS_CMPXATTR_OP_EQ",""],["LIBRADOS_CMPXATTR_OP_GT",""],["LIBRADOS_CMPXATTR_OP_GTE",""],["LIBRADOS_CMPXATTR_OP_LT",""],["LIBRADOS_CMPXATTR_OP_LTE",""],["LIBRADOS_CMPXATTR_OP_NE",""],["LIBRADOS_OPERATION_BALANCE_READS",""],["LIBRADOS_OPERATION_IGNORE_CACHE",""],["LIBRADOS_OPERATION_IGNORE_OVERLAY",""],["LIBRADOS_OPERATION_LOCALIZE_READS",""],["LIBRADOS_OPERATION_NOFLAG",""],["LIBRADOS_OPERATION_ORDER_READS_WRITES",""],["LIBRADOS_OPERATION_SKIPRWLOCKS",""],["LIBRADOS_OP_FLAG_EXCL",""],["LIBRADOS_OP_FLAG_FADVISE_DONTNEED",""],["LIBRADOS_OP_FLAG_FADVISE_NOCACHE",""],["LIBRADOS_OP_FLAG_FADVISE_RANDOM",""],["LIBRADOS_OP_FLAG_FADVISE_SEQUENTIAL",""],["LIBRADOS_OP_FLAG_FADVISE_WILLNEED",""],["LIBRADOS_OP_FLAG_FAILOK",""]],"struct":[["AllocFlags",""],["OperationFlags",""],["Struct_rados_cluster_stat_t",""],["Struct_rados_pool_stat_t",""],["XattrFlags",""]],"type":[["rados_callback_t",""],["rados_completion_t",""],["rados_config_t",""],["rados_ioctx_t",""],["rados_list_ctx_t",""],["rados_log_callback_t",""],["rados_omap_iter_t",""],["rados_read_op_t",""],["rados_snap_t",""],["rados_t",""],["rados_watchcb2_t",""],["rados_watchcb_t",""],["rados_watcherrcb_t",""],["rados_write_op_t",""],["rados_xattrs_iter_t",""]]});
--------------------------------------------------------------------------------
/src/utils.rs:
--------------------------------------------------------------------------------
1 | // Copyright 2017 LambdaStack All rights reserved.
2 | //
3 | // Licensed under the Apache License, Version 2.0 (the "License");
4 | // you may not use this file except in compliance with the License.
5 | // You may obtain a copy of the License at
6 | //
7 | // http://www.apache.org/licenses/LICENSE-2.0
8 | //
9 | // Unless required by applicable law or agreed to in writing, software
10 | // distributed under the License is distributed on an "AS IS" BASIS,
11 | // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 | // See the License for the specific language governing permissions and
13 | // limitations under the License.
14 |
15 | use std::io::Result;
16 |
17 | use std::process::{Command, Output};
18 |
19 | /// run_cli - pass in a String of a normal command line
20 | ///
21 | /// The function will split the options into words to supply to the low_level
22 | /// std::process::Command
23 | /// which returns Result<(Output)>
24 | /// # Example
25 | ///
26 | /// ```
27 | /// use ceph::utils::run_cli;
28 | /// run_cli("ps aux");
29 | /// ```
30 |
31 | // NOTE: Add Into so a "" can also be passed in...
32 | pub fn run_cli(cmd_line: &str) -> Result {
33 | let output = Command::new("sh").arg("-c").arg(cmd_line).output()?;
34 | Ok(output)
35 | }
36 |
--------------------------------------------------------------------------------
/docs/implementors/core/iter/traits/trait.Extend.js:
--------------------------------------------------------------------------------
1 | (function() {var implementors = {};
2 | implementors["ceph_rust"] = ["impl Extend <AllocFlags > for AllocFlags ","impl Extend <XattrFlags > for XattrFlags ","impl Extend <OperationFlags > for OperationFlags ",];
3 |
4 | if (window.register_implementors) {
5 | window.register_implementors(implementors);
6 | } else {
7 | window.pending_implementors = implementors;
8 | }
9 |
10 | })()
11 |
--------------------------------------------------------------------------------
/Cargo.toml:
--------------------------------------------------------------------------------
1 | [package]
2 | name = "ceph"
3 | version = "3.2.5"
4 | authors = [
5 | "Chris Jones ",
6 | "Chris Holcombe ",
7 | "Chris MacNaughton ",
8 | ]
9 | license = "Apache-2.0"
10 | readme = "README.md"
11 |
12 | # This is a list of up to five keywords that describe this crate. Keywords
13 | # are searchable on crates.io, and you may choose any words that would
14 | # help someone find this crate.
15 | keywords = ["ceph", "storage"]
16 |
17 | # This is a list of up to five categories where this crate would fit.
18 | # Categories are a fixed list available at crates.io/category_slugs, and
19 | # they must match exactly.
20 | categories = ["filesystem"]
21 |
22 | documentation = "https://docs.rs/ceph"
23 | repository = "https://github.com/ceph/ceph-rust"
24 | homepage = "https://github.com/ceph/ceph-rust"
25 |
26 | description = """
27 | Official Ceph-rust. A rust-lang specific interface to Ceph librados and Admin Sockets. You can create a Ceph development environment with the
28 | Chef automation tools: https://github.com/bloomberg/chef-bcs or with ceph-ansible. Chef-bcs uses the ceph-chef cookbook
29 | created and manage at github.com/ceph/ceph-chef. It will build out a full Ceph environment which you can then use
30 | for development etc. See README.md for details.
31 | """
32 | edition = "2018"
33 |
34 | [dependencies]
35 | bitflags = "1.2.1"
36 | byteorder = "1"
37 | libc = "~0.2"
38 | nom = "6"
39 | serde_derive = "1"
40 | serde = "1"
41 | serde_json = "1"
42 | uuid = { version = "~0.8", features = ["serde"] }
43 | nix = "0.29"
44 | tracing = "0.1"
45 |
46 | [features]
47 | default = []
48 | rados_striper = []
49 |
--------------------------------------------------------------------------------
/docs/implementors/core/iter/traits/trait.FromIterator.js:
--------------------------------------------------------------------------------
1 | (function() {var implementors = {};
2 | implementors["ceph_rust"] = ["impl FromIterator <AllocFlags > for AllocFlags ","impl FromIterator <XattrFlags > for XattrFlags ","impl FromIterator <OperationFlags > for OperationFlags ",];
3 |
4 | if (window.register_implementors) {
5 | window.register_implementors(implementors);
6 | } else {
7 | window.pending_implementors = implementors;
8 | }
9 |
10 | })()
11 |
--------------------------------------------------------------------------------
/docs/implementors/core/marker/trait.Copy.js:
--------------------------------------------------------------------------------
1 | (function() {var implementors = {};
2 | implementors["ceph_rust"] = ["impl Copy for AllocFlags ","impl Copy for XattrFlags ","impl Copy for OperationFlags ","impl Copy for Struct_rados_pool_stat_t ","impl Copy for Struct_rados_cluster_stat_t ",];
3 |
4 | if (window.register_implementors) {
5 | window.register_implementors(implementors);
6 | } else {
7 | window.pending_implementors = implementors;
8 | }
9 |
10 | })()
11 |
--------------------------------------------------------------------------------
/src/mon_command.rs:
--------------------------------------------------------------------------------
1 | use std::collections::HashMap;
2 |
3 | use serde_json;
4 |
5 | #[cfg(test)]
6 | mod tests {
7 | use super::*;
8 |
9 | #[test]
10 | fn it_builds_a_mon_command() {
11 | let command = MonCommand::new()
12 | .with_prefix("osd set")
13 | .with("key", "osdout");
14 |
15 | let actual: HashMap = serde_json::from_str(&command.as_json()).unwrap();
16 | let expected: HashMap =
17 | serde_json::from_str(r#"{"prefix":"osd set","format":"json","key":"osdout"}"#).unwrap();
18 |
19 | assert_eq!(expected, actual);
20 | }
21 | }
22 |
23 | pub struct MonCommand<'a> {
24 | map: HashMap<&'a str, &'a str>,
25 | }
26 |
27 | impl<'a> Default for MonCommand<'a> {
28 | fn default() -> Self {
29 | MonCommand {
30 | map: {
31 | let mut map = HashMap::new();
32 | map.insert("format", "json");
33 | map
34 | },
35 | }
36 | }
37 | }
38 |
39 | impl<'a> MonCommand<'a> {
40 | pub fn new() -> MonCommand<'a> {
41 | MonCommand::default()
42 | }
43 |
44 | pub fn with_format(self, format: &'a str) -> MonCommand<'a> {
45 | self.with("format", format)
46 | }
47 |
48 | pub fn with_name(self, name: &'a str) -> MonCommand<'a> {
49 | self.with("name", name)
50 | }
51 |
52 | pub fn with_prefix(self, prefix: &'a str) -> MonCommand<'a> {
53 | self.with("prefix", prefix)
54 | }
55 |
56 | pub fn with(mut self, name: &'a str, value: &'a str) -> MonCommand<'a> {
57 | self.map.insert(name, value);
58 | self
59 | }
60 |
61 | pub fn as_json(&self) -> String {
62 | serde_json::to_string(&self.map).unwrap()
63 | }
64 | }
65 |
--------------------------------------------------------------------------------
/docs/implementors/core/clone/trait.Clone.js:
--------------------------------------------------------------------------------
1 | (function() {var implementors = {};
2 | implementors["ceph_rust"] = ["impl Clone for AllocFlags ","impl Clone for XattrFlags ","impl Clone for OperationFlags ","impl Clone for Struct_rados_pool_stat_t ","impl Clone for Struct_rados_cluster_stat_t ",];
3 |
4 | if (window.register_implementors) {
5 | window.register_implementors(implementors);
6 | } else {
7 | window.pending_implementors = implementors;
8 | }
9 |
10 | })()
11 |
--------------------------------------------------------------------------------
/Dockerfile:
--------------------------------------------------------------------------------
1 | FROM buildpack-deps:focal
2 |
3 | ENV RUSTUP_HOME=/usr/local/rustup \
4 | CARGO_HOME=/usr/local/cargo \
5 | PATH=/usr/local/cargo/bin:$PATH \
6 | RUST_VERSION=1.46.0
7 |
8 | RUN set -eux; \
9 | dpkgArch="$(dpkg --print-architecture)"; \
10 | case "${dpkgArch##*-}" in \
11 | amd64) rustArch='x86_64-unknown-linux-gnu';; \
12 | armhf) rustArch='armv7-unknown-linux-gnueabihf';; \
13 | arm64) rustArch='aarch64-unknown-linux-gnu';; \
14 | i386) rustArch='i686-unknown-linux-gnu';; \
15 | *) echo >&2 "unsupported architecture: ${dpkgArch}"; exit 1 ;; \
16 | esac; \
17 | url="https://static.rust-lang.org/rustup/archive/1.22.1/${rustArch}/rustup-init"; \
18 | wget "$url"; \
19 | wget "$url.sha256"; \
20 | sed -i 's/target.*/rustup-init/g' rustup-init.sha256; \
21 | sha256sum -c rustup-init.sha256; \
22 | chmod +x rustup-init; \
23 | ./rustup-init -y --no-modify-path --default-toolchain $RUST_VERSION; \
24 | rm rustup-init; \
25 | chmod -R a+w $RUSTUP_HOME $CARGO_HOME; \
26 | rustup --version; \
27 | cargo --version; \
28 | rustc --version;
29 |
30 | RUN apt-get update \
31 | && apt-get install apt-transport-https \
32 | && wget -q -O- 'https://download.ceph.com/keys/release.asc' | apt-key add - \
33 | && echo "deb https://download.ceph.com/debian-octopus/ focal main" > /etc/apt/sources.list.d/ceph.list \
34 | && apt-get update \
35 | && apt-get install -y --no-install-recommends \
36 | uuid-runtime \
37 | ceph-mgr ceph-mon ceph-osd ceph-mds \
38 | librados-dev libradosstriper-dev
39 |
40 | # update crates.io index
41 | RUN cargo search --limit 0
42 |
43 | WORKDIR /ceph-rust
44 |
45 | COPY micro-osd.sh /
46 | COPY setup-micro-osd.sh /
47 | COPY entrypoint.sh /
48 |
49 | CMD /entrypoint.sh
50 |
--------------------------------------------------------------------------------
/src/json.rs:
--------------------------------------------------------------------------------
1 | // Copyright 2017 LambdaStack All rights reserved.
2 | //
3 | // Licensed under the Apache License, Version 2.0 (the "License");
4 | // you may not use this file except in compliance with the License.
5 | // You may obtain a copy of the License at
6 | //
7 | // http://www.apache.org/licenses/LICENSE-2.0
8 | //
9 | // Unless required by applicable law or agreed to in writing, software
10 | // distributed under the License is distributed on an "AS IS" BASIS,
11 | // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 | // See the License for the specific language governing permissions and
13 | // limitations under the License.
14 |
15 | use std::str;
16 |
17 | use serde_json;
18 |
19 | use crate::JsonData;
20 | // use JsonValue;
21 |
22 | /// First json call that takes a JSON formatted string and converts it to
23 | /// JsonData object that can then be traversed using `json_find` via the key
24 | /// path.
25 | pub fn json_data(json_str: &str) -> Option {
26 | match serde_json::from_str(json_str) {
27 | Ok(json_data) => Some(json_data),
28 | Err(_) => None,
29 | }
30 | }
31 |
32 | /// Looks for the parent object first and then the 'child' object. If the
33 | /// parent object is None then it only looks for the 'child' object. The parent
34 | /// object is used for situations where there may be 'child' objects with the
35 | /// same name.
36 | pub fn json_find(json_data: JsonData, keys: &[&str]) -> Option {
37 | let mut value = json_data;
38 | for key in keys {
39 | match value.get(key) {
40 | Some(v) => value = v.clone(),
41 | None => return None,
42 | }
43 | }
44 |
45 | Some(value)
46 | }
47 |
48 | /// More specific String cast of an individual JsonData object.
49 | pub fn json_as_string(json_data: &JsonData) -> String {
50 | json_data.to_string()
51 | }
52 |
--------------------------------------------------------------------------------
/docs/normalize.css:
--------------------------------------------------------------------------------
1 | /*! normalize.css v3.0.0 | MIT License | git.io/normalize */html{font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}body{margin:0}article,aside,details,figcaption,figure,footer,header,hgroup,main,nav,section,summary{display:block}audio,canvas,progress,video{display:inline-block;vertical-align:baseline}audio:not([controls]){display:none;height:0}[hidden],template{display:none}a{background:transparent}a:active,a:hover{outline:0}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:bold}dfn{font-style:italic}h1{font-size:2em;margin:.67em 0}mark{background:#ff0;color:#000}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sup{top:-0.5em}sub{bottom:-0.25em}img{border:0}svg:not(:root){overflow:hidden}figure{margin:1em 40px}hr{-moz-box-sizing:content-box;box-sizing:content-box;height:0}pre{overflow:auto}code,kbd,pre,samp{font-family:monospace,monospace;font-size:1em}button,input,optgroup,select,textarea{color:inherit;font:inherit;margin:0}button{overflow:visible}button,select{text-transform:none}button,html input[type="button"],input[type="reset"],input[type="submit"]{-webkit-appearance:button;cursor:pointer}button[disabled],html input[disabled]{cursor:default}button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}input{line-height:normal}input[type="checkbox"],input[type="radio"]{box-sizing:border-box;padding:0}input[type="number"]::-webkit-inner-spin-button,input[type="number"]::-webkit-outer-spin-button{height:auto}input[type="search"]{-webkit-appearance:textfield;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;box-sizing:content-box}input[type="search"]::-webkit-search-cancel-button,input[type="search"]::-webkit-search-decoration{-webkit-appearance:none}fieldset{border:1px solid silver;margin:0 2px;padding:.35em .625em .75em}legend{border:0;padding:0}textarea{overflow:auto}optgroup{font-weight:bold}table{border-collapse:collapse;border-spacing:0}td,th{padding:0}
2 |
--------------------------------------------------------------------------------
/docs/implementors/core/fmt/trait.Debug.js:
--------------------------------------------------------------------------------
1 | (function() {var implementors = {};
2 | implementors["ceph_rust"] = ["impl Debug for AllocFlags ","impl Debug for XattrFlags ","impl Debug for OperationFlags ","impl Debug for Struct_rados_pool_stat_t ","impl Debug for Struct_rados_cluster_stat_t ","impl Debug for RadosError ",];
3 |
4 | if (window.register_implementors) {
5 | window.register_implementors(implementors);
6 | } else {
7 | window.pending_implementors = implementors;
8 | }
9 |
10 | })()
11 |
--------------------------------------------------------------------------------
/.github/workflows/ci.yml:
--------------------------------------------------------------------------------
1 | name: CI
2 |
3 | on:
4 | pull_request:
5 | branches:
6 | - master
7 | push:
8 | branches:
9 | - master
10 |
11 | env:
12 | RUSTFLAGS: -Dwarnings
13 |
14 | jobs:
15 | build_and_test:
16 | name: Build and test
17 | runs-on: ${{ matrix.os }}
18 | strategy:
19 | matrix:
20 | os: [ubuntu-latest]
21 | rust: [nightly, beta, stable]
22 |
23 | steps:
24 | - uses: actions/checkout@v4
25 |
26 | - name: Install ${{ matrix.rust }}
27 | run: rustup install ${{ matrix.rust }}
28 |
29 | - name: Install Ceph
30 | run: |
31 | sudo apt-get update
32 | sudo apt-get install -y apt-transport-https
33 | wget -q -O- 'https://download.ceph.com/keys/release.asc' | sudo apt-key add -
34 | echo "deb https://download.ceph.com/debian-octopus/ focal main" | sudo tee /etc/apt/sources.list.d/ceph.list
35 | sudo apt-get update -y
36 | sudo apt-get install -y --no-install-recommends uuid-runtime ceph-mgr ceph-mon ceph-osd ceph-mds librados-dev libradosstriper-dev
37 |
38 | - name: check
39 | run: cargo check --all-targets
40 |
41 | - name: check rados_striper
42 | run: cargo check --features rados_striper --all-targets
43 |
44 | - name: tests
45 | run: cargo test --all-targets
46 |
47 | cross:
48 | name: Cross compile
49 | runs-on: ubuntu-latest
50 | strategy:
51 | matrix:
52 | target:
53 | - i686-unknown-linux-gnu
54 | - armv7-unknown-linux-gnueabihf
55 | - aarch64-unknown-linux-gnu
56 |
57 | steps:
58 | - uses: actions/checkout@v4
59 |
60 | - name: Install nightly
61 | run: rustup install nightly
62 |
63 | - name: Install cross
64 | run: cargo install cross
65 |
66 | - name: check
67 | run: cross check --all --target ${{ matrix.target }}
68 |
69 | check_fmt_and_docs:
70 | name: Checking fmt and docs
71 | runs-on: ubuntu-latest
72 | steps:
73 | - uses: actions/checkout@v4
74 | - name: fmt
75 | run: cargo fmt --all -- --check
76 |
--------------------------------------------------------------------------------
/docs/implementors/core/convert/trait.From.js:
--------------------------------------------------------------------------------
1 | (function() {var implementors = {};
2 | implementors["ceph_rust"] = ["impl From <ParseError > for RadosError ","impl From <NulError > for RadosError ","impl From <FromUtf8Error > for RadosError ","impl From <IntoStringError > for RadosError ","impl From <Error > for RadosError ",];
3 |
4 | if (window.register_implementors) {
5 | window.register_implementors(implementors);
6 | } else {
7 | window.pending_implementors = implementors;
8 | }
9 |
10 | })()
11 |
--------------------------------------------------------------------------------
/examples/rados_striper.rs:
--------------------------------------------------------------------------------
1 | #[cfg(feature = "rados_striper")]
2 | use {
3 | ceph::ceph as ceph_helpers,
4 | ceph::error::{Errno, RadosError},
5 | std::env,
6 | std::str,
7 | std::sync::Arc,
8 | };
9 |
10 | #[cfg(not(feature = "rados_striper"))]
11 | fn main() {}
12 |
13 | #[cfg(feature = "rados_striper")]
14 | fn main() {
15 | let user_id = "admin";
16 | let config_file = env::var("CEPH_CONF").unwrap_or("/etc/ceph/ceph.conf".to_string());
17 | let pool_name = "ceph-rust-test";
18 |
19 | println!("Connecting to ceph");
20 | let cluster = Arc::new(ceph_helpers::connect_to_ceph(user_id, &config_file).unwrap());
21 |
22 | println!("Creating pool {}", pool_name);
23 | match cluster.rados_create_pool(pool_name) {
24 | Ok(_) => {}
25 | Err(RadosError::ApiError(Errno::EEXIST)) => {
26 | cluster.rados_delete_pool(pool_name).unwrap();
27 | cluster.rados_create_pool(pool_name).unwrap();
28 | }
29 | Err(err) => panic!("{:?}", err),
30 | }
31 |
32 | let object_name = "ceph-rust-test-object";
33 |
34 | {
35 | println!("Creating ioctx");
36 | let ioctx = cluster.get_rados_ioctx(pool_name).unwrap();
37 |
38 | println!("Creating rados striper");
39 | let rados_striper = ioctx.get_rados_striper().unwrap();
40 |
41 | println!("Writing test object");
42 | rados_striper
43 | .rados_object_write(object_name, "lorem".as_bytes(), 0)
44 | .unwrap();
45 | rados_striper
46 | .rados_object_write(object_name, " ipsum".as_bytes(), 5)
47 | .unwrap();
48 | }
49 |
50 | {
51 | println!("Creating ioctx");
52 | let ioctx = cluster.get_rados_ioctx(pool_name).unwrap();
53 |
54 | println!("Creating rados striper");
55 | let rados_striper = ioctx.get_rados_striper().unwrap();
56 |
57 | println!("Getting test object stat");
58 | let (size, _) = rados_striper.rados_object_stat(object_name).unwrap();
59 |
60 | let mut read_buf = vec![0; size as usize];
61 |
62 | println!("Reading test object");
63 | rados_striper
64 | .rados_object_read(object_name, &mut read_buf, 0)
65 | .unwrap();
66 |
67 | let read_buf_str = str::from_utf8(&read_buf).unwrap();
68 |
69 | assert_eq!(read_buf_str, "lorem ipsum");
70 | }
71 |
72 | println!("Deleting pool {}", pool_name);
73 | cluster.rados_delete_pool(pool_name).unwrap();
74 | }
75 |
--------------------------------------------------------------------------------
/tests/integration_tests.rs:
--------------------------------------------------------------------------------
1 | extern crate ceph;
2 | extern crate serde;
3 | extern crate serde_json;
4 |
5 | use ceph::cmd::{ClusterHealth, CrushTree, MonStatus};
6 | use std::fs::File;
7 | use std::io::Read;
8 |
9 | #[test]
10 | fn test_ceph_health_jewel() {
11 | let json = {
12 | let mut buff = String::new();
13 | let mut f = File::open("tests/ceph_health-jewel").unwrap();
14 | f.read_to_string(&mut buff).unwrap();
15 | buff
16 | };
17 | let status: ClusterHealth = serde_json::from_str(&json).unwrap();
18 | println!("cluster_health: {:#?}", status);
19 | }
20 |
21 | #[test]
22 | fn test_mon_status_hammer() {
23 | let json = {
24 | let mut buff = String::new();
25 | let mut f = File::open("tests/mon_status-hammer").unwrap();
26 | f.read_to_string(&mut buff).unwrap();
27 | buff
28 | };
29 | let status: MonStatus = serde_json::from_str(&json).unwrap();
30 | println!("mon_status: {:#?}", status);
31 | }
32 |
33 | #[test]
34 | fn test_mon_status_jewel() {
35 | let json = {
36 | let mut buff = String::new();
37 | let mut f = File::open("tests/mon_status-jewel").unwrap();
38 | f.read_to_string(&mut buff).unwrap();
39 | buff
40 | };
41 | let status: MonStatus = serde_json::from_str(&json).unwrap();
42 | println!("mon_status: {:#?}", status);
43 | }
44 |
45 | #[test]
46 | fn test_mon_status_nautilus() {
47 | let json = {
48 | let mut buff = String::new();
49 | let mut f = File::open("tests/mon_status-nautilus").unwrap();
50 | f.read_to_string(&mut buff).unwrap();
51 | buff
52 | };
53 | let status: MonStatus = serde_json::from_str(&json).unwrap();
54 | println!("mon_status: {:#?}", status);
55 | }
56 |
57 | #[test]
58 | fn test_osd_tree_hammer() {
59 | let json = {
60 | let mut buff = String::new();
61 | let mut f = File::open("tests/osd_tree-hammer").unwrap();
62 | f.read_to_string(&mut buff).unwrap();
63 | buff
64 | };
65 | let tree: CrushTree = serde_json::from_str(&json).unwrap();
66 | println!("osd_tree: {:#?}", tree);
67 | }
68 |
69 | #[test]
70 | fn test_osd_tree_jewel() {
71 | let json = {
72 | let mut buff = String::new();
73 | let mut f = File::open("tests/osd_tree-jewel").unwrap();
74 | f.read_to_string(&mut buff).unwrap();
75 | buff
76 | };
77 | let tree: CrushTree = serde_json::from_str(&json).unwrap();
78 | println!("osd_tree: {:#?}", tree);
79 | }
80 |
--------------------------------------------------------------------------------
/src/admin_sockets.rs:
--------------------------------------------------------------------------------
1 | // Copyright 2017 LambdaStack All rights reserved.
2 | //
3 | // Licensed under the Apache License, Version 2.0 (the "License");
4 | // you may not use this file except in compliance with the License.
5 | // You may obtain a copy of the License at
6 | //
7 | // http://www.apache.org/licenses/LICENSE-2.0
8 | //
9 | // Unless required by applicable law or agreed to in writing, software
10 | // distributed under the License is distributed on an "AS IS" BASIS,
11 | // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 | // See the License for the specific language governing permissions and
13 | // limitations under the License.
14 |
15 | #![cfg(unix)]
16 |
17 | use byteorder::{BigEndian, ReadBytesExt};
18 |
19 | use crate::error::{RadosError, RadosResult};
20 | use std::io::{Cursor, Read, Write};
21 | use std::net::Shutdown;
22 | use std::os::unix::net::UnixStream;
23 | use std::str;
24 |
25 | /// This is a helper function that builds a raw command from the actual
26 | /// command. You just pass
27 | /// in a command like "help". The returned `String` will be a JSON String.
28 | pub fn admin_socket_command(cmd: &str, socket: &str) -> RadosResult {
29 | let raw_cmd = json!({
30 | "prefix": cmd,
31 | });
32 | admin_socket_raw_command(&raw_cmd.to_string(), socket)
33 | }
34 |
35 | /// This function supports a raw command in the format of something like:
36 | /// `{"prefix": "help"}`.
37 | /// The returned `String` will be a JSON String.
38 | #[allow(unused_variables)]
39 | pub fn admin_socket_raw_command(cmd: &str, socket: &str) -> RadosResult {
40 | let mut buffer = vec![0; 4]; // Should return 4 bytes with size or indicator.
41 | let cmd = &format!("{}\0", cmd); // Terminator so don't add one to commands.
42 |
43 | let mut stream = UnixStream::connect(socket)?;
44 | let wb = stream.write(cmd.as_bytes())?;
45 | let ret_val = stream.read(&mut buffer)?;
46 | if ret_val < 4 {
47 | stream.shutdown(Shutdown::Both)?;
48 | return Err(RadosError::new(
49 | "Admin socket: Invalid command or socket did not return any data".to_string(),
50 | ));
51 | }
52 | // The first 4 bytes are Big Endian unsigned int
53 | let mut rdr = Cursor::new(buffer);
54 | let len = rdr.read_u32::()?;
55 | let mut output_buffer = vec![0; len as usize];
56 | stream.read_exact(&mut output_buffer)?;
57 | stream.shutdown(Shutdown::Both)?;
58 |
59 | Ok(String::from_utf8_lossy(&output_buffer).into_owned())
60 | }
61 |
--------------------------------------------------------------------------------
/docs/COPYRIGHT.txt:
--------------------------------------------------------------------------------
1 | These documentation pages include resources by third parties. This copyright
2 | file applies only to those resources. The following third party resources are
3 | included, and carry their own copyright notices and license terms:
4 |
5 | * Fira Sans (FiraSans-Regular.woff, FiraSans-Medium.woff):
6 |
7 | Copyright (c) 2014, Mozilla Foundation https://mozilla.org/
8 | with Reserved Font Name Fira Sans.
9 |
10 | Copyright (c) 2014, Telefonica S.A.
11 |
12 | Licensed under the SIL Open Font License, Version 1.1.
13 | See FiraSans-LICENSE.txt.
14 |
15 | * Heuristica (Heuristica-Italic.woff):
16 |
17 | Copyright 1989, 1991 Adobe Systems Incorporated. All rights reserved.
18 | Utopia is either a registered trademark or trademark of Adobe Systems
19 | Incorporated in the United States and/or other countries. Used under
20 | license.
21 |
22 | Copyright 2006 Han The Thanh, Vntopia font family, http://vntex.sf.net
23 |
24 | Copyright (c) 2008-2012, Andrey V. Panov (panov@canopus.iacp.dvo.ru),
25 | with Reserved Font Name Heuristica.
26 |
27 | Licensed under the SIL Open Font License, Version 1.1.
28 | See Heuristica-LICENSE.txt.
29 |
30 | * rustdoc.css, main.js, and playpen.js:
31 |
32 | Copyright 2015 The Rust Developers.
33 | Licensed under the Apache License, Version 2.0 (see LICENSE-APACHE.txt) or
34 | the MIT license (LICENSE-MIT.txt) at your option.
35 |
36 | * normalize.css:
37 |
38 | Copyright (c) Nicolas Gallagher and Jonathan Neal.
39 | Licensed under the MIT license (see LICENSE-MIT.txt).
40 |
41 | * Source Code Pro (SourceCodePro-Regular.woff, SourceCodePro-Semibold.woff):
42 |
43 | Copyright 2010, 2012 Adobe Systems Incorporated (http://www.adobe.com/),
44 | with Reserved Font Name 'Source'. All Rights Reserved. Source is a trademark
45 | of Adobe Systems Incorporated in the United States and/or other countries.
46 |
47 | Licensed under the SIL Open Font License, Version 1.1.
48 | See SourceCodePro-LICENSE.txt.
49 |
50 | * Source Serif Pro (SourceSerifPro-Regular.woff, SourceSerifPro-Bold.woff):
51 |
52 | Copyright 2014 Adobe Systems Incorporated (http://www.adobe.com/), with
53 | Reserved Font Name 'Source'. All Rights Reserved. Source is a trademark of
54 | Adobe Systems Incorporated in the United States and/or other countries.
55 |
56 | Licensed under the SIL Open Font License, Version 1.1.
57 | See SourceSerifPro-LICENSE.txt.
58 |
59 | This copyright file is intended to be distributed with rustdoc output.
60 |
--------------------------------------------------------------------------------
/micro-osd.sh:
--------------------------------------------------------------------------------
1 | #
2 | # Copyright (C) 2013,2014 Loic Dachary
3 | #
4 | # This program is free software: you can redistribute it and/or modify
5 | # it under the terms of the GNU Affero General Public License as published by
6 | # the Free Software Foundation, either version 3 of the License, or
7 | # (at your option) any later version.
8 | #
9 | # This program is distributed in the hope that it will be useful,
10 | # but WITHOUT ANY WARRANTY; without even the implied warranty of
11 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 | # GNU Affero General Public License for more details.
13 | #
14 | # You should have received a copy of the GNU Affero General Public License
15 | # along with this program. If not, see .
16 | #
17 | set -e
18 | set -x
19 | set -u
20 |
21 | DIR=${1}
22 |
23 | # reset
24 | pkill ceph || true
25 | rm -rf ${DIR}/*
26 | LOG_DIR=${DIR}/log
27 | MON_DATA=${DIR}/mon
28 | MDS_DATA=${DIR}/mds
29 | MOUNTPT=${MDS_DATA}/mnt
30 | OSD_DATA=${DIR}/osd
31 | mkdir ${LOG_DIR} ${MON_DATA} ${OSD_DATA} ${MDS_DATA} ${MOUNTPT}
32 | MDS_NAME="Z"
33 | MON_NAME="a"
34 | MGR_NAME="x"
35 |
36 | # cluster wide parameters
37 | cat >> ${DIR}/ceph.conf < CephVersion::Jewel);
13 | }
14 |
15 | #[test]
16 | fn it_parses_jewel() {
17 | let version: CephVersion = "ceph version 10.2.9 (2ee413f77150c0f375ff6f10edd6c8f9c7d060d0)"
18 | .parse()
19 | .unwrap();
20 | assert_eq!(version, CephVersion::Jewel);
21 | }
22 | }
23 |
24 | #[non_exhaustive]
25 | #[derive(Copy, Clone, Debug, Eq, Ord, PartialEq, PartialOrd)]
26 | pub enum CephVersion {
27 | Argonaut,
28 | Bobtail,
29 | Cuttlefish,
30 | Dumpling,
31 | Emperor,
32 | Firefly,
33 | Giant,
34 | Hammer,
35 | Infernalis,
36 | Jewel,
37 | Kraken,
38 | Luminous,
39 | Mimic,
40 | Nautilus,
41 | Octopus,
42 | Pacific,
43 | Quincy,
44 | Reef,
45 | Squid,
46 | }
47 |
48 | impl FromStr for CephVersion {
49 | type Err = RadosError;
50 |
51 | /// Expects an input in the form that the `ceph --version` command, or the
52 | /// rados version commands give them:
53 | /// `ceph version 10.2.9 (2ee413f77150c0f375ff6f10edd6c8f9c7d060d0)`
54 | fn from_str(s: &str) -> Result {
55 | use crate::CephVersion::*;
56 | let mut parts = s.split(' ');
57 | if let (Some(_ceph), Some(_version), Some(version_str)) =
58 | (parts.next(), parts.next(), parts.next())
59 | {
60 | let mut version_parts = version_str.split('.');
61 | if let (Some(major), Some(minor), Some(_patch)) = (
62 | version_parts.next(),
63 | version_parts.next(),
64 | version_parts.next(),
65 | ) {
66 | match major {
67 | "19" => return Ok(Squid),
68 | "18" => return Ok(Reef),
69 | "17" => return Ok(Quincy),
70 | "16" => return Ok(Pacific),
71 | "15" => return Ok(Octopus),
72 | "14" => return Ok(Nautilus),
73 | "13" => return Ok(Mimic),
74 | "12" => return Ok(Luminous),
75 | "11" => return Ok(Kraken),
76 | "10" => return Ok(Jewel),
77 | "9" => return Ok(Infernalis),
78 | "0" => match minor {
79 | "94" => return Ok(Hammer),
80 | "97" => return Ok(Giant),
81 | "80" => return Ok(Firefly),
82 | "72" => return Ok(Emperor),
83 | "67" => return Ok(Dumpling),
84 | "61" => return Ok(Cuttlefish),
85 | "56" => return Ok(Bobtail),
86 | "48" => return Ok(Argonaut),
87 | _ => {}
88 | },
89 | _ => {}
90 | }
91 | }
92 | }
93 | Err(RadosError::Parse(s.into()))
94 | }
95 | }
96 |
--------------------------------------------------------------------------------
/sample_files/ceph_admin_socket_client_commands.json:
--------------------------------------------------------------------------------
1 | {
2 | "cmd000": {
3 | "sig": [
4 | "0"
5 | ],
6 | "help": ""
7 | },
8 | "cmd001": {
9 | "sig": [
10 | "1"
11 | ],
12 | "help": ""
13 | },
14 | "cmd002": {
15 | "sig": [
16 | "2"
17 | ],
18 | "help": ""
19 | },
20 | "cmd003": {
21 | "sig": [
22 | "config",
23 | "diff"
24 | ],
25 | "help": "dump diff of current config and default config"
26 | },
27 | "cmd004": {
28 | "sig": [
29 | "config",
30 | "get",
31 | {
32 | "name": "var",
33 | "type": "CephString"
34 | }
35 | ],
36 | "help": "config get : get the config value"
37 | },
38 | "cmd005": {
39 | "sig": [
40 | "config",
41 | "set",
42 | {
43 | "name": "var",
44 | "type": "CephString"
45 | },
46 | {
47 | "n": "N",
48 | "name": "val",
49 | "type": "CephString"
50 | }
51 | ],
52 | "help": "config set [ ...]: set a config variable"
53 | },
54 | "cmd006": {
55 | "sig": [
56 | "config",
57 | "show"
58 | ],
59 | "help": "dump current config settings"
60 | },
61 | "cmd007": {
62 | "sig": [
63 | "get_command_descriptions"
64 | ],
65 | "help": "list available commands"
66 | },
67 | "cmd008": {
68 | "sig": [
69 | "git_version"
70 | ],
71 | "help": "get git sha1"
72 | },
73 | "cmd009": {
74 | "sig": [
75 | "help"
76 | ],
77 | "help": "list available commands"
78 | },
79 | "cmd010": {
80 | "sig": [
81 | "log",
82 | "dump"
83 | ],
84 | "help": "dump recent log entries to log file"
85 | },
86 | "cmd011": {
87 | "sig": [
88 | "log",
89 | "flush"
90 | ],
91 | "help": "flush log entries to log file"
92 | },
93 | "cmd012": {
94 | "sig": [
95 | "log",
96 | "reopen"
97 | ],
98 | "help": "reopen log file"
99 | },
100 | "cmd013": {
101 | "sig": [
102 | "objecter_requests"
103 | ],
104 | "help": "show in-progress osd requests"
105 | },
106 | "cmd014": {
107 | "sig": [
108 | "perf",
109 | "dump",
110 | {
111 | "name": "logger",
112 | "req": "false",
113 | "type": "CephString"
114 | },
115 | {
116 | "name": "counter",
117 | "req": "false",
118 | "type": "CephString"
119 | }
120 | ],
121 | "help": "dump perfcounters value"
122 | },
123 | "cmd015": {
124 | "sig": [
125 | "perf",
126 | "reset",
127 | {
128 | "name": "var",
129 | "type": "CephString"
130 | }
131 | ],
132 | "help": "perf reset : perf reset all or one perfcounter name"
133 | },
134 | "cmd016": {
135 | "sig": [
136 | "perf",
137 | "schema"
138 | ],
139 | "help": "dump perfcounters schema"
140 | },
141 | "cmd017": {
142 | "sig": [
143 | "perfcounters_dump"
144 | ],
145 | "help": ""
146 | },
147 | "cmd018": {
148 | "sig": [
149 | "perfcounters_schema"
150 | ],
151 | "help": ""
152 | },
153 | "cmd019": {
154 | "sig": [
155 | "version"
156 | ],
157 | "help": "get ceph version"
158 | }
159 | }
160 |
--------------------------------------------------------------------------------
/docs/ceph/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 | ceph - Rust
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
26 |
27 |
28 |
29 |
33 |
34 |
35 |
43 |
44 |
45 |
52 |
53 |
54 |
55 |
56 |
57 |
58 |
Help
59 |
60 |
61 |
Keyboard Shortcuts
62 |
63 |
64 | ?
65 | Show this help dialog
66 | S
67 | Focus the search field
68 | ⇤
69 | Move up in search results
70 | ⇥
71 | Move down in search results
72 | ⏎
73 | Go to active search result
74 | +
75 | Collapse/expand all sections
76 |
77 |
78 |
79 |
80 |
Search Tricks
81 |
82 |
83 | Prefix searches with a type followed by a colon (e.g.
84 | fn:) to restrict the search to a given type.
85 |
86 |
87 |
88 | Accepted types are: fn, mod,
89 | struct, enum,
90 | trait, type, macro,
91 | and const.
92 |
93 |
94 |
95 | Search functions by type signature (e.g.
96 | vec -> usize or * -> vec)
97 |
98 |
99 |
100 |
101 |
102 |
103 |
104 |
108 |
109 |
110 |
111 |
112 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | ## Ceph Rust
2 | ### Official Ceph Rust interface
3 |
4 | [](https://github.com/ceph/ceph-rust/actions?query=workflow%3ACI)
5 | [](https://crates.io/crates/ceph)
6 | [](https://join.slack.com/t/ceph-storage/shared_invite/zt-2ptxrb851-FzpqR7ShQcvlkI4JCWeoEw)
7 |
8 | Official Ceph Rust-lang interface. Contributions welcomed!
9 |
10 | This library is the core librados Rust interface for Ceph. It also supports Admin Socket commands.
11 |
12 | ### Build requirements
13 |
14 | Librados must be installed.
15 |
16 | On CentOS/RHEL - Ceph Hammer librados is located in /usr/lib64. So, to get rust to see it you need to create a new symlink:
17 | `sudo ln -s /usr/lib64/librados.so.2.0.0 /usr/lib64/librados.so`
18 |
19 | On Ubuntu - Ceph Hammer librados is located in /usr/lib. So, to get rust to see it you need to create a new symlink:
20 | `sudo ln -s /usr/lib/librados.so.2.0.0 /usr/lib/librados.so`
21 |
22 | There may be another way to change the link name in rust without having to create a symlink.
23 |
24 | On MacOS, you can install librados via homebrew:
25 |
26 | ```shell
27 | $ brew tap zeichenanonym/ceph-client
28 | $ brew install ceph-client
29 | ```
30 |
31 | ### Ceph
32 | Create a Ceph development environment or use an existing Ceph environment.
33 |
34 | If creating a Ceph environment then use the following. It will generate a 4 node Virtual Box Ceph system with one
35 | node being a bootstrap node that controls the other. The remaining 3 nodes are Ceph nodes (Mons, OSDs, RGWs, APIs).
36 |
37 | Created and manage github.com/ceph/ceph-chef (Chef cookbooks for Ceph) and the Bloomberg github.com link below for chef-bcs. Chef-bcs uses ceph-chef. These are the same tools at Bloomberg.
38 |
39 | Requirements for Mac OSX:
40 | 1. VirtualBox
41 | 2. git
42 | 3. Locate an area where you would like to install the Ceph build environment
43 | 4. git clone https://github.com/bloomberg/chef-bcs.git
44 |
45 | ```shell
46 | $ cd chef-bcs
47 | $ cd /bootstrap/vms/vagrant
48 | $ ./CEPH_UP
49 | ```
50 |
51 | **NOTE: If using the latest version of chef-bcs, you can enable an automatic development environment to be built with all of the development tools. See the project for details. It does it by default for Vagrant build.**
52 |
53 | This will take about 30 minutes to build out. It installs CentOS 7.3, downloads all of the parts required to get Ceph up and running with good options.
54 |
55 | Once complete you can then login to the first node:
56 |
57 | `$ vagrant ssh ceph-vm1`
58 |
59 | Run `ceph -s` to make sure you see Ceph running. Now you can install the development environment and Rust.
60 |
61 | ### Rust
62 | (In ceph-vm1 node)
63 | ```
64 | curl -sSf https://static.rust-lang.org/rustup.sh | sh
65 | ```
66 | OR
67 | ```
68 | curl https://sh.rustup.rs -sSf | sh
69 | ```
70 |
71 | ### Yum
72 | (In ceph-vm1 node) - Note: This is automatically done for you if you installed the environment vi Chef-bcs as noted above.
73 |
74 | ```
75 | mkdir -p projects/lambdastack
76 | cd projects/lambdastack
77 |
78 | Requirements for development:
79 | sudo yum install -y git cmake
80 | sudo yum install -y openssl openssl-devel
81 | ```
82 |
83 | Clone ceph-rust project:
84 | ```
85 | git clone https://github.com/lambdastackio/ceph-rust.git
86 | ```
87 |
88 | NOTE: Make sure you have setup your favorite editor. Vim is automatically installed.
89 |
90 | ### AWS S3 Object Store
91 | Crate (library): aws-sdk-rust at https://github.com/lambdastackio/aws-sdk-rust
92 |
93 | ### AWS S3 CLI Utility
94 | Crate (binary): s3lsio at https://github.com/lambdastackio/s3lsio
95 |
96 | ### Ceph Admin Commands
97 |
98 | An example of finding a mon socket in a generic like environment.
99 | ```
100 | ceph-conf --name mon.$(hostname -s) --show-config-value admin_socket
101 | ```
102 |
103 | The raw admin_socket commands can be found in:
104 | /src/ceph_admin_socket_mon_commands.json
105 | /src/ceph_admin_socket_osd_commands.json
106 | /src/ceph_admin_socket_client_commands.json
107 |
108 | A number of them are the same.
109 |
110 | ------------
111 | Portions originated from Chris Holcombe at https://github.com/cholcombe973
112 |
--------------------------------------------------------------------------------
/sample_files/ceph_admin_socket_mon_commands.json:
--------------------------------------------------------------------------------
1 | {
2 | "cmd000": {
3 | "sig": [
4 | "0"
5 | ],
6 | "help": ""
7 | },
8 | "cmd001": {
9 | "sig": [
10 | "1"
11 | ],
12 | "help": ""
13 | },
14 | "cmd002": {
15 | "sig": [
16 | "2"
17 | ],
18 | "help": ""
19 | },
20 | "cmd003": {
21 | "sig": [
22 | "add_bootstrap_peer_hint",
23 | {
24 | "name": "addr",
25 | "type": "CephIPAddr"
26 | }
27 | ],
28 | "help": "add peer address as potential bootstrap peer for cluster bringup"
29 | },
30 | "cmd004": {
31 | "sig": [
32 | "config",
33 | "diff"
34 | ],
35 | "help": "dump diff of current config and default config"
36 | },
37 | "cmd005": {
38 | "sig": [
39 | "config",
40 | "get",
41 | {
42 | "name": "var",
43 | "type": "CephString"
44 | }
45 | ],
46 | "help": "config get : get the config value"
47 | },
48 | "cmd006": {
49 | "sig": [
50 | "config",
51 | "set",
52 | {
53 | "name": "var",
54 | "type": "CephString"
55 | },
56 | {
57 | "n": "N",
58 | "name": "val",
59 | "type": "CephString"
60 | }
61 | ],
62 | "help": "config set [ ...]: set a config variable"
63 | },
64 | "cmd007": {
65 | "sig": [
66 | "config",
67 | "show"
68 | ],
69 | "help": "dump current config settings"
70 | },
71 | "cmd008": {
72 | "sig": [
73 | "get_command_descriptions"
74 | ],
75 | "help": "list available commands"
76 | },
77 | "cmd009": {
78 | "sig": [
79 | "git_version"
80 | ],
81 | "help": "get git sha1"
82 | },
83 | "cmd010": {
84 | "sig": [
85 | "help"
86 | ],
87 | "help": "list available commands"
88 | },
89 | "cmd011": {
90 | "sig": [
91 | "log",
92 | "dump"
93 | ],
94 | "help": "dump recent log entries to log file"
95 | },
96 | "cmd012": {
97 | "sig": [
98 | "log",
99 | "flush"
100 | ],
101 | "help": "flush log entries to log file"
102 | },
103 | "cmd013": {
104 | "sig": [
105 | "log",
106 | "reopen"
107 | ],
108 | "help": "reopen log file"
109 | },
110 | "cmd014": {
111 | "sig": [
112 | "mon_status"
113 | ],
114 | "help": "show current monitor status"
115 | },
116 | "cmd015": {
117 | "sig": [
118 | "perf",
119 | "dump",
120 | {
121 | "name": "logger",
122 | "req": "false",
123 | "type": "CephString"
124 | },
125 | {
126 | "name": "counter",
127 | "req": "false",
128 | "type": "CephString"
129 | }
130 | ],
131 | "help": "dump perfcounters value"
132 | },
133 | "cmd016": {
134 | "sig": [
135 | "perf",
136 | "reset",
137 | {
138 | "name": "var",
139 | "type": "CephString"
140 | }
141 | ],
142 | "help": "perf reset : perf reset all or one perfcounter name"
143 | },
144 | "cmd017": {
145 | "sig": [
146 | "perf",
147 | "schema"
148 | ],
149 | "help": "dump perfcounters schema"
150 | },
151 | "cmd018": {
152 | "sig": [
153 | "perfcounters_dump"
154 | ],
155 | "help": ""
156 | },
157 | "cmd019": {
158 | "sig": [
159 | "perfcounters_schema"
160 | ],
161 | "help": ""
162 | },
163 | "cmd020": {
164 | "sig": [
165 | "quorum",
166 | "enter"
167 | ],
168 | "help": "force monitor back into quorum"
169 | },
170 | "cmd021": {
171 | "sig": [
172 | "quorum",
173 | "exit"
174 | ],
175 | "help": "force monitor out of the quorum"
176 | },
177 | "cmd022": {
178 | "sig": [
179 | "quorum_status"
180 | ],
181 | "help": "show current quorum status"
182 | },
183 | "cmd023": {
184 | "sig": [
185 | "sync_force",
186 | {
187 | "name": "validate",
188 | "strings": "--yes-i-really-mean-it",
189 | "type": "CephChoices"
190 | }
191 | ],
192 | "help": "force sync of and clear monitor store"
193 | },
194 | "cmd024": {
195 | "sig": [
196 | "version"
197 | ],
198 | "help": "get ceph version"
199 | }
200 | }
201 |
--------------------------------------------------------------------------------
/src/status.rs:
--------------------------------------------------------------------------------
1 | // Copyright 2017 LambdaStack All rights reserved.
2 | //
3 | // Licensed under the Apache License, Version 2.0 (the "License");
4 | // you may not use this file except in compliance with the License.
5 | // You may obtain a copy of the License at
6 | //
7 | // http://www.apache.org/licenses/LICENSE-2.0
8 | //
9 | // Unless required by applicable law or agreed to in writing, software
10 | // distributed under the License is distributed on an "AS IS" BASIS,
11 | // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 | // See the License for the specific language governing permissions and
13 | // limitations under the License.
14 |
15 | #[derive(Deserialize, Serialize)]
16 | pub struct CephStatus {
17 | health: CephStatusHealth,
18 | fsid: String,
19 | election_epoch: u32,
20 | quorum: Vec,
21 | quorum_names: Vec,
22 | monmap: CephStatusMonMap,
23 | osdmap: CephStatusOSDMapH,
24 | pgmap: CephStatusPGMap,
25 | mdsmap: CephStatusMDSMap,
26 | }
27 |
28 | #[derive(Deserialize, Serialize)]
29 | pub struct CephStatusHealth {
30 | health: CephStatusHealth2,
31 | timechecks: CephStatusHealthTimeChecks,
32 | summary: Vec,
33 | overall_status: String,
34 | detail: Vec,
35 | }
36 |
37 | #[derive(Deserialize, Serialize)]
38 | pub struct CephStatusHealth2 {
39 | health: Vec,
40 | }
41 |
42 | #[derive(Deserialize, Serialize)]
43 | pub struct CephStatusHealthServices {
44 | mons: Vec,
45 | }
46 |
47 | #[derive(Deserialize, Serialize)]
48 | pub struct CephStatusHealthServicesMon {
49 | name: String,
50 | kb_total: u32,
51 | kb_used: u32,
52 | kb_avail: u32,
53 | avail_percent: u16,
54 | last_updated: String,
55 | store_stats: CephStatusHealthServicesMonStats,
56 | health: String,
57 | }
58 |
59 | #[derive(Deserialize, Serialize)]
60 | pub struct CephStatusHealthServicesMonStats {
61 | bytes_total: u64,
62 | bytes_sst: u64,
63 | bytes_log: u64,
64 | bytes_misc: u64,
65 | last_updated: String,
66 | }
67 |
68 | #[derive(Deserialize, Serialize)]
69 | pub struct CephStatusHealthTimeChecks {
70 | epoch: u32,
71 | round: u32,
72 | round_status: String,
73 | mons: Vec,
74 | }
75 |
76 | #[derive(Deserialize, Serialize)]
77 | pub struct CephStatusHealthMons {
78 | name: String,
79 | skew: f32,
80 | latency: f32,
81 | health: String,
82 | }
83 |
84 | #[derive(Deserialize, Serialize)]
85 | pub struct CephStatusHealthSummary {
86 | severity: String,
87 | summary: String,
88 | }
89 |
90 | #[derive(Deserialize, Serialize)]
91 | pub struct CephStatusHealthDetail {
92 | dummy: String,
93 | }
94 |
95 | #[derive(Deserialize, Serialize)]
96 | pub struct CephStatusMonMap {
97 | epoch: u32,
98 | fsid: String,
99 | modified: String,
100 | created: String,
101 | mons: Vec,
102 | }
103 |
104 | #[derive(Deserialize, Serialize)]
105 | pub struct CephStatusMonRank {
106 | rank: u16,
107 | name: String,
108 | addr: String,
109 | }
110 |
111 | #[derive(Deserialize, Serialize)]
112 | pub struct CephStatusOSDMapH {
113 | osdmap: CephStatusOSDMapL,
114 | }
115 |
116 | #[derive(Deserialize, Serialize)]
117 | pub struct CephStatusOSDMapL {
118 | epoch: u32,
119 | num_osds: u32,
120 | num_up_osds: u32,
121 | num_in_osds: u32,
122 | full: bool,
123 | nearfull: bool,
124 | num_remapped_pgs: u32,
125 | }
126 |
127 | #[derive(Deserialize, Serialize)]
128 | pub struct CephStatusPGMap {
129 | pgs_by_state: Vec,
130 | version: u32,
131 | num_pgs: u32,
132 | data_bytes: u64,
133 | bytes_used: u64,
134 | bytes_avail: u64,
135 | bytes_total: u64,
136 | }
137 |
138 | #[derive(Deserialize, Serialize)]
139 | pub struct CephStatusPGState {
140 | state_name: String,
141 | count: u32,
142 | }
143 |
144 | #[derive(Deserialize, Serialize)]
145 | pub struct CephStatusMDSMap {
146 | epoch: u32,
147 | up: u32,
148 | _in: u32,
149 | max: u32,
150 | by_rank: Vec,
151 | }
152 |
153 | #[derive(Deserialize, Serialize)]
154 | pub struct CephStatusMDSRank {
155 | rank: u16,
156 | name: String,
157 | addr: String,
158 | }
159 |
--------------------------------------------------------------------------------
/sample_files/ceph_status_format_json.json:
--------------------------------------------------------------------------------
1 | {
2 | "health": {
3 | "health": {
4 | "health_services": [
5 | {
6 | "mons": [
7 | {
8 | "name": "ceph-vm1",
9 | "kb_total": 40313620,
10 | "kb_used": 3439440,
11 | "kb_avail": 36874180,
12 | "avail_percent": 91,
13 | "last_updated": "2017-02-03 22:28:59.768212",
14 | "store_stats": {
15 | "bytes_total": 16068874,
16 | "bytes_sst": 15436945,
17 | "bytes_log": 458752,
18 | "bytes_misc": 173177,
19 | "last_updated": "0.000000"
20 | },
21 | "health": "HEALTH_OK"
22 | },
23 | {
24 | "name": "ceph-vm2",
25 | "kb_total": 40313620,
26 | "kb_used": 2983396,
27 | "kb_avail": 37330224,
28 | "avail_percent": 92,
29 | "last_updated": "2017-02-03 22:28:59.794621",
30 | "store_stats": {
31 | "bytes_total": 16069158,
32 | "bytes_sst": 15436954,
33 | "bytes_log": 458752,
34 | "bytes_misc": 173452,
35 | "last_updated": "0.000000"
36 | },
37 | "health": "HEALTH_OK"
38 | },
39 | {
40 | "name": "ceph-vm3",
41 | "kb_total": 40313620,
42 | "kb_used": 2974132,
43 | "kb_avail": 37339488,
44 | "avail_percent": 92,
45 | "last_updated": "2017-02-03 22:29:02.924132",
46 | "store_stats": {
47 | "bytes_total": 16594271,
48 | "bytes_sst": 15437604,
49 | "bytes_log": 983040,
50 | "bytes_misc": 173627,
51 | "last_updated": "0.000000"
52 | },
53 | "health": "HEALTH_OK"
54 | }
55 | ]
56 | }
57 | ]
58 | },
59 | "timechecks": {
60 | "epoch": 14,
61 | "round": 202,
62 | "round_status": "finished",
63 | "mons": [
64 | {
65 | "name": "ceph-vm1",
66 | "skew": 0,
67 | "latency": 0,
68 | "health": "HEALTH_OK"
69 | },
70 | {
71 | "name": "ceph-vm2",
72 | "skew": 0.024771,
73 | "latency": 0.001161,
74 | "health": "HEALTH_OK"
75 | },
76 | {
77 | "name": "ceph-vm3",
78 | "skew": 0,
79 | "latency": 0.001089,
80 | "health": "HEALTH_OK"
81 | }
82 | ]
83 | },
84 | "summary": [
85 |
86 | ],
87 | "overall_status": "HEALTH_OK",
88 | "detail": [
89 |
90 | ]
91 | },
92 | "fsid": "094a460e-98bd-4231-9f16-57c9a5782989",
93 | "election_epoch": 14,
94 | "quorum": [
95 | 0,
96 | 1,
97 | 2
98 | ],
99 | "quorum_names": [
100 | "ceph-vm1",
101 | "ceph-vm2",
102 | "ceph-vm3"
103 | ],
104 | "monmap": {
105 | "epoch": 2,
106 | "fsid": "094a460e-98bd-4231-9f16-57c9a5782989",
107 | "modified": "2017-02-02 17:33:27.433593",
108 | "created": "0.000000",
109 | "mons": [
110 | {
111 | "rank": 0,
112 | "name": "ceph-vm1",
113 | "addr": "10.0.100.21:6789\/0"
114 | },
115 | {
116 | "rank": 1,
117 | "name": "ceph-vm2",
118 | "addr": "10.0.100.22:6789\/0"
119 | },
120 | {
121 | "rank": 2,
122 | "name": "ceph-vm3",
123 | "addr": "10.0.100.23:6789\/0"
124 | }
125 | ]
126 | },
127 | "osdmap": {
128 | "osdmap": {
129 | "epoch": 268,
130 | "num_osds": 12,
131 | "num_up_osds": 12,
132 | "num_in_osds": 12,
133 | "full": false,
134 | "nearfull": false,
135 | "num_remapped_pgs": 0
136 | }
137 | },
138 | "pgmap": {
139 | "pgs_by_state": [
140 | {
141 | "state_name": "active+clean",
142 | "count": 1408
143 | }
144 | ],
145 | "version": 2602,
146 | "num_pgs": 1408,
147 | "data_bytes": 1964,
148 | "bytes_used": 565907456,
149 | "bytes_avail": 256993472512,
150 | "bytes_total": 257559379968
151 | },
152 | "mdsmap": {
153 | "epoch": 1,
154 | "up": 0,
155 | "in": 0,
156 | "max": 0,
157 | "by_rank": [
158 |
159 | ]
160 | }
161 | }
162 |
--------------------------------------------------------------------------------
/tests/mon_status-nautilus:
--------------------------------------------------------------------------------
1 | {
2 | "name":"ceph-01",
3 | "rank":0,
4 | "state":"leader",
5 | "election_epoch":4,
6 | "quorum":[
7 | 0,
8 | 1,
9 | 2
10 | ],
11 | "quorum_age":503681,
12 | "features":{
13 | "required_con":"2449958747315912708",
14 | "required_mon":[
15 | "kraken",
16 | "luminous",
17 | "mimic",
18 | "osdmap-prune",
19 | "nautilus"
20 | ],
21 | "quorum_con":"4611087854031667199",
22 | "quorum_mon":[
23 | "kraken",
24 | "luminous",
25 | "mimic",
26 | "osdmap-prune",
27 | "nautilus"
28 | ]
29 | },
30 | "outside_quorum":[
31 |
32 | ],
33 | "extra_probe_peers":[
34 | {
35 | "addrvec":[
36 | {
37 | "type":"v2",
38 | "addr":"0.0.0.0:3300",
39 | "nonce":0
40 | },
41 | {
42 | "type":"v1",
43 | "addr":"0.0.0.0:6789",
44 | "nonce":0
45 | }
46 | ]
47 | },
48 | {
49 | "addrvec":[
50 | {
51 | "type":"v2",
52 | "addr":"0.0.0.0:3300",
53 | "nonce":0
54 | },
55 | {
56 | "type":"v1",
57 | "addr":"0.0.0.0:6789",
58 | "nonce":0
59 | }
60 | ]
61 | }
62 | ],
63 | "sync_provider":[
64 |
65 | ],
66 | "monmap":{
67 | "epoch":1,
68 | "fsid":"32364ce8-7ff6-11ea-97db-13e058aad2af",
69 | "modified":"2020-04-01 23:14:27.469657",
70 | "created":"2020-04-01 23:14:27.469657",
71 | "min_mon_release":14,
72 | "min_mon_release_name":"nautilus",
73 | "features":{
74 | "persistent":[
75 | "kraken",
76 | "luminous",
77 | "mimic",
78 | "osdmap-prune",
79 | "nautilus"
80 | ],
81 | "optional":[
82 |
83 | ]
84 | },
85 | "mons":[
86 | {
87 | "rank":0,
88 | "name":"ceph-01",
89 | "public_addrs":{
90 | "addrvec":[
91 | {
92 | "type":"v2",
93 | "addr":"0.0.0.0:3300",
94 | "nonce":0
95 | },
96 | {
97 | "type":"v1",
98 | "addr":"0.0.0.0:6789",
99 | "nonce":0
100 | }
101 | ]
102 | },
103 | "addr":"0.0.0.0:6789/0",
104 | "public_addr":"0.0.0.0:6789/0"
105 | },
106 | {
107 | "rank":1,
108 | "name":"ceph-03",
109 | "public_addrs":{
110 | "addrvec":[
111 | {
112 | "type":"v2",
113 | "addr":"0.0.0.0:3300",
114 | "nonce":0
115 | },
116 | {
117 | "type":"v1",
118 | "addr":"0.0.0.0:6789",
119 | "nonce":0
120 | }
121 | ]
122 | },
123 | "addr":"0.0.0.0:6789/0",
124 | "public_addr":"0.0.0.0:6789/0"
125 | },
126 | {
127 | "rank":2,
128 | "name":"ceph-02",
129 | "public_addrs":{
130 | "addrvec":[
131 | {
132 | "type":"v2",
133 | "addr":"0.0.0.0:3300",
134 | "nonce":0
135 | },
136 | {
137 | "type":"v1",
138 | "addr":"0.0.0.0:6789",
139 | "nonce":0
140 | }
141 | ]
142 | },
143 | "addr":"0.0.0.0:6789/0",
144 | "public_addr":"0.0.0.0:6789/0"
145 | }
146 | ]
147 | },
148 | "feature_map":{
149 | "mon":[
150 | {
151 | "features":"0x3ffddff8ffacffff",
152 | "release":"luminous",
153 | "num":1
154 | }
155 | ],
156 | "osd":[
157 | {
158 | "features":"0x3ffddff8ffacffff",
159 | "release":"luminous",
160 | "num":7
161 | }
162 | ],
163 | "client":[
164 | {
165 | "features":"0x3ffddff8ffacffff",
166 | "release":"luminous",
167 | "num":2
168 | }
169 | ],
170 | "mgr":[
171 | {
172 | "features":"0x3ffddff8ffacffff",
173 | "release":"luminous",
174 | "num":1
175 | }
176 | ]
177 | }
178 | }
179 |
--------------------------------------------------------------------------------
/docs/SourceSerifPro-LICENSE.txt:
--------------------------------------------------------------------------------
1 | Copyright 2014 Adobe Systems Incorporated (http://www.adobe.com/), with Reserved Font Name 'Source'. All Rights Reserved. Source is a trademark of Adobe Systems Incorporated in the United States and/or other countries.
2 |
3 | This Font Software is licensed under the SIL Open Font License, Version 1.1.
4 |
5 | This license is copied below, and is also available with a FAQ at: http://scripts.sil.org/OFL
6 |
7 |
8 | -----------------------------------------------------------
9 | SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007
10 | -----------------------------------------------------------
11 |
12 | PREAMBLE
13 | The goals of the Open Font License (OFL) are to stimulate worldwide
14 | development of collaborative font projects, to support the font creation
15 | efforts of academic and linguistic communities, and to provide a free and
16 | open framework in which fonts may be shared and improved in partnership
17 | with others.
18 |
19 | The OFL allows the licensed fonts to be used, studied, modified and
20 | redistributed freely as long as they are not sold by themselves. The
21 | fonts, including any derivative works, can be bundled, embedded,
22 | redistributed and/or sold with any software provided that any reserved
23 | names are not used by derivative works. The fonts and derivatives,
24 | however, cannot be released under any other type of license. The
25 | requirement for fonts to remain under this license does not apply
26 | to any document created using the fonts or their derivatives.
27 |
28 | DEFINITIONS
29 | "Font Software" refers to the set of files released by the Copyright
30 | Holder(s) under this license and clearly marked as such. This may
31 | include source files, build scripts and documentation.
32 |
33 | "Reserved Font Name" refers to any names specified as such after the
34 | copyright statement(s).
35 |
36 | "Original Version" refers to the collection of Font Software components as
37 | distributed by the Copyright Holder(s).
38 |
39 | "Modified Version" refers to any derivative made by adding to, deleting,
40 | or substituting -- in part or in whole -- any of the components of the
41 | Original Version, by changing formats or by porting the Font Software to a
42 | new environment.
43 |
44 | "Author" refers to any designer, engineer, programmer, technical
45 | writer or other person who contributed to the Font Software.
46 |
47 | PERMISSION & CONDITIONS
48 | Permission is hereby granted, free of charge, to any person obtaining
49 | a copy of the Font Software, to use, study, copy, merge, embed, modify,
50 | redistribute, and sell modified and unmodified copies of the Font
51 | Software, subject to the following conditions:
52 |
53 | 1) Neither the Font Software nor any of its individual components,
54 | in Original or Modified Versions, may be sold by itself.
55 |
56 | 2) Original or Modified Versions of the Font Software may be bundled,
57 | redistributed and/or sold with any software, provided that each copy
58 | contains the above copyright notice and this license. These can be
59 | included either as stand-alone text files, human-readable headers or
60 | in the appropriate machine-readable metadata fields within text or
61 | binary files as long as those fields can be easily viewed by the user.
62 |
63 | 3) No Modified Version of the Font Software may use the Reserved Font
64 | Name(s) unless explicit written permission is granted by the corresponding
65 | Copyright Holder. This restriction only applies to the primary font name as
66 | presented to the users.
67 |
68 | 4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font
69 | Software shall not be used to promote, endorse or advertise any
70 | Modified Version, except to acknowledge the contribution(s) of the
71 | Copyright Holder(s) and the Author(s) or with their explicit written
72 | permission.
73 |
74 | 5) The Font Software, modified or unmodified, in part or in whole,
75 | must be distributed entirely under this license, and must not be
76 | distributed under any other license. The requirement for fonts to
77 | remain under this license does not apply to any document created
78 | using the Font Software.
79 |
80 | TERMINATION
81 | This license becomes null and void if any of the above conditions are
82 | not met.
83 |
84 | DISCLAIMER
85 | THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
86 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
87 | MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
88 | OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE
89 | COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
90 | INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
91 | DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
92 | FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM
93 | OTHER DEALINGS IN THE FONT SOFTWARE.
94 |
--------------------------------------------------------------------------------
/docs/SourceCodePro-LICENSE.txt:
--------------------------------------------------------------------------------
1 | Copyright 2010, 2012 Adobe Systems Incorporated (http://www.adobe.com/), with Reserved Font Name 'Source'. All Rights Reserved. Source is a trademark of Adobe Systems Incorporated in the United States and/or other countries.
2 |
3 | This Font Software is licensed under the SIL Open Font License, Version 1.1.
4 |
5 | This license is copied below, and is also available with a FAQ at: http://scripts.sil.org/OFL
6 |
7 |
8 | -----------------------------------------------------------
9 | SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007
10 | -----------------------------------------------------------
11 |
12 | PREAMBLE
13 | The goals of the Open Font License (OFL) are to stimulate worldwide
14 | development of collaborative font projects, to support the font creation
15 | efforts of academic and linguistic communities, and to provide a free and
16 | open framework in which fonts may be shared and improved in partnership
17 | with others.
18 |
19 | The OFL allows the licensed fonts to be used, studied, modified and
20 | redistributed freely as long as they are not sold by themselves. The
21 | fonts, including any derivative works, can be bundled, embedded,
22 | redistributed and/or sold with any software provided that any reserved
23 | names are not used by derivative works. The fonts and derivatives,
24 | however, cannot be released under any other type of license. The
25 | requirement for fonts to remain under this license does not apply
26 | to any document created using the fonts or their derivatives.
27 |
28 | DEFINITIONS
29 | "Font Software" refers to the set of files released by the Copyright
30 | Holder(s) under this license and clearly marked as such. This may
31 | include source files, build scripts and documentation.
32 |
33 | "Reserved Font Name" refers to any names specified as such after the
34 | copyright statement(s).
35 |
36 | "Original Version" refers to the collection of Font Software components as
37 | distributed by the Copyright Holder(s).
38 |
39 | "Modified Version" refers to any derivative made by adding to, deleting,
40 | or substituting -- in part or in whole -- any of the components of the
41 | Original Version, by changing formats or by porting the Font Software to a
42 | new environment.
43 |
44 | "Author" refers to any designer, engineer, programmer, technical
45 | writer or other person who contributed to the Font Software.
46 |
47 | PERMISSION & CONDITIONS
48 | Permission is hereby granted, free of charge, to any person obtaining
49 | a copy of the Font Software, to use, study, copy, merge, embed, modify,
50 | redistribute, and sell modified and unmodified copies of the Font
51 | Software, subject to the following conditions:
52 |
53 | 1) Neither the Font Software nor any of its individual components,
54 | in Original or Modified Versions, may be sold by itself.
55 |
56 | 2) Original or Modified Versions of the Font Software may be bundled,
57 | redistributed and/or sold with any software, provided that each copy
58 | contains the above copyright notice and this license. These can be
59 | included either as stand-alone text files, human-readable headers or
60 | in the appropriate machine-readable metadata fields within text or
61 | binary files as long as those fields can be easily viewed by the user.
62 |
63 | 3) No Modified Version of the Font Software may use the Reserved Font
64 | Name(s) unless explicit written permission is granted by the corresponding
65 | Copyright Holder. This restriction only applies to the primary font name as
66 | presented to the users.
67 |
68 | 4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font
69 | Software shall not be used to promote, endorse or advertise any
70 | Modified Version, except to acknowledge the contribution(s) of the
71 | Copyright Holder(s) and the Author(s) or with their explicit written
72 | permission.
73 |
74 | 5) The Font Software, modified or unmodified, in part or in whole,
75 | must be distributed entirely under this license, and must not be
76 | distributed under any other license. The requirement for fonts to
77 | remain under this license does not apply to any document created
78 | using the Font Software.
79 |
80 | TERMINATION
81 | This license becomes null and void if any of the above conditions are
82 | not met.
83 |
84 | DISCLAIMER
85 | THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
86 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
87 | MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
88 | OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE
89 | COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
90 | INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
91 | DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
92 | FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM
93 | OTHER DEALINGS IN THE FONT SOFTWARE.
94 |
--------------------------------------------------------------------------------
/docs/ceph_rust/type.JsonData.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 | ceph_rust::JsonData - Rust
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
27 |
28 |
29 |
30 |
34 |
35 |
36 |
44 |
45 |
46 |
47 |
52 | type JsonData = Json ;
53 |
54 |
55 |
56 |
57 |
58 |
59 |
Help
60 |
61 |
62 |
Keyboard Shortcuts
63 |
64 |
65 | ?
66 | Show this help dialog
67 | S
68 | Focus the search field
69 | ⇤
70 | Move up in search results
71 | ⇥
72 | Move down in search results
73 | ⏎
74 | Go to active search result
75 | +
76 | Collapse/expand all sections
77 |
78 |
79 |
80 |
81 |
Search Tricks
82 |
83 |
84 | Prefix searches with a type followed by a colon (e.g.
85 | fn:) to restrict the search to a given type.
86 |
87 |
88 |
89 | Accepted types are: fn, mod,
90 | struct, enum,
91 | trait, type, macro,
92 | and const.
93 |
94 |
95 |
96 | Search functions by type signature (e.g.
97 | vec -> usize or * -> vec)
98 |
99 |
100 |
101 |
102 |
103 |
104 |
105 |
109 |
110 |
111 |
112 |
--------------------------------------------------------------------------------
/docs/ceph_rust/type.JsonValue.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 | ceph_rust::JsonValue - Rust
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
27 |
28 |
29 |
30 |
34 |
35 |
36 |
44 |
45 |
46 |
47 |
52 | type JsonValue = Json ;
53 |
54 |
55 |
56 |
57 |
58 |
59 |
Help
60 |
61 |
62 |
Keyboard Shortcuts
63 |
64 |
65 | ?
66 | Show this help dialog
67 | S
68 | Focus the search field
69 | ⇤
70 | Move up in search results
71 | ⇥
72 | Move down in search results
73 | ⏎
74 | Go to active search result
75 | +
76 | Collapse/expand all sections
77 |
78 |
79 |
80 |
81 |
Search Tricks
82 |
83 |
84 | Prefix searches with a type followed by a colon (e.g.
85 | fn:) to restrict the search to a given type.
86 |
87 |
88 |
89 | Accepted types are: fn, mod,
90 | struct, enum,
91 | trait, type, macro,
92 | and const.
93 |
94 |
95 |
96 | Search functions by type signature (e.g.
97 | vec -> usize or * -> vec)
98 |
99 |
100 |
101 |
102 |
103 |
104 |
105 |
109 |
110 |
111 |
112 |
--------------------------------------------------------------------------------
/docs/FiraSans-LICENSE.txt:
--------------------------------------------------------------------------------
1 | Copyright (c) 2014, Mozilla Foundation https://mozilla.org/
2 | with Reserved Font Name Fira Sans.
3 |
4 | Copyright (c) 2014, Mozilla Foundation https://mozilla.org/
5 | with Reserved Font Name Fira Mono.
6 |
7 | Copyright (c) 2014, Telefonica S.A.
8 |
9 | This Font Software is licensed under the SIL Open Font License, Version 1.1.
10 | This license is copied below, and is also available with a FAQ at:
11 | http://scripts.sil.org/OFL
12 |
13 |
14 | -----------------------------------------------------------
15 | SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007
16 | -----------------------------------------------------------
17 |
18 | PREAMBLE
19 | The goals of the Open Font License (OFL) are to stimulate worldwide
20 | development of collaborative font projects, to support the font creation
21 | efforts of academic and linguistic communities, and to provide a free and
22 | open framework in which fonts may be shared and improved in partnership
23 | with others.
24 |
25 | The OFL allows the licensed fonts to be used, studied, modified and
26 | redistributed freely as long as they are not sold by themselves. The
27 | fonts, including any derivative works, can be bundled, embedded,
28 | redistributed and/or sold with any software provided that any reserved
29 | names are not used by derivative works. The fonts and derivatives,
30 | however, cannot be released under any other type of license. The
31 | requirement for fonts to remain under this license does not apply
32 | to any document created using the fonts or their derivatives.
33 |
34 | DEFINITIONS
35 | "Font Software" refers to the set of files released by the Copyright
36 | Holder(s) under this license and clearly marked as such. This may
37 | include source files, build scripts and documentation.
38 |
39 | "Reserved Font Name" refers to any names specified as such after the
40 | copyright statement(s).
41 |
42 | "Original Version" refers to the collection of Font Software components as
43 | distributed by the Copyright Holder(s).
44 |
45 | "Modified Version" refers to any derivative made by adding to, deleting,
46 | or substituting -- in part or in whole -- any of the components of the
47 | Original Version, by changing formats or by porting the Font Software to a
48 | new environment.
49 |
50 | "Author" refers to any designer, engineer, programmer, technical
51 | writer or other person who contributed to the Font Software.
52 |
53 | PERMISSION & CONDITIONS
54 | Permission is hereby granted, free of charge, to any person obtaining
55 | a copy of the Font Software, to use, study, copy, merge, embed, modify,
56 | redistribute, and sell modified and unmodified copies of the Font
57 | Software, subject to the following conditions:
58 |
59 | 1) Neither the Font Software nor any of its individual components,
60 | in Original or Modified Versions, may be sold by itself.
61 |
62 | 2) Original or Modified Versions of the Font Software may be bundled,
63 | redistributed and/or sold with any software, provided that each copy
64 | contains the above copyright notice and this license. These can be
65 | included either as stand-alone text files, human-readable headers or
66 | in the appropriate machine-readable metadata fields within text or
67 | binary files as long as those fields can be easily viewed by the user.
68 |
69 | 3) No Modified Version of the Font Software may use the Reserved Font
70 | Name(s) unless explicit written permission is granted by the corresponding
71 | Copyright Holder. This restriction only applies to the primary font name as
72 | presented to the users.
73 |
74 | 4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font
75 | Software shall not be used to promote, endorse or advertise any
76 | Modified Version, except to acknowledge the contribution(s) of the
77 | Copyright Holder(s) and the Author(s) or with their explicit written
78 | permission.
79 |
80 | 5) The Font Software, modified or unmodified, in part or in whole,
81 | must be distributed entirely under this license, and must not be
82 | distributed under any other license. The requirement for fonts to
83 | remain under this license does not apply to any document created
84 | using the Font Software.
85 |
86 | TERMINATION
87 | This license becomes null and void if any of the above conditions are
88 | not met.
89 |
90 | DISCLAIMER
91 | THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
92 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
93 | MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
94 | OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE
95 | COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
96 | INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
97 | DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
98 | FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM
99 | OTHER DEALINGS IN THE FONT SOFTWARE.
100 |
--------------------------------------------------------------------------------
/docs/ceph_rust/rados/type.rados_snap_t.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 | ceph_rust::rados::rados_snap_t - Rust
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
27 |
28 |
29 |
30 |
34 |
35 |
36 |
44 |
45 |
46 |
47 |
52 | type rados_snap_t = uint64_t ;
53 |
54 |
55 |
56 |
57 |
58 |
59 |
Help
60 |
61 |
62 |
Keyboard Shortcuts
63 |
64 |
65 | ?
66 | Show this help dialog
67 | S
68 | Focus the search field
69 | ⇤
70 | Move up in search results
71 | ⇥
72 | Move down in search results
73 | ⏎
74 | Go to active search result
75 | +
76 | Collapse/expand all sections
77 |
78 |
79 |
80 |
81 |
Search Tricks
82 |
83 |
84 | Prefix searches with a type followed by a colon (e.g.
85 | fn:) to restrict the search to a given type.
86 |
87 |
88 |
89 | Accepted types are: fn, mod,
90 | struct, enum,
91 | trait, type, macro,
92 | and const.
93 |
94 |
95 |
96 | Search functions by type signature (e.g.
97 | vec -> usize or * -> vec)
98 |
99 |
100 |
101 |
102 |
103 |
104 |
105 |
109 |
110 |
111 |
112 |
--------------------------------------------------------------------------------
/docs/ceph_rust/rados/constant.LIBRADOS_OP_FLAG_EXCL.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 | ceph_rust::rados::LIBRADOS_OP_FLAG_EXCL - Rust
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
27 |
28 |
29 |
30 |
34 |
35 |
36 |
44 |
45 |
46 |
47 |
52 | pub const LIBRADOS_OP_FLAG_EXCL: AllocFlags = AllocFlags{bits: 1,}
53 |
54 |
55 |
56 |
57 |
58 |
59 |
Help
60 |
61 |
62 |
Keyboard Shortcuts
63 |
64 |
65 | ?
66 | Show this help dialog
67 | S
68 | Focus the search field
69 | ⇤
70 | Move up in search results
71 | ⇥
72 | Move down in search results
73 | ⏎
74 | Go to active search result
75 | +
76 | Collapse/expand all sections
77 |
78 |
79 |
80 |
81 |
Search Tricks
82 |
83 |
84 | Prefix searches with a type followed by a colon (e.g.
85 | fn:) to restrict the search to a given type.
86 |
87 |
88 |
89 | Accepted types are: fn, mod,
90 | struct, enum,
91 | trait, type, macro,
92 | and const.
93 |
94 |
95 |
96 | Search functions by type signature (e.g.
97 | vec -> usize or * -> vec)
98 |
99 |
100 |
101 |
102 |
103 |
104 |
105 |
109 |
110 |
111 |
112 |
--------------------------------------------------------------------------------
/docs/ceph_rust/rados/constant.LIBRADOS_CMPXATTR_OP_EQ.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 | ceph_rust::rados::LIBRADOS_CMPXATTR_OP_EQ - Rust
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
27 |
28 |
29 |
30 |
34 |
35 |
36 |
44 |
45 |
46 |
47 |
52 | pub const LIBRADOS_CMPXATTR_OP_EQ: XattrFlags = XattrFlags{bits: 1,}
53 |
54 |
55 |
56 |
57 |
58 |
59 |
Help
60 |
61 |
62 |
Keyboard Shortcuts
63 |
64 |
65 | ?
66 | Show this help dialog
67 | S
68 | Focus the search field
69 | ⇤
70 | Move up in search results
71 | ⇥
72 | Move down in search results
73 | ⏎
74 | Go to active search result
75 | +
76 | Collapse/expand all sections
77 |
78 |
79 |
80 |
81 |
Search Tricks
82 |
83 |
84 | Prefix searches with a type followed by a colon (e.g.
85 | fn:) to restrict the search to a given type.
86 |
87 |
88 |
89 | Accepted types are: fn, mod,
90 | struct, enum,
91 | trait, type, macro,
92 | and const.
93 |
94 |
95 |
96 | Search functions by type signature (e.g.
97 | vec -> usize or * -> vec)
98 |
99 |
100 |
101 |
102 |
103 |
104 |
105 |
109 |
110 |
111 |
112 |
--------------------------------------------------------------------------------
/docs/ceph_rust/rados/constant.LIBRADOS_CMPXATTR_OP_GT.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 | ceph_rust::rados::LIBRADOS_CMPXATTR_OP_GT - Rust
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
27 |
28 |
29 |
30 |
34 |
35 |
36 |
44 |
45 |
46 |
47 |
52 | pub const LIBRADOS_CMPXATTR_OP_GT: XattrFlags = XattrFlags{bits: 3,}
53 |
54 |
55 |
56 |
57 |
58 |
59 |
Help
60 |
61 |
62 |
Keyboard Shortcuts
63 |
64 |
65 | ?
66 | Show this help dialog
67 | S
68 | Focus the search field
69 | ⇤
70 | Move up in search results
71 | ⇥
72 | Move down in search results
73 | ⏎
74 | Go to active search result
75 | +
76 | Collapse/expand all sections
77 |
78 |
79 |
80 |
81 |
Search Tricks
82 |
83 |
84 | Prefix searches with a type followed by a colon (e.g.
85 | fn:) to restrict the search to a given type.
86 |
87 |
88 |
89 | Accepted types are: fn, mod,
90 | struct, enum,
91 | trait, type, macro,
92 | and const.
93 |
94 |
95 |
96 | Search functions by type signature (e.g.
97 | vec -> usize or * -> vec)
98 |
99 |
100 |
101 |
102 |
103 |
104 |
105 |
109 |
110 |
111 |
112 |
--------------------------------------------------------------------------------
/docs/ceph_rust/rados/constant.LIBRADOS_CMPXATTR_OP_LT.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 | ceph_rust::rados::LIBRADOS_CMPXATTR_OP_LT - Rust
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
27 |
28 |
29 |
30 |
34 |
35 |
36 |
44 |
45 |
46 |
47 |
52 | pub const LIBRADOS_CMPXATTR_OP_LT: XattrFlags = XattrFlags{bits: 5,}
53 |
54 |
55 |
56 |
57 |
58 |
59 |
Help
60 |
61 |
62 |
Keyboard Shortcuts
63 |
64 |
65 | ?
66 | Show this help dialog
67 | S
68 | Focus the search field
69 | ⇤
70 | Move up in search results
71 | ⇥
72 | Move down in search results
73 | ⏎
74 | Go to active search result
75 | +
76 | Collapse/expand all sections
77 |
78 |
79 |
80 |
81 |
Search Tricks
82 |
83 |
84 | Prefix searches with a type followed by a colon (e.g.
85 | fn:) to restrict the search to a given type.
86 |
87 |
88 |
89 | Accepted types are: fn, mod,
90 | struct, enum,
91 | trait, type, macro,
92 | and const.
93 |
94 |
95 |
96 | Search functions by type signature (e.g.
97 | vec -> usize or * -> vec)
98 |
99 |
100 |
101 |
102 |
103 |
104 |
105 |
109 |
110 |
111 |
112 |
--------------------------------------------------------------------------------
/docs/ceph_rust/rados/constant.LIBRADOS_CMPXATTR_OP_NE.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 | ceph_rust::rados::LIBRADOS_CMPXATTR_OP_NE - Rust
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
27 |
28 |
29 |
30 |
34 |
35 |
36 |
44 |
45 |
46 |
47 |
52 | pub const LIBRADOS_CMPXATTR_OP_NE: XattrFlags = XattrFlags{bits: 2,}
53 |
54 |
55 |
56 |
57 |
58 |
59 |
Help
60 |
61 |
62 |
Keyboard Shortcuts
63 |
64 |
65 | ?
66 | Show this help dialog
67 | S
68 | Focus the search field
69 | ⇤
70 | Move up in search results
71 | ⇥
72 | Move down in search results
73 | ⏎
74 | Go to active search result
75 | +
76 | Collapse/expand all sections
77 |
78 |
79 |
80 |
81 |
Search Tricks
82 |
83 |
84 | Prefix searches with a type followed by a colon (e.g.
85 | fn:) to restrict the search to a given type.
86 |
87 |
88 |
89 | Accepted types are: fn, mod,
90 | struct, enum,
91 | trait, type, macro,
92 | and const.
93 |
94 |
95 |
96 | Search functions by type signature (e.g.
97 | vec -> usize or * -> vec)
98 |
99 |
100 |
101 |
102 |
103 |
104 |
105 |
109 |
110 |
111 |
112 |
--------------------------------------------------------------------------------
/docs/ceph_rust/rados/constant.LIBRADOS_OP_FLAG_FAILOK.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 | ceph_rust::rados::LIBRADOS_OP_FLAG_FAILOK - Rust
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
27 |
28 |
29 |
30 |
34 |
35 |
36 |
44 |
45 |
46 |
47 |
52 | pub const LIBRADOS_OP_FLAG_FAILOK: AllocFlags = AllocFlags{bits: 2,}
53 |
54 |
55 |
56 |
57 |
58 |
59 |
Help
60 |
61 |
62 |
Keyboard Shortcuts
63 |
64 |
65 | ?
66 | Show this help dialog
67 | S
68 | Focus the search field
69 | ⇤
70 | Move up in search results
71 | ⇥
72 | Move down in search results
73 | ⏎
74 | Go to active search result
75 | +
76 | Collapse/expand all sections
77 |
78 |
79 |
80 |
81 |
Search Tricks
82 |
83 |
84 | Prefix searches with a type followed by a colon (e.g.
85 | fn:) to restrict the search to a given type.
86 |
87 |
88 |
89 | Accepted types are: fn, mod,
90 | struct, enum,
91 | trait, type, macro,
92 | and const.
93 |
94 |
95 |
96 | Search functions by type signature (e.g.
97 | vec -> usize or * -> vec)
98 |
99 |
100 |
101 |
102 |
103 |
104 |
105 |
109 |
110 |
111 |
112 |
--------------------------------------------------------------------------------
/docs/ceph_rust/rados/constant.LIBRADOS_CMPXATTR_OP_GTE.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 | ceph_rust::rados::LIBRADOS_CMPXATTR_OP_GTE - Rust
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
27 |
28 |
29 |
30 |
34 |
35 |
36 |
44 |
45 |
46 |
47 |
52 | pub const LIBRADOS_CMPXATTR_OP_GTE: XattrFlags = XattrFlags{bits: 4,}
53 |
54 |
55 |
56 |
57 |
58 |
59 |
Help
60 |
61 |
62 |
Keyboard Shortcuts
63 |
64 |
65 | ?
66 | Show this help dialog
67 | S
68 | Focus the search field
69 | ⇤
70 | Move up in search results
71 | ⇥
72 | Move down in search results
73 | ⏎
74 | Go to active search result
75 | +
76 | Collapse/expand all sections
77 |
78 |
79 |
80 |
81 |
Search Tricks
82 |
83 |
84 | Prefix searches with a type followed by a colon (e.g.
85 | fn:) to restrict the search to a given type.
86 |
87 |
88 |
89 | Accepted types are: fn, mod,
90 | struct, enum,
91 | trait, type, macro,
92 | and const.
93 |
94 |
95 |
96 | Search functions by type signature (e.g.
97 | vec -> usize or * -> vec)
98 |
99 |
100 |
101 |
102 |
103 |
104 |
105 |
109 |
110 |
111 |
112 |
--------------------------------------------------------------------------------
/docs/ceph_rust/rados/constant.LIBRADOS_CMPXATTR_OP_LTE.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 | ceph_rust::rados::LIBRADOS_CMPXATTR_OP_LTE - Rust
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
27 |
28 |
29 |
30 |
34 |
35 |
36 |
44 |
45 |
46 |
47 |
52 | pub const LIBRADOS_CMPXATTR_OP_LTE: XattrFlags = XattrFlags{bits: 6,}
53 |
54 |
55 |
56 |
57 |
58 |
59 |
Help
60 |
61 |
62 |
Keyboard Shortcuts
63 |
64 |
65 | ?
66 | Show this help dialog
67 | S
68 | Focus the search field
69 | ⇤
70 | Move up in search results
71 | ⇥
72 | Move down in search results
73 | ⏎
74 | Go to active search result
75 | +
76 | Collapse/expand all sections
77 |
78 |
79 |
80 |
81 |
Search Tricks
82 |
83 |
84 | Prefix searches with a type followed by a colon (e.g.
85 | fn:) to restrict the search to a given type.
86 |
87 |
88 |
89 | Accepted types are: fn, mod,
90 | struct, enum,
91 | trait, type, macro,
92 | and const.
93 |
94 |
95 |
96 | Search functions by type signature (e.g.
97 | vec -> usize or * -> vec)
98 |
99 |
100 |
101 |
102 |
103 |
104 |
105 |
109 |
110 |
111 |
112 |
--------------------------------------------------------------------------------
/docs/ceph_rust/rados/type.rados_t.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 | ceph_rust::rados::rados_t - Rust
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
27 |
28 |
29 |
30 |
34 |
35 |
36 |
44 |
45 |
46 |
47 |
52 | type rados_t = *mut c_void ;
53 |
54 |
55 |
56 |
57 |
58 |
59 |
Help
60 |
61 |
62 |
Keyboard Shortcuts
63 |
64 |
65 | ?
66 | Show this help dialog
67 | S
68 | Focus the search field
69 | ⇤
70 | Move up in search results
71 | ⇥
72 | Move down in search results
73 | ⏎
74 | Go to active search result
75 | +
76 | Collapse/expand all sections
77 |
78 |
79 |
80 |
81 |
Search Tricks
82 |
83 |
84 | Prefix searches with a type followed by a colon (e.g.
85 | fn:) to restrict the search to a given type.
86 |
87 |
88 |
89 | Accepted types are: fn, mod,
90 | struct, enum,
91 | trait, type, macro,
92 | and const.
93 |
94 |
95 |
96 | Search functions by type signature (e.g.
97 | vec -> usize or * -> vec)
98 |
99 |
100 |
101 |
102 |
103 |
104 |
105 |
109 |
110 |
111 |
112 |
--------------------------------------------------------------------------------
/docs/ceph_rust/rados/constant.LIBRADOS_OPERATION_NOFLAG.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 | ceph_rust::rados::LIBRADOS_OPERATION_NOFLAG - Rust
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
27 |
28 |
29 |
30 |
34 |
35 |
36 |
44 |
45 |
46 |
47 |
52 | pub const LIBRADOS_OPERATION_NOFLAG: OperationFlags = OperationFlags{bits: 0,}
53 |
54 |
55 |
56 |
57 |
58 |
59 |
Help
60 |
61 |
62 |
Keyboard Shortcuts
63 |
64 |
65 | ?
66 | Show this help dialog
67 | S
68 | Focus the search field
69 | ⇤
70 | Move up in search results
71 | ⇥
72 | Move down in search results
73 | ⏎
74 | Go to active search result
75 | +
76 | Collapse/expand all sections
77 |
78 |
79 |
80 |
81 |
Search Tricks
82 |
83 |
84 | Prefix searches with a type followed by a colon (e.g.
85 | fn:) to restrict the search to a given type.
86 |
87 |
88 |
89 | Accepted types are: fn, mod,
90 | struct, enum,
91 | trait, type, macro,
92 | and const.
93 |
94 |
95 |
96 | Search functions by type signature (e.g.
97 | vec -> usize or * -> vec)
98 |
99 |
100 |
101 |
102 |
103 |
104 |
105 |
109 |
110 |
111 |
112 |
--------------------------------------------------------------------------------