forked from Deuxfleurs/garage
Alex Auvolat
c94406f428
- change the terminology: the network configuration becomes the role table, the configuration of a nodes becomes a node's role - the modification of the role table takes place in two steps: first, changes are staged in a CRDT data structure. Then, once the user is happy with the changes, they can commit them all at once (or revert them). - update documentation - fix tests - implement smarter partition assignation algorithm This patch breaks the format of the network configuration: when migrating, the cluster will be in a state where no roles are assigned. All roles must be re-assigned and commited at once. This migration should not pose an issue.
34 lines
623 B
Rust
34 lines
623 B
Rust
use serde::{Deserialize, Serialize};
|
|
|
|
use crate::crdt::crdt::*;
|
|
|
|
/// Boolean, where `true` is an absorbing state
|
|
#[derive(Clone, Copy, Debug, Serialize, Deserialize, PartialEq)]
|
|
pub struct Bool(bool);
|
|
|
|
impl Bool {
|
|
/// Create a new boolean with the specified value
|
|
pub fn new(b: bool) -> Self {
|
|
Self(b)
|
|
}
|
|
/// Set the boolean to true
|
|
pub fn set(&mut self) {
|
|
self.0 = true;
|
|
}
|
|
/// Get the boolean value
|
|
pub fn get(&self) -> bool {
|
|
self.0
|
|
}
|
|
}
|
|
|
|
impl From<bool> for Bool {
|
|
fn from(b: bool) -> Bool {
|
|
Bool::new(b)
|
|
}
|
|
}
|
|
|
|
impl Crdt for Bool {
|
|
fn merge(&mut self, other: &Self) {
|
|
self.0 = self.0 || other.0;
|
|
}
|
|
}
|