Skip to content

Commit

Permalink
Merge pull request #28 from alecmocatta/v0.1.3
Browse files Browse the repository at this point in the history
Release v0.1.3
  • Loading branch information
alecmocatta committed Aug 26, 2019
2 parents 19f52a4 + 3f8b59e commit 8c4a484
Show file tree
Hide file tree
Showing 5 changed files with 22 additions and 22 deletions.
6 changes: 3 additions & 3 deletions Cargo.toml
Expand Up @@ -2,7 +2,7 @@

[package]
name = "constellation-rs"
version = "0.1.2"
version = "0.1.3"
license = "Apache-2.0"
authors = ["Alec Mocatta <alec@mocatta.net>"]
categories = ["development-tools","network-programming","concurrency","asynchronous","command-line-utilities"]
Expand All @@ -12,7 +12,7 @@ Constellation is a framework for Rust (nightly) that aides in the writing, debug
"""
repository = "https://github.com/alecmocatta/constellation"
homepage = "https://github.com/alecmocatta/constellation"
documentation = "https://docs.rs/constellation-rs/0.1.2"
documentation = "https://docs.rs/constellation-rs/0.1.3"
readme = "README.md"
edition = "2018"
autotests = true
Expand All @@ -32,7 +32,7 @@ fringe = ["serde_pipe/fringe"]
no_alloc = ["constellation-internal/no_alloc"]

[dependencies]
constellation-internal = { path = "constellation-internal", version = "=0.1.2" }
constellation-internal = { path = "constellation-internal", version = "=0.1.3" }
atty = "0.2"
backtrace = "0.3"
bincode = "1.0"
Expand Down
30 changes: 15 additions & 15 deletions README.md
Expand Up @@ -13,7 +13,7 @@
</p>

<p align="center">
<a href="https://docs.rs/constellation-rs/0.1.2">Docs</a>
<a href="https://docs.rs/constellation-rs/0.1.3">Docs</a>
</p>

Constellation is a framework for Rust (nightly) that aides in the writing, debugging and deployment of distributed programs. It draws heavily from [Erlang/OTP](https://en.wikipedia.org/wiki/Erlang_(programming_language)), [MPI](https://en.wikipedia.org/wiki/Message_Passing_Interface), and [CSP](https://en.wikipedia.org/wiki/Communicating_sequential_processes); and leverages the Rust ecosystem where it can including [serde](https://serde.rs/) + [bincode](https://github.com/servo/bincode) for network serialization, and [mio](https://github.com/tokio-rs/mio) and [futures-rs](https://github.com/rust-lang-nursery/futures-rs) for asynchronous channels over TCP.
Expand All @@ -27,13 +27,13 @@ For leveraging Constellation directly, read on.

## Constellation framework

* Constellation is a framework that's initialised with a call to [`init()`](https://docs.rs/constellation-rs/0.1.2/constellation/fn.init.html) at the beginning of your program.
* You can [`spawn(closure)`](https://docs.rs/constellation-rs/0.1.2/constellation/fn.spawn.html) new processes, which run `closure`.
* Constellation is a framework that's initialised with a call to [`init()`](https://docs.rs/constellation-rs/0.1.3/constellation/fn.init.html) at the beginning of your program.
* You can [`spawn(closure)`](https://docs.rs/constellation-rs/0.1.3/constellation/fn.spawn.html) new processes, which run `closure`.
* `spawn(closure)` returns the Pid of the new process.
* You can communicate between processes by creating channels with [`Sender::new(remote_pid)`](https://docs.rs/constellation-rs/0.1.2/constellation/struct.Sender.html#method.new) and [`Receiver::new(remote_pid)`](https://docs.rs/constellation-rs/0.1.2/constellation/struct.Receiver.html#method.new).
* Channels can be used asynchronously with [`sender.send(value).await`](https://docs.rs/constellation-rs/0.1.2/constellation/struct.Sender.html#method.send) and [`receiver.recv().await`](https://docs.rs/constellation-rs/0.1.2/constellation/struct.Receiver.html#method.recv).
* You can communicate between processes by creating channels with [`Sender::new(remote_pid)`](https://docs.rs/constellation-rs/0.1.3/constellation/struct.Sender.html#method.new) and [`Receiver::new(remote_pid)`](https://docs.rs/constellation-rs/0.1.3/constellation/struct.Receiver.html#method.new).
* Channels can be used asynchronously with [`sender.send(value).await`](https://docs.rs/constellation-rs/0.1.3/constellation/struct.Sender.html#method.send) and [`receiver.recv().await`](https://docs.rs/constellation-rs/0.1.3/constellation/struct.Receiver.html#method.recv).
* [futures-rs](https://github.com/rust-lang-nursery/futures-rs) provides useful functions and adapters including `select()` and `join()` for working with channels.
* You can also block on channels with the [`.block()`](https://docs.rs/constellation-rs/0.1.2/constellation/trait.FutureExt1.html#method.block) convenience method: `sender.send().block()` and `receiver.recv().block()`.
* You can also block on channels with the [`.block()`](https://docs.rs/constellation-rs/0.1.3/constellation/trait.FutureExt1.html#method.block) convenience method: `sender.send().block()` and `receiver.recv().block()`.
* For more information on asynchronous programming in Rust check out the [Async Book](https://rust-lang.github.io/async-book/index.html)!

Here's a simple example recursively spawning processes to distribute the task of finding Fibonacci numbers:
Expand Down Expand Up @@ -173,7 +173,7 @@ It listens on a configurable address for binaries with resource requirements to
Rather than being invoked by a fork inside the user process, it is started automatically at constellation master-initialisation time. It listens on a configurable address for `cargo deploy`ments, at which point it runs the binary with special env vars that trigger `init()` to print resource requirements of the initial process and exit, before sending the binary with the determined resource requirements to the **constellation master**. Upon being successfully allocated, it is executed by a **constellation** instance. Inside `init()`, it connects back to the **bridge**, which dutifully forwards its output to `cargo deploy`.

#### `cargo deploy`
This is a command [added to](https://doc.rust-lang.org/book/second-edition/ch14-05-extending-cargo.html#extending-cargo-with-custom-commands) cargo that under the hood invokes `cargo run`, except that rather than the resulting binary being run locally, it is sent off to the **bridge**. The **bridge** then sends back any output, which is output formatted at the terminal.
This is a command [added to](https://doc.rust-lang.org/book/ch14-05-extending-cargo.html) cargo that under the hood invokes `cargo run`, except that rather than the resulting binary being run locally, it is sent off to the **bridge**. The **bridge** then sends back any output, which is output formatted at the terminal.

## How to use it
```toml
Expand All @@ -198,7 +198,7 @@ $ cargo run
Machine 2:
```bash
cargo install constellation-rs
constellation 10.0.0.2:9999
constellation 10.0.0.2:9999 # local address to bind to
```
Machine 3:
```bash
Expand All @@ -208,15 +208,15 @@ constellation 10.0.0.3:9999
Machine 1:
```bash
cargo install constellation-rs
constellation 10.0.0.1:9999 nodex.toml
constellation 10.0.0.1:9999 nodes.toml
```
nodes.toml:
```toml
[[nodes]]
fabric_addr = "10.0.0.1:9999"
bridge_bind = "10.0.0.1:8888"
mem = "100 GiB"
cpu = 16
fabric_addr = "10.0.0.1:9999" # local address to bind to
bridge_bind = "10.0.0.1:8888" # local address of the bridge to bind to
mem = "100 GiB" # resource capacity of the node
cpu = 16 # number of logical cores

[[nodes]]
fabric_addr = "10.0.0.2:9999"
Expand All @@ -231,7 +231,7 @@ cpu = 16
Your laptop:
```text
cargo install constellation-rs
cargo deploy 10.0.0.1:8888 --release
cargo deploy 10.0.0.1:8888 --release # address of the bridge
833d3de:
Hello, world!
exited
Expand All @@ -248,7 +248,7 @@ Please file an issue if you experience any other requirements.

## API

[see Rust doc](https://docs.rs/constellation-rs/0.1.2)
[see Rust doc](https://docs.rs/constellation-rs/0.1.3)

## Testing

Expand Down
4 changes: 2 additions & 2 deletions constellation-internal/Cargo.toml
@@ -1,6 +1,6 @@
[package]
name = "constellation-internal"
version = "0.1.2"
version = "0.1.3"
license = "Apache-2.0"
authors = ["Alec Mocatta <alec@mocatta.net>"]
categories = ["development-tools","network-programming","concurrency","asynchronous"]
Expand All @@ -10,7 +10,7 @@ Common components for the `constellation` framework.
"""
repository = "https://github.com/alecmocatta/constellation"
homepage = "https://github.com/alecmocatta/constellation"
documentation = "https://docs.rs/constellation-internal/0.1.2"
documentation = "https://docs.rs/constellation-internal/0.1.3"
edition = "2018"

[features]
Expand Down
2 changes: 1 addition & 1 deletion constellation-internal/src/lib.rs
@@ -1,4 +1,4 @@
#![doc(html_root_url = "https://docs.rs/constellation-internal/0.1.2")]
#![doc(html_root_url = "https://docs.rs/constellation-internal/0.1.3")]
#![warn(
// missing_copy_implementations,
missing_debug_implementations,
Expand Down
2 changes: 1 addition & 1 deletion src/lib.rs
Expand Up @@ -9,7 +9,7 @@
//!
//! The only requirement to use is that [`init()`](init) must be called immediately inside your application's `main()` function.

#![doc(html_root_url = "https://docs.rs/constellation-rs/0.1.2")]
#![doc(html_root_url = "https://docs.rs/constellation-rs/0.1.3")]
#![cfg_attr(feature = "nightly", feature(read_initializer))]
#![feature(cfg_doctest)]
#![warn(
Expand Down

0 comments on commit 8c4a484

Please sign in to comment.