From 5ffcdb4634260c66b0db60e1e9de18866b5be550 Mon Sep 17 00:00:00 2001 From: Lapineige Date: Sat, 19 Aug 2023 15:17:51 +0000 Subject: [PATCH 001/538] fix typo --- doc/book/connect/apps/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/book/connect/apps/index.md b/doc/book/connect/apps/index.md index 83aadec2..0ebb01b4 100644 --- a/doc/book/connect/apps/index.md +++ b/doc/book/connect/apps/index.md @@ -146,7 +146,7 @@ Keep the Key ID and the Secret key in a pad, they will be needed later. We need two buckets, one for normal videos (named peertube-video) and one for webtorrent videos (named peertube-playlist). ```bash -garage bucket create peertube-video +garage bucket create peertube-videos garage bucket create peertube-playlist ``` From 47e7f9e1229f3c5e25708cedd60eeb2e0e1a6cd2 Mon Sep 17 00:00:00 2001 From: Lapineige Date: Sat, 19 Aug 2023 20:29:24 +0000 Subject: [PATCH 002/538] another typo --- doc/book/connect/apps/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/book/connect/apps/index.md b/doc/book/connect/apps/index.md index 0ebb01b4..baf6ba50 100644 --- a/doc/book/connect/apps/index.md +++ b/doc/book/connect/apps/index.md @@ -216,7 +216,7 @@ object_storage: # Same settings but for webtorrent videos videos: - bucket_name: 'peertube-video' + bucket_name: 'peertube-videos' prefix: '' # You must fill this field to make Peertube use our reverse proxy/website logic base_url: 'http://peertube-videos.web.garage.localhost' From 9ac1d5be0eba1b3b35f7fb2f99fe8df549044197 Mon Sep 17 00:00:00 2001 From: Alex Auvolat Date: Wed, 27 Sep 2023 13:38:17 +0200 Subject: [PATCH 003/538] add upgrade test for garage 0.8 -> 0.9 --- .drone.yml | 8 ++++- script/dev-bucket.sh | 17 ++++++++-- script/dev-cluster.sh | 18 ++++++---- script/dev-configure.sh | 34 ++++++++++++++----- script/test-upgrade.sh | 75 +++++++++++++++++++++++++++++++++++++++++ 5 files changed, 133 insertions(+), 19 deletions(-) create mode 100755 script/test-upgrade.sh diff --git a/.drone.yml b/.drone.yml index 04663a22..a274be29 100644 --- a/.drone.yml +++ b/.drone.yml @@ -42,6 +42,12 @@ steps: - nix-build --no-build-output --attr clippy.amd64 --argstr git_version ${DRONE_TAG:-$DRONE_COMMIT} - nix-shell --attr integration --run ./script/test-smoke.sh || (cat /tmp/garage.log; false) + - name: upgrade tests + image: nixpkgs/nix:nixos-22.05 + commands: + - nix-build --no-build-output --attr clippy.amd64 --argstr git_version ${DRONE_TAG:-$DRONE_COMMIT} + - nix-shell --attr integration --run "./script/test-upgrade.sh v0.8.4 x86_64-unknown-linux-musl" || (cat /tmp/garage.log; false) + trigger: event: - custom @@ -285,6 +291,6 @@ trigger: --- kind: signature -hmac: 24aebbcdba84fd0cdf963061d7bb72ae5b915bfdd0f50c7b019001126fb7fa56 +hmac: dcf68ed6536e3fd9b359377e4c6c1d321fa9cc0f6fe5645d69c8f1d604569b4c ... diff --git a/script/dev-bucket.sh b/script/dev-bucket.sh index 33d739fa..708c2c43 100755 --- a/script/dev-bucket.sh +++ b/script/dev-bucket.sh @@ -9,11 +9,22 @@ GARAGE_RELEASE="${REPO_FOLDER}/target/release/" NIX_RELEASE="${REPO_FOLDER}/result/bin/" PATH="${GARAGE_DEBUG}:${GARAGE_RELEASE}:${NIX_RELEASE}:$PATH" -garage -c /tmp/config.1.toml bucket create eprouvette -KEY_INFO=$(garage -c /tmp/config.1.toml key create opérateur) +if [ -z "$GARAGE_BIN" ]; then + GARAGE_BIN=$(which garage || exit 1) + echo -en "Found garage at: ${GARAGE_BIN}\n" +else + echo -en "Using garage binary at: ${GARAGE_BIN}\n" +fi + +$GARAGE_BIN -c /tmp/config.1.toml bucket create eprouvette +if [ "$GARAGE_08" = "1" ]; then + KEY_INFO=$($GARAGE_BIN -c /tmp/config.1.toml key new --name opérateur) +else + KEY_INFO=$($GARAGE_BIN -c /tmp/config.1.toml key create opérateur) +fi ACCESS_KEY=`echo $KEY_INFO|grep -Po 'GK[a-f0-9]+'` SECRET_KEY=`echo $KEY_INFO|grep -Po 'Secret key: [a-f0-9]+'|grep -Po '[a-f0-9]+$'` -garage -c /tmp/config.1.toml bucket allow eprouvette --read --write --owner --key $ACCESS_KEY +$GARAGE_BIN -c /tmp/config.1.toml bucket allow eprouvette --read --write --owner --key $ACCESS_KEY echo "$ACCESS_KEY $SECRET_KEY" > /tmp/garage.s3 echo "Bucket s3://eprouvette created. Credentials stored in /tmp/garage.s3." diff --git a/script/dev-cluster.sh b/script/dev-cluster.sh index fa0a950e..6b39255a 100755 --- a/script/dev-cluster.sh +++ b/script/dev-cluster.sh @@ -14,8 +14,13 @@ export RUST_BACKTRACE=1 export RUST_LOG=garage=info,garage_api=debug MAIN_LABEL="\e[${FANCYCOLORS[0]}[main]\e[49m" -WHICH_GARAGE=$(which garage || exit 1) -echo -en "${MAIN_LABEL} Found garage at: ${WHICH_GARAGE}\n" +if [ -z "$GARAGE_BIN" ]; then + GARAGE_BIN=$(which garage || exit 1) + echo -en "${MAIN_LABEL} Found garage at: ${GARAGE_BIN}\n" +else + echo -en "${MAIN_LABEL} Using garage binary at: ${GARAGE_BIN}\n" +fi +$GARAGE_BIN --version NETWORK_SECRET="$(openssl rand -hex 32)" @@ -28,6 +33,7 @@ LABEL="\e[${FANCYCOLORS[$count]}[$count]\e[49m" cat > $CONF_PATH <&1|while read r; do echo -en "$LABEL $r\n"; done) & +($GARAGE_BIN -c /tmp/config.$count.toml server 2>&1|while read r; do echo -en "$LABEL $r\n"; done) & done # >>>>>>>>>>>>>>>> END FOR LOOP ON NODES @@ -73,14 +79,14 @@ fi sleep 3 # Establish connections between nodes for count in $(seq 1 3); do - NODE=$(garage -c /tmp/config.$count.toml node id -q) + NODE=$($GARAGE_BIN -c /tmp/config.$count.toml node id -q) for count2 in $(seq 1 3); do - garage -c /tmp/config.$count2.toml node connect $NODE + $GARAGE_BIN -c /tmp/config.$count2.toml node connect $NODE done done RETRY=120 -until garage -c /tmp/config.1.toml status 2>&1|grep -q HEALTHY ; do +until $GARAGE_BIN -c /tmp/config.1.toml status 2>&1|grep -q HEALTHY ; do (( RETRY-- )) if (( RETRY <= 0 )); then echo -en "${MAIN_LABEL} Garage did not start" diff --git a/script/dev-configure.sh b/script/dev-configure.sh index 9c24bf4b..0649cdbe 100755 --- a/script/dev-configure.sh +++ b/script/dev-configure.sh @@ -9,9 +9,17 @@ GARAGE_RELEASE="${REPO_FOLDER}/target/release/" NIX_RELEASE="${REPO_FOLDER}/result/bin/" PATH="${GARAGE_DEBUG}:${GARAGE_RELEASE}:${NIX_RELEASE}:$PATH" +if [ -z "$GARAGE_BIN" ]; then + GARAGE_BIN=$(which garage || exit 1) + echo -en "Found garage at: ${GARAGE_BIN}\n" +else + echo -en "Using garage binary at: ${GARAGE_BIN}\n" +fi +$GARAGE_BIN --version + sleep 5 RETRY=120 -until garage -c /tmp/config.1.toml status 2>&1|grep -q HEALTHY ; do +until $GARAGE_BIN -c /tmp/config.1.toml status 2>&1|grep -q HEALTHY ; do (( RETRY-- )) if (( RETRY <= 0 )); then echo "garage did not start in time, failing." @@ -21,12 +29,20 @@ until garage -c /tmp/config.1.toml status 2>&1|grep -q HEALTHY ; do sleep 1 done -garage -c /tmp/config.1.toml status \ - | grep 'NO ROLE' \ - | grep -Po '^[0-9a-f]+' \ - | while read id; do - garage -c /tmp/config.1.toml layout assign $id -z dc1 -c 1G - done +if [ "$GARAGE_08" = "1" ]; then + $GARAGE_BIN -c /tmp/config.1.toml status \ + | grep 'NO ROLE' \ + | grep -Po '^[0-9a-f]+' \ + | while read id; do + $GARAGE_BIN -c /tmp/config.1.toml layout assign $id -z dc1 -c 1 + done +else + $GARAGE_BIN -c /tmp/config.1.toml status \ + | grep 'NO ROLE' \ + | grep -Po '^[0-9a-f]+' \ + | while read id; do + $GARAGE_BIN -c /tmp/config.1.toml layout assign $id -z dc1 -c 1G + done +fi -garage -c /tmp/config.1.toml layout config -r 1 -garage -c /tmp/config.1.toml layout apply --version 1 +$GARAGE_BIN -c /tmp/config.1.toml layout apply --version 1 diff --git a/script/test-upgrade.sh b/script/test-upgrade.sh new file mode 100755 index 00000000..dc25e7c6 --- /dev/null +++ b/script/test-upgrade.sh @@ -0,0 +1,75 @@ +#!/usr/bin/env bash + +set -ex + +export LC_ALL=C.UTF-8 +export LANG=C.UTF-8 +SCRIPT_FOLDER="`dirname \"$0\"`" +REPO_FOLDER="${SCRIPT_FOLDER}/../" +GARAGE_DEBUG="${REPO_FOLDER}/target/debug/" +GARAGE_RELEASE="${REPO_FOLDER}/target/release/" +NIX_RELEASE="${REPO_FOLDER}/result/bin/:${REPO_FOLDER}/result-bin/bin/" +PATH="${GARAGE_DEBUG}:${GARAGE_RELEASE}:${NIX_RELEASE}:$PATH" + +OLD_VERSION="$1" +ARCH="$2" + + +echo "Downloading old garage binary..." +curl https://garagehq.deuxfleurs.fr/_releases/$OLD_VERSION/$ARCH/garage > /tmp/old_garage +chmod +x /tmp/old_garage + +echo "============= insert data into old version cluster =================" + +export GARAGE_BIN=/tmp/old_garage +if echo $OLD_VERSION | grep 'v0\.8\.'; then + echo "Detected Garage v0.8.x" + export GARAGE_08=1 +fi + +echo "⏳ Setup cluster using old version" +$GARAGE_BIN --version +${SCRIPT_FOLDER}/dev-clean.sh +${SCRIPT_FOLDER}/dev-cluster.sh > /tmp/garage.log 2>&1 & +sleep 6 +${SCRIPT_FOLDER}/dev-configure.sh +${SCRIPT_FOLDER}/dev-bucket.sh + +echo "🛠️ Inserting data in old cluster" +source ${SCRIPT_FOLDER}/dev-env-rclone.sh +rclone copy "${SCRIPT_FOLDER}/../.git/" garage:eprouvette/test_dotgit --stats=1s --stats-log-level=NOTICE --stats-one-line + +echo "🏁 Stopping old cluster" +killall -INT old_garage +sleep 2 +killall -9 old_garage || true + +echo "🏁 Removing old garage version" +rm -rv $GARAGE_BIN +export -n GARAGE_BIN +export -n GARAGE_08 + +echo "================ read data from new cluster ===================" + +echo "⏳ Setup cluster using new version" +pwd +ls +export GARAGE_BIN=$(which garage) +$GARAGE_BIN --version +${SCRIPT_FOLDER}/dev-cluster.sh >> /tmp/garage.log 2>&1 & +sleep 3 + +echo "🛠️ Retrieving data from old cluster" +rclone copy garage:eprouvette/test_dotgit /tmp/test_dotgit --stats=1s --stats-log-level=NOTICE --stats-one-line --fast-list + +if ! diff <(find "${SCRIPT_FOLDER}/../.git" -type f | xargs md5sum | cut -d ' ' -f 1 | sort) <(find /tmp/test_dotgit -type f | xargs md5sum | cut -d ' ' -f 1 | sort); then + echo "TEST FAILURE: directories are different" + exit 1 +fi +rm -r /tmp/test_dotgit + +echo "🏁 Teardown" +rm -rf /tmp/garage-{data,meta}-* +rm -rf /tmp/config.*.toml + +echo "✅ Success" From 6086a3fa072571c9f2a9903175a9ca36ee497f0d Mon Sep 17 00:00:00 2001 From: networkException Date: Fri, 29 Sep 2023 18:36:50 +0200 Subject: [PATCH 004/538] cargo: add hyperlocal as a dependency --- Cargo.lock | 16 ++++++++++++++++ Cargo.nix | 22 +++++++++++++++++++++- src/api/Cargo.toml | 1 + src/web/Cargo.toml | 3 +++ 4 files changed, 41 insertions(+), 1 deletion(-) diff --git a/Cargo.lock b/Cargo.lock index 8c6acac8..32fa9655 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1271,6 +1271,7 @@ dependencies = [ "http-range", "httpdate", "hyper", + "hyperlocal", "idna", "md-5", "multer", @@ -1459,8 +1460,10 @@ dependencies = [ "garage_util", "http", "hyper", + "hyperlocal", "opentelemetry", "percent-encoding", + "tokio", "tracing", ] @@ -1770,6 +1773,19 @@ dependencies = [ "tokio-io-timeout", ] +[[package]] +name = "hyperlocal" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0fafdf7b2b2de7c9784f76e02c0935e65a8117ec3b768644379983ab333ac98c" +dependencies = [ + "futures-util", + "hex", + "hyper", + "pin-project", + "tokio", +] + [[package]] name = "iana-time-zone" version = "0.1.57" diff --git a/Cargo.nix b/Cargo.nix index 31b1304d..18b2d359 100644 --- a/Cargo.nix +++ b/Cargo.nix @@ -33,7 +33,7 @@ args@{ ignoreLockHash, }: let - nixifiedLockHash = "ab8dba64b487c83fa25ebafbad99538d2f38afa5b53f83e4e031b7909665166b"; + nixifiedLockHash = "b73d35e98dc62acc3b01aba2cb825ba6e99217e46781b8c59f8e0ceef34e79d6"; workspaceSrc = if args.workspaceSrc == null then ./. else args.workspaceSrc; currentLockHash = builtins.hashFile "sha256" (workspaceSrc + /Cargo.lock); lockHashIgnored = if ignoreLockHash @@ -1809,6 +1809,7 @@ in http_range = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".http-range."0.1.5" { inherit profileName; }).out; httpdate = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".httpdate."1.0.3" { inherit profileName; }).out; hyper = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".hyper."0.14.27" { inherit profileName; }).out; + hyperlocal = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".hyperlocal."0.8.0" { inherit profileName; }).out; idna = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".idna."0.4.0" { inherit profileName; }).out; md5 = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".md-5."0.10.5" { inherit profileName; }).out; multer = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".multer."2.1.0" { inherit profileName; }).out; @@ -2059,8 +2060,10 @@ in garage_util = (rustPackages."unknown".garage_util."0.8.4" { inherit profileName; }).out; http = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".http."0.2.9" { inherit profileName; }).out; hyper = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".hyper."0.14.27" { inherit profileName; }).out; + hyperlocal = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".hyperlocal."0.8.0" { inherit profileName; }).out; opentelemetry = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".opentelemetry."0.17.0" { inherit profileName; }).out; percent_encoding = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".percent-encoding."2.3.0" { inherit profileName; }).out; + tokio = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".tokio."1.32.0" { inherit profileName; }).out; tracing = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".tracing."0.1.37" { inherit profileName; }).out; }; }); @@ -2486,6 +2489,23 @@ in }; }); + "registry+https://github.com/rust-lang/crates.io-index".hyperlocal."0.8.0" = overridableMkRustCrate (profileName: rec { + name = "hyperlocal"; + version = "0.8.0"; + registry = "registry+https://github.com/rust-lang/crates.io-index"; + src = fetchCratesIo { inherit name version; sha256 = "0fafdf7b2b2de7c9784f76e02c0935e65a8117ec3b768644379983ab333ac98c"; }; + features = builtins.concatLists [ + [ "server" ] + ]; + dependencies = { + futures_util = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".futures-util."0.3.28" { inherit profileName; }).out; + hex = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".hex."0.4.3" { inherit profileName; }).out; + hyper = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".hyper."0.14.27" { inherit profileName; }).out; + pin_project = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".pin-project."1.1.3" { inherit profileName; }).out; + tokio = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".tokio."1.32.0" { inherit profileName; }).out; + }; + }); + "registry+https://github.com/rust-lang/crates.io-index".iana-time-zone."0.1.57" = overridableMkRustCrate (profileName: rec { name = "iana-time-zone"; version = "0.1.57"; diff --git a/src/api/Cargo.toml b/src/api/Cargo.toml index 6425591f..cb9e2e55 100644 --- a/src/api/Cargo.toml +++ b/src/api/Cargo.toml @@ -45,6 +45,7 @@ http = "0.2" httpdate = "1.0" http-range = "0.1" hyper = { version = "0.14", features = ["server", "http1", "runtime", "tcp", "stream"] } +hyperlocal = { version = "0.8.0", default-features = false, features = ["server"] } multer = "2.0" percent-encoding = "2.1.0" roxmltree = "0.18" diff --git a/src/web/Cargo.toml b/src/web/Cargo.toml index 6d0eba3a..eec47bcd 100644 --- a/src/web/Cargo.toml +++ b/src/web/Cargo.toml @@ -27,5 +27,8 @@ futures = "0.3" http = "0.2" hyper = { version = "0.14", features = ["server", "http1", "runtime", "tcp", "stream"] } +hyperlocal = { version = "0.8.0", default-features = false, features = ["server"] } + +tokio = { version = "1.0", default-features = false, features = ["net"] } opentelemetry = "0.17" From 10195f1567e82a630e808bc2700424bce28238c0 Mon Sep 17 00:00:00 2001 From: networkException Date: Fri, 29 Sep 2023 18:37:36 +0200 Subject: [PATCH 005/538] util: add helper sum type for unix and tcp socket addresses this patch introduces a new sum type that can represent either a tcp socket address or a unix domain socket path. --- src/util/lib.rs | 1 + src/util/socket_address.rs | 44 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 45 insertions(+) create mode 100644 src/util/socket_address.rs diff --git a/src/util/lib.rs b/src/util/lib.rs index 15f0f829..7df77959 100644 --- a/src/util/lib.rs +++ b/src/util/lib.rs @@ -14,6 +14,7 @@ pub mod forwarded_headers; pub mod metrics; pub mod migrate; pub mod persister; +pub mod socket_address; pub mod time; pub mod tranquilizer; pub mod version; diff --git a/src/util/socket_address.rs b/src/util/socket_address.rs new file mode 100644 index 00000000..f01225f6 --- /dev/null +++ b/src/util/socket_address.rs @@ -0,0 +1,44 @@ +use std::fmt::{Debug, Display, Formatter}; +use std::net::SocketAddr; +use std::path::PathBuf; +use std::str::FromStr; + +use serde::de::Error; +use serde::{Deserialize, Deserializer}; + +#[derive(Debug, Clone)] +pub enum UnixOrTCPSocketAddress { + TCPSocket(SocketAddr), + UnixSocket(PathBuf), +} + +impl Display for UnixOrTCPSocketAddress { + fn fmt(&self, formatter: &mut Formatter<'_>) -> std::fmt::Result { + match self { + UnixOrTCPSocketAddress::TCPSocket(address) => write!(formatter, "http://{}", address), + UnixOrTCPSocketAddress::UnixSocket(path) => { + write!(formatter, "http+unix://{}", path.to_string_lossy()) + } + } + } +} + +impl<'de> Deserialize<'de> for UnixOrTCPSocketAddress { + fn deserialize(deserializer: D) -> Result + where + D: Deserializer<'de>, + { + let string = String::deserialize(deserializer)?; + let string = string.as_str(); + + if string.starts_with("/") { + Ok(UnixOrTCPSocketAddress::UnixSocket( + PathBuf::from_str(string).map_err(Error::custom)?, + )) + } else { + Ok(UnixOrTCPSocketAddress::TCPSocket( + SocketAddr::from_str(string).map_err(Error::custom)?, + )) + } + } +} From 7353038a64cc53cc01c4ec7f21671d3443177707 Mon Sep 17 00:00:00 2001 From: networkException Date: Fri, 29 Sep 2023 18:38:30 +0200 Subject: [PATCH 006/538] config: allow using paths for unix domain sockets in various places this patch updates the config format to also allow paths in bind addresses for unix domain sockets. this has been added to all apis except rpc. --- src/util/config.rs | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/src/util/config.rs b/src/util/config.rs index 724f9404..ebcb5fbe 100644 --- a/src/util/config.rs +++ b/src/util/config.rs @@ -7,6 +7,7 @@ use std::path::PathBuf; use serde::{de, Deserialize}; use crate::error::Error; +use crate::socket_address::UnixOrTCPSocketAddress; /// Represent the whole configuration #[derive(Deserialize, Debug, Clone)] @@ -102,7 +103,7 @@ pub struct Config { #[derive(Deserialize, Debug, Clone)] pub struct S3ApiConfig { /// Address and port to bind for api serving - pub api_bind_addr: Option, + pub api_bind_addr: Option, /// S3 region to use pub s3_region: String, /// Suffix to remove from domain name to find bucket. If None, @@ -114,14 +115,14 @@ pub struct S3ApiConfig { #[derive(Deserialize, Debug, Clone)] pub struct K2VApiConfig { /// Address and port to bind for api serving - pub api_bind_addr: SocketAddr, + pub api_bind_addr: UnixOrTCPSocketAddress, } /// Configuration for serving files as normal web server #[derive(Deserialize, Debug, Clone)] pub struct WebConfig { /// Address and port to bind for web serving - pub bind_addr: SocketAddr, + pub bind_addr: UnixOrTCPSocketAddress, /// Suffix to remove from domain name to find bucket pub root_domain: String, } @@ -130,7 +131,7 @@ pub struct WebConfig { #[derive(Deserialize, Debug, Clone, Default)] pub struct AdminConfig { /// Address and port to bind for admin API serving - pub api_bind_addr: Option, + pub api_bind_addr: Option, /// Bearer token to use to scrape metrics pub metrics_token: Option, From 8ec6a53b35e5bb742640a77ff282f2474c63af54 Mon Sep 17 00:00:00 2001 From: networkException Date: Fri, 29 Sep 2023 18:41:00 +0200 Subject: [PATCH 007/538] everywhere: support unix sockets when binding in various places this patch implements binding to paths as a unix socket for generic server and web server. --- src/api/admin/api_server.rs | 4 +-- src/api/generic_server.rs | 56 +++++++++++++++++++++++++++++------ src/api/k2v/api_server.rs | 4 +-- src/api/s3/api_server.rs | 4 +-- src/garage/server.rs | 10 ++++--- src/web/web_server.rs | 58 +++++++++++++++++++++++++++++++------ 6 files changed, 108 insertions(+), 28 deletions(-) diff --git a/src/api/admin/api_server.rs b/src/api/admin/api_server.rs index 50c79120..43497bad 100644 --- a/src/api/admin/api_server.rs +++ b/src/api/admin/api_server.rs @@ -1,5 +1,4 @@ use std::collections::HashMap; -use std::net::SocketAddr; use std::sync::Arc; use async_trait::async_trait; @@ -18,6 +17,7 @@ use prometheus::{Encoder, TextEncoder}; use garage_model::garage::Garage; use garage_rpc::system::ClusterHealthStatus; use garage_util::error::Error as GarageError; +use garage_util::socket_address::UnixOrTCPSocketAddress; use crate::generic_server::*; @@ -61,7 +61,7 @@ impl AdminApiServer { pub async fn run( self, - bind_addr: SocketAddr, + bind_addr: UnixOrTCPSocketAddress, shutdown_signal: impl Future, ) -> Result<(), GarageError> { let region = self.garage.config.s3_api.s3_region.clone(); diff --git a/src/api/generic_server.rs b/src/api/generic_server.rs index 757b85ec..42c65ab7 100644 --- a/src/api/generic_server.rs +++ b/src/api/generic_server.rs @@ -1,4 +1,5 @@ -use std::net::SocketAddr; +use std::fs::{self, Permissions}; +use std::os::unix::fs::PermissionsExt; use std::sync::Arc; use async_trait::async_trait; @@ -11,6 +12,10 @@ use hyper::service::{make_service_fn, service_fn}; use hyper::{Body, Request, Response, Server}; use hyper::{HeaderMap, StatusCode}; +use hyperlocal::UnixServerExt; + +use tokio::net::UnixStream; + use opentelemetry::{ global, metrics::{Counter, ValueRecorder}, @@ -21,6 +26,7 @@ use opentelemetry::{ use garage_util::error::Error as GarageError; use garage_util::forwarded_headers; use garage_util::metrics::{gen_trace_id, RecordDuration}; +use garage_util::socket_address::UnixOrTCPSocketAddress; pub(crate) trait ApiEndpoint: Send + Sync + 'static { fn name(&self) -> &'static str; @@ -91,10 +97,10 @@ impl ApiServer { pub async fn run_server( self: Arc, - bind_addr: SocketAddr, + bind_addr: UnixOrTCPSocketAddress, shutdown_signal: impl Future, ) -> Result<(), GarageError> { - let service = make_service_fn(|conn: &AddrStream| { + let tcp_service = make_service_fn(|conn: &AddrStream| { let this = self.clone(); let client_addr = conn.remote_addr(); @@ -102,28 +108,60 @@ impl ApiServer { Ok::<_, GarageError>(service_fn(move |req: Request| { let this = this.clone(); - this.handler(req, client_addr) + this.handler(req, client_addr.to_string()) })) } }); - let server = Server::bind(&bind_addr).serve(service); + let unix_service = make_service_fn(|_: &UnixStream| { + let this = self.clone(); + + let path = bind_addr.to_string(); + async move { + Ok::<_, GarageError>(service_fn(move |req: Request| { + let this = this.clone(); + + this.handler(req, path.clone()) + })) + } + }); - let graceful = server.with_graceful_shutdown(shutdown_signal); info!( - "{} API server listening on http://{}", + "{} API server listening on {}", A::API_NAME_DISPLAY, bind_addr ); - graceful.await?; + match bind_addr { + UnixOrTCPSocketAddress::TCPSocket(addr) => { + Server::bind(&addr) + .serve(tcp_service) + .with_graceful_shutdown(shutdown_signal) + .await? + } + UnixOrTCPSocketAddress::UnixSocket(ref path) => { + if path.exists() { + fs::remove_file(path)? + } + + let bound = Server::bind_unix(path)?; + + fs::set_permissions(path, Permissions::from_mode(0o222))?; + + bound + .serve(unix_service) + .with_graceful_shutdown(shutdown_signal) + .await?; + } + }; + Ok(()) } async fn handler( self: Arc, req: Request, - addr: SocketAddr, + addr: String, ) -> Result, GarageError> { let uri = req.uri().clone(); diff --git a/src/api/k2v/api_server.rs b/src/api/k2v/api_server.rs index bb85b2e7..413fd61c 100644 --- a/src/api/k2v/api_server.rs +++ b/src/api/k2v/api_server.rs @@ -1,4 +1,3 @@ -use std::net::SocketAddr; use std::sync::Arc; use async_trait::async_trait; @@ -9,6 +8,7 @@ use hyper::{Body, Method, Request, Response}; use opentelemetry::{trace::SpanRef, KeyValue}; use garage_util::error::Error as GarageError; +use garage_util::socket_address::UnixOrTCPSocketAddress; use garage_model::garage::Garage; @@ -37,7 +37,7 @@ pub(crate) struct K2VApiEndpoint { impl K2VApiServer { pub async fn run( garage: Arc, - bind_addr: SocketAddr, + bind_addr: UnixOrTCPSocketAddress, s3_region: String, shutdown_signal: impl Future, ) -> Result<(), GarageError> { diff --git a/src/api/s3/api_server.rs b/src/api/s3/api_server.rs index 27837297..cc2091b8 100644 --- a/src/api/s3/api_server.rs +++ b/src/api/s3/api_server.rs @@ -1,4 +1,3 @@ -use std::net::SocketAddr; use std::sync::Arc; use async_trait::async_trait; @@ -10,6 +9,7 @@ use hyper::{Body, Request, Response}; use opentelemetry::{trace::SpanRef, KeyValue}; use garage_util::error::Error as GarageError; +use garage_util::socket_address::UnixOrTCPSocketAddress; use garage_model::garage::Garage; use garage_model::key_table::Key; @@ -44,7 +44,7 @@ pub(crate) struct S3ApiEndpoint { impl S3ApiServer { pub async fn run( garage: Arc, - addr: SocketAddr, + addr: UnixOrTCPSocketAddress, s3_region: String, shutdown_signal: impl Future, ) -> Result<(), GarageError> { diff --git a/src/garage/server.rs b/src/garage/server.rs index 472616c7..3ad10b72 100644 --- a/src/garage/server.rs +++ b/src/garage/server.rs @@ -79,7 +79,7 @@ pub async fn run_server(config_file: PathBuf, secrets: Secrets) -> Result<(), Er "S3 API", tokio::spawn(S3ApiServer::run( garage.clone(), - *s3_bind_addr, + s3_bind_addr.clone(), config.s3_api.s3_region.clone(), wait_from(watch_cancel.clone()), )), @@ -94,7 +94,7 @@ pub async fn run_server(config_file: PathBuf, secrets: Secrets) -> Result<(), Er "K2V API", tokio::spawn(K2VApiServer::run( garage.clone(), - config.k2v_api.as_ref().unwrap().api_bind_addr, + config.k2v_api.as_ref().unwrap().api_bind_addr.clone(), config.s3_api.s3_region.clone(), wait_from(watch_cancel.clone()), )), @@ -110,7 +110,7 @@ pub async fn run_server(config_file: PathBuf, secrets: Secrets) -> Result<(), Er "Web", tokio::spawn(WebServer::run( garage.clone(), - web_config.bind_addr, + web_config.bind_addr.clone(), web_config.root_domain.clone(), wait_from(watch_cancel.clone()), )), @@ -121,7 +121,9 @@ pub async fn run_server(config_file: PathBuf, secrets: Secrets) -> Result<(), Er info!("Launching Admin API server..."); servers.push(( "Admin", - tokio::spawn(admin_server.run(*admin_bind_addr, wait_from(watch_cancel.clone()))), + tokio::spawn( + admin_server.run(admin_bind_addr.clone(), wait_from(watch_cancel.clone())), + ), )); } diff --git a/src/web/web_server.rs b/src/web/web_server.rs index 287aef1a..73780efb 100644 --- a/src/web/web_server.rs +++ b/src/web/web_server.rs @@ -1,4 +1,6 @@ -use std::{convert::Infallible, net::SocketAddr, sync::Arc}; +use std::fs::{self, Permissions}; +use std::os::unix::prelude::PermissionsExt; +use std::{convert::Infallible, sync::Arc}; use futures::future::Future; @@ -9,6 +11,10 @@ use hyper::{ Body, Method, Request, Response, Server, StatusCode, }; +use hyperlocal::UnixServerExt; + +use tokio::net::UnixStream; + use opentelemetry::{ global, metrics::{Counter, ValueRecorder}, @@ -32,6 +38,7 @@ use garage_util::data::Uuid; use garage_util::error::Error as GarageError; use garage_util::forwarded_headers; use garage_util::metrics::{gen_trace_id, RecordDuration}; +use garage_util::socket_address::UnixOrTCPSocketAddress; struct WebMetrics { request_counter: Counter, @@ -69,7 +76,7 @@ impl WebServer { /// Run a web server pub async fn run( garage: Arc, - addr: SocketAddr, + addr: UnixOrTCPSocketAddress, root_domain: String, shutdown_signal: impl Future, ) -> Result<(), GarageError> { @@ -80,7 +87,7 @@ impl WebServer { root_domain, }); - let service = make_service_fn(|conn: &AddrStream| { + let tcp_service = make_service_fn(|conn: &AddrStream| { let web_server = web_server.clone(); let client_addr = conn.remote_addr(); @@ -88,23 +95,56 @@ impl WebServer { Ok::<_, Error>(service_fn(move |req: Request| { let web_server = web_server.clone(); - web_server.handle_request(req, client_addr) + web_server.handle_request(req, client_addr.to_string()) })) } }); - let server = Server::bind(&addr).serve(service); - let graceful = server.with_graceful_shutdown(shutdown_signal); - info!("Web server listening on http://{}", addr); + let unix_service = make_service_fn(|_: &UnixStream| { + let web_server = web_server.clone(); + + let path = addr.to_string(); + async move { + Ok::<_, Error>(service_fn(move |req: Request| { + let web_server = web_server.clone(); + + web_server.handle_request(req, path.clone()) + })) + } + }); + + info!("Web server listening on {}", addr); + + match addr { + UnixOrTCPSocketAddress::TCPSocket(addr) => { + Server::bind(&addr) + .serve(tcp_service) + .with_graceful_shutdown(shutdown_signal) + .await? + } + UnixOrTCPSocketAddress::UnixSocket(ref path) => { + if path.exists() { + fs::remove_file(path)? + } + + let bound = Server::bind_unix(path)?; + + fs::set_permissions(path, Permissions::from_mode(0o222))?; + + bound + .serve(unix_service) + .with_graceful_shutdown(shutdown_signal) + .await?; + } + }; - graceful.await?; Ok(()) } async fn handle_request( self: Arc, req: Request, - addr: SocketAddr, + addr: String, ) -> Result, Infallible> { if let Ok(forwarded_for_ip_addr) = forwarded_headers::handle_forwarded_for_headers(req.headers()) From cb359b4434201b03a3f62b8950d4d6b6f1ab3b36 Mon Sep 17 00:00:00 2001 From: Florian Klink Date: Mon, 2 Oct 2023 15:13:05 +0300 Subject: [PATCH 008/538] doc: update endpoint_url documentation Since `awscli` `>=1.29.0` or `>=2.13.0` it is now possible to use the `AWS_ENDPOINT_URL` environment variable, or the `endpoint_url` config key to override the endpoint URL. This means, the aws bash function to wrap with --endpoint-url is not necessary anymore. Update invocations to reflect that. https://docs.aws.amazon.com/sdkref/latest/guide/feature-ss-endpoints.html https://github.com/aws/aws-cli/issues/4454#issuecomment-1626116607 --- doc/book/connect/apps/index.md | 4 ++-- doc/book/connect/cli.md | 7 ++++--- doc/book/quick-start/_index.md | 6 ++++-- script/dev-env-aws.sh | 2 +- 4 files changed, 11 insertions(+), 8 deletions(-) diff --git a/doc/book/connect/apps/index.md b/doc/book/connect/apps/index.md index 83aadec2..3f59530a 100644 --- a/doc/book/connect/apps/index.md +++ b/doc/book/connect/apps/index.md @@ -421,7 +421,7 @@ Now we can write a simple script (eg `~/.local/bin/matrix-cache-gc`): ## CONFIGURATION ## AWS_ACCESS_KEY_ID=GKxxx AWS_SECRET_ACCESS_KEY=xxxx -S3_ENDPOINT=http://localhost:3900 +AWS_ENDPOINT_URL=http://localhost:3900 S3_BUCKET=matrix MEDIA_STORE=/var/lib/matrix-synapse/media PG_USER=matrix @@ -442,7 +442,7 @@ EOF s3_media_upload update-db 1d s3_media_upload --no-progress check-deleted $MEDIA_STORE -s3_media_upload --no-progress upload $MEDIA_STORE $S3_BUCKET --delete --endpoint-url $S3_ENDPOINT +s3_media_upload --no-progress upload $MEDIA_STORE $S3_BUCKET --delete --endpoint-url $AWS_ENDPOINT_URL ``` This script will list all the medias that were not accessed in the 24 hours according to your database. diff --git a/doc/book/connect/cli.md b/doc/book/connect/cli.md index 591ac151..c9ffd4f4 100644 --- a/doc/book/connect/cli.md +++ b/doc/book/connect/cli.md @@ -70,16 +70,17 @@ Then a file named `~/.aws/config` and put: ```toml [default] region=garage +endpoint_url=http://127.0.0.1:3900 ``` Now, supposing Garage is listening on `http://127.0.0.1:3900`, you can list your buckets with: ```bash -aws --endpoint-url http://127.0.0.1:3900 s3 ls +aws s3 ls ``` -Passing the `--endpoint-url` parameter to each command is annoying but AWS developers do not provide a corresponding configuration entry. -As a workaround, you can redefine the aws command by editing the file `~/.bashrc`: +If you're using awscli `<1.29.0` or `<2.13.0`, you need to pass `--endpoint-url` to each CLI invocation explicitly. +As a workaround, you can redefine the aws command by editing the file `~/.bashrc` in this case: ``` function aws { command aws --endpoint-url http://127.0.0.1:3900 $@ ; } diff --git a/doc/book/quick-start/_index.md b/doc/book/quick-start/_index.md index 4f974ea5..08932775 100644 --- a/doc/book/quick-start/_index.md +++ b/doc/book/quick-start/_index.md @@ -269,12 +269,14 @@ named `~/.awsrc` with this content: export AWS_ACCESS_KEY_ID=xxxx # put your Key ID here export AWS_SECRET_ACCESS_KEY=xxxx # put your Secret key here export AWS_DEFAULT_REGION='garage' -export AWS_ENDPOINT='http://localhost:3900' +export AWS_ENDPOINT_URL='http://localhost:3900' -function aws { command aws --endpoint-url $AWS_ENDPOINT $@ ; } aws --version ``` +Note you need to have at least `awscli` `>=1.29.0` or `>=2.13.0`, otherwise you +need to specify `--endpoint-url` explicitly on each `awscli` invocation. + Now, each time you want to use `awscli` on this target, run: ```bash diff --git a/script/dev-env-aws.sh b/script/dev-env-aws.sh index 9436c2c7..808f9cf1 100644 --- a/script/dev-env-aws.sh +++ b/script/dev-env-aws.sh @@ -1,7 +1,7 @@ export AWS_ACCESS_KEY_ID=`cat /tmp/garage.s3 |cut -d' ' -f1` export AWS_SECRET_ACCESS_KEY=`cat /tmp/garage.s3 |cut -d' ' -f2` export AWS_DEFAULT_REGION='garage' - +# FUTUREWORK: set AWS_ENDPOINT_URL instead, once nixpkgs bumps awscli to >=2.13.0. function aws { command aws --endpoint-url http://127.0.0.1:3911 $@ ; } aws --version From 7907a09acc812f857f283d64c988c69d08acd041 Mon Sep 17 00:00:00 2001 From: networkException Date: Tue, 3 Oct 2023 17:31:40 +0200 Subject: [PATCH 009/538] api: allow custom unix bind mode and use 0o220 for admin server --- src/api/admin/api_server.rs | 2 +- src/api/generic_server.rs | 6 +++++- src/api/k2v/api_server.rs | 2 +- src/api/s3/api_server.rs | 2 +- 4 files changed, 8 insertions(+), 4 deletions(-) diff --git a/src/api/admin/api_server.rs b/src/api/admin/api_server.rs index 43497bad..6f1e44e5 100644 --- a/src/api/admin/api_server.rs +++ b/src/api/admin/api_server.rs @@ -66,7 +66,7 @@ impl AdminApiServer { ) -> Result<(), GarageError> { let region = self.garage.config.s3_api.s3_region.clone(); ApiServer::new(region, self) - .run_server(bind_addr, shutdown_signal) + .run_server(bind_addr, Some(0o220), shutdown_signal) .await } diff --git a/src/api/generic_server.rs b/src/api/generic_server.rs index 42c65ab7..fa346f48 100644 --- a/src/api/generic_server.rs +++ b/src/api/generic_server.rs @@ -98,6 +98,7 @@ impl ApiServer { pub async fn run_server( self: Arc, bind_addr: UnixOrTCPSocketAddress, + unix_bind_addr_mode: Option, shutdown_signal: impl Future, ) -> Result<(), GarageError> { let tcp_service = make_service_fn(|conn: &AddrStream| { @@ -146,7 +147,10 @@ impl ApiServer { let bound = Server::bind_unix(path)?; - fs::set_permissions(path, Permissions::from_mode(0o222))?; + fs::set_permissions( + path, + Permissions::from_mode(unix_bind_addr_mode.unwrap_or(0o222)), + )?; bound .serve(unix_service) diff --git a/src/api/k2v/api_server.rs b/src/api/k2v/api_server.rs index 413fd61c..3a032aba 100644 --- a/src/api/k2v/api_server.rs +++ b/src/api/k2v/api_server.rs @@ -42,7 +42,7 @@ impl K2VApiServer { shutdown_signal: impl Future, ) -> Result<(), GarageError> { ApiServer::new(s3_region, K2VApiServer { garage }) - .run_server(bind_addr, shutdown_signal) + .run_server(bind_addr, None, shutdown_signal) .await } } diff --git a/src/api/s3/api_server.rs b/src/api/s3/api_server.rs index cc2091b8..ecfb48b6 100644 --- a/src/api/s3/api_server.rs +++ b/src/api/s3/api_server.rs @@ -49,7 +49,7 @@ impl S3ApiServer { shutdown_signal: impl Future, ) -> Result<(), GarageError> { ApiServer::new(s3_region, S3ApiServer { garage }) - .run_server(addr, shutdown_signal) + .run_server(addr, None, shutdown_signal) .await } From 6f8a87814be502ecaee49cd37616ec7fe4c5b588 Mon Sep 17 00:00:00 2001 From: networkException Date: Tue, 3 Oct 2023 17:36:10 +0200 Subject: [PATCH 010/538] doc: add documentation for specifying unix socket paths --- doc/book/reference-manual/configuration.md | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/doc/book/reference-manual/configuration.md b/doc/book/reference-manual/configuration.md index 08c013f7..3110aab7 100644 --- a/doc/book/reference-manual/configuration.md +++ b/doc/book/reference-manual/configuration.md @@ -410,6 +410,8 @@ manually. The IP and port on which to bind for accepting S3 API calls. This endpoint does not suport TLS: a reverse proxy should be used to provide it. +Alternatively, since `v0.8.5`, a path can be used to create a unix socket with 0222 mode. + ### `s3_region` Garage will accept S3 API calls that are targetted to the S3 region defined here. @@ -439,6 +441,8 @@ The IP and port on which to bind for accepting HTTP requests to buckets configur for website access. This endpoint does not suport TLS: a reverse proxy should be used to provide it. +Alternatively, since `v0.8.5`, a path can be used to create a unix socket with 0222 mode. + ### `root_domain` The optional suffix appended to bucket names for the corresponding HTTP Host. @@ -458,6 +462,9 @@ If specified, Garage will bind an HTTP server to this port and address, on which it will listen to requests for administration features. See [administration API reference](@/documentation/reference-manual/admin-api.md) to learn more about these features. +Alternatively, since `v0.8.5`, a path can be used to create a unix socket. Note that for security reasons, +the socket will have 0220 mode. Make sure to set user and group permissions accordingly. + ### `metrics_token`, `metrics_token_file` or `GARAGE_METRICS_TOKEN` (env) The token for accessing the Metrics endpoint. If this token is not set, the From 920dec393a80fae5112bc9dd082b8635316d92c3 Mon Sep 17 00:00:00 2001 From: Alex Auvolat Date: Wed, 4 Oct 2023 10:44:42 +0200 Subject: [PATCH 011/538] cli: more precise doc comment --- src/garage/cli/structs.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/garage/cli/structs.rs b/src/garage/cli/structs.rs index c4ebeb1a..651df42e 100644 --- a/src/garage/cli/structs.rs +++ b/src/garage/cli/structs.rs @@ -453,7 +453,7 @@ pub enum RepairWhat { /// Do a full sync of metadata tables #[structopt(name = "tables", version = garage_version())] Tables, - /// Repair (resync/rebalance) the set of stored blocks + /// Repair (resync/rebalance) the set of stored blocks in the cluster #[structopt(name = "blocks", version = garage_version())] Blocks, /// Repropagate object deletions to the version table @@ -471,7 +471,7 @@ pub enum RepairWhat { #[structopt(subcommand)] cmd: ScrubCmd, }, - /// Rebalance data blocks among storage locations + /// Rebalance data blocks among HDDs on individual nodes #[structopt(name = "rebalance", version = garage_version())] Rebalance, } From 9ccc1d6f4abc802626e376f0dc8c2e338f4d0998 Mon Sep 17 00:00:00 2001 From: Alex Auvolat Date: Thu, 5 Oct 2023 10:42:10 +0200 Subject: [PATCH 012/538] move upgrade test to release build --- .drone.yml | 22 +++++++++++++--------- 1 file changed, 13 insertions(+), 9 deletions(-) diff --git a/.drone.yml b/.drone.yml index a274be29..d79a9277 100644 --- a/.drone.yml +++ b/.drone.yml @@ -42,12 +42,6 @@ steps: - nix-build --no-build-output --attr clippy.amd64 --argstr git_version ${DRONE_TAG:-$DRONE_COMMIT} - nix-shell --attr integration --run ./script/test-smoke.sh || (cat /tmp/garage.log; false) - - name: upgrade tests - image: nixpkgs/nix:nixos-22.05 - commands: - - nix-build --no-build-output --attr clippy.amd64 --argstr git_version ${DRONE_TAG:-$DRONE_COMMIT} - - nix-shell --attr integration --run "./script/test-upgrade.sh v0.8.4 x86_64-unknown-linux-musl" || (cat /tmp/garage.log; false) - trigger: event: - custom @@ -71,11 +65,16 @@ steps: - nix-build --no-build-output --attr pkgs.amd64.release --argstr git_version ${DRONE_TAG:-$DRONE_COMMIT} - nix-shell --attr rust --run "./script/not-dynamic.sh result-bin/bin/garage" - - name: integration + - name: integration tests image: nixpkgs/nix:nixos-22.05 commands: - nix-shell --attr integration --run ./script/test-smoke.sh || (cat /tmp/garage.log; false) + - name: upgrade tests + image: nixpkgs/nix:nixos-22.05 + commands: + - nix-shell --attr integration --run "./script/test-upgrade.sh v0.8.4 x86_64-unknown-linux-musl" || (cat /tmp/garage.log; false) + - name: push static binary image: nixpkgs/nix:nixos-22.05 environment: @@ -122,11 +121,16 @@ steps: - nix-build --no-build-output --attr pkgs.i386.release --argstr git_version ${DRONE_TAG:-$DRONE_COMMIT} - nix-shell --attr rust --run "./script/not-dynamic.sh result-bin/bin/garage" - - name: integration + - name: integration tests image: nixpkgs/nix:nixos-22.05 commands: - nix-shell --attr integration --run ./script/test-smoke.sh || (cat /tmp/garage.log; false) + - name: upgrade tests + image: nixpkgs/nix:nixos-22.05 + commands: + - nix-shell --attr integration --run "./script/test-upgrade.sh v0.8.4 i686-unknown-linux-musl" || (cat /tmp/garage.log; false) + - name: push static binary image: nixpkgs/nix:nixos-22.05 environment: @@ -291,6 +295,6 @@ trigger: --- kind: signature -hmac: dcf68ed6536e3fd9b359377e4c6c1d321fa9cc0f6fe5645d69c8f1d604569b4c +hmac: 0c4b57eb4b27b7c6a6ff21ab87f0767fe3eb90f5d95d5cbcdccf794e9d2a5d86 ... From 6790e24f5a41af121f413eb2c9052d9b2438a4a0 Mon Sep 17 00:00:00 2001 From: Alex Auvolat Date: Thu, 5 Oct 2023 15:20:48 +0200 Subject: [PATCH 013/538] Add migration to v0.9 guide --- doc/book/working-documents/migration-09.md | 68 ++++++++++++++++++++++ 1 file changed, 68 insertions(+) create mode 100644 doc/book/working-documents/migration-09.md diff --git a/doc/book/working-documents/migration-09.md b/doc/book/working-documents/migration-09.md new file mode 100644 index 00000000..b277bb9b --- /dev/null +++ b/doc/book/working-documents/migration-09.md @@ -0,0 +1,68 @@ ++++ +title = "Migrating from 0.8 to 0.9" +weight = 14 ++++ + +**This guide explains how to migrate to 0.9 if you have an existing 0.8 cluster. +We don't recommend trying to migrate to 0.9 directly from 0.7 or older.** + +**We make no guarantee that this migration will work perfectly: +back up all your data before attempting it!** + +The following are **breaking changes** in Garage v0.9 that require your attention when migrating: + +- LMDB is now the default metadata db engine and Sled is deprecated. If you were using Sled, make sure to specify `db_engine = "sled"` in your configuration file, or take the time to [convert your database](https://garagehq.deuxfleurs.fr/documentation/reference-manual/configuration/#db-engine-since-v0-8-0). + +- Capacity values are now in actual byte units. The translation from the old layout will assign 1 capacity = 1Gb by default, which might be wrong for your cluster. This does not cause any data to be moved around, but you might want to re-assign correct capacity values post-migration. + +- Multipart uploads that were started in Garage v0.8 will not be visible in Garage v0.9 and will have to be restarted from scratch. + +- Changes to the admin API: some `v0/` endpoints have been replaced by `v1/` counterparts with updated/uniformized syntax. All other endpoints have also moved to `v1/` by default, without syntax changes, but are still available under `v0/` for compatibility. + + +## Simple migration procedure (takes cluster offline for a while) + +The migration steps are as follows: + +1. Disable API and web access. You may do this by stopping your reverse proxy or by commenting out + the `api_bind_addr` values in your `config.toml` file. +2. Do `garage repair --all-nodes --yes tables` and `garage repair --all-nodes --yes blocks`, + check the logs and check that all data seems to be synced correctly between + nodes. If you have time, do additional checks (`versions`, `block_refs`, etc.) +3. Check that the block resync queue and Merkle queue are empty: + run `garage stats -a` to query them or inspect metrics in the Grafana dashboard. +4. Turn off Garage v0.8 +5. **Backup the metadata folder of all your nodes!** For instance, use the following command + if your metadata directory is `/var/lib/garage/meta`: `cd /var/lib/garage ; tar -acf meta-v0.8.tar.zst meta/` +6. Install Garage v0.9 +7. Update your configuration file if necessary. +8. Turn on Garage v0.9 +9. Do `garage repair --all-nodes --yes tables` and `garage repair --all-nodes --yes blocks`. + Wait for a full table sync to run. +10. Your upgraded cluster should be in a working state. Re-enable API and Web + access and check that everything went well. +11. Monitor your cluster in the next hours to see if it works well under your production load, report any issue. +12. You might want to assign correct capacity values to all your nodes. Doing so might cause data to be moved + in your cluster, which should also be monitored carefully. + +## Minimal downtime migration procedure + +The migration to Garage v0.9 can be done with almost no downtime, +by restarting all nodes at once in the new version. + +The migration steps are as follows: + +1. Do `garage repair --all-nodes --yes tables` and `garage repair --all-nodes --yes blocks`, + check the logs and check that all data seems to be synced correctly between + nodes. If you have time, do additional checks (`versions`, `block_refs`, etc.) + +2. Turn off each node individually; back up its metadata folder (see above); turn it back on again. + This will allow you to take a backup of all nodes without impacting global cluster availability. + You can do all nodes of a single zone at once as this does not impact the availability of Garage. + +3. Prepare your binaries and configuration files for Garage v0.9 + +4. Shut down all v087 nodes simultaneously, and restart them all simultaneously in v0.9. + Use your favorite deployment tool (Ansible, Kubernetes, Nomad) to achieve this as fast as possible. + +5. Proceed with steps 9-12 above. From 2448eb771381318c5dd9f5516c606685156a3040 Mon Sep 17 00:00:00 2001 From: Alex Auvolat Date: Thu, 5 Oct 2023 15:29:55 +0200 Subject: [PATCH 014/538] upgrade doc: fixes and precisions --- doc/book/working-documents/migration-09.md | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/doc/book/working-documents/migration-09.md b/doc/book/working-documents/migration-09.md index b277bb9b..8d403580 100644 --- a/doc/book/working-documents/migration-09.md +++ b/doc/book/working-documents/migration-09.md @@ -25,7 +25,7 @@ The following are **breaking changes** in Garage v0.9 that require your attentio The migration steps are as follows: 1. Disable API and web access. You may do this by stopping your reverse proxy or by commenting out - the `api_bind_addr` values in your `config.toml` file. + the `api_bind_addr` values in your `config.toml` file and restarting Garage. 2. Do `garage repair --all-nodes --yes tables` and `garage repair --all-nodes --yes blocks`, check the logs and check that all data seems to be synced correctly between nodes. If you have time, do additional checks (`versions`, `block_refs`, etc.) @@ -62,7 +62,8 @@ The migration steps are as follows: 3. Prepare your binaries and configuration files for Garage v0.9 -4. Shut down all v087 nodes simultaneously, and restart them all simultaneously in v0.9. +4. Shut down all v0.8 nodes simultaneously, and restart them all simultaneously in v0.9. Use your favorite deployment tool (Ansible, Kubernetes, Nomad) to achieve this as fast as possible. + Garage v0.9 should be in a working state as soon as it starts. -5. Proceed with steps 9-12 above. +5. Proceed with repair and monitoring as described in steps 9-12 above. From 1c13135f253007dfd5c56b2ddf3412c9d66458ec Mon Sep 17 00:00:00 2001 From: Alex Auvolat Date: Thu, 5 Oct 2023 16:27:16 +0200 Subject: [PATCH 015/538] admin api: remove broken GET /v0/key router rule --- src/api/admin/router.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/api/admin/router.rs b/src/api/admin/router.rs index 254aff12..691d1932 100644 --- a/src/api/admin/router.rs +++ b/src/api/admin/router.rs @@ -111,7 +111,7 @@ impl Endpoint { POST "/v1/key" => CreateKey, POST "/v1/key/import" => ImportKey, DELETE ("/v0/key" | "/v1/key") if id => DeleteKey (query::id), - GET ("/v0/key" | "/v1/key") => ListKeys, + GET "/v1/key" => ListKeys, // Bucket endpoints GET ("/v0/bucket" | "/v1/bucket") if id => GetBucketInfo (query_opt::id, query_opt::global_alias), GET ("/v0/bucket" | "/v1/bucket") if global_alias => GetBucketInfo (query_opt::id, query_opt::global_alias), From 0c431b0c035f4de8ea9d1d9bd0b419bfc74ceabf Mon Sep 17 00:00:00 2001 From: Alex Auvolat Date: Thu, 5 Oct 2023 16:56:13 +0200 Subject: [PATCH 016/538] admin api: increased compatibility for v0/ endpoints --- src/api/admin/api_server.rs | 10 +- src/api/admin/mod.rs | 3 +- src/api/admin/router.rs | 160 ------------------------ src/api/admin/router_v0.rs | 143 ++++++++++++++++++++++ src/api/admin/router_v1.rs | 235 ++++++++++++++++++++++++++++++++++++ 5 files changed, 388 insertions(+), 163 deletions(-) delete mode 100644 src/api/admin/router.rs create mode 100644 src/api/admin/router_v0.rs create mode 100644 src/api/admin/router_v1.rs diff --git a/src/api/admin/api_server.rs b/src/api/admin/api_server.rs index 53503220..4779f924 100644 --- a/src/api/admin/api_server.rs +++ b/src/api/admin/api_server.rs @@ -25,7 +25,8 @@ use crate::admin::bucket::*; use crate::admin::cluster::*; use crate::admin::error::*; use crate::admin::key::*; -use crate::admin::router::{Authorization, Endpoint}; +use crate::admin::router_v0; +use crate::admin::router_v1::{Authorization, Endpoint}; use crate::helpers::host_to_bucket; pub struct AdminApiServer { @@ -229,7 +230,12 @@ impl ApiHandler for AdminApiServer { type Error = Error; fn parse_endpoint(&self, req: &Request) -> Result { - Endpoint::from_request(req) + if req.uri().path().starts_with("/v0/") { + let endpoint_v0 = router_v0::Endpoint::from_request(req)?; + Endpoint::from_v0(endpoint_v0) + } else { + Endpoint::from_request(req) + } } async fn handle( diff --git a/src/api/admin/mod.rs b/src/api/admin/mod.rs index c4857c10..43a8c59c 100644 --- a/src/api/admin/mod.rs +++ b/src/api/admin/mod.rs @@ -1,6 +1,7 @@ pub mod api_server; mod error; -mod router; +mod router_v0; +mod router_v1; mod bucket; mod cluster; diff --git a/src/api/admin/router.rs b/src/api/admin/router.rs deleted file mode 100644 index 691d1932..00000000 --- a/src/api/admin/router.rs +++ /dev/null @@ -1,160 +0,0 @@ -use std::borrow::Cow; - -use hyper::{Method, Request}; - -use crate::admin::error::*; -use crate::router_macros::*; - -pub enum Authorization { - None, - MetricsToken, - AdminToken, -} - -router_match! {@func - -/// List of all Admin API endpoints. -#[derive(Debug, Clone, PartialEq, Eq)] -pub enum Endpoint { - Options, - CheckDomain, - Health, - Metrics, - GetClusterStatus, - GetClusterHealth, - ConnectClusterNodes, - // Layout - GetClusterLayout, - UpdateClusterLayout, - ApplyClusterLayout, - RevertClusterLayout, - // Keys - ListKeys, - CreateKey, - ImportKey, - GetKeyInfo { - id: Option, - search: Option, - show_secret_key: Option, - }, - DeleteKey { - id: String, - }, - UpdateKey { - id: String, - }, - // Buckets - ListBuckets, - CreateBucket, - GetBucketInfo { - id: Option, - global_alias: Option, - }, - DeleteBucket { - id: String, - }, - UpdateBucket { - id: String, - }, - // Bucket-Key Permissions - BucketAllowKey, - BucketDenyKey, - // Bucket aliases - GlobalAliasBucket { - id: String, - alias: String, - }, - GlobalUnaliasBucket { - id: String, - alias: String, - }, - LocalAliasBucket { - id: String, - access_key_id: String, - alias: String, - }, - LocalUnaliasBucket { - id: String, - access_key_id: String, - alias: String, - }, -}} - -impl Endpoint { - /// Determine which S3 endpoint a request is for using the request, and a bucket which was - /// possibly extracted from the Host header. - /// Returns Self plus bucket name, if endpoint is not Endpoint::ListBuckets - pub fn from_request(req: &Request) -> Result { - let uri = req.uri(); - let path = uri.path(); - let query = uri.query(); - - let mut query = QueryParameters::from_query(query.unwrap_or_default())?; - - let res = router_match!(@gen_path_parser (req.method(), path, query) [ - OPTIONS _ => Options, - GET "/check" => CheckDomain, - GET "/health" => Health, - GET "/metrics" => Metrics, - GET "/v1/status" => GetClusterStatus, - GET "/v1/health" => GetClusterHealth, - POST ("/v0/connect" | "/v1/connect") => ConnectClusterNodes, - // Layout endpoints - GET "/v1/layout" => GetClusterLayout, - POST "/v1/layout" => UpdateClusterLayout, - POST "/v1/layout/apply" => ApplyClusterLayout, - POST ("/v0/layout/revert" | "/v1/layout/revert") => RevertClusterLayout, - // API key endpoints - GET "/v1/key" if id => GetKeyInfo (query_opt::id, query_opt::search, query_opt::show_secret_key), - GET "/v1/key" if search => GetKeyInfo (query_opt::id, query_opt::search, query_opt::show_secret_key), - POST "/v1/key" if id => UpdateKey (query::id), - POST "/v1/key" => CreateKey, - POST "/v1/key/import" => ImportKey, - DELETE ("/v0/key" | "/v1/key") if id => DeleteKey (query::id), - GET "/v1/key" => ListKeys, - // Bucket endpoints - GET ("/v0/bucket" | "/v1/bucket") if id => GetBucketInfo (query_opt::id, query_opt::global_alias), - GET ("/v0/bucket" | "/v1/bucket") if global_alias => GetBucketInfo (query_opt::id, query_opt::global_alias), - GET ("/v0/bucket" | "/v1/bucket") => ListBuckets, - POST ("/v0/bucket" | "/v1/bucket") => CreateBucket, - DELETE ("/v0/bucket" | "/v1/bucket") if id => DeleteBucket (query::id), - PUT ("/v0/bucket" | "/v1/bucket") if id => UpdateBucket (query::id), - // Bucket-key permissions - POST ("/v0/bucket/allow" | "/v1/bucket/allow") => BucketAllowKey, - POST ("/v0/bucket/deny" | "/v1/bucket/deny") => BucketDenyKey, - // Bucket aliases - PUT ("/v0/bucket/alias/global" | "/v1/bucket/alias/global") => GlobalAliasBucket (query::id, query::alias), - DELETE ("/v0/bucket/alias/global" | "/v1/bucket/alias/global") => GlobalUnaliasBucket (query::id, query::alias), - PUT ("/v0/bucket/alias/local" | "/v1/bucket/alias/local") => LocalAliasBucket (query::id, query::access_key_id, query::alias), - DELETE ("/v0/bucket/alias/local" | "/v1/bucket/alias/local") => LocalUnaliasBucket (query::id, query::access_key_id, query::alias), - ]); - - if let Some(message) = query.nonempty_message() { - debug!("Unused query parameter: {}", message) - } - - Ok(res) - } - /// Get the kind of authorization which is required to perform the operation. - pub fn authorization_type(&self) -> Authorization { - match self { - Self::Health => Authorization::None, - Self::CheckDomain => Authorization::None, - Self::Metrics => Authorization::MetricsToken, - _ => Authorization::AdminToken, - } - } -} - -generateQueryParameters! { - keywords: [], - fields: [ - "format" => format, - "id" => id, - "search" => search, - "globalAlias" => global_alias, - "alias" => alias, - "accessKeyId" => access_key_id, - "showSecretKey" => show_secret_key - ] -} diff --git a/src/api/admin/router_v0.rs b/src/api/admin/router_v0.rs new file mode 100644 index 00000000..68676445 --- /dev/null +++ b/src/api/admin/router_v0.rs @@ -0,0 +1,143 @@ +use std::borrow::Cow; + +use hyper::{Method, Request}; + +use crate::admin::error::*; +use crate::router_macros::*; + +router_match! {@func + +/// List of all Admin API endpoints. +#[derive(Debug, Clone, PartialEq, Eq)] +pub enum Endpoint { + Options, + CheckDomain, + Health, + Metrics, + GetClusterStatus, + GetClusterHealth, + ConnectClusterNodes, + // Layout + GetClusterLayout, + UpdateClusterLayout, + ApplyClusterLayout, + RevertClusterLayout, + // Keys + ListKeys, + CreateKey, + ImportKey, + GetKeyInfo { + id: Option, + search: Option, + }, + DeleteKey { + id: String, + }, + UpdateKey { + id: String, + }, + // Buckets + ListBuckets, + CreateBucket, + GetBucketInfo { + id: Option, + global_alias: Option, + }, + DeleteBucket { + id: String, + }, + UpdateBucket { + id: String, + }, + // Bucket-Key Permissions + BucketAllowKey, + BucketDenyKey, + // Bucket aliases + GlobalAliasBucket { + id: String, + alias: String, + }, + GlobalUnaliasBucket { + id: String, + alias: String, + }, + LocalAliasBucket { + id: String, + access_key_id: String, + alias: String, + }, + LocalUnaliasBucket { + id: String, + access_key_id: String, + alias: String, + }, +}} + +impl Endpoint { + /// Determine which S3 endpoint a request is for using the request, and a bucket which was + /// possibly extracted from the Host header. + /// Returns Self plus bucket name, if endpoint is not Endpoint::ListBuckets + pub fn from_request(req: &Request) -> Result { + let uri = req.uri(); + let path = uri.path(); + let query = uri.query(); + + let mut query = QueryParameters::from_query(query.unwrap_or_default())?; + + let res = router_match!(@gen_path_parser (req.method(), path, query) [ + OPTIONS _ => Options, + GET "/check" => CheckDomain, + GET "/health" => Health, + GET "/metrics" => Metrics, + GET "/v0/status" => GetClusterStatus, + GET "/v0/health" => GetClusterHealth, + POST "/v0/connect" => ConnectClusterNodes, + // Layout endpoints + GET "/v0/layout" => GetClusterLayout, + POST "/v0/layout" => UpdateClusterLayout, + POST "/v0/layout/apply" => ApplyClusterLayout, + POST "/v0/layout/revert" => RevertClusterLayout, + // API key endpoints + GET "/v0/key" if id => GetKeyInfo (query_opt::id, query_opt::search), + GET "/v0/key" if search => GetKeyInfo (query_opt::id, query_opt::search), + POST "/v0/key" if id => UpdateKey (query::id), + POST "/v0/key" => CreateKey, + POST "/v0/key/import" => ImportKey, + DELETE "/v0/key" if id => DeleteKey (query::id), + GET "/v0/key" => ListKeys, + // Bucket endpoints + GET "/v0/bucket" if id => GetBucketInfo (query_opt::id, query_opt::global_alias), + GET "/v0/bucket" if global_alias => GetBucketInfo (query_opt::id, query_opt::global_alias), + GET "/v0/bucket" => ListBuckets, + POST "/v0/bucket" => CreateBucket, + DELETE "/v0/bucket" if id => DeleteBucket (query::id), + PUT "/v0/bucket" if id => UpdateBucket (query::id), + // Bucket-key permissions + POST "/v0/bucket/allow" => BucketAllowKey, + POST "/v0/bucket/deny" => BucketDenyKey, + // Bucket aliases + PUT "/v0/bucket/alias/global" => GlobalAliasBucket (query::id, query::alias), + DELETE "/v0/bucket/alias/global" => GlobalUnaliasBucket (query::id, query::alias), + PUT "/v0/bucket/alias/local" => LocalAliasBucket (query::id, query::access_key_id, query::alias), + DELETE "/v0/bucket/alias/local" => LocalUnaliasBucket (query::id, query::access_key_id, query::alias), + ]); + + if let Some(message) = query.nonempty_message() { + debug!("Unused query parameter: {}", message) + } + + Ok(res) + } +} + +generateQueryParameters! { + keywords: [], + fields: [ + "format" => format, + "id" => id, + "search" => search, + "globalAlias" => global_alias, + "alias" => alias, + "accessKeyId" => access_key_id + ] +} diff --git a/src/api/admin/router_v1.rs b/src/api/admin/router_v1.rs new file mode 100644 index 00000000..cc5ff2ec --- /dev/null +++ b/src/api/admin/router_v1.rs @@ -0,0 +1,235 @@ +use std::borrow::Cow; + +use hyper::{Method, Request}; + +use crate::admin::error::*; +use crate::admin::router_v0; +use crate::router_macros::*; + +pub enum Authorization { + None, + MetricsToken, + AdminToken, +} + +router_match! {@func + +/// List of all Admin API endpoints. +#[derive(Debug, Clone, PartialEq, Eq)] +pub enum Endpoint { + Options, + CheckDomain, + Health, + Metrics, + GetClusterStatus, + GetClusterHealth, + ConnectClusterNodes, + // Layout + GetClusterLayout, + UpdateClusterLayout, + ApplyClusterLayout, + RevertClusterLayout, + // Keys + ListKeys, + CreateKey, + ImportKey, + GetKeyInfo { + id: Option, + search: Option, + show_secret_key: Option, + }, + DeleteKey { + id: String, + }, + UpdateKey { + id: String, + }, + // Buckets + ListBuckets, + CreateBucket, + GetBucketInfo { + id: Option, + global_alias: Option, + }, + DeleteBucket { + id: String, + }, + UpdateBucket { + id: String, + }, + // Bucket-Key Permissions + BucketAllowKey, + BucketDenyKey, + // Bucket aliases + GlobalAliasBucket { + id: String, + alias: String, + }, + GlobalUnaliasBucket { + id: String, + alias: String, + }, + LocalAliasBucket { + id: String, + access_key_id: String, + alias: String, + }, + LocalUnaliasBucket { + id: String, + access_key_id: String, + alias: String, + }, +}} + +impl Endpoint { + /// Determine which S3 endpoint a request is for using the request, and a bucket which was + /// possibly extracted from the Host header. + /// Returns Self plus bucket name, if endpoint is not Endpoint::ListBuckets + pub fn from_request(req: &Request) -> Result { + let uri = req.uri(); + let path = uri.path(); + let query = uri.query(); + + let mut query = QueryParameters::from_query(query.unwrap_or_default())?; + + let res = router_match!(@gen_path_parser (req.method(), path, query) [ + OPTIONS _ => Options, + GET "/check" => CheckDomain, + GET "/health" => Health, + GET "/metrics" => Metrics, + GET "/v1/status" => GetClusterStatus, + GET "/v1/health" => GetClusterHealth, + POST "/v1/connect" => ConnectClusterNodes, + // Layout endpoints + GET "/v1/layout" => GetClusterLayout, + POST "/v1/layout" => UpdateClusterLayout, + POST "/v1/layout/apply" => ApplyClusterLayout, + POST "/v1/layout/revert" => RevertClusterLayout, + // API key endpoints + GET "/v1/key" if id => GetKeyInfo (query_opt::id, query_opt::search, query_opt::show_secret_key), + GET "/v1/key" if search => GetKeyInfo (query_opt::id, query_opt::search, query_opt::show_secret_key), + POST "/v1/key" if id => UpdateKey (query::id), + POST "/v1/key" => CreateKey, + POST "/v1/key/import" => ImportKey, + DELETE "/v1/key" if id => DeleteKey (query::id), + GET "/v1/key" => ListKeys, + // Bucket endpoints + GET "/v1/bucket" if id => GetBucketInfo (query_opt::id, query_opt::global_alias), + GET "/v1/bucket" if global_alias => GetBucketInfo (query_opt::id, query_opt::global_alias), + GET "/v1/bucket" => ListBuckets, + POST "/v1/bucket" => CreateBucket, + DELETE "/v1/bucket" if id => DeleteBucket (query::id), + PUT "/v1/bucket" if id => UpdateBucket (query::id), + // Bucket-key permissions + POST "/v1/bucket/allow" => BucketAllowKey, + POST "/v1/bucket/deny" => BucketDenyKey, + // Bucket aliases + PUT "/v1/bucket/alias/global" => GlobalAliasBucket (query::id, query::alias), + DELETE "/v1/bucket/alias/global" => GlobalUnaliasBucket (query::id, query::alias), + PUT "/v1/bucket/alias/local" => LocalAliasBucket (query::id, query::access_key_id, query::alias), + DELETE "/v1/bucket/alias/local" => LocalUnaliasBucket (query::id, query::access_key_id, query::alias), + ]); + + if let Some(message) = query.nonempty_message() { + debug!("Unused query parameter: {}", message) + } + + Ok(res) + } + /// Some endpoints work exactly the same in their v1/ version as they did in their v0/ version. + /// For these endpoints, we can convert a v0/ call to its equivalent as if it was made using + /// its v1/ URL. + pub fn from_v0(v0_endpoint: router_v0::Endpoint) -> Result { + match v0_endpoint { + // Cluster endpoints + router_v0::Endpoint::ConnectClusterNodes => Ok(Self::ConnectClusterNodes), + // - GetClusterStatus: response format changed + // - GetClusterHealth: response format changed + + // Layout endpoints + router_v0::Endpoint::RevertClusterLayout => Ok(Self::RevertClusterLayout), + // - GetClusterLayout: response format changed + // - UpdateClusterLayout: query format changed + // - ApplyCusterLayout: response format changed + + // Key endpoints + router_v0::Endpoint::ListKeys => Ok(Self::ListKeys), + router_v0::Endpoint::CreateKey => Ok(Self::CreateKey), + router_v0::Endpoint::GetKeyInfo { id, search } => Ok(Self::GetKeyInfo { + id, + search, + show_secret_key: Some("true".into()), + }), + router_v0::Endpoint::DeleteKey { id } => Ok(Self::DeleteKey { id }), + // - UpdateKey: response format changed (secret key no longer returned) + + // Bucket endpoints + router_v0::Endpoint::GetBucketInfo { id, global_alias } => { + Ok(Self::GetBucketInfo { id, global_alias }) + } + router_v0::Endpoint::ListBuckets => Ok(Self::ListBuckets), + router_v0::Endpoint::CreateBucket => Ok(Self::CreateBucket), + router_v0::Endpoint::DeleteBucket { id } => Ok(Self::DeleteBucket { id }), + router_v0::Endpoint::UpdateBucket { id } => Ok(Self::UpdateBucket { id }), + + // Bucket-key permissions + router_v0::Endpoint::BucketAllowKey => Ok(Self::BucketAllowKey), + router_v0::Endpoint::BucketDenyKey => Ok(Self::BucketDenyKey), + + // Bucket alias endpoints + router_v0::Endpoint::GlobalAliasBucket { id, alias } => { + Ok(Self::GlobalAliasBucket { id, alias }) + } + router_v0::Endpoint::GlobalUnaliasBucket { id, alias } => { + Ok(Self::GlobalUnaliasBucket { id, alias }) + } + router_v0::Endpoint::LocalAliasBucket { + id, + access_key_id, + alias, + } => Ok(Self::LocalAliasBucket { + id, + access_key_id, + alias, + }), + router_v0::Endpoint::LocalUnaliasBucket { + id, + access_key_id, + alias, + } => Ok(Self::LocalUnaliasBucket { + id, + access_key_id, + alias, + }), + + // For endpoints that have different body content syntax, issue + // deprecation warning + _ => Err(Error::bad_request(format!( + "v0/ endpoint is no longer supported: {}", + v0_endpoint.name() + ))), + } + } + /// Get the kind of authorization which is required to perform the operation. + pub fn authorization_type(&self) -> Authorization { + match self { + Self::Health => Authorization::None, + Self::CheckDomain => Authorization::None, + Self::Metrics => Authorization::MetricsToken, + _ => Authorization::AdminToken, + } + } +} + +generateQueryParameters! { + keywords: [], + fields: [ + "format" => format, + "id" => id, + "search" => search, + "globalAlias" => global_alias, + "alias" => alias, + "accessKeyId" => access_key_id, + "showSecretKey" => show_secret_key + ] +} From 2d5d7a703152345f380139fe9314d9e4c29b61ae Mon Sep 17 00:00:00 2001 From: Alex Auvolat Date: Tue, 10 Oct 2023 12:06:27 +0200 Subject: [PATCH 017/538] Move convert_db command into main garage binary --- src/db/Cargo.toml | 5 -- .../convert.rs => garage/cli/convert_db.rs} | 46 +++++++++---------- src/garage/cli/mod.rs | 2 + src/garage/cli/structs.rs | 6 +++ src/garage/main.rs | 3 ++ 5 files changed, 32 insertions(+), 30 deletions(-) rename src/{db/bin/convert.rs => garage/cli/convert_db.rs} (59%) diff --git a/src/db/Cargo.toml b/src/db/Cargo.toml index 2f6f06be..fa1a4419 100644 --- a/src/db/Cargo.toml +++ b/src/db/Cargo.toml @@ -11,11 +11,6 @@ readme = "../../README.md" [lib] path = "lib.rs" -[[bin]] -name = "convert" -path = "bin/convert.rs" -required-features = ["cli"] - [dependencies] err-derive = "0.3" hexdump = "0.1" diff --git a/src/db/bin/convert.rs b/src/garage/cli/convert_db.rs similarity index 59% rename from src/db/bin/convert.rs rename to src/garage/cli/convert_db.rs index bbde2048..f590a4b6 100644 --- a/src/db/bin/convert.rs +++ b/src/garage/cli/convert_db.rs @@ -1,39 +1,30 @@ use std::path::PathBuf; +use structopt::StructOpt; + use garage_db::*; -use clap::Parser; - /// K2V command line interface -#[derive(Parser, Debug)] -#[clap(author, version, about, long_about = None)] -struct Args { - /// Input DB path - #[clap(short = 'i')] +#[derive(StructOpt, Debug)] +pub struct ConvertDbOpt { + /// Input database path (not the same as metadata_dir, see + /// https://garagehq.deuxfleurs.fr/documentation/reference-manual/configuration/#db-engine-since-v0-8-0) + #[structopt(short = "i")] input_path: PathBuf, - /// Input DB engine - #[clap(short = 'a')] + /// Input database engine (sled, lmdb or sqlite; limited by db engines + /// enabled in this build) + #[structopt(short = "a")] input_engine: String, - /// Output DB path - #[clap(short = 'o')] + /// Output database path + #[structopt(short = "o")] output_path: PathBuf, - /// Output DB engine - #[clap(short = 'b')] + /// Output database engine + #[structopt(short = "b")] output_engine: String, } -fn main() { - let args = Args::parse(); - pretty_env_logger::init(); - - match do_conversion(args) { - Ok(()) => println!("Success!"), - Err(e) => eprintln!("Error: {}", e), - } -} - -fn do_conversion(args: Args) -> Result<()> { +pub(crate) fn do_conversion(args: ConvertDbOpt) -> Result<()> { let input = open_db(args.input_path, args.input_engine)?; let output = open_db(args.output_path, args.output_engine)?; output.import(&input)?; @@ -42,14 +33,17 @@ fn do_conversion(args: Args) -> Result<()> { fn open_db(path: PathBuf, engine: String) -> Result { match engine.as_str() { + #[cfg(feature = "sled")] "sled" => { let db = sled_adapter::sled::Config::default().path(&path).open()?; Ok(sled_adapter::SledDb::init(db)) } + #[cfg(feature = "sqlite")] "sqlite" | "sqlite3" | "rusqlite" => { let db = sqlite_adapter::rusqlite::Connection::open(&path)?; Ok(sqlite_adapter::SqliteDb::init(db)) } + #[cfg(feature = "lmdb")] "lmdb" | "heed" => { std::fs::create_dir_all(&path).map_err(|e| { Error(format!("Unable to create LMDB data directory: {}", e).into()) @@ -64,6 +58,8 @@ fn open_db(path: PathBuf, engine: String) -> Result { .unwrap(); Ok(lmdb_adapter::LmdbDb::init(db)) } - e => Err(Error(format!("Invalid DB engine: {}", e).into())), + e => Err(Error( + format!("Invalid or unsupported DB engine: {}", e).into(), + )), } } diff --git a/src/garage/cli/mod.rs b/src/garage/cli/mod.rs index 17a2d8ce..e131f62c 100644 --- a/src/garage/cli/mod.rs +++ b/src/garage/cli/mod.rs @@ -4,6 +4,8 @@ pub(crate) mod layout; pub(crate) mod structs; pub(crate) mod util; +pub(crate) mod convert_db; + pub(crate) use cmd::*; pub(crate) use init::*; pub(crate) use layout::*; diff --git a/src/garage/cli/structs.rs b/src/garage/cli/structs.rs index 6e585e53..ee7c2988 100644 --- a/src/garage/cli/structs.rs +++ b/src/garage/cli/structs.rs @@ -3,6 +3,8 @@ use structopt::StructOpt; use garage_util::version::garage_version; +use crate::cli::convert_db; + #[derive(StructOpt, Debug)] pub enum Command { /// Run Garage server @@ -54,6 +56,10 @@ pub enum Command { /// Low-level debug operations on data blocks #[structopt(name = "block", version = garage_version())] Block(BlockOperation), + + /// Convert metadata db between database engine formats + #[structopt(name = "convert-db", version = garage_version())] + ConvertDb(convert_db::ConvertDbOpt), } #[derive(StructOpt, Debug)] diff --git a/src/garage/main.rs b/src/garage/main.rs index e8aee892..bec3197c 100644 --- a/src/garage/main.rs +++ b/src/garage/main.rs @@ -173,6 +173,9 @@ async fn main() { Command::OfflineRepair(repair_opt) => { repair::offline::offline_repair(opt.config_file, opt.secrets, repair_opt).await } + Command::ConvertDb(conv_opt) => { + cli::convert_db::do_conversion(conv_opt).map_err(From::from) + } Command::Node(NodeOperation::NodeId(node_id_opt)) => { node_id_command(opt.config_file, node_id_opt.quiet) } From d3fffd30dcf66a9da2e466ae6274547b090313e2 Mon Sep 17 00:00:00 2001 From: Alex Auvolat Date: Tue, 10 Oct 2023 13:56:33 +0200 Subject: [PATCH 018/538] use mold linker when invoking cargo manually (not in nix build scripts) --- .cargo/config.toml | 3 +++ flake.nix | 5 ++++- shell.nix | 21 +++++++++++---------- 3 files changed, 18 insertions(+), 11 deletions(-) create mode 100644 .cargo/config.toml diff --git a/.cargo/config.toml b/.cargo/config.toml new file mode 100644 index 00000000..d29d6c33 --- /dev/null +++ b/.cargo/config.toml @@ -0,0 +1,3 @@ +[target.x86_64-unknown-linux-gnu] +linker = "clang" +rustflags = ["-C", "link-arg=-fuse-ld=mold"] diff --git a/flake.nix b/flake.nix index 32c01616..f8d7d4df 100644 --- a/flake.nix +++ b/flake.nix @@ -48,6 +48,9 @@ pkgsSrc = nixpkgs; cargo2nixOverlay = cargo2nix.overlays.default; release = false; - }).workspaceShell { packages = [ pkgs.rustfmt ]; }; + }).workspaceShell { packages = with pkgs; [ + rustfmt + mold + ]; }; }); } diff --git a/shell.nix b/shell.nix index 0d510e33..88e292a8 100644 --- a/shell.nix +++ b/shell.nix @@ -15,16 +15,17 @@ in { # --- Rust Shell --- # Use it to compile Garage rust = pkgs.mkShell { - nativeBuildInputs = [ - #pkgs.rustPlatform.rust.rustc - pkgs.rustPlatform.rust.cargo - #pkgs.clippy - pkgs.rustfmt - #pkgs.perl - #pkgs.protobuf - #pkgs.pkg-config - #pkgs.openssl - pkgs.file + nativeBuildInputs = with pkgs; [ + #rustPlatform.rust.rustc + rustPlatform.rust.cargo + mold + #clippy + rustfmt + #perl + #protobuf + #pkg-config + #openssl + file #cargo2nix.packages.x86_64-linux.cargo2nix ]; }; From 3d7892477d69cfd0a8d52653e3eb777194c38f3e Mon Sep 17 00:00:00 2001 From: Alex Auvolat Date: Tue, 10 Oct 2023 14:06:25 +0200 Subject: [PATCH 019/538] convert_db: fix build --- src/garage/cli/convert_db.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/garage/cli/convert_db.rs b/src/garage/cli/convert_db.rs index ffb5c44c..3c6ce69c 100644 --- a/src/garage/cli/convert_db.rs +++ b/src/garage/cli/convert_db.rs @@ -57,7 +57,7 @@ fn open_db(path: PathBuf, engine: String) -> Result { env_builder.max_dbs(100); env_builder.map_size(map_size); unsafe { - env_builder.flag(heed::flags::Flags::MdbNoMetaSync); + env_builder.flag(lmdb_adapter::heed::flags::Flags::MdbNoMetaSync); } let db = env_builder.open(&path)?; Ok(lmdb_adapter::LmdbDb::init(db)) From 952c9570c494468643353ee1ae9052b510353665 Mon Sep 17 00:00:00 2001 From: Alex Auvolat Date: Tue, 10 Oct 2023 14:08:11 +0200 Subject: [PATCH 020/538] bump version to v0.9.0 --- Cargo.lock | 18 ++--- Cargo.nix | 120 +++++++++++++++++----------------- Cargo.toml | 16 ++--- script/helm/garage/Chart.yaml | 2 +- src/api/Cargo.toml | 2 +- src/block/Cargo.toml | 2 +- src/db/Cargo.toml | 2 +- src/garage/Cargo.toml | 2 +- src/model/Cargo.toml | 2 +- src/rpc/Cargo.toml | 2 +- src/table/Cargo.toml | 2 +- src/util/Cargo.toml | 2 +- src/web/Cargo.toml | 2 +- 13 files changed, 87 insertions(+), 87 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 52e3fa0f..7135a4de 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1198,7 +1198,7 @@ dependencies = [ [[package]] name = "garage" -version = "0.8.4" +version = "0.9.0" dependencies = [ "assert-json-diff", "async-trait", @@ -1249,7 +1249,7 @@ dependencies = [ [[package]] name = "garage_api" -version = "0.8.4" +version = "0.9.0" dependencies = [ "async-trait", "base64 0.21.3", @@ -1295,7 +1295,7 @@ dependencies = [ [[package]] name = "garage_block" -version = "0.8.4" +version = "0.9.0" dependencies = [ "arc-swap", "async-compression", @@ -1321,7 +1321,7 @@ dependencies = [ [[package]] name = "garage_db" -version = "0.8.4" +version = "0.9.0" dependencies = [ "clap 4.4.0", "err-derive", @@ -1336,7 +1336,7 @@ dependencies = [ [[package]] name = "garage_model" -version = "0.8.4" +version = "0.9.0" dependencies = [ "arc-swap", "async-trait", @@ -1364,7 +1364,7 @@ dependencies = [ [[package]] name = "garage_rpc" -version = "0.8.4" +version = "0.9.0" dependencies = [ "arc-swap", "async-trait", @@ -1399,7 +1399,7 @@ dependencies = [ [[package]] name = "garage_table" -version = "0.8.4" +version = "0.9.0" dependencies = [ "arc-swap", "async-trait", @@ -1421,7 +1421,7 @@ dependencies = [ [[package]] name = "garage_util" -version = "0.8.4" +version = "0.9.0" dependencies = [ "arc-swap", "async-trait", @@ -1455,7 +1455,7 @@ dependencies = [ [[package]] name = "garage_web" -version = "0.8.4" +version = "0.9.0" dependencies = [ "err-derive", "futures", diff --git a/Cargo.nix b/Cargo.nix index 5cd347fb..cd8270b6 100644 --- a/Cargo.nix +++ b/Cargo.nix @@ -33,7 +33,7 @@ args@{ ignoreLockHash, }: let - nixifiedLockHash = "3f325a8a549c43a788ff702e65f6de2d42ad19a46067248e29108e90212ca2f5"; + nixifiedLockHash = "1a87886681a3ef0b83c95addc26674a538b8a93d35bc80db8998e1fcd0821f6c"; workspaceSrc = if args.workspaceSrc == null then ./. else args.workspaceSrc; currentLockHash = builtins.hashFile "sha256" (workspaceSrc + /Cargo.lock); lockHashIgnored = if ignoreLockHash @@ -57,16 +57,16 @@ in { cargo2nixVersion = "0.11.0"; workspace = { - garage_db = rustPackages.unknown.garage_db."0.8.4"; - garage_util = rustPackages.unknown.garage_util."0.8.4"; - garage_rpc = rustPackages.unknown.garage_rpc."0.8.4"; + garage_db = rustPackages.unknown.garage_db."0.9.0"; + garage_util = rustPackages.unknown.garage_util."0.9.0"; + garage_rpc = rustPackages.unknown.garage_rpc."0.9.0"; format_table = rustPackages.unknown.format_table."0.1.1"; - garage_table = rustPackages.unknown.garage_table."0.8.4"; - garage_block = rustPackages.unknown.garage_block."0.8.4"; - garage_model = rustPackages.unknown.garage_model."0.8.4"; - garage_api = rustPackages.unknown.garage_api."0.8.4"; - garage_web = rustPackages.unknown.garage_web."0.8.4"; - garage = rustPackages.unknown.garage."0.8.4"; + garage_table = rustPackages.unknown.garage_table."0.9.0"; + garage_block = rustPackages.unknown.garage_block."0.9.0"; + garage_model = rustPackages.unknown.garage_model."0.9.0"; + garage_api = rustPackages.unknown.garage_api."0.9.0"; + garage_web = rustPackages.unknown.garage_web."0.9.0"; + garage = rustPackages.unknown.garage."0.9.0"; k2v-client = rustPackages.unknown.k2v-client."0.0.4"; }; "registry+https://github.com/rust-lang/crates.io-index".addr2line."0.21.0" = overridableMkRustCrate (profileName: rec { @@ -1705,9 +1705,9 @@ in }; }); - "unknown".garage."0.8.4" = overridableMkRustCrate (profileName: rec { + "unknown".garage."0.9.0" = overridableMkRustCrate (profileName: rec { name = "garage"; - version = "0.8.4"; + version = "0.9.0"; registry = "unknown"; src = fetchCrateLocal (workspaceSrc + "/src/garage"); features = builtins.concatLists [ @@ -1734,14 +1734,14 @@ in format_table = (rustPackages."unknown".format_table."0.1.1" { inherit profileName; }).out; futures = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".futures."0.3.28" { inherit profileName; }).out; futures_util = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".futures-util."0.3.28" { inherit profileName; }).out; - garage_api = (rustPackages."unknown".garage_api."0.8.4" { inherit profileName; }).out; - garage_block = (rustPackages."unknown".garage_block."0.8.4" { inherit profileName; }).out; - garage_db = (rustPackages."unknown".garage_db."0.8.4" { inherit profileName; }).out; - garage_model = (rustPackages."unknown".garage_model."0.8.4" { inherit profileName; }).out; - garage_rpc = (rustPackages."unknown".garage_rpc."0.8.4" { inherit profileName; }).out; - garage_table = (rustPackages."unknown".garage_table."0.8.4" { inherit profileName; }).out; - garage_util = (rustPackages."unknown".garage_util."0.8.4" { inherit profileName; }).out; - garage_web = (rustPackages."unknown".garage_web."0.8.4" { inherit profileName; }).out; + garage_api = (rustPackages."unknown".garage_api."0.9.0" { inherit profileName; }).out; + garage_block = (rustPackages."unknown".garage_block."0.9.0" { inherit profileName; }).out; + garage_db = (rustPackages."unknown".garage_db."0.9.0" { inherit profileName; }).out; + garage_model = (rustPackages."unknown".garage_model."0.9.0" { inherit profileName; }).out; + garage_rpc = (rustPackages."unknown".garage_rpc."0.9.0" { inherit profileName; }).out; + garage_table = (rustPackages."unknown".garage_table."0.9.0" { inherit profileName; }).out; + garage_util = (rustPackages."unknown".garage_util."0.9.0" { inherit profileName; }).out; + garage_web = (rustPackages."unknown".garage_web."0.9.0" { inherit profileName; }).out; git_version = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".git-version."0.3.5" { inherit profileName; }).out; hex = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".hex."0.4.3" { inherit profileName; }).out; sodiumoxide = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".kuska-sodiumoxide."0.2.5-0" { inherit profileName; }).out; @@ -1777,9 +1777,9 @@ in }; }); - "unknown".garage_api."0.8.4" = overridableMkRustCrate (profileName: rec { + "unknown".garage_api."0.9.0" = overridableMkRustCrate (profileName: rec { name = "garage_api"; - version = "0.8.4"; + version = "0.9.0"; registry = "unknown"; src = fetchCrateLocal (workspaceSrc + "/src/api"); features = builtins.concatLists [ @@ -1798,11 +1798,11 @@ in form_urlencoded = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".form_urlencoded."1.2.0" { inherit profileName; }).out; futures = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".futures."0.3.28" { inherit profileName; }).out; futures_util = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".futures-util."0.3.28" { inherit profileName; }).out; - garage_block = (rustPackages."unknown".garage_block."0.8.4" { inherit profileName; }).out; - garage_model = (rustPackages."unknown".garage_model."0.8.4" { inherit profileName; }).out; - garage_rpc = (rustPackages."unknown".garage_rpc."0.8.4" { inherit profileName; }).out; - garage_table = (rustPackages."unknown".garage_table."0.8.4" { inherit profileName; }).out; - garage_util = (rustPackages."unknown".garage_util."0.8.4" { inherit profileName; }).out; + garage_block = (rustPackages."unknown".garage_block."0.9.0" { inherit profileName; }).out; + garage_model = (rustPackages."unknown".garage_model."0.9.0" { inherit profileName; }).out; + garage_rpc = (rustPackages."unknown".garage_rpc."0.9.0" { inherit profileName; }).out; + garage_table = (rustPackages."unknown".garage_table."0.9.0" { inherit profileName; }).out; + garage_util = (rustPackages."unknown".garage_util."0.9.0" { inherit profileName; }).out; hex = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".hex."0.4.3" { inherit profileName; }).out; hmac = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".hmac."0.12.1" { inherit profileName; }).out; http = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".http."0.2.9" { inherit profileName; }).out; @@ -1832,9 +1832,9 @@ in }; }); - "unknown".garage_block."0.8.4" = overridableMkRustCrate (profileName: rec { + "unknown".garage_block."0.9.0" = overridableMkRustCrate (profileName: rec { name = "garage_block"; - version = "0.8.4"; + version = "0.9.0"; registry = "unknown"; src = fetchCrateLocal (workspaceSrc + "/src/block"); features = builtins.concatLists [ @@ -1848,10 +1848,10 @@ in bytesize = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".bytesize."1.3.0" { inherit profileName; }).out; futures = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".futures."0.3.28" { inherit profileName; }).out; futures_util = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".futures-util."0.3.28" { inherit profileName; }).out; - garage_db = (rustPackages."unknown".garage_db."0.8.4" { inherit profileName; }).out; - garage_rpc = (rustPackages."unknown".garage_rpc."0.8.4" { inherit profileName; }).out; - garage_table = (rustPackages."unknown".garage_table."0.8.4" { inherit profileName; }).out; - garage_util = (rustPackages."unknown".garage_util."0.8.4" { inherit profileName; }).out; + garage_db = (rustPackages."unknown".garage_db."0.9.0" { inherit profileName; }).out; + garage_rpc = (rustPackages."unknown".garage_rpc."0.9.0" { inherit profileName; }).out; + garage_table = (rustPackages."unknown".garage_table."0.9.0" { inherit profileName; }).out; + garage_util = (rustPackages."unknown".garage_util."0.9.0" { inherit profileName; }).out; hex = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".hex."0.4.3" { inherit profileName; }).out; opentelemetry = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".opentelemetry."0.17.0" { inherit profileName; }).out; rand = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".rand."0.8.5" { inherit profileName; }).out; @@ -1864,9 +1864,9 @@ in }; }); - "unknown".garage_db."0.8.4" = overridableMkRustCrate (profileName: rec { + "unknown".garage_db."0.9.0" = overridableMkRustCrate (profileName: rec { name = "garage_db"; - version = "0.8.4"; + version = "0.9.0"; registry = "unknown"; src = fetchCrateLocal (workspaceSrc + "/src/db"); features = builtins.concatLists [ @@ -1896,9 +1896,9 @@ in }; }); - "unknown".garage_model."0.8.4" = overridableMkRustCrate (profileName: rec { + "unknown".garage_model."0.9.0" = overridableMkRustCrate (profileName: rec { name = "garage_model"; - version = "0.8.4"; + version = "0.9.0"; registry = "unknown"; src = fetchCrateLocal (workspaceSrc + "/src/model"); features = builtins.concatLists [ @@ -1917,11 +1917,11 @@ in err_derive = (buildRustPackages."registry+https://github.com/rust-lang/crates.io-index".err-derive."0.3.1" { profileName = "__noProfile"; }).out; futures = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".futures."0.3.28" { inherit profileName; }).out; futures_util = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".futures-util."0.3.28" { inherit profileName; }).out; - garage_block = (rustPackages."unknown".garage_block."0.8.4" { inherit profileName; }).out; - garage_db = (rustPackages."unknown".garage_db."0.8.4" { inherit profileName; }).out; - garage_rpc = (rustPackages."unknown".garage_rpc."0.8.4" { inherit profileName; }).out; - garage_table = (rustPackages."unknown".garage_table."0.8.4" { inherit profileName; }).out; - garage_util = (rustPackages."unknown".garage_util."0.8.4" { inherit profileName; }).out; + garage_block = (rustPackages."unknown".garage_block."0.9.0" { inherit profileName; }).out; + garage_db = (rustPackages."unknown".garage_db."0.9.0" { inherit profileName; }).out; + garage_rpc = (rustPackages."unknown".garage_rpc."0.9.0" { inherit profileName; }).out; + garage_table = (rustPackages."unknown".garage_table."0.9.0" { inherit profileName; }).out; + garage_util = (rustPackages."unknown".garage_util."0.9.0" { inherit profileName; }).out; hex = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".hex."0.4.3" { inherit profileName; }).out; netapp = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".netapp."0.10.0" { inherit profileName; }).out; opentelemetry = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".opentelemetry."0.17.0" { inherit profileName; }).out; @@ -1934,9 +1934,9 @@ in }; }); - "unknown".garage_rpc."0.8.4" = overridableMkRustCrate (profileName: rec { + "unknown".garage_rpc."0.9.0" = overridableMkRustCrate (profileName: rec { name = "garage_rpc"; - version = "0.8.4"; + version = "0.9.0"; registry = "unknown"; src = fetchCrateLocal (workspaceSrc + "/src/rpc"); features = builtins.concatLists [ @@ -1958,8 +1958,8 @@ in format_table = (rustPackages."unknown".format_table."0.1.1" { inherit profileName; }).out; futures = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".futures."0.3.28" { inherit profileName; }).out; futures_util = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".futures-util."0.3.28" { inherit profileName; }).out; - garage_db = (rustPackages."unknown".garage_db."0.8.4" { inherit profileName; }).out; - garage_util = (rustPackages."unknown".garage_util."0.8.4" { inherit profileName; }).out; + garage_db = (rustPackages."unknown".garage_db."0.9.0" { inherit profileName; }).out; + garage_util = (rustPackages."unknown".garage_util."0.9.0" { inherit profileName; }).out; gethostname = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".gethostname."0.4.3" { inherit profileName; }).out; hex = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".hex."0.4.3" { inherit profileName; }).out; itertools = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".itertools."0.10.5" { inherit profileName; }).out; @@ -1982,9 +1982,9 @@ in }; }); - "unknown".garage_table."0.8.4" = overridableMkRustCrate (profileName: rec { + "unknown".garage_table."0.9.0" = overridableMkRustCrate (profileName: rec { name = "garage_table"; - version = "0.8.4"; + version = "0.9.0"; registry = "unknown"; src = fetchCrateLocal (workspaceSrc + "/src/table"); dependencies = { @@ -1993,9 +1993,9 @@ in bytes = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".bytes."1.4.0" { inherit profileName; }).out; futures = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".futures."0.3.28" { inherit profileName; }).out; futures_util = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".futures-util."0.3.28" { inherit profileName; }).out; - garage_db = (rustPackages."unknown".garage_db."0.8.4" { inherit profileName; }).out; - garage_rpc = (rustPackages."unknown".garage_rpc."0.8.4" { inherit profileName; }).out; - garage_util = (rustPackages."unknown".garage_util."0.8.4" { inherit profileName; }).out; + garage_db = (rustPackages."unknown".garage_db."0.9.0" { inherit profileName; }).out; + garage_rpc = (rustPackages."unknown".garage_rpc."0.9.0" { inherit profileName; }).out; + garage_util = (rustPackages."unknown".garage_util."0.9.0" { inherit profileName; }).out; hex = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".hex."0.4.3" { inherit profileName; }).out; hexdump = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".hexdump."0.1.1" { inherit profileName; }).out; opentelemetry = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".opentelemetry."0.17.0" { inherit profileName; }).out; @@ -2007,9 +2007,9 @@ in }; }); - "unknown".garage_util."0.8.4" = overridableMkRustCrate (profileName: rec { + "unknown".garage_util."0.9.0" = overridableMkRustCrate (profileName: rec { name = "garage_util"; - version = "0.8.4"; + version = "0.9.0"; registry = "unknown"; src = fetchCrateLocal (workspaceSrc + "/src/util"); features = builtins.concatLists [ @@ -2025,7 +2025,7 @@ in digest = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".digest."0.10.7" { inherit profileName; }).out; err_derive = (buildRustPackages."registry+https://github.com/rust-lang/crates.io-index".err-derive."0.3.1" { profileName = "__noProfile"; }).out; futures = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".futures."0.3.28" { inherit profileName; }).out; - garage_db = (rustPackages."unknown".garage_db."0.8.4" { inherit profileName; }).out; + garage_db = (rustPackages."unknown".garage_db."0.9.0" { inherit profileName; }).out; hex = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".hex."0.4.3" { inherit profileName; }).out; hexdump = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".hexdump."0.1.1" { inherit profileName; }).out; http = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".http."0.2.9" { inherit profileName; }).out; @@ -2051,18 +2051,18 @@ in }; }); - "unknown".garage_web."0.8.4" = overridableMkRustCrate (profileName: rec { + "unknown".garage_web."0.9.0" = overridableMkRustCrate (profileName: rec { name = "garage_web"; - version = "0.8.4"; + version = "0.9.0"; registry = "unknown"; src = fetchCrateLocal (workspaceSrc + "/src/web"); dependencies = { err_derive = (buildRustPackages."registry+https://github.com/rust-lang/crates.io-index".err-derive."0.3.1" { profileName = "__noProfile"; }).out; futures = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".futures."0.3.28" { inherit profileName; }).out; - garage_api = (rustPackages."unknown".garage_api."0.8.4" { inherit profileName; }).out; - garage_model = (rustPackages."unknown".garage_model."0.8.4" { inherit profileName; }).out; - garage_table = (rustPackages."unknown".garage_table."0.8.4" { inherit profileName; }).out; - garage_util = (rustPackages."unknown".garage_util."0.8.4" { inherit profileName; }).out; + garage_api = (rustPackages."unknown".garage_api."0.9.0" { inherit profileName; }).out; + garage_model = (rustPackages."unknown".garage_model."0.9.0" { inherit profileName; }).out; + garage_table = (rustPackages."unknown".garage_table."0.9.0" { inherit profileName; }).out; + garage_util = (rustPackages."unknown".garage_util."0.9.0" { inherit profileName; }).out; http = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".http."0.2.9" { inherit profileName; }).out; hyper = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".hyper."0.14.27" { inherit profileName; }).out; hyperlocal = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".hyperlocal."0.8.0" { inherit profileName; }).out; diff --git a/Cargo.toml b/Cargo.toml index b6194766..e3d111c3 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -18,14 +18,14 @@ default-members = ["src/garage"] [workspace.dependencies] format_table = { version = "0.1.1", path = "src/format-table" } -garage_api = { version = "0.8.4", path = "src/api" } -garage_block = { version = "0.8.4", path = "src/block" } -garage_db = { version = "0.8.4", path = "src/db", default-features = false } -garage_model = { version = "0.8.4", path = "src/model", default-features = false } -garage_rpc = { version = "0.8.4", path = "src/rpc" } -garage_table = { version = "0.8.4", path = "src/table" } -garage_util = { version = "0.8.4", path = "src/util" } -garage_web = { version = "0.8.4", path = "src/web" } +garage_api = { version = "0.9.0", path = "src/api" } +garage_block = { version = "0.9.0", path = "src/block" } +garage_db = { version = "0.9.0", path = "src/db", default-features = false } +garage_model = { version = "0.9.0", path = "src/model", default-features = false } +garage_rpc = { version = "0.9.0", path = "src/rpc" } +garage_table = { version = "0.9.0", path = "src/table" } +garage_util = { version = "0.9.0", path = "src/util" } +garage_web = { version = "0.9.0", path = "src/web" } k2v-client = { version = "0.0.4", path = "src/k2v-client" } [profile.dev] diff --git a/script/helm/garage/Chart.yaml b/script/helm/garage/Chart.yaml index 31c5d4e2..346e68ad 100644 --- a/script/helm/garage/Chart.yaml +++ b/script/helm/garage/Chart.yaml @@ -21,4 +21,4 @@ version: 0.4.1 # incremented each time you make changes to the application. Versions are not expected to # follow Semantic Versioning. They should reflect the version the application is using. # It is recommended to use it with quotes. -appVersion: "v0.8.4" +appVersion: "v0.9.0" diff --git a/src/api/Cargo.toml b/src/api/Cargo.toml index cb9e2e55..e8cbc1c8 100644 --- a/src/api/Cargo.toml +++ b/src/api/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "garage_api" -version = "0.8.4" +version = "0.9.0" authors = ["Alex Auvolat "] edition = "2018" license = "AGPL-3.0" diff --git a/src/block/Cargo.toml b/src/block/Cargo.toml index 6a8f1af4..f6aa5f64 100644 --- a/src/block/Cargo.toml +++ b/src/block/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "garage_block" -version = "0.8.4" +version = "0.9.0" authors = ["Alex Auvolat "] edition = "2018" license = "AGPL-3.0" diff --git a/src/db/Cargo.toml b/src/db/Cargo.toml index b46a6c01..67af4a7c 100644 --- a/src/db/Cargo.toml +++ b/src/db/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "garage_db" -version = "0.8.4" +version = "0.9.0" authors = ["Alex Auvolat "] edition = "2018" license = "AGPL-3.0" diff --git a/src/garage/Cargo.toml b/src/garage/Cargo.toml index dab2fa3e..7c3a79cb 100644 --- a/src/garage/Cargo.toml +++ b/src/garage/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "garage" -version = "0.8.4" +version = "0.9.0" authors = ["Alex Auvolat "] edition = "2018" license = "AGPL-3.0" diff --git a/src/model/Cargo.toml b/src/model/Cargo.toml index 7db7f15d..42b7ffdb 100644 --- a/src/model/Cargo.toml +++ b/src/model/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "garage_model" -version = "0.8.4" +version = "0.9.0" authors = ["Alex Auvolat "] edition = "2018" license = "AGPL-3.0" diff --git a/src/rpc/Cargo.toml b/src/rpc/Cargo.toml index 028c1367..f450718f 100644 --- a/src/rpc/Cargo.toml +++ b/src/rpc/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "garage_rpc" -version = "0.8.4" +version = "0.9.0" authors = ["Alex Auvolat "] edition = "2018" license = "AGPL-3.0" diff --git a/src/table/Cargo.toml b/src/table/Cargo.toml index 0d2a3103..08ccec72 100644 --- a/src/table/Cargo.toml +++ b/src/table/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "garage_table" -version = "0.8.4" +version = "0.9.0" authors = ["Alex Auvolat "] edition = "2018" license = "AGPL-3.0" diff --git a/src/util/Cargo.toml b/src/util/Cargo.toml index 641d1e90..6554ac13 100644 --- a/src/util/Cargo.toml +++ b/src/util/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "garage_util" -version = "0.8.4" +version = "0.9.0" authors = ["Alex Auvolat "] edition = "2018" license = "AGPL-3.0" diff --git a/src/web/Cargo.toml b/src/web/Cargo.toml index eec47bcd..88cf1486 100644 --- a/src/web/Cargo.toml +++ b/src/web/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "garage_web" -version = "0.8.4" +version = "0.9.0" authors = ["Alex Auvolat ", "Quentin Dufour "] edition = "2018" license = "AGPL-3.0" From b571dcd811e91daf88920bca99d85d1c8b9bda16 Mon Sep 17 00:00:00 2001 From: Alex Auvolat Date: Tue, 10 Oct 2023 15:43:26 +0200 Subject: [PATCH 021/538] doc: updates to the "migrating to v0.9" page --- doc/book/working-documents/migration-09.md | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/doc/book/working-documents/migration-09.md b/doc/book/working-documents/migration-09.md index 8d403580..ba758093 100644 --- a/doc/book/working-documents/migration-09.md +++ b/doc/book/working-documents/migration-09.md @@ -1,13 +1,16 @@ +++ title = "Migrating from 0.8 to 0.9" -weight = 14 +weight = 12 +++ **This guide explains how to migrate to 0.9 if you have an existing 0.8 cluster. We don't recommend trying to migrate to 0.9 directly from 0.7 or older.** -**We make no guarantee that this migration will work perfectly: -back up all your data before attempting it!** +This migration procedure has been tested on several clusters without issues. +However, it is still a *critical procedure* that might cause issues. +**Make sure to back up all your data before attempting it!** + +You might also want to read our [general documentation on upgrading Garage](@/documentation/operations/upgrading.md). The following are **breaking changes** in Garage v0.9 that require your attention when migrating: From d24aaba697293229b0e0f3228218c4c8b3542796 Mon Sep 17 00:00:00 2001 From: Alex Auvolat Date: Wed, 11 Oct 2023 14:45:50 +0200 Subject: [PATCH 022/538] doc: update quick start and real world for v0.9.0 --- doc/book/cookbook/real-world.md | 77 ++++++++++++++++++--------------- doc/book/quick-start/_index.md | 19 ++++---- 2 files changed, 52 insertions(+), 44 deletions(-) diff --git a/doc/book/cookbook/real-world.md b/doc/book/cookbook/real-world.md index a8fbb371..ea4ce1f9 100644 --- a/doc/book/cookbook/real-world.md +++ b/doc/book/cookbook/real-world.md @@ -19,9 +19,10 @@ To run a real-world deployment, make sure the following conditions are met: - You have at least three machines with sufficient storage space available. -- Each machine has a public IP address which is reachable by other machines. It - is highly recommended that you use IPv6 for this end-to-end connectivity. If - IPv6 is not available, then using a mesh VPN such as +- Each machine has an IP address which makes it directly reachable by all other machines. + In many cases, nodes will be behind a NAT and will not each have a public + IPv4 addresses. In this case, is recommended that you use IPv6 for this + end-to-end connectivity if it is available. Otherwise, using a mesh VPN such as [Nebula](https://github.com/slackhq/nebula) or [Yggdrasil](https://yggdrasil-network.github.io/) are approaches to consider in addition to building out your own VPN tunneling. @@ -42,7 +43,7 @@ For our example, we will suppose the following infrastructure with IPv6 connecti | Brussels | Mars | fc00:F::1 | 1.5 TB | Note that Garage will **always** store the three copies of your data on nodes at different -locations. This means that in the case of this small example, the available capacity +locations. This means that in the case of this small example, the usable capacity of the cluster is in fact only 1.5 TB, because nodes in Brussels can't store more than that. This also means that nodes in Paris and London will be under-utilized. To make better use of the available hardware, you should ensure that the capacity @@ -84,14 +85,14 @@ to store 2 TB of data in total. ## Get a Docker image Our docker image is currently named `dxflrs/garage` and is stored on the [Docker Hub](https://hub.docker.com/r/dxflrs/garage/tags?page=1&ordering=last_updated). -We encourage you to use a fixed tag (eg. `v0.8.0`) and not the `latest` tag. -For this example, we will use the latest published version at the time of the writing which is `v0.8.0` but it's up to you +We encourage you to use a fixed tag (eg. `v0.9.0`) and not the `latest` tag. +For this example, we will use the latest published version at the time of the writing which is `v0.9.0` but it's up to you to check [the most recent versions on the Docker Hub](https://hub.docker.com/r/dxflrs/garage/tags?page=1&ordering=last_updated). For example: ``` -sudo docker pull dxflrs/garage:v0.8.0 +sudo docker pull dxflrs/garage:v0.9.0 ``` ## Deploying and configuring Garage @@ -156,12 +157,13 @@ docker run \ -v /etc/garage.toml:/etc/garage.toml \ -v /var/lib/garage/meta:/var/lib/garage/meta \ -v /var/lib/garage/data:/var/lib/garage/data \ - dxflrs/garage:v0.8.0 + dxflrs/garage:v0.9.0 ``` -It should be restarted automatically at each reboot. -Please note that we use host networking as otherwise Docker containers -can not communicate with IPv6. +With this command line, Garage should be started automatically at each boot. +Please note that we use host networking as otherwise the network indirection +added by Docker would prevent Garage nodes from communicating with one another +(especially if using IPv6). If you want to use `docker-compose`, you may use the following `docker-compose.yml` file as a reference: @@ -169,7 +171,7 @@ If you want to use `docker-compose`, you may use the following `docker-compose.y version: "3" services: garage: - image: dxflrs/garage:v0.8.0 + image: dxflrs/garage:v0.9.0 network_mode: "host" restart: unless-stopped volumes: @@ -178,10 +180,12 @@ services: - /var/lib/garage/data:/var/lib/garage/data ``` -Upgrading between Garage versions should be supported transparently, -but please check the relase notes before doing so! -To upgrade, simply stop and remove this container and -start again the command with a new version of Garage. +If you wish to upgrade your cluster, make sure to read the corresponding +[documentation page](@/documentation/operations/upgrading.md) first, as well as +the documentation relevant to your version of Garage in the case of major +upgrades. With the containerized setup proposed here, the upgrade process +will require stopping and removing the existing container, and re-creating it +with the upgraded version. ## Controling the daemon @@ -265,12 +269,12 @@ of a role that is assigned to each active cluster node. For our example, we will suppose we have the following infrastructure (Capacity, Identifier and Zone are specific values to Garage described in the following): -| Location | Name | Disk Space | `Capacity` | `Identifier` | `Zone` | -|----------|---------|------------|------------|--------------|--------------| -| Paris | Mercury | 1 TB | `10` | `563e` | `par1` | -| Paris | Venus | 2 TB | `20` | `86f0` | `par1` | -| London | Earth | 2 TB | `20` | `6814` | `lon1` | -| Brussels | Mars | 1.5 TB | `15` | `212f` | `bru1` | +| Location | Name | Disk Space | Identifier | Zone (`-z`) | Capacity (`-c`) | +|----------|---------|------------|------------|-------------|-----------------| +| Paris | Mercury | 1 TB | `563e` | `par1` | `1T` | +| Paris | Venus | 2 TB | `86f0` | `par1` | `2T` | +| London | Earth | 2 TB | `6814` | `lon1` | `2T` | +| Brussels | Mars | 1.5 TB | `212f` | `bru1` | `1.5T` | #### Node identifiers @@ -292,6 +296,8 @@ garage status It will display the IP address associated with each node; from the IP address you will be able to recognize the node. +We will now use the `garage layout assign` command to configure the correct parameters for each node. + #### Zones Zones are simply a user-chosen identifier that identify a group of server that are grouped together logically. @@ -301,29 +307,29 @@ In most cases, a zone will correspond to a geographical location (i.e. a datacen Behind the scene, Garage will use zone definition to try to store the same data on different zones, in order to provide high availability despite failure of a zone. +Zones are passed to Garage using the `-z` flag of `garage layout assign` (see below). + #### Capacity -Garage reasons on an abstract metric about disk storage that is named the *capacity* of a node. -The capacity configured in Garage must be proportional to the disk space dedicated to the node. +Garage needs to know the storage capacity (disk space) it can/should use on +each node, to be able to correctly balance data. -Capacity values must be **integers** but can be given any signification. -Here we chose that 1 unit of capacity = 100 GB. +Capacity values are expressed in bytes and are passed to Garage using the `-c` flag of `garage layout assign` (see below). -Note that the amount of data stored by Garage on each server may not be strictly proportional to -its capacity value, as Garage will priorize having 3 copies of data in different zones, -even if this means that capacities will not be strictly respected. For example in our above examples, -nodes Earth and Mars will always store a copy of everything each, and the third copy will -have 66% chance of being stored by Venus and 33% chance of being stored by Mercury. +#### Tags + +You can add additional tags to nodes using the `-t` flag of `garage layout assign` (see below). +Tags have no specific meaning for Garage and can be used at your convenience. #### Injecting the topology Given the information above, we will configure our cluster as follow: ```bash -garage layout assign 563e -z par1 -c 10 -t mercury -garage layout assign 86f0 -z par1 -c 20 -t venus -garage layout assign 6814 -z lon1 -c 20 -t earth -garage layout assign 212f -z bru1 -c 15 -t mars +garage layout assign 563e -z par1 -c 1T -t mercury +garage layout assign 86f0 -z par1 -c 2T -t venus +garage layout assign 6814 -z lon1 -c 2T -t earth +garage layout assign 212f -z bru1 -c 1.5T -t mars ``` At this point, the changes in the cluster layout have not yet been applied. @@ -333,6 +339,7 @@ To show the new layout that will be applied, call: garage layout show ``` +Make sure to read carefully the output of `garage layout show`. Once you are satisfied with your new layout, apply it with: ```bash diff --git a/doc/book/quick-start/_index.md b/doc/book/quick-start/_index.md index 8ed36b7d..1b129f36 100644 --- a/doc/book/quick-start/_index.md +++ b/doc/book/quick-start/_index.md @@ -84,9 +84,8 @@ admin_token = "$(openssl rand -base64 32)" EOF ``` -Now that your configuration file has been created, you can put -it in the right place. By default, garage looks at **`/etc/garage.toml`.** - +Now that your configuration file has been created, you may save it to the directory of your choice. +By default, Garage looks for **`/etc/garage.toml`.** You can also store it somewhere else, but you will have to specify `-c path/to/garage.toml` at each invocation of the `garage` binary (for example: `garage -c ./garage.toml server`, `garage -c ./garage.toml status`). @@ -103,12 +102,14 @@ your data to be persisted properly. ### Launching the Garage server -Use the following command to launch the Garage server with our configuration file: +Use the following command to launch the Garage server: ``` -garage server +garage -c path/to/garage.toml server ``` +If you have placed the `garage.toml` file in `/etc` (its default location), you can simply run `garage server`. + You can tune Garage's verbosity as follows (from less verbose to more verbose): ``` @@ -126,7 +127,7 @@ Log level `debug` can help you check why your S3 API calls are not working. The `garage` utility is also used as a CLI tool to configure your Garage deployment. It uses values from the TOML configuration file to find the Garage daemon running on the local node, therefore if your configuration file is not at `/etc/garage.toml` you will -again have to specify `-c path/to/garage.toml`. +again have to specify `-c path/to/garage.toml` at each invocation. If the `garage` CLI is able to correctly detect the parameters of your local Garage node, the following command should be enough to show the status of your cluster: @@ -140,7 +141,7 @@ This should show something like this: ``` ==== HEALTHY NODES ==== ID Hostname Address Tag Zone Capacity -563e1ac825ee3323… linuxbox 127.0.0.1:3901 NO ROLE ASSIGNED +563e1ac825ee3323 linuxbox 127.0.0.1:3901 NO ROLE ASSIGNED ``` ## Creating a cluster layout @@ -153,12 +154,12 @@ For our test deployment, we are using only one node. The way in which we configu it does not matter, you can simply write: ```bash -garage layout assign -z dc1 -c 1 +garage layout assign -z dc1 -c 1G ``` where `` corresponds to the identifier of the node shown by `garage status` (first column). You can enter simply a prefix of that identifier. -For instance here you could write just `garage layout assign -z dc1 -c 1 563e`. +For instance here you could write just `garage layout assign -z dc1 -c 1G 563e`. The layout then has to be applied to the cluster, using: From c7f5dcd953ff1fdfa002a8bccfb43eafcc6fddd4 Mon Sep 17 00:00:00 2001 From: trinity-1686a Date: Sun, 15 Oct 2023 17:57:27 +0200 Subject: [PATCH 023/538] fix compilation on macos fsblkcnt_t is ony 32b there, so we have to do an additional cast --- src/rpc/system.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/rpc/system.rs b/src/rpc/system.rs index 78fcc74b..4b40bec4 100644 --- a/src/rpc/system.rs +++ b/src/rpc/system.rs @@ -899,8 +899,8 @@ impl NodeStatus { use nix::sys::statvfs::statvfs; let mount_avail = |path: &Path| match statvfs(path) { Ok(x) => { - let avail = x.blocks_available() * x.fragment_size() as u64; - let total = x.blocks() * x.fragment_size() as u64; + let avail = x.blocks_available() as u64 * x.fragment_size() as u64; + let total = x.blocks() as u64 * x.fragment_size() as u64; Some((x.filesystem_id(), avail, total)) } Err(_) => None, From 7011b71fbd782e199417ce9afa44a8c220885b4a Mon Sep 17 00:00:00 2001 From: Alex Auvolat Date: Tue, 18 Apr 2023 12:14:13 +0200 Subject: [PATCH 024/538] jepsen: wip --- script/jepsen.garage/.envrc | 1 + script/jepsen.garage/.gitignore | 15 + script/jepsen.garage/CHANGELOG.md | 24 ++ script/jepsen.garage/LICENSE | 280 ++++++++++++++++++ script/jepsen.garage/README.md | 22 ++ script/jepsen.garage/doc/intro.md | 3 + script/jepsen.garage/flake.nix | 22 ++ script/jepsen.garage/garage-cluster.nix | 64 ++++ script/jepsen.garage/project.clj | 9 + script/jepsen.garage/shell.nix | 6 + script/jepsen.garage/src/jepsen/garage.clj | 18 ++ .../jepsen.garage/test/jepsen/garage_test.clj | 7 + 12 files changed, 471 insertions(+) create mode 100644 script/jepsen.garage/.envrc create mode 100644 script/jepsen.garage/.gitignore create mode 100644 script/jepsen.garage/CHANGELOG.md create mode 100644 script/jepsen.garage/LICENSE create mode 100644 script/jepsen.garage/README.md create mode 100644 script/jepsen.garage/doc/intro.md create mode 100644 script/jepsen.garage/flake.nix create mode 100644 script/jepsen.garage/garage-cluster.nix create mode 100644 script/jepsen.garage/project.clj create mode 100644 script/jepsen.garage/shell.nix create mode 100644 script/jepsen.garage/src/jepsen/garage.clj create mode 100644 script/jepsen.garage/test/jepsen/garage_test.clj diff --git a/script/jepsen.garage/.envrc b/script/jepsen.garage/.envrc new file mode 100644 index 00000000..1d953f4b --- /dev/null +++ b/script/jepsen.garage/.envrc @@ -0,0 +1 @@ +use nix diff --git a/script/jepsen.garage/.gitignore b/script/jepsen.garage/.gitignore new file mode 100644 index 00000000..44e41749 --- /dev/null +++ b/script/jepsen.garage/.gitignore @@ -0,0 +1,15 @@ +/target +/classes +/checkouts +profiles.clj +pom.xml +pom.xml.asc +*.jar +*.class +/.lein-* +/.nrepl-port +/.prepl-port +.hgignore +.hg/ +.direnv +/store diff --git a/script/jepsen.garage/CHANGELOG.md b/script/jepsen.garage/CHANGELOG.md new file mode 100644 index 00000000..c1abdb4d --- /dev/null +++ b/script/jepsen.garage/CHANGELOG.md @@ -0,0 +1,24 @@ +# Change Log +All notable changes to this project will be documented in this file. This change log follows the conventions of [keepachangelog.com](http://keepachangelog.com/). + +## [Unreleased] +### Changed +- Add a new arity to `make-widget-async` to provide a different widget shape. + +## [0.1.1] - 2023-04-18 +### Changed +- Documentation on how to make the widgets. + +### Removed +- `make-widget-sync` - we're all async, all the time. + +### Fixed +- Fixed widget maker to keep working when daylight savings switches over. + +## 0.1.0 - 2023-04-18 +### Added +- Files from the new template. +- Widget maker public API - `make-widget-sync`. + +[Unreleased]: https://sourcehost.site/your-name/jepsen.garage/compare/0.1.1...HEAD +[0.1.1]: https://sourcehost.site/your-name/jepsen.garage/compare/0.1.0...0.1.1 diff --git a/script/jepsen.garage/LICENSE b/script/jepsen.garage/LICENSE new file mode 100644 index 00000000..23151265 --- /dev/null +++ b/script/jepsen.garage/LICENSE @@ -0,0 +1,280 @@ +Eclipse Public License - v 2.0 + + THE ACCOMPANYING PROGRAM IS PROVIDED UNDER THE TERMS OF THIS ECLIPSE + PUBLIC LICENSE ("AGREEMENT"). ANY USE, REPRODUCTION OR DISTRIBUTION + OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE OF THIS AGREEMENT. + +1. DEFINITIONS + +"Contribution" means: + + a) in the case of the initial Contributor, the initial content + Distributed under this Agreement, and + + b) in the case of each subsequent Contributor: + i) changes to the Program, and + ii) additions to the Program; + where such changes and/or additions to the Program originate from + and are Distributed by that particular Contributor. A Contribution + "originates" from a Contributor if it was added to the Program by + such Contributor itself or anyone acting on such Contributor's behalf. + Contributions do not include changes or additions to the Program that + are not Modified Works. + +"Contributor" means any person or entity that Distributes the Program. + +"Licensed Patents" mean patent claims licensable by a Contributor which +are necessarily infringed by the use or sale of its Contribution alone +or when combined with the Program. + +"Program" means the Contributions Distributed in accordance with this +Agreement. + +"Recipient" means anyone who receives the Program under this Agreement +or any Secondary License (as applicable), including Contributors. + +"Derivative Works" shall mean any work, whether in Source Code or other +form, that is based on (or derived from) the Program and for which the +editorial revisions, annotations, elaborations, or other modifications +represent, as a whole, an original work of authorship. + +"Modified Works" shall mean any work in Source Code or other form that +results from an addition to, deletion from, or modification of the +contents of the Program, including, for purposes of clarity any new file +in Source Code form that contains any contents of the Program. Modified +Works shall not include works that contain only declarations, +interfaces, types, classes, structures, or files of the Program solely +in each case in order to link to, bind by name, or subclass the Program +or Modified Works thereof. + +"Distribute" means the acts of a) distributing or b) making available +in any manner that enables the transfer of a copy. + +"Source Code" means the form of a Program preferred for making +modifications, including but not limited to software source code, +documentation source, and configuration files. + +"Secondary License" means either the GNU General Public License, +Version 2.0, or any later versions of that license, including any +exceptions or additional permissions as identified by the initial +Contributor. + +2. GRANT OF RIGHTS + + a) Subject to the terms of this Agreement, each Contributor hereby + grants Recipient a non-exclusive, worldwide, royalty-free copyright + license to reproduce, prepare Derivative Works of, publicly display, + publicly perform, Distribute and sublicense the Contribution of such + Contributor, if any, and such Derivative Works. + + b) Subject to the terms of this Agreement, each Contributor hereby + grants Recipient a non-exclusive, worldwide, royalty-free patent + license under Licensed Patents to make, use, sell, offer to sell, + import and otherwise transfer the Contribution of such Contributor, + if any, in Source Code or other form. This patent license shall + apply to the combination of the Contribution and the Program if, at + the time the Contribution is added by the Contributor, such addition + of the Contribution causes such combination to be covered by the + Licensed Patents. The patent license shall not apply to any other + combinations which include the Contribution. No hardware per se is + licensed hereunder. + + c) Recipient understands that although each Contributor grants the + licenses to its Contributions set forth herein, no assurances are + provided by any Contributor that the Program does not infringe the + patent or other intellectual property rights of any other entity. + Each Contributor disclaims any liability to Recipient for claims + brought by any other entity based on infringement of intellectual + property rights or otherwise. As a condition to exercising the + rights and licenses granted hereunder, each Recipient hereby + assumes sole responsibility to secure any other intellectual + property rights needed, if any. For example, if a third party + patent license is required to allow Recipient to Distribute the + Program, it is Recipient's responsibility to acquire that license + before distributing the Program. + + d) Each Contributor represents that to its knowledge it has + sufficient copyright rights in its Contribution, if any, to grant + the copyright license set forth in this Agreement. + + e) Notwithstanding the terms of any Secondary License, no + Contributor makes additional grants to any Recipient (other than + those set forth in this Agreement) as a result of such Recipient's + receipt of the Program under the terms of a Secondary License + (if permitted under the terms of Section 3). + +3. REQUIREMENTS + +3.1 If a Contributor Distributes the Program in any form, then: + + a) the Program must also be made available as Source Code, in + accordance with section 3.2, and the Contributor must accompany + the Program with a statement that the Source Code for the Program + is available under this Agreement, and informs Recipients how to + obtain it in a reasonable manner on or through a medium customarily + used for software exchange; and + + b) the Contributor may Distribute the Program under a license + different than this Agreement, provided that such license: + i) effectively disclaims on behalf of all other Contributors all + warranties and conditions, express and implied, including + warranties or conditions of title and non-infringement, and + implied warranties or conditions of merchantability and fitness + for a particular purpose; + + ii) effectively excludes on behalf of all other Contributors all + liability for damages, including direct, indirect, special, + incidental and consequential damages, such as lost profits; + + iii) does not attempt to limit or alter the recipients' rights + in the Source Code under section 3.2; and + + iv) requires any subsequent distribution of the Program by any + party to be under a license that satisfies the requirements + of this section 3. + +3.2 When the Program is Distributed as Source Code: + + a) it must be made available under this Agreement, or if the + Program (i) is combined with other material in a separate file or + files made available under a Secondary License, and (ii) the initial + Contributor attached to the Source Code the notice described in + Exhibit A of this Agreement, then the Program may be made available + under the terms of such Secondary Licenses, and + + b) a copy of this Agreement must be included with each copy of + the Program. + +3.3 Contributors may not remove or alter any copyright, patent, +trademark, attribution notices, disclaimers of warranty, or limitations +of liability ("notices") contained within the Program from any copy of +the Program which they Distribute, provided that Contributors may add +their own appropriate notices. + +4. COMMERCIAL DISTRIBUTION + +Commercial distributors of software may accept certain responsibilities +with respect to end users, business partners and the like. While this +license is intended to facilitate the commercial use of the Program, +the Contributor who includes the Program in a commercial product +offering should do so in a manner which does not create potential +liability for other Contributors. Therefore, if a Contributor includes +the Program in a commercial product offering, such Contributor +("Commercial Contributor") hereby agrees to defend and indemnify every +other Contributor ("Indemnified Contributor") against any losses, +damages and costs (collectively "Losses") arising from claims, lawsuits +and other legal actions brought by a third party against the Indemnified +Contributor to the extent caused by the acts or omissions of such +Commercial Contributor in connection with its distribution of the Program +in a commercial product offering. The obligations in this section do not +apply to any claims or Losses relating to any actual or alleged +intellectual property infringement. In order to qualify, an Indemnified +Contributor must: a) promptly notify the Commercial Contributor in +writing of such claim, and b) allow the Commercial Contributor to control, +and cooperate with the Commercial Contributor in, the defense and any +related settlement negotiations. The Indemnified Contributor may +participate in any such claim at its own expense. + +For example, a Contributor might include the Program in a commercial +product offering, Product X. That Contributor is then a Commercial +Contributor. If that Commercial Contributor then makes performance +claims, or offers warranties related to Product X, those performance +claims and warranties are such Commercial Contributor's responsibility +alone. Under this section, the Commercial Contributor would have to +defend claims against the other Contributors related to those performance +claims and warranties, and if a court requires any other Contributor to +pay any damages as a result, the Commercial Contributor must pay +those damages. + +5. NO WARRANTY + +EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, AND TO THE EXTENT +PERMITTED BY APPLICABLE LAW, THE PROGRAM IS PROVIDED ON AN "AS IS" +BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR +IMPLIED INCLUDING, WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF +TITLE, NON-INFRINGEMENT, MERCHANTABILITY OR FITNESS FOR A PARTICULAR +PURPOSE. Each Recipient is solely responsible for determining the +appropriateness of using and distributing the Program and assumes all +risks associated with its exercise of rights under this Agreement, +including but not limited to the risks and costs of program errors, +compliance with applicable laws, damage to or loss of data, programs +or equipment, and unavailability or interruption of operations. + +6. DISCLAIMER OF LIABILITY + +EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, AND TO THE EXTENT +PERMITTED BY APPLICABLE LAW, NEITHER RECIPIENT NOR ANY CONTRIBUTORS +SHALL HAVE ANY LIABILITY FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING WITHOUT LIMITATION LOST +PROFITS), HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +ARISING IN ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE +EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + +7. GENERAL + +If any provision of this Agreement is invalid or unenforceable under +applicable law, it shall not affect the validity or enforceability of +the remainder of the terms of this Agreement, and without further +action by the parties hereto, such provision shall be reformed to the +minimum extent necessary to make such provision valid and enforceable. + +If Recipient institutes patent litigation against any entity +(including a cross-claim or counterclaim in a lawsuit) alleging that the +Program itself (excluding combinations of the Program with other software +or hardware) infringes such Recipient's patent(s), then such Recipient's +rights granted under Section 2(b) shall terminate as of the date such +litigation is filed. + +All Recipient's rights under this Agreement shall terminate if it +fails to comply with any of the material terms or conditions of this +Agreement and does not cure such failure in a reasonable period of +time after becoming aware of such noncompliance. If all Recipient's +rights under this Agreement terminate, Recipient agrees to cease use +and distribution of the Program as soon as reasonably practicable. +However, Recipient's obligations under this Agreement and any licenses +granted by Recipient relating to the Program shall continue and survive. + +Everyone is permitted to copy and distribute copies of this Agreement, +but in order to avoid inconsistency the Agreement is copyrighted and +may only be modified in the following manner. The Agreement Steward +reserves the right to publish new versions (including revisions) of +this Agreement from time to time. No one other than the Agreement +Steward has the right to modify this Agreement. The Eclipse Foundation +is the initial Agreement Steward. The Eclipse Foundation may assign the +responsibility to serve as the Agreement Steward to a suitable separate +entity. Each new version of the Agreement will be given a distinguishing +version number. The Program (including Contributions) may always be +Distributed subject to the version of the Agreement under which it was +received. In addition, after a new version of the Agreement is published, +Contributor may elect to Distribute the Program (including its +Contributions) under the new version. + +Except as expressly stated in Sections 2(a) and 2(b) above, Recipient +receives no rights or licenses to the intellectual property of any +Contributor under this Agreement, whether expressly, by implication, +estoppel or otherwise. All rights in the Program not expressly granted +under this Agreement are reserved. Nothing in this Agreement is intended +to be enforceable by any entity that is not a Contributor or Recipient. +No third-party beneficiary rights are created under this Agreement. + +Exhibit A - Form of Secondary Licenses Notice + +"This Source Code may also be made available under the following +Secondary Licenses when the conditions for such availability set forth +in the Eclipse Public License, v. 2.0 are satisfied: GNU General Public +License as published by the Free Software Foundation, either version 2 +of the License, or (at your option) any later version, with the GNU +Classpath Exception which is available at +https://www.gnu.org/software/classpath/license.html." + + Simply including a copy of this Agreement, including this Exhibit A + is not sufficient to license the Source Code under Secondary Licenses. + + If it is not possible or desirable to put the notice in a particular + file, then You may include the notice in a location (such as a LICENSE + file in a relevant directory) where a recipient would be likely to + look for such a notice. + + You may add additional accurate notices of copyright ownership. diff --git a/script/jepsen.garage/README.md b/script/jepsen.garage/README.md new file mode 100644 index 00000000..e1d1a555 --- /dev/null +++ b/script/jepsen.garage/README.md @@ -0,0 +1,22 @@ +# jepsen.garage + +A Clojure library designed to ... well, that part is up to you. + +## Usage + +FIXME + +## License + +Copyright © 2023 FIXME + +This program and the accompanying materials are made available under the +terms of the Eclipse Public License 2.0 which is available at +http://www.eclipse.org/legal/epl-2.0. + +This Source Code may also be made available under the following Secondary +Licenses when the conditions for such availability set forth in the Eclipse +Public License, v. 2.0 are satisfied: GNU General Public License as published by +the Free Software Foundation, either version 2 of the License, or (at your +option) any later version, with the GNU Classpath Exception which is available +at https://www.gnu.org/software/classpath/license.html. diff --git a/script/jepsen.garage/doc/intro.md b/script/jepsen.garage/doc/intro.md new file mode 100644 index 00000000..ee727bbc --- /dev/null +++ b/script/jepsen.garage/doc/intro.md @@ -0,0 +1,3 @@ +# Introduction to jepsen.garage + +TODO: write [great documentation](http://jacobian.org/writing/what-to-write/) diff --git a/script/jepsen.garage/flake.nix b/script/jepsen.garage/flake.nix new file mode 100644 index 00000000..76ee8ebf --- /dev/null +++ b/script/jepsen.garage/flake.nix @@ -0,0 +1,22 @@ +# Example flake.nix +{ + inputs.nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable"; + inputs.microvm.url = "github:astro/microvm.nix"; + inputs.microvm.inputs.nixpkgs.follows = "nixpkgs"; + + outputs = { self, nixpkgs, microvm }: { + # Example nixosConfigurations entry + nixosConfigurations.my-microvm = nixpkgs.lib.nixosSystem { + system = "x86_64-linux"; + modules = [ + # Include the microvm module + microvm.nixosModules.microvm + # Add more modules here + { + networking.hostName = "my-microvm"; + microvm.hypervisor = "cloud-hypervisor"; + } + ]; + }; + }; +} diff --git a/script/jepsen.garage/garage-cluster.nix b/script/jepsen.garage/garage-cluster.nix new file mode 100644 index 00000000..32fedc04 --- /dev/null +++ b/script/jepsen.garage/garage-cluster.nix @@ -0,0 +1,64 @@ +{ config, lib, pkgs, ... }: +let + unstable = import ./unstable.nix; + addressMap = + { + "n1" = { localAddress = "10.233.0.101"; hostAddress = "10.233.1.101"; }; + "n2" = { localAddress = "10.233.0.102"; hostAddress = "10.233.1.102"; }; + "n3" = { localAddress = "10.233.0.103"; hostAddress = "10.233.1.103"; }; + "n4" = { localAddress = "10.233.0.104"; hostAddress = "10.233.1.104"; }; + "n5" = { localAddress = "10.233.0.105"; hostAddress = "10.233.1.105"; }; + }; + toHostsEntry = name: { localAddress, ... }: "${localAddress} ${name}"; + extraHosts = + builtins.concatStringsSep "\n" + (lib.attrsets.mapAttrsToList toHostsEntry addressMap); + nodeConfig = hostName: { localAddress, hostAddress }: { + inherit localAddress hostAddress; + + ephemeral = true; + autoStart = true; + privateNetwork = true; + + config = { config, pkgs, ... }: + { + networking = { + inherit hostName extraHosts; + }; + + services.openssh = { + enable = true; + permitRootLogin = "yes"; + }; + users.users.root.initialPassword = "root"; + + system.stateVersion = "22.11"; + + services.garage = { + enable = true; + logLevel = "debug"; + settings.replication_mode = "3"; + }; + + # Workaround for nixos-container issue + # (see https://github.com/NixOS/nixpkgs/issues/67265 and + # https://github.com/NixOS/nixpkgs/pull/81371#issuecomment-605526099). + # The etcd service is of type "notify", which means that + # etcd would not be considered started until etcd is fully online; + # however, since NixOS container networking only works sometime *after* + # multi-user.target, we forgo etcd's notification entirely. + systemd.services.etcd.serviceConfig.Type = lib.mkForce "exec"; + + systemd.services.etcd.serviceConfig.StandardOutput = "file:/var/log/etcd.log"; + systemd.services.etcd.serviceConfig.StandardError = "file:/var/log/etcd.log"; + + networking.firewall.allowedTCPPorts = [ 2379 2380 ]; + }; + }; +in +{ + containers = lib.attrsets.mapAttrs nodeConfig addressMap; + networking = { + inherit extraHosts; + }; +} diff --git a/script/jepsen.garage/project.clj b/script/jepsen.garage/project.clj new file mode 100644 index 00000000..ac3df57e --- /dev/null +++ b/script/jepsen.garage/project.clj @@ -0,0 +1,9 @@ +(defproject jepsen.garage "0.1.0-SNAPSHOT" + :description "Jepsen testing for Garage" + :url "https://git.deuxfleurs.fr/Deuxfleurs/garage" + :license {:name "GPLv3" + :url "https://www.gnu.org/licenses/gpl-3.0.en.html"} + :main jepsen.garage + :dependencies [[org.clojure/clojure "1.11.1"] + [jepsen "0.2.1-SNAPSHOT"]] + :repl-options {:init-ns jepsen.garage}) diff --git a/script/jepsen.garage/shell.nix b/script/jepsen.garage/shell.nix new file mode 100644 index 00000000..4f0af839 --- /dev/null +++ b/script/jepsen.garage/shell.nix @@ -0,0 +1,6 @@ +{ pkgs ? import {} }: + pkgs.mkShell { + nativeBuildInputs = [ + pkgs.leiningen + ]; +} diff --git a/script/jepsen.garage/src/jepsen/garage.clj b/script/jepsen.garage/src/jepsen/garage.clj new file mode 100644 index 00000000..1351c4a7 --- /dev/null +++ b/script/jepsen.garage/src/jepsen/garage.clj @@ -0,0 +1,18 @@ +(ns jepsen.garage + (:require [jepsen.cli :as cli] + [jepsen.tests :as tests])) + +(defn garage-test + "Given an options map from the command line runner (e.g. :nodes, :ssh, + :concurrency, ...), constructs a test map." + [opts] + (merge tests/noop-test + {:pure-generators true} + opts)) + +(defn -main + "Handles command line arguments. Can either run a test, or a web server for + browsing results." + [& args] + (cli/run! (cli/single-test-cmd {:test-fn garage-test}) + args)) diff --git a/script/jepsen.garage/test/jepsen/garage_test.clj b/script/jepsen.garage/test/jepsen/garage_test.clj new file mode 100644 index 00000000..055392a1 --- /dev/null +++ b/script/jepsen.garage/test/jepsen/garage_test.clj @@ -0,0 +1,7 @@ +(ns jepsen.garage-test + (:require [clojure.test :refer :all] + [jepsen.garage :refer :all])) + +(deftest a-test + (testing "FIXME, I fail." + (is (= 0 1)))) From 17ebb652730f69f53fe7d2b31fbf2db2075b9be7 Mon Sep 17 00:00:00 2001 From: Alex Auvolat Date: Tue, 18 Apr 2023 13:27:22 +0200 Subject: [PATCH 025/538] jepsen ssh into containers seem to work ? --- script/jepsen.garage/destroy-tap.sh | 9 ++++ script/jepsen.garage/flake.lock | 64 +++++++++++++++++++++++++ script/jepsen.garage/flake.nix | 45 +++++++++++++++-- script/jepsen.garage/garage-cluster.nix | 34 +++++++------ script/jepsen.garage/nodes | 5 ++ script/jepsen.garage/project.clj | 2 +- script/jepsen.garage/setup-tap.sh | 10 ++++ 7 files changed, 150 insertions(+), 19 deletions(-) create mode 100755 script/jepsen.garage/destroy-tap.sh create mode 100644 script/jepsen.garage/flake.lock create mode 100644 script/jepsen.garage/nodes create mode 100755 script/jepsen.garage/setup-tap.sh diff --git a/script/jepsen.garage/destroy-tap.sh b/script/jepsen.garage/destroy-tap.sh new file mode 100755 index 00000000..544b3053 --- /dev/null +++ b/script/jepsen.garage/destroy-tap.sh @@ -0,0 +1,9 @@ +#!/usr/bin/env bash + +USER=$(whoami) + +for NODE in 1 2 3 4 5; do + sudo ip link delete microvm-n$NODE +done + + diff --git a/script/jepsen.garage/flake.lock b/script/jepsen.garage/flake.lock new file mode 100644 index 00000000..63dd88f8 --- /dev/null +++ b/script/jepsen.garage/flake.lock @@ -0,0 +1,64 @@ +{ + "nodes": { + "flake-utils": { + "locked": { + "lastModified": 1678901627, + "narHash": "sha256-U02riOqrKKzwjsxc/400XnElV+UtPUQWpANPlyazjH0=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "93a2b84fc4b70d9e089d029deacc3583435c2ed6", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "microvm": { + "inputs": { + "flake-utils": "flake-utils", + "nixpkgs": [ + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1681747916, + "narHash": "sha256-tpWJMHWbTrFD2Nmj3Y3qYXoaTP4LFT0P0wt5zW8/aI8=", + "owner": "astro", + "repo": "microvm.nix", + "rev": "68f1b9ece0f116d5ea1d1ecaf17f7b526303df81", + "type": "github" + }, + "original": { + "owner": "astro", + "repo": "microvm.nix", + "type": "github" + } + }, + "nixpkgs": { + "locked": { + "lastModified": 1681737997, + "narHash": "sha256-pHhjgsIkRMu80LmVe8QoKIZB6VZGRRxFmIvsC5S89k4=", + "owner": "nixos", + "repo": "nixpkgs", + "rev": "f00994e78cd39e6fc966f0c4103f908e63284780", + "type": "github" + }, + "original": { + "owner": "nixos", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "root": { + "inputs": { + "microvm": "microvm", + "nixpkgs": "nixpkgs" + } + } + }, + "root": "root", + "version": 7 +} diff --git a/script/jepsen.garage/flake.nix b/script/jepsen.garage/flake.nix index 76ee8ebf..2afa9ea1 100644 --- a/script/jepsen.garage/flake.nix +++ b/script/jepsen.garage/flake.nix @@ -4,19 +4,56 @@ inputs.microvm.url = "github:astro/microvm.nix"; inputs.microvm.inputs.nixpkgs.follows = "nixpkgs"; - outputs = { self, nixpkgs, microvm }: { - # Example nixosConfigurations entry - nixosConfigurations.my-microvm = nixpkgs.lib.nixosSystem { + outputs = { self, nixpkgs, microvm }: + with nixpkgs.lib; + let + addressMap = + { + "n1" = { ip = "10.1.0.10"; mac = "02:00:00:00:99:01"; }; + "n2" = { ip = "10.2.0.10"; mac = "02:00:00:00:99:02"; }; + "n3" = { ip = "10.3.0.10"; mac = "02:00:00:00:99:03"; }; + "n4" = { ip = "10.4.0.10"; mac = "02:00:00:00:99:04"; }; + "n5" = { ip = "10.5.0.10"; mac = "02:00:00:00:99:05"; }; + }; + toHostsEntry = name: { ip, ... }: "${ip} ${name}"; + extraHosts = + builtins.concatStringsSep "\n" + (attrsets.mapAttrsToList toHostsEntry addressMap); + + nodeConfig = hostName: { ip, mac }: nixosSystem { system = "x86_64-linux"; modules = [ # Include the microvm module microvm.nixosModules.microvm # Add more modules here { - networking.hostName = "my-microvm"; + networking = { + inherit hostName extraHosts; + }; + microvm.hypervisor = "cloud-hypervisor"; + microvm.interfaces = [ { + inherit mac; + type = "tap"; + id = "microvm-${hostName}"; + } ]; + + services.openssh = { + enable = true; + permitRootLogin = "yes"; + }; + users.users.root.initialPassword = "root"; + + #services.garage = { + # enable = true; + # logLevel = "debug"; + # settings.replication_mode = "3"; + #}; } ]; }; + in + { + nixosConfigurations = mapAttrs nodeConfig addressMap; }; } diff --git a/script/jepsen.garage/garage-cluster.nix b/script/jepsen.garage/garage-cluster.nix index 32fedc04..ebc73aaf 100644 --- a/script/jepsen.garage/garage-cluster.nix +++ b/script/jepsen.garage/garage-cluster.nix @@ -29,30 +29,36 @@ let services.openssh = { enable = true; permitRootLogin = "yes"; + kexAlgorithms = [ "curve25519-sha256@libssh.org" "ecdh-sha2-nistp256" "ecdh-sha2-nistp384" "ecdh-sha2-nistp521" "diffie-hellman-group-exchange-sha256" "diffie-hellman-group14-sha1" "diffie-hellman-group-exchange-sha1" "diffie-hellman-group1-sha1" ]; }; users.users.root.initialPassword = "root"; + users.users.root.openssh.authorizedKeys.keys = [ + "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIJpaBZdYxHqMxhv2RExAOa7nkKhPBOHupMP3mYaZ73w9" + ]; system.stateVersion = "22.11"; services.garage = { enable = true; logLevel = "debug"; - settings.replication_mode = "3"; + settings = { + replication_mode = "3"; + db_engine = "lmdb"; + rpc_secret = "b597bb28ebdc90cdc4f15712733ca678cfb9a7e0311e0b9e93db9610fc3685e6"; + rpc_bind_addr = "0.0.0.0:3901"; + s3_api = { + region = "garage"; + api_bind_addr = "0.0.0.0:3900"; + }; + k2v_api.api_bind_addr = "0.0.0.0:3902"; + admin = { + api_bind_addr = "0.0.0.0:3903"; + admin_token = "icanhazadmin"; + }; + }; }; - # Workaround for nixos-container issue - # (see https://github.com/NixOS/nixpkgs/issues/67265 and - # https://github.com/NixOS/nixpkgs/pull/81371#issuecomment-605526099). - # The etcd service is of type "notify", which means that - # etcd would not be considered started until etcd is fully online; - # however, since NixOS container networking only works sometime *after* - # multi-user.target, we forgo etcd's notification entirely. - systemd.services.etcd.serviceConfig.Type = lib.mkForce "exec"; - - systemd.services.etcd.serviceConfig.StandardOutput = "file:/var/log/etcd.log"; - systemd.services.etcd.serviceConfig.StandardError = "file:/var/log/etcd.log"; - - networking.firewall.allowedTCPPorts = [ 2379 2380 ]; + networking.firewall.allowedTCPPorts = [ 3901 3900 3902 3903 ]; }; }; in diff --git a/script/jepsen.garage/nodes b/script/jepsen.garage/nodes new file mode 100644 index 00000000..b8f3eeb1 --- /dev/null +++ b/script/jepsen.garage/nodes @@ -0,0 +1,5 @@ +n1.containers +n2.containers +n3.containers +n4.containers +n5.containers diff --git a/script/jepsen.garage/project.clj b/script/jepsen.garage/project.clj index ac3df57e..2ab03e49 100644 --- a/script/jepsen.garage/project.clj +++ b/script/jepsen.garage/project.clj @@ -5,5 +5,5 @@ :url "https://www.gnu.org/licenses/gpl-3.0.en.html"} :main jepsen.garage :dependencies [[org.clojure/clojure "1.11.1"] - [jepsen "0.2.1-SNAPSHOT"]] + [jepsen "0.3.2-SNAPSHOT"]] :repl-options {:init-ns jepsen.garage}) diff --git a/script/jepsen.garage/setup-tap.sh b/script/jepsen.garage/setup-tap.sh new file mode 100755 index 00000000..7e09abc3 --- /dev/null +++ b/script/jepsen.garage/setup-tap.sh @@ -0,0 +1,10 @@ +#!/usr/bin/env bash + +USER=$(whoami) + +for NODE in 1 2 3 4 5; do + sudo ip tuntap add microvm-n$NODE mode tap user $USER + sudo ip addr add dev microvm-n$NODE 10.$NODE.0.1 +done + + From ca4cc7e44f6143ec24be626c683ed5b14ff40295 Mon Sep 17 00:00:00 2001 From: Alex Auvolat Date: Tue, 18 Apr 2023 13:59:03 +0200 Subject: [PATCH 026/538] jepsen connects to vagrant vms --- script/jepsen.garage/.gitignore | 1 + script/jepsen.garage/Vagrantfile | 29 +++++++++ script/jepsen.garage/flake.lock | 64 ------------------- script/jepsen.garage/flake.nix | 59 ----------------- .../jepsen.garage/{nodes => nodes.containers} | 0 script/jepsen.garage/nodes.vagrant | 5 ++ script/jepsen.garage/shell.nix | 1 + script/jepsen.garage/src/jepsen/garage.clj | 3 +- 8 files changed, 38 insertions(+), 124 deletions(-) create mode 100644 script/jepsen.garage/Vagrantfile delete mode 100644 script/jepsen.garage/flake.lock delete mode 100644 script/jepsen.garage/flake.nix rename script/jepsen.garage/{nodes => nodes.containers} (100%) create mode 100644 script/jepsen.garage/nodes.vagrant diff --git a/script/jepsen.garage/.gitignore b/script/jepsen.garage/.gitignore index 44e41749..6eb8c209 100644 --- a/script/jepsen.garage/.gitignore +++ b/script/jepsen.garage/.gitignore @@ -13,3 +13,4 @@ pom.xml.asc .hg/ .direnv /store +.vagrant diff --git a/script/jepsen.garage/Vagrantfile b/script/jepsen.garage/Vagrantfile new file mode 100644 index 00000000..da6a277f --- /dev/null +++ b/script/jepsen.garage/Vagrantfile @@ -0,0 +1,29 @@ +# -*- mode: ruby -*- +# vi: set ft=ruby : +# + +def vm(config, hostname, ip) + config.vm.hostname = hostname + config.vm.network "private_network", ip: ip +end + +Vagrant.configure("2") do |config| + config.vm.box = "generic/alpine38" + + config.vm.provider "virtualbox" do |vb| + vb.gui = false + vb.memory = "512" + end + + config.vm.provision "shell", inline: <<-SHELL + echo "root:root" | chpasswd + apk update + apk add wget + SHELL + + config.vm.define "n1" do |config| vm(config, "n1", "192.168.56.21") end + config.vm.define "n2" do |config| vm(config, "n2", "192.168.56.22") end + config.vm.define "n3" do |config| vm(config, "n3", "192.168.56.23") end + config.vm.define "n4" do |config| vm(config, "n4", "192.168.56.24") end + config.vm.define "n5" do |config| vm(config, "n5", "192.168.56.25") end +end diff --git a/script/jepsen.garage/flake.lock b/script/jepsen.garage/flake.lock deleted file mode 100644 index 63dd88f8..00000000 --- a/script/jepsen.garage/flake.lock +++ /dev/null @@ -1,64 +0,0 @@ -{ - "nodes": { - "flake-utils": { - "locked": { - "lastModified": 1678901627, - "narHash": "sha256-U02riOqrKKzwjsxc/400XnElV+UtPUQWpANPlyazjH0=", - "owner": "numtide", - "repo": "flake-utils", - "rev": "93a2b84fc4b70d9e089d029deacc3583435c2ed6", - "type": "github" - }, - "original": { - "owner": "numtide", - "repo": "flake-utils", - "type": "github" - } - }, - "microvm": { - "inputs": { - "flake-utils": "flake-utils", - "nixpkgs": [ - "nixpkgs" - ] - }, - "locked": { - "lastModified": 1681747916, - "narHash": "sha256-tpWJMHWbTrFD2Nmj3Y3qYXoaTP4LFT0P0wt5zW8/aI8=", - "owner": "astro", - "repo": "microvm.nix", - "rev": "68f1b9ece0f116d5ea1d1ecaf17f7b526303df81", - "type": "github" - }, - "original": { - "owner": "astro", - "repo": "microvm.nix", - "type": "github" - } - }, - "nixpkgs": { - "locked": { - "lastModified": 1681737997, - "narHash": "sha256-pHhjgsIkRMu80LmVe8QoKIZB6VZGRRxFmIvsC5S89k4=", - "owner": "nixos", - "repo": "nixpkgs", - "rev": "f00994e78cd39e6fc966f0c4103f908e63284780", - "type": "github" - }, - "original": { - "owner": "nixos", - "ref": "nixos-unstable", - "repo": "nixpkgs", - "type": "github" - } - }, - "root": { - "inputs": { - "microvm": "microvm", - "nixpkgs": "nixpkgs" - } - } - }, - "root": "root", - "version": 7 -} diff --git a/script/jepsen.garage/flake.nix b/script/jepsen.garage/flake.nix deleted file mode 100644 index 2afa9ea1..00000000 --- a/script/jepsen.garage/flake.nix +++ /dev/null @@ -1,59 +0,0 @@ -# Example flake.nix -{ - inputs.nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable"; - inputs.microvm.url = "github:astro/microvm.nix"; - inputs.microvm.inputs.nixpkgs.follows = "nixpkgs"; - - outputs = { self, nixpkgs, microvm }: - with nixpkgs.lib; - let - addressMap = - { - "n1" = { ip = "10.1.0.10"; mac = "02:00:00:00:99:01"; }; - "n2" = { ip = "10.2.0.10"; mac = "02:00:00:00:99:02"; }; - "n3" = { ip = "10.3.0.10"; mac = "02:00:00:00:99:03"; }; - "n4" = { ip = "10.4.0.10"; mac = "02:00:00:00:99:04"; }; - "n5" = { ip = "10.5.0.10"; mac = "02:00:00:00:99:05"; }; - }; - toHostsEntry = name: { ip, ... }: "${ip} ${name}"; - extraHosts = - builtins.concatStringsSep "\n" - (attrsets.mapAttrsToList toHostsEntry addressMap); - - nodeConfig = hostName: { ip, mac }: nixosSystem { - system = "x86_64-linux"; - modules = [ - # Include the microvm module - microvm.nixosModules.microvm - # Add more modules here - { - networking = { - inherit hostName extraHosts; - }; - - microvm.hypervisor = "cloud-hypervisor"; - microvm.interfaces = [ { - inherit mac; - type = "tap"; - id = "microvm-${hostName}"; - } ]; - - services.openssh = { - enable = true; - permitRootLogin = "yes"; - }; - users.users.root.initialPassword = "root"; - - #services.garage = { - # enable = true; - # logLevel = "debug"; - # settings.replication_mode = "3"; - #}; - } - ]; - }; - in - { - nixosConfigurations = mapAttrs nodeConfig addressMap; - }; -} diff --git a/script/jepsen.garage/nodes b/script/jepsen.garage/nodes.containers similarity index 100% rename from script/jepsen.garage/nodes rename to script/jepsen.garage/nodes.containers diff --git a/script/jepsen.garage/nodes.vagrant b/script/jepsen.garage/nodes.vagrant new file mode 100644 index 00000000..df7c4622 --- /dev/null +++ b/script/jepsen.garage/nodes.vagrant @@ -0,0 +1,5 @@ +192.168.56.21 +192.168.56.22 +192.168.56.23 +192.168.56.24 +192.168.56.25 diff --git a/script/jepsen.garage/shell.nix b/script/jepsen.garage/shell.nix index 4f0af839..b0dda6d1 100644 --- a/script/jepsen.garage/shell.nix +++ b/script/jepsen.garage/shell.nix @@ -2,5 +2,6 @@ pkgs.mkShell { nativeBuildInputs = [ pkgs.leiningen + pkgs.vagrant ]; } diff --git a/script/jepsen.garage/src/jepsen/garage.clj b/script/jepsen.garage/src/jepsen/garage.clj index 1351c4a7..6617064e 100644 --- a/script/jepsen.garage/src/jepsen/garage.clj +++ b/script/jepsen.garage/src/jepsen/garage.clj @@ -14,5 +14,6 @@ "Handles command line arguments. Can either run a test, or a web server for browsing results." [& args] - (cli/run! (cli/single-test-cmd {:test-fn garage-test}) + (cli/run! (merge (cli/single-test-cmd {:test-fn garage-test}) + (cli/serve-cmd)) args)) From bc11701999ececdb4571119082945cbe86f098aa Mon Sep 17 00:00:00 2001 From: Alex Auvolat Date: Tue, 18 Apr 2023 16:10:07 +0200 Subject: [PATCH 027/538] jepsen: s3 gets and puts --- script/jepsen.garage/Vagrantfile | 6 +- script/jepsen.garage/destroy-tap.sh | 9 -- script/jepsen.garage/garage-cluster.nix | 70 ----------- script/jepsen.garage/nodes.containers | 5 - script/jepsen.garage/project.clj | 3 +- script/jepsen.garage/setup-tap.sh | 10 -- script/jepsen.garage/src/jepsen/garage.clj | 140 ++++++++++++++++++++- 7 files changed, 141 insertions(+), 102 deletions(-) delete mode 100755 script/jepsen.garage/destroy-tap.sh delete mode 100644 script/jepsen.garage/garage-cluster.nix delete mode 100644 script/jepsen.garage/nodes.containers delete mode 100755 script/jepsen.garage/setup-tap.sh diff --git a/script/jepsen.garage/Vagrantfile b/script/jepsen.garage/Vagrantfile index da6a277f..c40c600d 100644 --- a/script/jepsen.garage/Vagrantfile +++ b/script/jepsen.garage/Vagrantfile @@ -8,7 +8,7 @@ def vm(config, hostname, ip) end Vagrant.configure("2") do |config| - config.vm.box = "generic/alpine38" + config.vm.box = "generic/debian10" config.vm.provider "virtualbox" do |vb| vb.gui = false @@ -17,8 +17,8 @@ Vagrant.configure("2") do |config| config.vm.provision "shell", inline: <<-SHELL echo "root:root" | chpasswd - apk update - apk add wget + mkdir -p /root/.ssh + echo "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIJpaBZdYxHqMxhv2RExAOa7nkKhPBOHupMP3mYaZ73w9 lx@lindy" >> /root/.ssh/authorized_keys SHELL config.vm.define "n1" do |config| vm(config, "n1", "192.168.56.21") end diff --git a/script/jepsen.garage/destroy-tap.sh b/script/jepsen.garage/destroy-tap.sh deleted file mode 100755 index 544b3053..00000000 --- a/script/jepsen.garage/destroy-tap.sh +++ /dev/null @@ -1,9 +0,0 @@ -#!/usr/bin/env bash - -USER=$(whoami) - -for NODE in 1 2 3 4 5; do - sudo ip link delete microvm-n$NODE -done - - diff --git a/script/jepsen.garage/garage-cluster.nix b/script/jepsen.garage/garage-cluster.nix deleted file mode 100644 index ebc73aaf..00000000 --- a/script/jepsen.garage/garage-cluster.nix +++ /dev/null @@ -1,70 +0,0 @@ -{ config, lib, pkgs, ... }: -let - unstable = import ./unstable.nix; - addressMap = - { - "n1" = { localAddress = "10.233.0.101"; hostAddress = "10.233.1.101"; }; - "n2" = { localAddress = "10.233.0.102"; hostAddress = "10.233.1.102"; }; - "n3" = { localAddress = "10.233.0.103"; hostAddress = "10.233.1.103"; }; - "n4" = { localAddress = "10.233.0.104"; hostAddress = "10.233.1.104"; }; - "n5" = { localAddress = "10.233.0.105"; hostAddress = "10.233.1.105"; }; - }; - toHostsEntry = name: { localAddress, ... }: "${localAddress} ${name}"; - extraHosts = - builtins.concatStringsSep "\n" - (lib.attrsets.mapAttrsToList toHostsEntry addressMap); - nodeConfig = hostName: { localAddress, hostAddress }: { - inherit localAddress hostAddress; - - ephemeral = true; - autoStart = true; - privateNetwork = true; - - config = { config, pkgs, ... }: - { - networking = { - inherit hostName extraHosts; - }; - - services.openssh = { - enable = true; - permitRootLogin = "yes"; - kexAlgorithms = [ "curve25519-sha256@libssh.org" "ecdh-sha2-nistp256" "ecdh-sha2-nistp384" "ecdh-sha2-nistp521" "diffie-hellman-group-exchange-sha256" "diffie-hellman-group14-sha1" "diffie-hellman-group-exchange-sha1" "diffie-hellman-group1-sha1" ]; - }; - users.users.root.initialPassword = "root"; - users.users.root.openssh.authorizedKeys.keys = [ - "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIJpaBZdYxHqMxhv2RExAOa7nkKhPBOHupMP3mYaZ73w9" - ]; - - system.stateVersion = "22.11"; - - services.garage = { - enable = true; - logLevel = "debug"; - settings = { - replication_mode = "3"; - db_engine = "lmdb"; - rpc_secret = "b597bb28ebdc90cdc4f15712733ca678cfb9a7e0311e0b9e93db9610fc3685e6"; - rpc_bind_addr = "0.0.0.0:3901"; - s3_api = { - region = "garage"; - api_bind_addr = "0.0.0.0:3900"; - }; - k2v_api.api_bind_addr = "0.0.0.0:3902"; - admin = { - api_bind_addr = "0.0.0.0:3903"; - admin_token = "icanhazadmin"; - }; - }; - }; - - networking.firewall.allowedTCPPorts = [ 3901 3900 3902 3903 ]; - }; - }; -in -{ - containers = lib.attrsets.mapAttrs nodeConfig addressMap; - networking = { - inherit extraHosts; - }; -} diff --git a/script/jepsen.garage/nodes.containers b/script/jepsen.garage/nodes.containers deleted file mode 100644 index b8f3eeb1..00000000 --- a/script/jepsen.garage/nodes.containers +++ /dev/null @@ -1,5 +0,0 @@ -n1.containers -n2.containers -n3.containers -n4.containers -n5.containers diff --git a/script/jepsen.garage/project.clj b/script/jepsen.garage/project.clj index 2ab03e49..04ae4cc3 100644 --- a/script/jepsen.garage/project.clj +++ b/script/jepsen.garage/project.clj @@ -5,5 +5,6 @@ :url "https://www.gnu.org/licenses/gpl-3.0.en.html"} :main jepsen.garage :dependencies [[org.clojure/clojure "1.11.1"] - [jepsen "0.3.2-SNAPSHOT"]] + [jepsen "0.3.2-SNAPSHOT"] + [amazonica "0.3.163"]] :repl-options {:init-ns jepsen.garage}) diff --git a/script/jepsen.garage/setup-tap.sh b/script/jepsen.garage/setup-tap.sh deleted file mode 100755 index 7e09abc3..00000000 --- a/script/jepsen.garage/setup-tap.sh +++ /dev/null @@ -1,10 +0,0 @@ -#!/usr/bin/env bash - -USER=$(whoami) - -for NODE in 1 2 3 4 5; do - sudo ip tuntap add microvm-n$NODE mode tap user $USER - sudo ip addr add dev microvm-n$NODE 10.$NODE.0.1 -done - - diff --git a/script/jepsen.garage/src/jepsen/garage.clj b/script/jepsen.garage/src/jepsen/garage.clj index 6617064e..26c58097 100644 --- a/script/jepsen.garage/src/jepsen/garage.clj +++ b/script/jepsen.garage/src/jepsen/garage.clj @@ -1,14 +1,146 @@ (ns jepsen.garage - (:require [jepsen.cli :as cli] - [jepsen.tests :as tests])) + (:require [clojure.tools.logging :refer :all] + [clojure.string :as str] + [jepsen [cli :as cli] + [client :as client] + [control :as c] + [db :as db] + [generator :as gen] + [tests :as tests]] + [jepsen.control.util :as cu] + [jepsen.os.debian :as debian] + [amazonica.aws.s3 :as s3] + [amazonica.aws.s3transfer :as s3transfer])) + +(def dir "/opt/garage") +(def binary (str dir "/garage")) +(def logfile (str dir "/garage.log")) +(def pidfile (str dir "/garage.pid")) + +(def grg-admin-token "icanhazadmin") +(def grg-key "jepsen") +(def grg-bucket "jepsen") +(def grg-object "1") + +(defn db + "Garage DB for a particular version" + [version] + (reify db/DB + (setup! [_ test node] + (info node "installing garage" version) + (c/su + (c/exec :mkdir :-p dir) + (let [url (str "https://garagehq.deuxfleurs.fr/_releases/" version "/x86_64-unknown-linux-musl/garage") + cache (cu/wget! url)] + (c/exec :cp cache binary)) + (c/exec :chmod :+x binary) + (cu/write-file! + (str "rpc_secret = \"0fffabe52542c2b89a56b2efb7dfd477e9dafb285c9025cbdf1de7ca21a6b372\"\n" + "rpc_bind_addr = \"0.0.0.0:3901\"\n" + "rpc_public_addr = \"" node ":3901\"\n" + "db_engine = \"lmdb\"\n" + "replication_mode = \"3\"\n" + "data_dir = \"" dir "/data\"\n" + "metadata_dir = \"" dir "/meta\"\n" + "[s3_api]\n" + "s3_region = \"us-east-1\"\n" + "api_bind_addr = \"0.0.0.0:3900\"\n" + "[k2v_api]\n" + "api_bind_addr = \"0.0.0.0:3902\"\n" + "[admin]\n" + "api_bind_addr = \"0.0.0.0:3903\"\n" + "admin_token = \"" grg-admin-token "\"\n") + "/etc/garage.toml") + (cu/start-daemon! + {:logfile logfile + :pidfile pidfile + :chdir dir} + binary + :server) + (Thread/sleep 100) + (let [node-id (c/exec binary :node :id :-q)] + (info node "node id:" node-id) + (c/on-many (:nodes test) + (c/exec binary :node :connect node-id)) + (c/exec binary :layout :assign (subs node-id 0 16) :-c 1 :-z :dc1 :-t node)) + (if (= node (first (:nodes test))) + (do + (Thread/sleep 2000) + (c/exec binary :layout :apply :--version 1) + (info node "garage status:" (c/exec binary :status)) + (c/exec binary :key :new :--name grg-key) + (c/exec binary :bucket :create grg-bucket) + (c/exec binary :bucket :allow :--read :--write grg-bucket :--key grg-key) + (info node "key info: " (c/exec binary :key :info grg-key)))))) + (teardown! [_ test node] + (info node "tearing down garage" version) + (c/su + (cu/stop-daemon! binary pidfile) + (c/exec :rm :-rf dir))) + db/LogFiles + (log-files [_ test node] + [logfile]))) + +(defn op-get [_ _] {:type :invoke, :f :get-object, :value nil}) +(defn op-put [_ _] {:type :invoke, :f :put-object, :value (str (rand-int 50))}) +(defn op-del [_ _] {:type :invoke, :f :del-object, :value nil}) + +(defrecord Client [creds] + client/Client + (open! [this test node] + (let [key-info (c/on node (c/exec binary :key :info grg-key)) + [_ ak sk] (re-matches + #"(?s).*Key ID: (.*)\nSecret key: (.*)\nCan create.*" + key-info) + creds {:access-key ak + :secret-key sk + :endpoint (str "http://" node ":3900") + :client-config {:path-style-access-enabled true}}] + (info node "s3 credentials:" creds) + (assoc this :creds creds))) + (setup! [this test]) + (invoke! [this test op] + (case (:f op) + :get-object + (let [value-bytes (try + (-> (s3/get-object (:creds this) grg-bucket grg-object) + :input-stream + slurp) + (catch Exception e nil))] + (assoc op :type :ok, :value value-bytes)) + :put-object + (let [some-bytes (.getBytes (:value op) "UTF-8") + bytes-stream (java.io.ByteArrayInputStream. some-bytes)] + (s3/put-object (:creds this) + :bucket-name grg-bucket + :key grg-object + :input-stream bytes-stream + :metadata {:content-length (count some-bytes)}) + (assoc op :type :ok)) + :del-object + (do + (s3/delete-object (:creds this) + :bucket-name grg-bucket + :key grg-object) + (assoc op :type :ok, :value nil)))) + (teardown! [this test]) + (close! [this test])) (defn garage-test "Given an options map from the command line runner (e.g. :nodes, :ssh, :concurrency, ...), constructs a test map." [opts] (merge tests/noop-test - {:pure-generators true} - opts)) + opts + {:pure-generators true + :name "garage" + :os debian/os + :db (db "v0.8.2") + :client (Client. nil) + :generator (->> (gen/mix [op-get op-put]) + (gen/stagger 1) + (gen/nemesis nil) + (gen/time-limit 15))})) (defn -main "Handles command line arguments. Can either run a test, or a web server for From 70c1d3db46b3bbdfad55b61c29e346c629380a32 Mon Sep 17 00:00:00 2001 From: Alex Auvolat Date: Tue, 18 Apr 2023 16:19:35 +0200 Subject: [PATCH 028/538] better match exceptions --- script/jepsen.garage/src/jepsen/garage.clj | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/script/jepsen.garage/src/jepsen/garage.clj b/script/jepsen.garage/src/jepsen/garage.clj index 26c58097..9d6f891e 100644 --- a/script/jepsen.garage/src/jepsen/garage.clj +++ b/script/jepsen.garage/src/jepsen/garage.clj @@ -9,6 +9,7 @@ [tests :as tests]] [jepsen.control.util :as cu] [jepsen.os.debian :as debian] + [slingshot.slingshot :refer [try+]] [amazonica.aws.s3 :as s3] [amazonica.aws.s3transfer :as s3transfer])) @@ -101,13 +102,14 @@ (setup! [this test]) (invoke! [this test op] (case (:f op) - :get-object - (let [value-bytes (try - (-> (s3/get-object (:creds this) grg-bucket grg-object) - :input-stream - slurp) - (catch Exception e nil))] - (assoc op :type :ok, :value value-bytes)) + :get-object (try+ + (let [value + (-> (s3/get-object (:creds this) grg-bucket grg-object) + :input-stream + slurp)] + (assoc op :type :ok, :value value)) + (catch (re-find #"Key not found" (.getMessage %)) ex + (assoc op :type :ok, :value nil))) :put-object (let [some-bytes (.getBytes (:value op) "UTF-8") bytes-stream (java.io.ByteArrayInputStream. some-bytes)] @@ -137,10 +139,10 @@ :os debian/os :db (db "v0.8.2") :client (Client. nil) - :generator (->> (gen/mix [op-get op-put]) + :generator (->> (gen/mix [op-get op-put op-del]) (gen/stagger 1) (gen/nemesis nil) - (gen/time-limit 15))})) + (gen/time-limit 20))})) (defn -main "Handles command line arguments. Can either run a test, or a web server for From dc5245ce65e6acc4c2b1f81dfdf38fc76fe06d3f Mon Sep 17 00:00:00 2001 From: Alex Auvolat Date: Tue, 18 Apr 2023 17:47:53 +0200 Subject: [PATCH 029/538] even without nemesis, s3 get/put/delete is not linearizable (is this normal?) --- script/jepsen.garage/README.md | 34 +++++++----- script/jepsen.garage/shell.nix | 7 +-- script/jepsen.garage/src/jepsen/garage.clj | 60 ++++++++++++++-------- 3 files changed, 64 insertions(+), 37 deletions(-) diff --git a/script/jepsen.garage/README.md b/script/jepsen.garage/README.md index e1d1a555..ed956830 100644 --- a/script/jepsen.garage/README.md +++ b/script/jepsen.garage/README.md @@ -1,22 +1,32 @@ # jepsen.garage -A Clojure library designed to ... well, that part is up to you. +Jepsen checking of Garage consistency properties. ## Usage -FIXME +Requirements: + +- vagrant +- VirtualBox, configured so that nodes can take an IP in a private network `192.168.56.0/24` +- a user that can create VirtualBox VMs +- leiningen +- gnuplot + +Set up VMs: + +``` +vagrant up +``` + +Run tests: + +``` +lein run test --nodes-file nodes.vagrant +``` ## License -Copyright © 2023 FIXME +Copyright © 2023 Alex Auvolat This program and the accompanying materials are made available under the -terms of the Eclipse Public License 2.0 which is available at -http://www.eclipse.org/legal/epl-2.0. - -This Source Code may also be made available under the following Secondary -Licenses when the conditions for such availability set forth in the Eclipse -Public License, v. 2.0 are satisfied: GNU General Public License as published by -the Free Software Foundation, either version 2 of the License, or (at your -option) any later version, with the GNU Classpath Exception which is available -at https://www.gnu.org/software/classpath/license.html. +terms of the GNU General Public License v3.0. diff --git a/script/jepsen.garage/shell.nix b/script/jepsen.garage/shell.nix index b0dda6d1..595a78d9 100644 --- a/script/jepsen.garage/shell.nix +++ b/script/jepsen.garage/shell.nix @@ -1,7 +1,8 @@ { pkgs ? import {} }: pkgs.mkShell { - nativeBuildInputs = [ - pkgs.leiningen - pkgs.vagrant + nativeBuildInputs = with pkgs; [ + leiningen + vagrant + gnuplot ]; } diff --git a/script/jepsen.garage/src/jepsen/garage.clj b/script/jepsen.garage/src/jepsen/garage.clj index 9d6f891e..df3c8f7d 100644 --- a/script/jepsen.garage/src/jepsen/garage.clj +++ b/script/jepsen.garage/src/jepsen/garage.clj @@ -1,14 +1,18 @@ (ns jepsen.garage (:require [clojure.tools.logging :refer :all] [clojure.string :as str] - [jepsen [cli :as cli] + [jepsen [checker :as checker] + [cli :as cli] [client :as client] [control :as c] [db :as db] [generator :as gen] + [nemesis :as nemesis] [tests :as tests]] + [jepsen.checker.timeline :as timeline] [jepsen.control.util :as cu] [jepsen.os.debian :as debian] + [knossos.model :as model] [slingshot.slingshot :refer [try+]] [amazonica.aws.s3 :as s3] [amazonica.aws.s3transfer :as s3transfer])) @@ -82,9 +86,9 @@ (log-files [_ test node] [logfile]))) -(defn op-get [_ _] {:type :invoke, :f :get-object, :value nil}) -(defn op-put [_ _] {:type :invoke, :f :put-object, :value (str (rand-int 50))}) -(defn op-del [_ _] {:type :invoke, :f :del-object, :value nil}) +(defn op-get [_ _] {:type :invoke, :f :read, :value nil}) +(defn op-put [_ _] {:type :invoke, :f :write, :value (str (rand-int 9))}) +(defn op-del [_ _] {:type :invoke, :f :write, :value nil}) (defrecord Client [creds] client/Client @@ -102,7 +106,7 @@ (setup! [this test]) (invoke! [this test op] (case (:f op) - :get-object (try+ + :read (try+ (let [value (-> (s3/get-object (:creds this) grg-bucket grg-object) :input-stream @@ -110,21 +114,21 @@ (assoc op :type :ok, :value value)) (catch (re-find #"Key not found" (.getMessage %)) ex (assoc op :type :ok, :value nil))) - :put-object - (let [some-bytes (.getBytes (:value op) "UTF-8") - bytes-stream (java.io.ByteArrayInputStream. some-bytes)] - (s3/put-object (:creds this) - :bucket-name grg-bucket - :key grg-object - :input-stream bytes-stream - :metadata {:content-length (count some-bytes)}) - (assoc op :type :ok)) - :del-object - (do - (s3/delete-object (:creds this) - :bucket-name grg-bucket - :key grg-object) - (assoc op :type :ok, :value nil)))) + :write + (if (= (:value op) nil) + (do + (s3/delete-object (:creds this) + :bucket-name grg-bucket + :key grg-object) + (assoc op :type :ok, :value nil)) + (let [some-bytes (.getBytes (:value op) "UTF-8") + bytes-stream (java.io.ByteArrayInputStream. some-bytes)] + (s3/put-object (:creds this) + :bucket-name grg-bucket + :key grg-object + :input-stream bytes-stream + :metadata {:content-length (count some-bytes)}) + (assoc op :type :ok))))) (teardown! [this test]) (close! [this test])) @@ -139,10 +143,22 @@ :os debian/os :db (db "v0.8.2") :client (Client. nil) + :nemesis (nemesis/partition-random-halves) + :checker (checker/compose + {:perf (checker/perf) + :timeline (timeline/html) + :linear (checker/linearizable + {:model (model/register) + :algorithm :linear})}) :generator (->> (gen/mix [op-get op-put op-del]) - (gen/stagger 1) + (gen/stagger 0.02) (gen/nemesis nil) - (gen/time-limit 20))})) + ; (gen/nemesis + ; (cycle [(gen/sleep 5) + ; {:type :info, :f :start} + ; (gen/sleep 5) + ; {:type :info, :f :stop}])) + (gen/time-limit (+ (:time-limit opts) 5)))})) (defn -main "Handles command line arguments. Can either run a test, or a web server for From 93a7132b4c5fb63966702f15ec995d805a40c8f9 Mon Sep 17 00:00:00 2001 From: Alex Auvolat Date: Tue, 18 Apr 2023 18:21:35 +0200 Subject: [PATCH 030/538] the fix for increasing timestamps does not make things linearizable --- script/jepsen.garage/src/jepsen/garage.clj | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/script/jepsen.garage/src/jepsen/garage.clj b/script/jepsen.garage/src/jepsen/garage.clj index df3c8f7d..492dad4c 100644 --- a/script/jepsen.garage/src/jepsen/garage.clj +++ b/script/jepsen.garage/src/jepsen/garage.clj @@ -27,7 +27,7 @@ (def grg-bucket "jepsen") (def grg-object "1") -(defn db +(defn garage "Garage DB for a particular version" [version] (reify db/DB @@ -141,7 +141,8 @@ {:pure-generators true :name "garage" :os debian/os - :db (db "v0.8.2") + :db (garage "v0.8.2") + ; :db (garage "d39c5c6984c581e16932aaa07e3687e7b5ce266d") ; fixed for increasing timestamps :client (Client. nil) :nemesis (nemesis/partition-random-halves) :checker (checker/compose From 80d7b7d8582171d7ecd0e7745893792d10dd3038 Mon Sep 17 00:00:00 2001 From: Alex Auvolat Date: Wed, 19 Apr 2023 12:56:40 +0200 Subject: [PATCH 031/538] remove useless files --- script/jepsen.garage/CHANGELOG.md | 24 --- script/jepsen.garage/LICENSE | 280 ------------------------------ script/jepsen.garage/README.md | 2 +- script/jepsen.garage/doc/intro.md | 3 - script/jepsen.garage/project.clj | 4 +- 5 files changed, 3 insertions(+), 310 deletions(-) delete mode 100644 script/jepsen.garage/CHANGELOG.md delete mode 100644 script/jepsen.garage/LICENSE delete mode 100644 script/jepsen.garage/doc/intro.md diff --git a/script/jepsen.garage/CHANGELOG.md b/script/jepsen.garage/CHANGELOG.md deleted file mode 100644 index c1abdb4d..00000000 --- a/script/jepsen.garage/CHANGELOG.md +++ /dev/null @@ -1,24 +0,0 @@ -# Change Log -All notable changes to this project will be documented in this file. This change log follows the conventions of [keepachangelog.com](http://keepachangelog.com/). - -## [Unreleased] -### Changed -- Add a new arity to `make-widget-async` to provide a different widget shape. - -## [0.1.1] - 2023-04-18 -### Changed -- Documentation on how to make the widgets. - -### Removed -- `make-widget-sync` - we're all async, all the time. - -### Fixed -- Fixed widget maker to keep working when daylight savings switches over. - -## 0.1.0 - 2023-04-18 -### Added -- Files from the new template. -- Widget maker public API - `make-widget-sync`. - -[Unreleased]: https://sourcehost.site/your-name/jepsen.garage/compare/0.1.1...HEAD -[0.1.1]: https://sourcehost.site/your-name/jepsen.garage/compare/0.1.0...0.1.1 diff --git a/script/jepsen.garage/LICENSE b/script/jepsen.garage/LICENSE deleted file mode 100644 index 23151265..00000000 --- a/script/jepsen.garage/LICENSE +++ /dev/null @@ -1,280 +0,0 @@ -Eclipse Public License - v 2.0 - - THE ACCOMPANYING PROGRAM IS PROVIDED UNDER THE TERMS OF THIS ECLIPSE - PUBLIC LICENSE ("AGREEMENT"). ANY USE, REPRODUCTION OR DISTRIBUTION - OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE OF THIS AGREEMENT. - -1. DEFINITIONS - -"Contribution" means: - - a) in the case of the initial Contributor, the initial content - Distributed under this Agreement, and - - b) in the case of each subsequent Contributor: - i) changes to the Program, and - ii) additions to the Program; - where such changes and/or additions to the Program originate from - and are Distributed by that particular Contributor. A Contribution - "originates" from a Contributor if it was added to the Program by - such Contributor itself or anyone acting on such Contributor's behalf. - Contributions do not include changes or additions to the Program that - are not Modified Works. - -"Contributor" means any person or entity that Distributes the Program. - -"Licensed Patents" mean patent claims licensable by a Contributor which -are necessarily infringed by the use or sale of its Contribution alone -or when combined with the Program. - -"Program" means the Contributions Distributed in accordance with this -Agreement. - -"Recipient" means anyone who receives the Program under this Agreement -or any Secondary License (as applicable), including Contributors. - -"Derivative Works" shall mean any work, whether in Source Code or other -form, that is based on (or derived from) the Program and for which the -editorial revisions, annotations, elaborations, or other modifications -represent, as a whole, an original work of authorship. - -"Modified Works" shall mean any work in Source Code or other form that -results from an addition to, deletion from, or modification of the -contents of the Program, including, for purposes of clarity any new file -in Source Code form that contains any contents of the Program. Modified -Works shall not include works that contain only declarations, -interfaces, types, classes, structures, or files of the Program solely -in each case in order to link to, bind by name, or subclass the Program -or Modified Works thereof. - -"Distribute" means the acts of a) distributing or b) making available -in any manner that enables the transfer of a copy. - -"Source Code" means the form of a Program preferred for making -modifications, including but not limited to software source code, -documentation source, and configuration files. - -"Secondary License" means either the GNU General Public License, -Version 2.0, or any later versions of that license, including any -exceptions or additional permissions as identified by the initial -Contributor. - -2. GRANT OF RIGHTS - - a) Subject to the terms of this Agreement, each Contributor hereby - grants Recipient a non-exclusive, worldwide, royalty-free copyright - license to reproduce, prepare Derivative Works of, publicly display, - publicly perform, Distribute and sublicense the Contribution of such - Contributor, if any, and such Derivative Works. - - b) Subject to the terms of this Agreement, each Contributor hereby - grants Recipient a non-exclusive, worldwide, royalty-free patent - license under Licensed Patents to make, use, sell, offer to sell, - import and otherwise transfer the Contribution of such Contributor, - if any, in Source Code or other form. This patent license shall - apply to the combination of the Contribution and the Program if, at - the time the Contribution is added by the Contributor, such addition - of the Contribution causes such combination to be covered by the - Licensed Patents. The patent license shall not apply to any other - combinations which include the Contribution. No hardware per se is - licensed hereunder. - - c) Recipient understands that although each Contributor grants the - licenses to its Contributions set forth herein, no assurances are - provided by any Contributor that the Program does not infringe the - patent or other intellectual property rights of any other entity. - Each Contributor disclaims any liability to Recipient for claims - brought by any other entity based on infringement of intellectual - property rights or otherwise. As a condition to exercising the - rights and licenses granted hereunder, each Recipient hereby - assumes sole responsibility to secure any other intellectual - property rights needed, if any. For example, if a third party - patent license is required to allow Recipient to Distribute the - Program, it is Recipient's responsibility to acquire that license - before distributing the Program. - - d) Each Contributor represents that to its knowledge it has - sufficient copyright rights in its Contribution, if any, to grant - the copyright license set forth in this Agreement. - - e) Notwithstanding the terms of any Secondary License, no - Contributor makes additional grants to any Recipient (other than - those set forth in this Agreement) as a result of such Recipient's - receipt of the Program under the terms of a Secondary License - (if permitted under the terms of Section 3). - -3. REQUIREMENTS - -3.1 If a Contributor Distributes the Program in any form, then: - - a) the Program must also be made available as Source Code, in - accordance with section 3.2, and the Contributor must accompany - the Program with a statement that the Source Code for the Program - is available under this Agreement, and informs Recipients how to - obtain it in a reasonable manner on or through a medium customarily - used for software exchange; and - - b) the Contributor may Distribute the Program under a license - different than this Agreement, provided that such license: - i) effectively disclaims on behalf of all other Contributors all - warranties and conditions, express and implied, including - warranties or conditions of title and non-infringement, and - implied warranties or conditions of merchantability and fitness - for a particular purpose; - - ii) effectively excludes on behalf of all other Contributors all - liability for damages, including direct, indirect, special, - incidental and consequential damages, such as lost profits; - - iii) does not attempt to limit or alter the recipients' rights - in the Source Code under section 3.2; and - - iv) requires any subsequent distribution of the Program by any - party to be under a license that satisfies the requirements - of this section 3. - -3.2 When the Program is Distributed as Source Code: - - a) it must be made available under this Agreement, or if the - Program (i) is combined with other material in a separate file or - files made available under a Secondary License, and (ii) the initial - Contributor attached to the Source Code the notice described in - Exhibit A of this Agreement, then the Program may be made available - under the terms of such Secondary Licenses, and - - b) a copy of this Agreement must be included with each copy of - the Program. - -3.3 Contributors may not remove or alter any copyright, patent, -trademark, attribution notices, disclaimers of warranty, or limitations -of liability ("notices") contained within the Program from any copy of -the Program which they Distribute, provided that Contributors may add -their own appropriate notices. - -4. COMMERCIAL DISTRIBUTION - -Commercial distributors of software may accept certain responsibilities -with respect to end users, business partners and the like. While this -license is intended to facilitate the commercial use of the Program, -the Contributor who includes the Program in a commercial product -offering should do so in a manner which does not create potential -liability for other Contributors. Therefore, if a Contributor includes -the Program in a commercial product offering, such Contributor -("Commercial Contributor") hereby agrees to defend and indemnify every -other Contributor ("Indemnified Contributor") against any losses, -damages and costs (collectively "Losses") arising from claims, lawsuits -and other legal actions brought by a third party against the Indemnified -Contributor to the extent caused by the acts or omissions of such -Commercial Contributor in connection with its distribution of the Program -in a commercial product offering. The obligations in this section do not -apply to any claims or Losses relating to any actual or alleged -intellectual property infringement. In order to qualify, an Indemnified -Contributor must: a) promptly notify the Commercial Contributor in -writing of such claim, and b) allow the Commercial Contributor to control, -and cooperate with the Commercial Contributor in, the defense and any -related settlement negotiations. The Indemnified Contributor may -participate in any such claim at its own expense. - -For example, a Contributor might include the Program in a commercial -product offering, Product X. That Contributor is then a Commercial -Contributor. If that Commercial Contributor then makes performance -claims, or offers warranties related to Product X, those performance -claims and warranties are such Commercial Contributor's responsibility -alone. Under this section, the Commercial Contributor would have to -defend claims against the other Contributors related to those performance -claims and warranties, and if a court requires any other Contributor to -pay any damages as a result, the Commercial Contributor must pay -those damages. - -5. NO WARRANTY - -EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, AND TO THE EXTENT -PERMITTED BY APPLICABLE LAW, THE PROGRAM IS PROVIDED ON AN "AS IS" -BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR -IMPLIED INCLUDING, WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF -TITLE, NON-INFRINGEMENT, MERCHANTABILITY OR FITNESS FOR A PARTICULAR -PURPOSE. Each Recipient is solely responsible for determining the -appropriateness of using and distributing the Program and assumes all -risks associated with its exercise of rights under this Agreement, -including but not limited to the risks and costs of program errors, -compliance with applicable laws, damage to or loss of data, programs -or equipment, and unavailability or interruption of operations. - -6. DISCLAIMER OF LIABILITY - -EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, AND TO THE EXTENT -PERMITTED BY APPLICABLE LAW, NEITHER RECIPIENT NOR ANY CONTRIBUTORS -SHALL HAVE ANY LIABILITY FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING WITHOUT LIMITATION LOST -PROFITS), HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN -CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) -ARISING IN ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE -EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE -POSSIBILITY OF SUCH DAMAGES. - -7. GENERAL - -If any provision of this Agreement is invalid or unenforceable under -applicable law, it shall not affect the validity or enforceability of -the remainder of the terms of this Agreement, and without further -action by the parties hereto, such provision shall be reformed to the -minimum extent necessary to make such provision valid and enforceable. - -If Recipient institutes patent litigation against any entity -(including a cross-claim or counterclaim in a lawsuit) alleging that the -Program itself (excluding combinations of the Program with other software -or hardware) infringes such Recipient's patent(s), then such Recipient's -rights granted under Section 2(b) shall terminate as of the date such -litigation is filed. - -All Recipient's rights under this Agreement shall terminate if it -fails to comply with any of the material terms or conditions of this -Agreement and does not cure such failure in a reasonable period of -time after becoming aware of such noncompliance. If all Recipient's -rights under this Agreement terminate, Recipient agrees to cease use -and distribution of the Program as soon as reasonably practicable. -However, Recipient's obligations under this Agreement and any licenses -granted by Recipient relating to the Program shall continue and survive. - -Everyone is permitted to copy and distribute copies of this Agreement, -but in order to avoid inconsistency the Agreement is copyrighted and -may only be modified in the following manner. The Agreement Steward -reserves the right to publish new versions (including revisions) of -this Agreement from time to time. No one other than the Agreement -Steward has the right to modify this Agreement. The Eclipse Foundation -is the initial Agreement Steward. The Eclipse Foundation may assign the -responsibility to serve as the Agreement Steward to a suitable separate -entity. Each new version of the Agreement will be given a distinguishing -version number. The Program (including Contributions) may always be -Distributed subject to the version of the Agreement under which it was -received. In addition, after a new version of the Agreement is published, -Contributor may elect to Distribute the Program (including its -Contributions) under the new version. - -Except as expressly stated in Sections 2(a) and 2(b) above, Recipient -receives no rights or licenses to the intellectual property of any -Contributor under this Agreement, whether expressly, by implication, -estoppel or otherwise. All rights in the Program not expressly granted -under this Agreement are reserved. Nothing in this Agreement is intended -to be enforceable by any entity that is not a Contributor or Recipient. -No third-party beneficiary rights are created under this Agreement. - -Exhibit A - Form of Secondary Licenses Notice - -"This Source Code may also be made available under the following -Secondary Licenses when the conditions for such availability set forth -in the Eclipse Public License, v. 2.0 are satisfied: GNU General Public -License as published by the Free Software Foundation, either version 2 -of the License, or (at your option) any later version, with the GNU -Classpath Exception which is available at -https://www.gnu.org/software/classpath/license.html." - - Simply including a copy of this Agreement, including this Exhibit A - is not sufficient to license the Source Code under Secondary Licenses. - - If it is not possible or desirable to put the notice in a particular - file, then You may include the notice in a location (such as a LICENSE - file in a relevant directory) where a recipient would be likely to - look for such a notice. - - You may add additional accurate notices of copyright ownership. diff --git a/script/jepsen.garage/README.md b/script/jepsen.garage/README.md index ed956830..460f0b9e 100644 --- a/script/jepsen.garage/README.md +++ b/script/jepsen.garage/README.md @@ -29,4 +29,4 @@ lein run test --nodes-file nodes.vagrant Copyright © 2023 Alex Auvolat This program and the accompanying materials are made available under the -terms of the GNU General Public License v3.0. +terms of the GNU Affero General Public License v3.0. diff --git a/script/jepsen.garage/doc/intro.md b/script/jepsen.garage/doc/intro.md deleted file mode 100644 index ee727bbc..00000000 --- a/script/jepsen.garage/doc/intro.md +++ /dev/null @@ -1,3 +0,0 @@ -# Introduction to jepsen.garage - -TODO: write [great documentation](http://jacobian.org/writing/what-to-write/) diff --git a/script/jepsen.garage/project.clj b/script/jepsen.garage/project.clj index 04ae4cc3..20bb59c7 100644 --- a/script/jepsen.garage/project.clj +++ b/script/jepsen.garage/project.clj @@ -1,8 +1,8 @@ (defproject jepsen.garage "0.1.0-SNAPSHOT" :description "Jepsen testing for Garage" :url "https://git.deuxfleurs.fr/Deuxfleurs/garage" - :license {:name "GPLv3" - :url "https://www.gnu.org/licenses/gpl-3.0.en.html"} + :license {:name "AGPLv3" + :url "https://www.gnu.org/licenses/agpl-3.0.en.html"} :main jepsen.garage :dependencies [[org.clojure/clojure "1.11.1"] [jepsen "0.3.2-SNAPSHOT"] From eb86eaa6d2702ad5171c4fdfcbceb3dfba21833c Mon Sep 17 00:00:00 2001 From: Alex Auvolat Date: Wed, 19 Apr 2023 14:14:22 +0200 Subject: [PATCH 032/538] refactor jepsen test --- script/jepsen.garage/src/jepsen/garage.clj | 205 +++++------------- .../jepsen.garage/src/jepsen/garage/grg.clj | 125 +++++++++++ .../jepsen.garage/src/jepsen/garage/reg.clj | 69 ++++++ 3 files changed, 244 insertions(+), 155 deletions(-) create mode 100644 script/jepsen.garage/src/jepsen/garage/grg.clj create mode 100644 script/jepsen.garage/src/jepsen/garage/reg.clj diff --git a/script/jepsen.garage/src/jepsen/garage.clj b/script/jepsen.garage/src/jepsen/garage.clj index 492dad4c..cd30dab8 100644 --- a/script/jepsen.garage/src/jepsen/garage.clj +++ b/script/jepsen.garage/src/jepsen/garage.clj @@ -1,170 +1,65 @@ (ns jepsen.garage - (:require [clojure.tools.logging :refer :all] - [clojure.string :as str] - [jepsen [checker :as checker] - [cli :as cli] - [client :as client] - [control :as c] - [db :as db] - [generator :as gen] - [nemesis :as nemesis] - [tests :as tests]] - [jepsen.checker.timeline :as timeline] - [jepsen.control.util :as cu] - [jepsen.os.debian :as debian] - [knossos.model :as model] - [slingshot.slingshot :refer [try+]] - [amazonica.aws.s3 :as s3] - [amazonica.aws.s3transfer :as s3transfer])) + (:require + [clojure.string :as str] + [jepsen + [checker :as checker] + [cli :as cli] + [generator :as gen] + [nemesis :as nemesis] + [tests :as tests]] + [jepsen.os.debian :as debian] + [jepsen.garage + [grg :as grg] + [reg :as reg]])) -(def dir "/opt/garage") -(def binary (str dir "/garage")) -(def logfile (str dir "/garage.log")) -(def pidfile (str dir "/garage.pid")) +(def workloads + "A map of workload names to functions that construct workloads, given opts." + {"reg" reg/workload}) -(def grg-admin-token "icanhazadmin") -(def grg-key "jepsen") -(def grg-bucket "jepsen") -(def grg-object "1") - -(defn garage - "Garage DB for a particular version" - [version] - (reify db/DB - (setup! [_ test node] - (info node "installing garage" version) - (c/su - (c/exec :mkdir :-p dir) - (let [url (str "https://garagehq.deuxfleurs.fr/_releases/" version "/x86_64-unknown-linux-musl/garage") - cache (cu/wget! url)] - (c/exec :cp cache binary)) - (c/exec :chmod :+x binary) - (cu/write-file! - (str "rpc_secret = \"0fffabe52542c2b89a56b2efb7dfd477e9dafb285c9025cbdf1de7ca21a6b372\"\n" - "rpc_bind_addr = \"0.0.0.0:3901\"\n" - "rpc_public_addr = \"" node ":3901\"\n" - "db_engine = \"lmdb\"\n" - "replication_mode = \"3\"\n" - "data_dir = \"" dir "/data\"\n" - "metadata_dir = \"" dir "/meta\"\n" - "[s3_api]\n" - "s3_region = \"us-east-1\"\n" - "api_bind_addr = \"0.0.0.0:3900\"\n" - "[k2v_api]\n" - "api_bind_addr = \"0.0.0.0:3902\"\n" - "[admin]\n" - "api_bind_addr = \"0.0.0.0:3903\"\n" - "admin_token = \"" grg-admin-token "\"\n") - "/etc/garage.toml") - (cu/start-daemon! - {:logfile logfile - :pidfile pidfile - :chdir dir} - binary - :server) - (Thread/sleep 100) - (let [node-id (c/exec binary :node :id :-q)] - (info node "node id:" node-id) - (c/on-many (:nodes test) - (c/exec binary :node :connect node-id)) - (c/exec binary :layout :assign (subs node-id 0 16) :-c 1 :-z :dc1 :-t node)) - (if (= node (first (:nodes test))) - (do - (Thread/sleep 2000) - (c/exec binary :layout :apply :--version 1) - (info node "garage status:" (c/exec binary :status)) - (c/exec binary :key :new :--name grg-key) - (c/exec binary :bucket :create grg-bucket) - (c/exec binary :bucket :allow :--read :--write grg-bucket :--key grg-key) - (info node "key info: " (c/exec binary :key :info grg-key)))))) - (teardown! [_ test node] - (info node "tearing down garage" version) - (c/su - (cu/stop-daemon! binary pidfile) - (c/exec :rm :-rf dir))) - db/LogFiles - (log-files [_ test node] - [logfile]))) - -(defn op-get [_ _] {:type :invoke, :f :read, :value nil}) -(defn op-put [_ _] {:type :invoke, :f :write, :value (str (rand-int 9))}) -(defn op-del [_ _] {:type :invoke, :f :write, :value nil}) - -(defrecord Client [creds] - client/Client - (open! [this test node] - (let [key-info (c/on node (c/exec binary :key :info grg-key)) - [_ ak sk] (re-matches - #"(?s).*Key ID: (.*)\nSecret key: (.*)\nCan create.*" - key-info) - creds {:access-key ak - :secret-key sk - :endpoint (str "http://" node ":3900") - :client-config {:path-style-access-enabled true}}] - (info node "s3 credentials:" creds) - (assoc this :creds creds))) - (setup! [this test]) - (invoke! [this test op] - (case (:f op) - :read (try+ - (let [value - (-> (s3/get-object (:creds this) grg-bucket grg-object) - :input-stream - slurp)] - (assoc op :type :ok, :value value)) - (catch (re-find #"Key not found" (.getMessage %)) ex - (assoc op :type :ok, :value nil))) - :write - (if (= (:value op) nil) - (do - (s3/delete-object (:creds this) - :bucket-name grg-bucket - :key grg-object) - (assoc op :type :ok, :value nil)) - (let [some-bytes (.getBytes (:value op) "UTF-8") - bytes-stream (java.io.ByteArrayInputStream. some-bytes)] - (s3/put-object (:creds this) - :bucket-name grg-bucket - :key grg-object - :input-stream bytes-stream - :metadata {:content-length (count some-bytes)}) - (assoc op :type :ok))))) - (teardown! [this test]) - (close! [this test])) +(def cli-opts + "Additional command line options." + [["-I" "--increasing-timestamps" "Garage version with increasing timestamps on PutObject" + :default false] + ["-r" "--rate HZ" "Approximate number of requests per second, per thread." + :default 10 + :parse-fn read-string + :validate [#(and (number? %) (pos? %)) "Must be a positive number"]] + [nil "--ops-per-key NUM" "Maximum number of operations on any given key." + :default 100 + :parse-fn parse-long + :validate [pos? "Must be a positive integer."]] + ["-w" "--workload NAME" "Workload of test to run" + :default "reg" + :validate [workloads (cli/one-of workloads)]]]) (defn garage-test "Given an options map from the command line runner (e.g. :nodes, :ssh, :concurrency, ...), constructs a test map." [opts] - (merge tests/noop-test - opts - {:pure-generators true - :name "garage" - :os debian/os - :db (garage "v0.8.2") - ; :db (garage "d39c5c6984c581e16932aaa07e3687e7b5ce266d") ; fixed for increasing timestamps - :client (Client. nil) - :nemesis (nemesis/partition-random-halves) - :checker (checker/compose - {:perf (checker/perf) - :timeline (timeline/html) - :linear (checker/linearizable - {:model (model/register) - :algorithm :linear})}) - :generator (->> (gen/mix [op-get op-put op-del]) - (gen/stagger 0.02) - (gen/nemesis nil) - ; (gen/nemesis - ; (cycle [(gen/sleep 5) - ; {:type :info, :f :start} - ; (gen/sleep 5) - ; {:type :info, :f :stop}])) - (gen/time-limit (+ (:time-limit opts) 5)))})) + (let [workload ((get workloads (:workload opts)) opts) + garage-version (if (:increasing-timestamps opts) + "03490d41d58576d7b3bcf977b2726d72a3a66ada" + "v0.8.2")] + (merge tests/noop-test + opts + {:pure-generators true + :name (str "garage " (name (:workload opts))) + :os debian/os + :db (grg/db garage-version) + :client (:client workload) + :generator (:generator workload) + :nemesis (nemesis/partition-random-halves) + :checker (checker/compose + {:perf (checker/perf) + :workload (:checker workload)}) + }))) + (defn -main "Handles command line arguments. Can either run a test, or a web server for browsing results." [& args] - (cli/run! (merge (cli/single-test-cmd {:test-fn garage-test}) + (cli/run! (merge (cli/single-test-cmd {:test-fn garage-test + :opt-spec cli-opts}) (cli/serve-cmd)) args)) diff --git a/script/jepsen.garage/src/jepsen/garage/grg.clj b/script/jepsen.garage/src/jepsen/garage/grg.clj new file mode 100644 index 00000000..2309d824 --- /dev/null +++ b/script/jepsen.garage/src/jepsen/garage/grg.clj @@ -0,0 +1,125 @@ +(ns jepsen.garage.grg + (:require [clojure.tools.logging :refer :all] + [jepsen [control :as c] + [db :as db]] + [jepsen.control.util :as cu] + [amazonica.aws.s3 :as s3] + [slingshot.slingshot :refer [try+]])) + +; CONSTANTS -- HOW GARAGE IS SET UP + +(def dir "/opt/garage") +(def binary (str dir "/garage")) +(def logfile (str dir "/garage.log")) +(def pidfile (str dir "/garage.pid")) + +(def grg-admin-token "icanhazadmin") +(def grg-key "jepsen") +(def grg-bucket "jepsen") + +; THE GARAGE DB + +(defn db + "Garage DB for a particular version" + [version] + (reify db/DB + (setup! [_ test node] + (info node "installing garage" version) + (c/su + (c/exec :mkdir :-p dir) + (let [url (str "https://garagehq.deuxfleurs.fr/_releases/" version "/x86_64-unknown-linux-musl/garage") + cache (cu/wget! url)] + (c/exec :cp cache binary)) + (c/exec :chmod :+x binary) + (cu/write-file! + (str "rpc_secret = \"0fffabe52542c2b89a56b2efb7dfd477e9dafb285c9025cbdf1de7ca21a6b372\"\n" + "rpc_bind_addr = \"0.0.0.0:3901\"\n" + "rpc_public_addr = \"" node ":3901\"\n" + "db_engine = \"lmdb\"\n" + "replication_mode = \"3\"\n" + "data_dir = \"" dir "/data\"\n" + "metadata_dir = \"" dir "/meta\"\n" + "[s3_api]\n" + "s3_region = \"us-east-1\"\n" + "api_bind_addr = \"0.0.0.0:3900\"\n" + "[k2v_api]\n" + "api_bind_addr = \"0.0.0.0:3902\"\n" + "[admin]\n" + "api_bind_addr = \"0.0.0.0:3903\"\n" + "admin_token = \"" grg-admin-token "\"\n") + "/etc/garage.toml") + (cu/start-daemon! + {:logfile logfile + :pidfile pidfile + :chdir dir} + binary + :server) + (Thread/sleep 100) + (let [node-id (c/exec binary :node :id :-q)] + (info node "node id:" node-id) + (c/on-many (:nodes test) + (c/exec binary :node :connect node-id)) + (c/exec binary :layout :assign (subs node-id 0 16) :-c 1 :-z :dc1 :-t node)) + (if (= node (first (:nodes test))) + (do + (Thread/sleep 2000) + (c/exec binary :layout :apply :--version 1) + (info node "garage status:" (c/exec binary :status)) + (c/exec binary :key :new :--name grg-key) + (c/exec binary :bucket :create grg-bucket) + (c/exec binary :bucket :allow :--read :--write grg-bucket :--key grg-key) + (info node "key info: " (c/exec binary :key :info grg-key)))))) + (teardown! [_ test node] + (info node "tearing down garage" version) + (c/su + (cu/stop-daemon! binary pidfile) + (c/exec :rm :-rf dir))) + db/LogFiles + (log-files [_ test node] + [logfile]))) + +; GARAGE S3 HELPER FUNCTIONS + +(defn s3-creds + "Get S3 credentials for node" + [node] + (let [key-info (c/on node (c/exec binary :key :info grg-key)) + [_ ak sk] (re-matches + #"(?s).*Key ID: (.*)\nSecret key: (.*)\nCan create.*" + key-info)] + {:access-key ak + :secret-key sk + :endpoint (str "http://" node ":3900") + :bucket grg-bucket + :client-config {:path-style-access-enabled true}})) + +(defn s3-get + "Helper for GetObject" + [creds k] + (try+ + (-> (s3/get-object creds (:bucket creds) k) + :input-stream + slurp) + (catch (re-find #"Key not found" (.getMessage %)) ex + nil))) + +(defn s3-put + "Helper for PutObject or DeleteObject (is a delete if value is nil)" + [creds k v] + (if (= v nil) + (s3/delete-object creds + :bucket-name (:bucket creds) + :key k) + (let [some-bytes (.getBytes v "UTF-8") + bytes-stream (java.io.ByteArrayInputStream. some-bytes)] + (s3/put-object creds + :bucket-name (:bucket creds) + :key k + :input-stream bytes-stream + :metadata {:content-length (count some-bytes)})))) + +(defn s3-list + "Helper for ListObjects -- just lists everything in the bucket" + [creds] + (s3/list-objects-v2 creds + {:bucket-name (:bucket creds)})) diff --git a/script/jepsen.garage/src/jepsen/garage/reg.clj b/script/jepsen.garage/src/jepsen/garage/reg.clj new file mode 100644 index 00000000..557b4a99 --- /dev/null +++ b/script/jepsen.garage/src/jepsen/garage/reg.clj @@ -0,0 +1,69 @@ +(ns jepsen.garage.reg + (:require [clojure.tools.logging :refer :all] + [clojure.string :as str] + [jepsen [checker :as checker] + [cli :as cli] + [client :as client] + [control :as c] + [db :as db] + [generator :as gen] + [independent :as independent] + [nemesis :as nemesis] + [tests :as tests]] + [jepsen.checker.timeline :as timeline] + [jepsen.control.util :as cu] + [jepsen.os.debian :as debian] + [jepsen.garage.grg :as grg] + [knossos.model :as model] + [slingshot.slingshot :refer [try+]])) + +(defn op-get [_ _] {:type :invoke, :f :read, :value nil}) +(defn op-put [_ _] {:type :invoke, :f :write, :value (str (rand-int 9))}) +(defn op-del [_ _] {:type :invoke, :f :write, :value nil}) + +(defrecord RegClient [creds] + client/Client + (open! [this test node] + (let [creds (grg/s3-creds node)] + (info node "s3 credentials:" creds) + (assoc this :creds creds))) + (setup! [this test]) + (invoke! [this test op] + (let [[k v] (:value op)] + (case (:f op) + :read + (let [value (grg/s3-get (:creds this) k)] + (assoc op :type :ok, :value (independent/tuple k value))) + :write + (do + (grg/s3-put (:creds this) k v) + (assoc op :type :ok))))) + (teardown! [this test]) + (close! [this test])) + +(defn workload + "Tests linearizable reads and writes" + [opts] + {:client (RegClient. nil) + :checker (independent/checker + (checker/compose + {:linear (checker/linearizable + {:model (model/register) + :algorithm :linear}) + :timeline (timeline/html)})) + :generator (->> (independent/concurrent-generator + 10 + (range) + (fn [k] + (->> + (gen/mix [op-get op-put op-del]) + (gen/stagger (/ (:rate opts))) + (gen/limit (:ops-per-key opts))))) + (gen/nemesis + (cycle [(gen/sleep 5) + {:type :info, :f :start} + (gen/sleep 5) + {:type :info, :f :stop}])) + (gen/time-limit (:time-limit opts)))}) + + From 6eb26be548c08707b59473e6086f3f5eee89fe47 Mon Sep 17 00:00:00 2001 From: Alex Auvolat Date: Wed, 19 Apr 2023 15:27:26 +0200 Subject: [PATCH 033/538] Add garage set test (this one works :p) --- script/jepsen.garage/README.md | 4 +- script/jepsen.garage/src/jepsen/garage.clj | 22 +++++++- .../jepsen.garage/src/jepsen/garage/grg.clj | 13 ++++- .../jepsen.garage/src/jepsen/garage/reg.clj | 21 +++---- .../jepsen.garage/src/jepsen/garage/set.clj | 56 +++++++++++++++++++ 5 files changed, 95 insertions(+), 21 deletions(-) create mode 100644 script/jepsen.garage/src/jepsen/garage/set.clj diff --git a/script/jepsen.garage/README.md b/script/jepsen.garage/README.md index 460f0b9e..800dde94 100644 --- a/script/jepsen.garage/README.md +++ b/script/jepsen.garage/README.md @@ -18,10 +18,10 @@ Set up VMs: vagrant up ``` -Run tests: +Run tests (this one should fail): ``` -lein run test --nodes-file nodes.vagrant +lein run test --nodes-file nodes.vagrant --time-limit 64 --concurrency 50 --rate 50 --workload reg ``` ## License diff --git a/script/jepsen.garage/src/jepsen/garage.clj b/script/jepsen.garage/src/jepsen/garage.clj index cd30dab8..7f762923 100644 --- a/script/jepsen.garage/src/jepsen/garage.clj +++ b/script/jepsen.garage/src/jepsen/garage.clj @@ -10,11 +10,13 @@ [jepsen.os.debian :as debian] [jepsen.garage [grg :as grg] - [reg :as reg]])) + [reg :as reg] + [set :as set]])) (def workloads "A map of workload names to functions that construct workloads, given opts." - {"reg" reg/workload}) + {"reg" reg/workload + "set" set/workload}) (def cli-opts "Additional command line options." @@ -47,7 +49,21 @@ :os debian/os :db (grg/db garage-version) :client (:client workload) - :generator (:generator workload) + :generator (gen/phases + (->> + (:generator workload) + (gen/stagger (/ (:rate opts))) + (gen/nemesis + (cycle [(gen/sleep 5) + {:type :info, :f :start} + (gen/sleep 5) + {:type :info, :f :stop}])) + (gen/time-limit (:time-limit opts))) + (gen/log "Healing cluster") + (gen/nemesis (gen/once {:type :info, :f :stop})) + (gen/log "Waiting for recovery") + (gen/sleep 10) + (gen/clients (:final-generator workload))) :nemesis (nemesis/partition-random-halves) :checker (checker/compose {:perf (checker/perf) diff --git a/script/jepsen.garage/src/jepsen/garage/grg.clj b/script/jepsen.garage/src/jepsen/garage/grg.clj index 2309d824..2e9bcc72 100644 --- a/script/jepsen.garage/src/jepsen/garage/grg.clj +++ b/script/jepsen.garage/src/jepsen/garage/grg.clj @@ -121,5 +121,14 @@ (defn s3-list "Helper for ListObjects -- just lists everything in the bucket" [creds] - (s3/list-objects-v2 creds - {:bucket-name (:bucket creds)})) + (defn list-inner [ct accum] + (let [list-result (s3/list-objects-v2 creds + {:bucket-name (:bucket creds) + :continuation-token ct}) + new-object-summaries (:object-summaries list-result) + new-objects (map (fn [d] (:key d)) new-object-summaries) + objects (concat new-objects accum)] + (if (:truncated? list-result) + (list-inner (:next-continuation-token list-result) objects) + objects))) + (list-inner nil [])) diff --git a/script/jepsen.garage/src/jepsen/garage/reg.clj b/script/jepsen.garage/src/jepsen/garage/reg.clj index 557b4a99..0b370b36 100644 --- a/script/jepsen.garage/src/jepsen/garage/reg.clj +++ b/script/jepsen.garage/src/jepsen/garage/reg.clj @@ -51,19 +51,12 @@ {:model (model/register) :algorithm :linear}) :timeline (timeline/html)})) - :generator (->> (independent/concurrent-generator - 10 - (range) - (fn [k] - (->> - (gen/mix [op-get op-put op-del]) - (gen/stagger (/ (:rate opts))) - (gen/limit (:ops-per-key opts))))) - (gen/nemesis - (cycle [(gen/sleep 5) - {:type :info, :f :start} - (gen/sleep 5) - {:type :info, :f :stop}])) - (gen/time-limit (:time-limit opts)))}) + :generator (independent/concurrent-generator + 10 + (range) + (fn [k] + (->> + (gen/mix [op-get op-put op-del]) + (gen/limit (:ops-per-key opts)))))}) diff --git a/script/jepsen.garage/src/jepsen/garage/set.clj b/script/jepsen.garage/src/jepsen/garage/set.clj new file mode 100644 index 00000000..ab99e6ef --- /dev/null +++ b/script/jepsen.garage/src/jepsen/garage/set.clj @@ -0,0 +1,56 @@ +(ns jepsen.garage.set + (:require [clojure.tools.logging :refer :all] + [clojure.string :as str] + [jepsen [checker :as checker] + [cli :as cli] + [client :as client] + [control :as c] + [db :as db] + [generator :as gen] + [independent :as independent] + [nemesis :as nemesis] + [tests :as tests]] + [jepsen.checker.timeline :as timeline] + [jepsen.control.util :as cu] + [jepsen.os.debian :as debian] + [jepsen.garage.grg :as grg] + [knossos.model :as model] + [slingshot.slingshot :refer [try+]])) + +(defn op-add [_ _] {:type :invoke, :f :add, :value (rand-int 100000)}) +(defn op-read [_ _] {:type :invoke, :f :read, :value nil}) + +(defrecord SetClient [creds] + client/Client + (open! [this test node] + (let [creds (grg/s3-creds node)] + (info node "s3 credentials:" creds) + (assoc this :creds creds))) + (setup! [this test]) + (invoke! [this test op] + (case (:f op) + :add + (do + (grg/s3-put (:creds this) (str (:value op)) "present") + (assoc op :type :ok)) + :read + (let [items (grg/s3-list (:creds this))] + (assoc op :type :ok, :value (set (map read-string items)))))) + (teardown! [this test]) + (close! [this test])) + +(defn workload + "Tests insertions and deletions" + [opts] + {:client (SetClient. nil) + :checker (checker/compose + {:set (checker/set) + :timeline (timeline/html)}) + ; :generator (gen/mix [op-add op-read]) + ; :generator (->> (range) + ; (map (fn [x] {:type :invoke, :f :add, :value x}))) + :generator (gen/mix [op-read + (->> (range) (map (fn [x] {:type :invoke, :f :add, :value x})))]) + :final-generator (gen/once op-read)}) + + From 0bb1577ae12b2dde313e036399f252266bc04d0a Mon Sep 17 00:00:00 2001 From: Alex Auvolat Date: Wed, 19 Apr 2023 15:59:30 +0200 Subject: [PATCH 034/538] two set workloads with different checkers --- script/jepsen.garage/src/jepsen/garage.clj | 3 ++- .../jepsen.garage/src/jepsen/garage/grg.clj | 3 ++- .../jepsen.garage/src/jepsen/garage/set.clj | 20 +++++++++++++------ 3 files changed, 18 insertions(+), 8 deletions(-) diff --git a/script/jepsen.garage/src/jepsen/garage.clj b/script/jepsen.garage/src/jepsen/garage.clj index 7f762923..dbaf265b 100644 --- a/script/jepsen.garage/src/jepsen/garage.clj +++ b/script/jepsen.garage/src/jepsen/garage.clj @@ -16,7 +16,8 @@ (def workloads "A map of workload names to functions that construct workloads, given opts." {"reg" reg/workload - "set" set/workload}) + "set1" set/workload1 + "set2" set/workload2}) (def cli-opts "Additional command line options." diff --git a/script/jepsen.garage/src/jepsen/garage/grg.clj b/script/jepsen.garage/src/jepsen/garage/grg.clj index 2e9bcc72..4597fb14 100644 --- a/script/jepsen.garage/src/jepsen/garage/grg.clj +++ b/script/jepsen.garage/src/jepsen/garage/grg.clj @@ -120,10 +120,11 @@ (defn s3-list "Helper for ListObjects -- just lists everything in the bucket" - [creds] + [creds prefix] (defn list-inner [ct accum] (let [list-result (s3/list-objects-v2 creds {:bucket-name (:bucket creds) + :prefix prefix :continuation-token ct}) new-object-summaries (:object-summaries list-result) new-objects (map (fn [d] (:key d)) new-object-summaries) diff --git a/script/jepsen.garage/src/jepsen/garage/set.clj b/script/jepsen.garage/src/jepsen/garage/set.clj index ab99e6ef..f8c92580 100644 --- a/script/jepsen.garage/src/jepsen/garage/set.clj +++ b/script/jepsen.garage/src/jepsen/garage/set.clj @@ -34,12 +34,12 @@ (grg/s3-put (:creds this) (str (:value op)) "present") (assoc op :type :ok)) :read - (let [items (grg/s3-list (:creds this))] + (let [items (grg/s3-list (:creds this) "")] (assoc op :type :ok, :value (set (map read-string items)))))) (teardown! [this test]) (close! [this test])) -(defn workload +(defn workload1 "Tests insertions and deletions" [opts] {:client (SetClient. nil) @@ -47,10 +47,18 @@ {:set (checker/set) :timeline (timeline/html)}) ; :generator (gen/mix [op-add op-read]) - ; :generator (->> (range) - ; (map (fn [x] {:type :invoke, :f :add, :value x}))) - :generator (gen/mix [op-read - (->> (range) (map (fn [x] {:type :invoke, :f :add, :value x})))]) + :generator (->> (range) + (map (fn [x] {:type :invoke, :f :add, :value x}))) :final-generator (gen/once op-read)}) +(defn workload2 + "Tests insertions and deletions" + [opts] + {:client (SetClient. nil) + :checker (checker/compose + {:set (checker/set-full {:linearizable? false}) + :timeline (timeline/html)}) + :generator (gen/mix [op-read + (->> (range) (map (fn [x] {:type :invoke, :f :add, :value x})))])}) + From 55eb4e87c42bf0da88186eb5b2fe1fbbbdf9ed43 Mon Sep 17 00:00:00 2001 From: Alex Auvolat Date: Wed, 19 Apr 2023 16:16:34 +0200 Subject: [PATCH 035/538] set tests with independant tests together --- script/jepsen.garage/README.md | 7 +++ .../jepsen.garage/src/jepsen/garage/set.clj | 55 ++++++++++++------- 2 files changed, 42 insertions(+), 20 deletions(-) diff --git a/script/jepsen.garage/README.md b/script/jepsen.garage/README.md index 800dde94..1bba32ec 100644 --- a/script/jepsen.garage/README.md +++ b/script/jepsen.garage/README.md @@ -24,6 +24,13 @@ Run tests (this one should fail): lein run test --nodes-file nodes.vagrant --time-limit 64 --concurrency 50 --rate 50 --workload reg ``` +These ones are working: + +``` +lein run test --nodes-file nodes.vagrant --time-limit 64 --rate 50 --concurrency 50 --workload set1 +lein run test --nodes-file nodes.vagrant --time-limit 64 --rate 50 --concurrency 50 --workload set2 +``` + ## License Copyright © 2023 Alex Auvolat diff --git a/script/jepsen.garage/src/jepsen/garage/set.clj b/script/jepsen.garage/src/jepsen/garage/set.clj index f8c92580..156493bc 100644 --- a/script/jepsen.garage/src/jepsen/garage/set.clj +++ b/script/jepsen.garage/src/jepsen/garage/set.clj @@ -28,14 +28,18 @@ (assoc this :creds creds))) (setup! [this test]) (invoke! [this test op] - (case (:f op) - :add - (do - (grg/s3-put (:creds this) (str (:value op)) "present") - (assoc op :type :ok)) - :read - (let [items (grg/s3-list (:creds this) "")] - (assoc op :type :ok, :value (set (map read-string items)))))) + (let [[k v] (:value op) + prefix (str "set" k "/")] + (case (:f op) + :add + (do + (grg/s3-put (:creds this) (str prefix v) "present") + (assoc op :type :ok)) + :read + (let [items (grg/s3-list (:creds this) prefix) + items-stripped (map (fn [o] (str/replace-first o prefix "")) items) + items-set (set (map read-string items-stripped))] + (assoc op :type :ok, :value (independent/tuple k items-set)))))) (teardown! [this test]) (close! [this test])) @@ -43,22 +47,33 @@ "Tests insertions and deletions" [opts] {:client (SetClient. nil) - :checker (checker/compose - {:set (checker/set) - :timeline (timeline/html)}) - ; :generator (gen/mix [op-add op-read]) - :generator (->> (range) - (map (fn [x] {:type :invoke, :f :add, :value x}))) - :final-generator (gen/once op-read)}) + :checker (independent/checker + (checker/compose + {:set (checker/set) + :timeline (timeline/html)})) + :generator (independent/concurrent-generator + 10 + (range 100) + (fn [k] + (->> + (gen/mix [op-add]) + (gen/limit (:ops-per-key opts))))) + :final-generator (independent/sequential-generator + (range 100) + (fn [k] (gen/once op-read)))}) (defn workload2 "Tests insertions and deletions" [opts] {:client (SetClient. nil) - :checker (checker/compose - {:set (checker/set-full {:linearizable? false}) - :timeline (timeline/html)}) - :generator (gen/mix [op-read - (->> (range) (map (fn [x] {:type :invoke, :f :add, :value x})))])}) + :checker (independent/checker + (checker/compose + {:set (checker/set-full {:linearizable? false}) + :timeline (timeline/html)})) + :generator (independent/concurrent-generator + 10 + (range 100) + (fn [k] + (gen/mix [op-add op-read])))}) From 18ee8efb5f7bfcd64bf1a1336ffd6f54574aa79f Mon Sep 17 00:00:00 2001 From: Alex Auvolat Date: Wed, 19 Apr 2023 22:02:03 +0200 Subject: [PATCH 036/538] Check read-after-write property for sets --- .../jepsen.garage/src/jepsen/garage/set.clj | 48 +++++++++++++++++-- 1 file changed, 43 insertions(+), 5 deletions(-) diff --git a/script/jepsen.garage/src/jepsen/garage/set.clj b/script/jepsen.garage/src/jepsen/garage/set.clj index 156493bc..9b21d50e 100644 --- a/script/jepsen.garage/src/jepsen/garage/set.clj +++ b/script/jepsen.garage/src/jepsen/garage/set.clj @@ -1,10 +1,12 @@ (ns jepsen.garage.set (:require [clojure.tools.logging :refer :all] [clojure.string :as str] + [clojure.set :as set] [jepsen [checker :as checker] [cli :as cli] [client :as client] [control :as c] + [checker :as checker] [db :as db] [generator :as gen] [independent :as independent] @@ -17,7 +19,7 @@ [knossos.model :as model] [slingshot.slingshot :refer [try+]])) -(defn op-add [_ _] {:type :invoke, :f :add, :value (rand-int 100000)}) +(defn op-add-rand100 [_ _] {:type :invoke, :f :add, :value (rand-int 100)}) (defn op-read [_ _] {:type :invoke, :f :read, :value nil}) (defrecord SetClient [creds] @@ -43,6 +45,41 @@ (teardown! [this test]) (close! [this test])) +(defn set-read-after-write + "Read-after-Write checker for set operations" + [] + (reify checker/Checker + (check [this test history opts] + (let [init {:add-started #{} + :add-done #{} + :read-must-contain {} + :missed #{} + :unexpected #{}} + final (reduce + (fn [state op] + (info "state:" state) + (info "operation:" op) + (case [(:type op) (:f op)] + ([:invoke :add]) + (assoc state :add-started (conj (:add-started state) (:value op))) + ([:ok :add]) + (assoc state :add-done (conj (:add-done state) (:value op))) + ([:invoke :read]) + (assoc-in state [:read-must-contain (:process op)] (:add-done state)) + ([:ok :read]) + (let [read-must-contain (get (:process op) (:read-must-contain state)) + new-missed (set/difference read-must-contain (:value op)) + new-unexpected (set/difference (:value op) (:add-started state))] + (assoc state + :read-must-contain (dissoc (:read-must-contain state) (:process op)) + :missed (set/union (:missed state) new-missed), + :unexpected (set/union (:unexpected state) new-unexpected))) + state)) + init history) + valid? (and (empty? (:missed final)) (empty? (:unexpected final)))] + (info "final state:" final) + (assoc final :valid? valid?))))) + (defn workload1 "Tests insertions and deletions" [opts] @@ -55,8 +92,8 @@ 10 (range 100) (fn [k] - (->> - (gen/mix [op-add]) + (->> (range) + (map (fn [x] {:type :invoke, :f :add, :value x})) (gen/limit (:ops-per-key opts))))) :final-generator (independent/sequential-generator (range 100) @@ -68,12 +105,13 @@ {:client (SetClient. nil) :checker (independent/checker (checker/compose - {:set (checker/set-full {:linearizable? false}) + {:set-full (checker/set-full {:linearizable? false}) + :set-read-after-write (set-read-after-write) :timeline (timeline/html)})) :generator (independent/concurrent-generator 10 (range 100) (fn [k] - (gen/mix [op-add op-read])))}) + (gen/mix [op-add-rand100 op-read])))}) From 9ec4cca3340cfd03deb55cd58d6b354630e7eb5f Mon Sep 17 00:00:00 2001 From: Alex Auvolat Date: Wed, 19 Apr 2023 22:17:20 +0200 Subject: [PATCH 037/538] reformatting --- script/jepsen.garage/shell.nix | 14 +++++++------- script/jepsen.garage/src/jepsen/garage/set.clj | 5 +---- 2 files changed, 8 insertions(+), 11 deletions(-) diff --git a/script/jepsen.garage/shell.nix b/script/jepsen.garage/shell.nix index 595a78d9..1f2514c6 100644 --- a/script/jepsen.garage/shell.nix +++ b/script/jepsen.garage/shell.nix @@ -1,8 +1,8 @@ -{ pkgs ? import {} }: - pkgs.mkShell { - nativeBuildInputs = with pkgs; [ - leiningen - vagrant - gnuplot - ]; +{ pkgs ? import { } }: +pkgs.mkShell { + nativeBuildInputs = with pkgs; [ + leiningen + vagrant + gnuplot + ]; } diff --git a/script/jepsen.garage/src/jepsen/garage/set.clj b/script/jepsen.garage/src/jepsen/garage/set.clj index 9b21d50e..5f76d1ac 100644 --- a/script/jepsen.garage/src/jepsen/garage/set.clj +++ b/script/jepsen.garage/src/jepsen/garage/set.clj @@ -57,8 +57,6 @@ :unexpected #{}} final (reduce (fn [state op] - (info "state:" state) - (info "operation:" op) (case [(:type op) (:f op)] ([:invoke :add]) (assoc state :add-started (conj (:add-started state) (:value op))) @@ -77,7 +75,6 @@ state)) init history) valid? (and (empty? (:missed final)) (empty? (:unexpected final)))] - (info "final state:" final) (assoc final :valid? valid?))))) (defn workload1 @@ -110,7 +107,7 @@ :timeline (timeline/html)})) :generator (independent/concurrent-generator 10 - (range 100) + (range) (fn [k] (gen/mix [op-add-rand100 op-read])))}) From ef5ca86dfc2678e8fc16b99daffeac40093945ae Mon Sep 17 00:00:00 2001 From: Alex Auvolat Date: Wed, 18 Oct 2023 14:01:18 +0200 Subject: [PATCH 038/538] jepsen: update to garage 0.9.0 --- script/jepsen.garage/src/jepsen/garage.clj | 2 +- script/jepsen.garage/src/jepsen/garage/grg.clj | 14 +++++++++----- 2 files changed, 10 insertions(+), 6 deletions(-) diff --git a/script/jepsen.garage/src/jepsen/garage.clj b/script/jepsen.garage/src/jepsen/garage.clj index dbaf265b..754ddf7d 100644 --- a/script/jepsen.garage/src/jepsen/garage.clj +++ b/script/jepsen.garage/src/jepsen/garage.clj @@ -42,7 +42,7 @@ (let [workload ((get workloads (:workload opts)) opts) garage-version (if (:increasing-timestamps opts) "03490d41d58576d7b3bcf977b2726d72a3a66ada" - "v0.8.2")] + "v0.9.0")] (merge tests/noop-test opts {:pure-generators true diff --git a/script/jepsen.garage/src/jepsen/garage/grg.clj b/script/jepsen.garage/src/jepsen/garage/grg.clj index 4597fb14..31f20852 100644 --- a/script/jepsen.garage/src/jepsen/garage/grg.clj +++ b/script/jepsen.garage/src/jepsen/garage/grg.clj @@ -9,6 +9,8 @@ ; CONSTANTS -- HOW GARAGE IS SET UP (def dir "/opt/garage") +(def data-dir (str dir "/data")) +(def meta-dir (str dir "/meta")) (def binary (str dir "/garage")) (def logfile (str dir "/garage.log")) (def pidfile (str dir "/garage.pid")) @@ -54,18 +56,19 @@ :chdir dir} binary :server) - (Thread/sleep 100) + (info node "garage daemon started") + (c/exec :sleep 5) (let [node-id (c/exec binary :node :id :-q)] (info node "node id:" node-id) (c/on-many (:nodes test) (c/exec binary :node :connect node-id)) - (c/exec binary :layout :assign (subs node-id 0 16) :-c 1 :-z :dc1 :-t node)) + (c/exec binary :layout :assign (subs node-id 0 16) :-c :1G :-z :dc1 :-t node)) (if (= node (first (:nodes test))) (do - (Thread/sleep 2000) + (c/exec :sleep 5) (c/exec binary :layout :apply :--version 1) (info node "garage status:" (c/exec binary :status)) - (c/exec binary :key :new :--name grg-key) + (c/exec binary :key :create grg-key) (c/exec binary :bucket :create grg-bucket) (c/exec binary :bucket :allow :--read :--write grg-bucket :--key grg-key) (info node "key info: " (c/exec binary :key :info grg-key)))))) @@ -73,7 +76,8 @@ (info node "tearing down garage" version) (c/su (cu/stop-daemon! binary pidfile) - (c/exec :rm :-rf dir))) + (c/exec :rm :-rf data-dir) + (c/exec :rm :-rf meta-dir))) db/LogFiles (log-files [_ test node] [logfile]))) From 012ade5d4b81cc623f45042a1d3ca5c3ddafa569 Mon Sep 17 00:00:00 2001 From: Alex Auvolat Date: Wed, 18 Oct 2023 14:06:32 +0200 Subject: [PATCH 039/538] jepsen: update jepsen and fix garage key info --- script/jepsen.garage/project.clj | 2 +- script/jepsen.garage/src/jepsen/garage/grg.clj | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/script/jepsen.garage/project.clj b/script/jepsen.garage/project.clj index 20bb59c7..59d45484 100644 --- a/script/jepsen.garage/project.clj +++ b/script/jepsen.garage/project.clj @@ -5,6 +5,6 @@ :url "https://www.gnu.org/licenses/agpl-3.0.en.html"} :main jepsen.garage :dependencies [[org.clojure/clojure "1.11.1"] - [jepsen "0.3.2-SNAPSHOT"] + [jepsen "0.3.3-SNAPSHOT"] [amazonica "0.3.163"]] :repl-options {:init-ns jepsen.garage}) diff --git a/script/jepsen.garage/src/jepsen/garage/grg.clj b/script/jepsen.garage/src/jepsen/garage/grg.clj index 31f20852..4347b1a7 100644 --- a/script/jepsen.garage/src/jepsen/garage/grg.clj +++ b/script/jepsen.garage/src/jepsen/garage/grg.clj @@ -87,7 +87,7 @@ (defn s3-creds "Get S3 credentials for node" [node] - (let [key-info (c/on node (c/exec binary :key :info grg-key)) + (let [key-info (c/on node (c/exec binary :key :info grg-key :--show-secret)) [_ ak sk] (re-matches #"(?s).*Key ID: (.*)\nSecret key: (.*)\nCan create.*" key-info)] From 84d43501ce6dfd645d844ada0fcbff932d6fea76 Mon Sep 17 00:00:00 2001 From: Alex Auvolat Date: Wed, 18 Oct 2023 15:34:12 +0200 Subject: [PATCH 040/538] refactor jepsen setup logic --- script/jepsen.garage/shell.nix | 12 +- .../jepsen.garage/src/jepsen/garage/grg.clj | 131 ++++++++++++------ 2 files changed, 96 insertions(+), 47 deletions(-) diff --git a/script/jepsen.garage/shell.nix b/script/jepsen.garage/shell.nix index 1f2514c6..01e4c845 100644 --- a/script/jepsen.garage/shell.nix +++ b/script/jepsen.garage/shell.nix @@ -1,8 +1,18 @@ -{ pkgs ? import { } }: +{ pkgs ? import { + overlays = [ + (self: super: { + jdk = super.jdk11; + jre = super.jre11; + }) + ]; +} }: pkgs.mkShell { nativeBuildInputs = with pkgs; [ leiningen + jdk + jna vagrant gnuplot + graphviz ]; } diff --git a/script/jepsen.garage/src/jepsen/garage/grg.clj b/script/jepsen.garage/src/jepsen/garage/grg.clj index 4347b1a7..f6075762 100644 --- a/script/jepsen.garage/src/jepsen/garage/grg.clj +++ b/script/jepsen.garage/src/jepsen/garage/grg.clj @@ -1,6 +1,7 @@ (ns jepsen.garage.grg (:require [clojure.tools.logging :refer :all] [jepsen [control :as c] + [core :as jepsen] [db :as db]] [jepsen.control.util :as cu] [amazonica.aws.s3 :as s3] @@ -21,63 +22,101 @@ ; THE GARAGE DB +(defn install! + "Download and install Garage" + [node version] + (c/su + (c/trace + (info node "installing garage" version) + (c/exec :mkdir :-p dir) + (let [url (str "https://garagehq.deuxfleurs.fr/_releases/" version "/x86_64-unknown-linux-musl/garage") + cache (cu/cached-wget! url)] + (c/exec :cp cache binary)) + (c/exec :chmod :+x binary)))) + +(defn configure! + "Configure Garage" + [node] + (c/su + (c/trace + (cu/write-file! + (str "rpc_secret = \"0fffabe52542c2b89a56b2efb7dfd477e9dafb285c9025cbdf1de7ca21a6b372\"\n" + "rpc_bind_addr = \"0.0.0.0:3901\"\n" + "rpc_public_addr = \"" node ":3901\"\n" + "db_engine = \"lmdb\"\n" + "replication_mode = \"3\"\n" + "data_dir = \"" dir "/data\"\n" + "metadata_dir = \"" dir "/meta\"\n" + "[s3_api]\n" + "s3_region = \"us-east-1\"\n" + "api_bind_addr = \"0.0.0.0:3900\"\n" + "[k2v_api]\n" + "api_bind_addr = \"0.0.0.0:3902\"\n" + "[admin]\n" + "api_bind_addr = \"0.0.0.0:3903\"\n" + "admin_token = \"" grg-admin-token "\"\n") + "/etc/garage.toml")))) + +(defn connect-node! + "Connect a Garage node to the rest of the cluster" + [test node] + (c/trace + (let [node-id (c/exec binary :node :id :-q)] + (info node "node id:" node-id) + (c/on-many (:nodes test) + (c/exec binary :node :connect node-id))))) + +(defn configure-node! + "Configure a Garage node to be part of a cluster layout" + [test node] + (c/trace + (let [node-id (c/exec binary :node :id :-q)] + (c/on (jepsen/primary test) + (c/exec binary :layout :assign (subs node-id 0 16) :-c :1G :-z :dc1 :-t node))))) + +(defn finalize-config! + "Apply the layout and create a key/bucket pair in the cluster" + [node] + (c/trace + (c/exec binary :layout :apply :--version 1) + (info node "garage status:" (c/exec binary :status)) + (c/exec binary :key :create grg-key) + (c/exec binary :bucket :create grg-bucket) + (c/exec binary :bucket :allow :--read :--write grg-bucket :--key grg-key) + (info node "key info: " (c/exec binary :key :info grg-key)))) + (defn db "Garage DB for a particular version" [version] (reify db/DB (setup! [_ test node] - (info node "installing garage" version) - (c/su - (c/exec :mkdir :-p dir) - (let [url (str "https://garagehq.deuxfleurs.fr/_releases/" version "/x86_64-unknown-linux-musl/garage") - cache (cu/wget! url)] - (c/exec :cp cache binary)) - (c/exec :chmod :+x binary) - (cu/write-file! - (str "rpc_secret = \"0fffabe52542c2b89a56b2efb7dfd477e9dafb285c9025cbdf1de7ca21a6b372\"\n" - "rpc_bind_addr = \"0.0.0.0:3901\"\n" - "rpc_public_addr = \"" node ":3901\"\n" - "db_engine = \"lmdb\"\n" - "replication_mode = \"3\"\n" - "data_dir = \"" dir "/data\"\n" - "metadata_dir = \"" dir "/meta\"\n" - "[s3_api]\n" - "s3_region = \"us-east-1\"\n" - "api_bind_addr = \"0.0.0.0:3900\"\n" - "[k2v_api]\n" - "api_bind_addr = \"0.0.0.0:3902\"\n" - "[admin]\n" - "api_bind_addr = \"0.0.0.0:3903\"\n" - "admin_token = \"" grg-admin-token "\"\n") - "/etc/garage.toml") - (cu/start-daemon! - {:logfile logfile - :pidfile pidfile - :chdir dir} - binary - :server) - (info node "garage daemon started") - (c/exec :sleep 5) - (let [node-id (c/exec binary :node :id :-q)] - (info node "node id:" node-id) - (c/on-many (:nodes test) - (c/exec binary :node :connect node-id)) - (c/exec binary :layout :assign (subs node-id 0 16) :-c :1G :-z :dc1 :-t node)) - (if (= node (first (:nodes test))) - (do - (c/exec :sleep 5) - (c/exec binary :layout :apply :--version 1) - (info node "garage status:" (c/exec binary :status)) - (c/exec binary :key :create grg-key) - (c/exec binary :bucket :create grg-bucket) - (c/exec binary :bucket :allow :--read :--write grg-bucket :--key grg-key) - (info node "key info: " (c/exec binary :key :info grg-key)))))) + (install! node version) + (configure! node) + (cu/start-daemon! + {:logfile logfile + :pidfile pidfile + :chdir dir} + binary + :server) + (c/exec :sleep 3) + + (jepsen/synchronize test) + (connect-node! test node) + + (jepsen/synchronize test) + (configure-node! test node) + + (jepsen/synchronize test) + (when (= node (jepsen/primary test)) + (finalize-config! node))) + (teardown! [_ test node] (info node "tearing down garage" version) (c/su (cu/stop-daemon! binary pidfile) (c/exec :rm :-rf data-dir) (c/exec :rm :-rf meta-dir))) + db/LogFiles (log-files [_ test node] [logfile]))) From ddd3de7fcef2a2e05805766085c156d7fde9e12e Mon Sep 17 00:00:00 2001 From: Alex Auvolat Date: Wed, 18 Oct 2023 16:30:45 +0200 Subject: [PATCH 041/538] refactor jepsen code --- script/jepsen.garage/src/jepsen/garage.clj | 2 +- .../src/jepsen/garage/{grg.clj => daemon.clj} | 92 +++++-------------- .../jepsen.garage/src/jepsen/garage/reg.clj | 9 +- .../jepsen.garage/src/jepsen/garage/s3api.clj | 48 ++++++++++ .../jepsen.garage/src/jepsen/garage/set.clj | 9 +- 5 files changed, 83 insertions(+), 77 deletions(-) rename script/jepsen.garage/src/jepsen/garage/{grg.clj => daemon.clj} (55%) create mode 100644 script/jepsen.garage/src/jepsen/garage/s3api.clj diff --git a/script/jepsen.garage/src/jepsen/garage.clj b/script/jepsen.garage/src/jepsen/garage.clj index 754ddf7d..5816512b 100644 --- a/script/jepsen.garage/src/jepsen/garage.clj +++ b/script/jepsen.garage/src/jepsen/garage.clj @@ -9,7 +9,7 @@ [tests :as tests]] [jepsen.os.debian :as debian] [jepsen.garage - [grg :as grg] + [daemon :as grg] [reg :as reg] [set :as set]])) diff --git a/script/jepsen.garage/src/jepsen/garage/grg.clj b/script/jepsen.garage/src/jepsen/garage/daemon.clj similarity index 55% rename from script/jepsen.garage/src/jepsen/garage/grg.clj rename to script/jepsen.garage/src/jepsen/garage/daemon.clj index f6075762..81163521 100644 --- a/script/jepsen.garage/src/jepsen/garage/grg.clj +++ b/script/jepsen.garage/src/jepsen/garage/daemon.clj @@ -1,24 +1,22 @@ -(ns jepsen.garage.grg +(ns jepsen.garage.daemon (:require [clojure.tools.logging :refer :all] [jepsen [control :as c] [core :as jepsen] [db :as db]] - [jepsen.control.util :as cu] - [amazonica.aws.s3 :as s3] - [slingshot.slingshot :refer [try+]])) + [jepsen.control.util :as cu])) ; CONSTANTS -- HOW GARAGE IS SET UP -(def dir "/opt/garage") -(def data-dir (str dir "/data")) -(def meta-dir (str dir "/meta")) -(def binary (str dir "/garage")) -(def logfile (str dir "/garage.log")) -(def pidfile (str dir "/garage.pid")) +(def base-dir "/opt/garage") +(def data-dir (str base-dir "/data")) +(def meta-dir (str base-dir "/meta")) +(def binary (str base-dir "/garage")) +(def logfile (str base-dir "/garage.log")) +(def pidfile (str base-dir "/garage.pid")) -(def grg-admin-token "icanhazadmin") -(def grg-key "jepsen") -(def grg-bucket "jepsen") +(def admin-token "icanhazadmin") +(def access-key "jepsen") +(def bucket-name "jepsen") ; THE GARAGE DB @@ -28,7 +26,7 @@ (c/su (c/trace (info node "installing garage" version) - (c/exec :mkdir :-p dir) + (c/exec :mkdir :-p base-dir) (let [url (str "https://garagehq.deuxfleurs.fr/_releases/" version "/x86_64-unknown-linux-musl/garage") cache (cu/cached-wget! url)] (c/exec :cp cache binary)) @@ -45,8 +43,8 @@ "rpc_public_addr = \"" node ":3901\"\n" "db_engine = \"lmdb\"\n" "replication_mode = \"3\"\n" - "data_dir = \"" dir "/data\"\n" - "metadata_dir = \"" dir "/meta\"\n" + "data_dir = \"" data-dir "\"\n" + "metadata_dir = \"" meta-dir "\"\n" "[s3_api]\n" "s3_region = \"us-east-1\"\n" "api_bind_addr = \"0.0.0.0:3900\"\n" @@ -54,7 +52,7 @@ "api_bind_addr = \"0.0.0.0:3902\"\n" "[admin]\n" "api_bind_addr = \"0.0.0.0:3903\"\n" - "admin_token = \"" grg-admin-token "\"\n") + "admin_token = \"" admin-token "\"\n") "/etc/garage.toml")))) (defn connect-node! @@ -80,10 +78,10 @@ (c/trace (c/exec binary :layout :apply :--version 1) (info node "garage status:" (c/exec binary :status)) - (c/exec binary :key :create grg-key) - (c/exec binary :bucket :create grg-bucket) - (c/exec binary :bucket :allow :--read :--write grg-bucket :--key grg-key) - (info node "key info: " (c/exec binary :key :info grg-key)))) + (c/exec binary :key :create access-key) + (c/exec binary :bucket :create bucket-name) + (c/exec binary :bucket :allow :--read :--write bucket-name :--key access-key) + (info node "key info: " (c/exec binary :key :info access-key)))) (defn db "Garage DB for a particular version" @@ -95,7 +93,7 @@ (cu/start-daemon! {:logfile logfile :pidfile pidfile - :chdir dir} + :chdir base-dir} binary :server) (c/exec :sleep 3) @@ -121,58 +119,16 @@ (log-files [_ test node] [logfile]))) -; GARAGE S3 HELPER FUNCTIONS - -(defn s3-creds - "Get S3 credentials for node" +(defn creds + "Obtain Garage credentials for node" [node] - (let [key-info (c/on node (c/exec binary :key :info grg-key :--show-secret)) + (let [key-info (c/on node (c/exec binary :key :info access-key :--show-secret)) [_ ak sk] (re-matches #"(?s).*Key ID: (.*)\nSecret key: (.*)\nCan create.*" key-info)] {:access-key ak :secret-key sk :endpoint (str "http://" node ":3900") - :bucket grg-bucket + :bucket bucket-name :client-config {:path-style-access-enabled true}})) -(defn s3-get - "Helper for GetObject" - [creds k] - (try+ - (-> (s3/get-object creds (:bucket creds) k) - :input-stream - slurp) - (catch (re-find #"Key not found" (.getMessage %)) ex - nil))) - -(defn s3-put - "Helper for PutObject or DeleteObject (is a delete if value is nil)" - [creds k v] - (if (= v nil) - (s3/delete-object creds - :bucket-name (:bucket creds) - :key k) - (let [some-bytes (.getBytes v "UTF-8") - bytes-stream (java.io.ByteArrayInputStream. some-bytes)] - (s3/put-object creds - :bucket-name (:bucket creds) - :key k - :input-stream bytes-stream - :metadata {:content-length (count some-bytes)})))) - -(defn s3-list - "Helper for ListObjects -- just lists everything in the bucket" - [creds prefix] - (defn list-inner [ct accum] - (let [list-result (s3/list-objects-v2 creds - {:bucket-name (:bucket creds) - :prefix prefix - :continuation-token ct}) - new-object-summaries (:object-summaries list-result) - new-objects (map (fn [d] (:key d)) new-object-summaries) - objects (concat new-objects accum)] - (if (:truncated? list-result) - (list-inner (:next-continuation-token list-result) objects) - objects))) - (list-inner nil [])) diff --git a/script/jepsen.garage/src/jepsen/garage/reg.clj b/script/jepsen.garage/src/jepsen/garage/reg.clj index 0b370b36..3a2c1d55 100644 --- a/script/jepsen.garage/src/jepsen/garage/reg.clj +++ b/script/jepsen.garage/src/jepsen/garage/reg.clj @@ -13,7 +13,8 @@ [jepsen.checker.timeline :as timeline] [jepsen.control.util :as cu] [jepsen.os.debian :as debian] - [jepsen.garage.grg :as grg] + [jepsen.garage.daemon :as grg] + [jepsen.garage.s3api :as s3] [knossos.model :as model] [slingshot.slingshot :refer [try+]])) @@ -24,7 +25,7 @@ (defrecord RegClient [creds] client/Client (open! [this test node] - (let [creds (grg/s3-creds node)] + (let [creds (grg/creds node)] (info node "s3 credentials:" creds) (assoc this :creds creds))) (setup! [this test]) @@ -32,11 +33,11 @@ (let [[k v] (:value op)] (case (:f op) :read - (let [value (grg/s3-get (:creds this) k)] + (let [value (s3/get (:creds this) k)] (assoc op :type :ok, :value (independent/tuple k value))) :write (do - (grg/s3-put (:creds this) k v) + (s3/put (:creds this) k v) (assoc op :type :ok))))) (teardown! [this test]) (close! [this test])) diff --git a/script/jepsen.garage/src/jepsen/garage/s3api.clj b/script/jepsen.garage/src/jepsen/garage/s3api.clj new file mode 100644 index 00000000..239d5423 --- /dev/null +++ b/script/jepsen.garage/src/jepsen/garage/s3api.clj @@ -0,0 +1,48 @@ +(ns jepsen.garage.s3api + (:require [clojure.tools.logging :refer :all] + [jepsen [control :as c]] + [amazonica.aws.s3 :as s3] + [slingshot.slingshot :refer [try+]])) + +; GARAGE S3 HELPER FUNCTIONS + +(defn get + "Helper for GetObject" + [creds k] + (try+ + (-> (s3/get-object creds (:bucket creds) k) + :input-stream + slurp) + (catch (re-find #"Key not found" (.getMessage %)) ex + nil))) + +(defn put + "Helper for PutObject or DeleteObject (is a delete if value is nil)" + [creds k v] + (if (= v nil) + (s3/delete-object creds + :bucket-name (:bucket creds) + :key k) + (let [some-bytes (.getBytes v "UTF-8") + bytes-stream (java.io.ByteArrayInputStream. some-bytes)] + (s3/put-object creds + :bucket-name (:bucket creds) + :key k + :input-stream bytes-stream + :metadata {:content-length (count some-bytes)})))) + +(defn list + "Helper for ListObjects -- just lists everything in the bucket" + [creds prefix] + (defn list-inner [ct accum] + (let [list-result (s3/list-objects-v2 creds + {:bucket-name (:bucket creds) + :prefix prefix + :continuation-token ct}) + new-object-summaries (:object-summaries list-result) + new-objects (map (fn [d] (:key d)) new-object-summaries) + objects (concat new-objects accum)] + (if (:truncated? list-result) + (list-inner (:next-continuation-token list-result) objects) + objects))) + (list-inner nil [])) diff --git a/script/jepsen.garage/src/jepsen/garage/set.clj b/script/jepsen.garage/src/jepsen/garage/set.clj index 5f76d1ac..6bbc1ee0 100644 --- a/script/jepsen.garage/src/jepsen/garage/set.clj +++ b/script/jepsen.garage/src/jepsen/garage/set.clj @@ -15,7 +15,8 @@ [jepsen.checker.timeline :as timeline] [jepsen.control.util :as cu] [jepsen.os.debian :as debian] - [jepsen.garage.grg :as grg] + [jepsen.garage.daemon :as grg] + [jepsen.garage.s3api :as s3] [knossos.model :as model] [slingshot.slingshot :refer [try+]])) @@ -25,7 +26,7 @@ (defrecord SetClient [creds] client/Client (open! [this test node] - (let [creds (grg/s3-creds node)] + (let [creds (grg/creds node)] (info node "s3 credentials:" creds) (assoc this :creds creds))) (setup! [this test]) @@ -35,10 +36,10 @@ (case (:f op) :add (do - (grg/s3-put (:creds this) (str prefix v) "present") + (s3/put (:creds this) (str prefix v) "present") (assoc op :type :ok)) :read - (let [items (grg/s3-list (:creds this) prefix) + (let [items (s3/list (:creds this) prefix) items-stripped (map (fn [o] (str/replace-first o prefix "")) items) items-set (set (map read-string items-stripped))] (assoc op :type :ok, :value (independent/tuple k items-set)))))) From 45b0453d0f5b08f44dbd010c084daa87c2876945 Mon Sep 17 00:00:00 2001 From: Alex Auvolat Date: Tue, 18 Apr 2023 18:03:10 +0200 Subject: [PATCH 042/538] Ensure increasing version timestamps in PutObject --- src/api/s3/put.rs | 24 ++++++++++++++++++------ 1 file changed, 18 insertions(+), 6 deletions(-) diff --git a/src/api/s3/put.rs b/src/api/s3/put.rs index c7ac5030..bd032165 100644 --- a/src/api/s3/put.rs +++ b/src/api/s3/put.rs @@ -3,6 +3,7 @@ use std::sync::Arc; use base64::prelude::*; use futures::prelude::*; +use futures::try_join; use hyper::body::{Body, Bytes}; use hyper::header::{HeaderMap, HeaderValue}; use hyper::{Request, Response}; @@ -35,7 +36,7 @@ pub async fn handle_put( garage: Arc, req: Request, bucket: &Bucket, - key: &str, + key: &String, content_sha256: Option, ) -> Result, Error> { // Retrieve interesting headers from request @@ -68,16 +69,27 @@ pub(crate) async fn save_stream> + Unpin>( headers: ObjectVersionHeaders, body: S, bucket: &Bucket, - key: &str, + key: &String, content_md5: Option, content_sha256: Option, ) -> Result<(Uuid, String), Error> { + let mut chunker = StreamChunker::new(body, garage.config.block_size); + let (first_block_opt, existing_object) = try_join!( + chunker.next(), + garage + .object_table + .get(&bucket.id, key) + .map_err(Error::from), + )?; + + let first_block = first_block_opt.unwrap_or_default(); + // Generate identity of new version let version_uuid = gen_uuid(); - let version_timestamp = now_msec(); - - let mut chunker = StreamChunker::new(body, garage.config.block_size); - let first_block = chunker.next().await?.unwrap_or_default(); + let version_timestamp = existing_object + .and_then(|obj| obj.versions().iter().map(|v| v.timestamp).max()) + .map(|t| std::cmp::max(t + 1, now_msec())) + .unwrap_or_else(now_msec); // If body is small enough, store it directly in the object table // as "inline data". We can then return immediately. From 3d6ed63824ac2190ba0522d897ef9addb8823140 Mon Sep 17 00:00:00 2001 From: Alex Auvolat Date: Wed, 18 Oct 2023 16:36:48 +0200 Subject: [PATCH 043/538] check_quotas: avoid re-fetching object from object table --- src/api/s3/multipart.rs | 4 ++-- src/api/s3/put.rs | 18 ++++++++++-------- 2 files changed, 12 insertions(+), 10 deletions(-) diff --git a/src/api/s3/multipart.rs b/src/api/s3/multipart.rs index 52ea8e78..b6001142 100644 --- a/src/api/s3/multipart.rs +++ b/src/api/s3/multipart.rs @@ -233,7 +233,7 @@ pub async fn handle_complete_multipart_upload( // Get object and multipart upload let key = key.to_string(); - let (_, mut object_version, mpu) = get_upload(&garage, &bucket.id, &key, &upload_id).await?; + let (object, mut object_version, mpu) = get_upload(&garage, &bucket.id, &key, &upload_id).await?; if mpu.parts.is_empty() { return Err(Error::bad_request("No data was uploaded")); @@ -331,7 +331,7 @@ pub async fn handle_complete_multipart_upload( // Calculate total size of final object let total_size = parts.iter().map(|x| x.size.unwrap()).sum(); - if let Err(e) = check_quotas(&garage, bucket, &key, total_size).await { + if let Err(e) = check_quotas(&garage, bucket, &key, total_size, Some(&object)).await { object_version.state = ObjectVersionState::Aborted; let final_object = Object::new(bucket.id, key.clone(), vec![object_version]); garage.object_table.insert(&final_object).await?; diff --git a/src/api/s3/put.rs b/src/api/s3/put.rs index bd032165..a3fe9cca 100644 --- a/src/api/s3/put.rs +++ b/src/api/s3/put.rs @@ -87,6 +87,7 @@ pub(crate) async fn save_stream> + Unpin>( // Generate identity of new version let version_uuid = gen_uuid(); let version_timestamp = existing_object + .as_ref() .and_then(|obj| obj.versions().iter().map(|v| v.timestamp).max()) .map(|t| std::cmp::max(t + 1, now_msec())) .unwrap_or_else(now_msec); @@ -109,7 +110,7 @@ pub(crate) async fn save_stream> + Unpin>( content_sha256, )?; - check_quotas(&garage, bucket, key, size).await?; + check_quotas(&garage, bucket, key, size, existing_object.as_ref()).await?; let object_version = ObjectVersion { uuid: version_uuid, @@ -188,7 +189,7 @@ pub(crate) async fn save_stream> + Unpin>( content_sha256, )?; - check_quotas(&garage, bucket, key, total_size).await?; + check_quotas(&garage, bucket, key, total_size, existing_object.as_ref()).await?; // Save final object state, marked as Complete let md5sum_hex = hex::encode(data_md5sum); @@ -243,17 +244,18 @@ pub(crate) async fn check_quotas( bucket: &Bucket, key: &str, size: u64, + prev_object: Option<&Object>, ) -> Result<(), Error> { let quotas = bucket.state.as_option().unwrap().quotas.get(); if quotas.max_objects.is_none() && quotas.max_size.is_none() { return Ok(()); }; - let key = key.to_string(); - let (prev_object, counters) = futures::try_join!( - garage.object_table.get(&bucket.id, &key), - garage.object_counter_table.table.get(&bucket.id, &EmptyKey), - )?; + let counters = garage + .object_counter_table + .table + .get(&bucket.id, &EmptyKey) + .await?; let counters = counters .map(|x| x.filtered_values(&garage.system.ring.borrow())) @@ -287,7 +289,7 @@ pub(crate) async fn check_quotas( if cnt_size_diff > 0 && current_size + cnt_size_diff > ms as i64 { return Err(Error::forbidden(format!( "Bucket size quota is reached, maximum total size of objects for this bucket: {}. The bucket is already {} bytes, and this object would add {} bytes.", - ms, current_size, size + ms, current_size, cnt_size_diff ))); } } From d146cdd5b66ca1d3ed65ce93ca42c6db22defc09 Mon Sep 17 00:00:00 2001 From: Alex Auvolat Date: Wed, 18 Oct 2023 16:38:26 +0200 Subject: [PATCH 044/538] cargo fmt --- src/api/s3/multipart.rs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/api/s3/multipart.rs b/src/api/s3/multipart.rs index b6001142..978ad9cf 100644 --- a/src/api/s3/multipart.rs +++ b/src/api/s3/multipart.rs @@ -233,7 +233,8 @@ pub async fn handle_complete_multipart_upload( // Get object and multipart upload let key = key.to_string(); - let (object, mut object_version, mpu) = get_upload(&garage, &bucket.id, &key, &upload_id).await?; + let (object, mut object_version, mpu) = + get_upload(&garage, &bucket.id, &key, &upload_id).await?; if mpu.parts.is_empty() { return Err(Error::bad_request("No data was uploaded")); From b3bf16ee27b061a3a091022e718b2994365f945c Mon Sep 17 00:00:00 2001 From: Alex Auvolat Date: Wed, 18 Oct 2023 17:51:34 +0200 Subject: [PATCH 045/538] make jepsen test more robust: handle errors and timeouts, fixed access key --- script/jepsen.garage/src/jepsen/garage.clj | 17 ++++++++++---- .../src/jepsen/garage/daemon.clj | 23 ++++++++----------- .../jepsen.garage/src/jepsen/garage/reg.clj | 22 +++++++++++------- 3 files changed, 36 insertions(+), 26 deletions(-) diff --git a/script/jepsen.garage/src/jepsen/garage.clj b/script/jepsen.garage/src/jepsen/garage.clj index 5816512b..891fdf12 100644 --- a/script/jepsen.garage/src/jepsen/garage.clj +++ b/script/jepsen.garage/src/jepsen/garage.clj @@ -41,7 +41,7 @@ [opts] (let [workload ((get workloads (:workload opts)) opts) garage-version (if (:increasing-timestamps opts) - "03490d41d58576d7b3bcf977b2726d72a3a66ada" + "d146cdd5b66ca1d3ed65ce93ca42c6db22defc09" "v0.9.0")] (merge tests/noop-test opts @@ -56,16 +56,23 @@ (gen/stagger (/ (:rate opts))) (gen/nemesis (cycle [(gen/sleep 5) - {:type :info, :f :start} + ;{:type :info, :f :partition-start} + ;(gen/sleep 5) + {:type :info, :f :clock-scramble} (gen/sleep 5) - {:type :info, :f :stop}])) + ;{:type :info, :f :partition-stop} + ;(gen/sleep 5) + {:type :info, :f :clock-scramble}])) (gen/time-limit (:time-limit opts))) (gen/log "Healing cluster") - (gen/nemesis (gen/once {:type :info, :f :stop})) + (gen/nemesis (gen/once {:type :info, :f :partition-stop})) (gen/log "Waiting for recovery") (gen/sleep 10) (gen/clients (:final-generator workload))) - :nemesis (nemesis/partition-random-halves) + :nemesis (nemesis/compose + {{:partition-start :start + :partition-stop :stop} (nemesis/partition-random-halves) + {:clock-scramble :scramble} (nemesis/clock-scrambler 20.0)}) :checker (checker/compose {:perf (checker/perf) :workload (:checker workload)}) diff --git a/script/jepsen.garage/src/jepsen/garage/daemon.clj b/script/jepsen.garage/src/jepsen/garage/daemon.clj index 81163521..2dcfa94f 100644 --- a/script/jepsen.garage/src/jepsen/garage/daemon.clj +++ b/script/jepsen.garage/src/jepsen/garage/daemon.clj @@ -15,7 +15,8 @@ (def pidfile (str base-dir "/garage.pid")) (def admin-token "icanhazadmin") -(def access-key "jepsen") +(def access-key-id "GK8bfb6a51286071c6c9cd8bc3") +(def secret-access-key "b0be95f71c1c6f16858a9edf395078b75c12ecb6b1c03385c4ae92076e4994a3") (def bucket-name "jepsen") ; THE GARAGE DB @@ -78,10 +79,10 @@ (c/trace (c/exec binary :layout :apply :--version 1) (info node "garage status:" (c/exec binary :status)) - (c/exec binary :key :create access-key) + (c/exec binary :key :import access-key-id secret-access-key :--yes) (c/exec binary :bucket :create bucket-name) - (c/exec binary :bucket :allow :--read :--write bucket-name :--key access-key) - (info node "key info: " (c/exec binary :key :info access-key)))) + (c/exec binary :bucket :allow :--read :--write bucket-name :--key access-key-id) + (info node "key info: " (c/exec binary :key :info access-key-id)))) (defn db "Garage DB for a particular version" @@ -122,13 +123,9 @@ (defn creds "Obtain Garage credentials for node" [node] - (let [key-info (c/on node (c/exec binary :key :info access-key :--show-secret)) - [_ ak sk] (re-matches - #"(?s).*Key ID: (.*)\nSecret key: (.*)\nCan create.*" - key-info)] - {:access-key ak - :secret-key sk - :endpoint (str "http://" node ":3900") - :bucket bucket-name - :client-config {:path-style-access-enabled true}})) + {:access-key access-key-id + :secret-key secret-access-key + :endpoint (str "http://" node ":3900") + :bucket bucket-name + :client-config {:path-style-access-enabled true}}) diff --git a/script/jepsen.garage/src/jepsen/garage/reg.clj b/script/jepsen.garage/src/jepsen/garage/reg.clj index 3a2c1d55..d5404c6b 100644 --- a/script/jepsen.garage/src/jepsen/garage/reg.clj +++ b/script/jepsen.garage/src/jepsen/garage/reg.clj @@ -33,19 +33,25 @@ (let [[k v] (:value op)] (case (:f op) :read - (let [value (s3/get (:creds this) k)] - (assoc op :type :ok, :value (independent/tuple k value))) + (try+ + (let [value (s3/get (:creds this) k)] + (assoc op :type :ok, :value (independent/tuple k value))) + (catch (re-find #"Unavailable" (.getMessage %)) ex + (assoc op :type :fail, :error [:s3-error (.getMessage ex)]))) :write - (do - (s3/put (:creds this) k v) - (assoc op :type :ok))))) + (try+ + (do + (s3/put (:creds this) k v) + (assoc op :type :ok)) + (catch (re-find #"Unavailable" (.getMessage %)) ex + (assoc op :type :fail, :error [:s3-error (.getMessage ex)])))))) (teardown! [this test]) (close! [this test])) (defn workload "Tests linearizable reads and writes" [opts] - {:client (RegClient. nil) + {:client (client/timeout 10 (RegClient. nil)) :checker (independent/checker (checker/compose {:linear (checker/linearizable @@ -53,8 +59,8 @@ :algorithm :linear}) :timeline (timeline/html)})) :generator (independent/concurrent-generator - 10 - (range) + (/ (:concurrency opts) 10) ; divide threads in 10 groups + (range) ; working on 10 keys (fn [k] (->> (gen/mix [op-get op-put op-del]) From 5feb6a1f64aaede10f8172c37645da18a96b419c Mon Sep 17 00:00:00 2001 From: networkException Date: Tue, 3 Oct 2023 17:49:30 +0200 Subject: [PATCH 046/538] docs: add documentation for specifying token / secret file as environment variables --- doc/book/reference-manual/configuration.md | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/doc/book/reference-manual/configuration.md b/doc/book/reference-manual/configuration.md index 3110aab7..2a8c5df5 100644 --- a/doc/book/reference-manual/configuration.md +++ b/doc/book/reference-manual/configuration.md @@ -276,7 +276,7 @@ Compression is done synchronously, setting a value too high will add latency to This value can be different between nodes, compression is done by the node which receive the API call. -### `rpc_secret`, `rpc_secret_file` or `GARAGE_RPC_SECRET` (env) +### `rpc_secret`, `rpc_secret_file` or `GARAGE_RPC_SECRET`, `GARAGE_RPC_SECRET_FILE` (env) Garage uses a secret key, called an RPC secret, that is shared between all nodes of the cluster in order to identify these nodes and allow them to @@ -288,6 +288,9 @@ Since Garage `v0.8.2`, the RPC secret can also be stored in a file whose path is given in the configuration variable `rpc_secret_file`, or specified as an environment variable `GARAGE_RPC_SECRET`. +Since Garage `v0.9.0`, you can also specify the path of a file storing the secret +as the `GARAGE_RPC_SECRET_FILE` environment variable. + ### `rpc_bind_addr` The address and port on which to bind for inter-cluster communcations @@ -465,7 +468,7 @@ See [administration API reference](@/documentation/reference-manual/admin-api.md Alternatively, since `v0.8.5`, a path can be used to create a unix socket. Note that for security reasons, the socket will have 0220 mode. Make sure to set user and group permissions accordingly. -### `metrics_token`, `metrics_token_file` or `GARAGE_METRICS_TOKEN` (env) +### `metrics_token`, `metrics_token_file` or `GARAGE_METRICS_TOKEN`, `GARAGE_METRICS_TOKEN_FILE` (env) The token for accessing the Metrics endpoint. If this token is not set, the Metrics endpoint can be accessed without access control. @@ -475,8 +478,9 @@ You can use any random string for this value. We recommend generating a random t `metrics_token` was introduced in Garage `v0.7.2`. `metrics_token_file` and the `GARAGE_METRICS_TOKEN` environment variable are supported since Garage `v0.8.2`. +`GARAGE_METRICS_TOKEN_FILE` is supported since `v0.9.0`. -### `admin_token`, `admin_token_file` or `GARAGE_ADMIN_TOKEN` (env) +### `admin_token`, `admin_token_file` or `GARAGE_ADMIN_TOKEN`, `GARAGE_ADMIN_TOKEN_FILE` (env) The token for accessing all of the other administration endpoints. If this token is not set, access to these endpoints is disabled entirely. @@ -486,6 +490,7 @@ You can use any random string for this value. We recommend generating a random t `admin_token` was introduced in Garage `v0.7.2`. `admin_token_file` and the `GARAGE_ADMIN_TOKEN` environment variable are supported since Garage `v0.8.2`. +`GARAGE_ADMIN_TOKEN_FILE` is supported since `v0.9.0`. ### `trace_sink` From c99cb58d712fcfdcc9ec03095c0cac25e0c2b934 Mon Sep 17 00:00:00 2001 From: networkException Date: Thu, 19 Oct 2023 03:29:48 +0200 Subject: [PATCH 047/538] util: move reading secret file into seperate helper this patch moves the logic to read a secret file (and check for correct permissions) from `secret_from_file` into a new `read_secret_file` helper. --- src/util/config.rs | 35 +++++++++++++++++++---------------- 1 file changed, 19 insertions(+), 16 deletions(-) diff --git a/src/util/config.rs b/src/util/config.rs index ebcb5fbe..756f7ec5 100644 --- a/src/util/config.rs +++ b/src/util/config.rs @@ -238,6 +238,24 @@ pub fn read_config(config_file: PathBuf) -> Result { Ok(parsed_config) } +pub fn read_secret_file(file_path: &String) -> Result { + #[cfg(unix)] + if std::env::var("GARAGE_ALLOW_WORLD_READABLE_SECRETS").as_deref() != Ok("true") { + use std::os::unix::fs::MetadataExt; + let metadata = std::fs::metadata(file_path)?; + if metadata.mode() & 0o077 != 0 { + return Err(format!("File {} is world-readable! (mode: 0{:o}, expected 0600)\nRefusing to start until this is fixed, or environment variable GARAGE_ALLOW_WORLD_READABLE_SECRETS is set to true.", file_path, metadata.mode()).into()); + } + } + let mut file = std::fs::OpenOptions::new().read(true).open(file_path)?; + let mut secret_buf = String::new(); + file.read_to_string(&mut secret_buf)?; + + // trim_end: allows for use case such as `echo "$(openssl rand -hex 32)" > somefile`. + // also editors sometimes add a trailing newline + Ok(String::from(secret_buf.trim_end())) +} + fn secret_from_file( secret: &mut Option, secret_file: &Option, @@ -250,22 +268,7 @@ fn secret_from_file( (Some(_), Some(_)) => { return Err(format!("only one of `{}` and `{}_file` can be set", name, name).into()); } - (None, Some(file_path)) => { - #[cfg(unix)] - if std::env::var("GARAGE_ALLOW_WORLD_READABLE_SECRETS").as_deref() != Ok("true") { - use std::os::unix::fs::MetadataExt; - let metadata = std::fs::metadata(file_path)?; - if metadata.mode() & 0o077 != 0 { - return Err(format!("File {} is world-readable! (mode: 0{:o}, expected 0600)\nRefusing to start until this is fixed, or environment variable GARAGE_ALLOW_WORLD_READABLE_SECRETS is set to true.", file_path, metadata.mode()).into()); - } - } - let mut file = std::fs::OpenOptions::new().read(true).open(file_path)?; - let mut secret_buf = String::new(); - file.read_to_string(&mut secret_buf)?; - // trim_end: allows for use case such as `echo "$(openssl rand -hex 32)" > somefile`. - // also editors sometimes add a trailing newline - *secret = Some(String::from(secret_buf.trim_end())); - } + (None, Some(file_path)) => *secret = Some(read_secret_file(file_path)?), } Ok(()) } From 4a19ee94bb9c846af1c74db8ba501b4ff625a3f6 Mon Sep 17 00:00:00 2001 From: networkException Date: Thu, 19 Oct 2023 03:31:50 +0200 Subject: [PATCH 048/538] garage: fix admin-token description --- src/garage/main.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/garage/main.rs b/src/garage/main.rs index e8aee892..09e77b35 100644 --- a/src/garage/main.rs +++ b/src/garage/main.rs @@ -70,7 +70,7 @@ pub struct Secrets { #[structopt(short = "s", long = "rpc-secret", env = "GARAGE_RPC_SECRET")] pub rpc_secret: Option, - /// Metrics API authentication token, replaces admin.metrics_token in config.toml when + /// Admin API authentication token, replaces admin.admin_token in config.toml when /// running the Garage daemon #[structopt(long = "admin-token", env = "GARAGE_ADMIN_TOKEN")] pub admin_token: Option, From 8599051c492d7df22305e4c65659395d9102955c Mon Sep 17 00:00:00 2001 From: networkException Date: Thu, 19 Oct 2023 03:39:02 +0200 Subject: [PATCH 049/538] garage: support specifying token / secret as environment variables this patch adds support for specifying the `rpc_secret_file`, `metrics_token_file` and `admin_token_file` as environment variables. --- src/garage/main.rs | 30 +++++++++++++++++++++++++++--- src/garage/repair/offline.rs | 2 +- src/garage/server.rs | 2 +- 3 files changed, 29 insertions(+), 5 deletions(-) diff --git a/src/garage/main.rs b/src/garage/main.rs index 09e77b35..ab84fa11 100644 --- a/src/garage/main.rs +++ b/src/garage/main.rs @@ -25,7 +25,7 @@ use structopt::StructOpt; use netapp::util::parse_and_resolve_peer_addr; use netapp::NetworkKey; -use garage_util::config::Config; +use garage_util::config::{read_secret_file, Config}; use garage_util::error::*; use garage_rpc::system::*; @@ -70,15 +70,30 @@ pub struct Secrets { #[structopt(short = "s", long = "rpc-secret", env = "GARAGE_RPC_SECRET")] pub rpc_secret: Option, + /// RPC secret network key, used to replace rpc_secret in config.toml and rpc-secret + /// when running the daemon or doing admin operations + #[structopt(long = "rpc-secret-file", env = "GARAGE_RPC_SECRET_FILE")] + pub rpc_secret_file: Option, + /// Admin API authentication token, replaces admin.admin_token in config.toml when /// running the Garage daemon #[structopt(long = "admin-token", env = "GARAGE_ADMIN_TOKEN")] pub admin_token: Option, + /// Admin API authentication token file path, replaces admin.admin_token in config.toml + /// and admin-token when running the Garage daemon + #[structopt(long = "admin-token-file", env = "GARAGE_ADMIN_TOKEN_FILE")] + pub admin_token_file: Option, + /// Metrics API authentication token, replaces admin.metrics_token in config.toml when /// running the Garage daemon #[structopt(long = "metrics-token", env = "GARAGE_METRICS_TOKEN")] pub metrics_token: Option, + + /// Metrics API authentication token file path, replaces admin.metrics_token in config.toml + /// and metrics-token when running the Garage daemon + #[structopt(long = "metrics-token-file", env = "GARAGE_METRICS_TOKEN_FILE")] + pub metrics_token_file: Option, } #[tokio::main] @@ -256,15 +271,24 @@ async fn cli_command(opt: Opt) -> Result<(), Error> { } } -fn fill_secrets(mut config: Config, secrets: Secrets) -> Config { +fn fill_secrets(mut config: Config, secrets: Secrets) -> Result { if secrets.rpc_secret.is_some() { config.rpc_secret = secrets.rpc_secret; + } else if secrets.rpc_secret_file.is_some() { + config.rpc_secret = Some(read_secret_file(&secrets.rpc_secret_file.unwrap())?); } + if secrets.admin_token.is_some() { config.admin.admin_token = secrets.admin_token; + } else if secrets.admin_token_file.is_some() { + config.admin.admin_token = Some(read_secret_file(&secrets.admin_token_file.unwrap())?); } + if secrets.metrics_token.is_some() { config.admin.metrics_token = secrets.metrics_token; + } else if secrets.metrics_token_file.is_some() { + config.admin.metrics_token = Some(read_secret_file(&secrets.metrics_token_file.unwrap())?); } - config + + Ok(config) } diff --git a/src/garage/repair/offline.rs b/src/garage/repair/offline.rs index f4edcf03..beb48d65 100644 --- a/src/garage/repair/offline.rs +++ b/src/garage/repair/offline.rs @@ -20,7 +20,7 @@ pub async fn offline_repair( } info!("Loading configuration..."); - let config = fill_secrets(read_config(config_file)?, secrets); + let config = fill_secrets(read_config(config_file)?, secrets)?; info!("Initializing Garage main data store..."); let garage = Garage::new(config)?; diff --git a/src/garage/server.rs b/src/garage/server.rs index 3ad10b72..96ea900d 100644 --- a/src/garage/server.rs +++ b/src/garage/server.rs @@ -29,7 +29,7 @@ async fn wait_from(mut chan: watch::Receiver) { pub async fn run_server(config_file: PathBuf, secrets: Secrets) -> Result<(), Error> { info!("Loading configuration..."); - let config = fill_secrets(read_config(config_file)?, secrets); + let config = fill_secrets(read_config(config_file)?, secrets)?; // ---- Initialize Garage internals ---- From 74e50eddddf319ce1a32a9b57b3825ea40db3a6c Mon Sep 17 00:00:00 2001 From: Alex Auvolat Date: Thu, 19 Oct 2023 14:34:19 +0200 Subject: [PATCH 050/538] jepsen: refactoring --- script/jepsen.garage/README.md | 33 +++++++++++++++++++ script/jepsen.garage/src/jepsen/garage.clj | 8 ++--- .../src/jepsen/garage/daemon.clj | 2 +- .../jepsen.garage/src/jepsen/garage/reg.clj | 27 ++++++++------- .../jepsen.garage/src/jepsen/garage/set.clj | 30 ++++++++++------- 5 files changed, 70 insertions(+), 30 deletions(-) diff --git a/script/jepsen.garage/README.md b/script/jepsen.garage/README.md index 1bba32ec..5cb98e4d 100644 --- a/script/jepsen.garage/README.md +++ b/script/jepsen.garage/README.md @@ -31,6 +31,39 @@ lein run test --nodes-file nodes.vagrant --time-limit 64 --rate 50 --concurrenc lein run test --nodes-file nodes.vagrant --time-limit 64 --rate 50 --concurrency 50 --workload set2 ``` +## Results + +**Register linear, without timestamp patch** + +Command: `lein run test --nodes-file nodes.vagrant --time-limit 60 --rate 20 --concurrency 20 --workload reg --ops-per-key 100` + +Results: fails with a simple clock-scramble nemesis. + +Explanation: without the timestamp patch, nodes will create objects using their +local clock only as a timestamp, so the ordering will be all over the place if +clocks are scrambled. + +**Register linear, with timestamp patch** + +Command: `lein run test --nodes-file nodes.vagrant --time-limit 60 --rate 20 --concurrency 20 --workload reg --ops-per-key 100 -I` + +Results: + +- No failure with clock-scramble nemesis +- Fails with clock-scramble nemesis + partition nemesis + +Explanation: S3 objects are not meant to behave like linearizable registers. TODO explain using a counter-example + +**Read-after-write CRDT register model**: TODO: determine the expected semantics of such a register, code a checker and show that results are correct + +**Set, basic test** + +Command: `lein run test --nodes-file nodes.vagrant --time-limit 60 --rate 20 --concurrency 20 --workload set1 --ops-per-key 100` + +Results: + +- ListObjects returns objects not within prefix???? + ## License Copyright © 2023 Alex Auvolat diff --git a/script/jepsen.garage/src/jepsen/garage.clj b/script/jepsen.garage/src/jepsen/garage.clj index 891fdf12..c8865248 100644 --- a/script/jepsen.garage/src/jepsen/garage.clj +++ b/script/jepsen.garage/src/jepsen/garage.clj @@ -56,12 +56,12 @@ (gen/stagger (/ (:rate opts))) (gen/nemesis (cycle [(gen/sleep 5) - ;{:type :info, :f :partition-start} - ;(gen/sleep 5) + {:type :info, :f :partition-start} + (gen/sleep 5) {:type :info, :f :clock-scramble} (gen/sleep 5) - ;{:type :info, :f :partition-stop} - ;(gen/sleep 5) + {:type :info, :f :partition-stop} + (gen/sleep 5) {:type :info, :f :clock-scramble}])) (gen/time-limit (:time-limit opts))) (gen/log "Healing cluster") diff --git a/script/jepsen.garage/src/jepsen/garage/daemon.clj b/script/jepsen.garage/src/jepsen/garage/daemon.clj index 2dcfa94f..f924dcd6 100644 --- a/script/jepsen.garage/src/jepsen/garage/daemon.clj +++ b/script/jepsen.garage/src/jepsen/garage/daemon.clj @@ -43,7 +43,7 @@ "rpc_bind_addr = \"0.0.0.0:3901\"\n" "rpc_public_addr = \"" node ":3901\"\n" "db_engine = \"lmdb\"\n" - "replication_mode = \"3\"\n" + "replication_mode = \"2\"\n" "data_dir = \"" data-dir "\"\n" "metadata_dir = \"" meta-dir "\"\n" "[s3_api]\n" diff --git a/script/jepsen.garage/src/jepsen/garage/reg.clj b/script/jepsen.garage/src/jepsen/garage/reg.clj index d5404c6b..f3d5cec5 100644 --- a/script/jepsen.garage/src/jepsen/garage/reg.clj +++ b/script/jepsen.garage/src/jepsen/garage/reg.clj @@ -9,6 +9,7 @@ [generator :as gen] [independent :as independent] [nemesis :as nemesis] + [util :as util] [tests :as tests]] [jepsen.checker.timeline :as timeline] [jepsen.control.util :as cu] @@ -25,33 +26,31 @@ (defrecord RegClient [creds] client/Client (open! [this test node] - (let [creds (grg/creds node)] - (info node "s3 credentials:" creds) - (assoc this :creds creds))) + (assoc this :creds (grg/creds node))) (setup! [this test]) (invoke! [this test op] (let [[k v] (:value op)] (case (:f op) :read - (try+ + (util/timeout + 10000 + (assoc op :type :fail, :error ::timeout) (let [value (s3/get (:creds this) k)] - (assoc op :type :ok, :value (independent/tuple k value))) - (catch (re-find #"Unavailable" (.getMessage %)) ex - (assoc op :type :fail, :error [:s3-error (.getMessage ex)]))) + (assoc op :type :ok, :value (independent/tuple k value)))) :write - (try+ + (util/timeout + 10000 + (assoc op :type :info, :error ::timeout) (do (s3/put (:creds this) k v) - (assoc op :type :ok)) - (catch (re-find #"Unavailable" (.getMessage %)) ex - (assoc op :type :fail, :error [:s3-error (.getMessage ex)])))))) + (assoc op :type :ok)))))) (teardown! [this test]) (close! [this test])) (defn workload "Tests linearizable reads and writes" [opts] - {:client (client/timeout 10 (RegClient. nil)) + {:client (RegClient. nil) :checker (independent/checker (checker/compose {:linear (checker/linearizable @@ -59,8 +58,8 @@ :algorithm :linear}) :timeline (timeline/html)})) :generator (independent/concurrent-generator - (/ (:concurrency opts) 10) ; divide threads in 10 groups - (range) ; working on 10 keys + 10 + (range) (fn [k] (->> (gen/mix [op-get op-put op-del]) diff --git a/script/jepsen.garage/src/jepsen/garage/set.clj b/script/jepsen.garage/src/jepsen/garage/set.clj index 6bbc1ee0..ff597095 100644 --- a/script/jepsen.garage/src/jepsen/garage/set.clj +++ b/script/jepsen.garage/src/jepsen/garage/set.clj @@ -11,6 +11,7 @@ [generator :as gen] [independent :as independent] [nemesis :as nemesis] + [util :as util] [tests :as tests]] [jepsen.checker.timeline :as timeline] [jepsen.control.util :as cu] @@ -26,23 +27,29 @@ (defrecord SetClient [creds] client/Client (open! [this test node] - (let [creds (grg/creds node)] - (info node "s3 credentials:" creds) - (assoc this :creds creds))) + (assoc this :creds (grg/creds node))) (setup! [this test]) (invoke! [this test op] (let [[k v] (:value op) prefix (str "set" k "/")] (case (:f op) :add - (do - (s3/put (:creds this) (str prefix v) "present") - (assoc op :type :ok)) + (util/timeout + 10000 + (assoc op :type :info, :error ::timeout) + (do + (s3/put (:creds this) (str prefix v) "present") + (assoc op :type :ok))) :read - (let [items (s3/list (:creds this) prefix) - items-stripped (map (fn [o] (str/replace-first o prefix "")) items) - items-set (set (map read-string items-stripped))] - (assoc op :type :ok, :value (independent/tuple k items-set)))))) + (util/timeout + 10000 + (assoc op :type :fail, :error ::timeout) + (let [items (s3/list (:creds this) prefix) + items-stripped (map (fn [o] + (assert (str/starts-with? o prefix)) + (str/replace-first o prefix "")) items) + items-set (set (map parse-long items-stripped))] + (assoc op :type :ok, :value (independent/tuple k items-set))))))) (teardown! [this test]) (close! [this test])) @@ -110,6 +117,7 @@ 10 (range) (fn [k] - (gen/mix [op-add-rand100 op-read])))}) + (->> (gen/mix [op-add-rand100 op-read]) + (gen/limit (:ops-per-key opts)))))}) From 158dc17a06f8036ed932402a38cf0d5ebbc9f801 Mon Sep 17 00:00:00 2001 From: Alex Auvolat Date: Thu, 19 Oct 2023 15:08:47 +0200 Subject: [PATCH 051/538] listobjects: fix panic if continuation token is an empty string --- src/api/s3/list.rs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/api/s3/list.rs b/src/api/s3/list.rs index 33d62518..ff5f222d 100644 --- a/src/api/s3/list.rs +++ b/src/api/s3/list.rs @@ -530,8 +530,8 @@ impl ListObjectsQuery { // string in the spec, so we can do whatever we want with it. // In our case, it is defined as either [ or ] (for include // representing the key to start with. - (Some(token), _) => match &token[..1] { - "[" => Ok(RangeBegin::IncludingKey { + (Some(token), _) => match &token.get(..1) { + Some("[") => Ok(RangeBegin::IncludingKey { key: String::from_utf8( BASE64_STANDARD .decode(token[1..].as_bytes()) @@ -539,7 +539,7 @@ impl ListObjectsQuery { )?, fallback_key: None, }), - "]" => Ok(RangeBegin::AfterKey { + Some("]") => Ok(RangeBegin::AfterKey { key: String::from_utf8( BASE64_STANDARD .decode(token[1..].as_bytes()) From 58b0ee1b1a5cac34571c660955bcf9a99a3f354d Mon Sep 17 00:00:00 2001 From: Alex Auvolat Date: Thu, 19 Oct 2023 15:26:17 +0200 Subject: [PATCH 052/538] list objects: prettyness and add asserts --- src/api/s3/list.rs | 66 ++++++++++++++++++++++++++-------------------- 1 file changed, 38 insertions(+), 28 deletions(-) diff --git a/src/api/s3/list.rs b/src/api/s3/list.rs index ff5f222d..1b9e8cd5 100644 --- a/src/api/s3/list.rs +++ b/src/api/s3/list.rs @@ -426,8 +426,10 @@ where // Drop the first key if needed // Only AfterKey requires it according to the S3 spec and our implem. match (&cursor, iter.peek()) { - (RangeBegin::AfterKey { key }, Some(object)) if &object.key == key => iter.next(), - (_, _) => None, + (RangeBegin::AfterKey { key }, Some(object)) if &object.key == key => { + iter.next(); + } + _ => (), }; while let Some(object) = iter.peek() { @@ -436,16 +438,22 @@ where return Ok(None); } - cursor = match acc.extract(query, &cursor, &mut iter) { - ExtractionResult::Extracted { key } => RangeBegin::AfterKey { key }, + match acc.extract(query, &cursor, &mut iter) { + ExtractionResult::Extracted { key } => { + cursor = RangeBegin::AfterKey { key }; + } ExtractionResult::SkipTo { key, fallback_key } => { - RangeBegin::IncludingKey { key, fallback_key } + cursor = RangeBegin::IncludingKey { key, fallback_key }; } ExtractionResult::FilledAtUpload { key, upload } => { - return Ok(Some(RangeBegin::AfterUpload { key, upload })) + return Ok(Some(RangeBegin::AfterUpload { key, upload })); + } + ExtractionResult::Filled => { + return Ok(Some(cursor)); + } + ExtractionResult::NoMore => { + return Ok(None); } - ExtractionResult::Filled => return Ok(Some(cursor)), - ExtractionResult::NoMore => return Ok(None), }; } @@ -519,8 +527,8 @@ fn fetch_part_info<'a>( /// This key can be the prefix in the base case, or intermediate /// points in the dataset if we are continuing a previous listing. impl ListObjectsQuery { - fn build_accumulator(&self) -> Accumulator { - Accumulator::::new(self.common.page_size) + fn build_accumulator(&self) -> ObjectAccumulator { + ObjectAccumulator::new(self.common.page_size) } fn begin(&self) -> Result { @@ -529,6 +537,7 @@ impl ListObjectsQuery { // In V2 mode, the continuation token is defined as an opaque // string in the spec, so we can do whatever we want with it. // In our case, it is defined as either [ or ] (for include + // or exclude), followed by a base64-encoded string // representing the key to start with. (Some(token), _) => match &token.get(..1) { Some("[") => Ok(RangeBegin::IncludingKey { @@ -580,8 +589,8 @@ impl ListObjectsQuery { } impl ListMultipartUploadsQuery { - fn build_accumulator(&self) -> Accumulator { - Accumulator::::new(self.common.page_size) + fn build_accumulator(&self) -> UploadAccumulator { + UploadAccumulator::new(self.common.page_size) } fn begin(&self) -> Result { @@ -665,6 +674,7 @@ impl Accumulator { Some(p) => p, None => return None, }; + assert!(pfx.starts_with(&query.prefix)); // Try to register this prefix // If not possible, we can return early @@ -675,8 +685,11 @@ impl Accumulator { // We consume the whole common prefix from the iterator let mut last_pfx_key = &object.key; loop { - last_pfx_key = match objects.peek() { - Some(o) if o.key.starts_with(pfx) => &o.key, + match objects.peek() { + Some(o) if o.key.starts_with(pfx) => { + last_pfx_key = &o.key; + objects.next(); + } Some(_) => { return Some(ExtractionResult::Extracted { key: last_pfx_key.to_owned(), @@ -692,8 +705,6 @@ impl Accumulator { } } }; - - objects.next(); } } @@ -708,12 +719,11 @@ impl Accumulator { } // Otherwise, we need to check if we can add it - match self.is_full() { - true => false, - false => { - self.common_prefixes.insert(key); - true - } + if self.is_full() { + false + } else { + self.common_prefixes.insert(key); + true } } @@ -721,12 +731,11 @@ impl Accumulator { // It is impossible to add twice a key, this is an error assert!(!self.keys.contains_key(&key)); - match self.is_full() { - true => false, - false => { - self.keys.insert(key, value); - true - } + if self.is_full() { + false + } else { + self.keys.insert(key, value); + true } } } @@ -743,6 +752,7 @@ impl ExtractAccumulator for ObjectAccumulator { } let object = objects.next().expect("This iterator can not be empty as it is checked earlier in the code. This is a logic bug, please report it."); + assert!(object.key.starts_with(&query.prefix)); let version = match object.versions().iter().find(|x| x.is_data()) { Some(v) => v, From da8b1707489b70c25395ee49383ecbbd8c9f9404 Mon Sep 17 00:00:00 2001 From: Alex Auvolat Date: Thu, 19 Oct 2023 16:45:24 +0200 Subject: [PATCH 053/538] jepsen: investigating listobjects error --- script/jepsen.garage/README.md | 11 ++++++++++- script/jepsen.garage/jaeger.sh | 13 +++++++++++++ .../jepsen.garage/src/jepsen/garage/daemon.clj | 7 +++++-- .../jepsen.garage/src/jepsen/garage/s3api.clj | 1 + script/jepsen.garage/src/jepsen/garage/set.clj | 17 ++++++++++------- 5 files changed, 39 insertions(+), 10 deletions(-) create mode 100644 script/jepsen.garage/jaeger.sh diff --git a/script/jepsen.garage/README.md b/script/jepsen.garage/README.md index 5cb98e4d..f6fb3a59 100644 --- a/script/jepsen.garage/README.md +++ b/script/jepsen.garage/README.md @@ -62,7 +62,16 @@ Command: `lein run test --nodes-file nodes.vagrant --time-limit 60 --rate 20 -- Results: -- ListObjects returns objects not within prefix???? +- ListObjects returns objects not within prefix???? -> BAD, definitely a bug, but maybe it's in the instrumentation code? + +In `store/garage set1/20231019T163358.615+0200`: + +``` +INFO [2023-10-19 16:35:20,977] clojure-agent-send-off-pool-207 - jepsen.garage.set list results for prefix set20/ : (set13/0 set13/1 set13/10 set13/11 set13/12 set13/13 set13/14 set13/15 set13/16 set13/17 set13/18 set13/19 set13/2 set13/20 set13/21 set13/22 set13/23 set13/24 set13/25 set13/26 set13/27 set13/28 set13/29 set13/3 set13/30 set13/31 set13/32 set13/33 set13/34 set13/35 set13/36 set13/37 set13/38 set13/39 set13/4 set13/40 set13/41 set13/42 set13/43 set13/44 set13/45 set13/46 set13/47 set13/48 set13/49 set13/5 set13/50 set13/51 set13/52 set13/53 set13/54 set13/55 set13/56 set13/57 set13/58 set13/59 set13/6 set13/60 set13/61 set13/62 set13/63 set13/64 set13/65 set13/66 set13/67 set13/68 set13/69 set13/7 set13/70 set13/71 set13/72 set13/73 set13/74 set13/75 set13/76 set13/77 set13/78 set13/79 set13/8 set13/80 set13/81 set13/82 set13/83 set13/84 set13/85 set13/86 set13/87 set13/88 set13/89 set13/9 set13/90 set13/91 set13/92 set13/93 set13/94 set13/95 set13/96 set13/97 set13/98 set13/99) (node: http://192.168.56.25:3900 ) + +``` + +- Sometimes ListObjects returns an empty list???? -> BAD, quorums should ensure this doesn't happen ## License diff --git a/script/jepsen.garage/jaeger.sh b/script/jepsen.garage/jaeger.sh new file mode 100644 index 00000000..7f67b61b --- /dev/null +++ b/script/jepsen.garage/jaeger.sh @@ -0,0 +1,13 @@ +docker stop jaeger +docker rm jaeger + +# UI is on localhost:16686 +# otel-grpc collector is on localhost:4317 +# otel-http collector is on localhost:4318 + +docker run -d --name jaeger \ + -e COLLECTOR_OTLP_ENABLED=true \ + -p 4317:4317 \ + -p 4318:4318 \ + -p 16686:16686 \ + jaegertracing/all-in-one:1.50 diff --git a/script/jepsen.garage/src/jepsen/garage/daemon.clj b/script/jepsen.garage/src/jepsen/garage/daemon.clj index f924dcd6..7c581ba1 100644 --- a/script/jepsen.garage/src/jepsen/garage/daemon.clj +++ b/script/jepsen.garage/src/jepsen/garage/daemon.clj @@ -53,7 +53,8 @@ "api_bind_addr = \"0.0.0.0:3902\"\n" "[admin]\n" "api_bind_addr = \"0.0.0.0:3903\"\n" - "admin_token = \"" admin-token "\"\n") + "admin_token = \"" admin-token "\"\n" + "trace_sink = \"http://192.168.56.1:4317\"\n") "/etc/garage.toml")))) (defn connect-node! @@ -94,7 +95,8 @@ (cu/start-daemon! {:logfile logfile :pidfile pidfile - :chdir base-dir} + :chdir base-dir + :env {:RUST_LOG "garage=debug,garage_api=trace"}} binary :server) (c/exec :sleep 3) @@ -113,6 +115,7 @@ (info node "tearing down garage" version) (c/su (cu/stop-daemon! binary pidfile) + (c/exec :rm :-rf logfile) (c/exec :rm :-rf data-dir) (c/exec :rm :-rf meta-dir))) diff --git a/script/jepsen.garage/src/jepsen/garage/s3api.clj b/script/jepsen.garage/src/jepsen/garage/s3api.clj index 239d5423..977de7dc 100644 --- a/script/jepsen.garage/src/jepsen/garage/s3api.clj +++ b/script/jepsen.garage/src/jepsen/garage/s3api.clj @@ -42,6 +42,7 @@ new-object-summaries (:object-summaries list-result) new-objects (map (fn [d] (:key d)) new-object-summaries) objects (concat new-objects accum)] + (info (:endpoint creds) "ListObjectsV2 prefix(" prefix "), ct(" ct "): " new-objects) (if (:truncated? list-result) (list-inner (:next-continuation-token list-result) objects) objects))) diff --git a/script/jepsen.garage/src/jepsen/garage/set.clj b/script/jepsen.garage/src/jepsen/garage/set.clj index ff597095..8a1ab83f 100644 --- a/script/jepsen.garage/src/jepsen/garage/set.clj +++ b/script/jepsen.garage/src/jepsen/garage/set.clj @@ -44,12 +44,13 @@ (util/timeout 10000 (assoc op :type :fail, :error ::timeout) - (let [items (s3/list (:creds this) prefix) - items-stripped (map (fn [o] + (let [items (s3/list (:creds this) prefix)] + (info "list results for prefix" prefix ":" items " (node:" (:endpoint (:creds this)) ")") + (let [items-stripped (map (fn [o] (assert (str/starts-with? o prefix)) (str/replace-first o prefix "")) items) - items-set (set (map parse-long items-stripped))] - (assoc op :type :ok, :value (independent/tuple k items-set))))))) + items-set (set (map parse-long items-stripped))] + (assoc op :type :ok, :value (independent/tuple k items-set)))))))) (teardown! [this test]) (close! [this test])) @@ -100,9 +101,11 @@ (->> (range) (map (fn [x] {:type :invoke, :f :add, :value x})) (gen/limit (:ops-per-key opts))))) - :final-generator (independent/sequential-generator - (range 100) - (fn [k] (gen/once op-read)))}) + :final-generator (gen/phases + (independent/sequential-generator + (range 100) + (fn [k] (gen/once op-read))) + (gen/sleep 5))}) (defn workload2 "Tests insertions and deletions" From ef662822c9e48ff7cfd9300590617e089c0a9498 Mon Sep 17 00:00:00 2001 From: Alex Auvolat Date: Thu, 19 Oct 2023 23:40:55 +0200 Subject: [PATCH 054/538] jepsen: fix the list-objects call (?) --- script/jepsen.garage/README.md | 37 +++++++++++++++---- .../jepsen.garage/src/jepsen/garage/s3api.clj | 27 +++++++------- .../jepsen.garage/src/jepsen/garage/set.clj | 16 ++++---- 3 files changed, 52 insertions(+), 28 deletions(-) diff --git a/script/jepsen.garage/README.md b/script/jepsen.garage/README.md index f6fb3a59..8dcd3766 100644 --- a/script/jepsen.garage/README.md +++ b/script/jepsen.garage/README.md @@ -33,7 +33,7 @@ lein run test --nodes-file nodes.vagrant --time-limit 64 --rate 50 --concurrenc ## Results -**Register linear, without timestamp patch** +### Register linear, without timestamp patch Command: `lein run test --nodes-file nodes.vagrant --time-limit 60 --rate 20 --concurrency 20 --workload reg --ops-per-key 100` @@ -43,7 +43,7 @@ Explanation: without the timestamp patch, nodes will create objects using their local clock only as a timestamp, so the ordering will be all over the place if clocks are scrambled. -**Register linear, with timestamp patch** +### Register linear, with timestamp patch Command: `lein run test --nodes-file nodes.vagrant --time-limit 60 --rate 20 --concurrency 20 --workload reg --ops-per-key 100 -I` @@ -54,24 +54,45 @@ Results: Explanation: S3 objects are not meant to behave like linearizable registers. TODO explain using a counter-example -**Read-after-write CRDT register model**: TODO: determine the expected semantics of such a register, code a checker and show that results are correct +### Read-after-write CRDT register model -**Set, basic test** +TODO: determine the expected semantics of such a register, code a checker and show that results are correct -Command: `lein run test --nodes-file nodes.vagrant --time-limit 60 --rate 20 --concurrency 20 --workload set1 --ops-per-key 100` +### Set, basic test (write some items, then read) + +Command: `lein run test --nodes-file nodes.vagrant --time-limit 60 --rate 100 --concurrency 100 --workload set1 --ops-per-key 100` Results: -- ListObjects returns objects not within prefix???? -> BAD, definitely a bug, but maybe it's in the instrumentation code? +- For now, no failures with clock-scramble nemesis + partition nemesis + +### Set, continuous test (interspersed reads and writes) + +TODO + +TODO: nemesis that reconfigures the cluster with a different subset of nodes, to have requests that occur during a resync period. + + +## Investigating (and fixing) wierd behavior + +### Segfaults + +They are due to the download being interrupted in the middle (^C during first launch on clean VMs), the `garage` binary is truncated. +Add `:force?` to the `cached-wget!` call in `daemon.clj` to re-download the binary. + +### In `jepsen.garage`: prefix wierdness In `store/garage set1/20231019T163358.615+0200`: ``` INFO [2023-10-19 16:35:20,977] clojure-agent-send-off-pool-207 - jepsen.garage.set list results for prefix set20/ : (set13/0 set13/1 set13/10 set13/11 set13/12 set13/13 set13/14 set13/15 set13/16 set13/17 set13/18 set13/19 set13/2 set13/20 set13/21 set13/22 set13/23 set13/24 set13/25 set13/26 set13/27 set13/28 set13/29 set13/3 set13/30 set13/31 set13/32 set13/33 set13/34 set13/35 set13/36 set13/37 set13/38 set13/39 set13/4 set13/40 set13/41 set13/42 set13/43 set13/44 set13/45 set13/46 set13/47 set13/48 set13/49 set13/5 set13/50 set13/51 set13/52 set13/53 set13/54 set13/55 set13/56 set13/57 set13/58 set13/59 set13/6 set13/60 set13/61 set13/62 set13/63 set13/64 set13/65 set13/66 set13/67 set13/68 set13/69 set13/7 set13/70 set13/71 set13/72 set13/73 set13/74 set13/75 set13/76 set13/77 set13/78 set13/79 set13/8 set13/80 set13/81 set13/82 set13/83 set13/84 set13/85 set13/86 set13/87 set13/88 set13/89 set13/9 set13/90 set13/91 set13/92 set13/93 set13/94 set13/95 set13/96 set13/97 set13/98 set13/99) (node: http://192.168.56.25:3900 ) - ``` -- Sometimes ListObjects returns an empty list???? -> BAD, quorums should ensure this doesn't happen +After inspecting, the actual S3 call made was with prefix "set13/", so at least this is not an error in Garage itself but in the jepsen code. + +Finally found out that this was due to closures not correctly capturing their context in the list function in s3api.clj (wtf clojure?) +Not sure exactly where it came from but it seems to have been fixed by making list-inner a separate function and not a sub-function, +and passing all values that were previously in the context (creds and prefix) as additional arguments. ## License diff --git a/script/jepsen.garage/src/jepsen/garage/s3api.clj b/script/jepsen.garage/src/jepsen/garage/s3api.clj index 977de7dc..4f292ac0 100644 --- a/script/jepsen.garage/src/jepsen/garage/s3api.clj +++ b/script/jepsen.garage/src/jepsen/garage/s3api.clj @@ -31,19 +31,20 @@ :input-stream bytes-stream :metadata {:content-length (count some-bytes)})))) +(defn list-inner [creds prefix ct accum] + (let [list-result (s3/list-objects-v2 creds + {:bucket-name (:bucket creds) + :prefix prefix + :continuation-token ct}) + new-object-summaries (:object-summaries list-result) + new-objects (map (fn [d] (:key d)) new-object-summaries) + objects (concat new-objects accum)] + (info (:endpoint creds) "ListObjectsV2 prefix(" prefix "), ct(" ct "): " new-objects) + (if (:truncated? list-result) + (list-inner creds prefix (:next-continuation-token list-result) objects) + objects))) (defn list "Helper for ListObjects -- just lists everything in the bucket" [creds prefix] - (defn list-inner [ct accum] - (let [list-result (s3/list-objects-v2 creds - {:bucket-name (:bucket creds) - :prefix prefix - :continuation-token ct}) - new-object-summaries (:object-summaries list-result) - new-objects (map (fn [d] (:key d)) new-object-summaries) - objects (concat new-objects accum)] - (info (:endpoint creds) "ListObjectsV2 prefix(" prefix "), ct(" ct "): " new-objects) - (if (:truncated? list-result) - (list-inner (:next-continuation-token list-result) objects) - objects))) - (list-inner nil [])) + (info "in s3/list creds:" creds ", prefix:" prefix) + (list-inner creds prefix nil [])) diff --git a/script/jepsen.garage/src/jepsen/garage/set.clj b/script/jepsen.garage/src/jepsen/garage/set.clj index 8a1ab83f..c5387462 100644 --- a/script/jepsen.garage/src/jepsen/garage/set.clj +++ b/script/jepsen.garage/src/jepsen/garage/set.clj @@ -44,13 +44,15 @@ (util/timeout 10000 (assoc op :type :fail, :error ::timeout) - (let [items (s3/list (:creds this) prefix)] - (info "list results for prefix" prefix ":" items " (node:" (:endpoint (:creds this)) ")") - (let [items-stripped (map (fn [o] - (assert (str/starts-with? o prefix)) - (str/replace-first o prefix "")) items) - items-set (set (map parse-long items-stripped))] - (assoc op :type :ok, :value (independent/tuple k items-set)))))))) + (do + (info "call s3/list creds: " (:creds this) ", prefix:" prefix) + (let [items (s3/list (:creds this) prefix)] + (info "list results for prefix" prefix ":" items " (node:" (:endpoint (:creds this)) ")") + (let [items-stripped (map (fn [o] + (assert (str/starts-with? o prefix)) + (str/replace-first o prefix "")) items) + items-set (set (map parse-long items-stripped))] + (assoc op :type :ok, :value (independent/tuple k items-set))))))))) (teardown! [this test]) (close! [this test])) From ac04934daefe48ac4f41d22b9129d1fe2ce44833 Mon Sep 17 00:00:00 2001 From: Alex Auvolat Date: Fri, 20 Oct 2023 10:29:03 +0200 Subject: [PATCH 055/538] s3 api: add missing CORS headers to PostObject responses (fix #609) --- src/api/s3/post_object.rs | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/src/api/s3/post_object.rs b/src/api/s3/post_object.rs index 542b7a81..f9eccb7f 100644 --- a/src/api/s3/post_object.rs +++ b/src/api/s3/post_object.rs @@ -15,6 +15,7 @@ use serde::Deserialize; use garage_model::garage::Garage; +use crate::s3::cors::*; use crate::s3::error::*; use crate::s3::put::{get_headers, save_stream}; use crate::s3::xml as s3_xml; @@ -242,7 +243,7 @@ pub async fn handle_post_object( let etag = format!("\"{}\"", md5); - let resp = if let Some(mut target) = params + let mut resp = if let Some(mut target) = params .get("success_action_redirect") .and_then(|h| h.to_str().ok()) .and_then(|u| url::Url::parse(u).ok()) @@ -262,8 +263,7 @@ pub async fn handle_post_object( } else { let path = head .uri - .into_parts() - .path_and_query + .path_and_query() .map(|paq| paq.path().to_string()) .unwrap_or_else(|| "/".to_string()); let authority = head @@ -308,6 +308,13 @@ pub async fn handle_post_object( } }; + let matching_cors_rule = + find_matching_cors_rule(&bucket, &Request::from_parts(head, Body::empty()))?; + if let Some(rule) = matching_cors_rule { + add_cors_headers(&mut resp, rule) + .ok_or_internal_error("Invalid bucket CORS configuration")?; + } + Ok(resp) } From 4ba18ce9cca1b828edcf3f8c8770d49c75ed3083 Mon Sep 17 00:00:00 2001 From: Alex Auvolat Date: Fri, 20 Oct 2023 12:13:11 +0200 Subject: [PATCH 056/538] jepsen: wip checker for register-like behavior --- .../jepsen.garage/src/jepsen/garage/reg.clj | 66 +++++++++++++++++-- 1 file changed, 62 insertions(+), 4 deletions(-) diff --git a/script/jepsen.garage/src/jepsen/garage/reg.clj b/script/jepsen.garage/src/jepsen/garage/reg.clj index f3d5cec5..b5bf28ff 100644 --- a/script/jepsen.garage/src/jepsen/garage/reg.clj +++ b/script/jepsen.garage/src/jepsen/garage/reg.clj @@ -1,6 +1,7 @@ (ns jepsen.garage.reg (:require [clojure.tools.logging :refer :all] [clojure.string :as str] + [clojure.set :as set] [jepsen [checker :as checker] [cli :as cli] [client :as client] @@ -20,7 +21,7 @@ [slingshot.slingshot :refer [try+]])) (defn op-get [_ _] {:type :invoke, :f :read, :value nil}) -(defn op-put [_ _] {:type :invoke, :f :write, :value (str (rand-int 9))}) +(defn op-put [_ _] {:type :invoke, :f :write, :value (str (rand-int 99))}) (defn op-del [_ _] {:type :invoke, :f :write, :value nil}) (defrecord RegClient [creds] @@ -47,15 +48,72 @@ (teardown! [this test]) (close! [this test])) +(defn reg-read-after-write + "Read-after-Write checker for register operations" + [] + (reify checker/Checker + (check [this test history opts] + (let [init {:put-values {-1 nil} + :put-done #{-1} + :put-in-progress {} + :read-can-contain {} + :bad-reads #{}} + final (reduce + (fn [state op] + (let [current-values (set/union + (set (map (fn [idx] (get (:put-values state) idx)) (:put-done state))) + (set (map (fn [[_ [idx _]]] (get (:put-values state) idx)) (:put-in-progress state)))) + read-can-contain (reduce + (fn [rcc [idx v]] (assoc rcc idx (set/union current-values v))) + {} (:read-can-contain state))] + (info "--------") + (info "state: " state) + (info "current-values: " current-values) + (info "read-can-contain: " read-can-contain) + (info "op: " op) + (case [(:type op) (:f op)] + ([:invoke :write]) + (assoc state + :read-can-contain read-can-contain + :put-values (assoc (:put-values state) (:index op) (:value op)) + :put-in-progress (assoc (:put-in-progress state) (:process op) [(:index op) (:put-done state)])) + ([:ok :write]) + (let [[index overwrites] (get (:put-in-progress state) (:process op))] + (assoc state + :read-can-contain read-can-contain + :put-in-progress (dissoc (:put-in-progress state) (:process op)) + :put-done + (conj + (set/difference (:put-done state) overwrites) + index))) + ([:invoke :read]) + (assoc state + :read-can-contain (assoc read-can-contain (:process op) current-values)) + ([:ok :read]) + (let [this-read-can-contain (get read-can-contain (:process op)) + bad-reads (if (contains? this-read-can-contain (:value op)) + (:bad-reads state) + (conj (:bad-reads state) [(:process op) (:index op) (:value op) this-read-can-contain]))] + (info "this-read-can-contain: " this-read-can-contain) + (assoc state + :read-can-contain (dissoc read-can-contain (:process op)) + :bad-reads bad-reads)) + state))) + init history) + valid? (empty? (:bad-reads final))] + (assoc final :valid? valid?))))) + (defn workload "Tests linearizable reads and writes" [opts] {:client (RegClient. nil) :checker (independent/checker (checker/compose - {:linear (checker/linearizable - {:model (model/register) - :algorithm :linear}) + {:reg-read-after-write (reg-read-after-write) + ; linear test is desactivated, indeed Garage is not linear + ;:linear (checker/linearizable + ; {:model (model/register) + ; :algorithm :linear}) :timeline (timeline/html)})) :generator (independent/concurrent-generator 10 From 4b93ce179a3777c8461f3b5843dc3802bddc739c Mon Sep 17 00:00:00 2001 From: Alex Auvolat Date: Fri, 20 Oct 2023 12:56:45 +0200 Subject: [PATCH 057/538] jepsen: errors in reg2 workload under investigation --- script/jepsen.garage/README.md | 25 ++++++++++++---- script/jepsen.garage/src/jepsen/garage.clj | 3 +- .../jepsen.garage/src/jepsen/garage/reg.clj | 30 ++++++++++++------- 3 files changed, 41 insertions(+), 17 deletions(-) diff --git a/script/jepsen.garage/README.md b/script/jepsen.garage/README.md index 8dcd3766..762901fe 100644 --- a/script/jepsen.garage/README.md +++ b/script/jepsen.garage/README.md @@ -35,7 +35,7 @@ lein run test --nodes-file nodes.vagrant --time-limit 64 --rate 50 --concurrenc ### Register linear, without timestamp patch -Command: `lein run test --nodes-file nodes.vagrant --time-limit 60 --rate 20 --concurrency 20 --workload reg --ops-per-key 100` +Command: `lein run test --nodes-file nodes.vagrant --time-limit 60 --rate 20 --concurrency 20 --workload reg1 --ops-per-key 100` Results: fails with a simple clock-scramble nemesis. @@ -45,7 +45,7 @@ clocks are scrambled. ### Register linear, with timestamp patch -Command: `lein run test --nodes-file nodes.vagrant --time-limit 60 --rate 20 --concurrency 20 --workload reg --ops-per-key 100 -I` +Command: `lein run test --nodes-file nodes.vagrant --time-limit 60 --rate 20 --concurrency 20 --workload reg1 --ops-per-key 100 -I` Results: @@ -54,9 +54,23 @@ Results: Explanation: S3 objects are not meant to behave like linearizable registers. TODO explain using a counter-example -### Read-after-write CRDT register model +### Read-after-write CRDT register model, without timestamp patch + +Command: `lein run test --nodes-file nodes.vagrant --time-limit 60 --rate 100 --concurrency 100 --workload reg2 --ops-per-key 100` + +Results: fails with a simple clock-scramble nemesis. + +Explanation: old values are not overwritten correctly when their timestamps are in the future. + +### Read-after-write CRDT register model, with timestamp patch + +Command: `lein run test --nodes-file nodes.vagrant --time-limit 60 --rate 100 --concurrency 100 --workload reg2 --ops-per-key 100 -I` + +Results: + +- Failures with clock-scramble nemesis + partition nemesis ???? TODO INVESTIGATE +- TODO: layout reconfiguration nemesis -TODO: determine the expected semantics of such a register, code a checker and show that results are correct ### Set, basic test (write some items, then read) @@ -65,13 +79,12 @@ Command: `lein run test --nodes-file nodes.vagrant --time-limit 60 --rate 100 - Results: - For now, no failures with clock-scramble nemesis + partition nemesis +- TODO: layout reconfiguration nemesis ### Set, continuous test (interspersed reads and writes) TODO -TODO: nemesis that reconfigures the cluster with a different subset of nodes, to have requests that occur during a resync period. - ## Investigating (and fixing) wierd behavior diff --git a/script/jepsen.garage/src/jepsen/garage.clj b/script/jepsen.garage/src/jepsen/garage.clj index c8865248..be192a7f 100644 --- a/script/jepsen.garage/src/jepsen/garage.clj +++ b/script/jepsen.garage/src/jepsen/garage.clj @@ -15,7 +15,8 @@ (def workloads "A map of workload names to functions that construct workloads, given opts." - {"reg" reg/workload + {"reg1" reg/workload1 + "reg2" reg/workload2 "set1" set/workload1 "set2" set/workload2}) diff --git a/script/jepsen.garage/src/jepsen/garage/reg.clj b/script/jepsen.garage/src/jepsen/garage/reg.clj index b5bf28ff..6772abfe 100644 --- a/script/jepsen.garage/src/jepsen/garage/reg.clj +++ b/script/jepsen.garage/src/jepsen/garage/reg.clj @@ -103,18 +103,10 @@ valid? (empty? (:bad-reads final))] (assoc final :valid? valid?))))) -(defn workload - "Tests linearizable reads and writes" +(defn workload-common + "Common parts of workload" [opts] {:client (RegClient. nil) - :checker (independent/checker - (checker/compose - {:reg-read-after-write (reg-read-after-write) - ; linear test is desactivated, indeed Garage is not linear - ;:linear (checker/linearizable - ; {:model (model/register) - ; :algorithm :linear}) - :timeline (timeline/html)})) :generator (independent/concurrent-generator 10 (range) @@ -123,4 +115,22 @@ (gen/mix [op-get op-put op-del]) (gen/limit (:ops-per-key opts)))))}) +(defn workload1 + "Tests linearizable reads and writes" + [opts] + (assoc (workload-common opts) + :checker (independent/checker + (checker/compose + {:linear (checker/linearizable + {:model (model/register) + :algorithm :linear}) + :timeline (timeline/html)})))) +(defn workload2 + "Tests CRDT reads and writes" + [opts] + (assoc (workload-common opts) + :checker (independent/checker + (checker/compose + {:reg-read-after-write (reg-read-after-write) + :timeline (timeline/html)})))) From c6cde1f1437a6cab90b22df6fe0641e5ad34c287 Mon Sep 17 00:00:00 2001 From: Alex Auvolat Date: Fri, 20 Oct 2023 13:20:47 +0200 Subject: [PATCH 058/538] remove now-unused key parameter in check_quotas --- src/api/s3/multipart.rs | 2 +- src/api/s3/put.rs | 5 ++--- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/src/api/s3/multipart.rs b/src/api/s3/multipart.rs index 978ad9cf..672ab198 100644 --- a/src/api/s3/multipart.rs +++ b/src/api/s3/multipart.rs @@ -332,7 +332,7 @@ pub async fn handle_complete_multipart_upload( // Calculate total size of final object let total_size = parts.iter().map(|x| x.size.unwrap()).sum(); - if let Err(e) = check_quotas(&garage, bucket, &key, total_size, Some(&object)).await { + if let Err(e) = check_quotas(&garage, bucket, total_size, Some(&object)).await { object_version.state = ObjectVersionState::Aborted; let final_object = Object::new(bucket.id, key.clone(), vec![object_version]); garage.object_table.insert(&final_object).await?; diff --git a/src/api/s3/put.rs b/src/api/s3/put.rs index a3fe9cca..62a1f76a 100644 --- a/src/api/s3/put.rs +++ b/src/api/s3/put.rs @@ -110,7 +110,7 @@ pub(crate) async fn save_stream> + Unpin>( content_sha256, )?; - check_quotas(&garage, bucket, key, size, existing_object.as_ref()).await?; + check_quotas(&garage, bucket, size, existing_object.as_ref()).await?; let object_version = ObjectVersion { uuid: version_uuid, @@ -189,7 +189,7 @@ pub(crate) async fn save_stream> + Unpin>( content_sha256, )?; - check_quotas(&garage, bucket, key, total_size, existing_object.as_ref()).await?; + check_quotas(&garage, bucket, total_size, existing_object.as_ref()).await?; // Save final object state, marked as Complete let md5sum_hex = hex::encode(data_md5sum); @@ -242,7 +242,6 @@ pub(crate) fn ensure_checksum_matches( pub(crate) async fn check_quotas( garage: &Arc, bucket: &Bucket, - key: &str, size: u64, prev_object: Option<&Object>, ) -> Result<(), Error> { From d148b83d4f440dc79b2ed08eaa171aca0e2037b0 Mon Sep 17 00:00:00 2001 From: Alex Auvolat Date: Fri, 20 Oct 2023 13:36:48 +0200 Subject: [PATCH 059/538] jepsen: reg2 failure seems to happen only with deleteobject --- script/jepsen.garage/README.md | 20 ++++++++++++++++++- script/jepsen.garage/src/jepsen/garage.clj | 14 ++++++++----- .../jepsen.garage/src/jepsen/garage/reg.clj | 3 ++- 3 files changed, 30 insertions(+), 7 deletions(-) diff --git a/script/jepsen.garage/README.md b/script/jepsen.garage/README.md index 762901fe..da6f0b77 100644 --- a/script/jepsen.garage/README.md +++ b/script/jepsen.garage/README.md @@ -69,6 +69,8 @@ Command: `lein run test --nodes-file nodes.vagrant --time-limit 60 --rate 100 - Results: - Failures with clock-scramble nemesis + partition nemesis ???? TODO INVESTIGATE + -> the issue seems to be only after DeleteObject (deletions are not always taken into account), + the issue does not appear if we are using only PutObject with an actual object content - TODO: layout reconfiguration nemesis @@ -86,7 +88,7 @@ Results: TODO -## Investigating (and fixing) wierd behavior +## Investigating (and fixing) errors ### Segfaults @@ -107,6 +109,22 @@ Finally found out that this was due to closures not correctly capturing their co Not sure exactly where it came from but it seems to have been fixed by making list-inner a separate function and not a sub-function, and passing all values that were previously in the context (creds and prefix) as additional arguments. +### `reg2` test inconsistency, even with timestamp fix + +The reg2 test is our custom checker for CRDT read-after-write on individual object keys, acting as registers which can be updated. +The test fails without the timestamp fix, which is expected as the clock scrambler will prevent nodes from having a correct ordering of objects. + +With the timestamp fix, the happenned-before relationship should at least be respected, meaning that when a PutObject call starts +after another PutObject call has ended, the second call should overwrite the value of the first call, and that value should not be +readable by future GetObject calls. +However, we observed inconsistencies even with the timestamp fix. + +The inconsistencies seemed to always happenned after writing a nil value, which translates to a DeleteObject call +instead of a PutObject. By removing the possibility of writing nil values, therefore only doing +PutObject calls, the issue disappears. There is therefore an issue to fix in DeleteObject. + + + ## License Copyright © 2023 Alex Auvolat diff --git a/script/jepsen.garage/src/jepsen/garage.clj b/script/jepsen.garage/src/jepsen/garage.clj index be192a7f..ce02b7f7 100644 --- a/script/jepsen.garage/src/jepsen/garage.clj +++ b/script/jepsen.garage/src/jepsen/garage.clj @@ -20,10 +20,16 @@ "set1" set/workload1 "set2" set/workload2}) +(def patches + "A map of patch names to Garage builds" + {"default" "v0.9.0" + "tsfix1" "d146cdd5b66ca1d3ed65ce93ca42c6db22defc09"}) + (def cli-opts "Additional command line options." - [["-I" "--increasing-timestamps" "Garage version with increasing timestamps on PutObject" - :default false] + [["-p" "--patch NAME" "Garage patch to use" + :default "default" + :validate [patches (cli/one-of patches)]] ["-r" "--rate HZ" "Approximate number of requests per second, per thread." :default 10 :parse-fn read-string @@ -41,9 +47,7 @@ :concurrency, ...), constructs a test map." [opts] (let [workload ((get workloads (:workload opts)) opts) - garage-version (if (:increasing-timestamps opts) - "d146cdd5b66ca1d3ed65ce93ca42c6db22defc09" - "v0.9.0")] + garage-version (get patches (:patch opts))] (merge tests/noop-test opts {:pure-generators true diff --git a/script/jepsen.garage/src/jepsen/garage/reg.clj b/script/jepsen.garage/src/jepsen/garage/reg.clj index 6772abfe..ecc96590 100644 --- a/script/jepsen.garage/src/jepsen/garage/reg.clj +++ b/script/jepsen.garage/src/jepsen/garage/reg.clj @@ -112,7 +112,8 @@ (range) (fn [k] (->> - (gen/mix [op-get op-put op-del]) + ; (gen/mix [op-get op-put op-del]) + (gen/mix [op-get op-put]) (gen/limit (:ops-per-key opts)))))}) (defn workload1 From 8686cfd0b10a49048021102a08d637b0d4fe6a91 Mon Sep 17 00:00:00 2001 From: Alex Auvolat Date: Fri, 20 Oct 2023 13:37:37 +0200 Subject: [PATCH 060/538] s3 api: also ensure increasing timestamps for create_multipart_upload --- src/api/s3/multipart.rs | 7 +++++-- src/api/s3/put.rs | 14 +++++++++----- 2 files changed, 14 insertions(+), 7 deletions(-) diff --git a/src/api/s3/multipart.rs b/src/api/s3/multipart.rs index 672ab198..aaf271ab 100644 --- a/src/api/s3/multipart.rs +++ b/src/api/s3/multipart.rs @@ -30,10 +30,13 @@ pub async fn handle_create_multipart_upload( req: &Request, bucket_name: &str, bucket_id: Uuid, - key: &str, + key: &String, ) -> Result, Error> { + let existing_object = garage.object_table.get(&bucket_id, &key).await?; + let upload_id = gen_uuid(); - let timestamp = now_msec(); + let timestamp = next_timestamp(&existing_object); + let headers = get_headers(req.headers())?; // Create object in object table diff --git a/src/api/s3/put.rs b/src/api/s3/put.rs index 62a1f76a..c4df7561 100644 --- a/src/api/s3/put.rs +++ b/src/api/s3/put.rs @@ -86,11 +86,7 @@ pub(crate) async fn save_stream> + Unpin>( // Generate identity of new version let version_uuid = gen_uuid(); - let version_timestamp = existing_object - .as_ref() - .and_then(|obj| obj.versions().iter().map(|v| v.timestamp).max()) - .map(|t| std::cmp::max(t + 1, now_msec())) - .unwrap_or_else(now_msec); + let version_timestamp = next_timestamp(&existing_object); // If body is small enough, store it directly in the object table // as "inline data". We can then return immediately. @@ -532,3 +528,11 @@ pub(crate) fn get_headers(headers: &HeaderMap) -> Result) -> u64 { + existing_object + .as_ref() + .and_then(|obj| obj.versions().iter().map(|v| v.timestamp).max()) + .map(|t| std::cmp::max(t + 1, now_msec())) + .unwrap_or_else(now_msec) +} From c82d91c6bccf307186332b6c5c6fc0b128b1b2b1 Mon Sep 17 00:00:00 2001 From: Alex Auvolat Date: Fri, 20 Oct 2023 13:55:34 +0200 Subject: [PATCH 061/538] DeleteObject: always insert a deletion marker with a bigger timestamp than everything before --- src/api/s3/delete.rs | 40 ++++++++++++++++++---------------------- src/api/s3/multipart.rs | 3 +-- src/api/s3/put.rs | 4 ++-- 3 files changed, 21 insertions(+), 26 deletions(-) diff --git a/src/api/s3/delete.rs b/src/api/s3/delete.rs index b337155f..1c491eac 100644 --- a/src/api/s3/delete.rs +++ b/src/api/s3/delete.rs @@ -3,12 +3,12 @@ use std::sync::Arc; use hyper::{Body, Request, Response, StatusCode}; use garage_util::data::*; -use garage_util::time::*; use garage_model::garage::Garage; use garage_model::s3::object_table::*; use crate::s3::error::*; +use crate::s3::put::next_timestamp; use crate::s3::xml as s3_xml; use crate::signature::verify_signed_content; @@ -23,40 +23,36 @@ async fn handle_delete_internal( .await? .ok_or(Error::NoSuchKey)?; // No need to delete - let interesting_versions = object.versions().iter().filter(|v| { - !matches!( - v.state, - ObjectVersionState::Aborted - | ObjectVersionState::Complete(ObjectVersionData::DeleteMarker) - ) - }); + let del_timestamp = next_timestamp(Some(&object)); + let del_uuid = gen_uuid(); - let mut version_to_delete = None; - let mut timestamp = now_msec(); - for v in interesting_versions { - if v.timestamp + 1 > timestamp || version_to_delete.is_none() { - version_to_delete = Some(v.uuid); + let deleted_version = object + .versions() + .iter() + .rev() + .find(|v| !matches!(&v.state, ObjectVersionState::Aborted)) + .or_else(|| object.versions().iter().rev().next()); + let deleted_version = match deleted_version { + Some(dv) => dv.uuid, + None => { + warn!("Object has no versions: {:?}", object); + Uuid::from([0u8; 32]) } - timestamp = std::cmp::max(timestamp, v.timestamp + 1); - } - - let deleted_version = version_to_delete.ok_or(Error::NoSuchKey)?; - - let version_uuid = gen_uuid(); + }; let object = Object::new( bucket_id, key.into(), vec![ObjectVersion { - uuid: version_uuid, - timestamp, + uuid: del_uuid, + timestamp: del_timestamp, state: ObjectVersionState::Complete(ObjectVersionData::DeleteMarker), }], ); garage.object_table.insert(&object).await?; - Ok((deleted_version, version_uuid)) + Ok((deleted_version, del_uuid)) } pub async fn handle_delete( diff --git a/src/api/s3/multipart.rs b/src/api/s3/multipart.rs index aaf271ab..6b786318 100644 --- a/src/api/s3/multipart.rs +++ b/src/api/s3/multipart.rs @@ -9,7 +9,6 @@ use md5::{Digest as Md5Digest, Md5}; use garage_table::*; use garage_util::async_hash::*; use garage_util::data::*; -use garage_util::time::*; use garage_model::bucket_table::Bucket; use garage_model::garage::Garage; @@ -35,7 +34,7 @@ pub async fn handle_create_multipart_upload( let existing_object = garage.object_table.get(&bucket_id, &key).await?; let upload_id = gen_uuid(); - let timestamp = next_timestamp(&existing_object); + let timestamp = next_timestamp(existing_object.as_ref()); let headers = get_headers(req.headers())?; diff --git a/src/api/s3/put.rs b/src/api/s3/put.rs index c4df7561..606facc4 100644 --- a/src/api/s3/put.rs +++ b/src/api/s3/put.rs @@ -86,7 +86,7 @@ pub(crate) async fn save_stream> + Unpin>( // Generate identity of new version let version_uuid = gen_uuid(); - let version_timestamp = next_timestamp(&existing_object); + let version_timestamp = next_timestamp(existing_object.as_ref()); // If body is small enough, store it directly in the object table // as "inline data". We can then return immediately. @@ -529,7 +529,7 @@ pub(crate) fn get_headers(headers: &HeaderMap) -> Result) -> u64 { +pub(crate) fn next_timestamp(existing_object: Option<&Object>) -> u64 { existing_object .as_ref() .and_then(|obj| obj.versions().iter().map(|v| v.timestamp).max()) From f5b09727815523a1bd4ba5f62d892b2b45b5bed6 Mon Sep 17 00:00:00 2001 From: Alex Auvolat Date: Fri, 20 Oct 2023 15:00:10 +0200 Subject: [PATCH 062/538] jepsen: register crdt read-after-write is fixed with deleteobject patch --- script/jepsen.garage/README.md | 11 +++++------ script/jepsen.garage/Vagrantfile | 1 + script/jepsen.garage/src/jepsen/garage.clj | 3 ++- script/jepsen.garage/src/jepsen/garage/reg.clj | 3 +-- 4 files changed, 9 insertions(+), 9 deletions(-) diff --git a/script/jepsen.garage/README.md b/script/jepsen.garage/README.md index da6f0b77..4c3c70b3 100644 --- a/script/jepsen.garage/README.md +++ b/script/jepsen.garage/README.md @@ -45,7 +45,7 @@ clocks are scrambled. ### Register linear, with timestamp patch -Command: `lein run test --nodes-file nodes.vagrant --time-limit 60 --rate 20 --concurrency 20 --workload reg1 --ops-per-key 100 -I` +Command: `lein run test --nodes-file nodes.vagrant --time-limit 60 --rate 20 --concurrency 20 --workload reg1 --ops-per-key 100 --patch tsfix1` Results: @@ -62,15 +62,13 @@ Results: fails with a simple clock-scramble nemesis. Explanation: old values are not overwritten correctly when their timestamps are in the future. -### Read-after-write CRDT register model, with timestamp patch +### Read-after-write CRDT register model, with timestamp patch (v2 with DeleteObject fix as well) -Command: `lein run test --nodes-file nodes.vagrant --time-limit 60 --rate 100 --concurrency 100 --workload reg2 --ops-per-key 100 -I` +Command: `lein run test --nodes-file nodes.vagrant --time-limit 60 --rate 100 --concurrency 100 --workload reg2 --ops-per-key 100 --patch tsfix2` Results: -- Failures with clock-scramble nemesis + partition nemesis ???? TODO INVESTIGATE - -> the issue seems to be only after DeleteObject (deletions are not always taken into account), - the issue does not appear if we are using only PutObject with an actual object content +- No failures with clock-scramble nemesis + partition nemesis - TODO: layout reconfiguration nemesis @@ -123,6 +121,7 @@ The inconsistencies seemed to always happenned after writing a nil value, which instead of a PutObject. By removing the possibility of writing nil values, therefore only doing PutObject calls, the issue disappears. There is therefore an issue to fix in DeleteObject. +The issue in DeleteObject seems to have been fixed by commit `c82d91c6bccf307186332b6c5c6fc0b128b1b2b1` ## License diff --git a/script/jepsen.garage/Vagrantfile b/script/jepsen.garage/Vagrantfile index c40c600d..d0e545d3 100644 --- a/script/jepsen.garage/Vagrantfile +++ b/script/jepsen.garage/Vagrantfile @@ -13,6 +13,7 @@ Vagrant.configure("2") do |config| config.vm.provider "virtualbox" do |vb| vb.gui = false vb.memory = "512" + vb.customize ["modifyvm", :id, "--vram=12"] end config.vm.provision "shell", inline: <<-SHELL diff --git a/script/jepsen.garage/src/jepsen/garage.clj b/script/jepsen.garage/src/jepsen/garage.clj index ce02b7f7..a566d9be 100644 --- a/script/jepsen.garage/src/jepsen/garage.clj +++ b/script/jepsen.garage/src/jepsen/garage.clj @@ -23,7 +23,8 @@ (def patches "A map of patch names to Garage builds" {"default" "v0.9.0" - "tsfix1" "d146cdd5b66ca1d3ed65ce93ca42c6db22defc09"}) + "tsfix1" "d146cdd5b66ca1d3ed65ce93ca42c6db22defc09" + "tsfix2" "c82d91c6bccf307186332b6c5c6fc0b128b1b2b1"}) (def cli-opts "Additional command line options." diff --git a/script/jepsen.garage/src/jepsen/garage/reg.clj b/script/jepsen.garage/src/jepsen/garage/reg.clj index ecc96590..6772abfe 100644 --- a/script/jepsen.garage/src/jepsen/garage/reg.clj +++ b/script/jepsen.garage/src/jepsen/garage/reg.clj @@ -112,8 +112,7 @@ (range) (fn [k] (->> - ; (gen/mix [op-get op-put op-del]) - (gen/mix [op-get op-put]) + (gen/mix [op-get op-put op-del]) (gen/limit (:ops-per-key opts)))))}) (defn workload1 From 654775308ed03abd68941b07b2ad367a4de5c57f Mon Sep 17 00:00:00 2001 From: Alex Auvolat Date: Fri, 20 Oct 2023 15:48:37 +0200 Subject: [PATCH 063/538] jepsen: add cluster reconfiguration nemesis --- script/jepsen.garage/Vagrantfile | 1 + script/jepsen.garage/nodes.vagrant | 1 + script/jepsen.garage/src/jepsen/garage.clj | 27 +++--- .../src/jepsen/garage/nemesis.clj | 91 +++++++++++++++++++ 4 files changed, 106 insertions(+), 14 deletions(-) create mode 100644 script/jepsen.garage/src/jepsen/garage/nemesis.clj diff --git a/script/jepsen.garage/Vagrantfile b/script/jepsen.garage/Vagrantfile index d0e545d3..1125bccf 100644 --- a/script/jepsen.garage/Vagrantfile +++ b/script/jepsen.garage/Vagrantfile @@ -27,4 +27,5 @@ Vagrant.configure("2") do |config| config.vm.define "n3" do |config| vm(config, "n3", "192.168.56.23") end config.vm.define "n4" do |config| vm(config, "n4", "192.168.56.24") end config.vm.define "n5" do |config| vm(config, "n5", "192.168.56.25") end + config.vm.define "n6" do |config| vm(config, "n6", "192.168.56.26") end end diff --git a/script/jepsen.garage/nodes.vagrant b/script/jepsen.garage/nodes.vagrant index df7c4622..3f7e2b42 100644 --- a/script/jepsen.garage/nodes.vagrant +++ b/script/jepsen.garage/nodes.vagrant @@ -3,3 +3,4 @@ 192.168.56.23 192.168.56.24 192.168.56.25 +192.168.56.26 diff --git a/script/jepsen.garage/src/jepsen/garage.clj b/script/jepsen.garage/src/jepsen/garage.clj index a566d9be..65a92a76 100644 --- a/script/jepsen.garage/src/jepsen/garage.clj +++ b/script/jepsen.garage/src/jepsen/garage.clj @@ -10,6 +10,7 @@ [jepsen.os.debian :as debian] [jepsen.garage [daemon :as grg] + [nemesis :as grgNemesis] [reg :as reg] [set :as set]])) @@ -20,6 +21,11 @@ "set1" set/workload1 "set2" set/workload2}) +(def scenari + "A map of scenari to the associated nemesis" + {"cp" grgNemesis/scenario-cp + "r" grgNemesis/scenario-r}) + (def patches "A map of patch names to Garage builds" {"default" "v0.9.0" @@ -31,6 +37,9 @@ [["-p" "--patch NAME" "Garage patch to use" :default "default" :validate [patches (cli/one-of patches)]] + ["-s" "--scenario NAME" "Nemesis scenario to run" + :default "cp" + :validate [scenari (cli/one-of scenari)]] ["-r" "--rate HZ" "Approximate number of requests per second, per thread." :default 10 :parse-fn read-string @@ -40,7 +49,7 @@ :parse-fn parse-long :validate [pos? "Must be a positive integer."]] ["-w" "--workload NAME" "Workload of test to run" - :default "reg" + :default "reg1" :validate [workloads (cli/one-of workloads)]]]) (defn garage-test @@ -48,6 +57,7 @@ :concurrency, ...), constructs a test map." [opts] (let [workload ((get workloads (:workload opts)) opts) + scenario ((get scenari (:scenario opts)) opts) garage-version (get patches (:patch opts))] (merge tests/noop-test opts @@ -60,25 +70,14 @@ (->> (:generator workload) (gen/stagger (/ (:rate opts))) - (gen/nemesis - (cycle [(gen/sleep 5) - {:type :info, :f :partition-start} - (gen/sleep 5) - {:type :info, :f :clock-scramble} - (gen/sleep 5) - {:type :info, :f :partition-stop} - (gen/sleep 5) - {:type :info, :f :clock-scramble}])) + (gen/nemesis (:generator scenario)) (gen/time-limit (:time-limit opts))) (gen/log "Healing cluster") (gen/nemesis (gen/once {:type :info, :f :partition-stop})) (gen/log "Waiting for recovery") (gen/sleep 10) (gen/clients (:final-generator workload))) - :nemesis (nemesis/compose - {{:partition-start :start - :partition-stop :stop} (nemesis/partition-random-halves) - {:clock-scramble :scramble} (nemesis/clock-scrambler 20.0)}) + :nemesis (:nemesis scenario) :checker (checker/compose {:perf (checker/perf) :workload (:checker workload)}) diff --git a/script/jepsen.garage/src/jepsen/garage/nemesis.clj b/script/jepsen.garage/src/jepsen/garage/nemesis.clj new file mode 100644 index 00000000..7cd9306e --- /dev/null +++ b/script/jepsen.garage/src/jepsen/garage/nemesis.clj @@ -0,0 +1,91 @@ +(ns jepsen.garage.nemesis + (:require [clojure.tools.logging :refer :all] + [jepsen [control :as c] + [core :as jepsen] + [generator :as gen] + [nemesis :as nemesis]] + [jepsen.garage.daemon :as grg] + [jepsen.control.util :as cu])) + +(defn configure-present! + "Configure node to be active in new cluster layout" + [test node] + (info "configure-present!" node) + (let [node-id (c/on node (c/exec grg/binary :node :id :-q))] + (c/on + (jepsen/primary test) + (c/exec grg/binary :layout :assign (subs node-id 0 16) :-c :1G)))) + +(defn configure-absent! + "Configure node to be active in new cluster layout" + [test node] + (info "configure-absent!" node) + (let [node-id (c/on node (c/exec grg/binary :node :id :-q))] + (c/on + (jepsen/primary test) + (c/exec grg/binary :layout :assign (subs node-id 0 16) :-g)))) + +(defn finalize-config! + "Apply the proposed cluster layout" + [test] + (let [layout-show (c/on (jepsen/primary test) (c/exec grg/binary :layout :show)) + [_ layout-next-version] (re-find #"apply --version (\d+)\n" layout-show)] + (info "layout show: " layout-show "; next-version: " layout-next-version) + (c/on (jepsen/primary test) + (c/exec grg/binary :layout :apply :--version layout-next-version)))) + +(defn reconfigure-subset + "Reconfigure cluster with only a subset of nodes" + [cnt] + (reify nemesis/Nemesis + (setup! [this test] this) + + (invoke! [this test op] op + (case (:f op) + :start + (let [[keep-nodes remove-nodes] + (->> (:nodes test) + shuffle + (split-at cnt))] + (info "layout split: keep " keep-nodes ", remove " remove-nodes) + (run! #(configure-present! test %) keep-nodes) + (run! #(configure-absent! test %) remove-nodes) + (finalize-config! test) + (assoc op :value keep-nodes)) + :stop + (do + (info "layout un-split: all nodes=" (:nodes test)) + (run! #(configure-present! test %) (:nodes test)) + (finalize-config! test) + (assoc op :value (:nodes test))))) + + (teardown! [this test] this))) + +(defn scenario-cp + "Clock scramble + parittion scenario" + [opts] + {:generator (cycle [(gen/sleep 5) + {:type :info, :f :partition-start} + (gen/sleep 5) + {:type :info, :f :clock-scramble} + (gen/sleep 5) + {:type :info, :f :partition-stop} + (gen/sleep 5) + {:type :info, :f :clock-scramble}]) + :nemesis (nemesis/compose + {{:partition-start :start + :partition-stop :stop} (nemesis/partition-random-halves) + {:clock-scramble :scramble} (nemesis/clock-scrambler 20.0)})}) + +(defn scenario-r + "Cluster reconfiguration scenario" + [opts] + {:generator (cycle [(gen/sleep 5) + {:type :info, :f :reconfigure-start} + (gen/sleep 5) + {:type :info, :f :reconfigure-start} + (gen/sleep 5) + {:type :info, :f :reconfigure-stop}]) + :nemesis (nemesis/compose + {{:reconfigure-start :start + :reconfigure-stop :stop} (reconfigure-subset 3)})}) From 9030c1eef8f4c7c3435835f15e6b236497f93323 Mon Sep 17 00:00:00 2001 From: Alex Auvolat Date: Fri, 20 Oct 2023 15:53:46 +0200 Subject: [PATCH 064/538] jepsen: code path for nemesis final generator --- script/jepsen.garage/src/jepsen/garage.clj | 2 +- .../src/jepsen/garage/nemesis.clj | 44 ++++++++++--------- 2 files changed, 24 insertions(+), 22 deletions(-) diff --git a/script/jepsen.garage/src/jepsen/garage.clj b/script/jepsen.garage/src/jepsen/garage.clj index 65a92a76..ace3e66a 100644 --- a/script/jepsen.garage/src/jepsen/garage.clj +++ b/script/jepsen.garage/src/jepsen/garage.clj @@ -73,7 +73,7 @@ (gen/nemesis (:generator scenario)) (gen/time-limit (:time-limit opts))) (gen/log "Healing cluster") - (gen/nemesis (gen/once {:type :info, :f :partition-stop})) + (gen/nemesis (:final-generator scenario)) (gen/log "Waiting for recovery") (gen/sleep 10) (gen/clients (:final-generator workload))) diff --git a/script/jepsen.garage/src/jepsen/garage/nemesis.clj b/script/jepsen.garage/src/jepsen/garage/nemesis.clj index 7cd9306e..9edfe418 100644 --- a/script/jepsen.garage/src/jepsen/garage/nemesis.clj +++ b/script/jepsen.garage/src/jepsen/garage/nemesis.clj @@ -64,28 +64,30 @@ (defn scenario-cp "Clock scramble + parittion scenario" [opts] - {:generator (cycle [(gen/sleep 5) - {:type :info, :f :partition-start} - (gen/sleep 5) - {:type :info, :f :clock-scramble} - (gen/sleep 5) - {:type :info, :f :partition-stop} - (gen/sleep 5) - {:type :info, :f :clock-scramble}]) - :nemesis (nemesis/compose - {{:partition-start :start - :partition-stop :stop} (nemesis/partition-random-halves) - {:clock-scramble :scramble} (nemesis/clock-scrambler 20.0)})}) + {:generator (cycle [(gen/sleep 5) + {:type :info, :f :partition-start} + (gen/sleep 5) + {:type :info, :f :clock-scramble} + (gen/sleep 5) + {:type :info, :f :partition-stop} + (gen/sleep 5) + {:type :info, :f :clock-scramble}]) + :final-generator (gen/once {:type :info, :f :partition-stop}) + :nemesis (nemesis/compose + {{:partition-start :start + :partition-stop :stop} (nemesis/partition-random-halves) + {:clock-scramble :scramble} (nemesis/clock-scrambler 20.0)})}) (defn scenario-r "Cluster reconfiguration scenario" [opts] - {:generator (cycle [(gen/sleep 5) - {:type :info, :f :reconfigure-start} - (gen/sleep 5) - {:type :info, :f :reconfigure-start} - (gen/sleep 5) - {:type :info, :f :reconfigure-stop}]) - :nemesis (nemesis/compose - {{:reconfigure-start :start - :reconfigure-stop :stop} (reconfigure-subset 3)})}) + {:generator (cycle [(gen/sleep 5) + {:type :info, :f :reconfigure-start} + (gen/sleep 5) + {:type :info, :f :reconfigure-start} + (gen/sleep 5) + {:type :info, :f :reconfigure-stop}]) + :final-generator (gen/once {:type :info, :f :reconfigure-stop}) + :nemesis (nemesis/compose + {{:reconfigure-start :start + :reconfigure-stop :stop} (reconfigure-subset 3)})}) From fb6c9a1243bd561d2a0de6b49c8debf37d566473 Mon Sep 17 00:00:00 2001 From: Alex Auvolat Date: Fri, 20 Oct 2023 15:55:09 +0200 Subject: [PATCH 065/538] jepsen: update readme --- script/jepsen.garage/README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/script/jepsen.garage/README.md b/script/jepsen.garage/README.md index 4c3c70b3..684bce87 100644 --- a/script/jepsen.garage/README.md +++ b/script/jepsen.garage/README.md @@ -69,7 +69,7 @@ Command: `lein run test --nodes-file nodes.vagrant --time-limit 60 --rate 100 - Results: - No failures with clock-scramble nemesis + partition nemesis -- TODO: layout reconfiguration nemesis +- Fails with layout reconfiguration nemesis (TODO: test more and investigate) ### Set, basic test (write some items, then read) @@ -79,7 +79,7 @@ Command: `lein run test --nodes-file nodes.vagrant --time-limit 60 --rate 100 - Results: - For now, no failures with clock-scramble nemesis + partition nemesis -- TODO: layout reconfiguration nemesis +- TODO: layout reconfiguration nemesis (does not fail yet! but it should) ### Set, continuous test (interspersed reads and writes) From d2c365767b0a4cb70dcbb1d20b75f41e0f9c20c8 Mon Sep 17 00:00:00 2001 From: Alex Auvolat Date: Tue, 24 Oct 2023 11:39:45 +0200 Subject: [PATCH 066/538] jepsen: more testing --- script/jepsen.garage/README.md | 73 ++++++++++++------- script/jepsen.garage/src/jepsen/garage.clj | 6 +- .../src/jepsen/garage/nemesis.clj | 34 ++++++++- .../jepsen.garage/src/jepsen/garage/s3api.clj | 2 - .../jepsen.garage/src/jepsen/garage/set.clj | 6 +- 5 files changed, 85 insertions(+), 36 deletions(-) diff --git a/script/jepsen.garage/README.md b/script/jepsen.garage/README.md index 684bce87..06379d25 100644 --- a/script/jepsen.garage/README.md +++ b/script/jepsen.garage/README.md @@ -35,55 +35,74 @@ lein run test --nodes-file nodes.vagrant --time-limit 64 --rate 50 --concurrenc ### Register linear, without timestamp patch -Command: `lein run test --nodes-file nodes.vagrant --time-limit 60 --rate 20 --concurrency 20 --workload reg1 --ops-per-key 100` +Command: `lein run test --nodes-file nodes.vagrant --time-limit 60 --rate 100 --concurrency 20 --workload reg1 --ops-per-key 100` -Results: fails with a simple clock-scramble nemesis. +Results without timestamp patch: -Explanation: without the timestamp patch, nodes will create objects using their -local clock only as a timestamp, so the ordering will be all over the place if -clocks are scrambled. +- Fails with a simple clock-scramble nemesis (`--scenario c`). + Explanation: without the timestamp patch, nodes will create objects using their + local clock only as a timestamp, so the ordering will be all over the place if + clocks are scrambled. -### Register linear, with timestamp patch - -Command: `lein run test --nodes-file nodes.vagrant --time-limit 60 --rate 20 --concurrency 20 --workload reg1 --ops-per-key 100 --patch tsfix1` - -Results: +Results with timestamp patch (`--patch tsfix2`): - No failure with clock-scramble nemesis -- Fails with clock-scramble nemesis + partition nemesis -Explanation: S3 objects are not meant to behave like linearizable registers. TODO explain using a counter-example +- Fails with clock-scramble nemesis + partition nemesis (`--scenario cp`). -### Read-after-write CRDT register model, without timestamp patch +**This test is expected to fail.** +Indeed, S3 objects are not meant to behave like linearizable registers. +TODO explain using a counter-example + + +### Read-after-write CRDT register model Command: `lein run test --nodes-file nodes.vagrant --time-limit 60 --rate 100 --concurrency 100 --workload reg2 --ops-per-key 100` -Results: fails with a simple clock-scramble nemesis. +Results without timestamp patch: -Explanation: old values are not overwritten correctly when their timestamps are in the future. +- Fails with a simple clock-scramble nemesis (`--scenario c`). + Explanation: old values are not overwritten correctly when their timestamps are in the future. -### Read-after-write CRDT register model, with timestamp patch (v2 with DeleteObject fix as well) +Results with timestamp patch (`--patch tsfix2`): -Command: `lein run test --nodes-file nodes.vagrant --time-limit 60 --rate 100 --concurrency 100 --workload reg2 --ops-per-key 100 --patch tsfix2` +- No failures with clock-scramble nemesis + partition nemesis (`--scenario cp`). + This proves that `tsfix2` (PR#543) does improve consistency. -Results: - -- No failures with clock-scramble nemesis + partition nemesis -- Fails with layout reconfiguration nemesis (TODO: test more and investigate) +- **Fails with layout reconfiguration nemesis** (`--scenario r`) + (TODO: note down the run id of a failed run) + (TODO: test more and investigate). + This is the failure mode we are looking for and trying to fix for NLnet task 3. ### Set, basic test (write some items, then read) -Command: `lein run test --nodes-file nodes.vagrant --time-limit 60 --rate 100 --concurrency 100 --workload set1 --ops-per-key 100` +Command: `lein run test --nodes-file nodes.vagrant --time-limit 60 --rate 100 --concurrency 100 --workload set1 --ops-per-key 100 --patch tsfix2` Results: -- For now, no failures with clock-scramble nemesis + partition nemesis -- TODO: layout reconfiguration nemesis (does not fail yet! but it should) +- For now, no failures with clock-scramble nemesis + partition nemesis -> TODO long test run + +- Failures were not yet achieved with only the layout reconfiguration nemesis, although they should be. + +- **Fails with partition + layout reconfiguration nemesis** (`--scenario pr`) + (TODO: note down the run id of a failed run) + (TODO: test more and investigate). + This is the failure mode we are looking for and trying to fix for NLnet task 3. + ### Set, continuous test (interspersed reads and writes) -TODO +Command: `lein run test --nodes-file nodes.vagrant --time-limit 60 --rate 100 --concurrency 100 --workload set2 --ops-per-key 100 --patch tsfix2` + +Results: + +- For now, no failures with clock-scramble nemesis + partition nemesis -> TODO long test run + +- Failures were not yet achieved with only the layout reconfiguration nemesis, although they should be. + +- TODO: failures should be achieved with `--scenario pr`? Even with 4 or 5 consecutive test runs, no failures were achieved, why? + (TODO: note down the run id of a failed run) ## Investigating (and fixing) errors @@ -112,7 +131,7 @@ and passing all values that were previously in the context (creds and prefix) as The reg2 test is our custom checker for CRDT read-after-write on individual object keys, acting as registers which can be updated. The test fails without the timestamp fix, which is expected as the clock scrambler will prevent nodes from having a correct ordering of objects. -With the timestamp fix, the happenned-before relationship should at least be respected, meaning that when a PutObject call starts +With the timestamp fix (`--patch tsfix1`), the happenned-before relationship should at least be respected, meaning that when a PutObject call starts after another PutObject call has ended, the second call should overwrite the value of the first call, and that value should not be readable by future GetObject calls. However, we observed inconsistencies even with the timestamp fix. @@ -121,7 +140,7 @@ The inconsistencies seemed to always happenned after writing a nil value, which instead of a PutObject. By removing the possibility of writing nil values, therefore only doing PutObject calls, the issue disappears. There is therefore an issue to fix in DeleteObject. -The issue in DeleteObject seems to have been fixed by commit `c82d91c6bccf307186332b6c5c6fc0b128b1b2b1` +The issue in DeleteObject seems to have been fixed by commit `c82d91c6bccf307186332b6c5c6fc0b128b1b2b1`, which can be used using `--patch tsfix2`. ## License diff --git a/script/jepsen.garage/src/jepsen/garage.clj b/script/jepsen.garage/src/jepsen/garage.clj index ace3e66a..6d64a1b8 100644 --- a/script/jepsen.garage/src/jepsen/garage.clj +++ b/script/jepsen.garage/src/jepsen/garage.clj @@ -23,8 +23,10 @@ (def scenari "A map of scenari to the associated nemesis" - {"cp" grgNemesis/scenario-cp - "r" grgNemesis/scenario-r}) + {"c" grgNemesis/scenario-c + "cp" grgNemesis/scenario-cp + "r" grgNemesis/scenario-r + "pr" grgNemesis/scenario-pr}) (def patches "A map of patch names to Garage builds" diff --git a/script/jepsen.garage/src/jepsen/garage/nemesis.clj b/script/jepsen.garage/src/jepsen/garage/nemesis.clj index 9edfe418..e64bcaf1 100644 --- a/script/jepsen.garage/src/jepsen/garage/nemesis.clj +++ b/script/jepsen.garage/src/jepsen/garage/nemesis.clj @@ -7,6 +7,8 @@ [jepsen.garage.daemon :as grg] [jepsen.control.util :as cu])) +; ---- reconfiguration nemesis ---- + (defn configure-present! "Configure node to be active in new cluster layout" [test node] @@ -61,8 +63,18 @@ (teardown! [this test] this))) +; ---- nemesis scenari ---- + +(defn scenario-c + "Clock scramble scenario" + [opts] + {:generator (cycle [(gen/sleep 5) + {:type :info, :f :clock-scramble}]) + :nemesis (nemesis/compose + {{:clock-scramble :scramble} (nemesis/clock-scrambler 20.0)})}) + (defn scenario-cp - "Clock scramble + parittion scenario" + "Clock scramble + partition scenario" [opts] {:generator (cycle [(gen/sleep 5) {:type :info, :f :partition-start} @@ -91,3 +103,23 @@ :nemesis (nemesis/compose {{:reconfigure-start :start :reconfigure-stop :stop} (reconfigure-subset 3)})}) + +(defn scenario-pr + "Partition + cluster reconfiguration scenario" + [opts] + {:generator (cycle [(gen/sleep 3) + {:type :info, :f :reconfigure-start} + (gen/sleep 3) + {:type :info, :f :partition-start} + (gen/sleep 3) + {:type :info, :f :reconfigure-start} + (gen/sleep 3) + {:type :info, :f :partition-stop} + (gen/sleep 3) + {:type :info, :f :reconfigure-stop}]) + :final-generator (gen/once {:type :info, :f :partition-stop}) + :nemesis (nemesis/compose + {{:partition-start :start + :partition-stop :stop} (nemesis/partition-random-halves) + {:reconfigure-start :start + :reconfigure-stop :stop} (reconfigure-subset 3)})}) diff --git a/script/jepsen.garage/src/jepsen/garage/s3api.clj b/script/jepsen.garage/src/jepsen/garage/s3api.clj index 4f292ac0..531e0157 100644 --- a/script/jepsen.garage/src/jepsen/garage/s3api.clj +++ b/script/jepsen.garage/src/jepsen/garage/s3api.clj @@ -39,12 +39,10 @@ new-object-summaries (:object-summaries list-result) new-objects (map (fn [d] (:key d)) new-object-summaries) objects (concat new-objects accum)] - (info (:endpoint creds) "ListObjectsV2 prefix(" prefix "), ct(" ct "): " new-objects) (if (:truncated? list-result) (list-inner creds prefix (:next-continuation-token list-result) objects) objects))) (defn list "Helper for ListObjects -- just lists everything in the bucket" [creds prefix] - (info "in s3/list creds:" creds ", prefix:" prefix) (list-inner creds prefix nil [])) diff --git a/script/jepsen.garage/src/jepsen/garage/set.clj b/script/jepsen.garage/src/jepsen/garage/set.clj index c5387462..f625e672 100644 --- a/script/jepsen.garage/src/jepsen/garage/set.clj +++ b/script/jepsen.garage/src/jepsen/garage/set.clj @@ -45,9 +45,7 @@ 10000 (assoc op :type :fail, :error ::timeout) (do - (info "call s3/list creds: " (:creds this) ", prefix:" prefix) (let [items (s3/list (:creds this) prefix)] - (info "list results for prefix" prefix ":" items " (node:" (:endpoint (:creds this)) ")") (let [items-stripped (map (fn [o] (assert (str/starts-with? o prefix)) (str/replace-first o prefix "")) items) @@ -115,8 +113,8 @@ {:client (SetClient. nil) :checker (independent/checker (checker/compose - {:set-full (checker/set-full {:linearizable? false}) - :set-read-after-write (set-read-after-write) + {:set-read-after-write (set-read-after-write) + ; :set-full (checker/set-full {:linearizable? false}) :timeline (timeline/html)})) :generator (independent/concurrent-generator 10 From d13bde5e26098313e789dd3793368a635cf1cc16 Mon Sep 17 00:00:00 2001 From: Alex Auvolat Date: Tue, 24 Oct 2023 15:44:05 +0200 Subject: [PATCH 067/538] jepsen: set1 and set2 don't fail anymore ?? --- script/jepsen.garage/README.md | 20 +++--- script/jepsen.garage/src/jepsen/garage.clj | 3 +- .../src/jepsen/garage/nemesis.clj | 64 +++++++++++-------- 3 files changed, 47 insertions(+), 40 deletions(-) diff --git a/script/jepsen.garage/README.md b/script/jepsen.garage/README.md index 06379d25..e1dc6953 100644 --- a/script/jepsen.garage/README.md +++ b/script/jepsen.garage/README.md @@ -69,9 +69,9 @@ Results with timestamp patch (`--patch tsfix2`): - No failures with clock-scramble nemesis + partition nemesis (`--scenario cp`). This proves that `tsfix2` (PR#543) does improve consistency. -- **Fails with layout reconfiguration nemesis** (`--scenario r`) - (TODO: note down the run id of a failed run) - (TODO: test more and investigate). +- **Fails with layout reconfiguration nemesis** (`--scenario r`). + Example of a failed run: `garage reg2/20231024T120806.899+0200`. + TODO: investigate. This is the failure mode we are looking for and trying to fix for NLnet task 3. @@ -83,12 +83,11 @@ Results: - For now, no failures with clock-scramble nemesis + partition nemesis -> TODO long test run -- Failures were not yet achieved with only the layout reconfiguration nemesis, although they should be. +- Does not seem to fail with only the layout reconfiguation nemesis (>20 runs), although theoretically it could -- **Fails with partition + layout reconfiguration nemesis** (`--scenario pr`) - (TODO: note down the run id of a failed run) - (TODO: test more and investigate). - This is the failure mode we are looking for and trying to fix for NLnet task 3. +- Does not seem to fail with the layout reconfiguation + partition nemesis (<10 runs), although theoretically it could + +TODO: make it fail!!! ### Set, continuous test (interspersed reads and writes) @@ -99,10 +98,9 @@ Results: - For now, no failures with clock-scramble nemesis + partition nemesis -> TODO long test run -- Failures were not yet achieved with only the layout reconfiguration nemesis, although they should be. +- Does not seem to fail with the clock scrambler + partition + layout reconfiguation nemesis (>10 runs), although theoretically it could -- TODO: failures should be achieved with `--scenario pr`? Even with 4 or 5 consecutive test runs, no failures were achieved, why? - (TODO: note down the run id of a failed run) +TODO: make it fail!!! ## Investigating (and fixing) errors diff --git a/script/jepsen.garage/src/jepsen/garage.clj b/script/jepsen.garage/src/jepsen/garage.clj index 6d64a1b8..a67399e0 100644 --- a/script/jepsen.garage/src/jepsen/garage.clj +++ b/script/jepsen.garage/src/jepsen/garage.clj @@ -26,7 +26,8 @@ {"c" grgNemesis/scenario-c "cp" grgNemesis/scenario-cp "r" grgNemesis/scenario-r - "pr" grgNemesis/scenario-pr}) + "pr" grgNemesis/scenario-pr + "cpr" grgNemesis/scenario-cpr}) (def patches "A map of patch names to Garage builds" diff --git a/script/jepsen.garage/src/jepsen/garage/nemesis.clj b/script/jepsen.garage/src/jepsen/garage/nemesis.clj index e64bcaf1..07083038 100644 --- a/script/jepsen.garage/src/jepsen/garage/nemesis.clj +++ b/script/jepsen.garage/src/jepsen/garage/nemesis.clj @@ -76,30 +76,24 @@ (defn scenario-cp "Clock scramble + partition scenario" [opts] - {:generator (cycle [(gen/sleep 5) - {:type :info, :f :partition-start} - (gen/sleep 5) - {:type :info, :f :clock-scramble} - (gen/sleep 5) - {:type :info, :f :partition-stop} - (gen/sleep 5) - {:type :info, :f :clock-scramble}]) + {:generator (->> + (gen/mix [{:type :info, :f :clock-scramble} + {:type :info, :f :partition-stop} + {:type :info, :f :partition-start}]) + (gen/stagger 3)) :final-generator (gen/once {:type :info, :f :partition-stop}) :nemesis (nemesis/compose - {{:partition-start :start - :partition-stop :stop} (nemesis/partition-random-halves) - {:clock-scramble :scramble} (nemesis/clock-scrambler 20.0)})}) + {{:clock-scramble :scramble} (nemesis/clock-scrambler 20.0) + {:partition-start :start + :partition-stop :stop} (nemesis/partition-random-halves)})}) (defn scenario-r "Cluster reconfiguration scenario" [opts] - {:generator (cycle [(gen/sleep 5) - {:type :info, :f :reconfigure-start} - (gen/sleep 5) - {:type :info, :f :reconfigure-start} - (gen/sleep 5) - {:type :info, :f :reconfigure-stop}]) - :final-generator (gen/once {:type :info, :f :reconfigure-stop}) + {:generator (->> + (gen/mix [{:type :info, :f :reconfigure-start} + {:type :info, :f :reconfigure-stop}]) + (gen/stagger 3)) :nemesis (nemesis/compose {{:reconfigure-start :start :reconfigure-stop :stop} (reconfigure-subset 3)})}) @@ -107,19 +101,33 @@ (defn scenario-pr "Partition + cluster reconfiguration scenario" [opts] - {:generator (cycle [(gen/sleep 3) - {:type :info, :f :reconfigure-start} - (gen/sleep 3) - {:type :info, :f :partition-start} - (gen/sleep 3) - {:type :info, :f :reconfigure-start} - (gen/sleep 3) - {:type :info, :f :partition-stop} - (gen/sleep 3) - {:type :info, :f :reconfigure-stop}]) + {:generator (->> + (gen/mix [{:type :info, :f :partition-start} + {:type :info, :f :partition-stop} + {:type :info, :f :reconfigure-start} + {:type :info, :f :reconfigure-stop}]) + (gen/stagger 3)) :final-generator (gen/once {:type :info, :f :partition-stop}) :nemesis (nemesis/compose {{:partition-start :start :partition-stop :stop} (nemesis/partition-random-halves) {:reconfigure-start :start :reconfigure-stop :stop} (reconfigure-subset 3)})}) + +(defn scenario-cpr + "Clock scramble + partition + cluster reconfiguration scenario" + [opts] + {:generator (->> + (gen/mix [{:type :info, :f :clock-scramble} + {:type :info, :f :partition-start} + {:type :info, :f :partition-stop} + {:type :info, :f :reconfigure-start} + {:type :info, :f :reconfigure-stop}]) + (gen/stagger 3)) + :final-generator (gen/once {:type :info, :f :partition-stop}) + :nemesis (nemesis/compose + {{:clock-scramble :scramble} (nemesis/clock-scrambler 20.0) + {:partition-start :start + :partition-stop :stop} (nemesis/partition-random-halves) + {:reconfigure-start :start + :reconfigure-stop :stop} (reconfigure-subset 3)})}) From d7ab2c639e330cb3214d83bf98107573ef41f6db Mon Sep 17 00:00:00 2001 From: Alex Auvolat Date: Tue, 24 Oct 2023 16:39:50 +0200 Subject: [PATCH 068/538] jepsen: fix nemesis to actually generate many operations --- .../src/jepsen/garage/nemesis.clj | 57 +++++++++++-------- 1 file changed, 33 insertions(+), 24 deletions(-) diff --git a/script/jepsen.garage/src/jepsen/garage/nemesis.clj b/script/jepsen.garage/src/jepsen/garage/nemesis.clj index 07083038..6a2e1935 100644 --- a/script/jepsen.garage/src/jepsen/garage/nemesis.clj +++ b/script/jepsen.garage/src/jepsen/garage/nemesis.clj @@ -32,9 +32,12 @@ [test] (let [layout-show (c/on (jepsen/primary test) (c/exec grg/binary :layout :show)) [_ layout-next-version] (re-find #"apply --version (\d+)\n" layout-show)] - (info "layout show: " layout-show "; next-version: " layout-next-version) - (c/on (jepsen/primary test) - (c/exec grg/binary :layout :apply :--version layout-next-version)))) + (if layout-next-version + (do + (info "layout show: " layout-show "; next-version: " layout-next-version) + (c/on (jepsen/primary test) + (c/exec grg/binary :layout :apply :--version layout-next-version))) + (info "no layout changes to apply")))) (defn reconfigure-subset "Reconfigure cluster with only a subset of nodes" @@ -65,22 +68,28 @@ ; ---- nemesis scenari ---- +(defn nemesis-op + "A generator for a single nemesis operation" + [op] + (fn [_ _] {:type :info, :f op})) + (defn scenario-c "Clock scramble scenario" [opts] - {:generator (cycle [(gen/sleep 5) - {:type :info, :f :clock-scramble}]) + {:generator (->> + (nemesis-op :clock-scramble) + (gen/stagger 5)) :nemesis (nemesis/compose - {{:clock-scramble :scramble} (nemesis/clock-scrambler 20.0)})}) + {{:clock-scramble :scramble} (nemesis/clock-scrambler 20.0)})}) (defn scenario-cp "Clock scramble + partition scenario" [opts] {:generator (->> - (gen/mix [{:type :info, :f :clock-scramble} - {:type :info, :f :partition-stop} - {:type :info, :f :partition-start}]) - (gen/stagger 3)) + (gen/mix [(nemesis-op :clock-scramble) + (nemesis-op :partition-stop) + (nemesis-op :partition-start)]) + (gen/stagger 5)) :final-generator (gen/once {:type :info, :f :partition-stop}) :nemesis (nemesis/compose {{:clock-scramble :scramble} (nemesis/clock-scrambler 20.0) @@ -91,9 +100,9 @@ "Cluster reconfiguration scenario" [opts] {:generator (->> - (gen/mix [{:type :info, :f :reconfigure-start} - {:type :info, :f :reconfigure-stop}]) - (gen/stagger 3)) + (gen/mix [(nemesis-op :reconfigure-start) + (nemesis-op :reconfigure-stop)]) + (gen/stagger 5)) :nemesis (nemesis/compose {{:reconfigure-start :start :reconfigure-stop :stop} (reconfigure-subset 3)})}) @@ -102,11 +111,11 @@ "Partition + cluster reconfiguration scenario" [opts] {:generator (->> - (gen/mix [{:type :info, :f :partition-start} - {:type :info, :f :partition-stop} - {:type :info, :f :reconfigure-start} - {:type :info, :f :reconfigure-stop}]) - (gen/stagger 3)) + (gen/mix [(nemesis-op :partition-start) + (nemesis-op :partition-stop) + (nemesis-op :reconfigure-start) + (nemesis-op :reconfigure-stop)]) + (gen/stagger 5)) :final-generator (gen/once {:type :info, :f :partition-stop}) :nemesis (nemesis/compose {{:partition-start :start @@ -118,12 +127,12 @@ "Clock scramble + partition + cluster reconfiguration scenario" [opts] {:generator (->> - (gen/mix [{:type :info, :f :clock-scramble} - {:type :info, :f :partition-start} - {:type :info, :f :partition-stop} - {:type :info, :f :reconfigure-start} - {:type :info, :f :reconfigure-stop}]) - (gen/stagger 3)) + (gen/mix [(nemesis-op :clock-scramble) + (nemesis-op :partition-start) + (nemesis-op :partition-stop) + (nemesis-op :reconfigure-start) + (nemesis-op :reconfigure-stop)]) + (gen/stagger 5)) :final-generator (gen/once {:type :info, :f :partition-stop}) :nemesis (nemesis/compose {{:clock-scramble :scramble} (nemesis/clock-scrambler 20.0) From 4fa2646a75ed9b4823bf36ae6218a18cca11c471 Mon Sep 17 00:00:00 2001 From: Alex Auvolat Date: Tue, 24 Oct 2023 17:45:22 +0200 Subject: [PATCH 069/538] jepsen: got a failure with set1 --- script/jepsen.garage/README.md | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/script/jepsen.garage/README.md b/script/jepsen.garage/README.md index e1dc6953..5d407b6a 100644 --- a/script/jepsen.garage/README.md +++ b/script/jepsen.garage/README.md @@ -77,17 +77,16 @@ Results with timestamp patch (`--patch tsfix2`): ### Set, basic test (write some items, then read) -Command: `lein run test --nodes-file nodes.vagrant --time-limit 60 --rate 100 --concurrency 100 --workload set1 --ops-per-key 100 --patch tsfix2` +Command: `lein run test --nodes-file nodes.vagrant --time-limit 60 --rate 200 --concurrency 200 --workload set1 --ops-per-key 100 --patch tsfix2` Results: - For now, no failures with clock-scramble nemesis + partition nemesis -> TODO long test run -- Does not seem to fail with only the layout reconfiguation nemesis (>20 runs), although theoretically it could +- Does not seem to fail with only the layout reconfiguation nemesis (<10 runs), although theoretically it could -- Does not seem to fail with the layout reconfiguation + partition nemesis (<10 runs), although theoretically it could - -TODO: make it fail!!! +- **Fails with the partition + layout reconfiguration nemesis** (`--scenario pr`). + EXample of a failed run: `garage set1/20231024T172214.488+0200` (1 failure in 4 runs). ### Set, continuous test (interspersed reads and writes) From db921cc05f8bcfccd0d0ba1d90b6dcd77f06dcdd Mon Sep 17 00:00:00 2001 From: Alex Auvolat Date: Wed, 25 Oct 2023 11:41:34 +0200 Subject: [PATCH 070/538] jepsen: reconfigure nemesis + add db nemesis --- script/jepsen.garage/README.md | 2 + script/jepsen.garage/src/jepsen/garage.clj | 14 +- .../src/jepsen/garage/daemon.clj | 18 +++ .../src/jepsen/garage/nemesis.clj | 129 ++++++++---------- .../jepsen.garage/src/jepsen/garage/reg.clj | 37 +++-- .../jepsen.garage/src/jepsen/garage/set.clj | 49 ++++--- 6 files changed, 138 insertions(+), 111 deletions(-) diff --git a/script/jepsen.garage/README.md b/script/jepsen.garage/README.md index 5d407b6a..ced8ebb5 100644 --- a/script/jepsen.garage/README.md +++ b/script/jepsen.garage/README.md @@ -97,6 +97,8 @@ Results: - For now, no failures with clock-scramble nemesis + partition nemesis -> TODO long test run +- Does not seem to fail with partition + layout reconfiguration nemesis (>100 runs) + - Does not seem to fail with the clock scrambler + partition + layout reconfiguation nemesis (>10 runs), although theoretically it could TODO: make it fail!!! diff --git a/script/jepsen.garage/src/jepsen/garage.clj b/script/jepsen.garage/src/jepsen/garage.clj index a67399e0..3fe527a6 100644 --- a/script/jepsen.garage/src/jepsen/garage.clj +++ b/script/jepsen.garage/src/jepsen/garage.clj @@ -27,7 +27,8 @@ "cp" grgNemesis/scenario-cp "r" grgNemesis/scenario-r "pr" grgNemesis/scenario-pr - "cpr" grgNemesis/scenario-cpr}) + "cpr" grgNemesis/scenario-cpr + "dpr" grgNemesis/scenario-dpr}) (def patches "A map of patch names to Garage builds" @@ -59,15 +60,16 @@ "Given an options map from the command line runner (e.g. :nodes, :ssh, :concurrency, ...), constructs a test map." [opts] - (let [workload ((get workloads (:workload opts)) opts) - scenario ((get scenari (:scenario opts)) opts) - garage-version (get patches (:patch opts))] + (let [garage-version (get patches (:patch opts)) + db (grg/db garage-version) + workload ((get workloads (:workload opts)) opts) + scenario ((get scenari (:scenario opts)) (assoc opts :db db))] (merge tests/noop-test opts {:pure-generators true :name (str "garage " (name (:workload opts))) :os debian/os - :db (grg/db garage-version) + :db db :client (:client workload) :generator (gen/phases (->> @@ -82,7 +84,7 @@ (gen/clients (:final-generator workload))) :nemesis (:nemesis scenario) :checker (checker/compose - {:perf (checker/perf) + {:perf (checker/perf (:perf scenario)) :workload (:checker workload)}) }))) diff --git a/script/jepsen.garage/src/jepsen/garage/daemon.clj b/script/jepsen.garage/src/jepsen/garage/daemon.clj index 7c581ba1..d407dd29 100644 --- a/script/jepsen.garage/src/jepsen/garage/daemon.clj +++ b/script/jepsen.garage/src/jepsen/garage/daemon.clj @@ -119,6 +119,24 @@ (c/exec :rm :-rf data-dir) (c/exec :rm :-rf meta-dir))) + db/Pause + (pause! [_ test node] + (cu/grepkill! :stop binary)) + (resume! [_ test node] + (cu/grepkill! :cont binary)) + + db/Kill + (kill! [_ test node] + (cu/stop-daemon! binary pidfile)) + (start! [_ test node] + (cu/start-daemon! + {:logfile logfile + :pidfile pidfile + :chdir base-dir + :env {:RUST_LOG "garage=debug,garage_api=trace"}} + binary + :server)) + db/LogFiles (log-files [_ test node] [logfile]))) diff --git a/script/jepsen.garage/src/jepsen/garage/nemesis.clj b/script/jepsen.garage/src/jepsen/garage/nemesis.clj index 6a2e1935..0222e463 100644 --- a/script/jepsen.garage/src/jepsen/garage/nemesis.clj +++ b/script/jepsen.garage/src/jepsen/garage/nemesis.clj @@ -4,6 +4,7 @@ [core :as jepsen] [generator :as gen] [nemesis :as nemesis]] + [jepsen.nemesis.combined :as combined] [jepsen.garage.daemon :as grg] [jepsen.control.util :as cu])) @@ -11,21 +12,23 @@ (defn configure-present! "Configure node to be active in new cluster layout" - [test node] - (info "configure-present!" node) - (let [node-id (c/on node (c/exec grg/binary :node :id :-q))] - (c/on - (jepsen/primary test) - (c/exec grg/binary :layout :assign (subs node-id 0 16) :-c :1G)))) + [test nodes] + (info "configure-present!" nodes) + (let [node-ids (c/on-many nodes (c/exec grg/binary :node :id :-q)) + node-id-strs (map (fn [[_ v]] (subs v 0 16)) node-ids)] + (c/on + (jepsen/primary test) + (apply c/exec (concat [grg/binary :layout :assign :-c :1G] node-id-strs))))) (defn configure-absent! - "Configure node to be active in new cluster layout" - [test node] - (info "configure-absent!" node) - (let [node-id (c/on node (c/exec grg/binary :node :id :-q))] - (c/on - (jepsen/primary test) - (c/exec grg/binary :layout :assign (subs node-id 0 16) :-g)))) + "Configure nodes to be active in new cluster layout" + [test nodes] + (info "configure-absent!" nodes) + (let [node-ids (c/on-many nodes (c/exec grg/binary :node :id :-q)) + node-id-strs (map (fn [[_ v]] (subs v 0 16)) node-ids)] + (c/on + (jepsen/primary test) + (apply c/exec (concat [grg/binary :layout :assign :-g] node-id-strs))))) (defn finalize-config! "Apply the proposed cluster layout" @@ -53,14 +56,14 @@ shuffle (split-at cnt))] (info "layout split: keep " keep-nodes ", remove " remove-nodes) - (run! #(configure-present! test %) keep-nodes) - (run! #(configure-absent! test %) remove-nodes) + (configure-present! test keep-nodes) + (configure-absent! test remove-nodes) (finalize-config! test) (assoc op :value keep-nodes)) :stop (do (info "layout un-split: all nodes=" (:nodes test)) - (run! #(configure-present! test %) (:nodes test)) + (configure-present! test (:nodes test)) (finalize-config! test) (assoc op :value (:nodes test))))) @@ -73,70 +76,58 @@ [op] (fn [_ _] {:type :info, :f op})) -(defn scenario-c - "Clock scramble scenario" - [opts] - {:generator (->> - (nemesis-op :clock-scramble) - (gen/stagger 5)) - :nemesis (nemesis/compose - {{:clock-scramble :scramble} (nemesis/clock-scrambler 20.0)})}) - -(defn scenario-cp - "Clock scramble + partition scenario" - [opts] - {:generator (->> - (gen/mix [(nemesis-op :clock-scramble) - (nemesis-op :partition-stop) - (nemesis-op :partition-start)]) - (gen/stagger 5)) - :final-generator (gen/once {:type :info, :f :partition-stop}) - :nemesis (nemesis/compose - {{:clock-scramble :scramble} (nemesis/clock-scrambler 20.0) - {:partition-start :start - :partition-stop :stop} (nemesis/partition-random-halves)})}) - -(defn scenario-r - "Cluster reconfiguration scenario" +(defn reconfiguration-package + "Cluster reconfiguration nemesis package" [opts] {:generator (->> (gen/mix [(nemesis-op :reconfigure-start) (nemesis-op :reconfigure-stop)]) - (gen/stagger 5)) + (gen/stagger (:interval opts 5))) + :final-generator {:type :info, :f :reconfigure-stop} :nemesis (nemesis/compose {{:reconfigure-start :start - :reconfigure-stop :stop} (reconfigure-subset 3)})}) + :reconfigure-stop :stop} (reconfigure-subset 3)}) + :perf #{{:name "reconfigure" + :start #{:reconfigure-start} + :stop #{:reconfigur-stop} + :color "#A197E9"}}}) + +(defn scenario-c + "Clock modifying scenario" + [opts] + (combined/clock-package {:db (:db opts), :interval 1, :faults #{:clock}})) + +(defn scenario-cp + "Clock modifying + partition scenario" + [opts] + (combined/compose-packages + [(combined/clock-package {:db (:db opts), :interval 1, :faults #{:clock}}) + (combined/partition-package {:db (:db opts), :interval 1, :faults #{:partition}})])) + +(defn scenario-r + "Cluster reconfiguration scenario" + [opts] + (reconfiguration-package {:interval 1})) (defn scenario-pr "Partition + cluster reconfiguration scenario" [opts] - {:generator (->> - (gen/mix [(nemesis-op :partition-start) - (nemesis-op :partition-stop) - (nemesis-op :reconfigure-start) - (nemesis-op :reconfigure-stop)]) - (gen/stagger 5)) - :final-generator (gen/once {:type :info, :f :partition-stop}) - :nemesis (nemesis/compose - {{:partition-start :start - :partition-stop :stop} (nemesis/partition-random-halves) - {:reconfigure-start :start - :reconfigure-stop :stop} (reconfigure-subset 3)})}) + (combined/compose-packages + [(combined/partition-package {:db (:db opts), :interval 1, :faults #{:partition}}) + (reconfiguration-package {:interval 1})])) (defn scenario-cpr "Clock scramble + partition + cluster reconfiguration scenario" [opts] - {:generator (->> - (gen/mix [(nemesis-op :clock-scramble) - (nemesis-op :partition-start) - (nemesis-op :partition-stop) - (nemesis-op :reconfigure-start) - (nemesis-op :reconfigure-stop)]) - (gen/stagger 5)) - :final-generator (gen/once {:type :info, :f :partition-stop}) - :nemesis (nemesis/compose - {{:clock-scramble :scramble} (nemesis/clock-scrambler 20.0) - {:partition-start :start - :partition-stop :stop} (nemesis/partition-random-halves) - {:reconfigure-start :start - :reconfigure-stop :stop} (reconfigure-subset 3)})}) + (combined/compose-packages + [(combined/clock-package {:db (:db opts), :interval 1, :faults #{:clock}}) + (combined/partition-package {:db (:db opts), :interval 1, :faults #{:partition}}) + (reconfiguration-package {:interval 1})])) + +(defn scenario-dpr + "Db + partition + cluster reconfiguration scenario" + [opts] + (combined/compose-packages + [(combined/db-package {:db (:db opts), :interval 1, :faults #{:db :pause :kill}}) + (combined/partition-package {:db (:db opts), :interval 1, :faults #{:partition}}) + (reconfiguration-package {:interval 1})])) diff --git a/script/jepsen.garage/src/jepsen/garage/reg.clj b/script/jepsen.garage/src/jepsen/garage/reg.clj index 6772abfe..39708c0b 100644 --- a/script/jepsen.garage/src/jepsen/garage/reg.clj +++ b/script/jepsen.garage/src/jepsen/garage/reg.clj @@ -30,21 +30,28 @@ (assoc this :creds (grg/creds node))) (setup! [this test]) (invoke! [this test op] - (let [[k v] (:value op)] - (case (:f op) - :read - (util/timeout - 10000 - (assoc op :type :fail, :error ::timeout) - (let [value (s3/get (:creds this) k)] - (assoc op :type :ok, :value (independent/tuple k value)))) - :write - (util/timeout - 10000 - (assoc op :type :info, :error ::timeout) - (do - (s3/put (:creds this) k v) - (assoc op :type :ok)))))) + (try+ + (let [[k v] (:value op)] + (case (:f op) + :read + (util/timeout + 10000 + (assoc op :type :fail, :error ::timeout) + (let [value (s3/get (:creds this) k)] + (assoc op :type :ok, :value (independent/tuple k value)))) + :write + (util/timeout + 10000 + (assoc op :type :info, :error ::timeout) + (do + (s3/put (:creds this) k v) + (assoc op :type :ok))))) + (catch (re-find #"Unavailable" (.getMessage %)) ex + (assoc op :type :info, :error ::unavailable)) + (catch (re-find #"Broken pipe" (.getMessage %)) ex + (assoc op :type :info, :error ::broken-pipe)) + (catch (re-find #"Connection refused" (.getMessage %)) ex + (assoc op :type :info, :error ::connection-refused)))) (teardown! [this test]) (close! [this test])) diff --git a/script/jepsen.garage/src/jepsen/garage/set.clj b/script/jepsen.garage/src/jepsen/garage/set.clj index f625e672..670c73f2 100644 --- a/script/jepsen.garage/src/jepsen/garage/set.clj +++ b/script/jepsen.garage/src/jepsen/garage/set.clj @@ -30,27 +30,34 @@ (assoc this :creds (grg/creds node))) (setup! [this test]) (invoke! [this test op] - (let [[k v] (:value op) - prefix (str "set" k "/")] - (case (:f op) - :add - (util/timeout - 10000 - (assoc op :type :info, :error ::timeout) - (do - (s3/put (:creds this) (str prefix v) "present") - (assoc op :type :ok))) - :read - (util/timeout - 10000 - (assoc op :type :fail, :error ::timeout) - (do - (let [items (s3/list (:creds this) prefix)] - (let [items-stripped (map (fn [o] - (assert (str/starts-with? o prefix)) - (str/replace-first o prefix "")) items) - items-set (set (map parse-long items-stripped))] - (assoc op :type :ok, :value (independent/tuple k items-set))))))))) + (try+ + (let [[k v] (:value op) + prefix (str "set" k "/")] + (case (:f op) + :add + (util/timeout + 10000 + (assoc op :type :info, :error ::timeout) + (do + (s3/put (:creds this) (str prefix v) "present") + (assoc op :type :ok))) + :read + (util/timeout + 10000 + (assoc op :type :fail, :error ::timeout) + (do + (let [items (s3/list (:creds this) prefix)] + (let [items-stripped (map (fn [o] + (assert (str/starts-with? o prefix)) + (str/replace-first o prefix "")) items) + items-set (set (map parse-long items-stripped))] + (assoc op :type :ok, :value (independent/tuple k items-set)))))))) + (catch (re-find #"Unavailable" (.getMessage %)) ex + (assoc op :type :info, :error ::unavailable)) + (catch (re-find #"Broken pipe" (.getMessage %)) ex + (assoc op :type :info, :error ::broken-pipe)) + (catch (re-find #"Connection refused" (.getMessage %)) ex + (assoc op :type :info, :error ::connection-refused)))) (teardown! [this test]) (close! [this test])) From cfbfa09d24727e83bc042764dad2751e944fc939 Mon Sep 17 00:00:00 2001 From: Alex Auvolat Date: Wed, 25 Oct 2023 11:50:16 +0200 Subject: [PATCH 071/538] jepsen: fix set2 test omg finally this is so stupid --- script/jepsen.garage/src/jepsen/garage/set.clj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/script/jepsen.garage/src/jepsen/garage/set.clj b/script/jepsen.garage/src/jepsen/garage/set.clj index 670c73f2..a73b8efc 100644 --- a/script/jepsen.garage/src/jepsen/garage/set.clj +++ b/script/jepsen.garage/src/jepsen/garage/set.clj @@ -81,7 +81,7 @@ ([:invoke :read]) (assoc-in state [:read-must-contain (:process op)] (:add-done state)) ([:ok :read]) - (let [read-must-contain (get (:process op) (:read-must-contain state)) + (let [read-must-contain (get (:read-must-contain state) (:process op)) new-missed (set/difference read-must-contain (:value op)) new-unexpected (set/difference (:value op) (:add-started state))] (assoc state From fd85010a403775bbb18030ae2d9d3689b34f3e8a Mon Sep 17 00:00:00 2001 From: Alex Auvolat Date: Wed, 25 Oct 2023 12:13:27 +0200 Subject: [PATCH 072/538] jepsen: failures with set2 test in --scenario r --- script/jepsen.garage/README.md | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/script/jepsen.garage/README.md b/script/jepsen.garage/README.md index ced8ebb5..5e50a0f4 100644 --- a/script/jepsen.garage/README.md +++ b/script/jepsen.garage/README.md @@ -86,7 +86,7 @@ Results: - Does not seem to fail with only the layout reconfiguation nemesis (<10 runs), although theoretically it could - **Fails with the partition + layout reconfiguration nemesis** (`--scenario pr`). - EXample of a failed run: `garage set1/20231024T172214.488+0200` (1 failure in 4 runs). + Example of a failed run: `garage set1/20231024T172214.488+0200` (1 failure in 4 runs). ### Set, continuous test (interspersed reads and writes) @@ -97,11 +97,10 @@ Results: - For now, no failures with clock-scramble nemesis + partition nemesis -> TODO long test run -- Does not seem to fail with partition + layout reconfiguration nemesis (>100 runs) - -- Does not seem to fail with the clock scrambler + partition + layout reconfiguation nemesis (>10 runs), although theoretically it could - -TODO: make it fail!!! +- **Fails with layout reconfiguration nemesis** (`--scenario r`). + Example of a failed run: `garage set2/20231025T115033.553+0200` (2 failures in 2 runs). + TODO: investigate. + This is the failure mode we are looking for and trying to fix for NLnet task 3. ## Investigating (and fixing) errors From 9df7fa0bcd8b00dee5926fe7778853d857b5636d Mon Sep 17 00:00:00 2001 From: Alex Auvolat Date: Wed, 25 Oct 2023 14:04:39 +0200 Subject: [PATCH 073/538] jepsen: use 7 nodes --- script/jepsen.garage/README.md | 2 ++ script/jepsen.garage/Vagrantfile | 1 + script/jepsen.garage/nodes.vagrant | 1 + 3 files changed, 4 insertions(+) diff --git a/script/jepsen.garage/README.md b/script/jepsen.garage/README.md index 5e50a0f4..0d647c72 100644 --- a/script/jepsen.garage/README.md +++ b/script/jepsen.garage/README.md @@ -87,6 +87,8 @@ Results: - **Fails with the partition + layout reconfiguration nemesis** (`--scenario pr`). Example of a failed run: `garage set1/20231024T172214.488+0200` (1 failure in 4 runs). + TODO: investigate. + This is the failure mode we are looking for and trying to fix for NLnet task 3. ### Set, continuous test (interspersed reads and writes) diff --git a/script/jepsen.garage/Vagrantfile b/script/jepsen.garage/Vagrantfile index 1125bccf..4d02397d 100644 --- a/script/jepsen.garage/Vagrantfile +++ b/script/jepsen.garage/Vagrantfile @@ -28,4 +28,5 @@ Vagrant.configure("2") do |config| config.vm.define "n4" do |config| vm(config, "n4", "192.168.56.24") end config.vm.define "n5" do |config| vm(config, "n5", "192.168.56.25") end config.vm.define "n6" do |config| vm(config, "n6", "192.168.56.26") end + config.vm.define "n7" do |config| vm(config, "n7", "192.168.56.27") end end diff --git a/script/jepsen.garage/nodes.vagrant b/script/jepsen.garage/nodes.vagrant index 3f7e2b42..9e5694e6 100644 --- a/script/jepsen.garage/nodes.vagrant +++ b/script/jepsen.garage/nodes.vagrant @@ -4,3 +4,4 @@ 192.168.56.24 192.168.56.25 192.168.56.26 +192.168.56.27 From 5b1f50be65c251a1dc0a4358c706c409f17a82c0 Mon Sep 17 00:00:00 2001 From: Alex Auvolat Date: Wed, 25 Oct 2023 14:43:24 +0200 Subject: [PATCH 074/538] jepsen: testing --- script/jepsen.garage/README.md | 6 +++--- script/jepsen.garage/src/jepsen/garage.clj | 1 + script/jepsen.garage/src/jepsen/garage/nemesis.clj | 9 +++++++++ 3 files changed, 13 insertions(+), 3 deletions(-) diff --git a/script/jepsen.garage/README.md b/script/jepsen.garage/README.md index 0d647c72..464da4da 100644 --- a/script/jepsen.garage/README.md +++ b/script/jepsen.garage/README.md @@ -97,10 +97,10 @@ Command: `lein run test --nodes-file nodes.vagrant --time-limit 60 --rate 100 - Results: -- For now, no failures with clock-scramble nemesis + partition nemesis -> TODO long test run +- No failures with clock-scramble nemesis + db nemesis + partition nemesis (`--scenario cdp`) (0 failures in 10 runs). -- **Fails with layout reconfiguration nemesis** (`--scenario r`). - Example of a failed run: `garage set2/20231025T115033.553+0200` (2 failures in 2 runs). +- **Fails with just layout reconfiguration nemesis** (`--scenario r`). + Example of a failed run: `garage set2/20231025T141940.198+0200` (10 failures in 10 runs). TODO: investigate. This is the failure mode we are looking for and trying to fix for NLnet task 3. diff --git a/script/jepsen.garage/src/jepsen/garage.clj b/script/jepsen.garage/src/jepsen/garage.clj index 3fe527a6..17363c9d 100644 --- a/script/jepsen.garage/src/jepsen/garage.clj +++ b/script/jepsen.garage/src/jepsen/garage.clj @@ -28,6 +28,7 @@ "r" grgNemesis/scenario-r "pr" grgNemesis/scenario-pr "cpr" grgNemesis/scenario-cpr + "cdp" grgNemesis/scenario-cdp "dpr" grgNemesis/scenario-dpr}) (def patches diff --git a/script/jepsen.garage/src/jepsen/garage/nemesis.clj b/script/jepsen.garage/src/jepsen/garage/nemesis.clj index 0222e463..dfce0255 100644 --- a/script/jepsen.garage/src/jepsen/garage/nemesis.clj +++ b/script/jepsen.garage/src/jepsen/garage/nemesis.clj @@ -124,6 +124,14 @@ (combined/partition-package {:db (:db opts), :interval 1, :faults #{:partition}}) (reconfiguration-package {:interval 1})])) +(defn scenario-cdp + "Clock modifying + db + partition scenario" + [opts] + (combined/compose-packages + [(combined/clock-package {:db (:db opts), :interval 1, :faults #{:clock}}) + (combined/db-package {:db (:db opts), :interval 1, :faults #{:db :pause :kill}}) + (combined/partition-package {:db (:db opts), :interval 1, :faults #{:partition}})])) + (defn scenario-dpr "Db + partition + cluster reconfiguration scenario" [opts] @@ -131,3 +139,4 @@ [(combined/db-package {:db (:db opts), :interval 1, :faults #{:db :pause :kill}}) (combined/partition-package {:db (:db opts), :interval 1, :faults #{:partition}}) (reconfiguration-package {:interval 1})])) + From d50fa2a562f632752273fcc752203b9edcf58732 Mon Sep 17 00:00:00 2001 From: Alex Auvolat Date: Thu, 26 Oct 2023 11:19:22 +0200 Subject: [PATCH 075/538] nix: add clang to flake.nix and shell.nix --- flake.nix | 1 + shell.nix | 1 + 2 files changed, 2 insertions(+) diff --git a/flake.nix b/flake.nix index f8d7d4df..5cb2c407 100644 --- a/flake.nix +++ b/flake.nix @@ -50,6 +50,7 @@ release = false; }).workspaceShell { packages = with pkgs; [ rustfmt + clang mold ]; }; }); diff --git a/shell.nix b/shell.nix index 88e292a8..991417b5 100644 --- a/shell.nix +++ b/shell.nix @@ -18,6 +18,7 @@ in { nativeBuildInputs = with pkgs; [ #rustPlatform.rust.rustc rustPlatform.rust.cargo + clang mold #clippy rustfmt From f83fa021937978e79c917c08b3499ba866120284 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?F=C3=A9lix=20Baylac=20Jacqu=C3=A9?= Date: Wed, 25 Oct 2023 11:34:39 +0200 Subject: [PATCH 076/538] Add allow_world_readable_secrets option to config file Sometimes, the secret files permissions checks gets in the way. It's by no mean complete, it doesn't take the Posix ACLs into account among other things. Correctly checking the ACLs would be too involving (see https://git.deuxfleurs.fr/Deuxfleurs/garage/issues/658#issuecomment-7102) and would likely still fail in some weird chmod settings. We're adding a new configuration file key allowing the user to disable this permission check altogether. The (already existing) env variable counterpart always take precedence to this config file option. That's useful in cases where the configuration file is static and cannot be easily altered. Fixes https://git.deuxfleurs.fr/Deuxfleurs/garage/issues/658 Co-authored-by: Florian Klink --- doc/book/reference-manual/configuration.md | 12 ++++ src/util/config.rs | 82 ++++++++++++++++++++-- 2 files changed, 89 insertions(+), 5 deletions(-) diff --git a/doc/book/reference-manual/configuration.md b/doc/book/reference-manual/configuration.md index 2a8c5df5..a536dd02 100644 --- a/doc/book/reference-manual/configuration.md +++ b/doc/book/reference-manual/configuration.md @@ -323,6 +323,18 @@ be obtained by running `garage node id` and then included directly in the key will be returned by `garage node id` and you will have to add the IP yourself. +### `allow_world_readable_secrets` + +Garage checks the permissions of your secret files to make sure +they're not world-readable. In some cases, the check might fail and +consider your files as world-readable even if they're not. Such as +when using Posix ACLs. + +Setting `allow_world_readable_secrets` to `true` bypass this +permission verification. + +Alternatively, you can set the `GARAGE_ALLOW_WORLD_READABLE_SECRETS` +environment variable to `true` to bypass the permissions check. ## The `[consul_discovery]` section diff --git a/src/util/config.rs b/src/util/config.rs index 756f7ec5..2271dd1c 100644 --- a/src/util/config.rs +++ b/src/util/config.rs @@ -38,11 +38,15 @@ pub struct Config { )] pub compression_level: Option, + /// Skip the permission check of secret files. Useful when + /// POSIX ACLs (or more complex chmods) are used. + #[serde(default)] + pub allow_world_readable_secrets: bool, + /// RPC secret key: 32 bytes hex encoded pub rpc_secret: Option, /// Optional file where RPC secret key is read from pub rpc_secret_file: Option, - /// Address to bind for RPC pub rpc_bind_addr: SocketAddr, /// Public IP address of this node @@ -223,16 +227,19 @@ pub fn read_config(config_file: PathBuf) -> Result { &mut parsed_config.rpc_secret, &parsed_config.rpc_secret_file, "rpc_secret", + parsed_config.allow_world_readable_secrets, )?; secret_from_file( &mut parsed_config.admin.metrics_token, &parsed_config.admin.metrics_token_file, "admin.metrics_token", + parsed_config.allow_world_readable_secrets, )?; secret_from_file( &mut parsed_config.admin.admin_token, &parsed_config.admin.admin_token_file, "admin.admin_token", + parsed_config.allow_world_readable_secrets, )?; Ok(parsed_config) @@ -260,6 +267,7 @@ fn secret_from_file( secret: &mut Option, secret_file: &Option, name: &'static str, + conf_allow_world_readable: bool, ) -> Result<(), Error> { match (&secret, &secret_file) { (_, None) => { @@ -268,7 +276,37 @@ fn secret_from_file( (Some(_), Some(_)) => { return Err(format!("only one of `{}` and `{}_file` can be set", name, name).into()); } - (None, Some(file_path)) => *secret = Some(read_secret_file(file_path)?), + (None, Some(file_path)) => { + #[cfg(unix)] + // decide whether to ignore or check permission + // bits. GARAGE_ALLOW_WORLD_READABLE_SECRETS + // always takes precedence over what's specified + // in the config file, to allow overriding it in + // case the config file is read-only. + let ignore_perms = { + let ignore_perms_env = std::env::var("GARAGE_ALLOW_WORLD_READABLE_SECRETS"); + if ignore_perms_env.as_deref() == Ok("true") { + true + } else if ignore_perms_env.as_deref() == Ok("false") { + false + } else { + conf_allow_world_readable + } + }; + if !ignore_perms { + use std::os::unix::fs::MetadataExt; + let metadata = std::fs::metadata(file_path)?; + if metadata.mode() & 0o077 != 0 { + return Err(format!("File {} is world-readable! (mode: 0{:o}, expected 0600)\nRefusing to start until this is fixed, or environment variable GARAGE_ALLOW_WORLD_READABLE_SECRETS is set to true.", file_path, metadata.mode()).into()); + } + } + let mut file = std::fs::OpenOptions::new().read(true).open(file_path)?; + let mut secret_buf = String::new(); + file.read_to_string(&mut secret_buf)?; + // trim_end: allows for use case such as `echo "$(openssl rand -hex 32)" > somefile`. + // also editors sometimes add a trailing newline + *secret = Some(String::from(secret_buf.trim_end())); + } } Ok(()) } @@ -427,11 +465,34 @@ mod tests { "#, path_secret_path.display() )?; - let config = super::read_config(path_config.to_path_buf())?; - assert_eq!("foo", config.rpc_secret.unwrap()); + // Second configuration file, same as previous one + // except it allows world-readable secrets. + let path_config_allow_world_readable = mktemp::Temp::new_file()?; + let mut file_config_allow_world_readable = + File::create(path_config_allow_world_readable.as_path())?; + writeln!( + file_config_allow_world_readable, + r#" + metadata_dir = "/tmp/garage/meta" + data_dir = "/tmp/garage/data" + replication_mode = "3" + rpc_bind_addr = "[::]:3901" + rpc_secret_file = "{}" + allow_world_readable_secrets = true + + [s3_api] + s3_region = "garage" + api_bind_addr = "[::]:3900" + "#, + path_secret_path.display() + )?; + + let mut config = super::read_config(path_config.to_path_buf())?; + assert_eq!("foo", config.rpc_secret.unwrap()); #[cfg(unix)] { + // Check non world-readable secrets config use std::os::unix::fs::PermissionsExt; let metadata = std::fs::metadata(&path_secret_path)?; let mut perm = metadata.permissions(); @@ -443,8 +504,19 @@ mod tests { std::env::set_var("GARAGE_ALLOW_WORLD_READABLE_SECRETS", "true"); assert!(super::read_config(path_config.to_path_buf()).is_ok()); - } + std::env::remove_var("GARAGE_ALLOW_WORLD_READABLE_SECRETS"); + + // Check world-readable secrets config. + assert!(super::read_config(path_config_allow_world_readable.to_path_buf()).is_ok()); + + std::env::set_var("GARAGE_ALLOW_WORLD_READABLE_SECRETS", "false"); + assert!(super::read_config(path_config_allow_world_readable.to_path_buf()).is_err()); + + std::env::set_var("GARAGE_ALLOW_WORLD_READABLE_SECRETS", "true"); + assert!(super::read_config(path_config_allow_world_readable.to_path_buf()).is_ok()); + } + std::env::remove_var("GARAGE_ALLOW_WORLD_READABLE_SECRETS"); drop(path_config); drop(path_secret); drop(file_config); From 0962313ebd45abb116d6ad2ee0eb754f587fc299 Mon Sep 17 00:00:00 2001 From: Alex Auvolat Date: Wed, 8 Nov 2023 13:11:13 +0100 Subject: [PATCH 077/538] garage_rpc: reorder functions in layout.rs --- src/rpc/layout.rs | 223 +++++++++++++++++++++++----------------------- 1 file changed, 113 insertions(+), 110 deletions(-) diff --git a/src/rpc/layout.rs b/src/rpc/layout.rs index e02a180b..368a9d2c 100644 --- a/src/rpc/layout.rs +++ b/src/rpc/layout.rs @@ -278,11 +278,119 @@ impl ClusterLayout { ret } + // ===================== accessors ====================== + + /// Returns a list of IDs of nodes that currently have + /// a role in the cluster + pub fn node_ids(&self) -> &[Uuid] { + &self.node_id_vec[..] + } + + pub fn num_nodes(&self) -> usize { + self.node_id_vec.len() + } + + /// Returns the role of a node in the layout + pub fn node_role(&self, node: &Uuid) -> Option<&NodeRole> { + match self.roles.get(node) { + Some(NodeRoleV(Some(v))) => Some(v), + _ => None, + } + } + + /// Given a node uuids, this function returns its capacity or fails if it does not have any + pub fn get_node_capacity(&self, uuid: &Uuid) -> Result { + match self.node_role(uuid) { + Some(NodeRole { + capacity: Some(cap), + zone: _, + tags: _, + }) => Ok(*cap), + _ => Err(Error::Message( + "The Uuid does not correspond to a node present in the \ + cluster or this node does not have a positive capacity." + .into(), + )), + } + } + + /// Returns the number of partitions associated to this node in the ring + pub fn get_node_usage(&self, uuid: &Uuid) -> Result { + for (i, id) in self.node_id_vec.iter().enumerate() { + if id == uuid { + let mut count = 0; + for nod in self.ring_assignment_data.iter() { + if i as u8 == *nod { + count += 1 + } + } + return Ok(count); + } + } + Err(Error::Message( + "The Uuid does not correspond to a node present in the \ + cluster or this node does not have a positive capacity." + .into(), + )) + } + + // ===================== internal information extractors ====================== + + /// Returns the uuids of the non_gateway nodes in self.node_id_vec. + fn nongateway_nodes(&self) -> Vec { + let mut result = Vec::::new(); + for uuid in self.node_id_vec.iter() { + match self.node_role(uuid) { + Some(role) if role.capacity.is_some() => result.push(*uuid), + _ => (), + } + } + result + } + + /// Given a node uuids, this function returns the label of its zone + fn get_node_zone(&self, uuid: &Uuid) -> Result<&str, Error> { + match self.node_role(uuid) { + Some(role) => Ok(&role.zone), + _ => Err(Error::Message( + "The Uuid does not correspond to a node present in the cluster.".into(), + )), + } + } + + /// Returns the sum of capacities of non gateway nodes in the cluster + fn get_total_capacity(&self) -> Result { + let mut total_capacity = 0; + for uuid in self.nongateway_nodes().iter() { + total_capacity += self.get_node_capacity(uuid)?; + } + Ok(total_capacity) + } + + /// Returns the effective value of the zone_redundancy parameter + fn effective_zone_redundancy(&self) -> usize { + match self.parameters.zone_redundancy { + ZoneRedundancy::AtLeast(v) => v, + ZoneRedundancy::Maximum => { + let n_zones = self + .roles + .items() + .iter() + .filter_map(|(_, _, role)| role.0.as_ref().map(|x| x.zone.as_str())) + .collect::>() + .len(); + std::cmp::min(n_zones, self.replication_factor) + } + } + } + fn calculate_staging_hash(&self) -> Hash { let hashed_tuple = (&self.staging_roles, &self.staging_parameters); blake2sum(&nonversioned_encode(&hashed_tuple).unwrap()[..]) } + // ================== updates to layout, public interface =================== + pub fn merge(&mut self, other: &ClusterLayout) -> bool { match other.version.cmp(&self.version) { Ordering::Greater => { @@ -359,108 +467,6 @@ To know the correct value of the new layout version, invoke `garage layout show` Ok(self) } - /// Returns a list of IDs of nodes that currently have - /// a role in the cluster - pub fn node_ids(&self) -> &[Uuid] { - &self.node_id_vec[..] - } - - pub fn num_nodes(&self) -> usize { - self.node_id_vec.len() - } - - /// Returns the role of a node in the layout - pub fn node_role(&self, node: &Uuid) -> Option<&NodeRole> { - match self.roles.get(node) { - Some(NodeRoleV(Some(v))) => Some(v), - _ => None, - } - } - - /// Returns the uuids of the non_gateway nodes in self.node_id_vec. - fn nongateway_nodes(&self) -> Vec { - let mut result = Vec::::new(); - for uuid in self.node_id_vec.iter() { - match self.node_role(uuid) { - Some(role) if role.capacity.is_some() => result.push(*uuid), - _ => (), - } - } - result - } - - /// Given a node uuids, this function returns the label of its zone - fn get_node_zone(&self, uuid: &Uuid) -> Result { - match self.node_role(uuid) { - Some(role) => Ok(role.zone.clone()), - _ => Err(Error::Message( - "The Uuid does not correspond to a node present in the cluster.".into(), - )), - } - } - - /// Given a node uuids, this function returns its capacity or fails if it does not have any - pub fn get_node_capacity(&self, uuid: &Uuid) -> Result { - match self.node_role(uuid) { - Some(NodeRole { - capacity: Some(cap), - zone: _, - tags: _, - }) => Ok(*cap), - _ => Err(Error::Message( - "The Uuid does not correspond to a node present in the \ - cluster or this node does not have a positive capacity." - .into(), - )), - } - } - - /// Returns the number of partitions associated to this node in the ring - pub fn get_node_usage(&self, uuid: &Uuid) -> Result { - for (i, id) in self.node_id_vec.iter().enumerate() { - if id == uuid { - let mut count = 0; - for nod in self.ring_assignment_data.iter() { - if i as u8 == *nod { - count += 1 - } - } - return Ok(count); - } - } - Err(Error::Message( - "The Uuid does not correspond to a node present in the \ - cluster or this node does not have a positive capacity." - .into(), - )) - } - - /// Returns the sum of capacities of non gateway nodes in the cluster - fn get_total_capacity(&self) -> Result { - let mut total_capacity = 0; - for uuid in self.nongateway_nodes().iter() { - total_capacity += self.get_node_capacity(uuid)?; - } - Ok(total_capacity) - } - - /// Returns the effective value of the zone_redundancy parameter - fn effective_zone_redundancy(&self) -> usize { - match self.parameters.zone_redundancy { - ZoneRedundancy::AtLeast(v) => v, - ZoneRedundancy::Maximum => { - let n_zones = self - .roles - .items() - .iter() - .filter_map(|(_, _, role)| role.0.as_ref().map(|x| x.zone.as_str())) - .collect::>() - .len(); - std::cmp::min(n_zones, self.replication_factor) - } - } - } - /// Check a cluster layout for internal consistency /// (assignment, roles, parameters, partition size) /// returns true if consistent, false if error @@ -574,12 +580,9 @@ To know the correct value of the new layout version, invoke `garage layout show` Ok(()) } -} -// ==================================================================================== + // ================== updates to layout, internals =================== -// Implementation of the ClusterLayout methods related to the assignment algorithm. -impl ClusterLayout { /// This function calculates a new partition-to-node assignment. /// The computed assignment respects the node replication factor /// and the zone redundancy parameter It maximizes the capacity of a @@ -867,7 +870,7 @@ impl ClusterLayout { } for n in 0..self.nongateway_nodes().len() { let node_capacity = self.get_node_capacity(&self.node_id_vec[n])?; - let node_zone = zone_to_id[&self.get_node_zone(&self.node_id_vec[n])?]; + let node_zone = zone_to_id[self.get_node_zone(&self.node_id_vec[n])?]; g.add_edge(Vertex::N(n), Vertex::Sink, node_capacity / partition_size)?; for p in 0..NB_PARTITIONS { if !exclude_assoc.contains(&(p, n)) { @@ -913,7 +916,7 @@ impl ClusterLayout { // The algorithm is such that it will start with the flow that we just computed // and find ameliorating paths from that. for (p, n) in exclude_edge.iter() { - let node_zone = zone_to_id[&self.get_node_zone(&self.node_id_vec[*n])?]; + let node_zone = zone_to_id[self.get_node_zone(&self.node_id_vec[*n])?]; g.add_edge(Vertex::PZ(*p, node_zone), Vertex::N(*n), 1)?; } g.compute_maximal_flow()?; @@ -933,7 +936,7 @@ impl ClusterLayout { let mut cost = CostFunction::new(); for (p, assoc_p) in prev_assign.iter().enumerate() { for n in assoc_p.iter() { - let node_zone = zone_to_id[&self.get_node_zone(&self.node_id_vec[*n])?]; + let node_zone = zone_to_id[self.get_node_zone(&self.node_id_vec[*n])?]; cost.insert((Vertex::PZ(p, node_zone), Vertex::N(*n)), -1); } } @@ -1035,7 +1038,7 @@ impl ClusterLayout { let mut old_zones_of_p = Vec::::new(); for n in prev_assign[p].iter() { old_zones_of_p - .push(zone_to_id[&self.get_node_zone(&self.node_id_vec[*n])?]); + .push(zone_to_id[self.get_node_zone(&self.node_id_vec[*n])?]); } if !old_zones_of_p.contains(&z) { new_partitions_zone[z] += 1; From 12d1dbfc6b884be488e2d79c0b9e3c47490f5442 Mon Sep 17 00:00:00 2001 From: Alex Auvolat Date: Wed, 8 Nov 2023 15:41:24 +0100 Subject: [PATCH 078/538] remove Ring and use ClusterLayout everywhere --- src/api/admin/bucket.rs | 4 +- src/api/k2v/index.rs | 8 +- src/api/s3/put.rs | 2 +- src/garage/admin/bucket.rs | 4 +- src/garage/admin/mod.rs | 20 ++-- src/model/helper/bucket.rs | 6 +- src/model/index_counter.rs | 6 +- src/rpc/layout.rs | 72 +++++++++++- src/rpc/lib.rs | 1 - src/rpc/ring.rs | 164 ---------------------------- src/rpc/rpc_helper.rs | 14 +-- src/rpc/system.rs | 55 +++++----- src/table/merkle.rs | 2 +- src/table/replication/fullcopy.rs | 8 +- src/table/replication/parameters.rs | 2 +- src/table/replication/sharded.rs | 14 +-- src/table/sync.rs | 20 ++-- 17 files changed, 148 insertions(+), 254 deletions(-) delete mode 100644 src/rpc/ring.rs diff --git a/src/api/admin/bucket.rs b/src/api/admin/bucket.rs index 17f46c30..6bff7e9f 100644 --- a/src/api/admin/bucket.rs +++ b/src/api/admin/bucket.rs @@ -122,7 +122,7 @@ async fn bucket_info_results( .table .get(&bucket_id, &EmptyKey) .await? - .map(|x| x.filtered_values(&garage.system.ring.borrow())) + .map(|x| x.filtered_values(&garage.system.layout_watch.borrow())) .unwrap_or_default(); let mpu_counters = garage @@ -130,7 +130,7 @@ async fn bucket_info_results( .table .get(&bucket_id, &EmptyKey) .await? - .map(|x| x.filtered_values(&garage.system.ring.borrow())) + .map(|x| x.filtered_values(&garage.system.layout_watch.borrow())) .unwrap_or_default(); let mut relevant_keys = HashMap::new(); diff --git a/src/api/k2v/index.rs b/src/api/k2v/index.rs index 6c1d4a91..ff8beda3 100644 --- a/src/api/k2v/index.rs +++ b/src/api/k2v/index.rs @@ -5,7 +5,7 @@ use serde::Serialize; use garage_util::data::*; -use garage_rpc::ring::Ring; +use garage_rpc::layout::ClusterLayout; use garage_table::util::*; use garage_model::garage::Garage; @@ -26,7 +26,7 @@ pub async fn handle_read_index( ) -> Result, Error> { let reverse = reverse.unwrap_or(false); - let ring: Arc = garage.system.ring.borrow().clone(); + let layout: Arc = garage.system.layout_watch.borrow().clone(); let (partition_keys, more, next_start) = read_range( &garage.k2v.counter_table.table, @@ -35,7 +35,7 @@ pub async fn handle_read_index( &start, &end, limit, - Some((DeletedFilter::NotDeleted, ring.layout.node_id_vec.clone())), + Some((DeletedFilter::NotDeleted, layout.node_id_vec.clone())), EnumerationOrder::from_reverse(reverse), ) .await?; @@ -54,7 +54,7 @@ pub async fn handle_read_index( partition_keys: partition_keys .into_iter() .map(|part| { - let vals = part.filtered_values(&ring); + let vals = part.filtered_values(&layout); ReadIndexResponseEntry { pk: part.sk, entries: *vals.get(&s_entries).unwrap_or(&0), diff --git a/src/api/s3/put.rs b/src/api/s3/put.rs index 606facc4..fc17ed03 100644 --- a/src/api/s3/put.rs +++ b/src/api/s3/put.rs @@ -253,7 +253,7 @@ pub(crate) async fn check_quotas( .await?; let counters = counters - .map(|x| x.filtered_values(&garage.system.ring.borrow())) + .map(|x| x.filtered_values(&garage.system.layout_watch.borrow())) .unwrap_or_default(); let (prev_cnt_obj, prev_cnt_size) = match prev_object { diff --git a/src/garage/admin/bucket.rs b/src/garage/admin/bucket.rs index 0781cb8b..34e48292 100644 --- a/src/garage/admin/bucket.rs +++ b/src/garage/admin/bucket.rs @@ -70,7 +70,7 @@ impl AdminRpcHandler { .table .get(&bucket_id, &EmptyKey) .await? - .map(|x| x.filtered_values(&self.garage.system.ring.borrow())) + .map(|x| x.filtered_values(&self.garage.system.layout_watch.borrow())) .unwrap_or_default(); let mpu_counters = self @@ -79,7 +79,7 @@ impl AdminRpcHandler { .table .get(&bucket_id, &EmptyKey) .await? - .map(|x| x.filtered_values(&self.garage.system.ring.borrow())) + .map(|x| x.filtered_values(&self.garage.system.layout_watch.borrow())) .unwrap_or_default(); let mut relevant_keys = HashMap::new(); diff --git a/src/garage/admin/mod.rs b/src/garage/admin/mod.rs index b6f9c426..006f71cd 100644 --- a/src/garage/admin/mod.rs +++ b/src/garage/admin/mod.rs @@ -18,7 +18,7 @@ use garage_util::error::Error as GarageError; use garage_table::replication::*; use garage_table::*; -use garage_rpc::ring::PARTITION_BITS; +use garage_rpc::layout::PARTITION_BITS; use garage_rpc::*; use garage_block::manager::BlockResyncErrorInfo; @@ -126,8 +126,8 @@ impl AdminRpcHandler { opt_to_send.all_nodes = false; let mut failures = vec![]; - let ring = self.garage.system.ring.borrow().clone(); - for node in ring.layout.node_ids().iter() { + let layout = self.garage.system.layout_watch.borrow().clone(); + for node in layout.node_ids().iter() { let node = (*node).into(); let resp = self .endpoint @@ -163,9 +163,9 @@ impl AdminRpcHandler { async fn handle_stats(&self, opt: StatsOpt) -> Result { if opt.all_nodes { let mut ret = String::new(); - let ring = self.garage.system.ring.borrow().clone(); + let layout = self.garage.system.layout_watch.borrow().clone(); - for node in ring.layout.node_ids().iter() { + for node in layout.node_ids().iter() { let mut opt = opt.clone(); opt.all_nodes = false; opt.skip_global = true; @@ -275,7 +275,7 @@ impl AdminRpcHandler { let mut ret = String::new(); // Gather storage node and free space statistics - let layout = &self.garage.system.ring.borrow().layout; + let layout = &self.garage.system.layout_watch.borrow(); let mut node_partition_count = HashMap::::new(); for short_id in layout.ring_assignment_data.iter() { let id = layout.node_id_vec[*short_id as usize]; @@ -440,8 +440,8 @@ impl AdminRpcHandler { ) -> Result { if all_nodes { let mut ret = vec![]; - let ring = self.garage.system.ring.borrow().clone(); - for node in ring.layout.node_ids().iter() { + let layout = self.garage.system.layout_watch.borrow().clone(); + for node in layout.node_ids().iter() { let node = (*node).into(); match self .endpoint @@ -488,8 +488,8 @@ impl AdminRpcHandler { ) -> Result { if all_nodes { let mut ret = vec![]; - let ring = self.garage.system.ring.borrow().clone(); - for node in ring.layout.node_ids().iter() { + let layout = self.garage.system.layout_watch.borrow().clone(); + for node in layout.node_ids().iter() { let node = (*node).into(); match self .endpoint diff --git a/src/model/helper/bucket.rs b/src/model/helper/bucket.rs index 576d03f3..d43d7e96 100644 --- a/src/model/helper/bucket.rs +++ b/src/model/helper/bucket.rs @@ -450,10 +450,10 @@ impl<'a> BucketHelper<'a> { #[cfg(feature = "k2v")] { - use garage_rpc::ring::Ring; + use garage_rpc::layout::ClusterLayout; use std::sync::Arc; - let ring: Arc = self.0.system.ring.borrow().clone(); + let layout: Arc = self.0.system.layout_watch.borrow().clone(); let k2vindexes = self .0 .k2v @@ -462,7 +462,7 @@ impl<'a> BucketHelper<'a> { .get_range( &bucket_id, None, - Some((DeletedFilter::NotDeleted, ring.layout.node_id_vec.clone())), + Some((DeletedFilter::NotDeleted, layout.node_id_vec.clone())), 10, EnumerationOrder::Forward, ) diff --git a/src/model/index_counter.rs b/src/model/index_counter.rs index a46c165f..d514cb06 100644 --- a/src/model/index_counter.rs +++ b/src/model/index_counter.rs @@ -7,7 +7,7 @@ use serde::{Deserialize, Serialize}; use garage_db as db; -use garage_rpc::ring::Ring; +use garage_rpc::layout::ClusterLayout; use garage_rpc::system::System; use garage_util::background::BackgroundRunner; use garage_util::data::*; @@ -83,8 +83,8 @@ impl Entry for CounterEntry { } impl CounterEntry { - pub fn filtered_values(&self, ring: &Ring) -> HashMap { - let nodes = &ring.layout.node_id_vec[..]; + pub fn filtered_values(&self, layout: &ClusterLayout) -> HashMap { + let nodes = &layout.node_id_vec[..]; self.filtered_values_with_nodes(nodes) } diff --git a/src/rpc/layout.rs b/src/rpc/layout.rs index 368a9d2c..2b5b6606 100644 --- a/src/rpc/layout.rs +++ b/src/rpc/layout.rs @@ -13,17 +13,39 @@ use garage_util::error::*; use crate::graph_algo::*; -use crate::ring::*; - use std::convert::TryInto; +// ---- defines: partitions ---- + +/// A partition id, which is stored on 16 bits +/// i.e. we have up to 2**16 partitions. +/// (in practice we have exactly 2**PARTITION_BITS partitions) +pub type Partition = u16; + +// TODO: make this constant parametrizable in the config file +// For deployments with many nodes it might make sense to bump +// it up to 10. +// Maximum value : 16 +/// How many bits from the hash are used to make partitions. Higher numbers means more fairness in +/// presence of numerous nodes, but exponentially bigger ring. Max 16 +pub const PARTITION_BITS: usize = 8; + const NB_PARTITIONS: usize = 1usize << PARTITION_BITS; +// ---- defines: nodes ---- + +// Type to store compactly the id of a node in the system +// Change this to u16 the day we want to have more than 256 nodes in a cluster +pub type CompactNodeType = u8; +pub const MAX_NODE_NUMBER: usize = 256; + +// ---- defines: other ---- + // The Message type will be used to collect information on the algorithm. -type Message = Vec; +pub type Message = Vec; mod v08 { - use crate::ring::CompactNodeType; + use super::CompactNodeType; use garage_util::crdt::LwwMap; use garage_util::data::{Hash, Uuid}; use serde::{Deserialize, Serialize}; @@ -76,7 +98,7 @@ mod v08 { mod v09 { use super::v08; - use crate::ring::CompactNodeType; + use super::CompactNodeType; use garage_util::crdt::{Lww, LwwMap}; use garage_util::data::{Hash, Uuid}; use serde::{Deserialize, Serialize}; @@ -334,6 +356,46 @@ impl ClusterLayout { )) } + /// Get the partition in which data would fall on + pub fn partition_of(&self, position: &Hash) -> Partition { + let top = u16::from_be_bytes(position.as_slice()[0..2].try_into().unwrap()); + top >> (16 - PARTITION_BITS) + } + + /// Get the list of partitions and the first hash of a partition key that would fall in it + pub fn partitions(&self) -> Vec<(Partition, Hash)> { + (0..(1 << PARTITION_BITS)) + .map(|i| { + let top = (i as u16) << (16 - PARTITION_BITS); + let mut location = [0u8; 32]; + location[..2].copy_from_slice(&u16::to_be_bytes(top)[..]); + (i as u16, Hash::from(location)) + }) + .collect::>() + } + + /// Walk the ring to find the n servers in which data should be replicated + pub fn nodes_of(&self, position: &Hash, n: usize) -> Vec { + assert_eq!(n, self.replication_factor); + + let data = &self.ring_assignment_data; + + if data.len() != self.replication_factor * (1 << PARTITION_BITS) { + warn!("Ring not yet ready, read/writes will be lost!"); + return vec![]; + } + + let partition_idx = self.partition_of(position) as usize; + let partition_start = partition_idx * self.replication_factor; + let partition_end = (partition_idx + 1) * self.replication_factor; + let partition_nodes = &data[partition_start..partition_end]; + + partition_nodes + .iter() + .map(|i| self.node_id_vec[*i as usize]) + .collect::>() + } + // ===================== internal information extractors ====================== /// Returns the uuids of the non_gateway nodes in self.node_id_vec. diff --git a/src/rpc/lib.rs b/src/rpc/lib.rs index a5f8fc6e..1af8b78e 100644 --- a/src/rpc/lib.rs +++ b/src/rpc/lib.rs @@ -14,7 +14,6 @@ mod kubernetes; pub mod graph_algo; pub mod layout; pub mod replication_mode; -pub mod ring; pub mod system; pub mod rpc_helper; diff --git a/src/rpc/ring.rs b/src/rpc/ring.rs deleted file mode 100644 index 6a2e5c72..00000000 --- a/src/rpc/ring.rs +++ /dev/null @@ -1,164 +0,0 @@ -//! Module containing types related to computing nodes which should receive a copy of data blocks -//! and metadata -use std::convert::TryInto; - -use garage_util::data::*; - -use crate::layout::ClusterLayout; - -/// A partition id, which is stored on 16 bits -/// i.e. we have up to 2**16 partitions. -/// (in practice we have exactly 2**PARTITION_BITS partitions) -pub type Partition = u16; - -// TODO: make this constant parametrizable in the config file -// For deployments with many nodes it might make sense to bump -// it up to 10. -// Maximum value : 16 -/// How many bits from the hash are used to make partitions. Higher numbers means more fairness in -/// presence of numerous nodes, but exponentially bigger ring. Max 16 -pub const PARTITION_BITS: usize = 8; - -const PARTITION_MASK_U16: u16 = ((1 << PARTITION_BITS) - 1) << (16 - PARTITION_BITS); - -/// A ring distributing fairly objects to nodes -#[derive(Clone)] -pub struct Ring { - /// The replication factor for this ring - pub replication_factor: usize, - - /// The network configuration used to generate this ring - pub layout: ClusterLayout, - - // Internal order of nodes used to make a more compact representation of the ring - nodes: Vec, - - // The list of entries in the ring - ring: Vec, -} - -// Type to store compactly the id of a node in the system -// Change this to u16 the day we want to have more than 256 nodes in a cluster -pub type CompactNodeType = u8; -pub const MAX_NODE_NUMBER: usize = 256; - -// The maximum number of times an object might get replicated -// This must be at least 3 because Garage supports 3-way replication -// Here we use 6 so that the size of a ring entry is 8 bytes -// (2 bytes partition id, 6 bytes node numbers as u8s) -const MAX_REPLICATION: usize = 6; - -/// An entry in the ring -#[derive(Clone, Debug)] -struct RingEntry { - // The two first bytes of the first hash that goes in this partition - // (the next bytes are zeroes) - hash_prefix: u16, - // The nodes that store this partition, stored as a list of positions in the `nodes` - // field of the Ring structure - // Only items 0 up to ring.replication_factor - 1 are used, others are zeros - nodes_buf: [CompactNodeType; MAX_REPLICATION], -} - -impl Ring { - pub(crate) fn new(layout: ClusterLayout, replication_factor: usize) -> Self { - if replication_factor != layout.replication_factor { - warn!("Could not build ring: replication factor does not match between local configuration and network role assignment."); - return Self::empty(layout, replication_factor); - } - - if layout.ring_assignment_data.len() != replication_factor * (1 << PARTITION_BITS) { - warn!("Could not build ring: network role assignment data has invalid length"); - return Self::empty(layout, replication_factor); - } - - let nodes = layout.node_id_vec.clone(); - let ring = (0..(1 << PARTITION_BITS)) - .map(|i| { - let top = (i as u16) << (16 - PARTITION_BITS); - let mut nodes_buf = [0u8; MAX_REPLICATION]; - nodes_buf[..replication_factor].copy_from_slice( - &layout.ring_assignment_data - [replication_factor * i..replication_factor * (i + 1)], - ); - RingEntry { - hash_prefix: top, - nodes_buf, - } - }) - .collect::>(); - - Self { - replication_factor, - layout, - nodes, - ring, - } - } - - fn empty(layout: ClusterLayout, replication_factor: usize) -> Self { - Self { - replication_factor, - layout, - nodes: vec![], - ring: vec![], - } - } - - /// Get the partition in which data would fall on - pub fn partition_of(&self, position: &Hash) -> Partition { - let top = u16::from_be_bytes(position.as_slice()[0..2].try_into().unwrap()); - top >> (16 - PARTITION_BITS) - } - - /// Get the list of partitions and the first hash of a partition key that would fall in it - pub fn partitions(&self) -> Vec<(Partition, Hash)> { - let mut ret = vec![]; - - for (i, entry) in self.ring.iter().enumerate() { - let mut location = [0u8; 32]; - location[..2].copy_from_slice(&u16::to_be_bytes(entry.hash_prefix)[..]); - ret.push((i as u16, location.into())); - } - if !ret.is_empty() { - assert_eq!(ret[0].1, [0u8; 32].into()); - } - - ret - } - - /// Walk the ring to find the n servers in which data should be replicated - pub fn get_nodes(&self, position: &Hash, n: usize) -> Vec { - if self.ring.len() != 1 << PARTITION_BITS { - warn!("Ring not yet ready, read/writes will be lost!"); - return vec![]; - } - - let partition_idx = self.partition_of(position) as usize; - let partition = &self.ring[partition_idx]; - - let top = u16::from_be_bytes(position.as_slice()[0..2].try_into().unwrap()); - // Check that we haven't messed up our partition table, i.e. that this partition - // table entrey indeed corresponds to the item we are storing - assert_eq!( - partition.hash_prefix & PARTITION_MASK_U16, - top & PARTITION_MASK_U16 - ); - - assert!(n <= self.replication_factor); - partition.nodes_buf[..n] - .iter() - .map(|i| self.nodes[*i as usize]) - .collect::>() - } -} - -#[cfg(test)] -mod tests { - use super::*; - - #[test] - fn test_ring_entry_size() { - assert_eq!(std::mem::size_of::(), 8); - } -} diff --git a/src/rpc/rpc_helper.rs b/src/rpc/rpc_helper.rs index e59c372a..56bef2f3 100644 --- a/src/rpc/rpc_helper.rs +++ b/src/rpc/rpc_helper.rs @@ -26,8 +26,8 @@ use garage_util::data::*; use garage_util::error::Error; use garage_util::metrics::RecordDuration; +use crate::layout::ClusterLayout; use crate::metrics::RpcMetrics; -use crate::ring::Ring; // Default RPC timeout = 5 minutes const DEFAULT_TIMEOUT: Duration = Duration::from_secs(300); @@ -91,7 +91,7 @@ pub struct RpcHelper(Arc); struct RpcHelperInner { our_node_id: Uuid, fullmesh: Arc, - ring: watch::Receiver>, + layout_watch: watch::Receiver>, metrics: RpcMetrics, rpc_timeout: Duration, } @@ -100,7 +100,7 @@ impl RpcHelper { pub(crate) fn new( our_node_id: Uuid, fullmesh: Arc, - ring: watch::Receiver>, + layout_watch: watch::Receiver>, rpc_timeout: Option, ) -> Self { let metrics = RpcMetrics::new(); @@ -108,7 +108,7 @@ impl RpcHelper { Self(Arc::new(RpcHelperInner { our_node_id, fullmesh, - ring, + layout_watch, metrics, rpc_timeout: rpc_timeout.unwrap_or(DEFAULT_TIMEOUT), })) @@ -392,8 +392,8 @@ impl RpcHelper { pub fn request_order(&self, nodes: &[Uuid]) -> Vec { // Retrieve some status variables that we will use to sort requests let peer_list = self.0.fullmesh.get_peer_list(); - let ring: Arc = self.0.ring.borrow().clone(); - let our_zone = match ring.layout.node_role(&self.0.our_node_id) { + let layout: Arc = self.0.layout_watch.borrow().clone(); + let our_zone = match layout.node_role(&self.0.our_node_id) { Some(pc) => &pc.zone, None => "", }; @@ -407,7 +407,7 @@ impl RpcHelper { let mut nodes = nodes .iter() .map(|to| { - let peer_zone = match ring.layout.node_role(to) { + let peer_zone = match layout.node_role(to) { Some(pc) => &pc.zone, None => "", }; diff --git a/src/rpc/system.rs b/src/rpc/system.rs index 4b40bec4..106e9f8c 100644 --- a/src/rpc/system.rs +++ b/src/rpc/system.rs @@ -36,7 +36,6 @@ use crate::consul::ConsulDiscovery; use crate::kubernetes::*; use crate::layout::*; use crate::replication_mode::*; -use crate::ring::*; use crate::rpc_helper::*; use crate::system_metrics::*; @@ -112,9 +111,9 @@ pub struct System { replication_mode: ReplicationMode, replication_factor: usize, - /// The ring - pub ring: watch::Receiver>, - update_ring: Mutex>>, + /// The layout + pub layout_watch: watch::Receiver>, + update_layout: Mutex>>, /// Path to metadata directory pub metadata_dir: PathBuf, @@ -286,8 +285,7 @@ impl System { let mut local_status = NodeStatus::initial(replication_factor, &cluster_layout); local_status.update_disk_usage(&config.metadata_dir, &config.data_dir, &metrics); - let ring = Ring::new(cluster_layout, replication_factor); - let (update_ring, ring) = watch::channel(Arc::new(ring)); + let (update_layout, layout_watch) = watch::channel(Arc::new(cluster_layout)); let rpc_public_addr = match &config.rpc_public_addr { Some(a_str) => { @@ -362,7 +360,7 @@ impl System { rpc: RpcHelper::new( netapp.id.into(), fullmesh, - ring.clone(), + layout_watch.clone(), config.rpc_timeout_msec.map(Duration::from_millis), ), system_endpoint, @@ -378,8 +376,8 @@ impl System { kubernetes_discovery: config.kubernetes_discovery.clone(), metrics, - ring, - update_ring: Mutex::new(update_ring), + layout_watch, + update_layout: Mutex::new(update_layout), metadata_dir: config.metadata_dir.clone(), data_dir: config.data_dir.clone(), }); @@ -426,7 +424,7 @@ impl System { } pub fn get_cluster_layout(&self) -> ClusterLayout { - self.ring.borrow().layout.clone() + self.layout_watch.borrow().as_ref().clone() } pub async fn update_cluster_layout( @@ -466,7 +464,7 @@ impl System { } pub fn health(&self) -> ClusterHealth { - let ring: Arc<_> = self.ring.borrow().clone(); + let layout: Arc<_> = self.layout_watch.borrow().clone(); let quorum = self.replication_mode.write_quorum(); let replication_factor = self.replication_factor; @@ -477,8 +475,7 @@ impl System { .collect::>(); let connected_nodes = nodes.iter().filter(|(_, n)| n.is_up).count(); - let storage_nodes = ring - .layout + let storage_nodes = layout .roles .items() .iter() @@ -489,11 +486,11 @@ impl System { .filter(|(x, _, _)| nodes.get(x).map(|n| n.is_up).unwrap_or(false)) .count(); - let partitions = ring.partitions(); + let partitions = layout.partitions(); let partitions_n_up = partitions .iter() .map(|(_, h)| { - let pn = ring.get_nodes(h, ring.replication_factor); + let pn = layout.nodes_of(h, layout.replication_factor); pn.iter() .filter(|x| nodes.get(x).map(|n| n.is_up).unwrap_or(false)) .count() @@ -584,9 +581,9 @@ impl System { /// Save network configuration to disc async fn save_cluster_layout(&self) -> Result<(), Error> { - let ring: Arc = self.ring.borrow().clone(); + let layout: Arc = self.layout_watch.borrow().clone(); self.persist_cluster_layout - .save_async(&ring.layout) + .save_async(&layout) .await .expect("Cannot save current cluster layout"); Ok(()) @@ -595,9 +592,9 @@ impl System { fn update_local_status(&self) { let mut new_si: NodeStatus = self.local_status.load().as_ref().clone(); - let ring = self.ring.borrow(); - new_si.cluster_layout_version = ring.layout.version; - new_si.cluster_layout_staging_hash = ring.layout.staging_hash; + let layout = self.layout_watch.borrow(); + new_si.cluster_layout_version = layout.version; + new_si.cluster_layout_staging_hash = layout.staging_hash; new_si.update_disk_usage(&self.metadata_dir, &self.data_dir, &self.metrics); @@ -612,8 +609,8 @@ impl System { } fn handle_pull_cluster_layout(&self) -> SystemRpc { - let ring = self.ring.borrow().clone(); - SystemRpc::AdvertiseClusterLayout(ring.layout.clone()) + let layout = self.layout_watch.borrow().as_ref().clone(); + SystemRpc::AdvertiseClusterLayout(layout) } fn handle_get_known_nodes(&self) -> SystemRpc { @@ -663,8 +660,9 @@ impl System { return Err(Error::Message(msg)); } - let update_ring = self.update_ring.lock().await; - let mut layout: ClusterLayout = self.ring.borrow().layout.clone(); + let update_layout = self.update_layout.lock().await; + // TODO: don't clone each time an AdvertiseClusterLayout is received + let mut layout: ClusterLayout = self.layout_watch.borrow().as_ref().clone(); let prev_layout_check = layout.check().is_ok(); if layout.merge(adv) { @@ -675,9 +673,8 @@ impl System { )); } - let ring = Ring::new(layout.clone(), self.replication_factor); - update_ring.send(Arc::new(ring))?; - drop(update_ring); + update_layout.send(Arc::new(layout.clone()))?; + drop(update_layout); let self2 = self.clone(); tokio::spawn(async move { @@ -725,9 +722,9 @@ impl System { async fn discovery_loop(self: &Arc, mut stop_signal: watch::Receiver) { while !*stop_signal.borrow() { - let not_configured = self.ring.borrow().layout.check().is_err(); + let not_configured = self.layout_watch.borrow().check().is_err(); let no_peers = self.fullmesh.get_peer_list().len() < self.replication_factor; - let expected_n_nodes = self.ring.borrow().layout.num_nodes(); + let expected_n_nodes = self.layout_watch.borrow().num_nodes(); let bad_peers = self .fullmesh .get_peer_list() diff --git a/src/table/merkle.rs b/src/table/merkle.rs index 4577f872..01271c58 100644 --- a/src/table/merkle.rs +++ b/src/table/merkle.rs @@ -13,7 +13,7 @@ use garage_util::data::*; use garage_util::encode::{nonversioned_decode, nonversioned_encode}; use garage_util::error::Error; -use garage_rpc::ring::*; +use garage_rpc::layout::*; use crate::data::*; use crate::replication::*; diff --git a/src/table/replication/fullcopy.rs b/src/table/replication/fullcopy.rs index 18682ace..f8b7cacc 100644 --- a/src/table/replication/fullcopy.rs +++ b/src/table/replication/fullcopy.rs @@ -1,6 +1,6 @@ use std::sync::Arc; -use garage_rpc::ring::*; +use garage_rpc::layout::*; use garage_rpc::system::System; use garage_util::data::*; @@ -27,11 +27,11 @@ impl TableReplication for TableFullReplication { } fn write_nodes(&self, _hash: &Hash) -> Vec { - let ring = self.system.ring.borrow(); - ring.layout.node_ids().to_vec() + let layout = self.system.layout_watch.borrow(); + layout.node_ids().to_vec() } fn write_quorum(&self) -> usize { - let nmembers = self.system.ring.borrow().layout.node_ids().len(); + let nmembers = self.system.layout_watch.borrow().node_ids().len(); if nmembers > self.max_faults { nmembers - self.max_faults } else { diff --git a/src/table/replication/parameters.rs b/src/table/replication/parameters.rs index f00815a2..19b306f2 100644 --- a/src/table/replication/parameters.rs +++ b/src/table/replication/parameters.rs @@ -1,4 +1,4 @@ -use garage_rpc::ring::*; +use garage_rpc::layout::*; use garage_util::data::*; /// Trait to describe how a table shall be replicated diff --git a/src/table/replication/sharded.rs b/src/table/replication/sharded.rs index 1cf964af..95901a5a 100644 --- a/src/table/replication/sharded.rs +++ b/src/table/replication/sharded.rs @@ -1,6 +1,6 @@ use std::sync::Arc; -use garage_rpc::ring::*; +use garage_rpc::layout::*; use garage_rpc::system::System; use garage_util::data::*; @@ -26,16 +26,16 @@ pub struct TableShardedReplication { impl TableReplication for TableShardedReplication { fn read_nodes(&self, hash: &Hash) -> Vec { - let ring = self.system.ring.borrow(); - ring.get_nodes(hash, self.replication_factor) + let layout = self.system.layout_watch.borrow(); + layout.nodes_of(hash, self.replication_factor) } fn read_quorum(&self) -> usize { self.read_quorum } fn write_nodes(&self, hash: &Hash) -> Vec { - let ring = self.system.ring.borrow(); - ring.get_nodes(hash, self.replication_factor) + let layout = self.system.layout_watch.borrow(); + layout.nodes_of(hash, self.replication_factor) } fn write_quorum(&self) -> usize { self.write_quorum @@ -45,9 +45,9 @@ impl TableReplication for TableShardedReplication { } fn partition_of(&self, hash: &Hash) -> Partition { - self.system.ring.borrow().partition_of(hash) + self.system.layout_watch.borrow().partition_of(hash) } fn partitions(&self) -> Vec<(Partition, Hash)> { - self.system.ring.borrow().partitions() + self.system.layout_watch.borrow().partitions() } } diff --git a/src/table/sync.rs b/src/table/sync.rs index 92a353c6..b2600013 100644 --- a/src/table/sync.rs +++ b/src/table/sync.rs @@ -17,7 +17,7 @@ use garage_util::data::*; use garage_util::encode::{debug_serialize, nonversioned_encode}; use garage_util::error::{Error, OkOrMessage}; -use garage_rpc::ring::*; +use garage_rpc::layout::*; use garage_rpc::system::System; use garage_rpc::*; @@ -91,8 +91,8 @@ impl TableSyncer { bg.spawn_worker(SyncWorker { syncer: self.clone(), - ring_recv: self.system.ring.clone(), - ring: self.system.ring.borrow().clone(), + layout_watch: self.system.layout_watch.clone(), + layout: self.system.layout_watch.borrow().clone(), add_full_sync_rx, todo: vec![], next_full_sync: Instant::now() + Duration::from_secs(20), @@ -492,8 +492,8 @@ impl EndpointHandler for TableSync struct SyncWorker { syncer: Arc>, - ring_recv: watch::Receiver>, - ring: Arc, + layout_watch: watch::Receiver>, + layout: Arc, add_full_sync_rx: mpsc::UnboundedReceiver<()>, todo: Vec, next_full_sync: Instant, @@ -593,11 +593,11 @@ impl Worker for SyncWorker { self.add_full_sync(); } }, - _ = self.ring_recv.changed() => { - let new_ring = self.ring_recv.borrow(); - if !Arc::ptr_eq(&new_ring, &self.ring) { - self.ring = new_ring.clone(); - drop(new_ring); + _ = self.layout_watch.changed() => { + let new_layout = self.layout_watch.borrow(); + if !Arc::ptr_eq(&new_layout, &self.layout) { + self.layout = new_layout.clone(); + drop(new_layout); debug!("({}) Ring changed, adding full sync to syncer todo list", F::TABLE_NAME); self.add_full_sync(); } From 4a9c94514f49aa4e9880a8e0f5cf5a52d11ae993 Mon Sep 17 00:00:00 2001 From: Alex Auvolat Date: Wed, 8 Nov 2023 16:41:00 +0100 Subject: [PATCH 079/538] avoid using layout_watch in System directly --- src/api/admin/bucket.rs | 4 ++-- src/api/admin/cluster.rs | 10 +++++----- src/api/k2v/index.rs | 2 +- src/api/s3/put.rs | 2 +- src/garage/admin/bucket.rs | 4 ++-- src/garage/admin/mod.rs | 10 +++++----- src/model/helper/bucket.rs | 2 +- src/rpc/system.rs | 4 ++-- src/table/replication/fullcopy.rs | 4 ++-- src/table/replication/sharded.rs | 8 ++++---- src/table/sync.rs | 2 +- 11 files changed, 26 insertions(+), 26 deletions(-) diff --git a/src/api/admin/bucket.rs b/src/api/admin/bucket.rs index 6bff7e9f..65929d61 100644 --- a/src/api/admin/bucket.rs +++ b/src/api/admin/bucket.rs @@ -122,7 +122,7 @@ async fn bucket_info_results( .table .get(&bucket_id, &EmptyKey) .await? - .map(|x| x.filtered_values(&garage.system.layout_watch.borrow())) + .map(|x| x.filtered_values(&garage.system.cluster_layout())) .unwrap_or_default(); let mpu_counters = garage @@ -130,7 +130,7 @@ async fn bucket_info_results( .table .get(&bucket_id, &EmptyKey) .await? - .map(|x| x.filtered_values(&garage.system.layout_watch.borrow())) + .map(|x| x.filtered_values(&garage.system.cluster_layout())) .unwrap_or_default(); let mut relevant_keys = HashMap::new(); diff --git a/src/api/admin/cluster.rs b/src/api/admin/cluster.rs index c8107b82..01ff9885 100644 --- a/src/api/admin/cluster.rs +++ b/src/api/admin/cluster.rs @@ -33,7 +33,7 @@ pub async fn handle_get_cluster_status(garage: &Arc) -> Result) -> Result, Error> { - let res = format_cluster_layout(&garage.system.get_cluster_layout()); + let res = format_cluster_layout(&garage.system.cluster_layout()); Ok(json_ok_response(&res)?) } @@ -207,7 +207,7 @@ pub async fn handle_update_cluster_layout( ) -> Result, Error> { let updates = parse_json_body::(req).await?; - let mut layout = garage.system.get_cluster_layout(); + let mut layout = garage.system.cluster_layout().as_ref().clone(); let mut roles = layout.roles.clone(); roles.merge(&layout.staging_roles); @@ -247,7 +247,7 @@ pub async fn handle_apply_cluster_layout( ) -> Result, Error> { let param = parse_json_body::(req).await?; - let layout = garage.system.get_cluster_layout(); + let layout = garage.system.cluster_layout().as_ref().clone(); let (layout, msg) = layout.apply_staged_changes(Some(param.version))?; garage.system.update_cluster_layout(&layout).await?; @@ -265,7 +265,7 @@ pub async fn handle_revert_cluster_layout( ) -> Result, Error> { let param = parse_json_body::(req).await?; - let layout = garage.system.get_cluster_layout(); + let layout = garage.system.cluster_layout().as_ref().clone(); let layout = layout.revert_staged_changes(Some(param.version))?; garage.system.update_cluster_layout(&layout).await?; diff --git a/src/api/k2v/index.rs b/src/api/k2v/index.rs index ff8beda3..3fc39de6 100644 --- a/src/api/k2v/index.rs +++ b/src/api/k2v/index.rs @@ -26,7 +26,7 @@ pub async fn handle_read_index( ) -> Result, Error> { let reverse = reverse.unwrap_or(false); - let layout: Arc = garage.system.layout_watch.borrow().clone(); + let layout: Arc = garage.system.cluster_layout().clone(); let (partition_keys, more, next_start) = read_range( &garage.k2v.counter_table.table, diff --git a/src/api/s3/put.rs b/src/api/s3/put.rs index fc17ed03..d1c88a76 100644 --- a/src/api/s3/put.rs +++ b/src/api/s3/put.rs @@ -253,7 +253,7 @@ pub(crate) async fn check_quotas( .await?; let counters = counters - .map(|x| x.filtered_values(&garage.system.layout_watch.borrow())) + .map(|x| x.filtered_values(&garage.system.cluster_layout())) .unwrap_or_default(); let (prev_cnt_obj, prev_cnt_size) = match prev_object { diff --git a/src/garage/admin/bucket.rs b/src/garage/admin/bucket.rs index 34e48292..9e642f57 100644 --- a/src/garage/admin/bucket.rs +++ b/src/garage/admin/bucket.rs @@ -70,7 +70,7 @@ impl AdminRpcHandler { .table .get(&bucket_id, &EmptyKey) .await? - .map(|x| x.filtered_values(&self.garage.system.layout_watch.borrow())) + .map(|x| x.filtered_values(&self.garage.system.cluster_layout())) .unwrap_or_default(); let mpu_counters = self @@ -79,7 +79,7 @@ impl AdminRpcHandler { .table .get(&bucket_id, &EmptyKey) .await? - .map(|x| x.filtered_values(&self.garage.system.layout_watch.borrow())) + .map(|x| x.filtered_values(&self.garage.system.cluster_layout())) .unwrap_or_default(); let mut relevant_keys = HashMap::new(); diff --git a/src/garage/admin/mod.rs b/src/garage/admin/mod.rs index 006f71cd..c3fa801a 100644 --- a/src/garage/admin/mod.rs +++ b/src/garage/admin/mod.rs @@ -126,7 +126,7 @@ impl AdminRpcHandler { opt_to_send.all_nodes = false; let mut failures = vec![]; - let layout = self.garage.system.layout_watch.borrow().clone(); + let layout = self.garage.system.cluster_layout().clone(); for node in layout.node_ids().iter() { let node = (*node).into(); let resp = self @@ -163,7 +163,7 @@ impl AdminRpcHandler { async fn handle_stats(&self, opt: StatsOpt) -> Result { if opt.all_nodes { let mut ret = String::new(); - let layout = self.garage.system.layout_watch.borrow().clone(); + let layout = self.garage.system.cluster_layout().clone(); for node in layout.node_ids().iter() { let mut opt = opt.clone(); @@ -275,7 +275,7 @@ impl AdminRpcHandler { let mut ret = String::new(); // Gather storage node and free space statistics - let layout = &self.garage.system.layout_watch.borrow(); + let layout = &self.garage.system.cluster_layout(); let mut node_partition_count = HashMap::::new(); for short_id in layout.ring_assignment_data.iter() { let id = layout.node_id_vec[*short_id as usize]; @@ -440,7 +440,7 @@ impl AdminRpcHandler { ) -> Result { if all_nodes { let mut ret = vec![]; - let layout = self.garage.system.layout_watch.borrow().clone(); + let layout = self.garage.system.cluster_layout().clone(); for node in layout.node_ids().iter() { let node = (*node).into(); match self @@ -488,7 +488,7 @@ impl AdminRpcHandler { ) -> Result { if all_nodes { let mut ret = vec![]; - let layout = self.garage.system.layout_watch.borrow().clone(); + let layout = self.garage.system.cluster_layout().clone(); for node in layout.node_ids().iter() { let node = (*node).into(); match self diff --git a/src/model/helper/bucket.rs b/src/model/helper/bucket.rs index d43d7e96..8cd5b27b 100644 --- a/src/model/helper/bucket.rs +++ b/src/model/helper/bucket.rs @@ -453,7 +453,7 @@ impl<'a> BucketHelper<'a> { use garage_rpc::layout::ClusterLayout; use std::sync::Arc; - let layout: Arc = self.0.system.layout_watch.borrow().clone(); + let layout: Arc = self.0.system.cluster_layout().clone(); let k2vindexes = self .0 .k2v diff --git a/src/rpc/system.rs b/src/rpc/system.rs index 106e9f8c..93144e39 100644 --- a/src/rpc/system.rs +++ b/src/rpc/system.rs @@ -423,8 +423,8 @@ impl System { known_nodes } - pub fn get_cluster_layout(&self) -> ClusterLayout { - self.layout_watch.borrow().as_ref().clone() + pub fn cluster_layout(&self) -> watch::Ref> { + self.layout_watch.borrow() } pub async fn update_cluster_layout( diff --git a/src/table/replication/fullcopy.rs b/src/table/replication/fullcopy.rs index f8b7cacc..34807e3d 100644 --- a/src/table/replication/fullcopy.rs +++ b/src/table/replication/fullcopy.rs @@ -27,11 +27,11 @@ impl TableReplication for TableFullReplication { } fn write_nodes(&self, _hash: &Hash) -> Vec { - let layout = self.system.layout_watch.borrow(); + let layout = self.system.cluster_layout(); layout.node_ids().to_vec() } fn write_quorum(&self) -> usize { - let nmembers = self.system.layout_watch.borrow().node_ids().len(); + let nmembers = self.system.cluster_layout().node_ids().len(); if nmembers > self.max_faults { nmembers - self.max_faults } else { diff --git a/src/table/replication/sharded.rs b/src/table/replication/sharded.rs index 95901a5a..60c95cb4 100644 --- a/src/table/replication/sharded.rs +++ b/src/table/replication/sharded.rs @@ -26,7 +26,7 @@ pub struct TableShardedReplication { impl TableReplication for TableShardedReplication { fn read_nodes(&self, hash: &Hash) -> Vec { - let layout = self.system.layout_watch.borrow(); + let layout = self.system.cluster_layout(); layout.nodes_of(hash, self.replication_factor) } fn read_quorum(&self) -> usize { @@ -34,7 +34,7 @@ impl TableReplication for TableShardedReplication { } fn write_nodes(&self, hash: &Hash) -> Vec { - let layout = self.system.layout_watch.borrow(); + let layout = self.system.cluster_layout(); layout.nodes_of(hash, self.replication_factor) } fn write_quorum(&self) -> usize { @@ -45,9 +45,9 @@ impl TableReplication for TableShardedReplication { } fn partition_of(&self, hash: &Hash) -> Partition { - self.system.layout_watch.borrow().partition_of(hash) + self.system.cluster_layout().partition_of(hash) } fn partitions(&self) -> Vec<(Partition, Hash)> { - self.system.layout_watch.borrow().partitions() + self.system.cluster_layout().partitions() } } diff --git a/src/table/sync.rs b/src/table/sync.rs index b2600013..65eff7cd 100644 --- a/src/table/sync.rs +++ b/src/table/sync.rs @@ -92,7 +92,7 @@ impl TableSyncer { bg.spawn_worker(SyncWorker { syncer: self.clone(), layout_watch: self.system.layout_watch.clone(), - layout: self.system.layout_watch.borrow().clone(), + layout: self.system.cluster_layout().clone(), add_full_sync_rx, todo: vec![], next_full_sync: Instant::now() + Duration::from_secs(20), From fe9af1dcaae31a117528a9cfa10c422c9a850201 Mon Sep 17 00:00:00 2001 From: Alex Auvolat Date: Wed, 8 Nov 2023 17:49:06 +0100 Subject: [PATCH 080/538] WIP: garage_rpc: store layout version history --- src/rpc/layout/history.rs | 170 ++++++++++++ src/rpc/layout/mod.rs | 32 +++ src/rpc/layout/schema.rs | 286 ++++++++++++++++++++ src/rpc/layout/tracker.rs | 21 ++ src/rpc/{layout.rs => layout/version.rs} | 330 +---------------------- src/rpc/rpc_helper.rs | 12 +- src/rpc/system.rs | 44 +-- 7 files changed, 550 insertions(+), 345 deletions(-) create mode 100644 src/rpc/layout/history.rs create mode 100644 src/rpc/layout/mod.rs create mode 100644 src/rpc/layout/schema.rs create mode 100644 src/rpc/layout/tracker.rs rename src/rpc/{layout.rs => layout/version.rs} (76%) diff --git a/src/rpc/layout/history.rs b/src/rpc/layout/history.rs new file mode 100644 index 00000000..b3019f58 --- /dev/null +++ b/src/rpc/layout/history.rs @@ -0,0 +1,170 @@ +use std::cmp::Ordering; +use std::sync::Arc; + +use garage_util::crdt::{Crdt, Lww, LwwMap}; +use garage_util::data::*; +use garage_util::encode::nonversioned_encode; +use garage_util::error::*; + +use super::schema::*; +use super::*; + +impl LayoutHistory { + pub fn new(replication_factor: usize) -> Self { + let version = LayoutVersion::new(replication_factor); + + let staging_parameters = Lww::::new(version.parameters); + let empty_lwwmap = LwwMap::new(); + + let mut ret = LayoutHistory { + versions: vec![version].into_boxed_slice().into(), + update_trackers: Default::default(), + staging_parameters, + staging_roles: empty_lwwmap, + staging_hash: [0u8; 32].into(), + }; + ret.staging_hash = ret.calculate_staging_hash(); + ret + } + + pub fn current(&self) -> &LayoutVersion { + self.versions.last().as_ref().unwrap() + } + + pub(crate) fn calculate_staging_hash(&self) -> Hash { + let hashed_tuple = (&self.staging_roles, &self.staging_parameters); + blake2sum(&nonversioned_encode(&hashed_tuple).unwrap()[..]) + } + + // ================== updates to layout, public interface =================== + + pub fn merge(&mut self, other: &LayoutHistory) -> bool { + let mut changed = false; + + // Merge staged layout changes + match other.current().version.cmp(&self.current().version) { + Ordering::Greater => { + self.staging_parameters = other.staging_parameters.clone(); + self.staging_roles = other.staging_roles.clone(); + self.staging_hash = other.staging_hash; + changed = true; + } + Ordering::Equal => { + self.staging_parameters.merge(&other.staging_parameters); + self.staging_roles.merge(&other.staging_roles); + + let new_staging_hash = self.calculate_staging_hash(); + if new_staging_hash != self.staging_hash { + changed = true; + } + + self.staging_hash = new_staging_hash; + } + Ordering::Less => (), + } + + // Add any new versions to history + let mut versions = self.versions.to_vec(); + for v2 in other.versions.iter() { + if let Some(v1) = versions.iter().find(|v| v.version == v2.version) { + if v1 != v2 { + error!("Inconsistent layout histories: different layout compositions for version {}. Your cluster will be broken as long as this layout version is not replaced.", v2.version); + } + } else if versions.iter().all(|v| v.version != v2.version - 1) { + error!( + "Cannot receive new layout version {}, version {} is missing", + v2.version, + v2.version - 1 + ); + } else { + versions.push(v2.clone()); + changed = true; + } + } + self.versions = Arc::from(versions.into_boxed_slice()); + + // Merge trackers + self.update_trackers.merge(&other.update_trackers); + + changed + } + + pub fn apply_staged_changes(mut self, version: Option) -> Result<(Self, Message), Error> { + match version { + None => { + let error = r#" +Please pass the new layout version number to ensure that you are writing the correct version of the cluster layout. +To know the correct value of the new layout version, invoke `garage layout show` and review the proposed changes. + "#; + return Err(Error::Message(error.into())); + } + Some(v) => { + if v != self.current().version + 1 { + return Err(Error::Message("Invalid new layout version".into())); + } + } + } + + let mut new_version = self.current().clone(); + new_version.version += 1; + + new_version.roles.merge(&self.staging_roles); + new_version.roles.retain(|(_, _, v)| v.0.is_some()); + new_version.parameters = *self.staging_parameters.get(); + + self.staging_roles.clear(); + self.staging_hash = self.calculate_staging_hash(); + + let msg = new_version.calculate_partition_assignment()?; + + let mut versions = self.versions.to_vec(); + versions.push(new_version); + self.versions = Arc::from(versions.into_boxed_slice()); + + Ok((self, msg)) + } + + pub fn revert_staged_changes(mut self, version: Option) -> Result { + match version { + None => { + let error = r#" +Please pass the new layout version number to ensure that you are writing the correct version of the cluster layout. +To know the correct value of the new layout version, invoke `garage layout show` and review the proposed changes. + "#; + return Err(Error::Message(error.into())); + } + Some(v) => { + if v != self.current().version + 1 { + return Err(Error::Message("Invalid new layout version".into())); + } + } + } + + self.staging_roles.clear(); + self.staging_parameters.update(self.current().parameters); + self.staging_hash = self.calculate_staging_hash(); + + // TODO this is stupid, we should have a separate version counter/LWW + // for the staging params + let mut new_version = self.current().clone(); + new_version.version += 1; + + let mut versions = self.versions.to_vec(); + versions.push(new_version); + self.versions = Arc::from(versions.into_boxed_slice()); + + Ok(self) + } + + pub fn check(&self) -> Result<(), String> { + // Check that the hash of the staging data is correct + let staging_hash = self.calculate_staging_hash(); + if staging_hash != self.staging_hash { + return Err("staging_hash is incorrect".into()); + } + + // TODO: anythign more ? + + self.current().check() + } +} diff --git a/src/rpc/layout/mod.rs b/src/rpc/layout/mod.rs new file mode 100644 index 00000000..122d4b65 --- /dev/null +++ b/src/rpc/layout/mod.rs @@ -0,0 +1,32 @@ +mod history; +mod schema; +mod tracker; +mod version; + +pub use history::*; +pub use schema::*; +pub use version::*; + +// ---- defines: partitions ---- + +/// A partition id, which is stored on 16 bits +/// i.e. we have up to 2**16 partitions. +/// (in practice we have exactly 2**PARTITION_BITS partitions) +pub type Partition = u16; + +// TODO: make this constant parametrizable in the config file +// For deployments with many nodes it might make sense to bump +// it up to 10. +// Maximum value : 16 +/// How many bits from the hash are used to make partitions. Higher numbers means more fairness in +/// presence of numerous nodes, but exponentially bigger ring. Max 16 +pub const PARTITION_BITS: usize = 8; + +const NB_PARTITIONS: usize = 1usize << PARTITION_BITS; + +// ---- defines: nodes ---- + +// Type to store compactly the id of a node in the system +// Change this to u16 the day we want to have more than 256 nodes in a cluster +pub type CompactNodeType = u8; +pub const MAX_NODE_NUMBER: usize = 256; diff --git a/src/rpc/layout/schema.rs b/src/rpc/layout/schema.rs new file mode 100644 index 00000000..fa0822fa --- /dev/null +++ b/src/rpc/layout/schema.rs @@ -0,0 +1,286 @@ +mod v08 { + use crate::layout::CompactNodeType; + use garage_util::crdt::LwwMap; + use garage_util::data::{Hash, Uuid}; + use serde::{Deserialize, Serialize}; + + /// The layout of the cluster, i.e. the list of roles + /// which are assigned to each cluster node + #[derive(Clone, Debug, Serialize, Deserialize)] + pub struct ClusterLayout { + pub version: u64, + + pub replication_factor: usize, + pub roles: LwwMap, + + /// node_id_vec: a vector of node IDs with a role assigned + /// in the system (this includes gateway nodes). + /// The order here is different than the vec stored by `roles`, because: + /// 1. non-gateway nodes are first so that they have lower numbers + /// 2. nodes that don't have a role are excluded (but they need to + /// stay in the CRDT as tombstones) + pub node_id_vec: Vec, + /// the assignation of data partitions to node, the values + /// are indices in node_id_vec + #[serde(with = "serde_bytes")] + pub ring_assignation_data: Vec, + + /// Role changes which are staged for the next version of the layout + pub staging: LwwMap, + pub staging_hash: Hash, + } + + #[derive(PartialEq, Eq, PartialOrd, Ord, Clone, Debug, Serialize, Deserialize)] + pub struct NodeRoleV(pub Option); + + /// The user-assigned roles of cluster nodes + #[derive(PartialEq, Eq, PartialOrd, Ord, Clone, Debug, Serialize, Deserialize)] + pub struct NodeRole { + /// Datacenter at which this entry belong. This information is used to + /// perform a better geodistribution + pub zone: String, + /// The capacity of the node + /// If this is set to None, the node does not participate in storing data for the system + /// and is only active as an API gateway to other nodes + pub capacity: Option, + /// A set of tags to recognize the node + pub tags: Vec, + } + + impl garage_util::migrate::InitialFormat for ClusterLayout {} +} + +mod v09 { + use super::v08; + use crate::layout::CompactNodeType; + use garage_util::crdt::{Lww, LwwMap}; + use garage_util::data::{Hash, Uuid}; + use serde::{Deserialize, Serialize}; + pub use v08::{NodeRole, NodeRoleV}; + + /// The layout of the cluster, i.e. the list of roles + /// which are assigned to each cluster node + #[derive(Clone, Debug, Serialize, Deserialize)] + pub struct ClusterLayout { + pub version: u64, + + pub replication_factor: usize, + + /// This attribute is only used to retain the previously computed partition size, + /// to know to what extent does it change with the layout update. + pub partition_size: u64, + /// Parameters used to compute the assignment currently given by + /// ring_assignment_data + pub parameters: LayoutParameters, + + pub roles: LwwMap, + + /// see comment in v08::ClusterLayout + pub node_id_vec: Vec, + /// see comment in v08::ClusterLayout + #[serde(with = "serde_bytes")] + pub ring_assignment_data: Vec, + + /// Parameters to be used in the next partition assignment computation. + pub staging_parameters: Lww, + /// Role changes which are staged for the next version of the layout + pub staging_roles: LwwMap, + pub staging_hash: Hash, + } + + /// This struct is used to set the parameters to be used in the assignment computation + /// algorithm. It is stored as a Crdt. + #[derive(PartialEq, Eq, PartialOrd, Ord, Clone, Copy, Debug, Serialize, Deserialize)] + pub struct LayoutParameters { + pub zone_redundancy: ZoneRedundancy, + } + + /// Zone redundancy: if set to AtLeast(x), the layout calculation will aim to store copies + /// of each partition on at least that number of different zones. + /// Otherwise, copies will be stored on the maximum possible number of zones. + #[derive(PartialEq, Eq, PartialOrd, Ord, Clone, Copy, Debug, Serialize, Deserialize)] + pub enum ZoneRedundancy { + AtLeast(usize), + Maximum, + } + + impl garage_util::migrate::Migrate for ClusterLayout { + const VERSION_MARKER: &'static [u8] = b"G09layout"; + + type Previous = v08::ClusterLayout; + + fn migrate(previous: Self::Previous) -> Self { + use itertools::Itertools; + + // In the old layout, capacities are in an arbitrary unit, + // but in the new layout they are in bytes. + // Here we arbitrarily multiply everything by 1G, + // such that 1 old capacity unit = 1GB in the new units. + // This is totally arbitrary and won't work for most users. + let cap_mul = 1024 * 1024 * 1024; + let roles = multiply_all_capacities(previous.roles, cap_mul); + let staging_roles = multiply_all_capacities(previous.staging, cap_mul); + let node_id_vec = previous.node_id_vec; + + // Determine partition size + let mut tmp = previous.ring_assignation_data.clone(); + tmp.sort(); + let partition_size = tmp + .into_iter() + .dedup_with_count() + .map(|(npart, node)| { + roles + .get(&node_id_vec[node as usize]) + .and_then(|p| p.0.as_ref().and_then(|r| r.capacity)) + .unwrap_or(0) / npart as u64 + }) + .min() + .unwrap_or(0); + + // By default, zone_redundancy is maximum possible value + let parameters = LayoutParameters { + zone_redundancy: ZoneRedundancy::Maximum, + }; + + Self { + version: previous.version, + replication_factor: previous.replication_factor, + partition_size, + parameters, + roles, + node_id_vec, + ring_assignment_data: previous.ring_assignation_data, + staging_parameters: Lww::new(parameters), + staging_roles, + staging_hash: [0u8; 32].into(), // will be set in the next migration + } + } + } + + fn multiply_all_capacities( + old_roles: LwwMap, + mul: u64, + ) -> LwwMap { + let mut new_roles = LwwMap::new(); + for (node, ts, role) in old_roles.items() { + let mut role = role.clone(); + if let NodeRoleV(Some(NodeRole { + capacity: Some(ref mut cap), + .. + })) = role + { + *cap *= mul; + } + new_roles.merge_raw(node, *ts, &role); + } + new_roles + } +} + +mod v010 { + use super::v09; + use crate::layout::CompactNodeType; + use garage_util::crdt::{Lww, LwwMap}; + use garage_util::data::{Hash, Uuid}; + use serde::{Deserialize, Serialize}; + use std::collections::HashMap; + use std::sync::Arc; + pub use v09::{LayoutParameters, NodeRole, NodeRoleV, ZoneRedundancy}; + + /// The layout of the cluster, i.e. the list of roles + /// which are assigned to each cluster node + #[derive(Clone, Debug, Serialize, Deserialize, PartialEq)] + pub struct LayoutVersion { + pub version: u64, + + pub replication_factor: usize, + + /// This attribute is only used to retain the previously computed partition size, + /// to know to what extent does it change with the layout update. + pub partition_size: u64, + /// Parameters used to compute the assignment currently given by + /// ring_assignment_data + pub parameters: LayoutParameters, + + pub roles: LwwMap, + + /// see comment in v08::ClusterLayout + pub node_id_vec: Vec, + /// see comment in v08::ClusterLayout + #[serde(with = "serde_bytes")] + pub ring_assignment_data: Vec, + } + + /// The history of cluster layouts + #[derive(Clone, Debug, Serialize, Deserialize)] + pub struct LayoutHistory { + /// The versions currently in use in the cluster + pub versions: Arc<[LayoutVersion]>, + + /// Update trackers + pub update_trackers: UpdateTrackers, + + /// Parameters to be used in the next partition assignment computation. + pub staging_parameters: Lww, + /// Role changes which are staged for the next version of the layout + pub staging_roles: LwwMap, + /// Hash of the serialized staging_parameters + staging_roles + pub staging_hash: Hash, + } + + /// The tracker of acknowlegments and data syncs around the cluster + #[derive(Clone, Debug, Serialize, Deserialize, Default)] + pub struct UpdateTrackers { + /// The highest layout version number each node has ack'ed + pub ack_map: UpdateTracker, + /// The highest layout version number each node has synced data for + pub sync_map: UpdateTracker, + /// The highest layout version number each node has + /// ack'ed that all other nodes have synced data for + pub sync_ack_map: UpdateTracker, + } + + /// The history of cluster layouts + #[derive(Clone, Debug, Serialize, Deserialize, Default)] + pub struct UpdateTracker(pub HashMap); + + impl garage_util::migrate::Migrate for LayoutHistory { + const VERSION_MARKER: &'static [u8] = b"G010lh"; + + type Previous = v09::ClusterLayout; + + fn migrate(previous: Self::Previous) -> Self { + let version = LayoutVersion { + version: previous.version, + replication_factor: previous.replication_factor, + partition_size: previous.partition_size, + parameters: previous.parameters, + roles: previous.roles, + node_id_vec: previous.node_id_vec, + ring_assignment_data: previous.ring_assignment_data, + }; + let update_tracker = UpdateTracker( + version + .nongateway_nodes() + .iter() + .map(|x| (*x, version.version)) + .collect::>(), + ); + let mut ret = Self { + versions: Arc::from(vec![version].into_boxed_slice()), + update_trackers: UpdateTrackers { + ack_map: update_tracker.clone(), + sync_map: update_tracker.clone(), + sync_ack_map: update_tracker.clone(), + }, + staging_parameters: previous.staging_parameters, + staging_roles: previous.staging_roles, + staging_hash: [0u8; 32].into(), + }; + ret.staging_hash = ret.calculate_staging_hash(); + ret + } + } +} + +pub use v010::*; diff --git a/src/rpc/layout/tracker.rs b/src/rpc/layout/tracker.rs new file mode 100644 index 00000000..778121e4 --- /dev/null +++ b/src/rpc/layout/tracker.rs @@ -0,0 +1,21 @@ +use super::*; + +impl UpdateTracker { + fn merge(&mut self, other: &UpdateTracker) { + for (k, v) in other.0.iter() { + if let Some(v_mut) = self.0.get_mut(k) { + *v_mut = std::cmp::max(*v_mut, *v); + } else { + self.0.insert(*k, *v); + } + } + } +} + +impl UpdateTrackers { + pub(crate) fn merge(&mut self, other: &UpdateTrackers) { + self.ack_map.merge(&other.ack_map); + self.sync_map.merge(&other.sync_map); + self.sync_ack_map.merge(&other.sync_ack_map); + } +} diff --git a/src/rpc/layout.rs b/src/rpc/layout/version.rs similarity index 76% rename from src/rpc/layout.rs rename to src/rpc/layout/version.rs index 2b5b6606..363bc204 100644 --- a/src/rpc/layout.rs +++ b/src/rpc/layout/version.rs @@ -1,4 +1,3 @@ -use std::cmp::Ordering; use std::collections::HashMap; use std::collections::HashSet; use std::fmt; @@ -6,227 +5,20 @@ use std::fmt; use bytesize::ByteSize; use itertools::Itertools; -use garage_util::crdt::{AutoCrdt, Crdt, Lww, LwwMap}; +use garage_util::crdt::{AutoCrdt, LwwMap}; use garage_util::data::*; -use garage_util::encode::nonversioned_encode; use garage_util::error::*; use crate::graph_algo::*; use std::convert::TryInto; -// ---- defines: partitions ---- - -/// A partition id, which is stored on 16 bits -/// i.e. we have up to 2**16 partitions. -/// (in practice we have exactly 2**PARTITION_BITS partitions) -pub type Partition = u16; - -// TODO: make this constant parametrizable in the config file -// For deployments with many nodes it might make sense to bump -// it up to 10. -// Maximum value : 16 -/// How many bits from the hash are used to make partitions. Higher numbers means more fairness in -/// presence of numerous nodes, but exponentially bigger ring. Max 16 -pub const PARTITION_BITS: usize = 8; - -const NB_PARTITIONS: usize = 1usize << PARTITION_BITS; - -// ---- defines: nodes ---- - -// Type to store compactly the id of a node in the system -// Change this to u16 the day we want to have more than 256 nodes in a cluster -pub type CompactNodeType = u8; -pub const MAX_NODE_NUMBER: usize = 256; - -// ---- defines: other ---- +use super::schema::*; +use super::*; // The Message type will be used to collect information on the algorithm. pub type Message = Vec; -mod v08 { - use super::CompactNodeType; - use garage_util::crdt::LwwMap; - use garage_util::data::{Hash, Uuid}; - use serde::{Deserialize, Serialize}; - - /// The layout of the cluster, i.e. the list of roles - /// which are assigned to each cluster node - #[derive(Clone, Debug, Serialize, Deserialize)] - pub struct ClusterLayout { - pub version: u64, - - pub replication_factor: usize, - pub roles: LwwMap, - - /// node_id_vec: a vector of node IDs with a role assigned - /// in the system (this includes gateway nodes). - /// The order here is different than the vec stored by `roles`, because: - /// 1. non-gateway nodes are first so that they have lower numbers - /// 2. nodes that don't have a role are excluded (but they need to - /// stay in the CRDT as tombstones) - pub node_id_vec: Vec, - /// the assignation of data partitions to node, the values - /// are indices in node_id_vec - #[serde(with = "serde_bytes")] - pub ring_assignation_data: Vec, - - /// Role changes which are staged for the next version of the layout - pub staging: LwwMap, - pub staging_hash: Hash, - } - - #[derive(PartialEq, Eq, PartialOrd, Ord, Clone, Debug, Serialize, Deserialize)] - pub struct NodeRoleV(pub Option); - - /// The user-assigned roles of cluster nodes - #[derive(PartialEq, Eq, PartialOrd, Ord, Clone, Debug, Serialize, Deserialize)] - pub struct NodeRole { - /// Datacenter at which this entry belong. This information is used to - /// perform a better geodistribution - pub zone: String, - /// The capacity of the node - /// If this is set to None, the node does not participate in storing data for the system - /// and is only active as an API gateway to other nodes - pub capacity: Option, - /// A set of tags to recognize the node - pub tags: Vec, - } - - impl garage_util::migrate::InitialFormat for ClusterLayout {} -} - -mod v09 { - use super::v08; - use super::CompactNodeType; - use garage_util::crdt::{Lww, LwwMap}; - use garage_util::data::{Hash, Uuid}; - use serde::{Deserialize, Serialize}; - pub use v08::{NodeRole, NodeRoleV}; - - /// The layout of the cluster, i.e. the list of roles - /// which are assigned to each cluster node - #[derive(Clone, Debug, Serialize, Deserialize)] - pub struct ClusterLayout { - pub version: u64, - - pub replication_factor: usize, - - /// This attribute is only used to retain the previously computed partition size, - /// to know to what extent does it change with the layout update. - pub partition_size: u64, - /// Parameters used to compute the assignment currently given by - /// ring_assignment_data - pub parameters: LayoutParameters, - - pub roles: LwwMap, - - /// see comment in v08::ClusterLayout - pub node_id_vec: Vec, - /// see comment in v08::ClusterLayout - #[serde(with = "serde_bytes")] - pub ring_assignment_data: Vec, - - /// Parameters to be used in the next partition assignment computation. - pub staging_parameters: Lww, - /// Role changes which are staged for the next version of the layout - pub staging_roles: LwwMap, - pub staging_hash: Hash, - } - - /// This struct is used to set the parameters to be used in the assignment computation - /// algorithm. It is stored as a Crdt. - #[derive(PartialEq, Eq, PartialOrd, Ord, Clone, Copy, Debug, Serialize, Deserialize)] - pub struct LayoutParameters { - pub zone_redundancy: ZoneRedundancy, - } - - /// Zone redundancy: if set to AtLeast(x), the layout calculation will aim to store copies - /// of each partition on at least that number of different zones. - /// Otherwise, copies will be stored on the maximum possible number of zones. - #[derive(PartialEq, Eq, PartialOrd, Ord, Clone, Copy, Debug, Serialize, Deserialize)] - pub enum ZoneRedundancy { - AtLeast(usize), - Maximum, - } - - impl garage_util::migrate::Migrate for ClusterLayout { - const VERSION_MARKER: &'static [u8] = b"G09layout"; - - type Previous = v08::ClusterLayout; - - fn migrate(previous: Self::Previous) -> Self { - use itertools::Itertools; - - // In the old layout, capacities are in an arbitrary unit, - // but in the new layout they are in bytes. - // Here we arbitrarily multiply everything by 1G, - // such that 1 old capacity unit = 1GB in the new units. - // This is totally arbitrary and won't work for most users. - let cap_mul = 1024 * 1024 * 1024; - let roles = multiply_all_capacities(previous.roles, cap_mul); - let staging_roles = multiply_all_capacities(previous.staging, cap_mul); - let node_id_vec = previous.node_id_vec; - - // Determine partition size - let mut tmp = previous.ring_assignation_data.clone(); - tmp.sort(); - let partition_size = tmp - .into_iter() - .dedup_with_count() - .map(|(npart, node)| { - roles - .get(&node_id_vec[node as usize]) - .and_then(|p| p.0.as_ref().and_then(|r| r.capacity)) - .unwrap_or(0) / npart as u64 - }) - .min() - .unwrap_or(0); - - // By default, zone_redundancy is maximum possible value - let parameters = LayoutParameters { - zone_redundancy: ZoneRedundancy::Maximum, - }; - - let mut res = Self { - version: previous.version, - replication_factor: previous.replication_factor, - partition_size, - parameters, - roles, - node_id_vec, - ring_assignment_data: previous.ring_assignation_data, - staging_parameters: Lww::new(parameters), - staging_roles, - staging_hash: [0u8; 32].into(), - }; - res.staging_hash = res.calculate_staging_hash(); - res - } - } - - fn multiply_all_capacities( - old_roles: LwwMap, - mul: u64, - ) -> LwwMap { - let mut new_roles = LwwMap::new(); - for (node, ts, role) in old_roles.items() { - let mut role = role.clone(); - if let NodeRoleV(Some(NodeRole { - capacity: Some(ref mut cap), - .. - })) = role - { - *cap *= mul; - } - new_roles.merge_raw(node, *ts, &role); - } - new_roles - } -} - -pub use v09::*; - impl AutoCrdt for LayoutParameters { const WARN_IF_DIFFERENT: bool = true; } @@ -272,19 +64,15 @@ impl core::str::FromStr for ZoneRedundancy { } } -// Implementation of the ClusterLayout methods unrelated to the assignment algorithm. -impl ClusterLayout { +impl LayoutVersion { pub fn new(replication_factor: usize) -> Self { // We set the default zone redundancy to be Maximum, meaning that the maximum // possible value will be used depending on the cluster topology let parameters = LayoutParameters { zone_redundancy: ZoneRedundancy::Maximum, }; - let staging_parameters = Lww::::new(parameters); - let empty_lwwmap = LwwMap::new(); - - let mut ret = ClusterLayout { + LayoutVersion { version: 0, replication_factor, partition_size: 0, @@ -292,12 +80,7 @@ impl ClusterLayout { node_id_vec: Vec::new(), ring_assignment_data: Vec::new(), parameters, - staging_parameters, - staging_roles: empty_lwwmap, - staging_hash: [0u8; 32].into(), - }; - ret.staging_hash = ret.calculate_staging_hash(); - ret + } } // ===================== accessors ====================== @@ -399,7 +182,7 @@ impl ClusterLayout { // ===================== internal information extractors ====================== /// Returns the uuids of the non_gateway nodes in self.node_id_vec. - fn nongateway_nodes(&self) -> Vec { + pub(crate) fn nongateway_nodes(&self) -> Vec { let mut result = Vec::::new(); for uuid in self.node_id_vec.iter() { match self.node_role(uuid) { @@ -446,99 +229,10 @@ impl ClusterLayout { } } - fn calculate_staging_hash(&self) -> Hash { - let hashed_tuple = (&self.staging_roles, &self.staging_parameters); - blake2sum(&nonversioned_encode(&hashed_tuple).unwrap()[..]) - } - - // ================== updates to layout, public interface =================== - - pub fn merge(&mut self, other: &ClusterLayout) -> bool { - match other.version.cmp(&self.version) { - Ordering::Greater => { - *self = other.clone(); - true - } - Ordering::Equal => { - self.staging_parameters.merge(&other.staging_parameters); - self.staging_roles.merge(&other.staging_roles); - - let new_staging_hash = self.calculate_staging_hash(); - let changed = new_staging_hash != self.staging_hash; - - self.staging_hash = new_staging_hash; - - changed - } - Ordering::Less => false, - } - } - - pub fn apply_staged_changes(mut self, version: Option) -> Result<(Self, Message), Error> { - match version { - None => { - let error = r#" -Please pass the new layout version number to ensure that you are writing the correct version of the cluster layout. -To know the correct value of the new layout version, invoke `garage layout show` and review the proposed changes. - "#; - return Err(Error::Message(error.into())); - } - Some(v) => { - if v != self.version + 1 { - return Err(Error::Message("Invalid new layout version".into())); - } - } - } - - self.roles.merge(&self.staging_roles); - self.roles.retain(|(_, _, v)| v.0.is_some()); - self.parameters = *self.staging_parameters.get(); - - self.staging_roles.clear(); - self.staging_hash = self.calculate_staging_hash(); - - let msg = self.calculate_partition_assignment()?; - - self.version += 1; - - Ok((self, msg)) - } - - pub fn revert_staged_changes(mut self, version: Option) -> Result { - match version { - None => { - let error = r#" -Please pass the new layout version number to ensure that you are writing the correct version of the cluster layout. -To know the correct value of the new layout version, invoke `garage layout show` and review the proposed changes. - "#; - return Err(Error::Message(error.into())); - } - Some(v) => { - if v != self.version + 1 { - return Err(Error::Message("Invalid new layout version".into())); - } - } - } - - self.staging_roles.clear(); - self.staging_parameters.update(self.parameters); - self.staging_hash = self.calculate_staging_hash(); - - self.version += 1; - - Ok(self) - } - /// Check a cluster layout for internal consistency /// (assignment, roles, parameters, partition size) /// returns true if consistent, false if error pub fn check(&self) -> Result<(), String> { - // Check that the hash of the staging data is correct - let staging_hash = self.calculate_staging_hash(); - if staging_hash != self.staging_hash { - return Err("staging_hash is incorrect".into()); - } - // Check that node_id_vec contains the correct list of nodes let mut expected_nodes = self .roles @@ -654,7 +348,7 @@ To know the correct value of the new layout version, invoke `garage layout show` /// data to be moved. /// Staged role changes must be merged with nodes roles before calling this function, /// hence it must only be called from apply_staged_changes() and hence is not public. - fn calculate_partition_assignment(&mut self) -> Result { + pub(crate) fn calculate_partition_assignment(&mut self) -> Result { // We update the node ids, since the node role list might have changed with the // changes in the layout. We retrieve the old_assignment reframed with new ids let old_assignment_opt = self.update_node_id_vec()?; @@ -911,7 +605,7 @@ To know the correct value of the new layout version, invoke `garage layout show` zone_redundancy: usize, ) -> Result, Error> { let vertices = - ClusterLayout::generate_graph_vertices(zone_to_id.len(), self.nongateway_nodes().len()); + LayoutVersion::generate_graph_vertices(zone_to_id.len(), self.nongateway_nodes().len()); let mut g = Graph::::new(&vertices); let nb_zones = zone_to_id.len(); for p in 0..NB_PARTITIONS { @@ -1214,7 +908,7 @@ mod tests { // number of tokens by zone : (A, 4), (B,1), (C,4), (D, 4), (E, 2) // With these parameters, the naive algo fails, whereas there is a solution: // (A,A,C,D,E) , (A,B,C,D,D) (A,C,C,D,E) - fn check_against_naive(cl: &ClusterLayout) -> Result { + fn check_against_naive(cl: &LayoutVersion) -> Result { let over_size = cl.partition_size + 1; let mut zone_token = HashMap::::new(); @@ -1280,7 +974,7 @@ mod tests { } fn update_layout( - cl: &mut ClusterLayout, + cl: &mut LayoutVersion, node_id_vec: &Vec, node_capacity_vec: &Vec, node_zone_vec: &Vec, @@ -1316,7 +1010,7 @@ mod tests { .map(|x| x.to_string()) .collect(); - let mut cl = ClusterLayout::new(3); + let mut cl = LayoutVersion::new(3); update_layout(&mut cl, &node_id_vec, &node_capacity_vec, &node_zone_vec, 3); let v = cl.version; let (mut cl, msg) = cl.apply_staged_changes(Some(v + 1)).unwrap(); diff --git a/src/rpc/rpc_helper.rs b/src/rpc/rpc_helper.rs index 56bef2f3..3fdb4acd 100644 --- a/src/rpc/rpc_helper.rs +++ b/src/rpc/rpc_helper.rs @@ -26,7 +26,7 @@ use garage_util::data::*; use garage_util::error::Error; use garage_util::metrics::RecordDuration; -use crate::layout::ClusterLayout; +use crate::layout::LayoutHistory; use crate::metrics::RpcMetrics; // Default RPC timeout = 5 minutes @@ -91,7 +91,7 @@ pub struct RpcHelper(Arc); struct RpcHelperInner { our_node_id: Uuid, fullmesh: Arc, - layout_watch: watch::Receiver>, + layout_watch: watch::Receiver>, metrics: RpcMetrics, rpc_timeout: Duration, } @@ -100,7 +100,7 @@ impl RpcHelper { pub(crate) fn new( our_node_id: Uuid, fullmesh: Arc, - layout_watch: watch::Receiver>, + layout_watch: watch::Receiver>, rpc_timeout: Option, ) -> Self { let metrics = RpcMetrics::new(); @@ -392,8 +392,8 @@ impl RpcHelper { pub fn request_order(&self, nodes: &[Uuid]) -> Vec { // Retrieve some status variables that we will use to sort requests let peer_list = self.0.fullmesh.get_peer_list(); - let layout: Arc = self.0.layout_watch.borrow().clone(); - let our_zone = match layout.node_role(&self.0.our_node_id) { + let layout: Arc = self.0.layout_watch.borrow().clone(); + let our_zone = match layout.current().node_role(&self.0.our_node_id) { Some(pc) => &pc.zone, None => "", }; @@ -407,7 +407,7 @@ impl RpcHelper { let mut nodes = nodes .iter() .map(|to| { - let peer_zone = match layout.node_role(to) { + let peer_zone = match layout.current().node_role(to) { Some(pc) => &pc.zone, None => "", }; diff --git a/src/rpc/system.rs b/src/rpc/system.rs index 93144e39..86d724f1 100644 --- a/src/rpc/system.rs +++ b/src/rpc/system.rs @@ -64,7 +64,7 @@ pub enum SystemRpc { /// Exchanged with every node on a regular basis. AdvertiseStatus(NodeStatus), /// Advertisement of cluster layout. Sent spontanously or in response to PullClusterLayout - AdvertiseClusterLayout(ClusterLayout), + AdvertiseClusterLayout(LayoutHistory), /// Get known nodes states GetKnownNodes, /// Return known nodes @@ -84,7 +84,7 @@ pub struct System { /// The id of this node pub id: Uuid, - persist_cluster_layout: Persister, + persist_cluster_layout: Persister, persist_peer_list: Persister, local_status: ArcSwap, @@ -112,8 +112,8 @@ pub struct System { replication_factor: usize, /// The layout - pub layout_watch: watch::Receiver>, - update_layout: Mutex>>, + pub layout_watch: watch::Receiver>, + update_layout: Mutex>>, /// Path to metadata directory pub metadata_dir: PathBuf, @@ -256,16 +256,16 @@ impl System { hex::encode(&node_key.public_key()[..8]) ); - let persist_cluster_layout: Persister = + let persist_cluster_layout: Persister = Persister::new(&config.metadata_dir, "cluster_layout"); let persist_peer_list = Persister::new(&config.metadata_dir, "peer_list"); let cluster_layout = match persist_cluster_layout.load() { Ok(x) => { - if x.replication_factor != replication_factor { + if x.current().replication_factor != replication_factor { return Err(Error::Message(format!( "Prevous cluster layout has replication factor {}, which is different than the one specified in the config file ({}). The previous cluster layout can be purged, if you know what you are doing, simply by deleting the `cluster_layout` file in your metadata directory.", - x.replication_factor, + x.current().replication_factor, replication_factor ))); } @@ -276,7 +276,7 @@ impl System { "No valid previous cluster layout stored ({}), starting fresh.", e ); - ClusterLayout::new(replication_factor) + LayoutHistory::new(replication_factor) } }; @@ -423,13 +423,13 @@ impl System { known_nodes } - pub fn cluster_layout(&self) -> watch::Ref> { + pub fn cluster_layout(&self) -> watch::Ref> { self.layout_watch.borrow() } pub async fn update_cluster_layout( self: &Arc, - layout: &ClusterLayout, + layout: &LayoutHistory, ) -> Result<(), Error> { self.handle_advertise_cluster_layout(layout).await?; Ok(()) @@ -475,7 +475,9 @@ impl System { .collect::>(); let connected_nodes = nodes.iter().filter(|(_, n)| n.is_up).count(); + // TODO: not only layout.current() let storage_nodes = layout + .current() .roles .items() .iter() @@ -486,11 +488,11 @@ impl System { .filter(|(x, _, _)| nodes.get(x).map(|n| n.is_up).unwrap_or(false)) .count(); - let partitions = layout.partitions(); + let partitions = layout.current().partitions(); let partitions_n_up = partitions .iter() .map(|(_, h)| { - let pn = layout.nodes_of(h, layout.replication_factor); + let pn = layout.current().nodes_of(h, replication_factor); pn.iter() .filter(|x| nodes.get(x).map(|n| n.is_up).unwrap_or(false)) .count() @@ -581,7 +583,7 @@ impl System { /// Save network configuration to disc async fn save_cluster_layout(&self) -> Result<(), Error> { - let layout: Arc = self.layout_watch.borrow().clone(); + let layout: Arc = self.layout_watch.borrow().clone(); self.persist_cluster_layout .save_async(&layout) .await @@ -593,7 +595,7 @@ impl System { let mut new_si: NodeStatus = self.local_status.load().as_ref().clone(); let layout = self.layout_watch.borrow(); - new_si.cluster_layout_version = layout.version; + new_si.cluster_layout_version = layout.current().version; new_si.cluster_layout_staging_hash = layout.staging_hash; new_si.update_disk_usage(&self.metadata_dir, &self.data_dir, &self.metrics); @@ -648,12 +650,12 @@ impl System { async fn handle_advertise_cluster_layout( self: &Arc, - adv: &ClusterLayout, + adv: &LayoutHistory, ) -> Result { - if adv.replication_factor != self.replication_factor { + if adv.current().replication_factor != self.replication_factor { let msg = format!( "Received a cluster layout from another node with replication factor {}, which is different from what we have in our configuration ({}). Discarding the cluster layout we received.", - adv.replication_factor, + adv.current().replication_factor, self.replication_factor ); error!("{}", msg); @@ -662,7 +664,7 @@ impl System { let update_layout = self.update_layout.lock().await; // TODO: don't clone each time an AdvertiseClusterLayout is received - let mut layout: ClusterLayout = self.layout_watch.borrow().as_ref().clone(); + let mut layout: LayoutHistory = self.layout_watch.borrow().as_ref().clone(); let prev_layout_check = layout.check().is_ok(); if layout.merge(adv) { @@ -724,7 +726,7 @@ impl System { while !*stop_signal.borrow() { let not_configured = self.layout_watch.borrow().check().is_err(); let no_peers = self.fullmesh.get_peer_list().len() < self.replication_factor; - let expected_n_nodes = self.layout_watch.borrow().num_nodes(); + let expected_n_nodes = self.layout_watch.borrow().current().num_nodes(); let bad_peers = self .fullmesh .get_peer_list() @@ -863,13 +865,13 @@ impl EndpointHandler for System { } impl NodeStatus { - fn initial(replication_factor: usize, layout: &ClusterLayout) -> Self { + fn initial(replication_factor: usize, layout: &LayoutHistory) -> Self { NodeStatus { hostname: gethostname::gethostname() .into_string() .unwrap_or_else(|_| "".to_string()), replication_factor, - cluster_layout_version: layout.version, + cluster_layout_version: layout.current().version, cluster_layout_staging_hash: layout.staging_hash, meta_disk_avail: None, data_disk_avail: None, From 8dccee3ccfe7793c42203f28c1e91c6f989b6899 Mon Sep 17 00:00:00 2001 From: Alex Auvolat Date: Wed, 8 Nov 2023 19:28:36 +0100 Subject: [PATCH 081/538] cluster layout: adapt all uses of ClusterLayout to LayoutHistory --- src/api/admin/cluster.rs | 9 ++++---- src/api/k2v/index.rs | 9 +++++--- src/garage/admin/mod.rs | 14 ++++++------ src/garage/cli/cmd.rs | 17 +++++++++----- src/garage/cli/layout.rs | 38 +++++++++++++++++-------------- src/model/helper/bucket.rs | 9 +++++--- src/model/index_counter.rs | 6 ++--- src/rpc/layout/history.rs | 17 ++++---------- src/rpc/layout/schema.rs | 5 ++-- src/table/replication/fullcopy.rs | 5 ++-- src/table/replication/sharded.rs | 16 ++++++++----- src/table/sync.rs | 4 ++-- 12 files changed, 80 insertions(+), 69 deletions(-) diff --git a/src/api/admin/cluster.rs b/src/api/admin/cluster.rs index 01ff9885..6dd2e8da 100644 --- a/src/api/admin/cluster.rs +++ b/src/api/admin/cluster.rs @@ -89,8 +89,9 @@ pub async fn handle_get_cluster_layout(garage: &Arc) -> Result GetClusterLayoutResponse { +fn format_cluster_layout(layout: &layout::LayoutHistory) -> GetClusterLayoutResponse { let roles = layout + .current() .roles .items() .iter() @@ -107,7 +108,7 @@ fn format_cluster_layout(layout: &layout::ClusterLayout) -> GetClusterLayoutResp .staging_roles .items() .iter() - .filter(|(k, _, v)| layout.roles.get(k) != Some(v)) + .filter(|(k, _, v)| layout.current().roles.get(k) != Some(v)) .map(|(k, _, v)| match &v.0 { None => NodeRoleChange { id: hex::encode(k), @@ -125,7 +126,7 @@ fn format_cluster_layout(layout: &layout::ClusterLayout) -> GetClusterLayoutResp .collect::>(); GetClusterLayoutResponse { - version: layout.version, + version: layout.current().version, roles, staged_role_changes, } @@ -209,7 +210,7 @@ pub async fn handle_update_cluster_layout( let mut layout = garage.system.cluster_layout().as_ref().clone(); - let mut roles = layout.roles.clone(); + let mut roles = layout.current().roles.clone(); roles.merge(&layout.staging_roles); for change in updates { diff --git a/src/api/k2v/index.rs b/src/api/k2v/index.rs index 3fc39de6..a9bc3826 100644 --- a/src/api/k2v/index.rs +++ b/src/api/k2v/index.rs @@ -5,7 +5,7 @@ use serde::Serialize; use garage_util::data::*; -use garage_rpc::layout::ClusterLayout; +use garage_rpc::layout::LayoutHistory; use garage_table::util::*; use garage_model::garage::Garage; @@ -26,7 +26,7 @@ pub async fn handle_read_index( ) -> Result, Error> { let reverse = reverse.unwrap_or(false); - let layout: Arc = garage.system.cluster_layout().clone(); + let layout: Arc = garage.system.cluster_layout().clone(); let (partition_keys, more, next_start) = read_range( &garage.k2v.counter_table.table, @@ -35,7 +35,10 @@ pub async fn handle_read_index( &start, &end, limit, - Some((DeletedFilter::NotDeleted, layout.node_id_vec.clone())), + Some(( + DeletedFilter::NotDeleted, + layout.current().node_id_vec.clone(), + )), EnumerationOrder::from_reverse(reverse), ) .await?; diff --git a/src/garage/admin/mod.rs b/src/garage/admin/mod.rs index c3fa801a..e3ba6d35 100644 --- a/src/garage/admin/mod.rs +++ b/src/garage/admin/mod.rs @@ -127,7 +127,7 @@ impl AdminRpcHandler { let mut failures = vec![]; let layout = self.garage.system.cluster_layout().clone(); - for node in layout.node_ids().iter() { + for node in layout.current().node_ids().iter() { let node = (*node).into(); let resp = self .endpoint @@ -165,7 +165,7 @@ impl AdminRpcHandler { let mut ret = String::new(); let layout = self.garage.system.cluster_layout().clone(); - for node in layout.node_ids().iter() { + for node in layout.current().node_ids().iter() { let mut opt = opt.clone(); opt.all_nodes = false; opt.skip_global = true; @@ -277,8 +277,8 @@ impl AdminRpcHandler { // Gather storage node and free space statistics let layout = &self.garage.system.cluster_layout(); let mut node_partition_count = HashMap::::new(); - for short_id in layout.ring_assignment_data.iter() { - let id = layout.node_id_vec[*short_id as usize]; + for short_id in layout.current().ring_assignment_data.iter() { + let id = layout.current().node_id_vec[*short_id as usize]; *node_partition_count.entry(id).or_default() += 1; } let node_info = self @@ -293,7 +293,7 @@ impl AdminRpcHandler { for (id, parts) in node_partition_count.iter() { let info = node_info.get(id); let status = info.map(|x| &x.status); - let role = layout.roles.get(id).and_then(|x| x.0.as_ref()); + let role = layout.current().roles.get(id).and_then(|x| x.0.as_ref()); let hostname = status.map(|x| x.hostname.as_str()).unwrap_or("?"); let zone = role.map(|x| x.zone.as_str()).unwrap_or("?"); let capacity = role @@ -441,7 +441,7 @@ impl AdminRpcHandler { if all_nodes { let mut ret = vec![]; let layout = self.garage.system.cluster_layout().clone(); - for node in layout.node_ids().iter() { + for node in layout.current().node_ids().iter() { let node = (*node).into(); match self .endpoint @@ -489,7 +489,7 @@ impl AdminRpcHandler { if all_nodes { let mut ret = vec![]; let layout = self.garage.system.cluster_layout().clone(); - for node in layout.node_ids().iter() { + for node in layout.current().node_ids().iter() { let node = (*node).into(); match self .endpoint diff --git a/src/garage/cli/cmd.rs b/src/garage/cli/cmd.rs index 48359614..8be43873 100644 --- a/src/garage/cli/cmd.rs +++ b/src/garage/cli/cmd.rs @@ -62,7 +62,7 @@ pub async fn cmd_status(rpc_cli: &Endpoint, rpc_host: NodeID) -> let mut healthy_nodes = vec!["ID\tHostname\tAddress\tTags\tZone\tCapacity\tDataAvail".to_string()]; for adv in status.iter().filter(|adv| adv.is_up) { - match layout.roles.get(&adv.id) { + match layout.current().roles.get(&adv.id) { Some(NodeRoleV(Some(cfg))) => { let data_avail = match &adv.status.data_disk_avail { _ if cfg.capacity.is_none() => "N/A".into(), @@ -102,10 +102,15 @@ pub async fn cmd_status(rpc_cli: &Endpoint, rpc_host: NodeID) -> format_table(healthy_nodes); let status_keys = status.iter().map(|adv| adv.id).collect::>(); - let failure_case_1 = status - .iter() - .any(|adv| !adv.is_up && matches!(layout.roles.get(&adv.id), Some(NodeRoleV(Some(_))))); + let failure_case_1 = status.iter().any(|adv| { + !adv.is_up + && matches!( + layout.current().roles.get(&adv.id), + Some(NodeRoleV(Some(_))) + ) + }); let failure_case_2 = layout + .current() .roles .items() .iter() @@ -115,7 +120,7 @@ pub async fn cmd_status(rpc_cli: &Endpoint, rpc_host: NodeID) -> let mut failed_nodes = vec!["ID\tHostname\tAddress\tTags\tZone\tCapacity\tLast seen".to_string()]; for adv in status.iter().filter(|adv| !adv.is_up) { - if let Some(NodeRoleV(Some(cfg))) = layout.roles.get(&adv.id) { + if let Some(NodeRoleV(Some(cfg))) = layout.current().roles.get(&adv.id) { let tf = timeago::Formatter::new(); failed_nodes.push(format!( "{id:?}\t{host}\t{addr}\t[{tags}]\t{zone}\t{capacity}\t{last_seen}", @@ -132,7 +137,7 @@ pub async fn cmd_status(rpc_cli: &Endpoint, rpc_host: NodeID) -> )); } } - for (id, _, role_v) in layout.roles.items().iter() { + for (id, _, role_v) in layout.current().roles.items().iter() { if let NodeRoleV(Some(cfg)) = role_v { if !status_keys.contains(id) { failed_nodes.push(format!( diff --git a/src/garage/cli/layout.rs b/src/garage/cli/layout.rs index ce2b11e0..4a617337 100644 --- a/src/garage/cli/layout.rs +++ b/src/garage/cli/layout.rs @@ -58,17 +58,18 @@ pub async fn cmd_assign_role( status .iter() .map(|adv| adv.id) - .chain(layout.node_ids().iter().cloned()), + .chain(layout.current().node_ids().iter().cloned()), node_id, ) }) .collect::, _>>()?; - let mut roles = layout.roles.clone(); + let mut roles = layout.current().roles.clone(); roles.merge(&layout.staging_roles); for replaced in args.replace.iter() { - let replaced_node = find_matching_node(layout.node_ids().iter().cloned(), replaced)?; + let replaced_node = + find_matching_node(layout.current().node_ids().iter().cloned(), replaced)?; match roles.get(&replaced_node) { Some(NodeRoleV(Some(_))) => { layout @@ -149,7 +150,7 @@ pub async fn cmd_remove_role( ) -> Result<(), Error> { let mut layout = fetch_layout(rpc_cli, rpc_host).await?; - let mut roles = layout.roles.clone(); + let mut roles = layout.current().roles.clone(); roles.merge(&layout.staging_roles); let deleted_node = @@ -174,13 +175,16 @@ pub async fn cmd_show_layout( let layout = fetch_layout(rpc_cli, rpc_host).await?; println!("==== CURRENT CLUSTER LAYOUT ===="); - print_cluster_layout(&layout, "No nodes currently have a role in the cluster.\nSee `garage status` to view available nodes."); + print_cluster_layout(layout.current(), "No nodes currently have a role in the cluster.\nSee `garage status` to view available nodes."); println!(); - println!("Current cluster layout version: {}", layout.version); + println!( + "Current cluster layout version: {}", + layout.current().version + ); let has_role_changes = print_staging_role_changes(&layout); if has_role_changes { - let v = layout.version; + let v = layout.current().version; let res_apply = layout.apply_staged_changes(Some(v + 1)); // this will print the stats of what partitions @@ -189,7 +193,7 @@ pub async fn cmd_show_layout( Ok((layout, msg)) => { println!(); println!("==== NEW CLUSTER LAYOUT AFTER APPLYING CHANGES ===="); - print_cluster_layout(&layout, "No nodes have a role in the new layout."); + print_cluster_layout(layout.current(), "No nodes have a role in the new layout."); println!(); for line in msg.iter() { @@ -266,11 +270,11 @@ pub async fn cmd_config_layout( .parse::() .ok_or_message("invalid zone redundancy value")?; if let ZoneRedundancy::AtLeast(r_int) = r { - if r_int > layout.replication_factor { + if r_int > layout.current().replication_factor { return Err(Error::Message(format!( "The zone redundancy must be smaller or equal to the \ replication factor ({}).", - layout.replication_factor + layout.current().replication_factor ))); } else if r_int < 1 { return Err(Error::Message( @@ -302,7 +306,7 @@ pub async fn cmd_config_layout( pub async fn fetch_layout( rpc_cli: &Endpoint, rpc_host: NodeID, -) -> Result { +) -> Result { match rpc_cli .call(&rpc_host, SystemRpc::PullClusterLayout, PRIO_NORMAL) .await?? @@ -315,7 +319,7 @@ pub async fn fetch_layout( pub async fn send_layout( rpc_cli: &Endpoint, rpc_host: NodeID, - layout: ClusterLayout, + layout: LayoutHistory, ) -> Result<(), Error> { rpc_cli .call( @@ -327,7 +331,7 @@ pub async fn send_layout( Ok(()) } -pub fn print_cluster_layout(layout: &ClusterLayout, empty_msg: &str) { +pub fn print_cluster_layout(layout: &LayoutVersion, empty_msg: &str) { let mut table = vec!["ID\tTags\tZone\tCapacity\tUsable capacity".to_string()]; for (id, _, role) in layout.roles.items().iter() { let role = match &role.0 { @@ -366,13 +370,13 @@ pub fn print_cluster_layout(layout: &ClusterLayout, empty_msg: &str) { } } -pub fn print_staging_role_changes(layout: &ClusterLayout) -> bool { +pub fn print_staging_role_changes(layout: &LayoutHistory) -> bool { let has_role_changes = layout .staging_roles .items() .iter() - .any(|(k, _, v)| layout.roles.get(k) != Some(v)); - let has_layout_changes = *layout.staging_parameters.get() != layout.parameters; + .any(|(k, _, v)| layout.current().roles.get(k) != Some(v)); + let has_layout_changes = *layout.staging_parameters.get() != layout.current().parameters; if has_role_changes || has_layout_changes { println!(); @@ -380,7 +384,7 @@ pub fn print_staging_role_changes(layout: &ClusterLayout) -> bool { if has_role_changes { let mut table = vec!["ID\tTags\tZone\tCapacity".to_string()]; for (id, _, role) in layout.staging_roles.items().iter() { - if layout.roles.get(id) == Some(role) { + if layout.current().roles.get(id) == Some(role) { continue; } if let Some(role) = &role.0 { diff --git a/src/model/helper/bucket.rs b/src/model/helper/bucket.rs index 8cd5b27b..18904c8d 100644 --- a/src/model/helper/bucket.rs +++ b/src/model/helper/bucket.rs @@ -450,10 +450,10 @@ impl<'a> BucketHelper<'a> { #[cfg(feature = "k2v")] { - use garage_rpc::layout::ClusterLayout; + use garage_rpc::layout::LayoutHistory; use std::sync::Arc; - let layout: Arc = self.0.system.cluster_layout().clone(); + let layout: Arc = self.0.system.cluster_layout().clone(); let k2vindexes = self .0 .k2v @@ -462,7 +462,10 @@ impl<'a> BucketHelper<'a> { .get_range( &bucket_id, None, - Some((DeletedFilter::NotDeleted, layout.node_id_vec.clone())), + Some(( + DeletedFilter::NotDeleted, + layout.current().node_id_vec.clone(), + )), 10, EnumerationOrder::Forward, ) diff --git a/src/model/index_counter.rs b/src/model/index_counter.rs index d514cb06..9637cc4c 100644 --- a/src/model/index_counter.rs +++ b/src/model/index_counter.rs @@ -7,7 +7,7 @@ use serde::{Deserialize, Serialize}; use garage_db as db; -use garage_rpc::layout::ClusterLayout; +use garage_rpc::layout::LayoutHistory; use garage_rpc::system::System; use garage_util::background::BackgroundRunner; use garage_util::data::*; @@ -83,8 +83,8 @@ impl Entry for CounterEntry { } impl CounterEntry { - pub fn filtered_values(&self, layout: &ClusterLayout) -> HashMap { - let nodes = &layout.node_id_vec[..]; + pub fn filtered_values(&self, layout: &LayoutHistory) -> HashMap { + let nodes = &layout.current().node_id_vec[..]; self.filtered_values_with_nodes(nodes) } diff --git a/src/rpc/layout/history.rs b/src/rpc/layout/history.rs index b3019f58..e59c9e9c 100644 --- a/src/rpc/layout/history.rs +++ b/src/rpc/layout/history.rs @@ -1,5 +1,4 @@ use std::cmp::Ordering; -use std::sync::Arc; use garage_util::crdt::{Crdt, Lww, LwwMap}; use garage_util::data::*; @@ -64,24 +63,22 @@ impl LayoutHistory { } // Add any new versions to history - let mut versions = self.versions.to_vec(); for v2 in other.versions.iter() { - if let Some(v1) = versions.iter().find(|v| v.version == v2.version) { + if let Some(v1) = self.versions.iter().find(|v| v.version == v2.version) { if v1 != v2 { error!("Inconsistent layout histories: different layout compositions for version {}. Your cluster will be broken as long as this layout version is not replaced.", v2.version); } - } else if versions.iter().all(|v| v.version != v2.version - 1) { + } else if self.versions.iter().all(|v| v.version != v2.version - 1) { error!( "Cannot receive new layout version {}, version {} is missing", v2.version, v2.version - 1 ); } else { - versions.push(v2.clone()); + self.versions.push(v2.clone()); changed = true; } } - self.versions = Arc::from(versions.into_boxed_slice()); // Merge trackers self.update_trackers.merge(&other.update_trackers); @@ -117,9 +114,7 @@ To know the correct value of the new layout version, invoke `garage layout show` let msg = new_version.calculate_partition_assignment()?; - let mut versions = self.versions.to_vec(); - versions.push(new_version); - self.versions = Arc::from(versions.into_boxed_slice()); + self.versions.push(new_version); Ok((self, msg)) } @@ -149,9 +144,7 @@ To know the correct value of the new layout version, invoke `garage layout show` let mut new_version = self.current().clone(); new_version.version += 1; - let mut versions = self.versions.to_vec(); - versions.push(new_version); - self.versions = Arc::from(versions.into_boxed_slice()); + self.versions.push(new_version); Ok(self) } diff --git a/src/rpc/layout/schema.rs b/src/rpc/layout/schema.rs index fa0822fa..14e797be 100644 --- a/src/rpc/layout/schema.rs +++ b/src/rpc/layout/schema.rs @@ -184,7 +184,6 @@ mod v010 { use garage_util::data::{Hash, Uuid}; use serde::{Deserialize, Serialize}; use std::collections::HashMap; - use std::sync::Arc; pub use v09::{LayoutParameters, NodeRole, NodeRoleV, ZoneRedundancy}; /// The layout of the cluster, i.e. the list of roles @@ -215,7 +214,7 @@ mod v010 { #[derive(Clone, Debug, Serialize, Deserialize)] pub struct LayoutHistory { /// The versions currently in use in the cluster - pub versions: Arc<[LayoutVersion]>, + pub versions: Vec, /// Update trackers pub update_trackers: UpdateTrackers, @@ -267,7 +266,7 @@ mod v010 { .collect::>(), ); let mut ret = Self { - versions: Arc::from(vec![version].into_boxed_slice()), + versions: vec![version], update_trackers: UpdateTrackers { ack_map: update_tracker.clone(), sync_map: update_tracker.clone(), diff --git a/src/table/replication/fullcopy.rs b/src/table/replication/fullcopy.rs index 34807e3d..a5c83d0f 100644 --- a/src/table/replication/fullcopy.rs +++ b/src/table/replication/fullcopy.rs @@ -27,11 +27,10 @@ impl TableReplication for TableFullReplication { } fn write_nodes(&self, _hash: &Hash) -> Vec { - let layout = self.system.cluster_layout(); - layout.node_ids().to_vec() + self.system.cluster_layout().current().node_ids().to_vec() } fn write_quorum(&self) -> usize { - let nmembers = self.system.cluster_layout().node_ids().len(); + let nmembers = self.system.cluster_layout().current().node_ids().len(); if nmembers > self.max_faults { nmembers - self.max_faults } else { diff --git a/src/table/replication/sharded.rs b/src/table/replication/sharded.rs index 60c95cb4..793d87fd 100644 --- a/src/table/replication/sharded.rs +++ b/src/table/replication/sharded.rs @@ -26,16 +26,20 @@ pub struct TableShardedReplication { impl TableReplication for TableShardedReplication { fn read_nodes(&self, hash: &Hash) -> Vec { - let layout = self.system.cluster_layout(); - layout.nodes_of(hash, self.replication_factor) + self.system + .cluster_layout() + .current() + .nodes_of(hash, self.replication_factor) } fn read_quorum(&self) -> usize { self.read_quorum } fn write_nodes(&self, hash: &Hash) -> Vec { - let layout = self.system.cluster_layout(); - layout.nodes_of(hash, self.replication_factor) + self.system + .cluster_layout() + .current() + .nodes_of(hash, self.replication_factor) } fn write_quorum(&self) -> usize { self.write_quorum @@ -45,9 +49,9 @@ impl TableReplication for TableShardedReplication { } fn partition_of(&self, hash: &Hash) -> Partition { - self.system.cluster_layout().partition_of(hash) + self.system.cluster_layout().current().partition_of(hash) } fn partitions(&self) -> Vec<(Partition, Hash)> { - self.system.cluster_layout().partitions() + self.system.cluster_layout().current().partitions() } } diff --git a/src/table/sync.rs b/src/table/sync.rs index 65eff7cd..620d83b9 100644 --- a/src/table/sync.rs +++ b/src/table/sync.rs @@ -492,8 +492,8 @@ impl EndpointHandler for TableSync struct SyncWorker { syncer: Arc>, - layout_watch: watch::Receiver>, - layout: Arc, + layout_watch: watch::Receiver>, + layout: Arc, add_full_sync_rx: mpsc::UnboundedReceiver<()>, todo: Vec, next_full_sync: Instant, From 1da0a5676edcd20fc5c7412596edb5772da9f606 Mon Sep 17 00:00:00 2001 From: Alex Auvolat Date: Wed, 8 Nov 2023 19:30:58 +0100 Subject: [PATCH 082/538] bump garage protocol version tag to 0x000A (0.10) --- src/rpc/system.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/rpc/system.rs b/src/rpc/system.rs index 86d724f1..a7433b68 100644 --- a/src/rpc/system.rs +++ b/src/rpc/system.rs @@ -46,7 +46,7 @@ const STATUS_EXCHANGE_INTERVAL: Duration = Duration::from_secs(10); /// Version tag used for version check upon Netapp connection. /// Cluster nodes with different version tags are deemed /// incompatible and will refuse to connect. -pub const GARAGE_VERSION_TAG: u64 = 0x6761726167650008; // garage 0x0008 +pub const GARAGE_VERSION_TAG: u64 = 0x676172616765000A; // garage 0x000A /// RPC endpoint used for calls related to membership pub const SYSTEM_RPC_PATH: &str = "garage_rpc/membership.rs/SystemRpc"; From 523d2ecb9511f74e144cd116b942d6c1bf0f546d Mon Sep 17 00:00:00 2001 From: Alex Auvolat Date: Thu, 9 Nov 2023 11:19:43 +0100 Subject: [PATCH 083/538] layout: use separate CRDT for staged layout changes --- src/api/admin/api_server.rs | 2 +- src/api/admin/cluster.rs | 23 +++---- src/garage/cli/cmd.rs | 2 +- src/garage/cli/layout.rs | 47 ++++++++----- src/garage/cli/structs.rs | 6 +- src/rpc/{ => layout}/graph_algo.rs | 10 --- src/rpc/layout/history.rs | 82 +++++++--------------- src/rpc/layout/mod.rs | 4 +- src/rpc/layout/schema.rs | 106 +++++++++++++++++++++++++++-- src/rpc/layout/tracker.rs | 21 ------ src/rpc/layout/version.rs | 54 +-------------- src/rpc/lib.rs | 1 - 12 files changed, 175 insertions(+), 183 deletions(-) rename src/rpc/{ => layout}/graph_algo.rs (97%) delete mode 100644 src/rpc/layout/tracker.rs diff --git a/src/api/admin/api_server.rs b/src/api/admin/api_server.rs index 4779f924..d9bd600e 100644 --- a/src/api/admin/api_server.rs +++ b/src/api/admin/api_server.rs @@ -279,7 +279,7 @@ impl ApiHandler for AdminApiServer { Endpoint::GetClusterLayout => handle_get_cluster_layout(&self.garage).await, Endpoint::UpdateClusterLayout => handle_update_cluster_layout(&self.garage, req).await, Endpoint::ApplyClusterLayout => handle_apply_cluster_layout(&self.garage, req).await, - Endpoint::RevertClusterLayout => handle_revert_cluster_layout(&self.garage, req).await, + Endpoint::RevertClusterLayout => handle_revert_cluster_layout(&self.garage).await, // Keys Endpoint::ListKeys => handle_list_keys(&self.garage).await, Endpoint::GetKeyInfo { diff --git a/src/api/admin/cluster.rs b/src/api/admin/cluster.rs index 6dd2e8da..fe8e8764 100644 --- a/src/api/admin/cluster.rs +++ b/src/api/admin/cluster.rs @@ -105,7 +105,9 @@ fn format_cluster_layout(layout: &layout::LayoutHistory) -> GetClusterLayoutResp .collect::>(); let staged_role_changes = layout - .staging_roles + .staging + .get() + .roles .items() .iter() .filter(|(k, _, v)| layout.current().roles.get(k) != Some(v)) @@ -211,7 +213,7 @@ pub async fn handle_update_cluster_layout( let mut layout = garage.system.cluster_layout().as_ref().clone(); let mut roles = layout.current().roles.clone(); - roles.merge(&layout.staging_roles); + roles.merge(&layout.staging.get().roles); for change in updates { let node = hex::decode(&change.id).ok_or_bad_request("Invalid node identifier")?; @@ -232,7 +234,9 @@ pub async fn handle_update_cluster_layout( }; layout - .staging_roles + .staging + .get_mut() + .roles .merge(&roles.update_mutator(node, layout::NodeRoleV(new_role))); } @@ -246,7 +250,7 @@ pub async fn handle_apply_cluster_layout( garage: &Arc, req: Request, ) -> Result, Error> { - let param = parse_json_body::(req).await?; + let param = parse_json_body::(req).await?; let layout = garage.system.cluster_layout().as_ref().clone(); let (layout, msg) = layout.apply_staged_changes(Some(param.version))?; @@ -260,14 +264,9 @@ pub async fn handle_apply_cluster_layout( Ok(json_ok_response(&res)?) } -pub async fn handle_revert_cluster_layout( - garage: &Arc, - req: Request, -) -> Result, Error> { - let param = parse_json_body::(req).await?; - +pub async fn handle_revert_cluster_layout(garage: &Arc) -> Result, Error> { let layout = garage.system.cluster_layout().as_ref().clone(); - let layout = layout.revert_staged_changes(Some(param.version))?; + let layout = layout.revert_staged_changes()?; garage.system.update_cluster_layout(&layout).await?; let res = format_cluster_layout(&layout); @@ -280,7 +279,7 @@ type UpdateClusterLayoutRequest = Vec; #[derive(Deserialize)] #[serde(rename_all = "camelCase")] -struct ApplyRevertLayoutRequest { +struct ApplyLayoutRequest { version: u64, } diff --git a/src/garage/cli/cmd.rs b/src/garage/cli/cmd.rs index 8be43873..1a054025 100644 --- a/src/garage/cli/cmd.rs +++ b/src/garage/cli/cmd.rs @@ -85,7 +85,7 @@ pub async fn cmd_status(rpc_cli: &Endpoint, rpc_host: NodeID) -> )); } _ => { - let new_role = match layout.staging_roles.get(&adv.id) { + let new_role = match layout.staging.get().roles.get(&adv.id) { Some(NodeRoleV(Some(_))) => "(pending)", _ => "NO ROLE ASSIGNED", }; diff --git a/src/garage/cli/layout.rs b/src/garage/cli/layout.rs index 4a617337..269d92f4 100644 --- a/src/garage/cli/layout.rs +++ b/src/garage/cli/layout.rs @@ -65,7 +65,7 @@ pub async fn cmd_assign_role( .collect::, _>>()?; let mut roles = layout.current().roles.clone(); - roles.merge(&layout.staging_roles); + roles.merge(&layout.staging.get().roles); for replaced in args.replace.iter() { let replaced_node = @@ -73,7 +73,9 @@ pub async fn cmd_assign_role( match roles.get(&replaced_node) { Some(NodeRoleV(Some(_))) => { layout - .staging_roles + .staging + .get_mut() + .roles .merge(&roles.update_mutator(replaced_node, NodeRoleV(None))); } _ => { @@ -131,7 +133,9 @@ pub async fn cmd_assign_role( }; layout - .staging_roles + .staging + .get_mut() + .roles .merge(&roles.update_mutator(added_node, NodeRoleV(Some(new_entry)))); } @@ -151,13 +155,15 @@ pub async fn cmd_remove_role( let mut layout = fetch_layout(rpc_cli, rpc_host).await?; let mut roles = layout.current().roles.clone(); - roles.merge(&layout.staging_roles); + roles.merge(&layout.staging.get().roles); let deleted_node = find_matching_node(roles.items().iter().map(|(id, _, _)| *id), &args.node_id)?; layout - .staging_roles + .staging + .get_mut() + .roles .merge(&roles.update_mutator(deleted_node, NodeRoleV(None))); send_layout(rpc_cli, rpc_host, layout).await?; @@ -203,16 +209,12 @@ pub async fn cmd_show_layout( println!(); println!(" garage layout apply --version {}", v + 1); println!(); - println!( - "You can also revert all proposed changes with: garage layout revert --version {}", - v + 1) + println!("You can also revert all proposed changes with: garage layout revert"); } Err(e) => { println!("Error while trying to compute the assignment: {}", e); println!("This new layout cannot yet be applied."); - println!( - "You can also revert all proposed changes with: garage layout revert --version {}", - v + 1) + println!("You can also revert all proposed changes with: garage layout revert"); } } } @@ -245,9 +247,15 @@ pub async fn cmd_revert_layout( rpc_host: NodeID, revert_opt: RevertLayoutOpt, ) -> Result<(), Error> { + if !revert_opt.yes { + return Err(Error::Message( + "Please add the --yes flag to run the layout revert operation".into(), + )); + } + let layout = fetch_layout(rpc_cli, rpc_host).await?; - let layout = layout.revert_staged_changes(revert_opt.version)?; + let layout = layout.revert_staged_changes()?; send_layout(rpc_cli, rpc_host, layout).await?; @@ -284,7 +292,9 @@ pub async fn cmd_config_layout( } layout - .staging_parameters + .staging + .get_mut() + .parameters .update(LayoutParameters { zone_redundancy: r }); println!("The zone redundancy parameter has been set to '{}'.", r); did_something = true; @@ -371,19 +381,20 @@ pub fn print_cluster_layout(layout: &LayoutVersion, empty_msg: &str) { } pub fn print_staging_role_changes(layout: &LayoutHistory) -> bool { - let has_role_changes = layout - .staging_roles + let staging = layout.staging.get(); + let has_role_changes = staging + .roles .items() .iter() .any(|(k, _, v)| layout.current().roles.get(k) != Some(v)); - let has_layout_changes = *layout.staging_parameters.get() != layout.current().parameters; + let has_layout_changes = *staging.parameters.get() != layout.current().parameters; if has_role_changes || has_layout_changes { println!(); println!("==== STAGED ROLE CHANGES ===="); if has_role_changes { let mut table = vec!["ID\tTags\tZone\tCapacity".to_string()]; - for (id, _, role) in layout.staging_roles.items().iter() { + for (id, _, role) in staging.roles.items().iter() { if layout.current().roles.get(id) == Some(role) { continue; } @@ -406,7 +417,7 @@ pub fn print_staging_role_changes(layout: &LayoutHistory) -> bool { if has_layout_changes { println!( "Zone redundancy: {}", - layout.staging_parameters.get().zone_redundancy + staging.parameters.get().zone_redundancy ); } true diff --git a/src/garage/cli/structs.rs b/src/garage/cli/structs.rs index aba57551..3badc447 100644 --- a/src/garage/cli/structs.rs +++ b/src/garage/cli/structs.rs @@ -164,9 +164,9 @@ pub struct ApplyLayoutOpt { #[derive(StructOpt, Debug)] pub struct RevertLayoutOpt { - /// Version number of old configuration to which to revert - #[structopt(long = "version")] - pub(crate) version: Option, + /// The revert operation will not be ran unless this flag is added + #[structopt(long = "yes")] + pub(crate) yes: bool, } #[derive(Serialize, Deserialize, StructOpt, Debug)] diff --git a/src/rpc/graph_algo.rs b/src/rpc/layout/graph_algo.rs similarity index 97% rename from src/rpc/graph_algo.rs rename to src/rpc/layout/graph_algo.rs index d8c6c9b9..bd33e97f 100644 --- a/src/rpc/graph_algo.rs +++ b/src/rpc/layout/graph_algo.rs @@ -114,16 +114,6 @@ impl Graph { Ok(result) } - /// This function returns the value of the flow incoming to v. - pub fn get_inflow(&self, v: Vertex) -> Result { - let idv = self.get_vertex_id(&v)?; - let mut result = 0; - for edge in self.graph[idv].iter() { - result += max(0, self.graph[edge.dest][edge.rev].flow); - } - Ok(result) - } - /// This function returns the value of the flow outgoing from v. pub fn get_outflow(&self, v: Vertex) -> Result { let idv = self.get_vertex_id(&v)?; diff --git a/src/rpc/layout/history.rs b/src/rpc/layout/history.rs index e59c9e9c..9ae28887 100644 --- a/src/rpc/layout/history.rs +++ b/src/rpc/layout/history.rs @@ -1,5 +1,3 @@ -use std::cmp::Ordering; - use garage_util::crdt::{Crdt, Lww, LwwMap}; use garage_util::data::*; use garage_util::encode::nonversioned_encode; @@ -12,14 +10,15 @@ impl LayoutHistory { pub fn new(replication_factor: usize) -> Self { let version = LayoutVersion::new(replication_factor); - let staging_parameters = Lww::::new(version.parameters); - let empty_lwwmap = LwwMap::new(); + let staging = LayoutStaging { + parameters: Lww::::new(version.parameters), + roles: LwwMap::new(), + }; let mut ret = LayoutHistory { versions: vec![version].into_boxed_slice().into(), update_trackers: Default::default(), - staging_parameters, - staging_roles: empty_lwwmap, + staging: Lww::raw(0, staging), staging_hash: [0u8; 32].into(), }; ret.staging_hash = ret.calculate_staging_hash(); @@ -31,8 +30,7 @@ impl LayoutHistory { } pub(crate) fn calculate_staging_hash(&self) -> Hash { - let hashed_tuple = (&self.staging_roles, &self.staging_parameters); - blake2sum(&nonversioned_encode(&hashed_tuple).unwrap()[..]) + blake2sum(&nonversioned_encode(&self.staging).unwrap()[..]) } // ================== updates to layout, public interface =================== @@ -41,26 +39,10 @@ impl LayoutHistory { let mut changed = false; // Merge staged layout changes - match other.current().version.cmp(&self.current().version) { - Ordering::Greater => { - self.staging_parameters = other.staging_parameters.clone(); - self.staging_roles = other.staging_roles.clone(); - self.staging_hash = other.staging_hash; - changed = true; - } - Ordering::Equal => { - self.staging_parameters.merge(&other.staging_parameters); - self.staging_roles.merge(&other.staging_roles); - - let new_staging_hash = self.calculate_staging_hash(); - if new_staging_hash != self.staging_hash { - changed = true; - } - - self.staging_hash = new_staging_hash; - } - Ordering::Less => (), + if self.staging != other.staging { + changed = true; } + self.staging.merge(&other.staging); // Add any new versions to history for v2 in other.versions.iter() { @@ -102,50 +84,34 @@ To know the correct value of the new layout version, invoke `garage layout show` } } + // Compute new version and add it to history let mut new_version = self.current().clone(); new_version.version += 1; - new_version.roles.merge(&self.staging_roles); + new_version.roles.merge(&self.staging.get().roles); new_version.roles.retain(|(_, _, v)| v.0.is_some()); - new_version.parameters = *self.staging_parameters.get(); - - self.staging_roles.clear(); - self.staging_hash = self.calculate_staging_hash(); + new_version.parameters = *self.staging.get().parameters.get(); let msg = new_version.calculate_partition_assignment()?; - self.versions.push(new_version); + // Reset the staged layout changes + self.staging.update(LayoutStaging { + parameters: self.staging.get().parameters.clone(), + roles: LwwMap::new(), + }); + self.staging_hash = self.calculate_staging_hash(); + Ok((self, msg)) } - pub fn revert_staged_changes(mut self, version: Option) -> Result { - match version { - None => { - let error = r#" -Please pass the new layout version number to ensure that you are writing the correct version of the cluster layout. -To know the correct value of the new layout version, invoke `garage layout show` and review the proposed changes. - "#; - return Err(Error::Message(error.into())); - } - Some(v) => { - if v != self.current().version + 1 { - return Err(Error::Message("Invalid new layout version".into())); - } - } - } - - self.staging_roles.clear(); - self.staging_parameters.update(self.current().parameters); + pub fn revert_staged_changes(mut self) -> Result { + self.staging.update(LayoutStaging { + parameters: Lww::new(self.current().parameters.clone()), + roles: LwwMap::new(), + }); self.staging_hash = self.calculate_staging_hash(); - // TODO this is stupid, we should have a separate version counter/LWW - // for the staging params - let mut new_version = self.current().clone(); - new_version.version += 1; - - self.versions.push(new_version); - Ok(self) } diff --git a/src/rpc/layout/mod.rs b/src/rpc/layout/mod.rs index 122d4b65..7c15988a 100644 --- a/src/rpc/layout/mod.rs +++ b/src/rpc/layout/mod.rs @@ -1,8 +1,10 @@ +mod graph_algo; mod history; mod schema; -mod tracker; mod version; +// ---- re-exports ---- + pub use history::*; pub use schema::*; pub use version::*; diff --git a/src/rpc/layout/schema.rs b/src/rpc/layout/schema.rs index 14e797be..c5b9b1d3 100644 --- a/src/rpc/layout/schema.rs +++ b/src/rpc/layout/schema.rs @@ -1,3 +1,9 @@ +use std::fmt; + +use bytesize::ByteSize; + +use garage_util::crdt::{AutoCrdt, Crdt}; + mod v08 { use crate::layout::CompactNodeType; use garage_util::crdt::LwwMap; @@ -210,6 +216,15 @@ mod v010 { pub ring_assignment_data: Vec, } + /// The staged changes for the next layout version + #[derive(Clone, Debug, Serialize, Deserialize, PartialEq)] + pub struct LayoutStaging { + /// Parameters to be used in the next partition assignment computation. + pub parameters: Lww, + /// Role changes which are staged for the next version of the layout + pub roles: LwwMap, + } + /// The history of cluster layouts #[derive(Clone, Debug, Serialize, Deserialize)] pub struct LayoutHistory { @@ -219,10 +234,8 @@ mod v010 { /// Update trackers pub update_trackers: UpdateTrackers, - /// Parameters to be used in the next partition assignment computation. - pub staging_parameters: Lww, - /// Role changes which are staged for the next version of the layout - pub staging_roles: LwwMap, + /// Staged changes for the next version + pub staging: Lww, /// Hash of the serialized staging_parameters + staging_roles pub staging_hash: Hash, } @@ -265,6 +278,10 @@ mod v010 { .map(|x| (*x, version.version)) .collect::>(), ); + let staging = LayoutStaging { + parameters: previous.staging_parameters, + roles: previous.staging_roles, + }; let mut ret = Self { versions: vec![version], update_trackers: UpdateTrackers { @@ -272,8 +289,7 @@ mod v010 { sync_map: update_tracker.clone(), sync_ack_map: update_tracker.clone(), }, - staging_parameters: previous.staging_parameters, - staging_roles: previous.staging_roles, + staging: Lww::raw(previous.version, staging), staging_hash: [0u8; 32].into(), }; ret.staging_hash = ret.calculate_staging_hash(); @@ -283,3 +299,81 @@ mod v010 { } pub use v010::*; + +// ---- utility functions ---- + +impl AutoCrdt for LayoutParameters { + const WARN_IF_DIFFERENT: bool = true; +} + +impl AutoCrdt for NodeRoleV { + const WARN_IF_DIFFERENT: bool = true; +} + +impl Crdt for LayoutStaging { + fn merge(&mut self, other: &LayoutStaging) { + self.parameters.merge(&other.parameters); + self.roles.merge(&other.roles); + } +} + +impl NodeRole { + pub fn capacity_string(&self) -> String { + match self.capacity { + Some(c) => ByteSize::b(c).to_string_as(false), + None => "gateway".to_string(), + } + } + + pub fn tags_string(&self) -> String { + self.tags.join(",") + } +} + +impl fmt::Display for ZoneRedundancy { + fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { + match self { + ZoneRedundancy::Maximum => write!(f, "maximum"), + ZoneRedundancy::AtLeast(x) => write!(f, "{}", x), + } + } +} + +impl core::str::FromStr for ZoneRedundancy { + type Err = &'static str; + fn from_str(s: &str) -> Result { + match s { + "none" | "max" | "maximum" => Ok(ZoneRedundancy::Maximum), + x => { + let v = x + .parse::() + .map_err(|_| "zone redundancy must be 'none'/'max' or an integer")?; + Ok(ZoneRedundancy::AtLeast(v)) + } + } + } +} + +impl UpdateTracker { + fn merge(&mut self, other: &UpdateTracker) { + for (k, v) in other.0.iter() { + if let Some(v_mut) = self.0.get_mut(k) { + *v_mut = std::cmp::max(*v_mut, *v); + } else { + self.0.insert(*k, *v); + } + } + } + + pub(crate) fn min(&self) -> u64 { + self.0.iter().map(|(_, v)| *v).min().unwrap_or(0) + } +} + +impl UpdateTrackers { + pub(crate) fn merge(&mut self, other: &UpdateTrackers) { + self.ack_map.merge(&other.ack_map); + self.sync_map.merge(&other.sync_map); + self.sync_ack_map.merge(&other.sync_ack_map); + } +} diff --git a/src/rpc/layout/tracker.rs b/src/rpc/layout/tracker.rs deleted file mode 100644 index 778121e4..00000000 --- a/src/rpc/layout/tracker.rs +++ /dev/null @@ -1,21 +0,0 @@ -use super::*; - -impl UpdateTracker { - fn merge(&mut self, other: &UpdateTracker) { - for (k, v) in other.0.iter() { - if let Some(v_mut) = self.0.get_mut(k) { - *v_mut = std::cmp::max(*v_mut, *v); - } else { - self.0.insert(*k, *v); - } - } - } -} - -impl UpdateTrackers { - pub(crate) fn merge(&mut self, other: &UpdateTrackers) { - self.ack_map.merge(&other.ack_map); - self.sync_map.merge(&other.sync_map); - self.sync_ack_map.merge(&other.sync_ack_map); - } -} diff --git a/src/rpc/layout/version.rs b/src/rpc/layout/version.rs index 363bc204..6918fdf9 100644 --- a/src/rpc/layout/version.rs +++ b/src/rpc/layout/version.rs @@ -1,69 +1,21 @@ use std::collections::HashMap; use std::collections::HashSet; -use std::fmt; +use std::convert::TryInto; use bytesize::ByteSize; use itertools::Itertools; -use garage_util::crdt::{AutoCrdt, LwwMap}; +use garage_util::crdt::LwwMap; use garage_util::data::*; use garage_util::error::*; -use crate::graph_algo::*; - -use std::convert::TryInto; - +use super::graph_algo::*; use super::schema::*; use super::*; // The Message type will be used to collect information on the algorithm. pub type Message = Vec; -impl AutoCrdt for LayoutParameters { - const WARN_IF_DIFFERENT: bool = true; -} - -impl AutoCrdt for NodeRoleV { - const WARN_IF_DIFFERENT: bool = true; -} - -impl NodeRole { - pub fn capacity_string(&self) -> String { - match self.capacity { - Some(c) => ByteSize::b(c).to_string_as(false), - None => "gateway".to_string(), - } - } - - pub fn tags_string(&self) -> String { - self.tags.join(",") - } -} - -impl fmt::Display for ZoneRedundancy { - fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { - match self { - ZoneRedundancy::Maximum => write!(f, "maximum"), - ZoneRedundancy::AtLeast(x) => write!(f, "{}", x), - } - } -} - -impl core::str::FromStr for ZoneRedundancy { - type Err = &'static str; - fn from_str(s: &str) -> Result { - match s { - "none" | "max" | "maximum" => Ok(ZoneRedundancy::Maximum), - x => { - let v = x - .parse::() - .map_err(|_| "zone redundancy must be 'none'/'max' or an integer")?; - Ok(ZoneRedundancy::AtLeast(v)) - } - } - } -} - impl LayoutVersion { pub fn new(replication_factor: usize) -> Self { // We set the default zone redundancy to be Maximum, meaning that the maximum diff --git a/src/rpc/lib.rs b/src/rpc/lib.rs index 1af8b78e..b5b31c05 100644 --- a/src/rpc/lib.rs +++ b/src/rpc/lib.rs @@ -11,7 +11,6 @@ mod consul; #[cfg(feature = "kubernetes-discovery")] mod kubernetes; -pub mod graph_algo; pub mod layout; pub mod replication_mode; pub mod system; From 8a2b1dd422fb57abe611d8c1cf3cb0b55f487189 Mon Sep 17 00:00:00 2001 From: Alex Auvolat Date: Thu, 9 Nov 2023 12:55:36 +0100 Subject: [PATCH 084/538] wip: split out layout management from System into separate LayoutManager --- src/api/admin/cluster.rs | 18 ++- src/block/manager.rs | 10 +- src/block/resync.rs | 4 +- src/model/k2v/rpc.rs | 20 ++- src/rpc/layout/manager.rs | 177 +++++++++++++++++++++++ src/rpc/layout/mod.rs | 2 + src/rpc/system.rs | 297 ++++++++++++++------------------------ src/table/gc.rs | 4 +- src/table/sync.rs | 10 +- src/table/table.rs | 10 +- 10 files changed, 332 insertions(+), 220 deletions(-) create mode 100644 src/rpc/layout/manager.rs diff --git a/src/api/admin/cluster.rs b/src/api/admin/cluster.rs index fe8e8764..f5483451 100644 --- a/src/api/admin/cluster.rs +++ b/src/api/admin/cluster.rs @@ -240,7 +240,11 @@ pub async fn handle_update_cluster_layout( .merge(&roles.update_mutator(node, layout::NodeRoleV(new_role))); } - garage.system.update_cluster_layout(&layout).await?; + garage + .system + .layout_manager + .update_cluster_layout(&layout) + .await?; let res = format_cluster_layout(&layout); Ok(json_ok_response(&res)?) @@ -255,7 +259,11 @@ pub async fn handle_apply_cluster_layout( let layout = garage.system.cluster_layout().as_ref().clone(); let (layout, msg) = layout.apply_staged_changes(Some(param.version))?; - garage.system.update_cluster_layout(&layout).await?; + garage + .system + .layout_manager + .update_cluster_layout(&layout) + .await?; let res = ApplyClusterLayoutResponse { message: msg, @@ -267,7 +275,11 @@ pub async fn handle_apply_cluster_layout( pub async fn handle_revert_cluster_layout(garage: &Arc) -> Result, Error> { let layout = garage.system.cluster_layout().as_ref().clone(); let layout = layout.revert_staged_changes()?; - garage.system.update_cluster_layout(&layout).await?; + garage + .system + .layout_manager + .update_cluster_layout(&layout) + .await?; let res = format_cluster_layout(&layout); Ok(json_ok_response(&res)?) diff --git a/src/block/manager.rs b/src/block/manager.rs index 2d1b5c67..72b4ea66 100644 --- a/src/block/manager.rs +++ b/src/block/manager.rs @@ -265,7 +265,7 @@ impl BlockManager { Fut: futures::Future>, { let who = self.replication.read_nodes(hash); - let who = self.system.rpc.request_order(&who); + let who = self.system.rpc_helper().request_order(&who); for node in who.iter() { let node_id = NodeID::from(*node); @@ -305,7 +305,7 @@ impl BlockManager { // if the first one doesn't succeed rapidly // TODO: keep first request running when initiating a new one and take the // one that finishes earlier - _ = tokio::time::sleep(self.system.rpc.rpc_timeout()) => { + _ = tokio::time::sleep(self.system.rpc_helper().rpc_timeout()) => { debug!("Get block {:?}: node {:?} didn't return block in time, trying next.", hash, node); } }; @@ -363,7 +363,7 @@ impl BlockManager { Req::new(BlockRpc::PutBlock { hash, header })?.with_stream_from_buffer(bytes); self.system - .rpc + .rpc_helper() .try_call_many( &self.endpoint, &who[..], @@ -439,7 +439,7 @@ impl BlockManager { tokio::spawn(async move { if let Err(e) = this .resync - .put_to_resync(&hash, 2 * this.system.rpc.rpc_timeout()) + .put_to_resync(&hash, 2 * this.system.rpc_helper().rpc_timeout()) { error!("Block {:?} could not be put in resync queue: {}.", hash, e); } @@ -533,7 +533,7 @@ impl BlockManager { None => { // Not found but maybe we should have had it ?? self.resync - .put_to_resync(hash, 2 * self.system.rpc.rpc_timeout())?; + .put_to_resync(hash, 2 * self.system.rpc_helper().rpc_timeout())?; return Err(Error::Message(format!( "block {:?} not found on node", hash diff --git a/src/block/resync.rs b/src/block/resync.rs index 9c1da4a7..fedcd6f5 100644 --- a/src/block/resync.rs +++ b/src/block/resync.rs @@ -385,7 +385,7 @@ impl BlockResyncManager { let who_needs_resps = manager .system - .rpc + .rpc_helper() .call_many( &manager.endpoint, &who, @@ -431,7 +431,7 @@ impl BlockResyncManager { .with_stream_from_buffer(bytes); manager .system - .rpc + .rpc_helper() .try_call_many( &manager.endpoint, &need_nodes[..], diff --git a/src/model/k2v/rpc.rs b/src/model/k2v/rpc.rs index 37e142f6..2f548ad7 100644 --- a/src/model/k2v/rpc.rs +++ b/src/model/k2v/rpc.rs @@ -131,7 +131,7 @@ impl K2VRpcHandler { who.sort(); self.system - .rpc + .rpc_helper() .try_call_many( &self.endpoint, &who[..], @@ -187,7 +187,7 @@ impl K2VRpcHandler { let call_futures = call_list.into_iter().map(|(nodes, items)| async move { let resp = self .system - .rpc + .rpc_helper() .try_call_many( &self.endpoint, &nodes[..], @@ -229,7 +229,7 @@ impl K2VRpcHandler { .replication .write_nodes(&poll_key.partition.hash()); - let rpc = self.system.rpc.try_call_many( + let rpc = self.system.rpc_helper().try_call_many( &self.endpoint, &nodes[..], K2VRpc::PollItem { @@ -241,7 +241,8 @@ impl K2VRpcHandler { .with_quorum(self.item_table.data.replication.read_quorum()) .without_timeout(), ); - let timeout_duration = Duration::from_millis(timeout_msec) + self.system.rpc.rpc_timeout(); + let timeout_duration = + Duration::from_millis(timeout_msec) + self.system.rpc_helper().rpc_timeout(); let resps = select! { r = rpc => r?, _ = tokio::time::sleep(timeout_duration) => return Ok(None), @@ -300,7 +301,11 @@ impl K2VRpcHandler { let rs = RequestStrategy::with_priority(PRIO_NORMAL).without_timeout(); let mut requests = nodes .iter() - .map(|node| self.system.rpc.call(&self.endpoint, *node, msg.clone(), rs)) + .map(|node| { + self.system + .rpc_helper() + .call(&self.endpoint, *node, msg.clone(), rs) + }) .collect::>(); // Fetch responses. This procedure stops fetching responses when any of the following @@ -316,8 +321,9 @@ impl K2VRpcHandler { // kind: all items produced by that node until time ts have been returned, so we can // bump the entry in the global vector clock and possibly remove some item-specific // vector clocks) - let mut deadline = - Instant::now() + Duration::from_millis(timeout_msec) + self.system.rpc.rpc_timeout(); + let mut deadline = Instant::now() + + Duration::from_millis(timeout_msec) + + self.system.rpc_helper().rpc_timeout(); let mut resps = vec![]; let mut errors = vec![]; loop { diff --git a/src/rpc/layout/manager.rs b/src/rpc/layout/manager.rs new file mode 100644 index 00000000..a8a77139 --- /dev/null +++ b/src/rpc/layout/manager.rs @@ -0,0 +1,177 @@ +use std::sync::Arc; +use std::time::Duration; + +use tokio::sync::watch; +use tokio::sync::Mutex; + +use netapp::endpoint::Endpoint; +use netapp::peering::fullmesh::FullMeshPeeringStrategy; +use netapp::NodeID; + +use garage_util::config::Config; +use garage_util::data::*; +use garage_util::error::*; +use garage_util::persister::Persister; + +use super::*; +use crate::rpc_helper::*; +use crate::system::*; + +pub struct LayoutManager { + replication_factor: usize, + persist_cluster_layout: Persister, + + pub layout_watch: watch::Receiver>, + update_layout: Mutex>>, + + pub(crate) rpc_helper: RpcHelper, + system_endpoint: Arc>, +} + +impl LayoutManager { + pub fn new( + config: &Config, + node_id: NodeID, + system_endpoint: Arc>, + fullmesh: Arc, + replication_factor: usize, + ) -> Result { + let persist_cluster_layout: Persister = + Persister::new(&config.metadata_dir, "cluster_layout"); + + let cluster_layout = match persist_cluster_layout.load() { + Ok(x) => { + if x.current().replication_factor != replication_factor { + return Err(Error::Message(format!( + "Prevous cluster layout has replication factor {}, which is different than the one specified in the config file ({}). The previous cluster layout can be purged, if you know what you are doing, simply by deleting the `cluster_layout` file in your metadata directory.", + x.current().replication_factor, + replication_factor + ))); + } + x + } + Err(e) => { + info!( + "No valid previous cluster layout stored ({}), starting fresh.", + e + ); + LayoutHistory::new(replication_factor) + } + }; + + let (update_layout, layout_watch) = watch::channel(Arc::new(cluster_layout)); + + let rpc_helper = RpcHelper::new( + node_id.into(), + fullmesh, + layout_watch.clone(), + config.rpc_timeout_msec.map(Duration::from_millis), + ); + + Ok(Self { + replication_factor, + persist_cluster_layout, + layout_watch, + update_layout: Mutex::new(update_layout), + system_endpoint, + rpc_helper, + }) + } + + // ---- PUBLIC INTERFACE ---- + + pub async fn update_cluster_layout(&self, layout: &LayoutHistory) -> Result<(), Error> { + self.handle_advertise_cluster_layout(layout).await?; + Ok(()) + } + + pub fn history(&self) -> watch::Ref> { + self.layout_watch.borrow() + } + + pub(crate) async fn pull_cluster_layout(&self, peer: Uuid) { + let resp = self + .rpc_helper + .call( + &self.system_endpoint, + peer, + SystemRpc::PullClusterLayout, + RequestStrategy::with_priority(PRIO_HIGH), + ) + .await; + if let Ok(SystemRpc::AdvertiseClusterLayout(layout)) = resp { + let _: Result<_, _> = self.handle_advertise_cluster_layout(&layout).await; + } + } + + // ---- INTERNALS --- + + /// Save network configuration to disc + async fn save_cluster_layout(&self) -> Result<(), Error> { + let layout: Arc = self.layout_watch.borrow().clone(); + self.persist_cluster_layout + .save_async(&layout) + .await + .expect("Cannot save current cluster layout"); + Ok(()) + } + + // ---- RPC HANDLERS ---- + + pub(crate) fn handle_pull_cluster_layout(&self) -> SystemRpc { + let layout = self.layout_watch.borrow().as_ref().clone(); + SystemRpc::AdvertiseClusterLayout(layout) + } + + pub(crate) async fn handle_advertise_cluster_layout( + &self, + adv: &LayoutHistory, + ) -> Result { + if adv.current().replication_factor != self.replication_factor { + let msg = format!( + "Received a cluster layout from another node with replication factor {}, which is different from what we have in our configuration ({}). Discarding the cluster layout we received.", + adv.current().replication_factor, + self.replication_factor + ); + error!("{}", msg); + return Err(Error::Message(msg)); + } + + let update_layout = self.update_layout.lock().await; + // TODO: don't clone each time an AdvertiseClusterLayout is received + let mut layout: LayoutHistory = self.layout_watch.borrow().as_ref().clone(); + + let prev_layout_check = layout.check().is_ok(); + if layout.merge(adv) { + if prev_layout_check && layout.check().is_err() { + error!("New cluster layout is invalid, discarding."); + return Err(Error::Message( + "New cluster layout is invalid, discarding.".into(), + )); + } + + update_layout.send(Arc::new(layout.clone()))?; + drop(update_layout); + + /* TODO + tokio::spawn(async move { + if let Err(e) = system + .rpc_helper() + .broadcast( + &system.system_endpoint, + SystemRpc::AdvertiseClusterLayout(layout), + RequestStrategy::with_priority(PRIO_HIGH), + ) + .await + { + warn!("Error while broadcasting new cluster layout: {}", e); + } + }); + */ + + self.save_cluster_layout().await?; + } + + Ok(SystemRpc::Ok) + } +} diff --git a/src/rpc/layout/mod.rs b/src/rpc/layout/mod.rs index 7c15988a..cd3764bc 100644 --- a/src/rpc/layout/mod.rs +++ b/src/rpc/layout/mod.rs @@ -3,6 +3,8 @@ mod history; mod schema; mod version; +pub mod manager; + // ---- re-exports ---- pub use history::*; diff --git a/src/rpc/system.rs b/src/rpc/system.rs index a7433b68..a8e88425 100644 --- a/src/rpc/system.rs +++ b/src/rpc/system.rs @@ -14,7 +14,6 @@ use serde::{Deserialize, Serialize}; use sodiumoxide::crypto::sign::ed25519; use tokio::select; use tokio::sync::watch; -use tokio::sync::Mutex; use netapp::endpoint::{Endpoint, EndpointHandler}; use netapp::message::*; @@ -34,6 +33,7 @@ use garage_util::time::*; use crate::consul::ConsulDiscovery; #[cfg(feature = "kubernetes-discovery")] use crate::kubernetes::*; +use crate::layout::manager::LayoutManager; use crate::layout::*; use crate::replication_mode::*; use crate::rpc_helper::*; @@ -49,7 +49,7 @@ const STATUS_EXCHANGE_INTERVAL: Duration = Duration::from_secs(10); pub const GARAGE_VERSION_TAG: u64 = 0x676172616765000A; // garage 0x000A /// RPC endpoint used for calls related to membership -pub const SYSTEM_RPC_PATH: &str = "garage_rpc/membership.rs/SystemRpc"; +pub const SYSTEM_RPC_PATH: &str = "garage_rpc/system.rs/SystemRpc"; /// RPC messages related to membership #[derive(Debug, Serialize, Deserialize, Clone)] @@ -58,17 +58,17 @@ pub enum SystemRpc { Ok, /// Request to connect to a specific node (in @: format) Connect(String), - /// Ask other node its cluster layout. Answered with AdvertiseClusterLayout - PullClusterLayout, /// Advertise Garage status. Answered with another AdvertiseStatus. /// Exchanged with every node on a regular basis. AdvertiseStatus(NodeStatus), - /// Advertisement of cluster layout. Sent spontanously or in response to PullClusterLayout - AdvertiseClusterLayout(LayoutHistory), /// Get known nodes states GetKnownNodes, /// Return known nodes ReturnKnownNodes(Vec), + /// Ask other node its cluster layout. Answered with AdvertiseClusterLayout + PullClusterLayout, + /// Advertisement of cluster layout. Sent spontanously or in response to PullClusterLayout + AdvertiseClusterLayout(LayoutHistory), } impl Rpc for SystemRpc { @@ -84,7 +84,6 @@ pub struct System { /// The id of this node pub id: Uuid, - persist_cluster_layout: Persister, persist_peer_list: Persister, local_status: ArcSwap, @@ -92,9 +91,8 @@ pub struct System { pub netapp: Arc, fullmesh: Arc, - pub rpc: RpcHelper, - system_endpoint: Arc>, + pub(crate) system_endpoint: Arc>, rpc_listen_addr: SocketAddr, #[cfg(any(feature = "consul-discovery", feature = "kubernetes-discovery"))] @@ -106,15 +104,13 @@ pub struct System { #[cfg(feature = "kubernetes-discovery")] kubernetes_discovery: Option, + pub layout_manager: LayoutManager, + metrics: SystemMetrics, replication_mode: ReplicationMode, replication_factor: usize, - /// The layout - pub layout_watch: watch::Receiver>, - update_layout: Mutex>>, - /// Path to metadata directory pub metadata_dir: PathBuf, /// Path to data directory @@ -128,8 +124,11 @@ pub struct NodeStatus { /// Replication factor configured on the node pub replication_factor: usize, + /// Cluster layout version pub cluster_layout_version: u64, + /// Hash of cluster layout update trackers + // (TODO) pub cluster_layout_trackers_hash: Hash, /// Hash of cluster layout staging data pub cluster_layout_staging_hash: Hash, @@ -247,8 +246,7 @@ impl System { replication_mode: ReplicationMode, config: &Config, ) -> Result, Error> { - let replication_factor = replication_mode.replication_factor(); - + // ---- setup netapp RPC protocol ---- let node_key = gen_node_key(&config.metadata_dir).expect("Unable to read or generate node ID"); info!( @@ -256,81 +254,40 @@ impl System { hex::encode(&node_key.public_key()[..8]) ); - let persist_cluster_layout: Persister = - Persister::new(&config.metadata_dir, "cluster_layout"); - let persist_peer_list = Persister::new(&config.metadata_dir, "peer_list"); + let netapp = NetApp::new(GARAGE_VERSION_TAG, network_key, node_key); + let system_endpoint = netapp.endpoint(SYSTEM_RPC_PATH.into()); - let cluster_layout = match persist_cluster_layout.load() { - Ok(x) => { - if x.current().replication_factor != replication_factor { - return Err(Error::Message(format!( - "Prevous cluster layout has replication factor {}, which is different than the one specified in the config file ({}). The previous cluster layout can be purged, if you know what you are doing, simply by deleting the `cluster_layout` file in your metadata directory.", - x.current().replication_factor, - replication_factor - ))); - } - x - } - Err(e) => { - info!( - "No valid previous cluster layout stored ({}), starting fresh.", - e - ); - LayoutHistory::new(replication_factor) - } - }; - - let metrics = SystemMetrics::new(replication_factor); - - let mut local_status = NodeStatus::initial(replication_factor, &cluster_layout); - local_status.update_disk_usage(&config.metadata_dir, &config.data_dir, &metrics); - - let (update_layout, layout_watch) = watch::channel(Arc::new(cluster_layout)); - - let rpc_public_addr = match &config.rpc_public_addr { - Some(a_str) => { - use std::net::ToSocketAddrs; - match a_str.to_socket_addrs() { - Err(e) => { - error!( - "Cannot resolve rpc_public_addr {} from config file: {}.", - a_str, e - ); - None - } - Ok(a) => { - let a = a.collect::>(); - if a.is_empty() { - error!("rpc_public_addr {} resolve to no known IP address", a_str); - } - if a.len() > 1 { - warn!("Multiple possible resolutions for rpc_public_addr: {:?}. Taking the first one.", a); - } - a.into_iter().next() - } - } - } - None => { - let addr = - get_default_ip().map(|ip| SocketAddr::new(ip, config.rpc_bind_addr.port())); - if let Some(a) = addr { - warn!("Using autodetected rpc_public_addr: {}. Consider specifying it explicitly in configuration file if possible.", a); - } - addr - } - }; + // ---- setup netapp public listener and full mesh peering strategy ---- + let rpc_public_addr = get_rpc_public_addr(config); if rpc_public_addr.is_none() { warn!("This Garage node does not know its publicly reachable RPC address, this might hamper intra-cluster communication."); } - let netapp = NetApp::new(GARAGE_VERSION_TAG, network_key, node_key); let fullmesh = FullMeshPeeringStrategy::new(netapp.clone(), vec![], rpc_public_addr); if let Some(ping_timeout) = config.rpc_ping_timeout_msec { fullmesh.set_ping_timeout_millis(ping_timeout); } - let system_endpoint = netapp.endpoint(SYSTEM_RPC_PATH.into()); + let persist_peer_list = Persister::new(&config.metadata_dir, "peer_list"); + // ---- setup cluster layout and layout manager ---- + let replication_factor = replication_mode.replication_factor(); + + let layout_manager = LayoutManager::new( + config, + netapp.id, + system_endpoint.clone(), + fullmesh.clone(), + replication_factor, + )?; + + // ---- set up metrics and status exchange ---- + let metrics = SystemMetrics::new(replication_factor); + + let mut local_status = NodeStatus::initial(replication_factor, &layout_manager.history()); + local_status.update_disk_usage(&config.metadata_dir, &config.data_dir, &metrics); + + // ---- if enabled, set up additionnal peer discovery methods ---- #[cfg(feature = "consul-discovery")] let consul_discovery = match &config.consul_discovery { Some(cfg) => Some( @@ -349,20 +306,14 @@ impl System { warn!("Kubernetes discovery is not enabled in this build."); } + // ---- done ---- let sys = Arc::new(System { id: netapp.id.into(), - persist_cluster_layout, persist_peer_list, local_status: ArcSwap::new(Arc::new(local_status)), node_status: RwLock::new(HashMap::new()), netapp: netapp.clone(), fullmesh: fullmesh.clone(), - rpc: RpcHelper::new( - netapp.id.into(), - fullmesh, - layout_watch.clone(), - config.rpc_timeout_msec.map(Duration::from_millis), - ), system_endpoint, replication_mode, replication_factor, @@ -374,10 +325,9 @@ impl System { consul_discovery, #[cfg(feature = "kubernetes-discovery")] kubernetes_discovery: config.kubernetes_discovery.clone(), + layout_manager, metrics, - layout_watch, - update_layout: Mutex::new(update_layout), metadata_dir: config.metadata_dir.clone(), data_dir: config.data_dir.clone(), }); @@ -397,6 +347,20 @@ impl System { ); } + // ---- Public utilities / accessors ---- + + pub fn cluster_layout(&self) -> watch::Ref> { + self.layout_manager.history() + } + + pub fn layout_watch(&self) -> watch::Receiver> { + self.layout_manager.layout_watch.clone() + } + + pub fn rpc_helper(&self) -> &RpcHelper { + &self.layout_manager.rpc_helper + } + // ---- Administrative operations (directly available and // also available through RPC) ---- @@ -423,18 +387,6 @@ impl System { known_nodes } - pub fn cluster_layout(&self) -> watch::Ref> { - self.layout_watch.borrow() - } - - pub async fn update_cluster_layout( - self: &Arc, - layout: &LayoutHistory, - ) -> Result<(), Error> { - self.handle_advertise_cluster_layout(layout).await?; - Ok(()) - } - pub async fn connect(&self, node: &str) -> Result<(), Error> { let (pubkey, addrs) = parse_and_resolve_peer_addr_async(node) .await @@ -464,7 +416,7 @@ impl System { } pub fn health(&self) -> ClusterHealth { - let layout: Arc<_> = self.layout_watch.borrow().clone(); + let layout: Arc<_> = self.cluster_layout().clone(); let quorum = self.replication_mode.write_quorum(); let replication_factor = self.replication_factor; @@ -581,20 +533,10 @@ impl System { } } - /// Save network configuration to disc - async fn save_cluster_layout(&self) -> Result<(), Error> { - let layout: Arc = self.layout_watch.borrow().clone(); - self.persist_cluster_layout - .save_async(&layout) - .await - .expect("Cannot save current cluster layout"); - Ok(()) - } - fn update_local_status(&self) { let mut new_si: NodeStatus = self.local_status.load().as_ref().clone(); - let layout = self.layout_watch.borrow(); + let layout = self.cluster_layout(); new_si.cluster_layout_version = layout.current().version; new_si.cluster_layout_staging_hash = layout.staging_hash; @@ -610,11 +552,6 @@ impl System { Ok(SystemRpc::Ok) } - fn handle_pull_cluster_layout(&self) -> SystemRpc { - let layout = self.layout_watch.borrow().as_ref().clone(); - SystemRpc::AdvertiseClusterLayout(layout) - } - fn handle_get_known_nodes(&self) -> SystemRpc { let known_nodes = self.get_known_nodes(); SystemRpc::ReturnKnownNodes(known_nodes) @@ -637,7 +574,10 @@ impl System { if info.cluster_layout_version > local_info.cluster_layout_version || info.cluster_layout_staging_hash != local_info.cluster_layout_staging_hash { - tokio::spawn(self.clone().pull_cluster_layout(from)); + tokio::spawn({ + let system = self.clone(); + async move { system.layout_manager.pull_cluster_layout(from).await } + }); } self.node_status @@ -648,57 +588,6 @@ impl System { Ok(SystemRpc::Ok) } - async fn handle_advertise_cluster_layout( - self: &Arc, - adv: &LayoutHistory, - ) -> Result { - if adv.current().replication_factor != self.replication_factor { - let msg = format!( - "Received a cluster layout from another node with replication factor {}, which is different from what we have in our configuration ({}). Discarding the cluster layout we received.", - adv.current().replication_factor, - self.replication_factor - ); - error!("{}", msg); - return Err(Error::Message(msg)); - } - - let update_layout = self.update_layout.lock().await; - // TODO: don't clone each time an AdvertiseClusterLayout is received - let mut layout: LayoutHistory = self.layout_watch.borrow().as_ref().clone(); - - let prev_layout_check = layout.check().is_ok(); - if layout.merge(adv) { - if prev_layout_check && layout.check().is_err() { - error!("New cluster layout is invalid, discarding."); - return Err(Error::Message( - "New cluster layout is invalid, discarding.".into(), - )); - } - - update_layout.send(Arc::new(layout.clone()))?; - drop(update_layout); - - let self2 = self.clone(); - tokio::spawn(async move { - if let Err(e) = self2 - .rpc - .broadcast( - &self2.system_endpoint, - SystemRpc::AdvertiseClusterLayout(layout), - RequestStrategy::with_priority(PRIO_HIGH), - ) - .await - { - warn!("Error while broadcasting new cluster layout: {}", e); - } - }); - - self.save_cluster_layout().await?; - } - - Ok(SystemRpc::Ok) - } - async fn status_exchange_loop(&self, mut stop_signal: watch::Receiver) { while !*stop_signal.borrow() { let restart_at = Instant::now() + STATUS_EXCHANGE_INTERVAL; @@ -706,7 +595,7 @@ impl System { self.update_local_status(); let local_status: NodeStatus = self.local_status.load().as_ref().clone(); let _ = self - .rpc + .rpc_helper() .broadcast( &self.system_endpoint, SystemRpc::AdvertiseStatus(local_status), @@ -724,9 +613,9 @@ impl System { async fn discovery_loop(self: &Arc, mut stop_signal: watch::Receiver) { while !*stop_signal.borrow() { - let not_configured = self.layout_watch.borrow().check().is_err(); + let not_configured = self.cluster_layout().check().is_err(); let no_peers = self.fullmesh.get_peer_list().len() < self.replication_factor; - let expected_n_nodes = self.layout_watch.borrow().current().num_nodes(); + let expected_n_nodes = self.cluster_layout().current().num_nodes(); let bad_peers = self .fullmesh .get_peer_list() @@ -831,34 +720,26 @@ impl System { .save_async(&PeerList(peer_list)) .await } - - async fn pull_cluster_layout(self: Arc, peer: Uuid) { - let resp = self - .rpc - .call( - &self.system_endpoint, - peer, - SystemRpc::PullClusterLayout, - RequestStrategy::with_priority(PRIO_HIGH), - ) - .await; - if let Ok(SystemRpc::AdvertiseClusterLayout(layout)) = resp { - let _: Result<_, _> = self.handle_advertise_cluster_layout(&layout).await; - } - } } #[async_trait] impl EndpointHandler for System { async fn handle(self: &Arc, msg: &SystemRpc, from: NodeID) -> Result { match msg { + // ---- system functions -> System ---- SystemRpc::Connect(node) => self.handle_connect(node).await, - SystemRpc::PullClusterLayout => Ok(self.handle_pull_cluster_layout()), SystemRpc::AdvertiseStatus(adv) => self.handle_advertise_status(from.into(), adv).await, - SystemRpc::AdvertiseClusterLayout(adv) => { - self.clone().handle_advertise_cluster_layout(adv).await - } SystemRpc::GetKnownNodes => Ok(self.handle_get_known_nodes()), + + // ---- layout functions -> LayoutManager ---- + SystemRpc::PullClusterLayout => Ok(self.layout_manager.handle_pull_cluster_layout()), + SystemRpc::AdvertiseClusterLayout(adv) => { + self.layout_manager + .handle_advertise_cluster_layout(adv) + .await + } + + // ---- other -> Error ---- m => Err(Error::unexpected_rpc_message(m)), } } @@ -962,6 +843,40 @@ fn get_default_ip() -> Option { .map(|a| a.ip()) } +fn get_rpc_public_addr(config: &Config) -> Option { + match &config.rpc_public_addr { + Some(a_str) => { + use std::net::ToSocketAddrs; + match a_str.to_socket_addrs() { + Err(e) => { + error!( + "Cannot resolve rpc_public_addr {} from config file: {}.", + a_str, e + ); + None + } + Ok(a) => { + let a = a.collect::>(); + if a.is_empty() { + error!("rpc_public_addr {} resolve to no known IP address", a_str); + } + if a.len() > 1 { + warn!("Multiple possible resolutions for rpc_public_addr: {:?}. Taking the first one.", a); + } + a.into_iter().next() + } + } + } + None => { + let addr = get_default_ip().map(|ip| SocketAddr::new(ip, config.rpc_bind_addr.port())); + if let Some(a) = addr { + warn!("Using autodetected rpc_public_addr: {}. Consider specifying it explicitly in configuration file if possible.", a); + } + addr + } + } +} + async fn resolve_peers(peers: &[String]) -> Vec<(NodeID, SocketAddr)> { let mut ret = vec![]; diff --git a/src/table/gc.rs b/src/table/gc.rs index 5b9124a7..2135a358 100644 --- a/src/table/gc.rs +++ b/src/table/gc.rs @@ -227,7 +227,7 @@ impl TableGc { // GC'ing is not a critical function of the system, so it's not a big // deal if we can't do it right now. self.system - .rpc + .rpc_helper() .try_call_many( &self.endpoint, &nodes[..], @@ -248,7 +248,7 @@ impl TableGc { // it means that the garbage collection wasn't completed and has // to be retried later. self.system - .rpc + .rpc_helper() .try_call_many( &self.endpoint, &nodes[..], diff --git a/src/table/sync.rs b/src/table/sync.rs index 620d83b9..2da1bfe7 100644 --- a/src/table/sync.rs +++ b/src/table/sync.rs @@ -91,7 +91,7 @@ impl TableSyncer { bg.spawn_worker(SyncWorker { syncer: self.clone(), - layout_watch: self.system.layout_watch.clone(), + layout_watch: self.system.layout_watch(), layout: self.system.cluster_layout().clone(), add_full_sync_rx, todo: vec![], @@ -244,7 +244,7 @@ impl TableSyncer { } self.system - .rpc + .rpc_helper() .try_call_many( &self.endpoint, nodes, @@ -305,7 +305,7 @@ impl TableSyncer { // If so, do nothing. let root_resp = self .system - .rpc + .rpc_helper() .call( &self.endpoint, who, @@ -361,7 +361,7 @@ impl TableSyncer { // and compare it with local node let remote_node = match self .system - .rpc + .rpc_helper() .call( &self.endpoint, who, @@ -437,7 +437,7 @@ impl TableSyncer { let rpc_resp = self .system - .rpc + .rpc_helper() .call( &self.endpoint, who, diff --git a/src/table/table.rs b/src/table/table.rs index 7ad79677..3e3fd138 100644 --- a/src/table/table.rs +++ b/src/table/table.rs @@ -123,7 +123,7 @@ impl Table { let rpc = TableRpc::::Update(vec![e_enc]); self.system - .rpc + .rpc_helper() .try_call_many( &self.endpoint, &who[..], @@ -181,7 +181,7 @@ impl Table { let resp = self .system - .rpc + .rpc_helper() .call( &self.endpoint, node, @@ -236,7 +236,7 @@ impl Table { let rpc = TableRpc::::ReadEntry(partition_key.clone(), sort_key.clone()); let resps = self .system - .rpc + .rpc_helper() .try_call_many( &self.endpoint, &who[..], @@ -332,7 +332,7 @@ impl Table { let resps = self .system - .rpc + .rpc_helper() .try_call_many( &self.endpoint, &who[..], @@ -411,7 +411,7 @@ impl Table { async fn repair_on_read(&self, who: &[Uuid], what: F::E) -> Result<(), Error> { let what_enc = Arc::new(ByteBuf::from(what.encode()?)); self.system - .rpc + .rpc_helper() .try_call_many( &self.endpoint, who, From 19ef1ec8e7fee3a6c670e6e35dfcc83f0801e604 Mon Sep 17 00:00:00 2001 From: Alex Auvolat Date: Thu, 9 Nov 2023 13:34:14 +0100 Subject: [PATCH 085/538] layout: more refactoring --- src/garage/cli/layout.rs | 6 +- src/rpc/layout/manager.rs | 114 +++++++++++++++++++++++++------------- src/rpc/layout/schema.rs | 6 +- src/rpc/system.rs | 40 +++++-------- 4 files changed, 96 insertions(+), 70 deletions(-) diff --git a/src/garage/cli/layout.rs b/src/garage/cli/layout.rs index 269d92f4..bffc81d3 100644 --- a/src/garage/cli/layout.rs +++ b/src/garage/cli/layout.rs @@ -1,3 +1,5 @@ +use std::sync::Arc; + use bytesize::ByteSize; use format_table::format_table; @@ -321,7 +323,7 @@ pub async fn fetch_layout( .call(&rpc_host, SystemRpc::PullClusterLayout, PRIO_NORMAL) .await?? { - SystemRpc::AdvertiseClusterLayout(t) => Ok(t), + SystemRpc::AdvertiseClusterLayout(t) => Ok(Arc::try_unwrap(t).unwrap()), resp => Err(Error::Message(format!("Invalid RPC response: {:?}", resp))), } } @@ -334,7 +336,7 @@ pub async fn send_layout( rpc_cli .call( &rpc_host, - SystemRpc::AdvertiseClusterLayout(layout), + SystemRpc::AdvertiseClusterLayout(Arc::new(layout)), PRIO_NORMAL, ) .await??; diff --git a/src/rpc/layout/manager.rs b/src/rpc/layout/manager.rs index a8a77139..351e0959 100644 --- a/src/rpc/layout/manager.rs +++ b/src/rpc/layout/manager.rs @@ -1,6 +1,8 @@ use std::sync::Arc; use std::time::Duration; +use serde::{Deserialize, Serialize}; + use tokio::sync::watch; use tokio::sync::Mutex; @@ -28,6 +30,16 @@ pub struct LayoutManager { system_endpoint: Arc>, } +#[derive(Debug, Clone, Serialize, Deserialize, Default)] +pub struct LayoutStatus { + /// Cluster layout version + pub cluster_layout_version: u64, + /// Hash of cluster layout update trackers + // (TODO) pub cluster_layout_trackers_hash: Hash, + /// Hash of cluster layout staging data + pub cluster_layout_staging_hash: Hash, +} + impl LayoutManager { pub fn new( config: &Config, @@ -35,7 +47,7 @@ impl LayoutManager { system_endpoint: Arc>, fullmesh: Arc, replication_factor: usize, - ) -> Result { + ) -> Result, Error> { let persist_cluster_layout: Persister = Persister::new(&config.metadata_dir, "cluster_layout"); @@ -68,28 +80,39 @@ impl LayoutManager { config.rpc_timeout_msec.map(Duration::from_millis), ); - Ok(Self { + Ok(Arc::new(Self { replication_factor, persist_cluster_layout, layout_watch, update_layout: Mutex::new(update_layout), system_endpoint, rpc_helper, - }) + })) } // ---- PUBLIC INTERFACE ---- - pub async fn update_cluster_layout(&self, layout: &LayoutHistory) -> Result<(), Error> { + pub fn status(&self) -> LayoutStatus { + let layout = self.layout(); + LayoutStatus { + cluster_layout_version: layout.current().version, + cluster_layout_staging_hash: layout.staging_hash, + } + } + + pub async fn update_cluster_layout( + self: &Arc, + layout: &LayoutHistory, + ) -> Result<(), Error> { self.handle_advertise_cluster_layout(layout).await?; Ok(()) } - pub fn history(&self) -> watch::Ref> { + pub fn layout(&self) -> watch::Ref> { self.layout_watch.borrow() } - pub(crate) async fn pull_cluster_layout(&self, peer: Uuid) { + pub(crate) async fn pull_cluster_layout(self: &Arc, peer: Uuid) { let resp = self .rpc_helper .call( @@ -118,13 +141,25 @@ impl LayoutManager { // ---- RPC HANDLERS ---- + pub(crate) fn handle_advertise_status(self: &Arc, from: Uuid, status: &LayoutStatus) { + let local_status = self.status(); + if status.cluster_layout_version > local_status.cluster_layout_version + || status.cluster_layout_staging_hash != local_status.cluster_layout_staging_hash + { + tokio::spawn({ + let this = self.clone(); + async move { this.pull_cluster_layout(from).await } + }); + } + } + pub(crate) fn handle_pull_cluster_layout(&self) -> SystemRpc { - let layout = self.layout_watch.borrow().as_ref().clone(); + let layout = self.layout_watch.borrow().clone(); SystemRpc::AdvertiseClusterLayout(layout) } pub(crate) async fn handle_advertise_cluster_layout( - &self, + self: &Arc, adv: &LayoutHistory, ) -> Result { if adv.current().replication_factor != self.replication_factor { @@ -137,39 +172,42 @@ impl LayoutManager { return Err(Error::Message(msg)); } - let update_layout = self.update_layout.lock().await; - // TODO: don't clone each time an AdvertiseClusterLayout is received - let mut layout: LayoutHistory = self.layout_watch.borrow().as_ref().clone(); + if *adv != **self.layout_watch.borrow() { + let update_layout = self.update_layout.lock().await; + let mut layout: LayoutHistory = self.layout_watch.borrow().as_ref().clone(); - let prev_layout_check = layout.check().is_ok(); - if layout.merge(adv) { - if prev_layout_check && layout.check().is_err() { - error!("New cluster layout is invalid, discarding."); - return Err(Error::Message( - "New cluster layout is invalid, discarding.".into(), - )); - } - - update_layout.send(Arc::new(layout.clone()))?; - drop(update_layout); - - /* TODO - tokio::spawn(async move { - if let Err(e) = system - .rpc_helper() - .broadcast( - &system.system_endpoint, - SystemRpc::AdvertiseClusterLayout(layout), - RequestStrategy::with_priority(PRIO_HIGH), - ) - .await - { - warn!("Error while broadcasting new cluster layout: {}", e); + let prev_layout_check = layout.check().is_ok(); + if layout.merge(adv) { + if prev_layout_check && layout.check().is_err() { + error!("New cluster layout is invalid, discarding."); + return Err(Error::Message( + "New cluster layout is invalid, discarding.".into(), + )); } - }); - */ - self.save_cluster_layout().await?; + let layout = Arc::new(layout); + update_layout.send(layout.clone())?; + drop(update_layout); // release mutex + + tokio::spawn({ + let this = self.clone(); + async move { + if let Err(e) = this + .rpc_helper + .broadcast( + &this.system_endpoint, + SystemRpc::AdvertiseClusterLayout(layout), + RequestStrategy::with_priority(PRIO_HIGH), + ) + .await + { + warn!("Error while broadcasting new cluster layout: {}", e); + } + } + }); + + self.save_cluster_layout().await?; + } } Ok(SystemRpc::Ok) diff --git a/src/rpc/layout/schema.rs b/src/rpc/layout/schema.rs index c5b9b1d3..d587a6cb 100644 --- a/src/rpc/layout/schema.rs +++ b/src/rpc/layout/schema.rs @@ -226,7 +226,7 @@ mod v010 { } /// The history of cluster layouts - #[derive(Clone, Debug, Serialize, Deserialize)] + #[derive(Clone, Debug, Serialize, Deserialize, PartialEq)] pub struct LayoutHistory { /// The versions currently in use in the cluster pub versions: Vec, @@ -241,7 +241,7 @@ mod v010 { } /// The tracker of acknowlegments and data syncs around the cluster - #[derive(Clone, Debug, Serialize, Deserialize, Default)] + #[derive(Clone, Debug, Serialize, Deserialize, Default, PartialEq)] pub struct UpdateTrackers { /// The highest layout version number each node has ack'ed pub ack_map: UpdateTracker, @@ -253,7 +253,7 @@ mod v010 { } /// The history of cluster layouts - #[derive(Clone, Debug, Serialize, Deserialize, Default)] + #[derive(Clone, Debug, Serialize, Deserialize, Default, PartialEq)] pub struct UpdateTracker(pub HashMap); impl garage_util::migrate::Migrate for LayoutHistory { diff --git a/src/rpc/system.rs b/src/rpc/system.rs index a8e88425..88c4d443 100644 --- a/src/rpc/system.rs +++ b/src/rpc/system.rs @@ -33,7 +33,7 @@ use garage_util::time::*; use crate::consul::ConsulDiscovery; #[cfg(feature = "kubernetes-discovery")] use crate::kubernetes::*; -use crate::layout::manager::LayoutManager; +use crate::layout::manager::{LayoutManager, LayoutStatus}; use crate::layout::*; use crate::replication_mode::*; use crate::rpc_helper::*; @@ -68,7 +68,7 @@ pub enum SystemRpc { /// Ask other node its cluster layout. Answered with AdvertiseClusterLayout PullClusterLayout, /// Advertisement of cluster layout. Sent spontanously or in response to PullClusterLayout - AdvertiseClusterLayout(LayoutHistory), + AdvertiseClusterLayout(Arc), } impl Rpc for SystemRpc { @@ -104,7 +104,7 @@ pub struct System { #[cfg(feature = "kubernetes-discovery")] kubernetes_discovery: Option, - pub layout_manager: LayoutManager, + pub layout_manager: Arc, metrics: SystemMetrics, @@ -125,12 +125,8 @@ pub struct NodeStatus { /// Replication factor configured on the node pub replication_factor: usize, - /// Cluster layout version - pub cluster_layout_version: u64, - /// Hash of cluster layout update trackers - // (TODO) pub cluster_layout_trackers_hash: Hash, - /// Hash of cluster layout staging data - pub cluster_layout_staging_hash: Hash, + /// Layout status + pub layout_status: LayoutStatus, /// Disk usage on partition containing metadata directory (tuple: `(avail, total)`) #[serde(default)] @@ -284,7 +280,7 @@ impl System { // ---- set up metrics and status exchange ---- let metrics = SystemMetrics::new(replication_factor); - let mut local_status = NodeStatus::initial(replication_factor, &layout_manager.history()); + let mut local_status = NodeStatus::initial(replication_factor, &layout_manager); local_status.update_disk_usage(&config.metadata_dir, &config.data_dir, &metrics); // ---- if enabled, set up additionnal peer discovery methods ---- @@ -350,7 +346,7 @@ impl System { // ---- Public utilities / accessors ---- pub fn cluster_layout(&self) -> watch::Ref> { - self.layout_manager.history() + self.layout_manager.layout() } pub fn layout_watch(&self) -> watch::Receiver> { @@ -536,9 +532,7 @@ impl System { fn update_local_status(&self) { let mut new_si: NodeStatus = self.local_status.load().as_ref().clone(); - let layout = self.cluster_layout(); - new_si.cluster_layout_version = layout.current().version; - new_si.cluster_layout_staging_hash = layout.staging_hash; + new_si.layout_status = self.layout_manager.status(); new_si.update_disk_usage(&self.metadata_dir, &self.data_dir, &self.metrics); @@ -571,14 +565,8 @@ impl System { std::process::exit(1); } - if info.cluster_layout_version > local_info.cluster_layout_version - || info.cluster_layout_staging_hash != local_info.cluster_layout_staging_hash - { - tokio::spawn({ - let system = self.clone(); - async move { system.layout_manager.pull_cluster_layout(from).await } - }); - } + self.layout_manager + .handle_advertise_status(from, &info.layout_status); self.node_status .write() @@ -746,14 +734,13 @@ impl EndpointHandler for System { } impl NodeStatus { - fn initial(replication_factor: usize, layout: &LayoutHistory) -> Self { + fn initial(replication_factor: usize, layout_manager: &LayoutManager) -> Self { NodeStatus { hostname: gethostname::gethostname() .into_string() .unwrap_or_else(|_| "".to_string()), replication_factor, - cluster_layout_version: layout.current().version, - cluster_layout_staging_hash: layout.staging_hash, + layout_status: layout_manager.status(), meta_disk_avail: None, data_disk_avail: None, } @@ -763,8 +750,7 @@ impl NodeStatus { NodeStatus { hostname: "?".to_string(), replication_factor: 0, - cluster_layout_version: 0, - cluster_layout_staging_hash: Hash::from([0u8; 32]), + layout_status: Default::default(), meta_disk_avail: None, data_disk_avail: None, } From bfb1845fdc981a370539d641a5d80f438f184f07 Mon Sep 17 00:00:00 2001 From: Alex Auvolat Date: Thu, 9 Nov 2023 14:12:05 +0100 Subject: [PATCH 086/538] layout: refactor to use a RwLock on LayoutHistory --- src/api/admin/cluster.rs | 6 +-- src/api/k2v/index.rs | 11 ++--- src/garage/cli/layout.rs | 6 +-- src/model/helper/bucket.rs | 11 ++--- src/rpc/layout/manager.rs | 93 +++++++++++++++++++------------------- src/rpc/rpc_helper.rs | 11 ++--- src/rpc/system.rs | 15 +++--- src/table/sync.rs | 21 ++++----- 8 files changed, 82 insertions(+), 92 deletions(-) diff --git a/src/api/admin/cluster.rs b/src/api/admin/cluster.rs index f5483451..593bd778 100644 --- a/src/api/admin/cluster.rs +++ b/src/api/admin/cluster.rs @@ -210,7 +210,7 @@ pub async fn handle_update_cluster_layout( ) -> Result, Error> { let updates = parse_json_body::(req).await?; - let mut layout = garage.system.cluster_layout().as_ref().clone(); + let mut layout = garage.system.cluster_layout().clone(); let mut roles = layout.current().roles.clone(); roles.merge(&layout.staging.get().roles); @@ -256,7 +256,7 @@ pub async fn handle_apply_cluster_layout( ) -> Result, Error> { let param = parse_json_body::(req).await?; - let layout = garage.system.cluster_layout().as_ref().clone(); + let layout = garage.system.cluster_layout().clone(); let (layout, msg) = layout.apply_staged_changes(Some(param.version))?; garage @@ -273,7 +273,7 @@ pub async fn handle_apply_cluster_layout( } pub async fn handle_revert_cluster_layout(garage: &Arc) -> Result, Error> { - let layout = garage.system.cluster_layout().as_ref().clone(); + let layout = garage.system.cluster_layout().clone(); let layout = layout.revert_staged_changes()?; garage .system diff --git a/src/api/k2v/index.rs b/src/api/k2v/index.rs index a9bc3826..3c2f51a9 100644 --- a/src/api/k2v/index.rs +++ b/src/api/k2v/index.rs @@ -5,7 +5,6 @@ use serde::Serialize; use garage_util::data::*; -use garage_rpc::layout::LayoutHistory; use garage_table::util::*; use garage_model::garage::Garage; @@ -26,7 +25,8 @@ pub async fn handle_read_index( ) -> Result, Error> { let reverse = reverse.unwrap_or(false); - let layout: Arc = garage.system.cluster_layout().clone(); + // TODO: not only current + let node_id_vec = garage.system.cluster_layout().current().node_ids().to_vec(); let (partition_keys, more, next_start) = read_range( &garage.k2v.counter_table.table, @@ -35,10 +35,7 @@ pub async fn handle_read_index( &start, &end, limit, - Some(( - DeletedFilter::NotDeleted, - layout.current().node_id_vec.clone(), - )), + Some((DeletedFilter::NotDeleted, node_id_vec)), EnumerationOrder::from_reverse(reverse), ) .await?; @@ -57,7 +54,7 @@ pub async fn handle_read_index( partition_keys: partition_keys .into_iter() .map(|part| { - let vals = part.filtered_values(&layout); + let vals = part.filtered_values(&garage.system.cluster_layout()); ReadIndexResponseEntry { pk: part.sk, entries: *vals.get(&s_entries).unwrap_or(&0), diff --git a/src/garage/cli/layout.rs b/src/garage/cli/layout.rs index bffc81d3..269d92f4 100644 --- a/src/garage/cli/layout.rs +++ b/src/garage/cli/layout.rs @@ -1,5 +1,3 @@ -use std::sync::Arc; - use bytesize::ByteSize; use format_table::format_table; @@ -323,7 +321,7 @@ pub async fn fetch_layout( .call(&rpc_host, SystemRpc::PullClusterLayout, PRIO_NORMAL) .await?? { - SystemRpc::AdvertiseClusterLayout(t) => Ok(Arc::try_unwrap(t).unwrap()), + SystemRpc::AdvertiseClusterLayout(t) => Ok(t), resp => Err(Error::Message(format!("Invalid RPC response: {:?}", resp))), } } @@ -336,7 +334,7 @@ pub async fn send_layout( rpc_cli .call( &rpc_host, - SystemRpc::AdvertiseClusterLayout(Arc::new(layout)), + SystemRpc::AdvertiseClusterLayout(layout), PRIO_NORMAL, ) .await??; diff --git a/src/model/helper/bucket.rs b/src/model/helper/bucket.rs index 18904c8d..2a9c0fb1 100644 --- a/src/model/helper/bucket.rs +++ b/src/model/helper/bucket.rs @@ -450,10 +450,8 @@ impl<'a> BucketHelper<'a> { #[cfg(feature = "k2v")] { - use garage_rpc::layout::LayoutHistory; - use std::sync::Arc; - - let layout: Arc = self.0.system.cluster_layout().clone(); + // TODO: not only current + let node_id_vec = self.0.system.cluster_layout().current().node_ids().to_vec(); let k2vindexes = self .0 .k2v @@ -462,10 +460,7 @@ impl<'a> BucketHelper<'a> { .get_range( &bucket_id, None, - Some(( - DeletedFilter::NotDeleted, - layout.current().node_id_vec.clone(), - )), + Some((DeletedFilter::NotDeleted, node_id_vec)), 10, EnumerationOrder::Forward, ) diff --git a/src/rpc/layout/manager.rs b/src/rpc/layout/manager.rs index 351e0959..c021039b 100644 --- a/src/rpc/layout/manager.rs +++ b/src/rpc/layout/manager.rs @@ -1,10 +1,9 @@ -use std::sync::Arc; +use std::sync::{Arc, RwLock, RwLockReadGuard}; use std::time::Duration; use serde::{Deserialize, Serialize}; -use tokio::sync::watch; -use tokio::sync::Mutex; +use tokio::sync::Notify; use netapp::endpoint::Endpoint; use netapp::peering::fullmesh::FullMeshPeeringStrategy; @@ -23,8 +22,8 @@ pub struct LayoutManager { replication_factor: usize, persist_cluster_layout: Persister, - pub layout_watch: watch::Receiver>, - update_layout: Mutex>>, + layout: Arc>, + pub(crate) change_notify: Arc, pub(crate) rpc_helper: RpcHelper, system_endpoint: Arc>, @@ -71,20 +70,21 @@ impl LayoutManager { } }; - let (update_layout, layout_watch) = watch::channel(Arc::new(cluster_layout)); + let layout = Arc::new(RwLock::new(cluster_layout)); + let change_notify = Arc::new(Notify::new()); let rpc_helper = RpcHelper::new( node_id.into(), fullmesh, - layout_watch.clone(), + layout.clone(), config.rpc_timeout_msec.map(Duration::from_millis), ); Ok(Arc::new(Self { replication_factor, persist_cluster_layout, - layout_watch, - update_layout: Mutex::new(update_layout), + layout, + change_notify, system_endpoint, rpc_helper, })) @@ -108,8 +108,8 @@ impl LayoutManager { Ok(()) } - pub fn layout(&self) -> watch::Ref> { - self.layout_watch.borrow() + pub fn layout(&self) -> RwLockReadGuard<'_, LayoutHistory> { + self.layout.read().unwrap() } pub(crate) async fn pull_cluster_layout(self: &Arc, peer: Uuid) { @@ -131,7 +131,7 @@ impl LayoutManager { /// Save network configuration to disc async fn save_cluster_layout(&self) -> Result<(), Error> { - let layout: Arc = self.layout_watch.borrow().clone(); + let layout = self.layout.read().unwrap().clone(); // TODO: avoid cloning self.persist_cluster_layout .save_async(&layout) .await @@ -139,6 +139,22 @@ impl LayoutManager { Ok(()) } + fn merge_layout(&self, adv: &LayoutHistory) -> Option { + let mut layout = self.layout.write().unwrap(); + let prev_layout_check = layout.check().is_ok(); + + if !prev_layout_check || adv.check().is_ok() { + if layout.merge(adv) { + if prev_layout_check && layout.check().is_err() { + panic!("Merged two correct layouts and got an incorrect layout."); + } + + return Some(layout.clone()); + } + } + None + } + // ---- RPC HANDLERS ---- pub(crate) fn handle_advertise_status(self: &Arc, from: Uuid, status: &LayoutStatus) { @@ -154,7 +170,7 @@ impl LayoutManager { } pub(crate) fn handle_pull_cluster_layout(&self) -> SystemRpc { - let layout = self.layout_watch.borrow().clone(); + let layout = self.layout.read().unwrap().clone(); // TODO: avoid cloning SystemRpc::AdvertiseClusterLayout(layout) } @@ -172,42 +188,27 @@ impl LayoutManager { return Err(Error::Message(msg)); } - if *adv != **self.layout_watch.borrow() { - let update_layout = self.update_layout.lock().await; - let mut layout: LayoutHistory = self.layout_watch.borrow().as_ref().clone(); + if let Some(new_layout) = self.merge_layout(adv) { + self.change_notify.notify_waiters(); - let prev_layout_check = layout.check().is_ok(); - if layout.merge(adv) { - if prev_layout_check && layout.check().is_err() { - error!("New cluster layout is invalid, discarding."); - return Err(Error::Message( - "New cluster layout is invalid, discarding.".into(), - )); - } - - let layout = Arc::new(layout); - update_layout.send(layout.clone())?; - drop(update_layout); // release mutex - - tokio::spawn({ - let this = self.clone(); - async move { - if let Err(e) = this - .rpc_helper - .broadcast( - &this.system_endpoint, - SystemRpc::AdvertiseClusterLayout(layout), - RequestStrategy::with_priority(PRIO_HIGH), - ) - .await - { - warn!("Error while broadcasting new cluster layout: {}", e); - } + tokio::spawn({ + let this = self.clone(); + async move { + if let Err(e) = this + .rpc_helper + .broadcast( + &this.system_endpoint, + SystemRpc::AdvertiseClusterLayout(new_layout), + RequestStrategy::with_priority(PRIO_HIGH), + ) + .await + { + warn!("Error while broadcasting new cluster layout: {}", e); } - }); + } + }); - self.save_cluster_layout().await?; - } + self.save_cluster_layout().await?; } Ok(SystemRpc::Ok) diff --git a/src/rpc/rpc_helper.rs b/src/rpc/rpc_helper.rs index 3fdb4acd..ce291068 100644 --- a/src/rpc/rpc_helper.rs +++ b/src/rpc/rpc_helper.rs @@ -1,12 +1,11 @@ //! Contain structs related to making RPCs -use std::sync::Arc; +use std::sync::{Arc, RwLock}; use std::time::Duration; use futures::future::join_all; use futures::stream::futures_unordered::FuturesUnordered; use futures::stream::StreamExt; use tokio::select; -use tokio::sync::watch; use opentelemetry::KeyValue; use opentelemetry::{ @@ -91,7 +90,7 @@ pub struct RpcHelper(Arc); struct RpcHelperInner { our_node_id: Uuid, fullmesh: Arc, - layout_watch: watch::Receiver>, + layout: Arc>, metrics: RpcMetrics, rpc_timeout: Duration, } @@ -100,7 +99,7 @@ impl RpcHelper { pub(crate) fn new( our_node_id: Uuid, fullmesh: Arc, - layout_watch: watch::Receiver>, + layout: Arc>, rpc_timeout: Option, ) -> Self { let metrics = RpcMetrics::new(); @@ -108,7 +107,7 @@ impl RpcHelper { Self(Arc::new(RpcHelperInner { our_node_id, fullmesh, - layout_watch, + layout, metrics, rpc_timeout: rpc_timeout.unwrap_or(DEFAULT_TIMEOUT), })) @@ -392,7 +391,7 @@ impl RpcHelper { pub fn request_order(&self, nodes: &[Uuid]) -> Vec { // Retrieve some status variables that we will use to sort requests let peer_list = self.0.fullmesh.get_peer_list(); - let layout: Arc = self.0.layout_watch.borrow().clone(); + let layout = self.0.layout.read().unwrap(); let our_zone = match layout.current().node_role(&self.0.our_node_id) { Some(pc) => &pc.zone, None => "", diff --git a/src/rpc/system.rs b/src/rpc/system.rs index 88c4d443..cb3af3fe 100644 --- a/src/rpc/system.rs +++ b/src/rpc/system.rs @@ -4,7 +4,7 @@ use std::io::{Read, Write}; use std::net::{IpAddr, SocketAddr}; use std::path::{Path, PathBuf}; use std::sync::atomic::Ordering; -use std::sync::{Arc, RwLock}; +use std::sync::{Arc, RwLock, RwLockReadGuard}; use std::time::{Duration, Instant}; use arc_swap::ArcSwap; @@ -13,7 +13,7 @@ use futures::join; use serde::{Deserialize, Serialize}; use sodiumoxide::crypto::sign::ed25519; use tokio::select; -use tokio::sync::watch; +use tokio::sync::{watch, Notify}; use netapp::endpoint::{Endpoint, EndpointHandler}; use netapp::message::*; @@ -68,7 +68,7 @@ pub enum SystemRpc { /// Ask other node its cluster layout. Answered with AdvertiseClusterLayout PullClusterLayout, /// Advertisement of cluster layout. Sent spontanously or in response to PullClusterLayout - AdvertiseClusterLayout(Arc), + AdvertiseClusterLayout(LayoutHistory), } impl Rpc for SystemRpc { @@ -345,12 +345,12 @@ impl System { // ---- Public utilities / accessors ---- - pub fn cluster_layout(&self) -> watch::Ref> { + pub fn cluster_layout(&self) -> RwLockReadGuard<'_, LayoutHistory> { self.layout_manager.layout() } - pub fn layout_watch(&self) -> watch::Receiver> { - self.layout_manager.layout_watch.clone() + pub fn layout_notify(&self) -> Arc { + self.layout_manager.change_notify.clone() } pub fn rpc_helper(&self) -> &RpcHelper { @@ -412,7 +412,6 @@ impl System { } pub fn health(&self) -> ClusterHealth { - let layout: Arc<_> = self.cluster_layout().clone(); let quorum = self.replication_mode.write_quorum(); let replication_factor = self.replication_factor; @@ -423,6 +422,8 @@ impl System { .collect::>(); let connected_nodes = nodes.iter().filter(|(_, n)| n.is_up).count(); + let layout = self.cluster_layout(); // acquires a rwlock + // TODO: not only layout.current() let storage_nodes = layout .current() diff --git a/src/table/sync.rs b/src/table/sync.rs index 2da1bfe7..4355bd9e 100644 --- a/src/table/sync.rs +++ b/src/table/sync.rs @@ -10,7 +10,7 @@ use rand::Rng; use serde::{Deserialize, Serialize}; use serde_bytes::ByteBuf; use tokio::select; -use tokio::sync::{mpsc, watch}; +use tokio::sync::{mpsc, watch, Notify}; use garage_util::background::*; use garage_util::data::*; @@ -91,8 +91,8 @@ impl TableSyncer { bg.spawn_worker(SyncWorker { syncer: self.clone(), - layout_watch: self.system.layout_watch(), - layout: self.system.cluster_layout().clone(), + layout_notify: self.system.layout_notify(), + layout_version: self.system.cluster_layout().current().version, add_full_sync_rx, todo: vec![], next_full_sync: Instant::now() + Duration::from_secs(20), @@ -492,8 +492,8 @@ impl EndpointHandler for TableSync struct SyncWorker { syncer: Arc>, - layout_watch: watch::Receiver>, - layout: Arc, + layout_notify: Arc, + layout_version: u64, add_full_sync_rx: mpsc::UnboundedReceiver<()>, todo: Vec, next_full_sync: Instant, @@ -593,12 +593,11 @@ impl Worker for SyncWorker { self.add_full_sync(); } }, - _ = self.layout_watch.changed() => { - let new_layout = self.layout_watch.borrow(); - if !Arc::ptr_eq(&new_layout, &self.layout) { - self.layout = new_layout.clone(); - drop(new_layout); - debug!("({}) Ring changed, adding full sync to syncer todo list", F::TABLE_NAME); + _ = self.layout_notify.notified() => { + let new_version = self.syncer.system.cluster_layout().current().version; + if new_version > self.layout_version { + self.layout_version = new_version; + debug!("({}) Layout changed, adding full sync to syncer todo list", F::TABLE_NAME); self.add_full_sync(); } }, From 94caf9c0c1342ce1d2ba3ac7af39fb133721ee83 Mon Sep 17 00:00:00 2001 From: Alex Auvolat Date: Thu, 9 Nov 2023 14:53:34 +0100 Subject: [PATCH 087/538] layout: separate code path for synchronizing update trackers only --- src/rpc/layout/history.rs | 51 ++++++++---- src/rpc/layout/manager.rs | 160 ++++++++++++++++++++++++++------------ src/rpc/layout/schema.rs | 23 ++++-- src/rpc/system.rs | 15 +++- 4 files changed, 178 insertions(+), 71 deletions(-) diff --git a/src/rpc/layout/history.rs b/src/rpc/layout/history.rs index 9ae28887..357b9d62 100644 --- a/src/rpc/layout/history.rs +++ b/src/rpc/layout/history.rs @@ -18,10 +18,11 @@ impl LayoutHistory { let mut ret = LayoutHistory { versions: vec![version].into_boxed_slice().into(), update_trackers: Default::default(), + trackers_hash: [0u8; 32].into(), staging: Lww::raw(0, staging), staging_hash: [0u8; 32].into(), }; - ret.staging_hash = ret.calculate_staging_hash(); + ret.update_hashes(); ret } @@ -29,6 +30,15 @@ impl LayoutHistory { self.versions.last().as_ref().unwrap() } + pub(crate) fn update_hashes(&mut self) { + self.trackers_hash = self.calculate_trackers_hash(); + self.staging_hash = self.calculate_staging_hash(); + } + + pub(crate) fn calculate_trackers_hash(&self) -> Hash { + blake2sum(&nonversioned_encode(&self.update_trackers).unwrap()[..]) + } + pub(crate) fn calculate_staging_hash(&self) -> Hash { blake2sum(&nonversioned_encode(&self.staging).unwrap()[..]) } @@ -38,12 +48,6 @@ impl LayoutHistory { pub fn merge(&mut self, other: &LayoutHistory) -> bool { let mut changed = false; - // Merge staged layout changes - if self.staging != other.staging { - changed = true; - } - self.staging.merge(&other.staging); - // Add any new versions to history for v2 in other.versions.iter() { if let Some(v1) = self.versions.iter().find(|v| v.version == v2.version) { @@ -63,7 +67,21 @@ impl LayoutHistory { } // Merge trackers - self.update_trackers.merge(&other.update_trackers); + if self.update_trackers != other.update_trackers { + let c = self.update_trackers.merge(&other.update_trackers); + changed = changed || c; + } + + // Merge staged layout changes + if self.staging != other.staging { + self.staging.merge(&other.staging); + changed = true; + } + + // Update hashes if there are changes + if changed { + self.update_hashes(); + } changed } @@ -100,7 +118,7 @@ To know the correct value of the new layout version, invoke `garage layout show` parameters: self.staging.get().parameters.clone(), roles: LwwMap::new(), }); - self.staging_hash = self.calculate_staging_hash(); + self.update_hashes(); Ok((self, msg)) } @@ -110,20 +128,25 @@ To know the correct value of the new layout version, invoke `garage layout show` parameters: Lww::new(self.current().parameters.clone()), roles: LwwMap::new(), }); - self.staging_hash = self.calculate_staging_hash(); + self.update_hashes(); Ok(self) } pub fn check(&self) -> Result<(), String> { // Check that the hash of the staging data is correct - let staging_hash = self.calculate_staging_hash(); - if staging_hash != self.staging_hash { + if self.trackers_hash != self.calculate_trackers_hash() { + return Err("trackers_hash is incorrect".into()); + } + if self.staging_hash != self.calculate_staging_hash() { return Err("staging_hash is incorrect".into()); } - // TODO: anythign more ? + for version in self.versions.iter() { + version.check()?; + } - self.current().check() + // TODO: anythign more ? + Ok(()) } } diff --git a/src/rpc/layout/manager.rs b/src/rpc/layout/manager.rs index c021039b..a2502f58 100644 --- a/src/rpc/layout/manager.rs +++ b/src/rpc/layout/manager.rs @@ -19,6 +19,7 @@ use crate::rpc_helper::*; use crate::system::*; pub struct LayoutManager { + node_id: Uuid, replication_factor: usize, persist_cluster_layout: Persister, @@ -34,7 +35,7 @@ pub struct LayoutStatus { /// Cluster layout version pub cluster_layout_version: u64, /// Hash of cluster layout update trackers - // (TODO) pub cluster_layout_trackers_hash: Hash, + pub cluster_layout_trackers_hash: Hash, /// Hash of cluster layout staging data pub cluster_layout_staging_hash: Hash, } @@ -81,6 +82,7 @@ impl LayoutManager { ); Ok(Arc::new(Self { + node_id: node_id.into(), replication_factor, persist_cluster_layout, layout, @@ -92,10 +94,15 @@ impl LayoutManager { // ---- PUBLIC INTERFACE ---- + pub fn layout(&self) -> RwLockReadGuard<'_, LayoutHistory> { + self.layout.read().unwrap() + } + pub fn status(&self) -> LayoutStatus { let layout = self.layout(); LayoutStatus { cluster_layout_version: layout.current().version, + cluster_layout_trackers_hash: layout.trackers_hash, cluster_layout_staging_hash: layout.staging_hash, } } @@ -108,37 +115,8 @@ impl LayoutManager { Ok(()) } - pub fn layout(&self) -> RwLockReadGuard<'_, LayoutHistory> { - self.layout.read().unwrap() - } - - pub(crate) async fn pull_cluster_layout(self: &Arc, peer: Uuid) { - let resp = self - .rpc_helper - .call( - &self.system_endpoint, - peer, - SystemRpc::PullClusterLayout, - RequestStrategy::with_priority(PRIO_HIGH), - ) - .await; - if let Ok(SystemRpc::AdvertiseClusterLayout(layout)) = resp { - let _: Result<_, _> = self.handle_advertise_cluster_layout(&layout).await; - } - } - // ---- INTERNALS --- - /// Save network configuration to disc - async fn save_cluster_layout(&self) -> Result<(), Error> { - let layout = self.layout.read().unwrap().clone(); // TODO: avoid cloning - self.persist_cluster_layout - .save_async(&layout) - .await - .expect("Cannot save current cluster layout"); - Ok(()) - } - fn merge_layout(&self, adv: &LayoutHistory) -> Option { let mut layout = self.layout.write().unwrap(); let prev_layout_check = layout.check().is_ok(); @@ -155,17 +133,98 @@ impl LayoutManager { None } + fn merge_layout_trackers(&self, adv: &UpdateTrackers) -> Option { + let mut layout = self.layout.write().unwrap(); + if layout.update_trackers != *adv { + if layout.update_trackers.merge(adv) { + return Some(layout.update_trackers.clone()); + } + } + None + } + + async fn pull_cluster_layout(self: &Arc, peer: Uuid) { + let resp = self + .rpc_helper + .call( + &self.system_endpoint, + peer, + SystemRpc::PullClusterLayout, + RequestStrategy::with_priority(PRIO_HIGH), + ) + .await; + if let Ok(SystemRpc::AdvertiseClusterLayout(layout)) = resp { + if let Err(e) = self.handle_advertise_cluster_layout(&layout).await { + warn!("In pull_cluster_layout: {}", e); + } + } + } + + async fn pull_cluster_layout_trackers(self: &Arc, peer: Uuid) { + let resp = self + .rpc_helper + .call( + &self.system_endpoint, + peer, + SystemRpc::PullClusterLayoutTrackers, + RequestStrategy::with_priority(PRIO_HIGH), + ) + .await; + if let Ok(SystemRpc::AdvertiseClusterLayoutTrackers(trackers)) = resp { + if let Err(e) = self + .handle_advertise_cluster_layout_trackers(&trackers) + .await + { + warn!("In pull_cluster_layout_trackers: {}", e); + } + } + } + + /// Save cluster layout data to disk + async fn save_cluster_layout(&self) -> Result<(), Error> { + let layout = self.layout.read().unwrap().clone(); + self.persist_cluster_layout + .save_async(&layout) + .await + .expect("Cannot save current cluster layout"); + Ok(()) + } + + fn broadcast_update(self: &Arc, rpc: SystemRpc) { + tokio::spawn({ + let this = self.clone(); + async move { + if let Err(e) = this + .rpc_helper + .broadcast( + &this.system_endpoint, + rpc, + RequestStrategy::with_priority(PRIO_HIGH), + ) + .await + { + warn!("Error while broadcasting new cluster layout: {}", e); + } + } + }); + } + // ---- RPC HANDLERS ---- - pub(crate) fn handle_advertise_status(self: &Arc, from: Uuid, status: &LayoutStatus) { - let local_status = self.status(); - if status.cluster_layout_version > local_status.cluster_layout_version - || status.cluster_layout_staging_hash != local_status.cluster_layout_staging_hash + pub(crate) fn handle_advertise_status(self: &Arc, from: Uuid, remote: &LayoutStatus) { + let local = self.status(); + if remote.cluster_layout_version > local.cluster_layout_version + || remote.cluster_layout_staging_hash != local.cluster_layout_staging_hash { tokio::spawn({ let this = self.clone(); async move { this.pull_cluster_layout(from).await } }); + } else if remote.cluster_layout_trackers_hash != local.cluster_layout_trackers_hash { + tokio::spawn({ + let this = self.clone(); + async move { this.pull_cluster_layout_trackers(from).await } + }); } } @@ -174,6 +233,11 @@ impl LayoutManager { SystemRpc::AdvertiseClusterLayout(layout) } + pub(crate) fn handle_pull_cluster_layout_trackers(&self) -> SystemRpc { + let layout = self.layout.read().unwrap(); + SystemRpc::AdvertiseClusterLayoutTrackers(layout.update_trackers.clone()) + } + pub(crate) async fn handle_advertise_cluster_layout( self: &Arc, adv: &LayoutHistory, @@ -190,24 +254,20 @@ impl LayoutManager { if let Some(new_layout) = self.merge_layout(adv) { self.change_notify.notify_waiters(); + self.broadcast_update(SystemRpc::AdvertiseClusterLayout(new_layout)); + self.save_cluster_layout().await?; + } - tokio::spawn({ - let this = self.clone(); - async move { - if let Err(e) = this - .rpc_helper - .broadcast( - &this.system_endpoint, - SystemRpc::AdvertiseClusterLayout(new_layout), - RequestStrategy::with_priority(PRIO_HIGH), - ) - .await - { - warn!("Error while broadcasting new cluster layout: {}", e); - } - } - }); + Ok(SystemRpc::Ok) + } + pub(crate) async fn handle_advertise_cluster_layout_trackers( + self: &Arc, + trackers: &UpdateTrackers, + ) -> Result { + if let Some(new_trackers) = self.merge_layout_trackers(trackers) { + self.change_notify.notify_waiters(); + self.broadcast_update(SystemRpc::AdvertiseClusterLayoutTrackers(new_trackers)); self.save_cluster_layout().await?; } diff --git a/src/rpc/layout/schema.rs b/src/rpc/layout/schema.rs index d587a6cb..abae5bd8 100644 --- a/src/rpc/layout/schema.rs +++ b/src/rpc/layout/schema.rs @@ -233,6 +233,8 @@ mod v010 { /// Update trackers pub update_trackers: UpdateTrackers, + /// Hash of the update trackers + pub trackers_hash: Hash, /// Staged changes for the next version pub staging: Lww, @@ -289,10 +291,12 @@ mod v010 { sync_map: update_tracker.clone(), sync_ack_map: update_tracker.clone(), }, + trackers_hash: [0u8; 32].into(), staging: Lww::raw(previous.version, staging), staging_hash: [0u8; 32].into(), }; ret.staging_hash = ret.calculate_staging_hash(); + ret.trackers_hash = ret.calculate_trackers_hash(); ret } } @@ -355,14 +359,20 @@ impl core::str::FromStr for ZoneRedundancy { } impl UpdateTracker { - fn merge(&mut self, other: &UpdateTracker) { + fn merge(&mut self, other: &UpdateTracker) -> bool { + let mut changed = false; for (k, v) in other.0.iter() { if let Some(v_mut) = self.0.get_mut(k) { - *v_mut = std::cmp::max(*v_mut, *v); + if *v > *v_mut { + *v_mut = *v; + changed = true; + } } else { self.0.insert(*k, *v); + changed = true; } } + changed } pub(crate) fn min(&self) -> u64 { @@ -371,9 +381,10 @@ impl UpdateTracker { } impl UpdateTrackers { - pub(crate) fn merge(&mut self, other: &UpdateTrackers) { - self.ack_map.merge(&other.ack_map); - self.sync_map.merge(&other.sync_map); - self.sync_ack_map.merge(&other.sync_ack_map); + pub(crate) fn merge(&mut self, other: &UpdateTrackers) -> bool { + let c1 = self.ack_map.merge(&other.ack_map); + let c2 = self.sync_map.merge(&other.sync_map); + let c3 = self.sync_ack_map.merge(&other.sync_ack_map); + c1 || c2 || c3 } } diff --git a/src/rpc/system.rs b/src/rpc/system.rs index cb3af3fe..6ce13d0d 100644 --- a/src/rpc/system.rs +++ b/src/rpc/system.rs @@ -34,7 +34,7 @@ use crate::consul::ConsulDiscovery; #[cfg(feature = "kubernetes-discovery")] use crate::kubernetes::*; use crate::layout::manager::{LayoutManager, LayoutStatus}; -use crate::layout::*; +use crate::layout::{self, LayoutHistory, NodeRoleV}; use crate::replication_mode::*; use crate::rpc_helper::*; @@ -65,10 +65,15 @@ pub enum SystemRpc { GetKnownNodes, /// Return known nodes ReturnKnownNodes(Vec), + /// Ask other node its cluster layout. Answered with AdvertiseClusterLayout PullClusterLayout, /// Advertisement of cluster layout. Sent spontanously or in response to PullClusterLayout AdvertiseClusterLayout(LayoutHistory), + /// Ask other node its cluster layout update trackers. + PullClusterLayoutTrackers, + /// Advertisement of cluster layout update trackers. + AdvertiseClusterLayoutTrackers(layout::UpdateTrackers), } impl Rpc for SystemRpc { @@ -727,6 +732,14 @@ impl EndpointHandler for System { .handle_advertise_cluster_layout(adv) .await } + SystemRpc::PullClusterLayoutTrackers => { + Ok(self.layout_manager.handle_pull_cluster_layout_trackers()) + } + SystemRpc::AdvertiseClusterLayoutTrackers(adv) => { + self.layout_manager + .handle_advertise_cluster_layout_trackers(adv) + .await + } // ---- other -> Error ---- m => Err(Error::unexpected_rpc_message(m)), From 03ebf18830dff1983f09abe6ecb8d8d26daeb446 Mon Sep 17 00:00:00 2001 From: Alex Auvolat Date: Thu, 9 Nov 2023 15:31:59 +0100 Subject: [PATCH 088/538] layout: begin managing the update tracker values --- src/rpc/layout/history.rs | 74 ++++++++++++++++++++++++++++++++++++--- src/rpc/layout/manager.rs | 7 ++-- src/rpc/layout/schema.rs | 15 +++++--- src/rpc/layout/version.rs | 46 ++++++++++++------------ 4 files changed, 109 insertions(+), 33 deletions(-) diff --git a/src/rpc/layout/history.rs b/src/rpc/layout/history.rs index 357b9d62..347f03db 100644 --- a/src/rpc/layout/history.rs +++ b/src/rpc/layout/history.rs @@ -1,3 +1,5 @@ +use std::collections::HashSet; + use garage_util::crdt::{Crdt, Lww, LwwMap}; use garage_util::data::*; use garage_util::encode::nonversioned_encode; @@ -30,6 +32,14 @@ impl LayoutHistory { self.versions.last().as_ref().unwrap() } + pub fn all_storage_nodes(&self) -> HashSet { + self.versions + .iter() + .map(|x| x.nongateway_nodes()) + .flatten() + .collect::>() + } + pub(crate) fn update_hashes(&mut self) { self.trackers_hash = self.calculate_trackers_hash(); self.staging_hash = self.calculate_staging_hash(); @@ -43,6 +53,65 @@ impl LayoutHistory { blake2sum(&nonversioned_encode(&self.staging).unwrap()[..]) } + // ------------------ update tracking --------------- + + pub(crate) fn update_trackers(&mut self, node_id: Uuid) { + // Ensure trackers for this node's values are up-to-date + + // 1. Acknowledge the last layout version in the history + self.ack_last(node_id); + + // 2. Assume the data on this node is sync'ed up at least to + // the first layout version in the history + self.sync_first(node_id); + + // 3. Acknowledge everyone has synced up to min(self.sync_map) + self.sync_ack(node_id); + + // 4. Cleanup layout versions that are not needed anymore + self.cleanup_old_versions(); + + info!("ack_map: {:?}", self.update_trackers.ack_map); + info!("sync_map: {:?}", self.update_trackers.sync_map); + info!("sync_ack_map: {:?}", self.update_trackers.sync_ack_map); + + // Finally, update hashes + self.update_hashes(); + } + + pub(crate) fn ack_last(&mut self, node: Uuid) { + let last_version = self.current().version; + self.update_trackers.ack_map.set_max(node, last_version); + } + + pub(crate) fn sync_first(&mut self, node: Uuid) { + let first_version = self.versions.first().as_ref().unwrap().version; + self.update_trackers.sync_map.set_max(node, first_version); + } + + pub(crate) fn sync_ack(&mut self, node: Uuid) { + self.update_trackers.sync_ack_map.set_max( + node, + self.calculate_global_min(&self.update_trackers.sync_map), + ); + } + + pub(crate) fn cleanup_old_versions(&mut self) { + let min_sync_ack = self.calculate_global_min(&self.update_trackers.sync_ack_map); + while self.versions.first().as_ref().unwrap().version < min_sync_ack { + self.versions.remove(0); + } + } + + pub(crate) fn calculate_global_min(&self, tracker: &UpdateTracker) -> u64 { + let storage_nodes = self.all_storage_nodes(); + storage_nodes + .iter() + .map(|x| tracker.0.get(x).copied().unwrap_or(0)) + .min() + .unwrap_or(0) + } + // ================== updates to layout, public interface =================== pub fn merge(&mut self, other: &LayoutHistory) -> bool { @@ -78,11 +147,6 @@ impl LayoutHistory { changed = true; } - // Update hashes if there are changes - if changed { - self.update_hashes(); - } - changed } diff --git a/src/rpc/layout/manager.rs b/src/rpc/layout/manager.rs index a2502f58..ffcc938b 100644 --- a/src/rpc/layout/manager.rs +++ b/src/rpc/layout/manager.rs @@ -51,7 +51,7 @@ impl LayoutManager { let persist_cluster_layout: Persister = Persister::new(&config.metadata_dir, "cluster_layout"); - let cluster_layout = match persist_cluster_layout.load() { + let mut cluster_layout = match persist_cluster_layout.load() { Ok(x) => { if x.current().replication_factor != replication_factor { return Err(Error::Message(format!( @@ -71,6 +71,8 @@ impl LayoutManager { } }; + cluster_layout.update_trackers(node_id.into()); + let layout = Arc::new(RwLock::new(cluster_layout)); let change_notify = Arc::new(Notify::new()); @@ -126,7 +128,7 @@ impl LayoutManager { if prev_layout_check && layout.check().is_err() { panic!("Merged two correct layouts and got an incorrect layout."); } - + layout.update_trackers(self.node_id); return Some(layout.clone()); } } @@ -137,6 +139,7 @@ impl LayoutManager { let mut layout = self.layout.write().unwrap(); if layout.update_trackers != *adv { if layout.update_trackers.merge(adv) { + layout.update_trackers(self.node_id); return Some(layout.update_trackers.clone()); } } diff --git a/src/rpc/layout/schema.rs b/src/rpc/layout/schema.rs index abae5bd8..9f5d6f62 100644 --- a/src/rpc/layout/schema.rs +++ b/src/rpc/layout/schema.rs @@ -3,6 +3,7 @@ use std::fmt; use bytesize::ByteSize; use garage_util::crdt::{AutoCrdt, Crdt}; +use garage_util::data::Uuid; mod v08 { use crate::layout::CompactNodeType; @@ -276,8 +277,7 @@ mod v010 { let update_tracker = UpdateTracker( version .nongateway_nodes() - .iter() - .map(|x| (*x, version.version)) + .map(|x| (x, version.version)) .collect::>(), ); let staging = LayoutStaging { @@ -375,8 +375,15 @@ impl UpdateTracker { changed } - pub(crate) fn min(&self) -> u64 { - self.0.iter().map(|(_, v)| *v).min().unwrap_or(0) + pub(crate) fn set_max(&mut self, peer: Uuid, value: u64) { + match self.0.get_mut(&peer) { + Some(e) => { + *e = std::cmp::max(*e, value); + } + None => { + self.0.insert(peer, value); + } + } } } diff --git a/src/rpc/layout/version.rs b/src/rpc/layout/version.rs index 6918fdf9..65c62f63 100644 --- a/src/rpc/layout/version.rs +++ b/src/rpc/layout/version.rs @@ -134,15 +134,14 @@ impl LayoutVersion { // ===================== internal information extractors ====================== /// Returns the uuids of the non_gateway nodes in self.node_id_vec. - pub(crate) fn nongateway_nodes(&self) -> Vec { - let mut result = Vec::::new(); - for uuid in self.node_id_vec.iter() { - match self.node_role(uuid) { - Some(role) if role.capacity.is_some() => result.push(*uuid), - _ => (), - } - } - result + pub(crate) fn nongateway_nodes(&self) -> impl Iterator + '_ { + self.node_id_vec + .iter() + .copied() + .filter(move |uuid| match self.node_role(uuid) { + Some(role) if role.capacity.is_some() => true, + _ => false, + }) } /// Given a node uuids, this function returns the label of its zone @@ -158,8 +157,8 @@ impl LayoutVersion { /// Returns the sum of capacities of non gateway nodes in the cluster fn get_total_capacity(&self) -> Result { let mut total_capacity = 0; - for uuid in self.nongateway_nodes().iter() { - total_capacity += self.get_node_capacity(uuid)?; + for uuid in self.nongateway_nodes() { + total_capacity += self.get_node_capacity(&uuid)?; } Ok(total_capacity) } @@ -320,7 +319,7 @@ impl LayoutVersion { // to use them as indices in the flow graphs. let (id_to_zone, zone_to_id) = self.generate_nongateway_zone_ids()?; - let nb_nongateway_nodes = self.nongateway_nodes().len(); + let nb_nongateway_nodes = self.nongateway_nodes().count(); if nb_nongateway_nodes < self.replication_factor { return Err(Error::Message(format!( "The number of nodes with positive \ @@ -479,7 +478,8 @@ impl LayoutVersion { let mut id_to_zone = Vec::::new(); let mut zone_to_id = HashMap::::new(); - for uuid in self.nongateway_nodes().iter() { + let nongateway_nodes = self.nongateway_nodes().collect::>(); + for uuid in nongateway_nodes.iter() { let r = self.node_role(uuid).unwrap(); if !zone_to_id.contains_key(&r.zone) && r.capacity.is_some() { zone_to_id.insert(r.zone.clone(), id_to_zone.len()); @@ -556,8 +556,10 @@ impl LayoutVersion { exclude_assoc: &HashSet<(usize, usize)>, zone_redundancy: usize, ) -> Result, Error> { - let vertices = - LayoutVersion::generate_graph_vertices(zone_to_id.len(), self.nongateway_nodes().len()); + let vertices = LayoutVersion::generate_graph_vertices( + zone_to_id.len(), + self.nongateway_nodes().count(), + ); let mut g = Graph::::new(&vertices); let nb_zones = zone_to_id.len(); for p in 0..NB_PARTITIONS { @@ -576,7 +578,7 @@ impl LayoutVersion { )?; } } - for n in 0..self.nongateway_nodes().len() { + for n in 0..self.nongateway_nodes().count() { let node_capacity = self.get_node_capacity(&self.node_id_vec[n])?; let node_zone = zone_to_id[self.get_node_zone(&self.node_id_vec[n])?]; g.add_edge(Vertex::N(n), Vertex::Sink, node_capacity / partition_size)?; @@ -600,7 +602,7 @@ impl LayoutVersion { // previous assignment let mut exclude_edge = HashSet::<(usize, usize)>::new(); if let Some(prev_assign) = prev_assign_opt { - let nb_nodes = self.nongateway_nodes().len(); + let nb_nodes = self.nongateway_nodes().count(); for (p, prev_assign_p) in prev_assign.iter().enumerate() { for n in 0..nb_nodes { exclude_edge.insert((p, n)); @@ -652,7 +654,7 @@ impl LayoutVersion { // We compute the maximal length of a simple path in gflow. It is used in the // Bellman-Ford algorithm in optimize_flow_with_cost to set the number // of iterations. - let nb_nodes = self.nongateway_nodes().len(); + let nb_nodes = self.nongateway_nodes().count(); let path_length = 4 * nb_nodes; gflow.optimize_flow_with_cost(&cost, path_length)?; @@ -730,7 +732,7 @@ impl LayoutVersion { } // We define and fill in the following tables - let storing_nodes = self.nongateway_nodes(); + let storing_nodes = self.nongateway_nodes().collect::>(); let mut new_partitions = vec![0; storing_nodes.len()]; let mut stored_partitions = vec![0; storing_nodes.len()]; @@ -873,9 +875,9 @@ mod tests { for z in zones.iter() { zone_token.insert(z.clone(), 0); } - for uuid in cl.nongateway_nodes().iter() { - let z = cl.get_node_zone(uuid)?; - let c = cl.get_node_capacity(uuid)?; + for uuid in cl.nongateway_nodes() { + let z = cl.get_node_zone(&uuid)?; + let c = cl.get_node_capacity(&uuid)?; zone_token.insert( z.clone(), zone_token[&z] + min(NB_PARTITIONS, (c / over_size) as usize), From bad7cc812ead88e9f334405c5c082d79c14c8898 Mon Sep 17 00:00:00 2001 From: Alex Auvolat Date: Thu, 9 Nov 2023 15:42:10 +0100 Subject: [PATCH 089/538] layout admin: add missing calls to update_hash --- src/api/admin/cluster.rs | 1 + src/garage/cli/layout.rs | 3 ++- src/rpc/layout/history.rs | 2 +- 3 files changed, 4 insertions(+), 2 deletions(-) diff --git a/src/api/admin/cluster.rs b/src/api/admin/cluster.rs index 593bd778..d912b58f 100644 --- a/src/api/admin/cluster.rs +++ b/src/api/admin/cluster.rs @@ -240,6 +240,7 @@ pub async fn handle_update_cluster_layout( .merge(&roles.update_mutator(node, layout::NodeRoleV(new_role))); } + layout.update_hashes(); garage .system .layout_manager diff --git a/src/garage/cli/layout.rs b/src/garage/cli/layout.rs index 269d92f4..15727448 100644 --- a/src/garage/cli/layout.rs +++ b/src/garage/cli/layout.rs @@ -329,8 +329,9 @@ pub async fn fetch_layout( pub async fn send_layout( rpc_cli: &Endpoint, rpc_host: NodeID, - layout: LayoutHistory, + mut layout: LayoutHistory, ) -> Result<(), Error> { + layout.update_hashes(); rpc_cli .call( &rpc_host, diff --git a/src/rpc/layout/history.rs b/src/rpc/layout/history.rs index 347f03db..e17a1c77 100644 --- a/src/rpc/layout/history.rs +++ b/src/rpc/layout/history.rs @@ -40,7 +40,7 @@ impl LayoutHistory { .collect::>() } - pub(crate) fn update_hashes(&mut self) { + pub fn update_hashes(&mut self) { self.trackers_hash = self.calculate_trackers_hash(); self.staging_hash = self.calculate_staging_hash(); } From 9d95f6f7040c1899715ae4f984313427b1432758 Mon Sep 17 00:00:00 2001 From: Alex Auvolat Date: Thu, 9 Nov 2023 15:52:45 +0100 Subject: [PATCH 090/538] layout: fix tracker bugs --- src/rpc/layout/manager.rs | 8 +++++++- src/rpc/layout/schema.rs | 6 +++--- 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/src/rpc/layout/manager.rs b/src/rpc/layout/manager.rs index ffcc938b..c1417dac 100644 --- a/src/rpc/layout/manager.rs +++ b/src/rpc/layout/manager.rs @@ -125,10 +125,10 @@ impl LayoutManager { if !prev_layout_check || adv.check().is_ok() { if layout.merge(adv) { + layout.update_trackers(self.node_id); if prev_layout_check && layout.check().is_err() { panic!("Merged two correct layouts and got an incorrect layout."); } - layout.update_trackers(self.node_id); return Some(layout.clone()); } } @@ -245,6 +245,8 @@ impl LayoutManager { self: &Arc, adv: &LayoutHistory, ) -> Result { + debug!("handle_advertise_cluster_layout: {:?}", adv); + if adv.current().replication_factor != self.replication_factor { let msg = format!( "Received a cluster layout from another node with replication factor {}, which is different from what we have in our configuration ({}). Discarding the cluster layout we received.", @@ -256,6 +258,8 @@ impl LayoutManager { } if let Some(new_layout) = self.merge_layout(adv) { + debug!("handle_advertise_cluster_layout: some changes were added to the current stuff"); + self.change_notify.notify_waiters(); self.broadcast_update(SystemRpc::AdvertiseClusterLayout(new_layout)); self.save_cluster_layout().await?; @@ -268,6 +272,8 @@ impl LayoutManager { self: &Arc, trackers: &UpdateTrackers, ) -> Result { + debug!("handle_advertise_cluster_layout_trackers: {:?}", trackers); + if let Some(new_trackers) = self.merge_layout_trackers(trackers) { self.change_notify.notify_waiters(); self.broadcast_update(SystemRpc::AdvertiseClusterLayoutTrackers(new_trackers)); diff --git a/src/rpc/layout/schema.rs b/src/rpc/layout/schema.rs index 9f5d6f62..db60c806 100644 --- a/src/rpc/layout/schema.rs +++ b/src/rpc/layout/schema.rs @@ -190,7 +190,7 @@ mod v010 { use garage_util::crdt::{Lww, LwwMap}; use garage_util::data::{Hash, Uuid}; use serde::{Deserialize, Serialize}; - use std::collections::HashMap; + use std::collections::BTreeMap; pub use v09::{LayoutParameters, NodeRole, NodeRoleV, ZoneRedundancy}; /// The layout of the cluster, i.e. the list of roles @@ -257,7 +257,7 @@ mod v010 { /// The history of cluster layouts #[derive(Clone, Debug, Serialize, Deserialize, Default, PartialEq)] - pub struct UpdateTracker(pub HashMap); + pub struct UpdateTracker(pub BTreeMap); impl garage_util::migrate::Migrate for LayoutHistory { const VERSION_MARKER: &'static [u8] = b"G010lh"; @@ -278,7 +278,7 @@ mod v010 { version .nongateway_nodes() .map(|x| (x, version.version)) - .collect::>(), + .collect::>(), ); let staging = LayoutStaging { parameters: previous.staging_parameters, From df36cf3099f6010c4fc62109b85d4d1e62f160cc Mon Sep 17 00:00:00 2001 From: Alex Auvolat Date: Thu, 9 Nov 2023 16:32:31 +0100 Subject: [PATCH 091/538] layout: add helpers to LayoutHistory and prepare integration with Table --- src/rpc/layout/history.rs | 41 +++++++++++++++++++++++++++++++-------- src/rpc/layout/manager.rs | 33 ++++++++++++++++++++++++++++++- src/rpc/layout/schema.rs | 9 ++++++--- src/rpc/layout/version.rs | 2 +- src/table/table.rs | 2 ++ 5 files changed, 74 insertions(+), 13 deletions(-) diff --git a/src/rpc/layout/history.rs b/src/rpc/layout/history.rs index e17a1c77..dbb02269 100644 --- a/src/rpc/layout/history.rs +++ b/src/rpc/layout/history.rs @@ -32,14 +32,6 @@ impl LayoutHistory { self.versions.last().as_ref().unwrap() } - pub fn all_storage_nodes(&self) -> HashSet { - self.versions - .iter() - .map(|x| x.nongateway_nodes()) - .flatten() - .collect::>() - } - pub fn update_hashes(&mut self) { self.trackers_hash = self.calculate_trackers_hash(); self.staging_hash = self.calculate_staging_hash(); @@ -53,6 +45,39 @@ impl LayoutHistory { blake2sum(&nonversioned_encode(&self.staging).unwrap()[..]) } + // ------------------ who stores what now? --------------- + + pub fn max_ack(&self) -> u64 { + self.calculate_global_min(&self.update_trackers.ack_map) + } + + pub fn all_storage_nodes(&self) -> HashSet { + // TODO: cache this + self.versions + .iter() + .map(|x| x.nongateway_nodes()) + .flatten() + .collect::>() + } + + pub fn read_nodes_of(&self, position: &Hash) -> Vec { + let sync_min = self.calculate_global_min(&self.update_trackers.sync_map); + let version = self + .versions + .iter() + .find(|x| x.version == sync_min) + .or(self.versions.last()) + .unwrap(); + version.nodes_of(position, version.replication_factor) + } + + pub fn write_sets_of(&self, position: &Hash) -> Vec> { + self.versions + .iter() + .map(|x| x.nodes_of(position, x.replication_factor)) + .collect::>() + } + // ------------------ update tracking --------------- pub(crate) fn update_trackers(&mut self, node_id: Uuid) { diff --git a/src/rpc/layout/manager.rs b/src/rpc/layout/manager.rs index c1417dac..b0302b12 100644 --- a/src/rpc/layout/manager.rs +++ b/src/rpc/layout/manager.rs @@ -1,4 +1,5 @@ -use std::sync::{Arc, RwLock, RwLockReadGuard}; +use std::collections::HashMap; +use std::sync::{Arc, Mutex, RwLock, RwLockReadGuard}; use std::time::Duration; use serde::{Deserialize, Serialize}; @@ -26,6 +27,8 @@ pub struct LayoutManager { layout: Arc>, pub(crate) change_notify: Arc, + table_sync_version: Mutex>, + pub(crate) rpc_helper: RpcHelper, system_endpoint: Arc>, } @@ -117,6 +120,34 @@ impl LayoutManager { Ok(()) } + pub fn add_table(&self, table_name: &'static str) { + let first_version = self.layout().versions.first().unwrap().version; + + self.table_sync_version + .lock() + .unwrap() + .insert(table_name.to_string(), first_version); + } + + pub fn sync_table_until(self: &Arc, table_name: &'static str, version: u64) { + let mut table_sync_version = self.table_sync_version.lock().unwrap(); + *table_sync_version.get_mut(table_name).unwrap() = version; + let sync_until = table_sync_version.iter().map(|(_, v)| *v).max().unwrap(); + drop(table_sync_version); + + let mut layout = self.layout.write().unwrap(); + if layout + .update_trackers + .sync_map + .set_max(self.node_id, sync_until) + { + layout.update_hashes(); + self.broadcast_update(SystemRpc::AdvertiseClusterLayoutTrackers( + layout.update_trackers.clone(), + )); + } + } + // ---- INTERNALS --- fn merge_layout(&self, adv: &LayoutHistory) -> Option { diff --git a/src/rpc/layout/schema.rs b/src/rpc/layout/schema.rs index db60c806..89f5c361 100644 --- a/src/rpc/layout/schema.rs +++ b/src/rpc/layout/schema.rs @@ -375,14 +375,17 @@ impl UpdateTracker { changed } - pub(crate) fn set_max(&mut self, peer: Uuid, value: u64) { + pub(crate) fn set_max(&mut self, peer: Uuid, value: u64) -> bool { match self.0.get_mut(&peer) { - Some(e) => { - *e = std::cmp::max(*e, value); + Some(e) if *e < value => { + *e = value; + true } None => { self.0.insert(peer, value); + true } + _ => false, } } } diff --git a/src/rpc/layout/version.rs b/src/rpc/layout/version.rs index 65c62f63..8133672a 100644 --- a/src/rpc/layout/version.rs +++ b/src/rpc/layout/version.rs @@ -109,7 +109,7 @@ impl LayoutVersion { .collect::>() } - /// Walk the ring to find the n servers in which data should be replicated + /// Return the n servers in which data for this hash should be replicated pub fn nodes_of(&self, position: &Hash, n: usize) -> Vec { assert_eq!(n, self.replication_factor); diff --git a/src/table/table.rs b/src/table/table.rs index 3e3fd138..997fd7dc 100644 --- a/src/table/table.rs +++ b/src/table/table.rs @@ -80,6 +80,8 @@ impl Table { let syncer = TableSyncer::new(system.clone(), data.clone(), merkle_updater.clone()); let gc = TableGc::new(system.clone(), data.clone()); + system.layout_manager.add_table(F::TABLE_NAME); + let table = Arc::new(Self { system, data, From ce89d1ddabe3b9e638b0173949726522ae9a0311 Mon Sep 17 00:00:00 2001 From: Alex Auvolat Date: Sat, 11 Nov 2023 12:08:32 +0100 Subject: [PATCH 092/538] table sync: adapt to new layout history --- src/rpc/layout/history.rs | 21 +++- src/rpc/layout/manager.rs | 1 + src/rpc/layout/version.rs | 16 ++- src/rpc/system.rs | 2 +- src/table/replication/fullcopy.rs | 25 +++- src/table/replication/parameters.rs | 19 ++- src/table/replication/sharded.rs | 39 +++++- src/table/sync.rs | 178 +++++++++++----------------- 8 files changed, 172 insertions(+), 129 deletions(-) diff --git a/src/rpc/layout/history.rs b/src/rpc/layout/history.rs index dbb02269..185dbb27 100644 --- a/src/rpc/layout/history.rs +++ b/src/rpc/layout/history.rs @@ -47,11 +47,19 @@ impl LayoutHistory { // ------------------ who stores what now? --------------- - pub fn max_ack(&self) -> u64 { + pub fn all_ack(&self) -> u64 { self.calculate_global_min(&self.update_trackers.ack_map) } - pub fn all_storage_nodes(&self) -> HashSet { + pub fn min_stored(&self) -> u64 { + self.versions.first().as_ref().unwrap().version + } + + pub fn sync_versions(&self) -> (u64, u64, u64) { + (self.current().version, self.all_ack(), self.min_stored()) + } + + pub fn all_nongateway_nodes(&self) -> HashSet { // TODO: cache this self.versions .iter() @@ -71,11 +79,10 @@ impl LayoutHistory { version.nodes_of(position, version.replication_factor) } - pub fn write_sets_of(&self, position: &Hash) -> Vec> { + pub fn write_sets_of<'a>(&'a self, position: &'a Hash) -> impl Iterator> + 'a { self.versions .iter() - .map(|x| x.nodes_of(position, x.replication_factor)) - .collect::>() + .map(move |x| x.nodes_of(position, x.replication_factor)) } // ------------------ update tracking --------------- @@ -129,7 +136,9 @@ impl LayoutHistory { } pub(crate) fn calculate_global_min(&self, tracker: &UpdateTracker) -> u64 { - let storage_nodes = self.all_storage_nodes(); + // TODO: for TableFullReplication, counting gateway nodes might be + // necessary? Think about this more. + let storage_nodes = self.all_nongateway_nodes(); storage_nodes .iter() .map(|x| tracker.0.get(x).copied().unwrap_or(0)) diff --git a/src/rpc/layout/manager.rs b/src/rpc/layout/manager.rs index b0302b12..7d60bae6 100644 --- a/src/rpc/layout/manager.rs +++ b/src/rpc/layout/manager.rs @@ -92,6 +92,7 @@ impl LayoutManager { persist_cluster_layout, layout, change_notify, + table_sync_version: Mutex::new(HashMap::new()), system_endpoint, rpc_helper, })) diff --git a/src/rpc/layout/version.rs b/src/rpc/layout/version.rs index 8133672a..f45a3c35 100644 --- a/src/rpc/layout/version.rs +++ b/src/rpc/layout/version.rs @@ -98,15 +98,13 @@ impl LayoutVersion { } /// Get the list of partitions and the first hash of a partition key that would fall in it - pub fn partitions(&self) -> Vec<(Partition, Hash)> { - (0..(1 << PARTITION_BITS)) - .map(|i| { - let top = (i as u16) << (16 - PARTITION_BITS); - let mut location = [0u8; 32]; - location[..2].copy_from_slice(&u16::to_be_bytes(top)[..]); - (i as u16, Hash::from(location)) - }) - .collect::>() + pub fn partitions(&self) -> impl Iterator + '_ { + (0..(1 << PARTITION_BITS)).map(|i| { + let top = (i as u16) << (16 - PARTITION_BITS); + let mut location = [0u8; 32]; + location[..2].copy_from_slice(&u16::to_be_bytes(top)[..]); + (i as u16, Hash::from(location)) + }) } /// Return the n servers in which data for this hash should be replicated diff --git a/src/rpc/system.rs b/src/rpc/system.rs index 6ce13d0d..3418600b 100644 --- a/src/rpc/system.rs +++ b/src/rpc/system.rs @@ -442,7 +442,7 @@ impl System { .filter(|(x, _, _)| nodes.get(x).map(|n| n.is_up).unwrap_or(false)) .count(); - let partitions = layout.current().partitions(); + let partitions = layout.current().partitions().collect::>(); let partitions_n_up = partitions .iter() .map(|(_, h)| { diff --git a/src/table/replication/fullcopy.rs b/src/table/replication/fullcopy.rs index a5c83d0f..5653a229 100644 --- a/src/table/replication/fullcopy.rs +++ b/src/table/replication/fullcopy.rs @@ -1,3 +1,4 @@ +use std::iter::FromIterator; use std::sync::Arc; use garage_rpc::layout::*; @@ -6,10 +7,17 @@ use garage_util::data::*; use crate::replication::*; +// TODO: find a way to track layout changes for this as well +// The hard thing is that this data is stored also on gateway nodes, +// whereas sharded data is stored only on non-Gateway nodes (storage nodes) +// Also we want to be more tolerant to failures of gateways so we don't +// want to do too much holding back of data when progress of gateway +// nodes is not reported in the layout history's ack/sync/sync_ack maps. + /// Full replication schema: all nodes store everything -/// Writes are disseminated in an epidemic manner in the network /// Advantage: do all reads locally, extremely fast /// Inconvenient: only suitable to reasonably small tables +/// Inconvenient: if some writes fail, nodes will read outdated data #[derive(Clone)] pub struct TableFullReplication { /// The membership manager of this node @@ -44,7 +52,18 @@ impl TableReplication for TableFullReplication { fn partition_of(&self, _hash: &Hash) -> Partition { 0u16 } - fn partitions(&self) -> Vec<(Partition, Hash)> { - vec![(0u16, [0u8; 32].into())] + + fn sync_partitions(&self) -> SyncPartitions { + let layout = self.system.cluster_layout(); + let layout_version = layout.current().version; + SyncPartitions { + layout_version, + partitions: vec![SyncPartition { + partition: 0u16, + first_hash: [0u8; 32].into(), + last_hash: [0xff; 32].into(), + storage_nodes: Vec::from_iter(layout.current().node_ids().to_vec()), + }], + } } } diff --git a/src/table/replication/parameters.rs b/src/table/replication/parameters.rs index 19b306f2..2a7d3585 100644 --- a/src/table/replication/parameters.rs +++ b/src/table/replication/parameters.rs @@ -20,6 +20,21 @@ pub trait TableReplication: Send + Sync + 'static { // Accessing partitions, for Merkle tree & sync /// Get partition for data with given hash fn partition_of(&self, hash: &Hash) -> Partition; - /// List of existing partitions - fn partitions(&self) -> Vec<(Partition, Hash)>; + + /// List of partitions and nodes to sync with in current layout + fn sync_partitions(&self) -> SyncPartitions; +} + +#[derive(Debug)] +pub struct SyncPartitions { + pub layout_version: u64, + pub partitions: Vec, +} + +#[derive(Debug)] +pub struct SyncPartition { + pub partition: Partition, + pub first_hash: Hash, + pub last_hash: Hash, + pub storage_nodes: Vec, } diff --git a/src/table/replication/sharded.rs b/src/table/replication/sharded.rs index 793d87fd..f02b1d66 100644 --- a/src/table/replication/sharded.rs +++ b/src/table/replication/sharded.rs @@ -51,7 +51,42 @@ impl TableReplication for TableShardedReplication { fn partition_of(&self, hash: &Hash) -> Partition { self.system.cluster_layout().current().partition_of(hash) } - fn partitions(&self) -> Vec<(Partition, Hash)> { - self.system.cluster_layout().current().partitions() + + fn sync_partitions(&self) -> SyncPartitions { + let layout = self.system.cluster_layout(); + let layout_version = layout.all_ack(); + + let mut partitions = layout + .current() + .partitions() + .map(|(partition, first_hash)| { + let mut storage_nodes = layout + .write_sets_of(&first_hash) + .map(|x| x.into_iter()) + .flatten() + .collect::>(); + storage_nodes.sort(); + storage_nodes.dedup(); + SyncPartition { + partition, + first_hash, + last_hash: [0u8; 32].into(), // filled in just after + storage_nodes, + } + }) + .collect::>(); + + for i in 0..partitions.len() { + partitions[i].last_hash = if i + 1 < partitions.len() { + partitions[i + 1].first_hash + } else { + [0xFFu8; 32].into() + }; + } + + SyncPartitions { + layout_version, + partitions, + } } } diff --git a/src/table/sync.rs b/src/table/sync.rs index 4355bd9e..43636faa 100644 --- a/src/table/sync.rs +++ b/src/table/sync.rs @@ -6,7 +6,7 @@ use arc_swap::ArcSwapOption; use async_trait::async_trait; use futures_util::stream::*; use opentelemetry::KeyValue; -use rand::Rng; +use rand::prelude::*; use serde::{Deserialize, Serialize}; use serde_bytes::ByteBuf; use tokio::select; @@ -52,16 +52,6 @@ impl Rpc for SyncRpc { type Response = Result; } -#[derive(Debug, Clone)] -struct TodoPartition { - partition: Partition, - begin: Hash, - end: Hash, - - // Are we a node that stores this partition or not? - retain: bool, -} - impl TableSyncer { pub(crate) fn new( system: Arc, @@ -92,9 +82,9 @@ impl TableSyncer { bg.spawn_worker(SyncWorker { syncer: self.clone(), layout_notify: self.system.layout_notify(), - layout_version: self.system.cluster_layout().current().version, + layout_versions: self.system.cluster_layout().sync_versions(), add_full_sync_rx, - todo: vec![], + todo: None, next_full_sync: Instant::now() + Duration::from_secs(20), }); } @@ -112,31 +102,26 @@ impl TableSyncer { async fn sync_partition( self: &Arc, - partition: &TodoPartition, + partition: &SyncPartition, must_exit: &mut watch::Receiver, ) -> Result<(), Error> { - if partition.retain { - let my_id = self.system.id; - - let nodes = self - .data - .replication - .write_nodes(&partition.begin) - .into_iter() - .filter(|node| *node != my_id) - .collect::>(); + let my_id = self.system.id; + let retain = partition.storage_nodes.contains(&my_id); + if retain { debug!( "({}) Syncing {:?} with {:?}...", F::TABLE_NAME, partition, - nodes + partition.storage_nodes ); - let mut sync_futures = nodes + let mut sync_futures = partition + .storage_nodes .iter() + .filter(|node| **node != my_id) .map(|node| { self.clone() - .do_sync_with(partition.clone(), *node, must_exit.clone()) + .do_sync_with(&partition, *node, must_exit.clone()) }) .collect::>(); @@ -147,14 +132,14 @@ impl TableSyncer { warn!("({}) Sync error: {}", F::TABLE_NAME, e); } } - if n_errors > self.data.replication.max_write_errors() { + if n_errors > 0 { return Err(Error::Message(format!( - "Sync failed with too many nodes (should have been: {:?}).", - nodes + "Sync failed with {} nodes.", + n_errors ))); } } else { - self.offload_partition(&partition.begin, &partition.end, must_exit) + self.offload_partition(&partition.first_hash, &partition.last_hash, must_exit) .await?; } @@ -285,7 +270,7 @@ impl TableSyncer { async fn do_sync_with( self: Arc, - partition: TodoPartition, + partition: &SyncPartition, who: Uuid, must_exit: watch::Receiver, ) -> Result<(), Error> { @@ -492,76 +477,23 @@ impl EndpointHandler for TableSync struct SyncWorker { syncer: Arc>, + layout_notify: Arc, - layout_version: u64, + layout_versions: (u64, u64, u64), + add_full_sync_rx: mpsc::UnboundedReceiver<()>, - todo: Vec, next_full_sync: Instant, + + todo: Option, } impl SyncWorker { fn add_full_sync(&mut self) { - let system = &self.syncer.system; - let data = &self.syncer.data; - - let my_id = system.id; - - self.todo.clear(); - - let partitions = data.replication.partitions(); - - for i in 0..partitions.len() { - let begin = partitions[i].1; - - let end = if i + 1 < partitions.len() { - partitions[i + 1].1 - } else { - [0xFFu8; 32].into() - }; - - let nodes = data.replication.write_nodes(&begin); - - let retain = nodes.contains(&my_id); - if !retain { - // Check if we have some data to send, otherwise skip - match data.store.range(begin..end) { - Ok(mut iter) => { - if iter.next().is_none() { - continue; - } - } - Err(e) => { - warn!("DB error in add_full_sync: {}", e); - continue; - } - } - } - - self.todo.push(TodoPartition { - partition: partitions[i].0, - begin, - end, - retain, - }); - } - + let mut partitions = self.syncer.data.replication.sync_partitions(); + partitions.partitions.shuffle(&mut thread_rng()); + self.todo = Some(partitions); self.next_full_sync = Instant::now() + ANTI_ENTROPY_INTERVAL; } - - fn pop_task(&mut self) -> Option { - if self.todo.is_empty() { - return None; - } - - let i = rand::thread_rng().gen_range(0..self.todo.len()); - if i == self.todo.len() - 1 { - self.todo.pop() - } else { - let replacement = self.todo.pop().unwrap(); - let ret = std::mem::replace(&mut self.todo[i], replacement); - Some(ret) - } - } } #[async_trait] @@ -572,18 +504,46 @@ impl Worker for SyncWorker { fn status(&self) -> WorkerStatus { WorkerStatus { - queue_length: Some(self.todo.len() as u64), + queue_length: Some(self.todo.as_ref().map(|x| x.partitions.len()).unwrap_or(0) as u64), ..Default::default() } } async fn work(&mut self, must_exit: &mut watch::Receiver) -> Result { - if let Some(partition) = self.pop_task() { - self.syncer.sync_partition(&partition, must_exit).await?; - Ok(WorkerState::Busy) - } else { - Ok(WorkerState::Idle) + if let Some(todo) = &mut self.todo { + let partition = todo.partitions.pop().unwrap(); + + // process partition + if let Err(e) = self.syncer.sync_partition(&partition, must_exit).await { + error!( + "{}: Failed to sync partition {:?}: {}", + F::TABLE_NAME, + partition, + e + ); + // if error, put partition back at the other side of the queue, + // so that other partitions will be tried in the meantime + todo.partitions.insert(0, partition); + // TODO: returning an error here will cause the background job worker + // to delay this task for some time, but maybe we don't want to + // delay it if there are lots of failures from nodes that are gone + // (we also don't want zero delays as that will cause lots of useless retries) + return Err(e); + } + + // done + if !todo.partitions.is_empty() { + return Ok(WorkerState::Busy); + } + + self.syncer + .system + .layout_manager + .sync_table_until(F::TABLE_NAME, todo.layout_version); } + + self.todo = None; + Ok(WorkerState::Idle) } async fn wait_for_work(&mut self) -> WorkerState { @@ -594,10 +554,16 @@ impl Worker for SyncWorker { } }, _ = self.layout_notify.notified() => { - let new_version = self.syncer.system.cluster_layout().current().version; - if new_version > self.layout_version { - self.layout_version = new_version; - debug!("({}) Layout changed, adding full sync to syncer todo list", F::TABLE_NAME); + let layout_versions = self.syncer.system.cluster_layout().sync_versions(); + if layout_versions != self.layout_versions { + self.layout_versions = layout_versions; + debug!( + "({}) Layout versions changed (max={}, ack={}, min stored={}), adding full sync to syncer todo list", + F::TABLE_NAME, + layout_versions.0, + layout_versions.1, + layout_versions.2 + ); self.add_full_sync(); } }, @@ -605,9 +571,9 @@ impl Worker for SyncWorker { self.add_full_sync(); } } - match self.todo.is_empty() { - false => WorkerState::Busy, - true => WorkerState::Idle, + match self.todo.is_some() { + true => WorkerState::Busy, + false => WorkerState::Idle, } } } From df24bb806d64d5d5e748c35efe3f49ad3dda709e Mon Sep 17 00:00:00 2001 From: Alex Auvolat Date: Sat, 11 Nov 2023 12:37:33 +0100 Subject: [PATCH 093/538] layout/sync: fix bugs and add tracing --- src/rpc/layout/history.rs | 3 +- src/rpc/layout/manager.rs | 10 +++++-- src/table/sync.rs | 60 +++++++++++++++++++++++++-------------- 3 files changed, 48 insertions(+), 25 deletions(-) diff --git a/src/rpc/layout/history.rs b/src/rpc/layout/history.rs index 185dbb27..cef56647 100644 --- a/src/rpc/layout/history.rs +++ b/src/rpc/layout/history.rs @@ -131,7 +131,8 @@ impl LayoutHistory { pub(crate) fn cleanup_old_versions(&mut self) { let min_sync_ack = self.calculate_global_min(&self.update_trackers.sync_ack_map); while self.versions.first().as_ref().unwrap().version < min_sync_ack { - self.versions.remove(0); + let removed = self.versions.remove(0); + info!("Layout history: pruning old version {}", removed.version); } } diff --git a/src/rpc/layout/manager.rs b/src/rpc/layout/manager.rs index 7d60bae6..ce8b6f61 100644 --- a/src/rpc/layout/manager.rs +++ b/src/rpc/layout/manager.rs @@ -133,7 +133,7 @@ impl LayoutManager { pub fn sync_table_until(self: &Arc, table_name: &'static str, version: u64) { let mut table_sync_version = self.table_sync_version.lock().unwrap(); *table_sync_version.get_mut(table_name).unwrap() = version; - let sync_until = table_sync_version.iter().map(|(_, v)| *v).max().unwrap(); + let sync_until = table_sync_version.iter().map(|(_, v)| *v).min().unwrap(); drop(table_sync_version); let mut layout = self.layout.write().unwrap(); @@ -142,6 +142,7 @@ impl LayoutManager { .sync_map .set_max(self.node_id, sync_until) { + debug!("sync_until updated to {}", sync_until); layout.update_hashes(); self.broadcast_update(SystemRpc::AdvertiseClusterLayoutTrackers( layout.update_trackers.clone(), @@ -277,7 +278,12 @@ impl LayoutManager { self: &Arc, adv: &LayoutHistory, ) -> Result { - debug!("handle_advertise_cluster_layout: {:?}", adv); + debug!( + "handle_advertise_cluster_layout: {} versions, last={}, trackers={:?}", + adv.versions.len(), + adv.current().version, + adv.update_trackers + ); if adv.current().replication_factor != self.replication_factor { let msg = format!( diff --git a/src/table/sync.rs b/src/table/sync.rs index 43636faa..8c21db8b 100644 --- a/src/table/sync.rs +++ b/src/table/sync.rs @@ -488,8 +488,29 @@ struct SyncWorker { } impl SyncWorker { + fn check_add_full_sync(&mut self) { + let layout_versions = self.syncer.system.cluster_layout().sync_versions(); + if layout_versions != self.layout_versions { + self.layout_versions = layout_versions; + info!( + "({}) Layout versions changed (max={}, ack={}, min stored={}), adding full sync to syncer todo list", + F::TABLE_NAME, + layout_versions.0, + layout_versions.1, + layout_versions.2 + ); + self.add_full_sync(); + } + } + fn add_full_sync(&mut self) { let mut partitions = self.syncer.data.replication.sync_partitions(); + info!( + "{}: Adding full sync for ack layout version {}", + F::TABLE_NAME, + partitions.layout_version + ); + partitions.partitions.shuffle(&mut thread_rng()); self.todo = Some(partitions); self.next_full_sync = Instant::now() + ANTI_ENTROPY_INTERVAL; @@ -510,6 +531,8 @@ impl Worker for SyncWorker { } async fn work(&mut self, must_exit: &mut watch::Receiver) -> Result { + self.check_add_full_sync(); + if let Some(todo) = &mut self.todo { let partition = todo.partitions.pop().unwrap(); @@ -531,19 +554,23 @@ impl Worker for SyncWorker { return Err(e); } - // done - if !todo.partitions.is_empty() { - return Ok(WorkerState::Busy); + if todo.partitions.is_empty() { + info!( + "{}: Completed full sync for ack layout version {}", + F::TABLE_NAME, + todo.layout_version + ); + self.syncer + .system + .layout_manager + .sync_table_until(F::TABLE_NAME, todo.layout_version); + self.todo = None; } - self.syncer - .system - .layout_manager - .sync_table_until(F::TABLE_NAME, todo.layout_version); + Ok(WorkerState::Busy) + } else { + Ok(WorkerState::Idle) } - - self.todo = None; - Ok(WorkerState::Idle) } async fn wait_for_work(&mut self) -> WorkerState { @@ -554,18 +581,7 @@ impl Worker for SyncWorker { } }, _ = self.layout_notify.notified() => { - let layout_versions = self.syncer.system.cluster_layout().sync_versions(); - if layout_versions != self.layout_versions { - self.layout_versions = layout_versions; - debug!( - "({}) Layout versions changed (max={}, ack={}, min stored={}), adding full sync to syncer todo list", - F::TABLE_NAME, - layout_versions.0, - layout_versions.1, - layout_versions.2 - ); - self.add_full_sync(); - } + self.check_add_full_sync(); }, _ = tokio::time::sleep_until(self.next_full_sync.into()) => { self.add_full_sync(); From 9a491fa1372a23e91c793ee1d2b313607752826a Mon Sep 17 00:00:00 2001 From: Alex Auvolat Date: Sat, 11 Nov 2023 13:10:59 +0100 Subject: [PATCH 094/538] layout: fix test --- src/rpc/layout/history.rs | 9 +- src/rpc/layout/mod.rs | 3 + src/rpc/layout/test.rs | 159 +++++++++++++++++++++++++++++++++++ src/rpc/layout/version.rs | 172 ++------------------------------------ 4 files changed, 174 insertions(+), 169 deletions(-) create mode 100644 src/rpc/layout/test.rs diff --git a/src/rpc/layout/history.rs b/src/rpc/layout/history.rs index cef56647..050f5d0a 100644 --- a/src/rpc/layout/history.rs +++ b/src/rpc/layout/history.rs @@ -18,7 +18,7 @@ impl LayoutHistory { }; let mut ret = LayoutHistory { - versions: vec![version].into_boxed_slice().into(), + versions: vec![version], update_trackers: Default::default(), trackers_hash: [0u8; 32].into(), staging: Lww::raw(0, staging), @@ -211,6 +211,11 @@ To know the correct value of the new layout version, invoke `garage layout show` let msg = new_version.calculate_partition_assignment()?; self.versions.push(new_version); + if self.current().check().is_ok() { + while self.versions.first().unwrap().check().is_err() { + self.versions.remove(0); + } + } // Reset the staged layout changes self.staging.update(LayoutStaging { @@ -245,7 +250,7 @@ To know the correct value of the new layout version, invoke `garage layout show` version.check()?; } - // TODO: anythign more ? + // TODO: anything more ? Ok(()) } } diff --git a/src/rpc/layout/mod.rs b/src/rpc/layout/mod.rs index cd3764bc..577b32fb 100644 --- a/src/rpc/layout/mod.rs +++ b/src/rpc/layout/mod.rs @@ -3,6 +3,9 @@ mod history; mod schema; mod version; +#[cfg(test)] +mod test; + pub mod manager; // ---- re-exports ---- diff --git a/src/rpc/layout/test.rs b/src/rpc/layout/test.rs new file mode 100644 index 00000000..0ce090d2 --- /dev/null +++ b/src/rpc/layout/test.rs @@ -0,0 +1,159 @@ +use std::cmp::min; +use std::collections::HashMap; + +use garage_util::crdt::Crdt; +use garage_util::error::*; + +use crate::layout::*; + +// This function checks that the partition size S computed is at least better than the +// one given by a very naive algorithm. To do so, we try to run the naive algorithm +// assuming a partion size of S+1. If we succed, it means that the optimal assignment +// was not optimal. The naive algorithm is the following : +// - we compute the max number of partitions associated to every node, capped at the +// partition number. It gives the number of tokens of every node. +// - every zone has a number of tokens equal to the sum of the tokens of its nodes. +// - we cycle over the partitions and associate zone tokens while respecting the +// zone redundancy constraint. +// NOTE: the naive algorithm is not optimal. Counter example: +// take nb_partition = 3 ; replication_factor = 5; redundancy = 4; +// number of tokens by zone : (A, 4), (B,1), (C,4), (D, 4), (E, 2) +// With these parameters, the naive algo fails, whereas there is a solution: +// (A,A,C,D,E) , (A,B,C,D,D) (A,C,C,D,E) +fn check_against_naive(cl: &LayoutVersion) -> Result { + let over_size = cl.partition_size + 1; + let mut zone_token = HashMap::::new(); + + let (zones, zone_to_id) = cl.generate_nongateway_zone_ids()?; + + if zones.is_empty() { + return Ok(false); + } + + for z in zones.iter() { + zone_token.insert(z.clone(), 0); + } + for uuid in cl.nongateway_nodes() { + let z = cl.get_node_zone(&uuid)?; + let c = cl.get_node_capacity(&uuid)?; + zone_token.insert( + z.to_string(), + zone_token[z] + min(NB_PARTITIONS, (c / over_size) as usize), + ); + } + + // For every partition, we count the number of zone already associated and + // the name of the last zone associated + + let mut id_zone_token = vec![0; zones.len()]; + for (z, t) in zone_token.iter() { + id_zone_token[zone_to_id[z]] = *t; + } + + let mut nb_token = vec![0; NB_PARTITIONS]; + let mut last_zone = vec![zones.len(); NB_PARTITIONS]; + + let mut curr_zone = 0; + + let redundancy = cl.effective_zone_redundancy(); + + for replic in 0..cl.replication_factor { + for p in 0..NB_PARTITIONS { + while id_zone_token[curr_zone] == 0 + || (last_zone[p] == curr_zone + && redundancy - nb_token[p] <= cl.replication_factor - replic) + { + curr_zone += 1; + if curr_zone >= zones.len() { + return Ok(true); + } + } + id_zone_token[curr_zone] -= 1; + if last_zone[p] != curr_zone { + nb_token[p] += 1; + last_zone[p] = curr_zone; + } + } + } + + return Ok(false); +} + +fn show_msg(msg: &Message) { + for s in msg.iter() { + println!("{}", s); + } +} + +fn update_layout( + cl: &mut LayoutHistory, + node_capacity_vec: &[u64], + node_zone_vec: &[&'static str], + zone_redundancy: usize, +) { + let staging = cl.staging.get_mut(); + + for (i, (capacity, zone)) in node_capacity_vec + .iter() + .zip(node_zone_vec.iter()) + .enumerate() + { + let node_id = [i as u8; 32].into(); + + let update = staging.roles.update_mutator( + node_id, + NodeRoleV(Some(NodeRole { + zone: zone.to_string(), + capacity: Some(*capacity), + tags: (vec![]), + })), + ); + staging.roles.merge(&update); + } + staging.parameters.update(LayoutParameters { + zone_redundancy: ZoneRedundancy::AtLeast(zone_redundancy), + }); + + cl.update_hashes(); +} + +#[test] +fn test_assignment() { + let mut node_capacity_vec = vec![4000, 1000, 2000]; + let mut node_zone_vec = vec!["A", "B", "C"]; + + let mut cl = LayoutHistory::new(3); + update_layout(&mut cl, &node_capacity_vec, &node_zone_vec, 3); + let v = cl.current().version; + let (mut cl, msg) = cl.apply_staged_changes(Some(v + 1)).unwrap(); + show_msg(&msg); + assert_eq!(cl.check(), Ok(())); + assert!(check_against_naive(cl.current()).unwrap()); + + node_capacity_vec = vec![4000, 1000, 1000, 3000, 1000, 1000, 2000, 10000, 2000]; + node_zone_vec = vec!["A", "B", "C", "C", "C", "B", "G", "H", "I"]; + update_layout(&mut cl, &node_capacity_vec, &node_zone_vec, 2); + let v = cl.current().version; + let (mut cl, msg) = cl.apply_staged_changes(Some(v + 1)).unwrap(); + show_msg(&msg); + assert_eq!(cl.check(), Ok(())); + assert!(check_against_naive(cl.current()).unwrap()); + + node_capacity_vec = vec![4000, 1000, 2000, 7000, 1000, 1000, 2000, 10000, 2000]; + update_layout(&mut cl, &node_capacity_vec, &node_zone_vec, 3); + let v = cl.current().version; + let (mut cl, msg) = cl.apply_staged_changes(Some(v + 1)).unwrap(); + show_msg(&msg); + assert_eq!(cl.check(), Ok(())); + assert!(check_against_naive(cl.current()).unwrap()); + + node_capacity_vec = vec![ + 4000000, 4000000, 2000000, 7000000, 1000000, 9000000, 2000000, 10000, 2000000, + ]; + update_layout(&mut cl, &node_capacity_vec, &node_zone_vec, 1); + let v = cl.current().version; + let (cl, msg) = cl.apply_staged_changes(Some(v + 1)).unwrap(); + show_msg(&msg); + assert_eq!(cl.check(), Ok(())); + assert!(check_against_naive(cl.current()).unwrap()); +} diff --git a/src/rpc/layout/version.rs b/src/rpc/layout/version.rs index f45a3c35..ffbdf277 100644 --- a/src/rpc/layout/version.rs +++ b/src/rpc/layout/version.rs @@ -143,7 +143,7 @@ impl LayoutVersion { } /// Given a node uuids, this function returns the label of its zone - fn get_node_zone(&self, uuid: &Uuid) -> Result<&str, Error> { + pub(crate) fn get_node_zone(&self, uuid: &Uuid) -> Result<&str, Error> { match self.node_role(uuid) { Some(role) => Ok(&role.zone), _ => Err(Error::Message( @@ -162,7 +162,7 @@ impl LayoutVersion { } /// Returns the effective value of the zone_redundancy parameter - fn effective_zone_redundancy(&self) -> usize { + pub(crate) fn effective_zone_redundancy(&self) -> usize { match self.parameters.zone_redundancy { ZoneRedundancy::AtLeast(v) => v, ZoneRedundancy::Maximum => { @@ -472,7 +472,9 @@ impl LayoutVersion { /// This function generates ids for the zone of the nodes appearing in /// self.node_id_vec. - fn generate_nongateway_zone_ids(&self) -> Result<(Vec, HashMap), Error> { + pub(crate) fn generate_nongateway_zone_ids( + &self, + ) -> Result<(Vec, HashMap), Error> { let mut id_to_zone = Vec::::new(); let mut zone_to_id = HashMap::::new(); @@ -838,167 +840,3 @@ impl LayoutVersion { Ok(msg) } } - -// ==================================================================================== - -#[cfg(test)] -mod tests { - use super::{Error, *}; - use std::cmp::min; - - // This function checks that the partition size S computed is at least better than the - // one given by a very naive algorithm. To do so, we try to run the naive algorithm - // assuming a partion size of S+1. If we succed, it means that the optimal assignment - // was not optimal. The naive algorithm is the following : - // - we compute the max number of partitions associated to every node, capped at the - // partition number. It gives the number of tokens of every node. - // - every zone has a number of tokens equal to the sum of the tokens of its nodes. - // - we cycle over the partitions and associate zone tokens while respecting the - // zone redundancy constraint. - // NOTE: the naive algorithm is not optimal. Counter example: - // take nb_partition = 3 ; replication_factor = 5; redundancy = 4; - // number of tokens by zone : (A, 4), (B,1), (C,4), (D, 4), (E, 2) - // With these parameters, the naive algo fails, whereas there is a solution: - // (A,A,C,D,E) , (A,B,C,D,D) (A,C,C,D,E) - fn check_against_naive(cl: &LayoutVersion) -> Result { - let over_size = cl.partition_size + 1; - let mut zone_token = HashMap::::new(); - - let (zones, zone_to_id) = cl.generate_nongateway_zone_ids()?; - - if zones.is_empty() { - return Ok(false); - } - - for z in zones.iter() { - zone_token.insert(z.clone(), 0); - } - for uuid in cl.nongateway_nodes() { - let z = cl.get_node_zone(&uuid)?; - let c = cl.get_node_capacity(&uuid)?; - zone_token.insert( - z.clone(), - zone_token[&z] + min(NB_PARTITIONS, (c / over_size) as usize), - ); - } - - // For every partition, we count the number of zone already associated and - // the name of the last zone associated - - let mut id_zone_token = vec![0; zones.len()]; - for (z, t) in zone_token.iter() { - id_zone_token[zone_to_id[z]] = *t; - } - - let mut nb_token = vec![0; NB_PARTITIONS]; - let mut last_zone = vec![zones.len(); NB_PARTITIONS]; - - let mut curr_zone = 0; - - let redundancy = cl.effective_zone_redundancy(); - - for replic in 0..cl.replication_factor { - for p in 0..NB_PARTITIONS { - while id_zone_token[curr_zone] == 0 - || (last_zone[p] == curr_zone - && redundancy - nb_token[p] <= cl.replication_factor - replic) - { - curr_zone += 1; - if curr_zone >= zones.len() { - return Ok(true); - } - } - id_zone_token[curr_zone] -= 1; - if last_zone[p] != curr_zone { - nb_token[p] += 1; - last_zone[p] = curr_zone; - } - } - } - - return Ok(false); - } - - fn show_msg(msg: &Message) { - for s in msg.iter() { - println!("{}", s); - } - } - - fn update_layout( - cl: &mut LayoutVersion, - node_id_vec: &Vec, - node_capacity_vec: &Vec, - node_zone_vec: &Vec, - zone_redundancy: usize, - ) { - for i in 0..node_id_vec.len() { - if let Some(x) = FixedBytes32::try_from(&[i as u8; 32]) { - cl.node_id_vec.push(x); - } - - let update = cl.staging_roles.update_mutator( - cl.node_id_vec[i], - NodeRoleV(Some(NodeRole { - zone: (node_zone_vec[i].to_string()), - capacity: (Some(node_capacity_vec[i])), - tags: (vec![]), - })), - ); - cl.staging_roles.merge(&update); - } - cl.staging_parameters.update(LayoutParameters { - zone_redundancy: ZoneRedundancy::AtLeast(zone_redundancy), - }); - cl.staging_hash = cl.calculate_staging_hash(); - } - - #[test] - fn test_assignment() { - let mut node_id_vec = vec![1, 2, 3]; - let mut node_capacity_vec = vec![4000, 1000, 2000]; - let mut node_zone_vec = vec!["A", "B", "C"] - .into_iter() - .map(|x| x.to_string()) - .collect(); - - let mut cl = LayoutVersion::new(3); - update_layout(&mut cl, &node_id_vec, &node_capacity_vec, &node_zone_vec, 3); - let v = cl.version; - let (mut cl, msg) = cl.apply_staged_changes(Some(v + 1)).unwrap(); - show_msg(&msg); - assert_eq!(cl.check(), Ok(())); - assert!(matches!(check_against_naive(&cl), Ok(true))); - - node_id_vec = vec![1, 2, 3, 4, 5, 6, 7, 8, 9]; - node_capacity_vec = vec![4000, 1000, 1000, 3000, 1000, 1000, 2000, 10000, 2000]; - node_zone_vec = vec!["A", "B", "C", "C", "C", "B", "G", "H", "I"] - .into_iter() - .map(|x| x.to_string()) - .collect(); - update_layout(&mut cl, &node_id_vec, &node_capacity_vec, &node_zone_vec, 2); - let v = cl.version; - let (mut cl, msg) = cl.apply_staged_changes(Some(v + 1)).unwrap(); - show_msg(&msg); - assert_eq!(cl.check(), Ok(())); - assert!(matches!(check_against_naive(&cl), Ok(true))); - - node_capacity_vec = vec![4000, 1000, 2000, 7000, 1000, 1000, 2000, 10000, 2000]; - update_layout(&mut cl, &node_id_vec, &node_capacity_vec, &node_zone_vec, 3); - let v = cl.version; - let (mut cl, msg) = cl.apply_staged_changes(Some(v + 1)).unwrap(); - show_msg(&msg); - assert_eq!(cl.check(), Ok(())); - assert!(matches!(check_against_naive(&cl), Ok(true))); - - node_capacity_vec = vec![ - 4000000, 4000000, 2000000, 7000000, 1000000, 9000000, 2000000, 10000, 2000000, - ]; - update_layout(&mut cl, &node_id_vec, &node_capacity_vec, &node_zone_vec, 1); - let v = cl.version; - let (cl, msg) = cl.apply_staged_changes(Some(v + 1)).unwrap(); - show_msg(&msg); - assert_eq!(cl.check(), Ok(())); - assert!(matches!(check_against_naive(&cl), Ok(true))); - } -} From 8e292e06b3fde1d3b5b019a26eabd4f0d9ac22c3 Mon Sep 17 00:00:00 2001 From: Alex Auvolat Date: Tue, 14 Nov 2023 12:48:38 +0100 Subject: [PATCH 095/538] layout: some refactoring of nongateway nodes --- src/api/k2v/index.rs | 7 ++- src/model/index_counter.rs | 4 +- src/rpc/layout/history.rs | 30 +++++++----- src/rpc/layout/schema.rs | 17 +++++++ src/rpc/layout/version.rs | 98 +++++++++++++++++++++----------------- 5 files changed, 95 insertions(+), 61 deletions(-) diff --git a/src/api/k2v/index.rs b/src/api/k2v/index.rs index 3c2f51a9..c189232a 100644 --- a/src/api/k2v/index.rs +++ b/src/api/k2v/index.rs @@ -25,8 +25,11 @@ pub async fn handle_read_index( ) -> Result, Error> { let reverse = reverse.unwrap_or(false); - // TODO: not only current - let node_id_vec = garage.system.cluster_layout().current().node_ids().to_vec(); + let node_id_vec = garage + .system + .cluster_layout() + .all_nongateway_nodes() + .into_owned(); let (partition_keys, more, next_start) = read_range( &garage.k2v.counter_table.table, diff --git a/src/model/index_counter.rs b/src/model/index_counter.rs index 9637cc4c..2d968733 100644 --- a/src/model/index_counter.rs +++ b/src/model/index_counter.rs @@ -84,8 +84,8 @@ impl Entry for CounterEntry { impl CounterEntry { pub fn filtered_values(&self, layout: &LayoutHistory) -> HashMap { - let nodes = &layout.current().node_id_vec[..]; - self.filtered_values_with_nodes(nodes) + let nodes = layout.all_nongateway_nodes(); + self.filtered_values_with_nodes(&nodes) } pub fn filtered_values_with_nodes(&self, nodes: &[Uuid]) -> HashMap { diff --git a/src/rpc/layout/history.rs b/src/rpc/layout/history.rs index 050f5d0a..877ad3a7 100644 --- a/src/rpc/layout/history.rs +++ b/src/rpc/layout/history.rs @@ -1,3 +1,4 @@ +use std::borrow::Cow; use std::collections::HashSet; use garage_util::crdt::{Crdt, Lww, LwwMap}; @@ -59,13 +60,19 @@ impl LayoutHistory { (self.current().version, self.all_ack(), self.min_stored()) } - pub fn all_nongateway_nodes(&self) -> HashSet { + pub fn all_nongateway_nodes(&self) -> Cow<'_, [Uuid]> { // TODO: cache this - self.versions - .iter() - .map(|x| x.nongateway_nodes()) - .flatten() - .collect::>() + if self.versions.len() == 1 { + self.versions[0].nongateway_nodes().into() + } else { + let set = self + .versions + .iter() + .map(|x| x.nongateway_nodes()) + .flatten() + .collect::>(); + set.into_iter().copied().collect::>().into() + } } pub fn read_nodes_of(&self, position: &Hash) -> Vec { @@ -202,14 +209,11 @@ To know the correct value of the new layout version, invoke `garage layout show` } // Compute new version and add it to history - let mut new_version = self.current().clone(); - new_version.version += 1; + let (new_version, msg) = self + .current() + .clone() + .calculate_next_version(&self.staging.get())?; - new_version.roles.merge(&self.staging.get().roles); - new_version.roles.retain(|(_, _, v)| v.0.is_some()); - new_version.parameters = *self.staging.get().parameters.get(); - - let msg = new_version.calculate_partition_assignment()?; self.versions.push(new_version); if self.current().check().is_ok() { while self.versions.first().unwrap().check().is_err() { diff --git a/src/rpc/layout/schema.rs b/src/rpc/layout/schema.rs index 89f5c361..db298ee6 100644 --- a/src/rpc/layout/schema.rs +++ b/src/rpc/layout/schema.rs @@ -212,6 +212,8 @@ mod v010 { /// see comment in v08::ClusterLayout pub node_id_vec: Vec, + /// number of non-gateway nodes, which are the first ids in node_id_vec + pub nongateway_node_count: usize, /// see comment in v08::ClusterLayout #[serde(with = "serde_bytes")] pub ring_assignment_data: Vec, @@ -265,6 +267,18 @@ mod v010 { type Previous = v09::ClusterLayout; fn migrate(previous: Self::Previous) -> Self { + let nongateway_node_count = previous + .node_id_vec + .iter() + .enumerate() + .filter(|(_, uuid)| { + let role = previous.roles.get(uuid); + matches!(role, Some(NodeRoleV(Some(role))) if role.capacity.is_some()) + }) + .map(|(i, _)| i) + .max() + .unwrap_or(0); + let version = LayoutVersion { version: previous.version, replication_factor: previous.replication_factor, @@ -272,11 +286,14 @@ mod v010 { parameters: previous.parameters, roles: previous.roles, node_id_vec: previous.node_id_vec, + nongateway_node_count, ring_assignment_data: previous.ring_assignment_data, }; let update_tracker = UpdateTracker( version .nongateway_nodes() + .iter() + .copied() .map(|x| (x, version.version)) .collect::>(), ); diff --git a/src/rpc/layout/version.rs b/src/rpc/layout/version.rs index ffbdf277..a7f387b6 100644 --- a/src/rpc/layout/version.rs +++ b/src/rpc/layout/version.rs @@ -5,7 +5,7 @@ use std::convert::TryInto; use bytesize::ByteSize; use itertools::Itertools; -use garage_util::crdt::LwwMap; +use garage_util::crdt::{Crdt, LwwMap}; use garage_util::data::*; use garage_util::error::*; @@ -30,6 +30,7 @@ impl LayoutVersion { partition_size: 0, roles: LwwMap::new(), node_id_vec: Vec::new(), + nongateway_node_count: 0, ring_assignment_data: Vec::new(), parameters, } @@ -43,6 +44,11 @@ impl LayoutVersion { &self.node_id_vec[..] } + /// Returns the uuids of the non_gateway nodes in self.node_id_vec. + pub fn nongateway_nodes(&self) -> &[Uuid] { + &self.node_id_vec[..self.nongateway_node_count] + } + pub fn num_nodes(&self) -> usize { self.node_id_vec.len() } @@ -56,18 +62,14 @@ impl LayoutVersion { } /// Given a node uuids, this function returns its capacity or fails if it does not have any - pub fn get_node_capacity(&self, uuid: &Uuid) -> Result { + pub fn get_node_capacity(&self, uuid: &Uuid) -> Option { match self.node_role(uuid) { Some(NodeRole { capacity: Some(cap), zone: _, tags: _, - }) => Ok(*cap), - _ => Err(Error::Message( - "The Uuid does not correspond to a node present in the \ - cluster or this node does not have a positive capacity." - .into(), - )), + }) => Some(*cap), + _ => None, } } @@ -131,17 +133,6 @@ impl LayoutVersion { // ===================== internal information extractors ====================== - /// Returns the uuids of the non_gateway nodes in self.node_id_vec. - pub(crate) fn nongateway_nodes(&self) -> impl Iterator + '_ { - self.node_id_vec - .iter() - .copied() - .filter(move |uuid| match self.node_role(uuid) { - Some(role) if role.capacity.is_some() => true, - _ => false, - }) - } - /// Given a node uuids, this function returns the label of its zone pub(crate) fn get_node_zone(&self, uuid: &Uuid) -> Result<&str, Error> { match self.node_role(uuid) { @@ -152,11 +143,16 @@ impl LayoutVersion { } } + fn expect_get_node_capacity(&self, uuid: &Uuid) -> u64 { + self.get_node_capacity(&uuid) + .expect("non-gateway node with zero capacity") + } + /// Returns the sum of capacities of non gateway nodes in the cluster fn get_total_capacity(&self) -> Result { let mut total_capacity = 0; for uuid in self.nongateway_nodes() { - total_capacity += self.get_node_capacity(&uuid)?; + total_capacity += self.expect_get_node_capacity(&uuid); } Ok(total_capacity) } @@ -257,7 +253,7 @@ impl LayoutVersion { if *usage > 0 { let uuid = self.node_id_vec[n]; let partusage = usage * self.partition_size; - let nodecap = self.get_node_capacity(&uuid).unwrap(); + let nodecap = self.expect_get_node_capacity(&uuid); if partusage > nodecap { return Err(format!( "node usage ({}) is bigger than node capacity ({})", @@ -288,6 +284,21 @@ impl LayoutVersion { // ================== updates to layout, internals =================== + pub(crate) fn calculate_next_version( + mut self, + staging: &LayoutStaging, + ) -> Result<(Self, Message), Error> { + self.version += 1; + + self.roles.merge(&staging.roles); + self.roles.retain(|(_, _, v)| v.0.is_some()); + self.parameters = *staging.parameters.get(); + + let msg = self.calculate_partition_assignment()?; + + Ok((self, msg)) + } + /// This function calculates a new partition-to-node assignment. /// The computed assignment respects the node replication factor /// and the zone redundancy parameter It maximizes the capacity of a @@ -297,7 +308,7 @@ impl LayoutVersion { /// data to be moved. /// Staged role changes must be merged with nodes roles before calling this function, /// hence it must only be called from apply_staged_changes() and hence is not public. - pub(crate) fn calculate_partition_assignment(&mut self) -> Result { + fn calculate_partition_assignment(&mut self) -> Result { // We update the node ids, since the node role list might have changed with the // changes in the layout. We retrieve the old_assignment reframed with new ids let old_assignment_opt = self.update_node_id_vec()?; @@ -317,12 +328,12 @@ impl LayoutVersion { // to use them as indices in the flow graphs. let (id_to_zone, zone_to_id) = self.generate_nongateway_zone_ids()?; - let nb_nongateway_nodes = self.nongateway_nodes().count(); - if nb_nongateway_nodes < self.replication_factor { + if self.nongateway_nodes().len() < self.replication_factor { return Err(Error::Message(format!( "The number of nodes with positive \ capacity ({}) is smaller than the replication factor ({}).", - nb_nongateway_nodes, self.replication_factor + self.nongateway_nodes().len(), + self.replication_factor ))); } if id_to_zone.len() < zone_redundancy { @@ -420,12 +431,14 @@ impl LayoutVersion { .map(|(k, _, _)| *k) .collect(); - let mut new_node_id_vec = Vec::::new(); - new_node_id_vec.extend(new_non_gateway_nodes); - new_node_id_vec.extend(new_gateway_nodes); + let old_node_id_vec = std::mem::take(&mut self.node_id_vec); - let old_node_id_vec = self.node_id_vec.clone(); - self.node_id_vec = new_node_id_vec.clone(); + self.nongateway_node_count = new_non_gateway_nodes.len(); + self.node_id_vec.clear(); + self.node_id_vec.extend(new_non_gateway_nodes); + self.node_id_vec.extend(new_gateway_nodes); + + let new_node_id_vec = &self.node_id_vec; // (2) We retrieve the old association // We rewrite the old association with the new indices. We only consider partition @@ -464,7 +477,7 @@ impl LayoutVersion { } } - // We write the ring + // We clear the ring assignemnt data self.ring_assignment_data = Vec::::new(); Ok(Some(old_assignment)) @@ -478,8 +491,7 @@ impl LayoutVersion { let mut id_to_zone = Vec::::new(); let mut zone_to_id = HashMap::::new(); - let nongateway_nodes = self.nongateway_nodes().collect::>(); - for uuid in nongateway_nodes.iter() { + for uuid in self.nongateway_nodes().iter() { let r = self.node_role(uuid).unwrap(); if !zone_to_id.contains_key(&r.zone) && r.capacity.is_some() { zone_to_id.insert(r.zone.clone(), id_to_zone.len()); @@ -556,10 +568,8 @@ impl LayoutVersion { exclude_assoc: &HashSet<(usize, usize)>, zone_redundancy: usize, ) -> Result, Error> { - let vertices = LayoutVersion::generate_graph_vertices( - zone_to_id.len(), - self.nongateway_nodes().count(), - ); + let vertices = + LayoutVersion::generate_graph_vertices(zone_to_id.len(), self.nongateway_nodes().len()); let mut g = Graph::::new(&vertices); let nb_zones = zone_to_id.len(); for p in 0..NB_PARTITIONS { @@ -578,8 +588,8 @@ impl LayoutVersion { )?; } } - for n in 0..self.nongateway_nodes().count() { - let node_capacity = self.get_node_capacity(&self.node_id_vec[n])?; + for n in 0..self.nongateway_nodes().len() { + let node_capacity = self.expect_get_node_capacity(&self.node_id_vec[n]); let node_zone = zone_to_id[self.get_node_zone(&self.node_id_vec[n])?]; g.add_edge(Vertex::N(n), Vertex::Sink, node_capacity / partition_size)?; for p in 0..NB_PARTITIONS { @@ -602,7 +612,7 @@ impl LayoutVersion { // previous assignment let mut exclude_edge = HashSet::<(usize, usize)>::new(); if let Some(prev_assign) = prev_assign_opt { - let nb_nodes = self.nongateway_nodes().count(); + let nb_nodes = self.nongateway_nodes().len(); for (p, prev_assign_p) in prev_assign.iter().enumerate() { for n in 0..nb_nodes { exclude_edge.insert((p, n)); @@ -654,7 +664,7 @@ impl LayoutVersion { // We compute the maximal length of a simple path in gflow. It is used in the // Bellman-Ford algorithm in optimize_flow_with_cost to set the number // of iterations. - let nb_nodes = self.nongateway_nodes().count(); + let nb_nodes = self.nongateway_nodes().len(); let path_length = 4 * nb_nodes; gflow.optimize_flow_with_cost(&cost, path_length)?; @@ -732,7 +742,7 @@ impl LayoutVersion { } // We define and fill in the following tables - let storing_nodes = self.nongateway_nodes().collect::>(); + let storing_nodes = self.nongateway_nodes(); let mut new_partitions = vec![0; storing_nodes.len()]; let mut stored_partitions = vec![0; storing_nodes.len()]; @@ -804,13 +814,13 @@ impl LayoutVersion { let available_cap_z: u64 = self.partition_size * replicated_partitions as u64; let mut total_cap_z = 0; for n in nodes_of_z.iter() { - total_cap_z += self.get_node_capacity(&self.node_id_vec[*n])?; + total_cap_z += self.expect_get_node_capacity(&self.node_id_vec[*n]); } let percent_cap_z = 100.0 * (available_cap_z as f32) / (total_cap_z as f32); for n in nodes_of_z.iter() { let available_cap_n = stored_partitions[*n] as u64 * self.partition_size; - let total_cap_n = self.get_node_capacity(&self.node_id_vec[*n])?; + let total_cap_n = self.expect_get_node_capacity(&self.node_id_vec[*n]); let tags_n = (self.node_role(&self.node_id_vec[*n]).ok_or(""))?.tags_string(); table.push(format!( " {:?}\t{}\t{} ({} new)\t{}\t{} ({:.1}%)", From 1aab1f4e688ebc3f3adcb41c817c16c688a3291c Mon Sep 17 00:00:00 2001 From: Alex Auvolat Date: Tue, 14 Nov 2023 13:06:16 +0100 Subject: [PATCH 096/538] layout: refactoring of all_nodes --- src/garage/admin/mod.rs | 17 +++++++++-------- src/garage/cli/layout.rs | 6 +++--- src/model/helper/bucket.rs | 8 ++++++-- src/rpc/layout/history.rs | 15 +++++++++++++++ src/rpc/layout/version.rs | 17 +++++++---------- src/rpc/system.rs | 2 +- src/table/replication/fullcopy.rs | 6 +++--- 7 files changed, 44 insertions(+), 27 deletions(-) diff --git a/src/garage/admin/mod.rs b/src/garage/admin/mod.rs index e3ba6d35..77918a0f 100644 --- a/src/garage/admin/mod.rs +++ b/src/garage/admin/mod.rs @@ -126,8 +126,8 @@ impl AdminRpcHandler { opt_to_send.all_nodes = false; let mut failures = vec![]; - let layout = self.garage.system.cluster_layout().clone(); - for node in layout.current().node_ids().iter() { + let all_nodes = self.garage.system.cluster_layout().all_nodes().to_vec(); + for node in all_nodes.iter() { let node = (*node).into(); let resp = self .endpoint @@ -163,9 +163,9 @@ impl AdminRpcHandler { async fn handle_stats(&self, opt: StatsOpt) -> Result { if opt.all_nodes { let mut ret = String::new(); - let layout = self.garage.system.cluster_layout().clone(); + let all_nodes = self.garage.system.cluster_layout().all_nodes().to_vec(); - for node in layout.current().node_ids().iter() { + for node in all_nodes.iter() { let mut opt = opt.clone(); opt.all_nodes = false; opt.skip_global = true; @@ -275,6 +275,7 @@ impl AdminRpcHandler { let mut ret = String::new(); // Gather storage node and free space statistics + // TODO: not only layout.current() ??? let layout = &self.garage.system.cluster_layout(); let mut node_partition_count = HashMap::::new(); for short_id in layout.current().ring_assignment_data.iter() { @@ -440,8 +441,8 @@ impl AdminRpcHandler { ) -> Result { if all_nodes { let mut ret = vec![]; - let layout = self.garage.system.cluster_layout().clone(); - for node in layout.current().node_ids().iter() { + let all_nodes = self.garage.system.cluster_layout().all_nodes().to_vec(); + for node in all_nodes.iter() { let node = (*node).into(); match self .endpoint @@ -488,8 +489,8 @@ impl AdminRpcHandler { ) -> Result { if all_nodes { let mut ret = vec![]; - let layout = self.garage.system.cluster_layout().clone(); - for node in layout.current().node_ids().iter() { + let all_nodes = self.garage.system.cluster_layout().all_nodes().to_vec(); + for node in all_nodes.iter() { let node = (*node).into(); match self .endpoint diff --git a/src/garage/cli/layout.rs b/src/garage/cli/layout.rs index 15727448..0f01a37a 100644 --- a/src/garage/cli/layout.rs +++ b/src/garage/cli/layout.rs @@ -49,6 +49,7 @@ pub async fn cmd_assign_role( }; let mut layout = fetch_layout(rpc_cli, rpc_host).await?; + let all_nodes = layout.all_nodes().into_owned(); let added_nodes = args .node_ids @@ -58,7 +59,7 @@ pub async fn cmd_assign_role( status .iter() .map(|adv| adv.id) - .chain(layout.current().node_ids().iter().cloned()), + .chain(all_nodes.iter().cloned()), node_id, ) }) @@ -68,8 +69,7 @@ pub async fn cmd_assign_role( roles.merge(&layout.staging.get().roles); for replaced in args.replace.iter() { - let replaced_node = - find_matching_node(layout.current().node_ids().iter().cloned(), replaced)?; + let replaced_node = find_matching_node(all_nodes.iter().cloned(), replaced)?; match roles.get(&replaced_node) { Some(NodeRoleV(Some(_))) => { layout diff --git a/src/model/helper/bucket.rs b/src/model/helper/bucket.rs index 2a9c0fb1..2cb53424 100644 --- a/src/model/helper/bucket.rs +++ b/src/model/helper/bucket.rs @@ -450,8 +450,12 @@ impl<'a> BucketHelper<'a> { #[cfg(feature = "k2v")] { - // TODO: not only current - let node_id_vec = self.0.system.cluster_layout().current().node_ids().to_vec(); + let node_id_vec = self + .0 + .system + .cluster_layout() + .all_nongateway_nodes() + .into_owned(); let k2vindexes = self .0 .k2v diff --git a/src/rpc/layout/history.rs b/src/rpc/layout/history.rs index 877ad3a7..69348873 100644 --- a/src/rpc/layout/history.rs +++ b/src/rpc/layout/history.rs @@ -60,6 +60,21 @@ impl LayoutHistory { (self.current().version, self.all_ack(), self.min_stored()) } + pub fn all_nodes(&self) -> Cow<'_, [Uuid]> { + // TODO: cache this + if self.versions.len() == 1 { + self.versions[0].all_nodes().into() + } else { + let set = self + .versions + .iter() + .map(|x| x.all_nodes()) + .flatten() + .collect::>(); + set.into_iter().copied().collect::>().into() + } + } + pub fn all_nongateway_nodes(&self) -> Cow<'_, [Uuid]> { // TODO: cache this if self.versions.len() == 1 { diff --git a/src/rpc/layout/version.rs b/src/rpc/layout/version.rs index a7f387b6..2cbdcee2 100644 --- a/src/rpc/layout/version.rs +++ b/src/rpc/layout/version.rs @@ -38,22 +38,19 @@ impl LayoutVersion { // ===================== accessors ====================== - /// Returns a list of IDs of nodes that currently have - /// a role in the cluster - pub fn node_ids(&self) -> &[Uuid] { + /// Returns a list of IDs of nodes that have a role in this + /// version of the cluster layout, including gateway nodes + pub fn all_nodes(&self) -> &[Uuid] { &self.node_id_vec[..] } - /// Returns the uuids of the non_gateway nodes in self.node_id_vec. + /// Returns a list of IDs of nodes that have a storage capacity + /// assigned in this version of the cluster layout pub fn nongateway_nodes(&self) -> &[Uuid] { &self.node_id_vec[..self.nongateway_node_count] } - pub fn num_nodes(&self) -> usize { - self.node_id_vec.len() - } - - /// Returns the role of a node in the layout + /// Returns the role of a node in the layout, if it has one pub fn node_role(&self, node: &Uuid) -> Option<&NodeRole> { match self.roles.get(node) { Some(NodeRoleV(Some(v))) => Some(v), @@ -61,7 +58,7 @@ impl LayoutVersion { } } - /// Given a node uuids, this function returns its capacity or fails if it does not have any + /// Returns the capacity of a node in the layout, if it has one pub fn get_node_capacity(&self, uuid: &Uuid) -> Option { match self.node_role(uuid) { Some(NodeRole { diff --git a/src/rpc/system.rs b/src/rpc/system.rs index 3418600b..ab3c96b8 100644 --- a/src/rpc/system.rs +++ b/src/rpc/system.rs @@ -609,7 +609,7 @@ impl System { while !*stop_signal.borrow() { let not_configured = self.cluster_layout().check().is_err(); let no_peers = self.fullmesh.get_peer_list().len() < self.replication_factor; - let expected_n_nodes = self.cluster_layout().current().num_nodes(); + let expected_n_nodes = self.cluster_layout().all_nodes().len(); let bad_peers = self .fullmesh .get_peer_list() diff --git a/src/table/replication/fullcopy.rs b/src/table/replication/fullcopy.rs index 5653a229..beaacc2b 100644 --- a/src/table/replication/fullcopy.rs +++ b/src/table/replication/fullcopy.rs @@ -35,10 +35,10 @@ impl TableReplication for TableFullReplication { } fn write_nodes(&self, _hash: &Hash) -> Vec { - self.system.cluster_layout().current().node_ids().to_vec() + self.system.cluster_layout().current().all_nodes().to_vec() } fn write_quorum(&self) -> usize { - let nmembers = self.system.cluster_layout().current().node_ids().len(); + let nmembers = self.system.cluster_layout().current().all_nodes().len(); if nmembers > self.max_faults { nmembers - self.max_faults } else { @@ -62,7 +62,7 @@ impl TableReplication for TableFullReplication { partition: 0u16, first_hash: [0u8; 32].into(), last_hash: [0xff; 32].into(), - storage_nodes: Vec::from_iter(layout.current().node_ids().to_vec()), + storage_nodes: Vec::from_iter(layout.current().all_nodes().to_vec()), }], } } From 83a11374ca45831a6f54928dfe726fac65493b00 Mon Sep 17 00:00:00 2001 From: Alex Auvolat Date: Tue, 14 Nov 2023 13:29:26 +0100 Subject: [PATCH 097/538] layout: fixes in schema --- src/rpc/layout/schema.rs | 42 ++++++++++++++++++++-------------------- 1 file changed, 21 insertions(+), 21 deletions(-) diff --git a/src/rpc/layout/schema.rs b/src/rpc/layout/schema.rs index db298ee6..79440a47 100644 --- a/src/rpc/layout/schema.rs +++ b/src/rpc/layout/schema.rs @@ -193,7 +193,25 @@ mod v010 { use std::collections::BTreeMap; pub use v09::{LayoutParameters, NodeRole, NodeRoleV, ZoneRedundancy}; - /// The layout of the cluster, i.e. the list of roles + /// The history of cluster layouts, with trackers to keep a record + /// of which nodes are up-to-date to current cluster data + #[derive(Clone, Debug, Serialize, Deserialize, PartialEq)] + pub struct LayoutHistory { + /// The versions currently in use in the cluster + pub versions: Vec, + + /// Update trackers + pub update_trackers: UpdateTrackers, + /// Hash of the update trackers + pub trackers_hash: Hash, + + /// Staged changes for the next version + pub staging: Lww, + /// Hash of the serialized staging_parameters + staging_roles + pub staging_hash: Hash, + } + + /// A version of the layout of the cluster, i.e. the list of roles /// which are assigned to each cluster node #[derive(Clone, Debug, Serialize, Deserialize, PartialEq)] pub struct LayoutVersion { @@ -228,23 +246,6 @@ mod v010 { pub roles: LwwMap, } - /// The history of cluster layouts - #[derive(Clone, Debug, Serialize, Deserialize, PartialEq)] - pub struct LayoutHistory { - /// The versions currently in use in the cluster - pub versions: Vec, - - /// Update trackers - pub update_trackers: UpdateTrackers, - /// Hash of the update trackers - pub trackers_hash: Hash, - - /// Staged changes for the next version - pub staging: Lww, - /// Hash of the serialized staging_parameters + staging_roles - pub staging_hash: Hash, - } - /// The tracker of acknowlegments and data syncs around the cluster #[derive(Clone, Debug, Serialize, Deserialize, Default, PartialEq)] pub struct UpdateTrackers { @@ -275,7 +276,7 @@ mod v010 { let role = previous.roles.get(uuid); matches!(role, Some(NodeRoleV(Some(role))) if role.capacity.is_some()) }) - .map(|(i, _)| i) + .map(|(i, _)| i + 1) .max() .unwrap_or(0); @@ -312,8 +313,7 @@ mod v010 { staging: Lww::raw(previous.version, staging), staging_hash: [0u8; 32].into(), }; - ret.staging_hash = ret.calculate_staging_hash(); - ret.trackers_hash = ret.calculate_trackers_hash(); + ret.update_hashes(); ret } } From 866196750fca74c1911ade2a90611f3663e60046 Mon Sep 17 00:00:00 2001 From: Alex Auvolat Date: Tue, 14 Nov 2023 13:36:58 +0100 Subject: [PATCH 098/538] system: add todo wrt new layout --- src/rpc/system.rs | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/rpc/system.rs b/src/rpc/system.rs index ab3c96b8..86c02e86 100644 --- a/src/rpc/system.rs +++ b/src/rpc/system.rs @@ -417,6 +417,9 @@ impl System { } pub fn health(&self) -> ClusterHealth { + // TODO: adapt this function to take into account layout history + // when estimating cluster health, and not just use current layout + let quorum = self.replication_mode.write_quorum(); let replication_factor = self.replication_factor; @@ -429,7 +432,6 @@ impl System { let layout = self.cluster_layout(); // acquires a rwlock - // TODO: not only layout.current() let storage_nodes = layout .current() .roles From 3b361d2959e3d577bdae6f8a5ccb0c9d5526b7ea Mon Sep 17 00:00:00 2001 From: Alex Auvolat Date: Tue, 14 Nov 2023 14:28:16 +0100 Subject: [PATCH 099/538] layout: prepare for write sets --- src/block/manager.rs | 3 ++- src/block/resync.rs | 2 +- src/model/k2v/rpc.rs | 10 ++++++---- src/rpc/layout/history.rs | 19 ++++++++++++++++--- src/rpc/layout/version.rs | 21 ++++++++++----------- src/rpc/system.rs | 3 +-- src/table/data.rs | 3 ++- src/table/gc.rs | 2 +- src/table/replication/fullcopy.rs | 9 +++++++-- src/table/replication/parameters.rs | 8 +++++--- src/table/replication/sharded.rs | 24 ++++++++---------------- src/table/sync.rs | 2 +- src/table/table.rs | 6 ++++-- 13 files changed, 64 insertions(+), 48 deletions(-) diff --git a/src/block/manager.rs b/src/block/manager.rs index 72b4ea66..2bb9c23d 100644 --- a/src/block/manager.rs +++ b/src/block/manager.rs @@ -354,7 +354,8 @@ impl BlockManager { /// Send block to nodes that should have it pub async fn rpc_put_block(&self, hash: Hash, data: Bytes) -> Result<(), Error> { - let who = self.replication.write_nodes(&hash); + // TODO: use quorums among latest write set + let who = self.replication.storage_nodes(&hash); let (header, bytes) = DataBlock::from_buffer(data, self.compression_level) .await diff --git a/src/block/resync.rs b/src/block/resync.rs index fedcd6f5..122d0142 100644 --- a/src/block/resync.rs +++ b/src/block/resync.rs @@ -377,7 +377,7 @@ impl BlockResyncManager { info!("Resync block {:?}: offloading and deleting", hash); let existing_path = existing_path.unwrap(); - let mut who = manager.replication.write_nodes(hash); + let mut who = manager.replication.storage_nodes(hash); if who.len() < manager.replication.write_quorum() { return Err(Error::Message("Not trying to offload block because we don't have a quorum of nodes to write to".to_string())); } diff --git a/src/model/k2v/rpc.rs b/src/model/k2v/rpc.rs index 2f548ad7..aa3323d5 100644 --- a/src/model/k2v/rpc.rs +++ b/src/model/k2v/rpc.rs @@ -127,7 +127,7 @@ impl K2VRpcHandler { .item_table .data .replication - .write_nodes(&partition.hash()); + .storage_nodes(&partition.hash()); who.sort(); self.system @@ -168,7 +168,7 @@ impl K2VRpcHandler { .item_table .data .replication - .write_nodes(&partition.hash()); + .storage_nodes(&partition.hash()); who.sort(); call_list.entry(who).or_default().push(InsertedItem { @@ -223,11 +223,12 @@ impl K2VRpcHandler { }, sort_key, }; + // TODO figure this out with write sets, does it still work???? let nodes = self .item_table .data .replication - .write_nodes(&poll_key.partition.hash()); + .read_nodes(&poll_key.partition.hash()); let rpc = self.system.rpc_helper().try_call_many( &self.endpoint, @@ -284,11 +285,12 @@ impl K2VRpcHandler { seen.restrict(&range); // Prepare PollRange RPC to send to the storage nodes responsible for the parititon + // TODO figure this out with write sets, does it still work???? let nodes = self .item_table .data .replication - .write_nodes(&range.partition.hash()); + .read_nodes(&range.partition.hash()); let quorum = self.item_table.data.replication.read_quorum(); let msg = K2VRpc::PollRange { range, diff --git a/src/rpc/layout/history.rs b/src/rpc/layout/history.rs index 69348873..dce492c9 100644 --- a/src/rpc/layout/history.rs +++ b/src/rpc/layout/history.rs @@ -98,13 +98,26 @@ impl LayoutHistory { .find(|x| x.version == sync_min) .or(self.versions.last()) .unwrap(); - version.nodes_of(position, version.replication_factor) + version + .nodes_of(position, version.replication_factor) + .collect() } - pub fn write_sets_of<'a>(&'a self, position: &'a Hash) -> impl Iterator> + 'a { + pub fn write_sets_of(&self, position: &Hash) -> Vec> { self.versions .iter() - .map(move |x| x.nodes_of(position, x.replication_factor)) + .map(|x| x.nodes_of(position, x.replication_factor).collect()) + .collect() + } + + pub fn storage_nodes_of(&self, position: &Hash) -> Vec { + let mut ret = vec![]; + for version in self.versions.iter() { + ret.extend(version.nodes_of(position, version.replication_factor)); + } + ret.sort(); + ret.dedup(); + ret } // ------------------ update tracking --------------- diff --git a/src/rpc/layout/version.rs b/src/rpc/layout/version.rs index 2cbdcee2..912ee538 100644 --- a/src/rpc/layout/version.rs +++ b/src/rpc/layout/version.rs @@ -107,25 +107,24 @@ impl LayoutVersion { } /// Return the n servers in which data for this hash should be replicated - pub fn nodes_of(&self, position: &Hash, n: usize) -> Vec { + pub fn nodes_of(&self, position: &Hash, n: usize) -> impl Iterator + '_ { assert_eq!(n, self.replication_factor); let data = &self.ring_assignment_data; - if data.len() != self.replication_factor * (1 << PARTITION_BITS) { + let partition_nodes = if data.len() == self.replication_factor * (1 << PARTITION_BITS) { + let partition_idx = self.partition_of(position) as usize; + let partition_start = partition_idx * self.replication_factor; + let partition_end = (partition_idx + 1) * self.replication_factor; + &data[partition_start..partition_end] + } else { warn!("Ring not yet ready, read/writes will be lost!"); - return vec![]; - } - - let partition_idx = self.partition_of(position) as usize; - let partition_start = partition_idx * self.replication_factor; - let partition_end = (partition_idx + 1) * self.replication_factor; - let partition_nodes = &data[partition_start..partition_end]; + &[] + }; partition_nodes .iter() - .map(|i| self.node_id_vec[*i as usize]) - .collect::>() + .map(move |i| self.node_id_vec[*i as usize]) } // ===================== internal information extractors ====================== diff --git a/src/rpc/system.rs b/src/rpc/system.rs index 86c02e86..31d78bf6 100644 --- a/src/rpc/system.rs +++ b/src/rpc/system.rs @@ -449,8 +449,7 @@ impl System { .iter() .map(|(_, h)| { let pn = layout.current().nodes_of(h, replication_factor); - pn.iter() - .filter(|x| nodes.get(x).map(|n| n.is_up).unwrap_or(false)) + pn.filter(|x| nodes.get(x).map(|n| n.is_up).unwrap_or(false)) .count() }) .collect::>(); diff --git a/src/table/data.rs b/src/table/data.rs index bbfdf58b..7f6b7847 100644 --- a/src/table/data.rs +++ b/src/table/data.rs @@ -254,7 +254,8 @@ impl TableData { // of the GC algorithm, as in all cases GC is suspended if // any node of the partition is unavailable. let pk_hash = Hash::try_from(&tree_key[..32]).unwrap(); - let nodes = self.replication.write_nodes(&pk_hash); + // TODO: this probably breaks when the layout changes + let nodes = self.replication.storage_nodes(&pk_hash); if nodes.first() == Some(&self.system.id) { GcTodoEntry::new(tree_key, new_bytes_hash).save(&self.gc_todo)?; } diff --git a/src/table/gc.rs b/src/table/gc.rs index 2135a358..002cfbf4 100644 --- a/src/table/gc.rs +++ b/src/table/gc.rs @@ -152,7 +152,7 @@ impl TableGc { let mut partitions = HashMap::new(); for entry in entries { let pkh = Hash::try_from(&entry.key[..32]).unwrap(); - let mut nodes = self.data.replication.write_nodes(&pkh); + let mut nodes = self.data.replication.storage_nodes(&pkh); nodes.retain(|x| *x != self.system.id); nodes.sort(); diff --git a/src/table/replication/fullcopy.rs b/src/table/replication/fullcopy.rs index beaacc2b..cb5471af 100644 --- a/src/table/replication/fullcopy.rs +++ b/src/table/replication/fullcopy.rs @@ -27,6 +27,11 @@ pub struct TableFullReplication { } impl TableReplication for TableFullReplication { + fn storage_nodes(&self, _hash: &Hash) -> Vec { + let layout = self.system.cluster_layout(); + layout.current().all_nodes().to_vec() + } + fn read_nodes(&self, _hash: &Hash) -> Vec { vec![self.system.id] } @@ -34,8 +39,8 @@ impl TableReplication for TableFullReplication { 1 } - fn write_nodes(&self, _hash: &Hash) -> Vec { - self.system.cluster_layout().current().all_nodes().to_vec() + fn write_sets(&self, hash: &Hash) -> Vec> { + vec![self.storage_nodes(hash)] } fn write_quorum(&self) -> usize { let nmembers = self.system.cluster_layout().current().all_nodes().len(); diff --git a/src/table/replication/parameters.rs b/src/table/replication/parameters.rs index 2a7d3585..2f842409 100644 --- a/src/table/replication/parameters.rs +++ b/src/table/replication/parameters.rs @@ -6,21 +6,23 @@ pub trait TableReplication: Send + Sync + 'static { // See examples in table_sharded.rs and table_fullcopy.rs // To understand various replication methods + /// The entire list of all nodes that store a partition + fn storage_nodes(&self, hash: &Hash) -> Vec; + /// Which nodes to send read requests to fn read_nodes(&self, hash: &Hash) -> Vec; /// Responses needed to consider a read succesfull fn read_quorum(&self) -> usize; /// Which nodes to send writes to - fn write_nodes(&self, hash: &Hash) -> Vec; - /// Responses needed to consider a write succesfull + fn write_sets(&self, hash: &Hash) -> Vec>; + /// Responses needed to consider a write succesfull in each set fn write_quorum(&self) -> usize; fn max_write_errors(&self) -> usize; // Accessing partitions, for Merkle tree & sync /// Get partition for data with given hash fn partition_of(&self, hash: &Hash) -> Partition; - /// List of partitions and nodes to sync with in current layout fn sync_partitions(&self) -> SyncPartitions; } diff --git a/src/table/replication/sharded.rs b/src/table/replication/sharded.rs index f02b1d66..1320a189 100644 --- a/src/table/replication/sharded.rs +++ b/src/table/replication/sharded.rs @@ -25,21 +25,19 @@ pub struct TableShardedReplication { } impl TableReplication for TableShardedReplication { + fn storage_nodes(&self, hash: &Hash) -> Vec { + self.system.cluster_layout().storage_nodes_of(hash) + } + fn read_nodes(&self, hash: &Hash) -> Vec { - self.system - .cluster_layout() - .current() - .nodes_of(hash, self.replication_factor) + self.system.cluster_layout().read_nodes_of(hash) } fn read_quorum(&self) -> usize { self.read_quorum } - fn write_nodes(&self, hash: &Hash) -> Vec { - self.system - .cluster_layout() - .current() - .nodes_of(hash, self.replication_factor) + fn write_sets(&self, hash: &Hash) -> Vec> { + self.system.cluster_layout().write_sets_of(hash) } fn write_quorum(&self) -> usize { self.write_quorum @@ -60,13 +58,7 @@ impl TableReplication for TableShardedReplication { .current() .partitions() .map(|(partition, first_hash)| { - let mut storage_nodes = layout - .write_sets_of(&first_hash) - .map(|x| x.into_iter()) - .flatten() - .collect::>(); - storage_nodes.sort(); - storage_nodes.dedup(); + let storage_nodes = layout.storage_nodes_of(&first_hash); SyncPartition { partition, first_hash, diff --git a/src/table/sync.rs b/src/table/sync.rs index 8c21db8b..b67cdd79 100644 --- a/src/table/sync.rs +++ b/src/table/sync.rs @@ -176,7 +176,7 @@ impl TableSyncer { let nodes = self .data .replication - .write_nodes(begin) + .storage_nodes(begin) .into_iter() .collect::>(); if nodes.contains(&self.system.id) { diff --git a/src/table/table.rs b/src/table/table.rs index 997fd7dc..bf08d5a0 100644 --- a/src/table/table.rs +++ b/src/table/table.rs @@ -119,7 +119,8 @@ impl Table { async fn insert_internal(&self, e: &F::E) -> Result<(), Error> { let hash = e.partition_key().hash(); - let who = self.data.replication.write_nodes(&hash); + // TODO: use write sets + let who = self.data.replication.storage_nodes(&hash); let e_enc = Arc::new(ByteBuf::from(e.encode()?)); let rpc = TableRpc::::Update(vec![e_enc]); @@ -171,7 +172,8 @@ impl Table { for entry in entries.into_iter() { let entry = entry.borrow(); let hash = entry.partition_key().hash(); - let who = self.data.replication.write_nodes(&hash); + // TODO: use write sets + let who = self.data.replication.storage_nodes(&hash); let e_enc = Arc::new(ByteBuf::from(entry.encode()?)); for node in who { call_list.entry(node).or_default().push(e_enc.clone()); From 90e1619b1e9f5d81e59da371f04717f0c4fe5afc Mon Sep 17 00:00:00 2001 From: Alex Auvolat Date: Tue, 14 Nov 2023 15:40:46 +0100 Subject: [PATCH 100/538] table: take into account multiple write sets in inserts --- src/block/manager.rs | 7 +- src/block/resync.rs | 2 +- src/model/k2v/rpc.rs | 15 +-- src/rpc/rpc_helper.rs | 280 ++++++++++++++++++++++++++---------------- src/table/gc.rs | 4 +- src/table/table.rs | 17 ++- 6 files changed, 190 insertions(+), 135 deletions(-) diff --git a/src/block/manager.rs b/src/block/manager.rs index 2bb9c23d..0ca8bc31 100644 --- a/src/block/manager.rs +++ b/src/block/manager.rs @@ -354,8 +354,7 @@ impl BlockManager { /// Send block to nodes that should have it pub async fn rpc_put_block(&self, hash: Hash, data: Bytes) -> Result<(), Error> { - // TODO: use quorums among latest write set - let who = self.replication.storage_nodes(&hash); + let who = self.replication.write_sets(&hash); let (header, bytes) = DataBlock::from_buffer(data, self.compression_level) .await @@ -365,9 +364,9 @@ impl BlockManager { self.system .rpc_helper() - .try_call_many( + .try_write_many_sets( &self.endpoint, - &who[..], + &who, put_block_rpc, RequestStrategy::with_priority(PRIO_NORMAL | PRIO_SECONDARY) .with_quorum(self.replication.write_quorum()), diff --git a/src/block/resync.rs b/src/block/resync.rs index 122d0142..15f210e4 100644 --- a/src/block/resync.rs +++ b/src/block/resync.rs @@ -434,7 +434,7 @@ impl BlockResyncManager { .rpc_helper() .try_call_many( &manager.endpoint, - &need_nodes[..], + &need_nodes, put_block_message, RequestStrategy::with_priority(PRIO_BACKGROUND) .with_quorum(need_nodes.len()), diff --git a/src/model/k2v/rpc.rs b/src/model/k2v/rpc.rs index aa3323d5..863a068a 100644 --- a/src/model/k2v/rpc.rs +++ b/src/model/k2v/rpc.rs @@ -134,16 +134,14 @@ impl K2VRpcHandler { .rpc_helper() .try_call_many( &self.endpoint, - &who[..], + &who, K2VRpc::InsertItem(InsertedItem { partition, sort_key, causal_context, value, }), - RequestStrategy::with_priority(PRIO_NORMAL) - .with_quorum(1) - .interrupt_after_quorum(true), + RequestStrategy::with_priority(PRIO_NORMAL).with_quorum(1), ) .await?; @@ -192,9 +190,7 @@ impl K2VRpcHandler { &self.endpoint, &nodes[..], K2VRpc::InsertManyItems(items), - RequestStrategy::with_priority(PRIO_NORMAL) - .with_quorum(1) - .interrupt_after_quorum(true), + RequestStrategy::with_priority(PRIO_NORMAL).with_quorum(1), ) .await?; Ok::<_, Error>((nodes, resp)) @@ -223,7 +219,7 @@ impl K2VRpcHandler { }, sort_key, }; - // TODO figure this out with write sets, does it still work???? + // TODO figure this out with write sets, is it still appropriate??? let nodes = self .item_table .data @@ -232,7 +228,7 @@ impl K2VRpcHandler { let rpc = self.system.rpc_helper().try_call_many( &self.endpoint, - &nodes[..], + &nodes, K2VRpc::PollItem { key: poll_key, causal_context, @@ -240,6 +236,7 @@ impl K2VRpcHandler { }, RequestStrategy::with_priority(PRIO_NORMAL) .with_quorum(self.item_table.data.replication.read_quorum()) + .send_all_at_once(true) .without_timeout(), ); let timeout_duration = diff --git a/src/rpc/rpc_helper.rs b/src/rpc/rpc_helper.rs index ce291068..12d073b6 100644 --- a/src/rpc/rpc_helper.rs +++ b/src/rpc/rpc_helper.rs @@ -1,4 +1,5 @@ //! Contain structs related to making RPCs +use std::collections::HashMap; use std::sync::{Arc, RwLock}; use std::time::Duration; @@ -35,11 +36,11 @@ const DEFAULT_TIMEOUT: Duration = Duration::from_secs(300); #[derive(Copy, Clone)] pub struct RequestStrategy { /// Min number of response to consider the request successful - pub rs_quorum: Option, - /// Should requests be dropped after enough response are received - pub rs_interrupt_after_quorum: bool, + rs_quorum: Option, + /// Send all requests at once + rs_send_all_at_once: Option, /// Request priority - pub rs_priority: RequestPriority, + rs_priority: RequestPriority, /// Custom timeout for this request rs_timeout: Timeout, } @@ -56,7 +57,7 @@ impl RequestStrategy { pub fn with_priority(prio: RequestPriority) -> Self { RequestStrategy { rs_quorum: None, - rs_interrupt_after_quorum: false, + rs_send_all_at_once: None, rs_priority: prio, rs_timeout: Timeout::Default, } @@ -66,10 +67,9 @@ impl RequestStrategy { self.rs_quorum = Some(quorum); self } - /// Set if requests can be dropped after quorum has been reached - /// In general true for read requests, and false for write - pub fn interrupt_after_quorum(mut self, interrupt: bool) -> Self { - self.rs_interrupt_after_quorum = interrupt; + /// Set quorum to be reached for request + pub fn send_all_at_once(mut self, value: bool) -> Self { + self.rs_send_all_at_once = Some(value); self } /// Deactivate timeout for this request @@ -235,31 +235,19 @@ impl RpcHelper { let quorum = strategy.rs_quorum.unwrap_or(to.len()); let tracer = opentelemetry::global::tracer("garage"); - let span_name = if strategy.rs_interrupt_after_quorum { - format!("RPC {} to {} of {}", endpoint.path(), quorum, to.len()) - } else { - format!( - "RPC {} to {} (quorum {})", - endpoint.path(), - to.len(), - quorum - ) - }; + let span_name = format!("Read RPC {} to {} of {}", endpoint.path(), quorum, to.len()); + let mut span = tracer.start(span_name); span.set_attribute(KeyValue::new("from", format!("{:?}", self.0.our_node_id))); span.set_attribute(KeyValue::new("to", format!("{:?}", to))); span.set_attribute(KeyValue::new("quorum", quorum as i64)); - span.set_attribute(KeyValue::new( - "interrupt_after_quorum", - strategy.rs_interrupt_after_quorum.to_string(), - )); - self.try_call_many_internal(endpoint, to, msg, strategy, quorum) + self.try_call_many_inner(endpoint, to, msg, strategy, quorum) .with_context(Context::current_with_span(span)) .await } - async fn try_call_many_internal( + async fn try_call_many_inner( &self, endpoint: &Arc>, to: &[Uuid], @@ -273,12 +261,20 @@ impl RpcHelper { H: StreamingEndpointHandler + 'static, S: Send + 'static, { - let msg = msg.into_req().map_err(netapp::error::Error::from)?; + // Once quorum is reached, other requests don't matter. + // What we do here is only send the required number of requests + // to reach a quorum, priorizing nodes with the lowest latency. + // When there are errors, we start new requests to compensate. + + // Reorder requests to priorize closeness / low latency + let request_order = self.request_order(to); + let send_all_at_once = strategy.rs_send_all_at_once.unwrap_or(false); // Build future for each request // They are not started now: they are added below in a FuturesUnordered // object that will take care of polling them (see below) - let requests = to.iter().cloned().map(|to| { + let msg = msg.into_req().map_err(netapp::error::Error::from)?; + let mut requests = request_order.into_iter().map(|to| { let self2 = self.clone(); let msg = msg.clone(); let endpoint2 = endpoint.clone(); @@ -291,92 +287,39 @@ impl RpcHelper { let mut successes = vec![]; let mut errors = vec![]; - if strategy.rs_interrupt_after_quorum { - // Case 1: once quorum is reached, other requests don't matter. - // What we do here is only send the required number of requests - // to reach a quorum, priorizing nodes with the lowest latency. - // When there are errors, we start new requests to compensate. + // resp_stream will contain all of the requests that are currently in flight. + // (for the moment none, they will be added in the loop below) + let mut resp_stream = FuturesUnordered::new(); - // Reorder requests to priorize closeness / low latency - let request_order = self.request_order(to); - let mut ord_requests = vec![(); request_order.len()] - .into_iter() - .map(|_| None) - .collect::>(); - for (to, fut) in requests { - let i = request_order.iter().position(|x| *x == to).unwrap(); - ord_requests[i] = Some((to, fut)); - } - - // Make an iterator to take requests in their sorted order - let mut requests = ord_requests.into_iter().map(Option::unwrap); - - // resp_stream will contain all of the requests that are currently in flight. - // (for the moment none, they will be added in the loop below) - let mut resp_stream = FuturesUnordered::new(); - - // Do some requests and collect results - 'request_loop: while successes.len() < quorum { - // If the current set of requests that are running is not enough to possibly - // reach quorum, start some new requests. - while successes.len() + resp_stream.len() < quorum { - if let Some((req_to, fut)) = requests.next() { - let tracer = opentelemetry::global::tracer("garage"); - let span = tracer.start(format!("RPC to {:?}", req_to)); - resp_stream.push(tokio::spawn( - fut.with_context(Context::current_with_span(span)), - )); - } else { - // If we have no request to add, we know that we won't ever - // reach quorum: bail out now. - break 'request_loop; - } - } - assert!(!resp_stream.is_empty()); // because of loop invariants - - // Wait for one request to terminate - match resp_stream.next().await.unwrap().unwrap() { - Ok(msg) => { - successes.push(msg); - } - Err(e) => { - errors.push(e); - } - } - } - } else { - // Case 2: all of the requests need to be sent in all cases, - // and need to terminate. (this is the case for writes that - // must be spread to n nodes) - // Just start all the requests in parallel and return as soon - // as the quorum is reached. - let mut resp_stream = requests - .map(|(_, fut)| fut) - .collect::>(); - - while let Some(resp) = resp_stream.next().await { - match resp { - Ok(msg) => { - successes.push(msg); - if successes.len() >= quorum { - break; - } - } - Err(e) => { - errors.push(e); - } + // Do some requests and collect results + while successes.len() < quorum { + // If the current set of requests that are running is not enough to possibly + // reach quorum, start some new requests. + while send_all_at_once || successes.len() + resp_stream.len() < quorum { + if let Some((req_to, fut)) = requests.next() { + let tracer = opentelemetry::global::tracer("garage"); + let span = tracer.start(format!("RPC to {:?}", req_to)); + resp_stream.push(tokio::spawn( + fut.with_context(Context::current_with_span(span)), + )); + } else { + break; } } - if !resp_stream.is_empty() { - // Continue remaining requests in background. - // Note: these requests can get interrupted on process shutdown, - // we must not count on them being executed for certain. - // For all background things that have to happen with certainty, - // they have to be put in a proper queue that is persisted to disk. - tokio::spawn(async move { - resp_stream.collect::>>().await; - }); + if successes.len() + resp_stream.len() < quorum { + // We know we won't ever reach quorum + break; + } + + // Wait for one request to terminate + match resp_stream.next().await.unwrap().unwrap() { + Ok(msg) => { + successes.push(msg); + } + Err(e) => { + errors.push(e); + } } } @@ -432,4 +375,123 @@ impl RpcHelper { .map(|(_, _, _, to)| to) .collect::>() } + + pub async fn try_write_many_sets( + &self, + endpoint: &Arc>, + to_sets: &[Vec], + msg: N, + strategy: RequestStrategy, + ) -> Result, Error> + where + M: Rpc> + 'static, + N: IntoReq, + H: StreamingEndpointHandler + 'static, + S: Send + 'static, + { + let quorum = strategy + .rs_quorum + .expect("internal error: missing quroum in try_write_many_sets"); + + let tracer = opentelemetry::global::tracer("garage"); + let span_name = format!( + "Write RPC {} (quorum {} in {} sets)", + endpoint.path(), + quorum, + to_sets.len() + ); + + let mut span = tracer.start(span_name); + span.set_attribute(KeyValue::new("from", format!("{:?}", self.0.our_node_id))); + span.set_attribute(KeyValue::new("to", format!("{:?}", to_sets))); + span.set_attribute(KeyValue::new("quorum", quorum as i64)); + + self.try_write_many_sets_inner(endpoint, to_sets, msg, strategy, quorum) + .with_context(Context::current_with_span(span)) + .await + } + + async fn try_write_many_sets_inner( + &self, + endpoint: &Arc>, + to_sets: &[Vec], + msg: N, + strategy: RequestStrategy, + quorum: usize, + ) -> Result, Error> + where + M: Rpc> + 'static, + N: IntoReq, + H: StreamingEndpointHandler + 'static, + S: Send + 'static, + { + let msg = msg.into_req().map_err(netapp::error::Error::from)?; + + let mut peers = HashMap::>::new(); + for (i, set) in to_sets.iter().enumerate() { + for peer in set.iter() { + peers.entry(*peer).or_default().push(i); + } + } + + let requests = peers.iter().map(|(peer, _)| { + let self2 = self.clone(); + let msg = msg.clone(); + let endpoint2 = endpoint.clone(); + let to = *peer; + let tracer = opentelemetry::global::tracer("garage"); + let span = tracer.start(format!("RPC to {:?}", to)); + let fut = async move { (to, self2.call(&endpoint2, to, msg, strategy).await) }; + tokio::spawn(fut.with_context(Context::current_with_span(span))) + }); + let mut resp_stream = requests.collect::>(); + + let mut successes = vec![]; + let mut errors = vec![]; + + let mut set_counters = vec![(0, 0); to_sets.len()]; + + while !resp_stream.is_empty() { + let (node, resp) = resp_stream.next().await.unwrap().unwrap(); + + match resp { + Ok(msg) => { + for set in peers.get(&node).unwrap().iter() { + set_counters[*set].0 += 1; + } + successes.push(msg); + } + Err(e) => { + for set in peers.get(&node).unwrap().iter() { + set_counters[*set].1 += 1; + } + errors.push(e); + } + } + + if set_counters.iter().all(|x| x.0 > quorum) { + // Success + + // Continue all other requets in background + tokio::spawn(async move { + resp_stream.collect::>>().await; + }); + + return Ok(successes); + } + + if set_counters + .iter() + .enumerate() + .any(|(i, x)| x.1 + quorum > to_sets[i].len()) + { + // Too many errors in this set, we know we won't get a quorum + break; + } + } + + // Failure, could not get quorum + let errors = errors.iter().map(|e| format!("{}", e)).collect::>(); + Err(Error::Quorum(quorum, successes.len(), peers.len(), errors)) + } } diff --git a/src/table/gc.rs b/src/table/gc.rs index 002cfbf4..ef788749 100644 --- a/src/table/gc.rs +++ b/src/table/gc.rs @@ -230,7 +230,7 @@ impl TableGc { .rpc_helper() .try_call_many( &self.endpoint, - &nodes[..], + &nodes, GcRpc::Update(updates), RequestStrategy::with_priority(PRIO_BACKGROUND).with_quorum(nodes.len()), ) @@ -251,7 +251,7 @@ impl TableGc { .rpc_helper() .try_call_many( &self.endpoint, - &nodes[..], + &nodes, GcRpc::DeleteIfEqualHash(deletes), RequestStrategy::with_priority(PRIO_BACKGROUND).with_quorum(nodes.len()), ) diff --git a/src/table/table.rs b/src/table/table.rs index bf08d5a0..c2efaeaf 100644 --- a/src/table/table.rs +++ b/src/table/table.rs @@ -119,17 +119,16 @@ impl Table { async fn insert_internal(&self, e: &F::E) -> Result<(), Error> { let hash = e.partition_key().hash(); - // TODO: use write sets - let who = self.data.replication.storage_nodes(&hash); + let who = self.data.replication.write_sets(&hash); let e_enc = Arc::new(ByteBuf::from(e.encode()?)); let rpc = TableRpc::::Update(vec![e_enc]); self.system .rpc_helper() - .try_call_many( + .try_write_many_sets( &self.endpoint, - &who[..], + &who, rpc, RequestStrategy::with_priority(PRIO_NORMAL) .with_quorum(self.data.replication.write_quorum()), @@ -243,11 +242,10 @@ impl Table { .rpc_helper() .try_call_many( &self.endpoint, - &who[..], + &who, rpc, RequestStrategy::with_priority(PRIO_NORMAL) - .with_quorum(self.data.replication.read_quorum()) - .interrupt_after_quorum(true), + .with_quorum(self.data.replication.read_quorum()), ) .await?; @@ -339,11 +337,10 @@ impl Table { .rpc_helper() .try_call_many( &self.endpoint, - &who[..], + &who, rpc, RequestStrategy::with_priority(PRIO_NORMAL) - .with_quorum(self.data.replication.read_quorum()) - .interrupt_after_quorum(true), + .with_quorum(self.data.replication.read_quorum()), ) .await?; From 7ef2c231208073db5a0a0a8674e2dd2d2ecb2222 Mon Sep 17 00:00:00 2001 From: Alex Auvolat Date: Tue, 14 Nov 2023 15:45:01 +0100 Subject: [PATCH 101/538] layout: fix test --- src/rpc/layout/test.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/rpc/layout/test.rs b/src/rpc/layout/test.rs index 0ce090d2..e9639073 100644 --- a/src/rpc/layout/test.rs +++ b/src/rpc/layout/test.rs @@ -35,7 +35,7 @@ fn check_against_naive(cl: &LayoutVersion) -> Result { } for uuid in cl.nongateway_nodes() { let z = cl.get_node_zone(&uuid)?; - let c = cl.get_node_capacity(&uuid)?; + let c = cl.get_node_capacity(&uuid).unwrap(); zone_token.insert( z.to_string(), zone_token[z] + min(NB_PARTITIONS, (c / over_size) as usize), From b3e729f4b8ec3b06593f8d3b161c76b1263d9f13 Mon Sep 17 00:00:00 2001 From: Alex Auvolat Date: Wed, 15 Nov 2023 12:15:58 +0100 Subject: [PATCH 102/538] layout history merge: rm invalid versions when valid versions are added --- src/rpc/layout/history.rs | 18 ++++++++++++++++++ src/rpc/layout/version.rs | 20 ++++++++++---------- 2 files changed, 28 insertions(+), 10 deletions(-) diff --git a/src/rpc/layout/history.rs b/src/rpc/layout/history.rs index dce492c9..2346b14a 100644 --- a/src/rpc/layout/history.rs +++ b/src/rpc/layout/history.rs @@ -211,6 +211,24 @@ impl LayoutHistory { changed = changed || c; } + // If there are invalid versions before valid versions, remove them, + // and increment update trackers + if self.versions.len() > 1 && self.current().check().is_ok() { + while self.versions.first().unwrap().check().is_err() { + self.versions.remove(0); + changed = true; + } + if changed { + let min_v = self.versions.first().unwrap().version; + let nodes = self.all_nongateway_nodes().into_owned(); + for node in nodes { + self.update_trackers.ack_map.set_max(node, min_v); + self.update_trackers.sync_map.set_max(node, min_v); + self.update_trackers.sync_ack_map.set_max(node, min_v); + } + } + } + // Merge staged layout changes if self.staging != other.staging { self.staging.merge(&other.staging); diff --git a/src/rpc/layout/version.rs b/src/rpc/layout/version.rs index 912ee538..947fab56 100644 --- a/src/rpc/layout/version.rs +++ b/src/rpc/layout/version.rs @@ -174,6 +174,16 @@ impl LayoutVersion { /// (assignment, roles, parameters, partition size) /// returns true if consistent, false if error pub fn check(&self) -> Result<(), String> { + // Check that the assignment data has the correct length + let expected_assignment_data_len = (1 << PARTITION_BITS) * self.replication_factor; + if self.ring_assignment_data.len() != expected_assignment_data_len { + return Err(format!( + "ring_assignment_data has incorrect length {} instead of {}", + self.ring_assignment_data.len(), + expected_assignment_data_len + )); + } + // Check that node_id_vec contains the correct list of nodes let mut expected_nodes = self .roles @@ -189,16 +199,6 @@ impl LayoutVersion { return Err(format!("node_id_vec does not contain the correct set of nodes\nnode_id_vec: {:?}\nexpected: {:?}", node_id_vec, expected_nodes)); } - // Check that the assignment data has the correct length - let expected_assignment_data_len = (1 << PARTITION_BITS) * self.replication_factor; - if self.ring_assignment_data.len() != expected_assignment_data_len { - return Err(format!( - "ring_assignment_data has incorrect length {} instead of {}", - self.ring_assignment_data.len(), - expected_assignment_data_len - )); - } - // Check that the assigned nodes are correct identifiers // of nodes that are assigned a role // and that role is not the role of a gateway nodes From 46007bf01dd2e5b489d145ca0a5499ffa7257b96 Mon Sep 17 00:00:00 2001 From: Alex Auvolat Date: Wed, 15 Nov 2023 12:56:52 +0100 Subject: [PATCH 103/538] integration test: print stdout and stderr on subcommand crash --- src/garage/tests/common/ext/process.rs | 44 +++++++------------------- src/garage/tests/common/garage.rs | 2 +- 2 files changed, 12 insertions(+), 34 deletions(-) diff --git a/src/garage/tests/common/ext/process.rs b/src/garage/tests/common/ext/process.rs index ba533b6c..8e20bf7c 100644 --- a/src/garage/tests/common/ext/process.rs +++ b/src/garage/tests/common/ext/process.rs @@ -14,42 +14,20 @@ impl CommandExt for process::Command { } fn expect_success_status(&mut self, msg: &str) -> process::ExitStatus { - let status = self.status().expect(msg); - status.expect_success(msg); - status + self.expect_success_output(msg).status } fn expect_success_output(&mut self, msg: &str) -> process::Output { let output = self.output().expect(msg); - output.expect_success(msg); + if !output.status.success() { + panic!( + "{}: command {:?} exited with error {:?}\nSTDOUT: {}\nSTDERR: {}", + msg, + self, + output.status.code(), + String::from_utf8_lossy(&output.stdout), + String::from_utf8_lossy(&output.stderr) + ); + } output } } - -pub trait OutputExt { - fn expect_success(&self, msg: &str); -} - -impl OutputExt for process::Output { - fn expect_success(&self, msg: &str) { - self.status.expect_success(msg) - } -} - -pub trait ExitStatusExt { - fn expect_success(&self, msg: &str); -} - -impl ExitStatusExt for process::ExitStatus { - fn expect_success(&self, msg: &str) { - if !self.success() { - match self.code() { - Some(code) => panic!( - "Command exited with code {code}: {msg}", - code = code, - msg = msg - ), - None => panic!("Command exited with signal: {msg}", msg = msg), - } - } - } -} diff --git a/src/garage/tests/common/garage.rs b/src/garage/tests/common/garage.rs index d1f0867a..ebc82f37 100644 --- a/src/garage/tests/common/garage.rs +++ b/src/garage/tests/common/garage.rs @@ -96,7 +96,7 @@ api_bind_addr = "127.0.0.1:{admin_port}" .arg("server") .stdout(stdout) .stderr(stderr) - .env("RUST_LOG", "garage=info,garage_api=trace") + .env("RUST_LOG", "garage=debug,garage_api=trace") .spawn() .expect("Could not start garage"); From acd49de9f97bd27409232691262bd5827983388d Mon Sep 17 00:00:00 2001 From: Alex Auvolat Date: Wed, 15 Nov 2023 13:07:42 +0100 Subject: [PATCH 104/538] rpc: fix write set quorums --- src/api/common_error.rs | 8 ++------ src/model/k2v/rpc.rs | 2 +- src/rpc/rpc_helper.rs | 18 +++++++++++++++--- src/util/error.rs | 7 ++++--- 4 files changed, 22 insertions(+), 13 deletions(-) diff --git a/src/api/common_error.rs b/src/api/common_error.rs index 20f9f266..ecb22fd8 100644 --- a/src/api/common_error.rs +++ b/src/api/common_error.rs @@ -53,9 +53,7 @@ impl CommonError { pub fn http_status_code(&self) -> StatusCode { match self { CommonError::InternalError( - GarageError::Timeout - | GarageError::RemoteError(_) - | GarageError::Quorum(_, _, _, _), + GarageError::Timeout | GarageError::RemoteError(_) | GarageError::Quorum(..), ) => StatusCode::SERVICE_UNAVAILABLE, CommonError::InternalError(_) | CommonError::Hyper(_) | CommonError::Http(_) => { StatusCode::INTERNAL_SERVER_ERROR @@ -72,9 +70,7 @@ impl CommonError { match self { CommonError::Forbidden(_) => "AccessDenied", CommonError::InternalError( - GarageError::Timeout - | GarageError::RemoteError(_) - | GarageError::Quorum(_, _, _, _), + GarageError::Timeout | GarageError::RemoteError(_) | GarageError::Quorum(..), ) => "ServiceUnavailable", CommonError::InternalError(_) | CommonError::Hyper(_) | CommonError::Http(_) => { "InternalError" diff --git a/src/model/k2v/rpc.rs b/src/model/k2v/rpc.rs index 863a068a..3c759181 100644 --- a/src/model/k2v/rpc.rs +++ b/src/model/k2v/rpc.rs @@ -344,7 +344,7 @@ impl K2VRpcHandler { } if errors.len() > nodes.len() - quorum { let errors = errors.iter().map(|e| format!("{}", e)).collect::>(); - return Err(Error::Quorum(quorum, resps.len(), nodes.len(), errors).into()); + return Err(Error::Quorum(quorum, None, resps.len(), nodes.len(), errors).into()); } // Take all returned items into account to produce the response. diff --git a/src/rpc/rpc_helper.rs b/src/rpc/rpc_helper.rs index 12d073b6..1bad495b 100644 --- a/src/rpc/rpc_helper.rs +++ b/src/rpc/rpc_helper.rs @@ -327,7 +327,13 @@ impl RpcHelper { Ok(successes) } else { let errors = errors.iter().map(|e| format!("{}", e)).collect::>(); - Err(Error::Quorum(quorum, successes.len(), to.len(), errors)) + Err(Error::Quorum( + quorum, + None, + successes.len(), + to.len(), + errors, + )) } } @@ -469,7 +475,7 @@ impl RpcHelper { } } - if set_counters.iter().all(|x| x.0 > quorum) { + if set_counters.iter().all(|x| x.0 >= quorum) { // Success // Continue all other requets in background @@ -492,6 +498,12 @@ impl RpcHelper { // Failure, could not get quorum let errors = errors.iter().map(|e| format!("{}", e)).collect::>(); - Err(Error::Quorum(quorum, successes.len(), peers.len(), errors)) + Err(Error::Quorum( + quorum, + Some(to_sets.len()), + successes.len(), + peers.len(), + errors, + )) } } diff --git a/src/util/error.rs b/src/util/error.rs index 3fcee71d..be7cdfdb 100644 --- a/src/util/error.rs +++ b/src/util/error.rs @@ -55,13 +55,14 @@ pub enum Error { Timeout, #[error( - display = "Could not reach quorum of {}. {} of {} request succeeded, others returned errors: {:?}", + display = "Could not reach quorum of {} (sets={:?}). {} of {} request succeeded, others returned errors: {:?}", _0, _1, _2, - _3 + _3, + _4 )] - Quorum(usize, usize, usize, Vec), + Quorum(usize, Option, usize, usize, Vec), #[error(display = "Unexpected RPC message: {}", _0)] UnexpectedRpcMessage(String), From 65066c70640371cc318faddfb4c05c96de18e86d Mon Sep 17 00:00:00 2001 From: Alex Auvolat Date: Wed, 15 Nov 2023 13:28:30 +0100 Subject: [PATCH 105/538] layout: wip cache global mins --- src/rpc/layout/history.rs | 46 +++++++++++++++++++++++---------------- src/rpc/layout/manager.rs | 6 ++--- src/rpc/layout/schema.rs | 36 ++++++++++++++++++++++-------- 3 files changed, 57 insertions(+), 31 deletions(-) diff --git a/src/rpc/layout/history.rs b/src/rpc/layout/history.rs index 2346b14a..1684918e 100644 --- a/src/rpc/layout/history.rs +++ b/src/rpc/layout/history.rs @@ -9,6 +9,7 @@ use garage_util::error::*; use super::schema::*; use super::*; + impl LayoutHistory { pub fn new(replication_factor: usize) -> Self { let version = LayoutVersion::new(replication_factor); @@ -49,7 +50,7 @@ impl LayoutHistory { // ------------------ who stores what now? --------------- pub fn all_ack(&self) -> u64 { - self.calculate_global_min(&self.update_trackers.ack_map) + self.update_trackers.ack_map.current_min } pub fn min_stored(&self) -> u64 { @@ -91,7 +92,7 @@ impl LayoutHistory { } pub fn read_nodes_of(&self, position: &Hash) -> Vec { - let sync_min = self.calculate_global_min(&self.update_trackers.sync_map); + let sync_min = self.update_trackers.sync_map.current_min; let version = self .versions .iter() @@ -122,7 +123,7 @@ impl LayoutHistory { // ------------------ update tracking --------------- - pub(crate) fn update_trackers(&mut self, node_id: Uuid) { + pub(crate) fn update_trackers_of(&mut self, node_id: Uuid) { // Ensure trackers for this node's values are up-to-date // 1. Acknowledge the last layout version in the history @@ -138,6 +139,9 @@ impl LayoutHistory { // 4. Cleanup layout versions that are not needed anymore self.cleanup_old_versions(); + // 5. Recalculate global minima + self.update_trackers_min(); + info!("ack_map: {:?}", self.update_trackers.ack_map); info!("sync_map: {:?}", self.update_trackers.sync_map); info!("sync_ack_map: {:?}", self.update_trackers.sync_ack_map); @@ -146,42 +150,41 @@ impl LayoutHistory { self.update_hashes(); } + fn update_trackers_min(&mut self) { + // TODO: for TableFullReplication, counting gateway nodes might be + // necessary? Think about this more. + let storage_nodes = self.all_nongateway_nodes().into_owned(); + let min_version = self.versions.first().unwrap().version; + self.update_trackers.update_min(&storage_nodes, min_version); + } + pub(crate) fn ack_last(&mut self, node: Uuid) { let last_version = self.current().version; self.update_trackers.ack_map.set_max(node, last_version); + self.update_trackers_min(); } pub(crate) fn sync_first(&mut self, node: Uuid) { let first_version = self.versions.first().as_ref().unwrap().version; self.update_trackers.sync_map.set_max(node, first_version); + self.update_trackers_min(); } pub(crate) fn sync_ack(&mut self, node: Uuid) { - self.update_trackers.sync_ack_map.set_max( - node, - self.calculate_global_min(&self.update_trackers.sync_map), - ); + self.update_trackers + .sync_ack_map + .set_max(node, self.update_trackers.sync_map.current_min); + self.update_trackers_min(); } pub(crate) fn cleanup_old_versions(&mut self) { - let min_sync_ack = self.calculate_global_min(&self.update_trackers.sync_ack_map); + let min_sync_ack = self.update_trackers.sync_ack_map.current_min; while self.versions.first().as_ref().unwrap().version < min_sync_ack { let removed = self.versions.remove(0); info!("Layout history: pruning old version {}", removed.version); } } - pub(crate) fn calculate_global_min(&self, tracker: &UpdateTracker) -> u64 { - // TODO: for TableFullReplication, counting gateway nodes might be - // necessary? Think about this more. - let storage_nodes = self.all_nongateway_nodes(); - storage_nodes - .iter() - .map(|x| tracker.0.get(x).copied().unwrap_or(0)) - .min() - .unwrap_or(0) - } - // ================== updates to layout, public interface =================== pub fn merge(&mut self, other: &LayoutHistory) -> bool { @@ -229,6 +232,11 @@ impl LayoutHistory { } } + // Update the current_min value in trackers if anything changed + if changed { + self.update_trackers_min(); + } + // Merge staged layout changes if self.staging != other.staging { self.staging.merge(&other.staging); diff --git a/src/rpc/layout/manager.rs b/src/rpc/layout/manager.rs index ce8b6f61..21ec2d8d 100644 --- a/src/rpc/layout/manager.rs +++ b/src/rpc/layout/manager.rs @@ -74,7 +74,7 @@ impl LayoutManager { } }; - cluster_layout.update_trackers(node_id.into()); + cluster_layout.update_trackers_of(node_id.into()); let layout = Arc::new(RwLock::new(cluster_layout)); let change_notify = Arc::new(Notify::new()); @@ -158,7 +158,7 @@ impl LayoutManager { if !prev_layout_check || adv.check().is_ok() { if layout.merge(adv) { - layout.update_trackers(self.node_id); + layout.update_trackers_of(self.node_id); if prev_layout_check && layout.check().is_err() { panic!("Merged two correct layouts and got an incorrect layout."); } @@ -172,7 +172,7 @@ impl LayoutManager { let mut layout = self.layout.write().unwrap(); if layout.update_trackers != *adv { if layout.update_trackers.merge(adv) { - layout.update_trackers(self.node_id); + layout.update_trackers_of(self.node_id); return Some(layout.update_trackers.clone()); } } diff --git a/src/rpc/layout/schema.rs b/src/rpc/layout/schema.rs index 79440a47..969f5a0b 100644 --- a/src/rpc/layout/schema.rs +++ b/src/rpc/layout/schema.rs @@ -260,7 +260,10 @@ mod v010 { /// The history of cluster layouts #[derive(Clone, Debug, Serialize, Deserialize, Default, PartialEq)] - pub struct UpdateTracker(pub BTreeMap); + pub struct UpdateTracker { + pub values: BTreeMap, + pub current_min: u64, + } impl garage_util::migrate::Migrate for LayoutHistory { const VERSION_MARKER: &'static [u8] = b"G010lh"; @@ -290,14 +293,15 @@ mod v010 { nongateway_node_count, ring_assignment_data: previous.ring_assignment_data, }; - let update_tracker = UpdateTracker( - version + let update_tracker = UpdateTracker { + values: version .nongateway_nodes() .iter() .copied() .map(|x| (x, version.version)) .collect::>(), - ); + current_min: 0, + }; let staging = LayoutStaging { parameters: previous.staging_parameters, roles: previous.staging_roles, @@ -378,14 +382,14 @@ impl core::str::FromStr for ZoneRedundancy { impl UpdateTracker { fn merge(&mut self, other: &UpdateTracker) -> bool { let mut changed = false; - for (k, v) in other.0.iter() { - if let Some(v_mut) = self.0.get_mut(k) { + for (k, v) in other.values.iter() { + if let Some(v_mut) = self.values.get_mut(k) { if *v > *v_mut { *v_mut = *v; changed = true; } } else { - self.0.insert(*k, *v); + self.values.insert(*k, *v); changed = true; } } @@ -393,18 +397,26 @@ impl UpdateTracker { } pub(crate) fn set_max(&mut self, peer: Uuid, value: u64) -> bool { - match self.0.get_mut(&peer) { + match self.values.get_mut(&peer) { Some(e) if *e < value => { *e = value; true } None => { - self.0.insert(peer, value); + self.values.insert(peer, value); true } _ => false, } } + + fn update_min(&mut self, storage_nodes: &[Uuid], min_version: u64) { + self.current_min = storage_nodes + .iter() + .map(|x| self.values.get(x).copied().unwrap_or(min_version)) + .min() + .unwrap_or(min_version) + } } impl UpdateTrackers { @@ -414,4 +426,10 @@ impl UpdateTrackers { let c3 = self.sync_ack_map.merge(&other.sync_ack_map); c1 || c2 || c3 } + + pub(crate) fn update_min(&mut self, storage_nodes: &[Uuid], min_version: u64) { + self.ack_map.update_min(&storage_nodes, min_version); + self.sync_map.update_min(&storage_nodes, min_version); + self.sync_ack_map.update_min(&storage_nodes, min_version); + } } From 393c4d4515e0cdadadc8de8ae2df12e4371cff88 Mon Sep 17 00:00:00 2001 From: Alex Auvolat Date: Wed, 15 Nov 2023 14:20:50 +0100 Subject: [PATCH 106/538] layout: add helper for cached/external values to centralize recomputation --- src/api/admin/cluster.rs | 1 - src/api/k2v/index.rs | 2 +- src/garage/cli/layout.rs | 3 +- src/model/helper/bucket.rs | 2 +- src/model/index_counter.rs | 4 +- src/rpc/layout/history.rs | 327 ++++++++++++++++++++++--------------- src/rpc/layout/manager.rs | 22 +-- src/rpc/layout/schema.rs | 48 ++---- src/rpc/rpc_helper.rs | 6 +- src/rpc/system.rs | 4 +- 10 files changed, 230 insertions(+), 189 deletions(-) diff --git a/src/api/admin/cluster.rs b/src/api/admin/cluster.rs index d912b58f..593bd778 100644 --- a/src/api/admin/cluster.rs +++ b/src/api/admin/cluster.rs @@ -240,7 +240,6 @@ pub async fn handle_update_cluster_layout( .merge(&roles.update_mutator(node, layout::NodeRoleV(new_role))); } - layout.update_hashes(); garage .system .layout_manager diff --git a/src/api/k2v/index.rs b/src/api/k2v/index.rs index c189232a..e8cd1fba 100644 --- a/src/api/k2v/index.rs +++ b/src/api/k2v/index.rs @@ -29,7 +29,7 @@ pub async fn handle_read_index( .system .cluster_layout() .all_nongateway_nodes() - .into_owned(); + .to_vec(); let (partition_keys, more, next_start) = read_range( &garage.k2v.counter_table.table, diff --git a/src/garage/cli/layout.rs b/src/garage/cli/layout.rs index 0f01a37a..51774314 100644 --- a/src/garage/cli/layout.rs +++ b/src/garage/cli/layout.rs @@ -49,7 +49,7 @@ pub async fn cmd_assign_role( }; let mut layout = fetch_layout(rpc_cli, rpc_host).await?; - let all_nodes = layout.all_nodes().into_owned(); + let all_nodes = layout.get_all_nodes(); let added_nodes = args .node_ids @@ -331,7 +331,6 @@ pub async fn send_layout( rpc_host: NodeID, mut layout: LayoutHistory, ) -> Result<(), Error> { - layout.update_hashes(); rpc_cli .call( &rpc_host, diff --git a/src/model/helper/bucket.rs b/src/model/helper/bucket.rs index 2cb53424..efa3e27b 100644 --- a/src/model/helper/bucket.rs +++ b/src/model/helper/bucket.rs @@ -455,7 +455,7 @@ impl<'a> BucketHelper<'a> { .system .cluster_layout() .all_nongateway_nodes() - .into_owned(); + .to_vec(); let k2vindexes = self .0 .k2v diff --git a/src/model/index_counter.rs b/src/model/index_counter.rs index 2d968733..e8702bf1 100644 --- a/src/model/index_counter.rs +++ b/src/model/index_counter.rs @@ -7,7 +7,7 @@ use serde::{Deserialize, Serialize}; use garage_db as db; -use garage_rpc::layout::LayoutHistory; +use garage_rpc::layout::LayoutHelper; use garage_rpc::system::System; use garage_util::background::BackgroundRunner; use garage_util::data::*; @@ -83,7 +83,7 @@ impl Entry for CounterEntry { } impl CounterEntry { - pub fn filtered_values(&self, layout: &LayoutHistory) -> HashMap { + pub fn filtered_values(&self, layout: &LayoutHelper) -> HashMap { let nodes = layout.all_nongateway_nodes(); self.filtered_values_with_nodes(&nodes) } diff --git a/src/rpc/layout/history.rs b/src/rpc/layout/history.rs index 1684918e..b6f0e495 100644 --- a/src/rpc/layout/history.rs +++ b/src/rpc/layout/history.rs @@ -1,5 +1,5 @@ -use std::borrow::Cow; use std::collections::HashSet; +use std::ops::Deref; use garage_util::crdt::{Crdt, Lww, LwwMap}; use garage_util::data::*; @@ -9,95 +9,106 @@ use garage_util::error::*; use super::schema::*; use super::*; +pub struct LayoutHelper { + layout: Option, -impl LayoutHistory { - pub fn new(replication_factor: usize) -> Self { - let version = LayoutVersion::new(replication_factor); + // cached values + ack_map_min: u64, + sync_map_min: u64, - let staging = LayoutStaging { - parameters: Lww::::new(version.parameters), - roles: LwwMap::new(), - }; + all_nodes: Vec, + all_nongateway_nodes: Vec, - let mut ret = LayoutHistory { - versions: vec![version], - update_trackers: Default::default(), - trackers_hash: [0u8; 32].into(), - staging: Lww::raw(0, staging), - staging_hash: [0u8; 32].into(), - }; - ret.update_hashes(); - ret + trackers_hash: Hash, + staging_hash: Hash, +} + +impl Deref for LayoutHelper { + type Target = LayoutHistory; + fn deref(&self) -> &LayoutHistory { + self.layout() + } +} + +impl LayoutHelper { + pub fn new(mut layout: LayoutHistory) -> Self { + layout.cleanup_old_versions(); + + let all_nongateway_nodes = layout.get_all_nongateway_nodes(); + layout.clamp_update_trackers(&all_nongateway_nodes); + + let min_version = layout.min_stored(); + let ack_map_min = layout + .update_trackers + .ack_map + .min(&all_nongateway_nodes, min_version); + let sync_map_min = layout + .update_trackers + .sync_map + .min(&all_nongateway_nodes, min_version); + + let all_nodes = layout.get_all_nodes(); + let trackers_hash = layout.calculate_trackers_hash(); + let staging_hash = layout.calculate_staging_hash(); + + LayoutHelper { + layout: Some(layout), + ack_map_min, + sync_map_min, + all_nodes, + all_nongateway_nodes, + trackers_hash, + staging_hash, + } } - pub fn current(&self) -> &LayoutVersion { - self.versions.last().as_ref().unwrap() + // ------------------ single updating function -------------- + + fn layout(&self) -> &LayoutHistory { + self.layout.as_ref().unwrap() } - pub fn update_hashes(&mut self) { - self.trackers_hash = self.calculate_trackers_hash(); - self.staging_hash = self.calculate_staging_hash(); + pub(crate) fn update(&mut self, f: F) -> bool + where + F: FnOnce(&mut LayoutHistory) -> bool, + { + let changed = f(&mut self.layout.as_mut().unwrap()); + if changed { + *self = Self::new(self.layout.take().unwrap()); + } + changed } - pub(crate) fn calculate_trackers_hash(&self) -> Hash { - blake2sum(&nonversioned_encode(&self.update_trackers).unwrap()[..]) + // ------------------ read helpers --------------- + + pub fn all_nodes(&self) -> &[Uuid] { + &self.all_nodes } - pub(crate) fn calculate_staging_hash(&self) -> Hash { - blake2sum(&nonversioned_encode(&self.staging).unwrap()[..]) + pub fn all_nongateway_nodes(&self) -> &[Uuid] { + &self.all_nongateway_nodes } - // ------------------ who stores what now? --------------- - pub fn all_ack(&self) -> u64 { - self.update_trackers.ack_map.current_min - } - - pub fn min_stored(&self) -> u64 { - self.versions.first().as_ref().unwrap().version + self.ack_map_min } pub fn sync_versions(&self) -> (u64, u64, u64) { - (self.current().version, self.all_ack(), self.min_stored()) - } - - pub fn all_nodes(&self) -> Cow<'_, [Uuid]> { - // TODO: cache this - if self.versions.len() == 1 { - self.versions[0].all_nodes().into() - } else { - let set = self - .versions - .iter() - .map(|x| x.all_nodes()) - .flatten() - .collect::>(); - set.into_iter().copied().collect::>().into() - } - } - - pub fn all_nongateway_nodes(&self) -> Cow<'_, [Uuid]> { - // TODO: cache this - if self.versions.len() == 1 { - self.versions[0].nongateway_nodes().into() - } else { - let set = self - .versions - .iter() - .map(|x| x.nongateway_nodes()) - .flatten() - .collect::>(); - set.into_iter().copied().collect::>().into() - } + ( + self.layout().current().version, + self.all_ack(), + self.layout().min_stored(), + ) } pub fn read_nodes_of(&self, position: &Hash) -> Vec { - let sync_min = self.update_trackers.sync_map.current_min; + let sync_min = self.sync_map_min; let version = self + .layout() .versions .iter() .find(|x| x.version == sync_min) - .or(self.versions.last()) + .or(self.layout().versions.last()) .unwrap(); version .nodes_of(position, version.replication_factor) @@ -105,7 +116,8 @@ impl LayoutHistory { } pub fn write_sets_of(&self, position: &Hash) -> Vec> { - self.versions + self.layout() + .versions .iter() .map(|x| x.nodes_of(position, x.replication_factor).collect()) .collect() @@ -113,7 +125,7 @@ impl LayoutHistory { pub fn storage_nodes_of(&self, position: &Hash) -> Vec { let mut ret = vec![]; - for version in self.versions.iter() { + for version in self.layout().versions.iter() { ret.extend(version.nodes_of(position, version.replication_factor)); } ret.sort(); @@ -121,7 +133,35 @@ impl LayoutHistory { ret } - // ------------------ update tracking --------------- + pub fn trackers_hash(&self) -> Hash { + self.trackers_hash + } + + pub fn staging_hash(&self) -> Hash { + self.staging_hash + } + + // ------------------ helpers for update tracking --------------- + + pub(crate) fn sync_first(&mut self, node: Uuid) { + let first_version = self.versions.first().as_ref().unwrap().version; + self.update(|layout| layout.update_trackers.sync_map.set_max(node, first_version)); + } + + pub(crate) fn sync_ack(&mut self, node: Uuid) { + let sync_map_min = self.sync_map_min; + self.update(|layout| { + layout + .update_trackers + .sync_ack_map + .set_max(node, sync_map_min) + }); + } + + pub(crate) fn ack_last(&mut self, node: Uuid) { + let last_version = self.current().version; + self.update(|layout| layout.update_trackers.ack_map.set_max(node, last_version)); + } pub(crate) fn update_trackers_of(&mut self, node_id: Uuid) { // Ensure trackers for this node's values are up-to-date @@ -136,55 +176,104 @@ impl LayoutHistory { // 3. Acknowledge everyone has synced up to min(self.sync_map) self.sync_ack(node_id); - // 4. Cleanup layout versions that are not needed anymore - self.cleanup_old_versions(); - - // 5. Recalculate global minima - self.update_trackers_min(); - info!("ack_map: {:?}", self.update_trackers.ack_map); info!("sync_map: {:?}", self.update_trackers.sync_map); info!("sync_ack_map: {:?}", self.update_trackers.sync_ack_map); - - // Finally, update hashes - self.update_hashes(); } +} - fn update_trackers_min(&mut self) { - // TODO: for TableFullReplication, counting gateway nodes might be - // necessary? Think about this more. - let storage_nodes = self.all_nongateway_nodes().into_owned(); - let min_version = self.versions.first().unwrap().version; - self.update_trackers.update_min(&storage_nodes, min_version); - } +// ---- - pub(crate) fn ack_last(&mut self, node: Uuid) { - let last_version = self.current().version; - self.update_trackers.ack_map.set_max(node, last_version); - self.update_trackers_min(); - } +impl LayoutHistory { + pub fn new(replication_factor: usize) -> Self { + let version = LayoutVersion::new(replication_factor); - pub(crate) fn sync_first(&mut self, node: Uuid) { - let first_version = self.versions.first().as_ref().unwrap().version; - self.update_trackers.sync_map.set_max(node, first_version); - self.update_trackers_min(); - } + let staging = LayoutStaging { + parameters: Lww::::new(version.parameters), + roles: LwwMap::new(), + }; - pub(crate) fn sync_ack(&mut self, node: Uuid) { - self.update_trackers - .sync_ack_map - .set_max(node, self.update_trackers.sync_map.current_min); - self.update_trackers_min(); - } - - pub(crate) fn cleanup_old_versions(&mut self) { - let min_sync_ack = self.update_trackers.sync_ack_map.current_min; - while self.versions.first().as_ref().unwrap().version < min_sync_ack { - let removed = self.versions.remove(0); - info!("Layout history: pruning old version {}", removed.version); + LayoutHistory { + versions: vec![version], + update_trackers: Default::default(), + staging: Lww::raw(0, staging), } } + // ------------------ who stores what now? --------------- + + pub fn current(&self) -> &LayoutVersion { + self.versions.last().as_ref().unwrap() + } + + pub fn min_stored(&self) -> u64 { + self.versions.first().as_ref().unwrap().version + } + + pub fn get_all_nodes(&self) -> Vec { + if self.versions.len() == 1 { + self.versions[0].all_nodes().to_vec() + } else { + let set = self + .versions + .iter() + .map(|x| x.all_nodes()) + .flatten() + .collect::>(); + set.into_iter().copied().collect::>() + } + } + + fn get_all_nongateway_nodes(&self) -> Vec { + if self.versions.len() == 1 { + self.versions[0].nongateway_nodes().to_vec() + } else { + let set = self + .versions + .iter() + .map(|x| x.nongateway_nodes()) + .flatten() + .collect::>(); + set.into_iter().copied().collect::>() + } + } + + // ---- housekeeping (all invoked by LayoutHelper) ---- + + fn cleanup_old_versions(&mut self) { + loop { + let all_nongateway_nodes = self.get_all_nongateway_nodes(); + let min_version = self.min_stored(); + let sync_ack_map_min = self + .update_trackers + .sync_ack_map + .min(&all_nongateway_nodes, min_version); + if self.min_stored() < sync_ack_map_min { + let removed = self.versions.remove(0); + info!("Layout history: pruning old version {}", removed.version); + } else { + break; + } + } + } + + fn clamp_update_trackers(&mut self, nodes: &[Uuid]) { + let min_v = self.min_stored(); + for node in nodes { + self.update_trackers.ack_map.set_max(*node, min_v); + self.update_trackers.sync_map.set_max(*node, min_v); + self.update_trackers.sync_ack_map.set_max(*node, min_v); + } + } + + fn calculate_trackers_hash(&self) -> Hash { + blake2sum(&nonversioned_encode(&self.update_trackers).unwrap()[..]) + } + + fn calculate_staging_hash(&self) -> Hash { + blake2sum(&nonversioned_encode(&self.staging).unwrap()[..]) + } + // ================== updates to layout, public interface =================== pub fn merge(&mut self, other: &LayoutHistory) -> bool { @@ -221,20 +310,6 @@ impl LayoutHistory { self.versions.remove(0); changed = true; } - if changed { - let min_v = self.versions.first().unwrap().version; - let nodes = self.all_nongateway_nodes().into_owned(); - for node in nodes { - self.update_trackers.ack_map.set_max(node, min_v); - self.update_trackers.sync_map.set_max(node, min_v); - self.update_trackers.sync_ack_map.set_max(node, min_v); - } - } - } - - // Update the current_min value in trackers if anything changed - if changed { - self.update_trackers_min(); } // Merge staged layout changes @@ -280,7 +355,6 @@ To know the correct value of the new layout version, invoke `garage layout show` parameters: self.staging.get().parameters.clone(), roles: LwwMap::new(), }); - self.update_hashes(); Ok((self, msg)) } @@ -290,20 +364,11 @@ To know the correct value of the new layout version, invoke `garage layout show` parameters: Lww::new(self.current().parameters.clone()), roles: LwwMap::new(), }); - self.update_hashes(); Ok(self) } pub fn check(&self) -> Result<(), String> { - // Check that the hash of the staging data is correct - if self.trackers_hash != self.calculate_trackers_hash() { - return Err("trackers_hash is incorrect".into()); - } - if self.staging_hash != self.calculate_staging_hash() { - return Err("staging_hash is incorrect".into()); - } - for version in self.versions.iter() { version.check()?; } diff --git a/src/rpc/layout/manager.rs b/src/rpc/layout/manager.rs index 21ec2d8d..e270ad21 100644 --- a/src/rpc/layout/manager.rs +++ b/src/rpc/layout/manager.rs @@ -24,7 +24,7 @@ pub struct LayoutManager { replication_factor: usize, persist_cluster_layout: Persister, - layout: Arc>, + layout: Arc>, pub(crate) change_notify: Arc, table_sync_version: Mutex>, @@ -54,7 +54,7 @@ impl LayoutManager { let persist_cluster_layout: Persister = Persister::new(&config.metadata_dir, "cluster_layout"); - let mut cluster_layout = match persist_cluster_layout.load() { + let cluster_layout = match persist_cluster_layout.load() { Ok(x) => { if x.current().replication_factor != replication_factor { return Err(Error::Message(format!( @@ -74,6 +74,7 @@ impl LayoutManager { } }; + let mut cluster_layout = LayoutHelper::new(cluster_layout); cluster_layout.update_trackers_of(node_id.into()); let layout = Arc::new(RwLock::new(cluster_layout)); @@ -100,7 +101,7 @@ impl LayoutManager { // ---- PUBLIC INTERFACE ---- - pub fn layout(&self) -> RwLockReadGuard<'_, LayoutHistory> { + pub fn layout(&self) -> RwLockReadGuard<'_, LayoutHelper> { self.layout.read().unwrap() } @@ -108,8 +109,8 @@ impl LayoutManager { let layout = self.layout(); LayoutStatus { cluster_layout_version: layout.current().version, - cluster_layout_trackers_hash: layout.trackers_hash, - cluster_layout_staging_hash: layout.staging_hash, + cluster_layout_trackers_hash: layout.trackers_hash(), + cluster_layout_staging_hash: layout.staging_hash(), } } @@ -137,13 +138,8 @@ impl LayoutManager { drop(table_sync_version); let mut layout = self.layout.write().unwrap(); - if layout - .update_trackers - .sync_map - .set_max(self.node_id, sync_until) - { + if layout.update(|l| l.update_trackers.sync_map.set_max(self.node_id, sync_until)) { debug!("sync_until updated to {}", sync_until); - layout.update_hashes(); self.broadcast_update(SystemRpc::AdvertiseClusterLayoutTrackers( layout.update_trackers.clone(), )); @@ -157,7 +153,7 @@ impl LayoutManager { let prev_layout_check = layout.check().is_ok(); if !prev_layout_check || adv.check().is_ok() { - if layout.merge(adv) { + if layout.update(|l| l.merge(adv)) { layout.update_trackers_of(self.node_id); if prev_layout_check && layout.check().is_err() { panic!("Merged two correct layouts and got an incorrect layout."); @@ -171,7 +167,7 @@ impl LayoutManager { fn merge_layout_trackers(&self, adv: &UpdateTrackers) -> Option { let mut layout = self.layout.write().unwrap(); if layout.update_trackers != *adv { - if layout.update_trackers.merge(adv) { + if layout.update(|l| l.update_trackers.merge(adv)) { layout.update_trackers_of(self.node_id); return Some(layout.update_trackers.clone()); } diff --git a/src/rpc/layout/schema.rs b/src/rpc/layout/schema.rs index 969f5a0b..00a2c017 100644 --- a/src/rpc/layout/schema.rs +++ b/src/rpc/layout/schema.rs @@ -188,7 +188,7 @@ mod v010 { use super::v09; use crate::layout::CompactNodeType; use garage_util::crdt::{Lww, LwwMap}; - use garage_util::data::{Hash, Uuid}; + use garage_util::data::Uuid; use serde::{Deserialize, Serialize}; use std::collections::BTreeMap; pub use v09::{LayoutParameters, NodeRole, NodeRoleV, ZoneRedundancy}; @@ -202,13 +202,9 @@ mod v010 { /// Update trackers pub update_trackers: UpdateTrackers, - /// Hash of the update trackers - pub trackers_hash: Hash, /// Staged changes for the next version pub staging: Lww, - /// Hash of the serialized staging_parameters + staging_roles - pub staging_hash: Hash, } /// A version of the layout of the cluster, i.e. the list of roles @@ -260,10 +256,7 @@ mod v010 { /// The history of cluster layouts #[derive(Clone, Debug, Serialize, Deserialize, Default, PartialEq)] - pub struct UpdateTracker { - pub values: BTreeMap, - pub current_min: u64, - } + pub struct UpdateTracker(pub BTreeMap); impl garage_util::migrate::Migrate for LayoutHistory { const VERSION_MARKER: &'static [u8] = b"G010lh"; @@ -293,32 +286,27 @@ mod v010 { nongateway_node_count, ring_assignment_data: previous.ring_assignment_data, }; - let update_tracker = UpdateTracker { - values: version + let update_tracker = UpdateTracker( + version .nongateway_nodes() .iter() .copied() .map(|x| (x, version.version)) .collect::>(), - current_min: 0, - }; + ); let staging = LayoutStaging { parameters: previous.staging_parameters, roles: previous.staging_roles, }; - let mut ret = Self { + Self { versions: vec![version], update_trackers: UpdateTrackers { ack_map: update_tracker.clone(), sync_map: update_tracker.clone(), sync_ack_map: update_tracker.clone(), }, - trackers_hash: [0u8; 32].into(), staging: Lww::raw(previous.version, staging), - staging_hash: [0u8; 32].into(), - }; - ret.update_hashes(); - ret + } } } } @@ -382,14 +370,14 @@ impl core::str::FromStr for ZoneRedundancy { impl UpdateTracker { fn merge(&mut self, other: &UpdateTracker) -> bool { let mut changed = false; - for (k, v) in other.values.iter() { - if let Some(v_mut) = self.values.get_mut(k) { + for (k, v) in other.0.iter() { + if let Some(v_mut) = self.0.get_mut(k) { if *v > *v_mut { *v_mut = *v; changed = true; } } else { - self.values.insert(*k, *v); + self.0.insert(*k, *v); changed = true; } } @@ -397,23 +385,23 @@ impl UpdateTracker { } pub(crate) fn set_max(&mut self, peer: Uuid, value: u64) -> bool { - match self.values.get_mut(&peer) { + match self.0.get_mut(&peer) { Some(e) if *e < value => { *e = value; true } None => { - self.values.insert(peer, value); + self.0.insert(peer, value); true } _ => false, } } - fn update_min(&mut self, storage_nodes: &[Uuid], min_version: u64) { - self.current_min = storage_nodes + pub(crate) fn min(&self, storage_nodes: &[Uuid], min_version: u64) -> u64 { + storage_nodes .iter() - .map(|x| self.values.get(x).copied().unwrap_or(min_version)) + .map(|x| self.0.get(x).copied().unwrap_or(min_version)) .min() .unwrap_or(min_version) } @@ -426,10 +414,4 @@ impl UpdateTrackers { let c3 = self.sync_ack_map.merge(&other.sync_ack_map); c1 || c2 || c3 } - - pub(crate) fn update_min(&mut self, storage_nodes: &[Uuid], min_version: u64) { - self.ack_map.update_min(&storage_nodes, min_version); - self.sync_map.update_min(&storage_nodes, min_version); - self.sync_ack_map.update_min(&storage_nodes, min_version); - } } diff --git a/src/rpc/rpc_helper.rs b/src/rpc/rpc_helper.rs index 1bad495b..e269ddaa 100644 --- a/src/rpc/rpc_helper.rs +++ b/src/rpc/rpc_helper.rs @@ -26,7 +26,7 @@ use garage_util::data::*; use garage_util::error::Error; use garage_util::metrics::RecordDuration; -use crate::layout::LayoutHistory; +use crate::layout::LayoutHelper; use crate::metrics::RpcMetrics; // Default RPC timeout = 5 minutes @@ -90,7 +90,7 @@ pub struct RpcHelper(Arc); struct RpcHelperInner { our_node_id: Uuid, fullmesh: Arc, - layout: Arc>, + layout: Arc>, metrics: RpcMetrics, rpc_timeout: Duration, } @@ -99,7 +99,7 @@ impl RpcHelper { pub(crate) fn new( our_node_id: Uuid, fullmesh: Arc, - layout: Arc>, + layout: Arc>, rpc_timeout: Option, ) -> Self { let metrics = RpcMetrics::new(); diff --git a/src/rpc/system.rs b/src/rpc/system.rs index 31d78bf6..d74dc2a1 100644 --- a/src/rpc/system.rs +++ b/src/rpc/system.rs @@ -34,7 +34,7 @@ use crate::consul::ConsulDiscovery; #[cfg(feature = "kubernetes-discovery")] use crate::kubernetes::*; use crate::layout::manager::{LayoutManager, LayoutStatus}; -use crate::layout::{self, LayoutHistory, NodeRoleV}; +use crate::layout::{self, LayoutHelper, LayoutHistory, NodeRoleV}; use crate::replication_mode::*; use crate::rpc_helper::*; @@ -350,7 +350,7 @@ impl System { // ---- Public utilities / accessors ---- - pub fn cluster_layout(&self) -> RwLockReadGuard<'_, LayoutHistory> { + pub fn cluster_layout(&self) -> RwLockReadGuard<'_, LayoutHelper> { self.layout_manager.layout() } From 33c8a489b0a9c0e869282bfc19c548f5a3e02e8c Mon Sep 17 00:00:00 2001 From: Alex Auvolat Date: Wed, 15 Nov 2023 15:40:44 +0100 Subject: [PATCH 107/538] layou: implement ack locking --- src/block/manager.rs | 2 +- src/garage/cli/layout.rs | 2 +- src/rpc/layout/history.rs | 100 ++++++++++++++++++++-------- src/rpc/layout/manager.rs | 74 ++++++++++++++++++-- src/rpc/layout/mod.rs | 1 + src/table/replication/fullcopy.rs | 4 +- src/table/replication/parameters.rs | 4 +- src/table/replication/sharded.rs | 6 +- src/table/sync.rs | 9 +-- src/table/table.rs | 2 +- 10 files changed, 157 insertions(+), 47 deletions(-) diff --git a/src/block/manager.rs b/src/block/manager.rs index 0ca8bc31..be2e4951 100644 --- a/src/block/manager.rs +++ b/src/block/manager.rs @@ -366,7 +366,7 @@ impl BlockManager { .rpc_helper() .try_write_many_sets( &self.endpoint, - &who, + who.as_ref(), put_block_rpc, RequestStrategy::with_priority(PRIO_NORMAL | PRIO_SECONDARY) .with_quorum(self.replication.write_quorum()), diff --git a/src/garage/cli/layout.rs b/src/garage/cli/layout.rs index 51774314..0be8278f 100644 --- a/src/garage/cli/layout.rs +++ b/src/garage/cli/layout.rs @@ -329,7 +329,7 @@ pub async fn fetch_layout( pub async fn send_layout( rpc_cli: &Endpoint, rpc_host: NodeID, - mut layout: LayoutHistory, + layout: LayoutHistory, ) -> Result<(), Error> { rpc_cli .call( diff --git a/src/rpc/layout/history.rs b/src/rpc/layout/history.rs index b6f0e495..dd38efa7 100644 --- a/src/rpc/layout/history.rs +++ b/src/rpc/layout/history.rs @@ -1,5 +1,7 @@ +use std::collections::HashMap; use std::collections::HashSet; use std::ops::Deref; +use std::sync::atomic::{AtomicUsize, Ordering}; use garage_util::crdt::{Crdt, Lww, LwwMap}; use garage_util::data::*; @@ -21,6 +23,11 @@ pub struct LayoutHelper { trackers_hash: Hash, staging_hash: Hash, + + // ack lock: counts in-progress write operations for each + // layout version ; we don't increase the ack update tracker + // while this lock is nonzero + pub(crate) ack_lock: HashMap, } impl Deref for LayoutHelper { @@ -31,7 +38,7 @@ impl Deref for LayoutHelper { } impl LayoutHelper { - pub fn new(mut layout: LayoutHistory) -> Self { + pub fn new(mut layout: LayoutHistory, mut ack_lock: HashMap) -> Self { layout.cleanup_old_versions(); let all_nongateway_nodes = layout.get_all_nongateway_nodes(); @@ -51,6 +58,11 @@ impl LayoutHelper { let trackers_hash = layout.calculate_trackers_hash(); let staging_hash = layout.calculate_staging_hash(); + ack_lock.retain(|_, cnt| *cnt.get_mut() > 0); + ack_lock + .entry(layout.current().version) + .or_insert(AtomicUsize::new(0)); + LayoutHelper { layout: Some(layout), ack_map_min, @@ -59,6 +71,7 @@ impl LayoutHelper { all_nongateway_nodes, trackers_hash, staging_hash, + ack_lock, } } @@ -74,7 +87,10 @@ impl LayoutHelper { { let changed = f(&mut self.layout.as_mut().unwrap()); if changed { - *self = Self::new(self.layout.take().unwrap()); + *self = Self::new( + self.layout.take().unwrap(), + std::mem::take(&mut self.ack_lock), + ); } changed } @@ -115,7 +131,7 @@ impl LayoutHelper { .collect() } - pub fn write_sets_of(&self, position: &Hash) -> Vec> { + pub(crate) fn write_sets_of(&self, position: &Hash) -> Vec> { self.layout() .versions .iter() @@ -143,42 +159,72 @@ impl LayoutHelper { // ------------------ helpers for update tracking --------------- - pub(crate) fn sync_first(&mut self, node: Uuid) { - let first_version = self.versions.first().as_ref().unwrap().version; - self.update(|layout| layout.update_trackers.sync_map.set_max(node, first_version)); + pub(crate) fn update_trackers(&mut self, local_node_id: Uuid) { + // Ensure trackers for this node's values are up-to-date + + // 1. Acknowledge the last layout version which is not currently + // locked by an in-progress write operation + self.ack_max_free(local_node_id); + + // 2. Assume the data on this node is sync'ed up at least to + // the first layout version in the history + self.sync_first(local_node_id); + + // 3. Acknowledge everyone has synced up to min(self.sync_map) + self.sync_ack(local_node_id); + + info!("ack_map: {:?}", self.update_trackers.ack_map); + info!("sync_map: {:?}", self.update_trackers.sync_map); + info!("sync_ack_map: {:?}", self.update_trackers.sync_ack_map); } - pub(crate) fn sync_ack(&mut self, node: Uuid) { + fn sync_first(&mut self, local_node_id: Uuid) { + let first_version = self.versions.first().as_ref().unwrap().version; + self.update(|layout| { + layout + .update_trackers + .sync_map + .set_max(local_node_id, first_version) + }); + } + + fn sync_ack(&mut self, local_node_id: Uuid) { let sync_map_min = self.sync_map_min; self.update(|layout| { layout .update_trackers .sync_ack_map - .set_max(node, sync_map_min) + .set_max(local_node_id, sync_map_min) }); } - pub(crate) fn ack_last(&mut self, node: Uuid) { - let last_version = self.current().version; - self.update(|layout| layout.update_trackers.ack_map.set_max(node, last_version)); + pub(crate) fn ack_max_free(&mut self, local_node_id: Uuid) -> bool { + let max_ack = self.max_free_ack(); + let changed = self.update(|layout| { + layout + .update_trackers + .ack_map + .set_max(local_node_id, max_ack) + }); + if changed { + info!("ack_until updated to {}", max_ack); + } + changed } - pub(crate) fn update_trackers_of(&mut self, node_id: Uuid) { - // Ensure trackers for this node's values are up-to-date - - // 1. Acknowledge the last layout version in the history - self.ack_last(node_id); - - // 2. Assume the data on this node is sync'ed up at least to - // the first layout version in the history - self.sync_first(node_id); - - // 3. Acknowledge everyone has synced up to min(self.sync_map) - self.sync_ack(node_id); - - info!("ack_map: {:?}", self.update_trackers.ack_map); - info!("sync_map: {:?}", self.update_trackers.sync_map); - info!("sync_ack_map: {:?}", self.update_trackers.sync_ack_map); + pub(crate) fn max_free_ack(&self) -> u64 { + self.layout() + .versions + .iter() + .map(|x| x.version) + .take_while(|v| { + self.ack_lock + .get(v) + .map(|x| x.load(Ordering::Relaxed) == 0) + .unwrap_or(true) + }) + .max() + .unwrap_or(self.min_stored()) } } diff --git a/src/rpc/layout/manager.rs b/src/rpc/layout/manager.rs index e270ad21..4e073d1f 100644 --- a/src/rpc/layout/manager.rs +++ b/src/rpc/layout/manager.rs @@ -1,5 +1,5 @@ use std::collections::HashMap; -use std::sync::{Arc, Mutex, RwLock, RwLockReadGuard}; +use std::sync::{atomic::Ordering, Arc, Mutex, RwLock, RwLockReadGuard}; use std::time::Duration; use serde::{Deserialize, Serialize}; @@ -74,8 +74,8 @@ impl LayoutManager { } }; - let mut cluster_layout = LayoutHelper::new(cluster_layout); - cluster_layout.update_trackers_of(node_id.into()); + let mut cluster_layout = LayoutHelper::new(cluster_layout, Default::default()); + cluster_layout.update_trackers(node_id.into()); let layout = Arc::new(RwLock::new(cluster_layout)); let change_notify = Arc::new(Notify::new()); @@ -139,13 +139,36 @@ impl LayoutManager { let mut layout = self.layout.write().unwrap(); if layout.update(|l| l.update_trackers.sync_map.set_max(self.node_id, sync_until)) { - debug!("sync_until updated to {}", sync_until); + info!("sync_until updated to {}", sync_until); self.broadcast_update(SystemRpc::AdvertiseClusterLayoutTrackers( layout.update_trackers.clone(), )); } } + fn ack_new_version(self: &Arc) { + let mut layout = self.layout.write().unwrap(); + if layout.ack_max_free(self.node_id) { + self.broadcast_update(SystemRpc::AdvertiseClusterLayoutTrackers( + layout.update_trackers.clone(), + )); + } + } + + // ---- ACK LOCKING ---- + + pub fn write_sets_of(self: &Arc, position: &Hash) -> WriteLock>> { + let layout = self.layout(); + let version = layout.current().version; + let nodes = layout.write_sets_of(position); + layout + .ack_lock + .get(&version) + .unwrap() + .fetch_add(1, Ordering::Relaxed); + WriteLock::new(version, self, nodes) + } + // ---- INTERNALS --- fn merge_layout(&self, adv: &LayoutHistory) -> Option { @@ -154,7 +177,7 @@ impl LayoutManager { if !prev_layout_check || adv.check().is_ok() { if layout.update(|l| l.merge(adv)) { - layout.update_trackers_of(self.node_id); + layout.update_trackers(self.node_id); if prev_layout_check && layout.check().is_err() { panic!("Merged two correct layouts and got an incorrect layout."); } @@ -168,7 +191,7 @@ impl LayoutManager { let mut layout = self.layout.write().unwrap(); if layout.update_trackers != *adv { if layout.update(|l| l.update_trackers.merge(adv)) { - layout.update_trackers_of(self.node_id); + layout.update_trackers(self.node_id); return Some(layout.update_trackers.clone()); } } @@ -317,3 +340,42 @@ impl LayoutManager { Ok(SystemRpc::Ok) } } + +// ---- ack lock ---- + +pub struct WriteLock { + layout_version: u64, + layout_manager: Arc, + value: T, +} + +impl WriteLock { + fn new(version: u64, layout_manager: &Arc, value: T) -> Self { + Self { + layout_version: version, + layout_manager: layout_manager.clone(), + value, + } + } +} + +impl AsRef for WriteLock { + fn as_ref(&self) -> &T { + &self.value + } +} + +impl Drop for WriteLock { + fn drop(&mut self) { + let layout = self.layout_manager.layout(); // acquire read lock + if let Some(counter) = layout.ack_lock.get(&self.layout_version) { + let prev_lock = counter.fetch_sub(1, Ordering::Relaxed); + if prev_lock == 1 && layout.current().version > self.layout_version { + drop(layout); // release read lock, write lock will be acquired + self.layout_manager.ack_new_version(); + } + } else { + error!("Could not find ack lock counter for layout version {}. This probably indicates a bug in Garage.", self.layout_version); + } + } +} diff --git a/src/rpc/layout/mod.rs b/src/rpc/layout/mod.rs index 577b32fb..859287c8 100644 --- a/src/rpc/layout/mod.rs +++ b/src/rpc/layout/mod.rs @@ -11,6 +11,7 @@ pub mod manager; // ---- re-exports ---- pub use history::*; +pub use manager::WriteLock; pub use schema::*; pub use version::*; diff --git a/src/table/replication/fullcopy.rs b/src/table/replication/fullcopy.rs index cb5471af..df930224 100644 --- a/src/table/replication/fullcopy.rs +++ b/src/table/replication/fullcopy.rs @@ -27,6 +27,8 @@ pub struct TableFullReplication { } impl TableReplication for TableFullReplication { + type WriteSets = Vec>; + fn storage_nodes(&self, _hash: &Hash) -> Vec { let layout = self.system.cluster_layout(); layout.current().all_nodes().to_vec() @@ -39,7 +41,7 @@ impl TableReplication for TableFullReplication { 1 } - fn write_sets(&self, hash: &Hash) -> Vec> { + fn write_sets(&self, hash: &Hash) -> Self::WriteSets { vec![self.storage_nodes(hash)] } fn write_quorum(&self) -> usize { diff --git a/src/table/replication/parameters.rs b/src/table/replication/parameters.rs index 2f842409..a4e701bb 100644 --- a/src/table/replication/parameters.rs +++ b/src/table/replication/parameters.rs @@ -3,6 +3,8 @@ use garage_util::data::*; /// Trait to describe how a table shall be replicated pub trait TableReplication: Send + Sync + 'static { + type WriteSets: AsRef>> + Send + Sync + 'static; + // See examples in table_sharded.rs and table_fullcopy.rs // To understand various replication methods @@ -15,7 +17,7 @@ pub trait TableReplication: Send + Sync + 'static { fn read_quorum(&self) -> usize; /// Which nodes to send writes to - fn write_sets(&self, hash: &Hash) -> Vec>; + fn write_sets(&self, hash: &Hash) -> Self::WriteSets; /// Responses needed to consider a write succesfull in each set fn write_quorum(&self) -> usize; fn max_write_errors(&self) -> usize; diff --git a/src/table/replication/sharded.rs b/src/table/replication/sharded.rs index 1320a189..2a16bc0c 100644 --- a/src/table/replication/sharded.rs +++ b/src/table/replication/sharded.rs @@ -25,6 +25,8 @@ pub struct TableShardedReplication { } impl TableReplication for TableShardedReplication { + type WriteSets = WriteLock>>; + fn storage_nodes(&self, hash: &Hash) -> Vec { self.system.cluster_layout().storage_nodes_of(hash) } @@ -36,8 +38,8 @@ impl TableReplication for TableShardedReplication { self.read_quorum } - fn write_sets(&self, hash: &Hash) -> Vec> { - self.system.cluster_layout().write_sets_of(hash) + fn write_sets(&self, hash: &Hash) -> Self::WriteSets { + self.system.layout_manager.write_sets_of(hash) } fn write_quorum(&self) -> usize { self.write_quorum diff --git a/src/table/sync.rs b/src/table/sync.rs index b67cdd79..efeac402 100644 --- a/src/table/sync.rs +++ b/src/table/sync.rs @@ -173,12 +173,7 @@ impl TableSyncer { } if !items.is_empty() { - let nodes = self - .data - .replication - .storage_nodes(begin) - .into_iter() - .collect::>(); + let nodes = self.data.replication.storage_nodes(begin); if nodes.contains(&self.system.id) { warn!( "({}) Interrupting offload as partitions seem to have changed", @@ -202,7 +197,7 @@ impl TableSyncer { end, counter ); - self.offload_items(&items, &nodes[..]).await?; + self.offload_items(&items, &nodes).await?; } else { break; } diff --git a/src/table/table.rs b/src/table/table.rs index c2efaeaf..5ec9eb0a 100644 --- a/src/table/table.rs +++ b/src/table/table.rs @@ -128,7 +128,7 @@ impl Table { .rpc_helper() .try_write_many_sets( &self.endpoint, - &who, + who.as_ref(), rpc, RequestStrategy::with_priority(PRIO_NORMAL) .with_quorum(self.data.replication.write_quorum()), From d4df03424f1c7f3cc1eaba9e16d2e1d049131b97 Mon Sep 17 00:00:00 2001 From: Alex Auvolat Date: Wed, 15 Nov 2023 15:56:57 +0100 Subject: [PATCH 108/538] layout: fix test --- src/rpc/layout/test.rs | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/rpc/layout/test.rs b/src/rpc/layout/test.rs index e9639073..bb072c97 100644 --- a/src/rpc/layout/test.rs +++ b/src/rpc/layout/test.rs @@ -113,8 +113,6 @@ fn update_layout( staging.parameters.update(LayoutParameters { zone_redundancy: ZoneRedundancy::AtLeast(zone_redundancy), }); - - cl.update_hashes(); } #[test] From 18e58111593d5bf978d8c603e0dc2633ffcd91c4 Mon Sep 17 00:00:00 2001 From: Alex Auvolat Date: Thu, 16 Nov 2023 12:57:21 +0100 Subject: [PATCH 109/538] jepsen: add patch and use more complete names --- script/jepsen.garage/src/jepsen/garage.clj | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/script/jepsen.garage/src/jepsen/garage.clj b/script/jepsen.garage/src/jepsen/garage.clj index 17363c9d..48659d6c 100644 --- a/script/jepsen.garage/src/jepsen/garage.clj +++ b/script/jepsen.garage/src/jepsen/garage.clj @@ -35,7 +35,8 @@ "A map of patch names to Garage builds" {"default" "v0.9.0" "tsfix1" "d146cdd5b66ca1d3ed65ce93ca42c6db22defc09" - "tsfix2" "c82d91c6bccf307186332b6c5c6fc0b128b1b2b1"}) + "tsfix2" "c82d91c6bccf307186332b6c5c6fc0b128b1b2b1" + "task3a" "d4df03424f1c7f3cc1eaba9e16d2e1d049131b97"}) (def cli-opts "Additional command line options." @@ -68,7 +69,7 @@ (merge tests/noop-test opts {:pure-generators true - :name (str "garage " (name (:workload opts))) + :name (str "garage " (name (:workload opts)) " " (name (:scenario opts)) " " (name (:patch opts))) :os debian/os :db db :client (:client workload) From ad5c6f779f7fdfdc0569920c830c59197023515a Mon Sep 17 00:00:00 2001 From: Alex Auvolat Date: Thu, 16 Nov 2023 13:26:43 +0100 Subject: [PATCH 110/538] layout: split helper in separate file; more precise difference tracking --- src/rpc/layout/helper.rs | 224 ++++++++++++++++++++++++++++++ src/rpc/layout/history.rs | 278 ++++---------------------------------- src/rpc/layout/manager.rs | 5 +- src/rpc/layout/mod.rs | 3 +- 4 files changed, 256 insertions(+), 254 deletions(-) create mode 100644 src/rpc/layout/helper.rs diff --git a/src/rpc/layout/helper.rs b/src/rpc/layout/helper.rs new file mode 100644 index 00000000..ed3da498 --- /dev/null +++ b/src/rpc/layout/helper.rs @@ -0,0 +1,224 @@ +use std::collections::HashMap; +use std::ops::Deref; +use std::sync::atomic::{AtomicUsize, Ordering}; + +use garage_util::data::*; + +use super::schema::*; + +pub struct LayoutHelper { + layout: Option, + + // cached values + ack_map_min: u64, + sync_map_min: u64, + + all_nodes: Vec, + all_nongateway_nodes: Vec, + + pub(crate) trackers_hash: Hash, + pub(crate) staging_hash: Hash, + + // ack lock: counts in-progress write operations for each + // layout version ; we don't increase the ack update tracker + // while this lock is nonzero + pub(crate) ack_lock: HashMap, +} + +impl Deref for LayoutHelper { + type Target = LayoutHistory; + fn deref(&self) -> &LayoutHistory { + self.layout() + } +} + +impl LayoutHelper { + pub fn new(mut layout: LayoutHistory, mut ack_lock: HashMap) -> Self { + layout.cleanup_old_versions(); + + let all_nongateway_nodes = layout.get_all_nongateway_nodes(); + layout.clamp_update_trackers(&all_nongateway_nodes); + + let min_version = layout.min_stored(); + let ack_map_min = layout + .update_trackers + .ack_map + .min(&all_nongateway_nodes, min_version); + let sync_map_min = layout + .update_trackers + .sync_map + .min(&all_nongateway_nodes, min_version); + + let all_nodes = layout.get_all_nodes(); + let trackers_hash = layout.calculate_trackers_hash(); + let staging_hash = layout.calculate_staging_hash(); + + ack_lock.retain(|_, cnt| *cnt.get_mut() > 0); + ack_lock + .entry(layout.current().version) + .or_insert(AtomicUsize::new(0)); + + LayoutHelper { + layout: Some(layout), + ack_map_min, + sync_map_min, + all_nodes, + all_nongateway_nodes, + trackers_hash, + staging_hash, + ack_lock, + } + } + + // ------------------ single updating function -------------- + + fn layout(&self) -> &LayoutHistory { + self.layout.as_ref().unwrap() + } + + pub(crate) fn update(&mut self, f: F) -> bool + where + F: FnOnce(&mut LayoutHistory) -> bool, + { + let changed = f(&mut self.layout.as_mut().unwrap()); + if changed { + *self = Self::new( + self.layout.take().unwrap(), + std::mem::take(&mut self.ack_lock), + ); + } + changed + } + + // ------------------ read helpers --------------- + + pub fn all_nodes(&self) -> &[Uuid] { + &self.all_nodes + } + + pub fn all_nongateway_nodes(&self) -> &[Uuid] { + &self.all_nongateway_nodes + } + + pub fn all_ack(&self) -> u64 { + self.ack_map_min + } + + pub fn sync_versions(&self) -> (u64, u64, u64) { + ( + self.layout().current().version, + self.all_ack(), + self.layout().min_stored(), + ) + } + + pub fn read_nodes_of(&self, position: &Hash) -> Vec { + let sync_min = self.sync_map_min; + let version = self + .layout() + .versions + .iter() + .find(|x| x.version == sync_min) + .or(self.layout().versions.last()) + .unwrap(); + version + .nodes_of(position, version.replication_factor) + .collect() + } + + pub(crate) fn write_sets_of(&self, position: &Hash) -> Vec> { + self.layout() + .versions + .iter() + .map(|x| x.nodes_of(position, x.replication_factor).collect()) + .collect() + } + + pub fn storage_nodes_of(&self, position: &Hash) -> Vec { + let mut ret = vec![]; + for version in self.layout().versions.iter() { + ret.extend(version.nodes_of(position, version.replication_factor)); + } + ret.sort(); + ret.dedup(); + ret + } + + pub fn trackers_hash(&self) -> Hash { + self.trackers_hash + } + + pub fn staging_hash(&self) -> Hash { + self.staging_hash + } + + // ------------------ helpers for update tracking --------------- + + pub(crate) fn update_trackers(&mut self, local_node_id: Uuid) { + // Ensure trackers for this node's values are up-to-date + + // 1. Acknowledge the last layout version which is not currently + // locked by an in-progress write operation + self.ack_max_free(local_node_id); + + // 2. Assume the data on this node is sync'ed up at least to + // the first layout version in the history + self.sync_first(local_node_id); + + // 3. Acknowledge everyone has synced up to min(self.sync_map) + self.sync_ack(local_node_id); + + info!("ack_map: {:?}", self.update_trackers.ack_map); + info!("sync_map: {:?}", self.update_trackers.sync_map); + info!("sync_ack_map: {:?}", self.update_trackers.sync_ack_map); + } + + fn sync_first(&mut self, local_node_id: Uuid) { + let first_version = self.versions.first().as_ref().unwrap().version; + self.update(|layout| { + layout + .update_trackers + .sync_map + .set_max(local_node_id, first_version) + }); + } + + fn sync_ack(&mut self, local_node_id: Uuid) { + let sync_map_min = self.sync_map_min; + self.update(|layout| { + layout + .update_trackers + .sync_ack_map + .set_max(local_node_id, sync_map_min) + }); + } + + pub(crate) fn ack_max_free(&mut self, local_node_id: Uuid) -> bool { + let max_ack = self.max_free_ack(); + let changed = self.update(|layout| { + layout + .update_trackers + .ack_map + .set_max(local_node_id, max_ack) + }); + if changed { + info!("ack_until updated to {}", max_ack); + } + changed + } + + pub(crate) fn max_free_ack(&self) -> u64 { + self.layout() + .versions + .iter() + .map(|x| x.version) + .take_while(|v| { + self.ack_lock + .get(v) + .map(|x| x.load(Ordering::Relaxed) == 0) + .unwrap_or(true) + }) + .max() + .unwrap_or(self.min_stored()) + } +} diff --git a/src/rpc/layout/history.rs b/src/rpc/layout/history.rs index dd38efa7..0a139549 100644 --- a/src/rpc/layout/history.rs +++ b/src/rpc/layout/history.rs @@ -1,7 +1,4 @@ -use std::collections::HashMap; use std::collections::HashSet; -use std::ops::Deref; -use std::sync::atomic::{AtomicUsize, Ordering}; use garage_util::crdt::{Crdt, Lww, LwwMap}; use garage_util::data::*; @@ -11,225 +8,6 @@ use garage_util::error::*; use super::schema::*; use super::*; -pub struct LayoutHelper { - layout: Option, - - // cached values - ack_map_min: u64, - sync_map_min: u64, - - all_nodes: Vec, - all_nongateway_nodes: Vec, - - trackers_hash: Hash, - staging_hash: Hash, - - // ack lock: counts in-progress write operations for each - // layout version ; we don't increase the ack update tracker - // while this lock is nonzero - pub(crate) ack_lock: HashMap, -} - -impl Deref for LayoutHelper { - type Target = LayoutHistory; - fn deref(&self) -> &LayoutHistory { - self.layout() - } -} - -impl LayoutHelper { - pub fn new(mut layout: LayoutHistory, mut ack_lock: HashMap) -> Self { - layout.cleanup_old_versions(); - - let all_nongateway_nodes = layout.get_all_nongateway_nodes(); - layout.clamp_update_trackers(&all_nongateway_nodes); - - let min_version = layout.min_stored(); - let ack_map_min = layout - .update_trackers - .ack_map - .min(&all_nongateway_nodes, min_version); - let sync_map_min = layout - .update_trackers - .sync_map - .min(&all_nongateway_nodes, min_version); - - let all_nodes = layout.get_all_nodes(); - let trackers_hash = layout.calculate_trackers_hash(); - let staging_hash = layout.calculate_staging_hash(); - - ack_lock.retain(|_, cnt| *cnt.get_mut() > 0); - ack_lock - .entry(layout.current().version) - .or_insert(AtomicUsize::new(0)); - - LayoutHelper { - layout: Some(layout), - ack_map_min, - sync_map_min, - all_nodes, - all_nongateway_nodes, - trackers_hash, - staging_hash, - ack_lock, - } - } - - // ------------------ single updating function -------------- - - fn layout(&self) -> &LayoutHistory { - self.layout.as_ref().unwrap() - } - - pub(crate) fn update(&mut self, f: F) -> bool - where - F: FnOnce(&mut LayoutHistory) -> bool, - { - let changed = f(&mut self.layout.as_mut().unwrap()); - if changed { - *self = Self::new( - self.layout.take().unwrap(), - std::mem::take(&mut self.ack_lock), - ); - } - changed - } - - // ------------------ read helpers --------------- - - pub fn all_nodes(&self) -> &[Uuid] { - &self.all_nodes - } - - pub fn all_nongateway_nodes(&self) -> &[Uuid] { - &self.all_nongateway_nodes - } - - pub fn all_ack(&self) -> u64 { - self.ack_map_min - } - - pub fn sync_versions(&self) -> (u64, u64, u64) { - ( - self.layout().current().version, - self.all_ack(), - self.layout().min_stored(), - ) - } - - pub fn read_nodes_of(&self, position: &Hash) -> Vec { - let sync_min = self.sync_map_min; - let version = self - .layout() - .versions - .iter() - .find(|x| x.version == sync_min) - .or(self.layout().versions.last()) - .unwrap(); - version - .nodes_of(position, version.replication_factor) - .collect() - } - - pub(crate) fn write_sets_of(&self, position: &Hash) -> Vec> { - self.layout() - .versions - .iter() - .map(|x| x.nodes_of(position, x.replication_factor).collect()) - .collect() - } - - pub fn storage_nodes_of(&self, position: &Hash) -> Vec { - let mut ret = vec![]; - for version in self.layout().versions.iter() { - ret.extend(version.nodes_of(position, version.replication_factor)); - } - ret.sort(); - ret.dedup(); - ret - } - - pub fn trackers_hash(&self) -> Hash { - self.trackers_hash - } - - pub fn staging_hash(&self) -> Hash { - self.staging_hash - } - - // ------------------ helpers for update tracking --------------- - - pub(crate) fn update_trackers(&mut self, local_node_id: Uuid) { - // Ensure trackers for this node's values are up-to-date - - // 1. Acknowledge the last layout version which is not currently - // locked by an in-progress write operation - self.ack_max_free(local_node_id); - - // 2. Assume the data on this node is sync'ed up at least to - // the first layout version in the history - self.sync_first(local_node_id); - - // 3. Acknowledge everyone has synced up to min(self.sync_map) - self.sync_ack(local_node_id); - - info!("ack_map: {:?}", self.update_trackers.ack_map); - info!("sync_map: {:?}", self.update_trackers.sync_map); - info!("sync_ack_map: {:?}", self.update_trackers.sync_ack_map); - } - - fn sync_first(&mut self, local_node_id: Uuid) { - let first_version = self.versions.first().as_ref().unwrap().version; - self.update(|layout| { - layout - .update_trackers - .sync_map - .set_max(local_node_id, first_version) - }); - } - - fn sync_ack(&mut self, local_node_id: Uuid) { - let sync_map_min = self.sync_map_min; - self.update(|layout| { - layout - .update_trackers - .sync_ack_map - .set_max(local_node_id, sync_map_min) - }); - } - - pub(crate) fn ack_max_free(&mut self, local_node_id: Uuid) -> bool { - let max_ack = self.max_free_ack(); - let changed = self.update(|layout| { - layout - .update_trackers - .ack_map - .set_max(local_node_id, max_ack) - }); - if changed { - info!("ack_until updated to {}", max_ack); - } - changed - } - - pub(crate) fn max_free_ack(&self) -> u64 { - self.layout() - .versions - .iter() - .map(|x| x.version) - .take_while(|v| { - self.ack_lock - .get(v) - .map(|x| x.load(Ordering::Relaxed) == 0) - .unwrap_or(true) - }) - .max() - .unwrap_or(self.min_stored()) - } -} - -// ---- - impl LayoutHistory { pub fn new(replication_factor: usize) -> Self { let version = LayoutVersion::new(replication_factor); @@ -270,7 +48,7 @@ impl LayoutHistory { } } - fn get_all_nongateway_nodes(&self) -> Vec { + pub(crate) fn get_all_nongateway_nodes(&self) -> Vec { if self.versions.len() == 1 { self.versions[0].nongateway_nodes().to_vec() } else { @@ -286,8 +64,21 @@ impl LayoutHistory { // ---- housekeeping (all invoked by LayoutHelper) ---- - fn cleanup_old_versions(&mut self) { - loop { + pub(crate) fn cleanup_old_versions(&mut self) { + // If there are invalid versions before valid versions, remove them + if self.versions.len() > 1 && self.current().check().is_ok() { + while self.versions.len() > 1 && self.versions.first().unwrap().check().is_err() { + let removed = self.versions.remove(0); + info!( + "Layout history: pruning old invalid version {}", + removed.version + ); + } + } + + // If there are old versions that no one is reading from anymore, + // remove them + while self.versions.len() > 1 { let all_nongateway_nodes = self.get_all_nongateway_nodes(); let min_version = self.min_stored(); let sync_ack_map_min = self @@ -303,7 +94,7 @@ impl LayoutHistory { } } - fn clamp_update_trackers(&mut self, nodes: &[Uuid]) { + pub(crate) fn clamp_update_trackers(&mut self, nodes: &[Uuid]) { let min_v = self.min_stored(); for node in nodes { self.update_trackers.ack_map.set_max(*node, min_v); @@ -312,11 +103,11 @@ impl LayoutHistory { } } - fn calculate_trackers_hash(&self) -> Hash { + pub(crate) fn calculate_trackers_hash(&self) -> Hash { blake2sum(&nonversioned_encode(&self.update_trackers).unwrap()[..]) } - fn calculate_staging_hash(&self) -> Hash { + pub(crate) fn calculate_staging_hash(&self) -> Hash { blake2sum(&nonversioned_encode(&self.staging).unwrap()[..]) } @@ -328,6 +119,7 @@ impl LayoutHistory { // Add any new versions to history for v2 in other.versions.iter() { if let Some(v1) = self.versions.iter().find(|v| v.version == v2.version) { + // Version is already present, check consistency if v1 != v2 { error!("Inconsistent layout histories: different layout compositions for version {}. Your cluster will be broken as long as this layout version is not replaced.", v2.version); } @@ -344,24 +136,14 @@ impl LayoutHistory { } // Merge trackers - if self.update_trackers != other.update_trackers { - let c = self.update_trackers.merge(&other.update_trackers); - changed = changed || c; - } - - // If there are invalid versions before valid versions, remove them, - // and increment update trackers - if self.versions.len() > 1 && self.current().check().is_ok() { - while self.versions.first().unwrap().check().is_err() { - self.versions.remove(0); - changed = true; - } - } + let c = self.update_trackers.merge(&other.update_trackers); + changed = changed || c; // Merge staged layout changes if self.staging != other.staging { + let prev_staging = self.staging.clone(); self.staging.merge(&other.staging); - changed = true; + changed = changed || self.staging != prev_staging; } changed @@ -390,11 +172,7 @@ To know the correct value of the new layout version, invoke `garage layout show` .calculate_next_version(&self.staging.get())?; self.versions.push(new_version); - if self.current().check().is_ok() { - while self.versions.first().unwrap().check().is_err() { - self.versions.remove(0); - } - } + self.cleanup_old_versions(); // Reset the staged layout changes self.staging.update(LayoutStaging { @@ -415,11 +193,7 @@ To know the correct value of the new layout version, invoke `garage layout show` } pub fn check(&self) -> Result<(), String> { - for version in self.versions.iter() { - version.check()?; - } - // TODO: anything more ? - Ok(()) + self.current().check() } } diff --git a/src/rpc/layout/manager.rs b/src/rpc/layout/manager.rs index 4e073d1f..85d94ffa 100644 --- a/src/rpc/layout/manager.rs +++ b/src/rpc/layout/manager.rs @@ -184,17 +184,20 @@ impl LayoutManager { return Some(layout.clone()); } } + None } fn merge_layout_trackers(&self, adv: &UpdateTrackers) -> Option { let mut layout = self.layout.write().unwrap(); + if layout.update_trackers != *adv { if layout.update(|l| l.update_trackers.merge(adv)) { layout.update_trackers(self.node_id); return Some(layout.update_trackers.clone()); } } + None } @@ -284,7 +287,7 @@ impl LayoutManager { } pub(crate) fn handle_pull_cluster_layout(&self) -> SystemRpc { - let layout = self.layout.read().unwrap().clone(); // TODO: avoid cloning + let layout = self.layout.read().unwrap().clone(); SystemRpc::AdvertiseClusterLayout(layout) } diff --git a/src/rpc/layout/mod.rs b/src/rpc/layout/mod.rs index 859287c8..91151ab4 100644 --- a/src/rpc/layout/mod.rs +++ b/src/rpc/layout/mod.rs @@ -1,4 +1,5 @@ mod graph_algo; +mod helper; mod history; mod schema; mod version; @@ -10,7 +11,7 @@ pub mod manager; // ---- re-exports ---- -pub use history::*; +pub use helper::LayoutHelper; pub use manager::WriteLock; pub use schema::*; pub use version::*; From 707442f5de416fdbed4681a33b739f0a787b7834 Mon Sep 17 00:00:00 2001 From: Alex Auvolat Date: Thu, 16 Nov 2023 13:51:40 +0100 Subject: [PATCH 111/538] layout: refactor digests and add "!=" assertions before epidemic bcast --- src/rpc/layout/helper.rs | 27 +++++++++++++++++++++++++-- src/rpc/layout/history.rs | 1 - src/rpc/layout/manager.rs | 36 ++++++++++-------------------------- src/rpc/layout/mod.rs | 2 +- src/rpc/system.rs | 17 +++++++++-------- 5 files changed, 45 insertions(+), 38 deletions(-) diff --git a/src/rpc/layout/helper.rs b/src/rpc/layout/helper.rs index ed3da498..0d746ea3 100644 --- a/src/rpc/layout/helper.rs +++ b/src/rpc/layout/helper.rs @@ -2,10 +2,24 @@ use std::collections::HashMap; use std::ops::Deref; use std::sync::atomic::{AtomicUsize, Ordering}; +use serde::{Deserialize, Serialize}; + use garage_util::data::*; use super::schema::*; +#[derive(Debug, Clone, Serialize, Deserialize, Default, PartialEq, Eq)] +pub struct LayoutDigest { + /// Cluster layout version + pub current_version: u64, + /// Number of active layout versions + pub active_versions: usize, + /// Hash of cluster layout update trackers + pub trackers_hash: Hash, + /// Hash of cluster layout staging data + pub staging_hash: Hash, +} + pub struct LayoutHelper { layout: Option, @@ -16,8 +30,8 @@ pub struct LayoutHelper { all_nodes: Vec, all_nongateway_nodes: Vec, - pub(crate) trackers_hash: Hash, - pub(crate) staging_hash: Hash, + trackers_hash: Hash, + staging_hash: Hash, // ack lock: counts in-progress write operations for each // layout version ; we don't increase the ack update tracker @@ -152,6 +166,15 @@ impl LayoutHelper { self.staging_hash } + pub fn digest(&self) -> LayoutDigest { + LayoutDigest { + current_version: self.current().version, + active_versions: self.versions.len(), + trackers_hash: self.trackers_hash, + staging_hash: self.staging_hash, + } + } + // ------------------ helpers for update tracking --------------- pub(crate) fn update_trackers(&mut self, local_node_id: Uuid) { diff --git a/src/rpc/layout/history.rs b/src/rpc/layout/history.rs index 0a139549..653d2a48 100644 --- a/src/rpc/layout/history.rs +++ b/src/rpc/layout/history.rs @@ -5,7 +5,6 @@ use garage_util::data::*; use garage_util::encode::nonversioned_encode; use garage_util::error::*; -use super::schema::*; use super::*; impl LayoutHistory { diff --git a/src/rpc/layout/manager.rs b/src/rpc/layout/manager.rs index 85d94ffa..c65831a2 100644 --- a/src/rpc/layout/manager.rs +++ b/src/rpc/layout/manager.rs @@ -2,8 +2,6 @@ use std::collections::HashMap; use std::sync::{atomic::Ordering, Arc, Mutex, RwLock, RwLockReadGuard}; use std::time::Duration; -use serde::{Deserialize, Serialize}; - use tokio::sync::Notify; use netapp::endpoint::Endpoint; @@ -33,16 +31,6 @@ pub struct LayoutManager { system_endpoint: Arc>, } -#[derive(Debug, Clone, Serialize, Deserialize, Default)] -pub struct LayoutStatus { - /// Cluster layout version - pub cluster_layout_version: u64, - /// Hash of cluster layout update trackers - pub cluster_layout_trackers_hash: Hash, - /// Hash of cluster layout staging data - pub cluster_layout_staging_hash: Hash, -} - impl LayoutManager { pub fn new( config: &Config, @@ -105,15 +93,6 @@ impl LayoutManager { self.layout.read().unwrap() } - pub fn status(&self) -> LayoutStatus { - let layout = self.layout(); - LayoutStatus { - cluster_layout_version: layout.current().version, - cluster_layout_trackers_hash: layout.trackers_hash(), - cluster_layout_staging_hash: layout.staging_hash(), - } - } - pub async fn update_cluster_layout( self: &Arc, layout: &LayoutHistory, @@ -173,6 +152,7 @@ impl LayoutManager { fn merge_layout(&self, adv: &LayoutHistory) -> Option { let mut layout = self.layout.write().unwrap(); + let prev_digest = layout.digest(); let prev_layout_check = layout.check().is_ok(); if !prev_layout_check || adv.check().is_ok() { @@ -181,6 +161,7 @@ impl LayoutManager { if prev_layout_check && layout.check().is_err() { panic!("Merged two correct layouts and got an incorrect layout."); } + assert!(layout.digest() != prev_digest); return Some(layout.clone()); } } @@ -190,10 +171,12 @@ impl LayoutManager { fn merge_layout_trackers(&self, adv: &UpdateTrackers) -> Option { let mut layout = self.layout.write().unwrap(); + let prev_digest = layout.digest(); if layout.update_trackers != *adv { if layout.update(|l| l.update_trackers.merge(adv)) { layout.update_trackers(self.node_id); + assert!(layout.digest() != prev_digest); return Some(layout.update_trackers.clone()); } } @@ -269,16 +252,17 @@ impl LayoutManager { // ---- RPC HANDLERS ---- - pub(crate) fn handle_advertise_status(self: &Arc, from: Uuid, remote: &LayoutStatus) { - let local = self.status(); - if remote.cluster_layout_version > local.cluster_layout_version - || remote.cluster_layout_staging_hash != local.cluster_layout_staging_hash + pub(crate) fn handle_advertise_status(self: &Arc, from: Uuid, remote: &LayoutDigest) { + let local = self.layout().digest(); + if remote.current_version > local.current_version + || remote.active_versions != local.active_versions + || remote.staging_hash != local.staging_hash { tokio::spawn({ let this = self.clone(); async move { this.pull_cluster_layout(from).await } }); - } else if remote.cluster_layout_trackers_hash != local.cluster_layout_trackers_hash { + } else if remote.trackers_hash != local.trackers_hash { tokio::spawn({ let this = self.clone(); async move { this.pull_cluster_layout_trackers(from).await } diff --git a/src/rpc/layout/mod.rs b/src/rpc/layout/mod.rs index 91151ab4..eb127fda 100644 --- a/src/rpc/layout/mod.rs +++ b/src/rpc/layout/mod.rs @@ -11,7 +11,7 @@ pub mod manager; // ---- re-exports ---- -pub use helper::LayoutHelper; +pub use helper::{LayoutDigest, LayoutHelper}; pub use manager::WriteLock; pub use schema::*; pub use version::*; diff --git a/src/rpc/system.rs b/src/rpc/system.rs index d74dc2a1..dc127afb 100644 --- a/src/rpc/system.rs +++ b/src/rpc/system.rs @@ -33,8 +33,9 @@ use garage_util::time::*; use crate::consul::ConsulDiscovery; #[cfg(feature = "kubernetes-discovery")] use crate::kubernetes::*; -use crate::layout::manager::{LayoutManager, LayoutStatus}; -use crate::layout::{self, LayoutHelper, LayoutHistory, NodeRoleV}; +use crate::layout::{ + self, manager::LayoutManager, LayoutDigest, LayoutHelper, LayoutHistory, NodeRoleV, +}; use crate::replication_mode::*; use crate::rpc_helper::*; @@ -130,8 +131,8 @@ pub struct NodeStatus { /// Replication factor configured on the node pub replication_factor: usize, - /// Layout status - pub layout_status: LayoutStatus, + /// Cluster layout digest + pub layout_digest: LayoutDigest, /// Disk usage on partition containing metadata directory (tuple: `(avail, total)`) #[serde(default)] @@ -539,7 +540,7 @@ impl System { fn update_local_status(&self) { let mut new_si: NodeStatus = self.local_status.load().as_ref().clone(); - new_si.layout_status = self.layout_manager.status(); + new_si.layout_digest = self.layout_manager.layout().digest(); new_si.update_disk_usage(&self.metadata_dir, &self.data_dir, &self.metrics); @@ -573,7 +574,7 @@ impl System { } self.layout_manager - .handle_advertise_status(from, &info.layout_status); + .handle_advertise_status(from, &info.layout_digest); self.node_status .write() @@ -755,7 +756,7 @@ impl NodeStatus { .into_string() .unwrap_or_else(|_| "".to_string()), replication_factor, - layout_status: layout_manager.status(), + layout_digest: layout_manager.layout().digest(), meta_disk_avail: None, data_disk_avail: None, } @@ -765,7 +766,7 @@ impl NodeStatus { NodeStatus { hostname: "?".to_string(), replication_factor: 0, - layout_status: Default::default(), + layout_digest: Default::default(), meta_disk_avail: None, data_disk_avail: None, } From 22f38808e744ea5b30ad771fcb344a29579b56d4 Mon Sep 17 00:00:00 2001 From: Alex Auvolat Date: Thu, 16 Nov 2023 16:34:01 +0100 Subject: [PATCH 112/538] rpc_helper: don't use tokio::spawn for individual requests --- src/rpc/rpc_helper.rs | 18 +++++++----------- 1 file changed, 7 insertions(+), 11 deletions(-) diff --git a/src/rpc/rpc_helper.rs b/src/rpc/rpc_helper.rs index e269ddaa..7e9fabd7 100644 --- a/src/rpc/rpc_helper.rs +++ b/src/rpc/rpc_helper.rs @@ -299,9 +299,7 @@ impl RpcHelper { if let Some((req_to, fut)) = requests.next() { let tracer = opentelemetry::global::tracer("garage"); let span = tracer.start(format!("RPC to {:?}", req_to)); - resp_stream.push(tokio::spawn( - fut.with_context(Context::current_with_span(span)), - )); + resp_stream.push(fut.with_context(Context::current_with_span(span))); } else { break; } @@ -313,7 +311,7 @@ impl RpcHelper { } // Wait for one request to terminate - match resp_stream.next().await.unwrap().unwrap() { + match resp_stream.next().await.unwrap() { Ok(msg) => { successes.push(msg); } @@ -448,7 +446,7 @@ impl RpcHelper { let tracer = opentelemetry::global::tracer("garage"); let span = tracer.start(format!("RPC to {:?}", to)); let fut = async move { (to, self2.call(&endpoint2, to, msg, strategy).await) }; - tokio::spawn(fut.with_context(Context::current_with_span(span))) + fut.with_context(Context::current_with_span(span)) }); let mut resp_stream = requests.collect::>(); @@ -457,9 +455,7 @@ impl RpcHelper { let mut set_counters = vec![(0, 0); to_sets.len()]; - while !resp_stream.is_empty() { - let (node, resp) = resp_stream.next().await.unwrap().unwrap(); - + while let Some((node, resp)) = resp_stream.next().await { match resp { Ok(msg) => { for set in peers.get(&node).unwrap().iter() { @@ -475,12 +471,12 @@ impl RpcHelper { } } - if set_counters.iter().all(|x| x.0 >= quorum) { + if set_counters.iter().all(|(ok_cnt, _)| *ok_cnt >= quorum) { // Success // Continue all other requets in background tokio::spawn(async move { - resp_stream.collect::>>().await; + resp_stream.collect::)>>().await; }); return Ok(successes); @@ -489,7 +485,7 @@ impl RpcHelper { if set_counters .iter() .enumerate() - .any(|(i, x)| x.1 + quorum > to_sets[i].len()) + .any(|(i, (_, err_cnt))| err_cnt + quorum > to_sets[i].len()) { // Too many errors in this set, we know we won't get a quorum break; From 3ecd14b9f6202ad3c5513c6ad7422bd408134002 Mon Sep 17 00:00:00 2001 From: Alex Auvolat Date: Thu, 16 Nov 2023 16:41:45 +0100 Subject: [PATCH 113/538] table: implement write sets for insert_many --- src/table/table.rs | 153 ++++++++++++++++++++++++++++++++++++--------- 1 file changed, 125 insertions(+), 28 deletions(-) diff --git a/src/table/table.rs b/src/table/table.rs index 5ec9eb0a..7d1ff31c 100644 --- a/src/table/table.rs +++ b/src/table/table.rs @@ -143,7 +143,7 @@ impl Table { self.data.queue_insert(tx, e) } - pub async fn insert_many(&self, entries: I) -> Result<(), Error> + pub async fn insert_many(self: &Arc, entries: I) -> Result<(), Error> where I: IntoIterator + Send + Sync, IE: Borrow + Send + Sync, @@ -161,52 +161,149 @@ impl Table { Ok(()) } - async fn insert_many_internal(&self, entries: I) -> Result<(), Error> + async fn insert_many_internal(self: &Arc, entries: I) -> Result<(), Error> where I: IntoIterator + Send + Sync, IE: Borrow + Send + Sync, { - let mut call_list: HashMap<_, Vec<_>> = HashMap::new(); + // The different items will have to be stored on possibly different nodes. + // We will here batch all items into a single request for each concerned + // node, with all of the entries it must store within that request. + // Each entry has to be saved to a specific list of "write sets", i.e. a set + // of node within wich a quorum must be achieved. In normal operation, there + // is a single write set which corresponds to the quorum in the current + // cluster layout, but when the layout is updated, multiple write sets might + // have to be handled at once. Here, since we are sending many entries, we + // will have to handle many write sets in all cases. The algorihtm is thus + // to send one request to each node with all the items it must save, + // and keep track of the OK responses within each write set: if for all sets + // a quorum of nodes has answered OK, then the insert has succeeded and + // consistency properties (read-after-write) are preserved. + // Some code here might feel redundant with RpcHelper::try_write_many_sets, + // but I think deduplicating could lead to more spaghetti instead of + // improving the readability, so I'm leaving as is. + + let quorum = self.data.replication.write_quorum(); + + // Serialize all entries and compute the write sets for each of them. + // In the case of sharded table replication, this also takes an "ack lock" + // to the layout manager to avoid ack'ing newer versions which are not + // taken into account by writes in progress (the ack can happen later, once + // all writes that didn't take the new layout into account are finished). + // These locks are released when entries_vec is dropped, i.e. when this + // function returns. + let mut entries_vec = Vec::new(); for entry in entries.into_iter() { let entry = entry.borrow(); let hash = entry.partition_key().hash(); - // TODO: use write sets - let who = self.data.replication.storage_nodes(&hash); + let write_sets = self.data.replication.write_sets(&hash); let e_enc = Arc::new(ByteBuf::from(entry.encode()?)); - for node in who { - call_list.entry(node).or_default().push(e_enc.clone()); + entries_vec.push((write_sets, e_enc)); + } + + // Compute a deduplicated list of all of the write sets, + // and compute an index from each node to the position of the sets in which + // it takes part, to optimize the detection of a quorum. + let mut write_sets = entries_vec + .iter() + .map(|(wss, _)| wss.as_ref().iter().map(|ws| ws.as_slice())) + .flatten() + .collect::>(); + write_sets.sort(); + write_sets.dedup(); + let mut write_set_index = HashMap::<&Uuid, Vec>::new(); + for (i, write_set) in write_sets.iter().enumerate() { + for node in write_set.iter() { + write_set_index.entry(node).or_default().push(i); } } - let call_futures = call_list.drain().map(|(node, entries)| async move { - let rpc = TableRpc::::Update(entries); + // Build a map of all nodes to the entries that must be sent to that node. + let mut call_list: HashMap> = HashMap::new(); + for (write_sets, entry_enc) in entries_vec.iter() { + for write_set in write_sets.as_ref().iter() { + for node in write_set.iter() { + call_list.entry(*node).or_default().push(entry_enc.clone()) + } + } + } - let resp = self - .system - .rpc_helper() - .call( - &self.endpoint, - node, - rpc, - RequestStrategy::with_priority(PRIO_NORMAL), - ) - .await?; - Ok::<_, Error>((node, resp)) + // Build futures to actually perform each of the corresponding RPC calls + let call_count = call_list.len(); + let call_futures = call_list.into_iter().map(|(node, entries)| { + let this = self.clone(); + let tracer = opentelemetry::global::tracer("garage"); + let span = tracer.start(format!("RPC to {:?}", node)); + let fut = async move { + let rpc = TableRpc::::Update(entries); + let resp = this + .system + .rpc_helper() + .call( + &this.endpoint, + node, + rpc, + RequestStrategy::with_priority(PRIO_NORMAL).with_quorum(quorum), + ) + .await; + (node, resp) + }; + fut.with_context(Context::current_with_span(span)) }); + + // Run all requests in parallel thanks to FuturesUnordered, and collect results. let mut resps = call_futures.collect::>(); + let mut set_counters = vec![(0, 0); write_sets.len()]; + let mut successes = 0; let mut errors = vec![]; - while let Some(resp) = resps.next().await { - if let Err(e) = resp { - errors.push(e); + while let Some((node, resp)) = resps.next().await { + match resp { + Ok(_) => { + successes += 1; + for set in write_set_index.get(&node).unwrap().iter() { + set_counters[*set].0 += 1; + } + } + Err(e) => { + errors.push(e); + for set in write_set_index.get(&node).unwrap().iter() { + set_counters[*set].1 += 1; + } + } + } + + if set_counters.iter().all(|(ok_cnt, _)| *ok_cnt >= quorum) { + // Success + + // Continue all other requests in background + tokio::spawn(async move { + resps.collect::)>>().await; + }); + + return Ok(()); + } + + if set_counters + .iter() + .enumerate() + .any(|(i, (_, err_cnt))| err_cnt + quorum > write_sets[i].len()) + { + // Too many errors in this set, we know we won't get a quorum + break; } } - if errors.len() > self.data.replication.max_write_errors() { - Err(Error::Message("Too many errors".into())) - } else { - Ok(()) - } + + // Failure, could not get quorum within at least one set + let errors = errors.iter().map(|e| format!("{}", e)).collect::>(); + Err(Error::Quorum( + quorum, + Some(write_sets.len()), + successes, + call_count, + errors, + )) } pub async fn get( From 92dd2bbe15357a24eb68a3d3d6220c4758bb81a7 Mon Sep 17 00:00:00 2001 From: Alex Auvolat Date: Thu, 16 Nov 2023 18:09:13 +0100 Subject: [PATCH 114/538] jepsen: nlnet task3a seems to fix things --- script/jepsen.garage/README.md | 10 ++++++++-- script/jepsen.garage/src/jepsen/garage.clj | 2 +- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/script/jepsen.garage/README.md b/script/jepsen.garage/README.md index 464da4da..f7479a3d 100644 --- a/script/jepsen.garage/README.md +++ b/script/jepsen.garage/README.md @@ -71,9 +71,12 @@ Results with timestamp patch (`--patch tsfix2`): - **Fails with layout reconfiguration nemesis** (`--scenario r`). Example of a failed run: `garage reg2/20231024T120806.899+0200`. - TODO: investigate. This is the failure mode we are looking for and trying to fix for NLnet task 3. +- Changes brought by NLnet task 3 code (commit 707442f5de): + no failures with `--scenario r` (0 of 10 runs), `--scenario pr` (0 of 10 runs), + `--scenario cpr` (0 of 10 runs) and `--scenario dpr` (0 of 10 runs). + ### Set, basic test (write some items, then read) @@ -101,9 +104,12 @@ Results: - **Fails with just layout reconfiguration nemesis** (`--scenario r`). Example of a failed run: `garage set2/20231025T141940.198+0200` (10 failures in 10 runs). - TODO: investigate. This is the failure mode we are looking for and trying to fix for NLnet task 3. +- Changes brought by NLnet task 3 code (commit 707442f5de): + no failures with `--scenario r` (0 of 10 runs), `--scenario pr` (0 of 10 runs). + `--scenario cpr` (0 of 10 runs) and `--scenario dpr` (0 of 10 runs). + ## Investigating (and fixing) errors diff --git a/script/jepsen.garage/src/jepsen/garage.clj b/script/jepsen.garage/src/jepsen/garage.clj index 48659d6c..174e8df0 100644 --- a/script/jepsen.garage/src/jepsen/garage.clj +++ b/script/jepsen.garage/src/jepsen/garage.clj @@ -36,7 +36,7 @@ {"default" "v0.9.0" "tsfix1" "d146cdd5b66ca1d3ed65ce93ca42c6db22defc09" "tsfix2" "c82d91c6bccf307186332b6c5c6fc0b128b1b2b1" - "task3a" "d4df03424f1c7f3cc1eaba9e16d2e1d049131b97"}) + "task3a" "707442f5de416fdbed4681a33b739f0a787b7834"}) (def cli-opts "Additional command line options." From 92fd899fb651a43374d1839371176c71c7d0beb6 Mon Sep 17 00:00:00 2001 From: asonix Date: Tue, 21 Nov 2023 17:39:51 -0600 Subject: [PATCH 115/538] Allow 0 as a part number marker --- src/api/s3/api_server.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/api/s3/api_server.rs b/src/api/s3/api_server.rs index d675ab61..887839dd 100644 --- a/src/api/s3/api_server.rs +++ b/src/api/s3/api_server.rs @@ -344,7 +344,7 @@ impl ApiHandler for S3ApiServer { bucket_id, key, upload_id, - part_number_marker: part_number_marker.map(|p| p.clamp(1, 10000)), + part_number_marker: part_number_marker.map(|p| p.min(10000)), max_parts: max_parts.unwrap_or(1000).clamp(1, 1000), }, ) From c63b4469896637104df0490682f0b53cbdd20de3 Mon Sep 17 00:00:00 2001 From: Quentin Dufour Date: Wed, 22 Nov 2023 08:58:09 +0100 Subject: [PATCH 116/538] skeleton for api v1 --- doc/api/garage-admin-v1.html | 24 + doc/api/garage-admin-v1.yml | 1218 ++++++++++++++++++++++++++++++++++ 2 files changed, 1242 insertions(+) create mode 100644 doc/api/garage-admin-v1.html create mode 100644 doc/api/garage-admin-v1.yml diff --git a/doc/api/garage-admin-v1.html b/doc/api/garage-admin-v1.html new file mode 100644 index 00000000..783d459e --- /dev/null +++ b/doc/api/garage-admin-v1.html @@ -0,0 +1,24 @@ + + + + Garage Adminstration API v0 + + + + + + + + + + + + + diff --git a/doc/api/garage-admin-v1.yml b/doc/api/garage-admin-v1.yml new file mode 100644 index 00000000..d19d22d3 --- /dev/null +++ b/doc/api/garage-admin-v1.yml @@ -0,0 +1,1218 @@ +openapi: 3.0.0 +info: + version: v0.9.0 + title: Garage Administration API v0+garage-v0.9.0 + description: | + Administrate your Garage cluster programatically, including status, layout, keys, buckets, and maintainance tasks. + + *Disclaimer: The API is not stable yet, hence its v0 tag. The API can change at any time, and changes can include breaking backward compatibility. Read the changelog and upgrade your scripts before upgrading. Additionnaly, this specification is very early stage and can contain bugs, especially on error return codes/types that are not tested yet. Do not expect a well finished and polished product!* +paths: + /status: + get: + tags: + - Nodes + operationId: "GetNodes" + summary: "Status of this node and other nodes in the cluster" + description: | + Returns the cluster's current status, including: + - ID of the node being queried and its version of the Garage daemon + - Live nodes + - Currently configured cluster layout + - Staged changes to the cluster layout + responses: + '500': + description: | + The server can not answer your request because it is in a bad state + '200': + description: | + Information about the queried node, its environment and the current layout + content: + application/json: + schema: + type: object + required: [ node, garageVersion, knownNodes, layout ] + properties: + node: + type: string + example: "ec79480e0ce52ae26fd00c9da684e4fa56658d9c64cdcecb094e936de0bfe71f" + garageVersion: + type: string + example: "v0.7.3" + knownNodes: + type: object + example: + "ec79480e0ce52ae26fd00c9da684e4fa56658d9c64cdcecb094e936de0bfe71f": + addr: "10.0.0.11:3901" + is_up: true + last_seen_secs_ago: 9 + hostname: orion + "4a6ae5a1d0d33bf895f5bb4f0a418b7dc94c47c0dd2eb108d1158f3c8f60b0ff": + addr: "10.0.0.12:3901" + is_up: true + last_seen_secs_ago: 13 + hostname: pegasus + "e2ee7984ee65b260682086ec70026165903c86e601a4a5a501c1900afe28d84b": + addr: "10.0.0.13:3901" + is_up: true + last_seen_secs_ago: 2 + hostname: neptune + additionalProperties: + $ref: '#/components/schemas/NodeNetworkInfo' + layout: + $ref: '#/components/schemas/ClusterLayout' + + /connect: + post: + tags: + - Nodes + operationId: "AddNode" + summary: "Connect target node to other Garage nodes" + description: | + Instructs this Garage node to connect to other Garage nodes at specified `@`. `node_id` is generated automatically on node start. + requestBody: + required: true + content: + application/json: + schema: + type: array + example: + - "ec79480e0ce52ae26fd00c9da684e4fa56658d9c64cdcecb094e936de0bfe71f@10.0.0.11:3901" + - "4a6ae5a1d0d33bf895f5bb4f0a418b7dc94c47c0dd2eb108d1158f3c8f60b0ff@10.0.0.12:3901" + items: + type: string + + responses: + '500': + description: | + The server can not answer your request because it is in a bad state + '400': + description: | + Your request is malformed, check your JSON + '200': + description: | + The request has been handled correctly but it does not mean that all connection requests succeeded; some might have fail, you need to check the body! + content: + application/json: + schema: + type: array + example: + - success: true + error: + - success: false + error: "Handshake error" + items: + type: object + properties: + success: + type: boolean + example: true + error: + type: string + nullable: true + example: + + /layout: + get: + tags: + - Layout + operationId: "GetLayout" + summary: "Details on the current and staged layout" + description: | + Returns the cluster's current layout, including: + - Currently configured cluster layout + - Staged changes to the cluster layout + + *The info returned by this endpoint is a subset of the info returned by `GET /status`.* + responses: + '500': + description: | + The server can not answer your request because it is in a bad state + '200': + description: | + Returns the cluster's current cluster layout: + - Currently configured cluster layout + - Staged changes to the cluster layout + content: + application/json: + schema: + $ref: '#/components/schemas/ClusterLayout' + + post: + tags: + - Layout + operationId: "AddLayout" + summary: "Send modifications to the cluster layout" + description: | + Send modifications to the cluster layout. These modifications will be included in the staged role changes, visible in subsequent calls of `GET /layout`. Once the set of staged changes is satisfactory, the user may call `POST /layout/apply` to apply the changed changes, or `POST /layout/revert` to clear all of the staged changes in the layout. + Note that setting the capacity to `null` will configure the node as a gateway. + requestBody: + description: | + To add a new node to the layout or to change the configuration of an existing node, simply set the values you want. + To remove a node, set it to `null` instead of passing a configuration object. + + Contrary to the CLI that may update only a subset of the fields capacity, zone and tags, when calling this API all of these values must be specified. + required: true + content: + application/json: + schema: + type: object + example: + "e2ee7984ee65b260682086ec70026165903c86e601a4a5a501c1900afe28d84b": + zone: "geneva" + capacity: 4 + tags: + - gateway + "4a6ae5a1d0d33bf895f5bb4f0a418b7dc94c47c0dd2eb108d1158f3c8f60b0ff": + + additionalProperties: + $ref: '#/components/schemas/NodeClusterInfo' + responses: + '500': + description: "The server can not handle your request. Check your connectivity with the rest of the cluster." + '400': + description: "Invalid syntax or requested change" + '200': + description: "The layout modification has been correctly staged" + + /layout/apply: + post: + tags: + - Layout + operationId: "ApplyLayout" + summary: "Apply staged layout" + description: | + Applies to the cluster the layout changes currently registered as staged layout changes. + requestBody: + description: | + Similarly to the CLI, the body must include the version of the new layout that will be created, which MUST be 1 + the value of the currently existing layout in the cluster. + required: true + content: + application/json: + schema: + $ref: '#/components/schemas/LayoutVersion' + + responses: + '500': + description: "The server can not handle your request. Check your connectivity with the rest of the cluster." + '400': + description: "Invalid syntax or requested change" + '200': + description: "The staged layout has been applied as the new layout of the cluster, a rebalance has been triggered." + + /layout/revert: + post: + tags: + - Layout + operationId: "RevertLayout" + summary: "Clear staged layout" + description: | + Clears all of the staged layout changes. + requestBody: + description: | + Reverting the staged changes is done by incrementing the version number and clearing the contents of the staged change list. Similarly to the CLI, the body must include the incremented version number, which MUST be 1 + the value of the currently existing layout in the cluster. + required: true + content: + application/json: + schema: + $ref: '#/components/schemas/LayoutVersion' + responses: + '500': + description: "The server can not handle your request. Check your connectivity with the rest of the cluster." + '400': + description: "Invalid syntax or requested change" + '200': + description: "The staged layout has been cleared, you can start again sending modification from a fresh copy with `POST /layout`." + + /key: + get: + tags: + - Key + operationId: "ListKeys" + summary: "List all keys" + description: | + Returns all API access keys in the cluster. + responses: + '500': + description: "The server can not handle your request. Check your connectivity with the rest of the cluster." + '200': + description: | + Returns the key identifier (aka `AWS_ACCESS_KEY_ID`) and its associated, human friendly, name if any (otherwise return an empty string) + content: + application/json: + schema: + type: array + example: + - id: "GK31c2f218a2e44f485b94239e" + name: "test-key" + - id: "GKe10061ac9c2921f09e4c5540" + name: "" + items: + type: object + required: [ id ] + properties: + id: + type: string + name: + type: string + post: + tags: + - Key + operationId: "AddKey" + summary: "Create a new API key" + description: | + Creates a new API access key. + requestBody: + description: | + "You can set a friendly name for this key, send an empty string instead" + required: true + content: + application/json: + schema: + type: object + properties: + name: + type: string + example: "test-key" + responses: + '500': + description: "The server can not handle your request. Check your connectivity with the rest of the cluster." + '400': + description: "Invalid syntax or requested change" + '200': + description: "The key has been added" + content: + application/json: + schema: + $ref: '#/components/schemas/KeyInfo' + + "/key?id={access_key}": + get: + tags: + - Key + operationId: "GetKey" + summary: "Get key information" + description: | + Return information about a specific key and return its information + parameters: + - name: access_key + in: path + required: true + description: "The exact API access key generated by Garage" + example: "GK31c2f218a2e44f485b94239e" + schema: + type: string + responses: + '500': + description: "The server can not handle your request. Check your connectivity with the rest of the cluster." + '200': + description: | + Returns information about the key + content: + application/json: + schema: + $ref: '#/components/schemas/KeyInfo' + + delete: + tags: + - Key + operationId: "DeleteKey" + summary: "Delete a key" + description: | + Delete a key from the cluster. Its access will be removed from all the buckets. Buckets are not automatically deleted and can be dangling. You should manually delete them before. + parameters: + - name: access_key + in: path + required: true + description: "The exact API access key generated by Garage" + example: "GK31c2f218a2e44f485b94239e" + schema: + type: string + responses: + '500': + description: "The server can not handle your request. Check your connectivity with the rest of the cluster." + '200': + description: "The key has been deleted" + + + post: + tags: + - Key + operationId: "UpdateKey" + summary: "Update a key" + description: | + Updates information about the specified API access key. + parameters: + - name: access_key + in: path + required: true + description: "The exact API access key generated by Garage" + example: "GK31c2f218a2e44f485b94239e" + schema: + type: string + requestBody: + description: | + For a given key, provide a first set with the permissions to grant, and a second set with the permissions to remove + required: true + content: + application/json: + schema: + type: object + properties: + name: + type: string + example: "test-key" + allow: + type: object + example: + properties: + createBucket: + type: boolean + example: true + deny: + type: object + properties: + createBucket: + type: boolean + example: true + responses: + '500': + description: "The server can not handle your request. Check your connectivity with the rest of the cluster." + '400': + description: "Invalid syntax or requested change" + '200': + description: | + Returns information about the key + content: + application/json: + schema: + $ref: '#/components/schemas/KeyInfo' + + + "/key?search={pattern}": + get: + tags: + - Key + operationId: "SearchKey" + summary: "Select key by pattern" + description: | + Find the first key matching the given pattern based on its identifier aor friendly name and return its information. + parameters: + - name: pattern + in: path + required: true + description: "A pattern (beginning or full string) corresponding to a key identifier or friendly name" + example: "test-k" + schema: + type: string + responses: + '500': + description: "The server can not handle your request. Check your connectivity with the rest of the cluster." + '200': + description: | + Returns information about the key + content: + application/json: + schema: + $ref: '#/components/schemas/KeyInfo' + + /key/import: + post: + tags: + - Key + operationId: "ImportKey" + summary: "Import an existing key" + description: | + Imports an existing API key. This feature must only be used for migrations and backup restore. + + **Do not use it to generate custom key identifiers or you will break your Garage cluster.** + requestBody: + description: | + Information on the key to import + required: true + content: + application/json: + schema: + type: object + required: [ name, accessKeyId, secretAccessKey ] + properties: + name: + type: string + example: "test-key" + accessKeyId: + type: string + example: "GK31c2f218a2e44f485b94239e" + secretAccessKey: + type: string + example: "b892c0665f0ada8a4755dae98baa3b133590e11dae3bcc1f9d769d67f16c3835" + responses: + '500': + description: "The server can not handle your request. Check your connectivity with the rest of the cluster." + '400': + description: "Invalid syntax or requested change" + '200': + description: "The key has been imported into the system" + content: + application/json: + schema: + $ref: '#/components/schemas/KeyInfo' + + /bucket: + get: + tags: + - Bucket + operationId: "ListBuckets" + summary: "List all buckets" + description: | + List all the buckets on the cluster with their UUID and their global and local aliases. + responses: + '500': + description: "The server can not handle your request. Check your connectivity with the rest of the cluster." + '200': + description: | + Returns the UUID of the bucket and all its aliases + content: + application/json: + schema: + type: array + example: + - id: "70dc3bed7fe83a75e46b66e7ddef7d56e65f3c02f9f80b6749fb97eccb5e1033" + globalAliases: + - "container_registry" + - id: "96470e0df00ec28807138daf01915cfda2bee8eccc91dea9558c0b4855b5bf95" + localAliases: + - alias: "my_documents" + accessKeyid: "GK31c2f218a2e44f485b94239e" + - id: "d7452a935e663fc1914f3a5515163a6d3724010ce8dfd9e4743ca8be5974f995" + globalAliases: + - "example.com" + - "www.example.com" + localAliases: + - alias: "corp_website" + accessKeyId: "GKe10061ac9c2921f09e4c5540" + - alias: "web" + accessKeyid: "GK31c2f218a2e44f485b94239e" + - id: "" + items: + type: object + required: [ id ] + properties: + id: + type: string + globalAliases: + type: array + items: + type: string + localAliases: + type: array + items: + type: object + required: [ alias, accessKeyId ] + properties: + alias: + type: string + accessKeyId: + type: string + post: + tags: + - Bucket + operationId: "CreateBucket" + summary: "Create a bucket" + description: | + Creates a new bucket, either with a global alias, a local one, or no alias at all. + Technically, you can also specify both `globalAlias` and `localAlias` and that would create two aliases. + requestBody: + description: | + Aliases to put on the new bucket + required: true + content: + application/json: + schema: + type: object + required: [ ] + properties: + globalAlias: + type: string + example: "my_documents" + localAlias: + type: object + properties: + accessKeyId: + type: string + alias: + type: string + allow: + type: object + properties: + read: + type: boolean + example: true + write: + type: boolean + example: true + owner: + type: boolean + example: true + responses: + '500': + description: "The server can not handle your request. Check your connectivity with the rest of the cluster." + '400': + description: "The payload is not formatted correctly" + '200': + description: Returns exhaustive information about the bucket + content: + application/json: + schema: + $ref: '#/components/schemas/BucketInfo' + + + "/bucket?id={bucket_id}": + get: + tags: + - Bucket + operationId: "GetBucketInfo" + summary: "Get a bucket" + description: | + Given a bucket identifier, get its information. + It includes its aliases, its web configuration, keys that have some permissions + on it, some statistics (number of objects, size), number of dangling multipart uploads, + and its quotas (if any). + parameters: + - name: bucket_id + in: path + required: true + description: "The exact bucket identifier, a 32 bytes hexadecimal string" + example: "b4018dc61b27ccb5c64ec1b24f53454bbbd180697c758c4d47a22a8921864a87" + schema: + type: string + responses: + '500': + description: "The server can not handle your request. Check your connectivity with the rest of the cluster." + '404': + description: "Bucket not found" + '200': + description: Returns exhaustive information about the bucket + content: + application/json: + schema: + $ref: '#/components/schemas/BucketInfo' + + + delete: + tags: + - Bucket + operationId: "DeleteBucket" + summary: "Delete a bucket" + description: | + Delete a bucket.Deletes a storage bucket. A bucket cannot be deleted if it is not empty. + + **Warning:** this will delete all aliases associated with the bucket! + parameters: + - name: bucket_id + in: path + required: true + description: "The exact bucket identifier, a 32 bytes hexadecimal string" + example: "b4018dc61b27ccb5c64ec1b24f53454bbbd180697c758c4d47a22a8921864a87" + schema: + type: string + responses: + '500': + description: "The server can not handle your request. Check your connectivity with the rest of the cluster." + '400': + description: "Bucket is not empty" + '404': + description: "Bucket not found" + '204': + description: Bucket has been deleted + + + + put: + tags: + - Bucket + operationId: "UpdateBucket" + summary: "Update a bucket" + description: | + All fields (`websiteAccess` and `quotas`) are optional. + If they are present, the corresponding modifications are applied to the bucket, otherwise nothing is changed. + + In `websiteAccess`: if `enabled` is `true`, `indexDocument` must be specified. + The field `errorDocument` is optional, if no error document is set a generic + error message is displayed when errors happen. Conversely, if `enabled` is + `false`, neither `indexDocument` nor `errorDocument` must be specified. + + In `quotas`: new values of `maxSize` and `maxObjects` must both be specified, or set to `null` + to remove the quotas. An absent value will be considered the same as a `null`. It is not possible + to change only one of the two quotas. + parameters: + - name: bucket_id + in: path + required: true + description: "The exact bucket identifier, a 32 bytes hexadecimal string" + example: "b4018dc61b27ccb5c64ec1b24f53454bbbd180697c758c4d47a22a8921864a87" + schema: + type: string + requestBody: + description: | + Requested changes on the bucket. Both root fields are optionals. + required: true + content: + application/json: + schema: + type: object + required: [ ] + properties: + websiteAccess: + type: object + properties: + enabled: + type: boolean + example: true + indexDocument: + type: string + example: "index.html" + errorDocument: + type: string + example: "error/400.html" + quotas: + type: object + properties: + maxSize: + type: integer + format: int64 + nullable: true + example: 19029801 + maxObjects: + type: integer + format: int64 + nullable: true + example: null + + responses: + '500': + description: "The server can not handle your request. Check your connectivity with the rest of the cluster." + '400': + description: "Bad request, check your body." + '404': + description: "Bucket not found" + '200': + description: Returns exhaustive information about the bucket + content: + application/json: + schema: + $ref: '#/components/schemas/BucketInfo' + + "/bucket?globalAlias={alias}": + get: + tags: + - Bucket + operationId: "FindBucketInfo" + summary: "Find a bucket" + description: | + Find a bucket by its global alias + parameters: + - name: alias + in: path + required: true + description: "The exact global alias of one of the existing buckets" + example: "my_documents" + schema: + type: string + responses: + '500': + description: "The server can not handle your request. Check your connectivity with the rest of the cluster." + '404': + description: "Bucket not found" + '200': + description: Returns exhaustive information about the bucket + content: + application/json: + schema: + $ref: '#/components/schemas/BucketInfo' + + /bucket/allow: + post: + tags: + - Bucket + operationId: "AllowBucketKey" + summary: "Allow key" + description: | + ⚠️ **DISCLAIMER**: Garage's developers are aware that this endpoint has an unconventional semantic. Be extra careful when implementing it, its behavior is not obvious. + + Allows a key to do read/write/owner operations on a bucket. + + Flags in permissions which have the value true will be activated. Other flags will remain unchanged (ie. they will keep their internal value). + + For example, if you set read to true, the key will be allowed to read the bucket. + If you set it to false, the key will keeps its previous read permission. + If you want to disallow read for the key, check the DenyBucketKey operation. + + requestBody: + description: | + Aliases to put on the new bucket + required: true + content: + application/json: + schema: + type: object + required: [ bucketId, accessKeyId, permissions ] + properties: + bucketId: + type: string + example: "e6a14cd6a27f48684579ec6b381c078ab11697e6bc8513b72b2f5307e25fff9b" + accessKeyId: + type: string + example: "GK31c2f218a2e44f485b94239e" + permissions: + type: object + required: [ read, write, owner ] + properties: + read: + type: boolean + example: true + write: + type: boolean + example: true + owner: + type: boolean + example: true + responses: + '500': + description: "The server can not handle your request. Check your connectivity with the rest of the cluster." + '400': + description: "Bad request, check your request body" + '404': + description: "Bucket not found" + '200': + description: Returns exhaustive information about the bucket + content: + application/json: + schema: + $ref: '#/components/schemas/BucketInfo' + + /bucket/deny: + post: + tags: + - Bucket + operationId: "DenyBucketKey" + summary: "Deny key" + description: | + ⚠️ **DISCLAIMER**: Garage's developers are aware that this endpoint has an unconventional semantic. Be extra careful when implementing it, its behavior is not obvious. + + Denies a key from doing read/write/owner operations on a bucket. + + Flags in permissions which have the value true will be deactivated. Other flags will remain unchanged. + + For example, if you set read to true, the key will be denied from reading. + If you set read to false, the key will keep its previous permissions. + If you want the key to have the reading permission, check the AllowBucketKey operation. + + requestBody: + description: | + Aliases to put on the new bucket + required: true + content: + application/json: + schema: + type: object + required: [ bucketId, accessKeyId, permissions ] + properties: + bucketId: + type: string + example: "e6a14cd6a27f48684579ec6b381c078ab11697e6bc8513b72b2f5307e25fff9b" + accessKeyId: + type: string + example: "GK31c2f218a2e44f485b94239e" + permissions: + type: object + required: [ read, write, owner ] + properties: + read: + type: boolean + example: true + write: + type: boolean + example: true + owner: + type: boolean + example: true + responses: + '500': + description: "The server can not handle your request. Check your connectivity with the rest of the cluster." + '400': + description: "Bad request, check your request body" + '404': + description: "Bucket not found" + '200': + description: Returns exhaustive information about the bucket + content: + application/json: + schema: + $ref: '#/components/schemas/BucketInfo' + + /bucket/alias/global: + put: + tags: + - Bucket + operationId: "PutBucketGlobalAlias" + summary: "Add a global alias" + description: | + Add a global alias to the target bucket + parameters: + - name: id + in: query + required: true + schema: + type: string + example: e6a14cd6a27f48684579ec6b381c078ab11697e6bc8513b72b2f5307e25fff9b + - name: alias + in: query + required: true + example: my_documents + schema: + type: string + responses: + '500': + description: "The server can not handle your request. Check your connectivity with the rest of the cluster." + '400': + description: "Bad request, check your request body" + '404': + description: "Bucket not found" + '200': + description: Returns exhaustive information about the bucket + content: + application/json: + schema: + $ref: '#/components/schemas/BucketInfo' + + delete: + tags: + - Bucket + operationId: "DeleteBucketGlobalAlias" + summary: "Delete a global alias" + description: | + Delete a global alias from the target bucket + parameters: + - name: id + in: query + required: true + schema: + type: string + example: e6a14cd6a27f48684579ec6b381c078ab11697e6bc8513b72b2f5307e25fff9b + - name: alias + in: query + required: true + schema: + type: string + example: my_documents + responses: + '500': + description: "The server can not handle your request. Check your connectivity with the rest of the cluster." + '400': + description: "Bad request, check your request body" + '404': + description: "Bucket not found" + '200': + description: Returns exhaustive information about the bucket + content: + application/json: + schema: + $ref: '#/components/schemas/BucketInfo' + + /bucket/alias/local: + put: + tags: + - Bucket + operationId: "PutBucketLocalAlias" + summary: "Add a local alias" + description: | + Add a local alias, bound to specified account, to the target bucket + parameters: + - name: id + in: query + required: true + schema: + type: string + example: e6a14cd6a27f48684579ec6b381c078ab11697e6bc8513b72b2f5307e25fff9b + - name: accessKeyId + in: query + required: true + schema: + type: string + example: GK31c2f218a2e44f485b94239e + - name: alias + in: query + required: true + schema: + type: string + example: my_documents + responses: + '500': + description: "The server can not handle your request. Check your connectivity with the rest of the cluster." + '400': + description: "Bad request, check your request body" + '404': + description: "Bucket not found" + '200': + description: Returns exhaustive information about the bucket + content: + application/json: + schema: + $ref: '#/components/schemas/BucketInfo' + + delete: + tags: + - Bucket + operationId: "DeleteBucketLocalAlias" + summary: "Delete a local alias" + description: | + Delete a local alias, bound to specified account, from the target bucket + parameters: + - name: id + in: query + required: true + schema: + type: string + example: e6a14cd6a27f48684579ec6b381c078ab11697e6bc8513b72b2f5307e25fff9b + - name: accessKeyId + in: query + schema: + type: string + required: true + example: GK31c2f218a2e44f485b94239e + - name: alias + in: query + schema: + type: string + required: true + example: my_documents + responses: + '500': + description: "The server can not handle your request. Check your connectivity with the rest of the cluster." + '400': + description: "Bad request, check your request body" + '404': + description: "Bucket not found" + '200': + description: Returns exhaustive information about the bucket + content: + application/json: + schema: + $ref: '#/components/schemas/BucketInfo' + +components: + securitySchemes: + bearerAuth: + type: http + scheme: bearer + schemas: + NodeNetworkInfo: + type: object + required: [ addr, is_up, last_seen_secs_ago, hostname ] + properties: + addr: + type: string + example: "10.0.0.11:3901" + is_up: + type: boolean + example: true + last_seen_secs_ago: + type: integer + nullable: true + example: 9 + hostname: + type: string + example: "node1" + NodeClusterInfo: + type: object + required: [ zone, capacity, tags ] + properties: + zone: + type: string + example: dc1 + capacity: + type: integer + nullable: true + example: 4 + tags: + type: array + description: | + User defined tags, put whatever makes sense for you, these tags are not interpreted by Garage + example: + - gateway + - fast + items: + type: string + ClusterLayout: + type: object + required: [ version, roles, stagedRoleChanges ] + properties: + version: + type: integer + example: 12 + roles: + type: object + example: + "ec79480e0ce52ae26fd00c9da684e4fa56658d9c64cdcecb094e936de0bfe71f": + zone: "madrid" + capacity: 3 + tags: + - fast + - amd64 + "4a6ae5a1d0d33bf895f5bb4f0a418b7dc94c47c0dd2eb108d1158f3c8f60b0ff": + zone: "geneva" + capacity: 7 + tags: + - arm64 + additionalProperties: + $ref: '#/components/schemas/NodeClusterInfo' + stagedRoleChanges: + type: object + example: + "e2ee7984ee65b260682086ec70026165903c86e601a4a5a501c1900afe28d84b": + zone: "geneva" + capacity: 4 + tags: + - gateway + additionalProperties: + $ref: '#/components/schemas/NodeClusterInfo' + LayoutVersion: + type: object + properties: + version: + type: integer + example: 13 + + KeyInfo: + type: object + properties: + name: + type: string + example: "test-key" + accessKeyId: + type: string + example: "GK31c2f218a2e44f485b94239e" + secretAccessKey: + type: string + example: "b892c0665f0ada8a4755dae98baa3b133590e11dae3bcc1f9d769d67f16c3835" + permissions: + type: object + properties: + createBucket: + type: boolean + example: false + buckets: + type: array + items: + type: object + properties: + id: + type: string + example: "70dc3bed7fe83a75e46b66e7ddef7d56e65f3c02f9f80b6749fb97eccb5e1033" + globalAliases: + type: array + items: + type: string + example: "my-bucket" + localAliases: + type: array + items: + type: string + example: "GK31c2f218a2e44f485b94239e:localname" + permissions: + type: object + properties: + read: + type: boolean + example: true + write: + type: boolean + example: true + owner: + type: boolean + example: false + BucketInfo: + type: object + properties: + id: + type: string + example: afa8f0a22b40b1247ccd0affb869b0af5cff980924a20e4b5e0720a44deb8d39 + globalAliases: + type: array + items: + type: string + example: "my_documents" + websiteAccess: + type: boolean + example: true + websiteConfig: + type: object + nullable: true + properties: + indexDocument: + type: string + example: "index.html" + errorDocument: + type: string + example: "error/400.html" + keys: + type: array + items: + $ref: '#/components/schemas/BucketKeyInfo' + objects: + type: integer + format: int64 + example: 14827 + bytes: + type: integer + format: int64 + example: 13189855625 + unfinishedUploads: + type: integer + example: 0 + quotas: + type: object + properties: + maxSize: + nullable: true + type: integer + format: int64 + example: null + maxObjects: + nullable: true + type: integer + format: int64 + example: null + + + BucketKeyInfo: + type: object + properties: + accessKeyId: + type: string + name: + type: string + permissions: + type: object + properties: + read: + type: boolean + example: true + write: + type: boolean + example: true + owner: + type: boolean + example: true + bucketLocalAliases: + type: array + items: + type: string + example: "my_documents" + + +security: + - bearerAuth: [] + +servers: + - description: A local server + url: http://localhost:3903/v1/ From d1d1940252d2a55e3b56386d6eaefdf5c09af8be Mon Sep 17 00:00:00 2001 From: Quentin Dufour Date: Wed, 22 Nov 2023 09:28:50 +0100 Subject: [PATCH 117/538] Health info message now advertises API v1 --- src/api/admin/api_server.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/api/admin/api_server.rs b/src/api/admin/api_server.rs index 4779f924..0ce3ca0d 100644 --- a/src/api/admin/api_server.rs +++ b/src/api/admin/api_server.rs @@ -182,7 +182,7 @@ impl AdminApiServer { ), }; let status_str = format!( - "{}\nConsult the full health check API endpoint at /v0/health for more details\n", + "{}\nConsult the full health check API endpoint at /v1/health for more details\n", status_str ); From 9b24d7c402f15bc2e088caee9c37b3307fa6498a Mon Sep 17 00:00:00 2001 From: Quentin Dufour Date: Wed, 22 Nov 2023 14:25:04 +0100 Subject: [PATCH 118/538] Upgrade GetNodes --- doc/api/garage-admin-v1.yml | 73 ++++++++++++++++++++++++------------- 1 file changed, 48 insertions(+), 25 deletions(-) diff --git a/doc/api/garage-admin-v1.yml b/doc/api/garage-admin-v1.yml index d19d22d3..0b2fdc1a 100644 --- a/doc/api/garage-admin-v1.yml +++ b/doc/api/garage-admin-v1.yml @@ -30,33 +30,53 @@ paths: application/json: schema: type: object - required: [ node, garageVersion, knownNodes, layout ] + required: [ node, garageVersion, garageFeatures, rustVersion, dbEngine, knownNodes, layout ] properties: node: type: string example: "ec79480e0ce52ae26fd00c9da684e4fa56658d9c64cdcecb094e936de0bfe71f" garageVersion: type: string - example: "v0.7.3" - knownNodes: - type: object + example: "v0.9.0" + garageFeatures: + type: array + items: + type: string example: - "ec79480e0ce52ae26fd00c9da684e4fa56658d9c64cdcecb094e936de0bfe71f": + - "k2v" + - "sled" + - "lmdb" + - "sqlite" + - "consul-discovery" + - "kubernetes-discovery" + - "metrics" + - "telemetry-otlp" + - "bundled-libs" + rustVersion: + type: string + example: "1.68.0" + dbEngine: + type: string + example: "LMDB (using Heed crate)" + knownNodes: + type: array + example: + - id: "ec79480e0ce52ae26fd00c9da684e4fa56658d9c64cdcecb094e936de0bfe71f" addr: "10.0.0.11:3901" - is_up: true - last_seen_secs_ago: 9 + isUp: true + lastSeenSecsAgo: 9 hostname: orion - "4a6ae5a1d0d33bf895f5bb4f0a418b7dc94c47c0dd2eb108d1158f3c8f60b0ff": + - id: "4a6ae5a1d0d33bf895f5bb4f0a418b7dc94c47c0dd2eb108d1158f3c8f60b0ff" addr: "10.0.0.12:3901" - is_up: true - last_seen_secs_ago: 13 + isUp: true + lastSeenSecsAgo: 13 hostname: pegasus - "e2ee7984ee65b260682086ec70026165903c86e601a4a5a501c1900afe28d84b": + - id: "e2ee7984ee65b260682086ec70026165903c86e601a4a5a501c1900afe28d84b" addr: "10.0.0.13:3901" - is_up: true - last_seen_secs_ago: 2 + isUp: true + lastSeenSecsAgo: 2 hostname: neptune - additionalProperties: + items: $ref: '#/components/schemas/NodeNetworkInfo' layout: $ref: '#/components/schemas/ClusterLayout' @@ -1007,15 +1027,18 @@ components: schemas: NodeNetworkInfo: type: object - required: [ addr, is_up, last_seen_secs_ago, hostname ] + required: [ addr, isUp, lastSeenSecsAgo, hostname ] properties: + id: + type: string + example: "6a8e08af2aab1083ebab9b22165ea8b5b9d333b60a39ecd504e85cc1f432c36f" addr: type: string example: "10.0.0.11:3901" - is_up: + isUp: type: boolean example: true - last_seen_secs_ago: + lastSeenSecsAgo: type: integer nullable: true example: 9 @@ -1024,7 +1047,7 @@ components: example: "node1" NodeClusterInfo: type: object - required: [ zone, capacity, tags ] + required: [ id, zone, tags ] properties: zone: type: string @@ -1050,30 +1073,30 @@ components: type: integer example: 12 roles: - type: object + type: array example: - "ec79480e0ce52ae26fd00c9da684e4fa56658d9c64cdcecb094e936de0bfe71f": + - id: "ec79480e0ce52ae26fd00c9da684e4fa56658d9c64cdcecb094e936de0bfe71f" zone: "madrid" capacity: 3 tags: - fast - amd64 - "4a6ae5a1d0d33bf895f5bb4f0a418b7dc94c47c0dd2eb108d1158f3c8f60b0ff": + - id: "4a6ae5a1d0d33bf895f5bb4f0a418b7dc94c47c0dd2eb108d1158f3c8f60b0ff" zone: "geneva" capacity: 7 tags: - arm64 - additionalProperties: + items: $ref: '#/components/schemas/NodeClusterInfo' stagedRoleChanges: - type: object + type: array example: - "e2ee7984ee65b260682086ec70026165903c86e601a4a5a501c1900afe28d84b": + - id: "e2ee7984ee65b260682086ec70026165903c86e601a4a5a501c1900afe28d84b" zone: "geneva" capacity: 4 tags: - gateway - additionalProperties: + items: $ref: '#/components/schemas/NodeClusterInfo' LayoutVersion: type: object From e3cd6ed5309c06d1b1089d502882858486ac3643 Mon Sep 17 00:00:00 2001 From: Quentin Dufour Date: Wed, 22 Nov 2023 15:24:30 +0100 Subject: [PATCH 119/538] port GetLayout and AddLayout --- doc/api/garage-admin-v1.yml | 65 ++++++++++++++++++++++++++++++------- 1 file changed, 54 insertions(+), 11 deletions(-) diff --git a/doc/api/garage-admin-v1.yml b/doc/api/garage-admin-v1.yml index 0b2fdc1a..ec9a77f8 100644 --- a/doc/api/garage-admin-v1.yml +++ b/doc/api/garage-admin-v1.yml @@ -167,25 +167,26 @@ paths: Note that setting the capacity to `null` will configure the node as a gateway. requestBody: description: | - To add a new node to the layout or to change the configuration of an existing node, simply set the values you want. - To remove a node, set it to `null` instead of passing a configuration object. + To add a new node to the layout or to change the configuration of an existing node, simply set the values you want (`zone`, `capacity`, and `tags`). + To remove a node, simply pass the `remove: true` field. + This logic is represented in OpenAPI with a "One Of" object. Contrary to the CLI that may update only a subset of the fields capacity, zone and tags, when calling this API all of these values must be specified. required: true content: application/json: schema: - type: object + type: array example: - "e2ee7984ee65b260682086ec70026165903c86e601a4a5a501c1900afe28d84b": + - id: "e2ee7984ee65b260682086ec70026165903c86e601a4a5a501c1900afe28d84b" zone: "geneva" - capacity: 4 + capacity: 8 tags: - gateway - "4a6ae5a1d0d33bf895f5bb4f0a418b7dc94c47c0dd2eb108d1158f3c8f60b0ff": - - additionalProperties: - $ref: '#/components/schemas/NodeClusterInfo' + - id: "4a6ae5a1d0d33bf895f5bb4f0a418b7dc94c47c0dd2eb108d1158f3c8f60b0ff" + remove: true + items: + $ref: '#/components/schemas/NodeRoleChange' responses: '500': description: "The server can not handle your request. Check your connectivity with the rest of the cluster." @@ -193,6 +194,10 @@ paths: description: "Invalid syntax or requested change" '200': description: "The layout modification has been correctly staged" + content: + application/json: + schema: + $ref: '#/components/schemas/ClusterLayout' /layout/apply: post: @@ -1065,6 +1070,42 @@ components: - fast items: type: string + NodeRoleChange: + oneOf: + - $ref: '#/components/schemas/NodeRoleRemove' + - $ref: '#/components/schemas/NodeRoleUpdate' + NodeRoleRemove: + type: object + required: [ remove ] + properties: + id: + type: string + example: "6a8e08af2aab1083ebab9b22165ea8b5b9d333b60a39ecd504e85cc1f432c36f" + remove: + type: bool + example: true + NodeRoleUpdate: + type: object + required: [ zone, capacity, tags ] + properties: + id: + type: string + example: "6a8e08af2aab1083ebab9b22165ea8b5b9d333b60a39ecd504e85cc1f432c36f" + zone: + type: string + example: "dc1" + capacity: + type: integer + nullable: true + example: 150 + tags: + type: array + items: + type: string + example: + - gateway + - fast + ClusterLayout: type: object required: [ version, roles, stagedRoleChanges ] @@ -1093,11 +1134,13 @@ components: example: - id: "e2ee7984ee65b260682086ec70026165903c86e601a4a5a501c1900afe28d84b" zone: "geneva" - capacity: 4 + capacity: 8 tags: - gateway + - id: "4a6ae5a1d0d33bf895f5bb4f0a418b7dc94c47c0dd2eb108d1158f3c8f60b0ff" + remove: true items: - $ref: '#/components/schemas/NodeClusterInfo' + $ref: '#/components/schemas/NodeRoleChange' LayoutVersion: type: object properties: From 20b3afbde412176e8862457dc4d9257a42200579 Mon Sep 17 00:00:00 2001 From: Quentin Dufour Date: Wed, 22 Nov 2023 17:49:51 +0100 Subject: [PATCH 120/538] Port layout endpoints --- doc/api/garage-admin-v1.yml | 47 ++++++++++++++++++++++++++++++++----- 1 file changed, 41 insertions(+), 6 deletions(-) diff --git a/doc/api/garage-admin-v1.yml b/doc/api/garage-admin-v1.yml index ec9a77f8..9fb57e11 100644 --- a/doc/api/garage-admin-v1.yml +++ b/doc/api/garage-admin-v1.yml @@ -19,6 +19,8 @@ paths: - Live nodes - Currently configured cluster layout - Staged changes to the cluster layout + + *Capacity is given in bytes* responses: '500': description: | @@ -142,6 +144,7 @@ paths: - Currently configured cluster layout - Staged changes to the cluster layout + *Capacity is given in bytes* *The info returned by this endpoint is a subset of the info returned by `GET /status`.* responses: '500': @@ -164,7 +167,12 @@ paths: summary: "Send modifications to the cluster layout" description: | Send modifications to the cluster layout. These modifications will be included in the staged role changes, visible in subsequent calls of `GET /layout`. Once the set of staged changes is satisfactory, the user may call `POST /layout/apply` to apply the changed changes, or `POST /layout/revert` to clear all of the staged changes in the layout. - Note that setting the capacity to `null` will configure the node as a gateway. + + Setting the capacity to `null` will configure the node as a gateway. + Otherwise, capacity must be now set in bytes (before Garage 0.9 it was arbitrary weights). + For example to declare 100GB, you must set `capacity: 100000000000`. + + Garage uses internally the International System of Units (SI), it assumes that 1kB = 1000 bytes, and displays storage as kB, MB, GB (and not KiB, MiB, GiB that assume 1KiB = 1024 bytes). requestBody: description: | To add a new node to the layout or to change the configuration of an existing node, simply set the values you want (`zone`, `capacity`, and `tags`). @@ -180,7 +188,7 @@ paths: example: - id: "e2ee7984ee65b260682086ec70026165903c86e601a4a5a501c1900afe28d84b" zone: "geneva" - capacity: 8 + capacity: 100000000000 tags: - gateway - id: "4a6ae5a1d0d33bf895f5bb4f0a418b7dc94c47c0dd2eb108d1158f3c8f60b0ff" @@ -207,6 +215,8 @@ paths: summary: "Apply staged layout" description: | Applies to the cluster the layout changes currently registered as staged layout changes. + + *Note: do not try to parse the `message` field of the response, it is given as an array of string specifically because its format is not stable.* requestBody: description: | Similarly to the CLI, the body must include the version of the new layout that will be created, which MUST be 1 + the value of the currently existing layout in the cluster. @@ -223,6 +233,31 @@ paths: description: "Invalid syntax or requested change" '200': description: "The staged layout has been applied as the new layout of the cluster, a rebalance has been triggered." + content: + application/json: + schema: + type: object + required: [ message, layout ] + properties: + message: + type: array + items: + type: string + example: + - "==== COMPUTATION OF A NEW PARTITION ASSIGNATION ====" + - "" + - "Partitions are replicated 1 times on at least 1 distinct zones." + - "" + - "Optimal partition size: 419.4 MB (3 B in previous layout)" + - "Usable capacity / total cluster capacity: 107.4 GB / 107.4 GB (100.0 %)" + - "Effective capacity (replication factor 1): 107.4 GB" + - "" + - "A total of 0 new copies of partitions need to be transferred." + - "" + - "dc1 Tags Partitions Capacity Usable capacity\n 6a8e08af2aab1083 a,v 256 (0 new) 107.4 GB 107.4 GB (100.0%)\n TOTAL 256 (256 unique) 107.4 GB 107.4 GB (100.0%)\n\n" + layout: + $ref: '#/components/schemas/ClusterLayout' + /layout/revert: post: @@ -1097,7 +1132,7 @@ components: capacity: type: integer nullable: true - example: 150 + example: 150000000000 tags: type: array items: @@ -1118,13 +1153,13 @@ components: example: - id: "ec79480e0ce52ae26fd00c9da684e4fa56658d9c64cdcecb094e936de0bfe71f" zone: "madrid" - capacity: 3 + capacity: 300000000000 tags: - fast - amd64 - id: "4a6ae5a1d0d33bf895f5bb4f0a418b7dc94c47c0dd2eb108d1158f3c8f60b0ff" zone: "geneva" - capacity: 7 + capacity: 700000000000 tags: - arm64 items: @@ -1134,7 +1169,7 @@ components: example: - id: "e2ee7984ee65b260682086ec70026165903c86e601a4a5a501c1900afe28d84b" zone: "geneva" - capacity: 8 + capacity: 800000000000 tags: - gateway - id: "4a6ae5a1d0d33bf895f5bb4f0a418b7dc94c47c0dd2eb108d1158f3c8f60b0ff" From 0d415f42ac9158ba30079f9ed315a1d1c6a8caf9 Mon Sep 17 00:00:00 2001 From: Quentin Dufour Date: Wed, 22 Nov 2023 18:05:11 +0100 Subject: [PATCH 121/538] Port GetKeyInfo by adding showSecretKey query param --- doc/api/garage-admin-v1.yml | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/doc/api/garage-admin-v1.yml b/doc/api/garage-admin-v1.yml index 9fb57e11..b41fcc5a 100644 --- a/doc/api/garage-admin-v1.yml +++ b/doc/api/garage-admin-v1.yml @@ -361,6 +361,14 @@ paths: example: "GK31c2f218a2e44f485b94239e" schema: type: string + - name: showSecretKey + in: query + schema: + type: boolean + default: false + example: true + required: false + description: "Wether or not the secret key should be returned in the response" responses: '500': description: "The server can not handle your request. Check your connectivity with the rest of the cluster." @@ -464,6 +472,14 @@ paths: example: "test-k" schema: type: string + - name: showSecretKey + in: query + schema: + type: boolean + default: false + example: true + required: false + description: "Wether or not the secret key should be returned in the response" responses: '500': description: "The server can not handle your request. Check your connectivity with the rest of the cluster." @@ -1117,7 +1133,7 @@ components: type: string example: "6a8e08af2aab1083ebab9b22165ea8b5b9d333b60a39ecd504e85cc1f432c36f" remove: - type: bool + type: boolean example: true NodeRoleUpdate: type: object @@ -1194,6 +1210,7 @@ components: example: "GK31c2f218a2e44f485b94239e" secretAccessKey: type: string + nullable: true example: "b892c0665f0ada8a4755dae98baa3b133590e11dae3bcc1f9d769d67f16c3835" permissions: type: object From 3684c29ad05458500b154428bfec6a8c15b2cdef Mon Sep 17 00:00:00 2001 From: Quentin Dufour Date: Wed, 22 Nov 2023 18:14:38 +0100 Subject: [PATCH 122/538] handle key changes --- doc/api/garage-admin-v1.yml | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/doc/api/garage-admin-v1.yml b/doc/api/garage-admin-v1.yml index b41fcc5a..21922da9 100644 --- a/doc/api/garage-admin-v1.yml +++ b/doc/api/garage-admin-v1.yml @@ -323,7 +323,10 @@ paths: Creates a new API access key. requestBody: description: | - "You can set a friendly name for this key, send an empty string instead" + You can set a friendly name for this key. + If you don't want to, you can set the name to `null`. + + *Note: the secret key is returned in the response.* required: true content: application/json: @@ -332,6 +335,7 @@ paths: properties: name: type: string + nullable: true example: "test-key" responses: '500': @@ -352,7 +356,9 @@ paths: operationId: "GetKey" summary: "Get key information" description: | - Return information about a specific key and return its information + Return information about a specific key like its identifiers, its permissions and buckets on which it has permissions. + + For confidentiality reasons, the secret key is not returned by default: you must pass the `showSecretKey` query parameter to get it. parameters: - name: access_key in: path @@ -409,6 +415,8 @@ paths: summary: "Update a key" description: | Updates information about the specified API access key. + + *Note: the secret key is not returned in the response, `null` is sent instead.* parameters: - name: access_key in: path @@ -463,7 +471,9 @@ paths: operationId: "SearchKey" summary: "Select key by pattern" description: | - Find the first key matching the given pattern based on its identifier aor friendly name and return its information. + Find the first key matching the given pattern based on its identifier or friendly name and return its information. + + For confidentiality reasons, the secret key is not returned by default: you must pass the `showSecretKey` query parameter to get it. parameters: - name: pattern in: path @@ -514,6 +524,7 @@ paths: name: type: string example: "test-key" + nullable: true accessKeyId: type: string example: "GK31c2f218a2e44f485b94239e" From 4f473f43c979c58e57184a2aab4f2a322f607b29 Mon Sep 17 00:00:00 2001 From: Quentin Dufour Date: Wed, 22 Nov 2023 20:39:38 +0100 Subject: [PATCH 123/538] Change how query parameters are handled --- doc/api/garage-admin-v1.yml | 125 ++++++++++++------------------------ 1 file changed, 41 insertions(+), 84 deletions(-) diff --git a/doc/api/garage-admin-v1.yml b/doc/api/garage-admin-v1.yml index 21922da9..52b2faae 100644 --- a/doc/api/garage-admin-v1.yml +++ b/doc/api/garage-admin-v1.yml @@ -283,7 +283,7 @@ paths: '200': description: "The staged layout has been cleared, you can start again sending modification from a fresh copy with `POST /layout`." - /key: + "/key?list": get: tags: - Key @@ -349,7 +349,7 @@ paths: schema: $ref: '#/components/schemas/KeyInfo' - "/key?id={access_key}": + "/key": get: tags: - Key @@ -357,16 +357,28 @@ paths: summary: "Get key information" description: | Return information about a specific key like its identifiers, its permissions and buckets on which it has permissions. + You can search by specifying the exact key identifier (`id`) or by specifying a pattern (`search`). For confidentiality reasons, the secret key is not returned by default: you must pass the `showSecretKey` query parameter to get it. parameters: - - name: access_key - in: path - required: true - description: "The exact API access key generated by Garage" + - name: id + in: query + description: | + The exact API access key generated by Garage. + + Incompatible with `search`. example: "GK31c2f218a2e44f485b94239e" schema: type: string + - name: search + in: query + description: | + A pattern (beginning or full string) corresponding to a key identifier or friendly name. + + Incompatible with `id`. + example: "test-k" + schema: + type: string - name: showSecretKey in: query schema: @@ -464,43 +476,6 @@ paths: $ref: '#/components/schemas/KeyInfo' - "/key?search={pattern}": - get: - tags: - - Key - operationId: "SearchKey" - summary: "Select key by pattern" - description: | - Find the first key matching the given pattern based on its identifier or friendly name and return its information. - - For confidentiality reasons, the secret key is not returned by default: you must pass the `showSecretKey` query parameter to get it. - parameters: - - name: pattern - in: path - required: true - description: "A pattern (beginning or full string) corresponding to a key identifier or friendly name" - example: "test-k" - schema: - type: string - - name: showSecretKey - in: query - schema: - type: boolean - default: false - example: true - required: false - description: "Wether or not the secret key should be returned in the response" - responses: - '500': - description: "The server can not handle your request. Check your connectivity with the rest of the cluster." - '200': - description: | - Returns information about the key - content: - application/json: - schema: - $ref: '#/components/schemas/KeyInfo' - /key/import: post: tags: @@ -543,7 +518,7 @@ paths: schema: $ref: '#/components/schemas/KeyInfo' - /bucket: + "/bucket?list": get: tags: - Bucket @@ -599,6 +574,8 @@ paths: type: string accessKeyId: type: string + + /bucket: post: tags: - Bucket @@ -650,27 +627,35 @@ paths: application/json: schema: $ref: '#/components/schemas/BucketInfo' - - - "/bucket?id={bucket_id}": get: tags: - Bucket operationId: "GetBucketInfo" summary: "Get a bucket" description: | - Given a bucket identifier, get its information. + Given a bucket identifier (`id`) or a global alias (`alias`), get its information. It includes its aliases, its web configuration, keys that have some permissions on it, some statistics (number of objects, size), number of dangling multipart uploads, and its quotas (if any). parameters: - - name: bucket_id - in: path - required: true - description: "The exact bucket identifier, a 32 bytes hexadecimal string" + - name: id + in: query + description: | + The exact bucket identifier, a 32 bytes hexadecimal string. + + Incompatible with `alias`. example: "b4018dc61b27ccb5c64ec1b24f53454bbbd180697c758c4d47a22a8921864a87" schema: type: string + - name: alias + in: query + description: | + The exact global alias of one of the existing buckets. + + Incompatible with `id`. + example: "my_documents" + schema: + type: string responses: '500': description: "The server can not handle your request. Check your connectivity with the rest of the cluster." @@ -694,8 +679,8 @@ paths: **Warning:** this will delete all aliases associated with the bucket! parameters: - - name: bucket_id - in: path + - name: id + in: query required: true description: "The exact bucket identifier, a 32 bytes hexadecimal string" example: "b4018dc61b27ccb5c64ec1b24f53454bbbd180697c758c4d47a22a8921864a87" @@ -731,8 +716,8 @@ paths: to remove the quotas. An absent value will be considered the same as a `null`. It is not possible to change only one of the two quotas. parameters: - - name: bucket_id - in: path + - name: id + in: query required: true description: "The exact bucket identifier, a 32 bytes hexadecimal string" example: "b4018dc61b27ccb5c64ec1b24f53454bbbd180697c758c4d47a22a8921864a87" @@ -788,34 +773,6 @@ paths: schema: $ref: '#/components/schemas/BucketInfo' - "/bucket?globalAlias={alias}": - get: - tags: - - Bucket - operationId: "FindBucketInfo" - summary: "Find a bucket" - description: | - Find a bucket by its global alias - parameters: - - name: alias - in: path - required: true - description: "The exact global alias of one of the existing buckets" - example: "my_documents" - schema: - type: string - responses: - '500': - description: "The server can not handle your request. Check your connectivity with the rest of the cluster." - '404': - description: "Bucket not found" - '200': - description: Returns exhaustive information about the bucket - content: - application/json: - schema: - $ref: '#/components/schemas/BucketInfo' - /bucket/allow: post: tags: From 2d37e7fa391679ad4daa0725d2af9681e4dd9635 Mon Sep 17 00:00:00 2001 From: Quentin Dufour Date: Wed, 22 Nov 2023 21:05:36 +0100 Subject: [PATCH 124/538] convert showsecretkey from bool to enum --- doc/api/garage-admin-v1.yml | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/doc/api/garage-admin-v1.yml b/doc/api/garage-admin-v1.yml index 52b2faae..078da5da 100644 --- a/doc/api/garage-admin-v1.yml +++ b/doc/api/garage-admin-v1.yml @@ -382,9 +382,12 @@ paths: - name: showSecretKey in: query schema: - type: boolean - default: false - example: true + type: string + default: "false" + enum: + - "true" + - "false" + example: "true" required: false description: "Wether or not the secret key should be returned in the response" responses: From 814b3e11d4486b6d4c291b4e47b845521ddfb25c Mon Sep 17 00:00:00 2001 From: Quentin Dufour Date: Thu, 23 Nov 2023 08:50:10 +0100 Subject: [PATCH 125/538] fix query parameters for keys --- doc/api/garage-admin-v1.yml | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/doc/api/garage-admin-v1.yml b/doc/api/garage-admin-v1.yml index 078da5da..063bc382 100644 --- a/doc/api/garage-admin-v1.yml +++ b/doc/api/garage-admin-v1.yml @@ -348,7 +348,7 @@ paths: application/json: schema: $ref: '#/components/schemas/KeyInfo' - + "/key": get: tags: @@ -409,8 +409,8 @@ paths: description: | Delete a key from the cluster. Its access will be removed from all the buckets. Buckets are not automatically deleted and can be dangling. You should manually delete them before. parameters: - - name: access_key - in: path + - name: id + in: query required: true description: "The exact API access key generated by Garage" example: "GK31c2f218a2e44f485b94239e" @@ -433,8 +433,8 @@ paths: *Note: the secret key is not returned in the response, `null` is sent instead.* parameters: - - name: access_key - in: path + - name: id + in: query required: true description: "The exact API access key generated by Garage" example: "GK31c2f218a2e44f485b94239e" From 1caa6e29e5a305b8bd76d25a29ebf97708554f10 Mon Sep 17 00:00:00 2001 From: Quentin Dufour Date: Thu, 23 Nov 2023 10:02:41 +0100 Subject: [PATCH 126/538] capacity is int64 --- doc/api/garage-admin-v1.yml | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/doc/api/garage-admin-v1.yml b/doc/api/garage-admin-v1.yml index 063bc382..23943995 100644 --- a/doc/api/garage-admin-v1.yml +++ b/doc/api/garage-admin-v1.yml @@ -1081,6 +1081,7 @@ components: example: dc1 capacity: type: integer + format: int64 nullable: true example: 4 tags: @@ -1098,7 +1099,7 @@ components: - $ref: '#/components/schemas/NodeRoleUpdate' NodeRoleRemove: type: object - required: [ remove ] + required: [ id, remove ] properties: id: type: string @@ -1108,7 +1109,7 @@ components: example: true NodeRoleUpdate: type: object - required: [ zone, capacity, tags ] + required: [ id, zone, capacity, tags ] properties: id: type: string @@ -1118,6 +1119,7 @@ components: example: "dc1" capacity: type: integer + format: int64 nullable: true example: 150000000000 tags: From 9f1043586cd56cf8596e58e0b38e87f059acb193 Mon Sep 17 00:00:00 2001 From: Quentin Dufour Date: Thu, 23 Nov 2023 10:14:23 +0100 Subject: [PATCH 127/538] set layout version as required --- doc/api/garage-admin-v1.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/doc/api/garage-admin-v1.yml b/doc/api/garage-admin-v1.yml index 23943995..73aca28a 100644 --- a/doc/api/garage-admin-v1.yml +++ b/doc/api/garage-admin-v1.yml @@ -1167,9 +1167,11 @@ components: $ref: '#/components/schemas/NodeRoleChange' LayoutVersion: type: object + required: [ version ] properties: version: type: integer + format: int64 example: 13 KeyInfo: From 68d23cccdfc650cb8fa48fb2871ca4dfe7014d44 Mon Sep 17 00:00:00 2001 From: Quentin Dufour Date: Thu, 23 Nov 2023 10:20:36 +0100 Subject: [PATCH 128/538] disable int64 finally for now --- doc/api/garage-admin-v1.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/api/garage-admin-v1.yml b/doc/api/garage-admin-v1.yml index 73aca28a..8b5a5b37 100644 --- a/doc/api/garage-admin-v1.yml +++ b/doc/api/garage-admin-v1.yml @@ -1171,7 +1171,7 @@ components: properties: version: type: integer - format: int64 + #format: int64 example: 13 KeyInfo: From d6d239fc7909cbd017da6ea35cceb3d561a87cca Mon Sep 17 00:00:00 2001 From: Alex Auvolat Date: Mon, 27 Nov 2023 11:52:57 +0100 Subject: [PATCH 129/538] block manager: read_block using old layout versions if necessary --- src/block/manager.rs | 6 ++++-- src/rpc/layout/helper.rs | 23 +++++++++++++++++++++++ src/rpc/layout/history.rs | 12 +++++++++++- src/rpc/layout/schema.rs | 7 +++++++ src/rpc/rpc_helper.rs | 11 +++++------ 5 files changed, 50 insertions(+), 9 deletions(-) diff --git a/src/block/manager.rs b/src/block/manager.rs index be2e4951..47111160 100644 --- a/src/block/manager.rs +++ b/src/block/manager.rs @@ -264,8 +264,10 @@ impl BlockManager { F: Fn(DataBlockHeader, ByteStream) -> Fut, Fut: futures::Future>, { - let who = self.replication.read_nodes(hash); - let who = self.system.rpc_helper().request_order(&who); + let who = self + .system + .cluster_layout() + .block_read_nodes_of(hash, self.system.rpc_helper()); for node in who.iter() { let node_id = NodeID::from(*node); diff --git a/src/rpc/layout/helper.rs b/src/rpc/layout/helper.rs index 0d746ea3..5d159f3e 100644 --- a/src/rpc/layout/helper.rs +++ b/src/rpc/layout/helper.rs @@ -7,6 +7,7 @@ use serde::{Deserialize, Serialize}; use garage_util::data::*; use super::schema::*; +use crate::rpc_helper::RpcHelper; #[derive(Debug, Clone, Serialize, Deserialize, Default, PartialEq, Eq)] pub struct LayoutDigest { @@ -140,6 +141,28 @@ impl LayoutHelper { .collect() } + pub fn block_read_nodes_of(&self, position: &Hash, rpc_helper: &RpcHelper) -> Vec { + let mut ret = Vec::with_capacity(12); + let ver_iter = self + .layout() + .versions + .iter() + .rev() + .chain(self.layout().old_versions.iter().rev()); + for ver in ver_iter { + if ver.version > self.sync_map_min { + continue; + } + let nodes = ver.nodes_of(position, ver.replication_factor); + for node in rpc_helper.request_order(nodes) { + if !ret.contains(&node) { + ret.push(node); + } + } + } + ret + } + pub(crate) fn write_sets_of(&self, position: &Hash) -> Vec> { self.layout() .versions diff --git a/src/rpc/layout/history.rs b/src/rpc/layout/history.rs index 653d2a48..7d4a1b48 100644 --- a/src/rpc/layout/history.rs +++ b/src/rpc/layout/history.rs @@ -18,6 +18,7 @@ impl LayoutHistory { LayoutHistory { versions: vec![version], + old_versions: vec![], update_trackers: Default::default(), staging: Lww::raw(0, staging), } @@ -86,11 +87,20 @@ impl LayoutHistory { .min(&all_nongateway_nodes, min_version); if self.min_stored() < sync_ack_map_min { let removed = self.versions.remove(0); - info!("Layout history: pruning old version {}", removed.version); + info!( + "Layout history: moving version {} to old_versions", + removed.version + ); + self.old_versions.push(removed); } else { break; } } + + while self.old_versions.len() > OLD_VERSION_COUNT { + let removed = self.old_versions.remove(0); + info!("Layout history: removing old_version {}", removed.version); + } } pub(crate) fn clamp_update_trackers(&mut self, nodes: &[Uuid]) { diff --git a/src/rpc/layout/schema.rs b/src/rpc/layout/schema.rs index 00a2c017..08db44ca 100644 --- a/src/rpc/layout/schema.rs +++ b/src/rpc/layout/schema.rs @@ -193,12 +193,18 @@ mod v010 { use std::collections::BTreeMap; pub use v09::{LayoutParameters, NodeRole, NodeRoleV, ZoneRedundancy}; + pub const OLD_VERSION_COUNT: usize = 5; + /// The history of cluster layouts, with trackers to keep a record /// of which nodes are up-to-date to current cluster data #[derive(Clone, Debug, Serialize, Deserialize, PartialEq)] pub struct LayoutHistory { /// The versions currently in use in the cluster pub versions: Vec, + /// At most 5 of the previous versions, not used by the garage_table + /// module, but usefull for the garage_block module to find data blocks + /// that have not yet been moved + pub old_versions: Vec, /// Update trackers pub update_trackers: UpdateTrackers, @@ -300,6 +306,7 @@ mod v010 { }; Self { versions: vec![version], + old_versions: vec![], update_trackers: UpdateTrackers { ack_map: update_tracker.clone(), sync_map: update_tracker.clone(), diff --git a/src/rpc/rpc_helper.rs b/src/rpc/rpc_helper.rs index 7e9fabd7..e9a9143f 100644 --- a/src/rpc/rpc_helper.rs +++ b/src/rpc/rpc_helper.rs @@ -267,7 +267,7 @@ impl RpcHelper { // When there are errors, we start new requests to compensate. // Reorder requests to priorize closeness / low latency - let request_order = self.request_order(to); + let request_order = self.request_order(to.iter().copied()); let send_all_at_once = strategy.rs_send_all_at_once.unwrap_or(false); // Build future for each request @@ -335,7 +335,7 @@ impl RpcHelper { } } - pub fn request_order(&self, nodes: &[Uuid]) -> Vec { + pub fn request_order(&self, nodes: impl Iterator) -> Vec { // Retrieve some status variables that we will use to sort requests let peer_list = self.0.fullmesh.get_peer_list(); let layout = self.0.layout.read().unwrap(); @@ -351,9 +351,8 @@ impl RpcHelper { // By sorting this vec, we priorize ourself, then nodes in the same zone, // and within a same zone we priorize nodes with the lowest latency. let mut nodes = nodes - .iter() .map(|to| { - let peer_zone = match layout.current().node_role(to) { + let peer_zone = match layout.current().node_role(&to) { Some(pc) => &pc.zone, None => "", }; @@ -363,10 +362,10 @@ impl RpcHelper { .and_then(|pi| pi.avg_ping) .unwrap_or_else(|| Duration::from_secs(10)); ( - *to != self.0.our_node_id, + to != self.0.our_node_id, peer_zone != our_zone, peer_avg_ping, - *to, + to, ) }) .collect::>(); From 78362140f5a177340a06690d9c9ea98bd831e7a4 Mon Sep 17 00:00:00 2001 From: Alex Auvolat Date: Mon, 27 Nov 2023 12:10:21 +0100 Subject: [PATCH 130/538] rpc: update system::health to take into account write sets for all partitions --- src/rpc/system.rs | 73 ++++++++++++++++++++++++++++------------------- 1 file changed, 43 insertions(+), 30 deletions(-) diff --git a/src/rpc/system.rs b/src/rpc/system.rs index dc127afb..c7d41ee4 100644 --- a/src/rpc/system.rs +++ b/src/rpc/system.rs @@ -1,5 +1,5 @@ //! Module containing structs related to membership management -use std::collections::HashMap; +use std::collections::{HashMap, HashSet}; use std::io::{Read, Write}; use std::net::{IpAddr, SocketAddr}; use std::path::{Path, PathBuf}; @@ -418,48 +418,61 @@ impl System { } pub fn health(&self) -> ClusterHealth { - // TODO: adapt this function to take into account layout history - // when estimating cluster health, and not just use current layout - let quorum = self.replication_mode.write_quorum(); - let replication_factor = self.replication_factor; + // Gather information about running nodes. + // Technically, `nodes` contains currently running nodes, as well + // as nodes that this Garage process has been connected to at least + // once since it started. let nodes = self .get_known_nodes() .into_iter() .map(|n| (n.id, n)) .collect::>(); let connected_nodes = nodes.iter().filter(|(_, n)| n.is_up).count(); + let node_up = |x: &Uuid| nodes.get(x).map(|n| n.is_up).unwrap_or(false); - let layout = self.cluster_layout(); // acquires a rwlock + // Acquire a rwlock read-lock to the current cluster layout + let layout = self.cluster_layout(); - let storage_nodes = layout - .current() - .roles - .items() - .iter() - .filter(|(_, _, v)| matches!(v, NodeRoleV(Some(r)) if r.capacity.is_some())) - .collect::>(); - let storage_nodes_ok = storage_nodes - .iter() - .filter(|(x, _, _)| nodes.get(x).map(|n| n.is_up).unwrap_or(false)) - .count(); + // Obtain information about nodes that have a role as storage nodes + // in one of the active layout versions + let mut storage_nodes = HashSet::::with_capacity(16); + for ver in layout.versions.iter() { + storage_nodes.extend( + ver.roles + .items() + .iter() + .filter(|(_, _, v)| matches!(v, NodeRoleV(Some(r)) if r.capacity.is_some())) + .map(|(n, _, _)| *n), + ) + } + let storage_nodes_ok = storage_nodes.iter().filter(|x| node_up(x)).count(); + // Determine the number of partitions that have: + // - a quorum of up nodes for all write sets (i.e. are available) + // - for which all nodes in all write sets are up (i.e. are fully healthy) let partitions = layout.current().partitions().collect::>(); - let partitions_n_up = partitions - .iter() - .map(|(_, h)| { - let pn = layout.current().nodes_of(h, replication_factor); - pn.filter(|x| nodes.get(x).map(|n| n.is_up).unwrap_or(false)) - .count() - }) - .collect::>(); - let partitions_all_ok = partitions_n_up - .iter() - .filter(|c| **c == replication_factor) - .count(); - let partitions_quorum = partitions_n_up.iter().filter(|c| **c >= quorum).count(); + let mut partitions_quorum = 0; + let mut partitions_all_ok = 0; + for (_, hash) in partitions.iter() { + let write_sets = layout + .versions + .iter() + .map(|x| x.nodes_of(hash, x.replication_factor)); + let has_quorum = write_sets + .clone() + .all(|set| set.filter(|x| node_up(x)).count() >= quorum); + let all_ok = write_sets.clone().all(|mut set| set.all(|x| node_up(&x))); + if has_quorum { + partitions_quorum += 1; + } + if all_ok { + partitions_all_ok += 1; + } + } + // Determine overall cluster status let status = if partitions_quorum == partitions.len() && storage_nodes_ok == storage_nodes.len() { ClusterHealthStatus::Healthy From 539a920313fff010b8a4291aeef58ec9a14ee635 Mon Sep 17 00:00:00 2001 From: Alex Auvolat Date: Mon, 27 Nov 2023 13:18:59 +0100 Subject: [PATCH 131/538] cli: show when nodes are draining metadata --- src/garage/cli/cmd.rs | 172 ++++++++++++++++++++++++++---------------- 1 file changed, 108 insertions(+), 64 deletions(-) diff --git a/src/garage/cli/cmd.rs b/src/garage/cli/cmd.rs index 1a054025..c99243b9 100644 --- a/src/garage/cli/cmd.rs +++ b/src/garage/cli/cmd.rs @@ -1,4 +1,4 @@ -use std::collections::HashSet; +use std::collections::{HashMap, HashSet}; use std::time::Duration; use format_table::format_table; @@ -62,35 +62,69 @@ pub async fn cmd_status(rpc_cli: &Endpoint, rpc_host: NodeID) -> let mut healthy_nodes = vec!["ID\tHostname\tAddress\tTags\tZone\tCapacity\tDataAvail".to_string()]; for adv in status.iter().filter(|adv| adv.is_up) { - match layout.current().roles.get(&adv.id) { - Some(NodeRoleV(Some(cfg))) => { - let data_avail = match &adv.status.data_disk_avail { - _ if cfg.capacity.is_none() => "N/A".into(), - Some((avail, total)) => { - let pct = (*avail as f64) / (*total as f64) * 100.; - let avail = bytesize::ByteSize::b(*avail); - format!("{} ({:.1}%)", avail, pct) - } - None => "?".into(), - }; + if let Some(NodeRoleV(Some(cfg))) = layout.current().roles.get(&adv.id) { + let data_avail = match &adv.status.data_disk_avail { + _ if cfg.capacity.is_none() => "N/A".into(), + Some((avail, total)) => { + let pct = (*avail as f64) / (*total as f64) * 100.; + let avail = bytesize::ByteSize::b(*avail); + format!("{} ({:.1}%)", avail, pct) + } + None => "?".into(), + }; + healthy_nodes.push(format!( + "{id:?}\t{host}\t{addr}\t[{tags}]\t{zone}\t{capacity}\t{data_avail}", + id = adv.id, + host = adv.status.hostname, + addr = adv.addr, + tags = cfg.tags.join(","), + zone = cfg.zone, + capacity = cfg.capacity_string(), + data_avail = data_avail, + )); + } else { + let prev_role = layout + .versions + .iter() + .rev() + .find_map(|x| match x.roles.get(&adv.id) { + Some(NodeRoleV(Some(cfg))) => Some(cfg), + _ => None, + }); + let historic_role = + layout + .old_versions + .iter() + .rev() + .find_map(|x| match x.roles.get(&adv.id) { + Some(NodeRoleV(Some(cfg))) => Some(cfg), + _ => None, + }); + if let Some(cfg) = prev_role { healthy_nodes.push(format!( - "{id:?}\t{host}\t{addr}\t[{tags}]\t{zone}\t{capacity}\t{data_avail}", + "{id:?}\t{host}\t{addr}\t[{tags}]\t{zone}\tdraining metadata...", id = adv.id, host = adv.status.hostname, addr = adv.addr, tags = cfg.tags.join(","), zone = cfg.zone, - capacity = cfg.capacity_string(), - data_avail = data_avail, )); - } - _ => { + } else if let Some(cfg) = historic_role { + healthy_nodes.push(format!( + "{id:?}\t{host}\t{addr}\t[{tags}]\t{zone}\tremoved, metadata drained", + id = adv.id, + host = adv.status.hostname, + addr = adv.addr, + tags = cfg.tags.join(","), + zone = cfg.zone, + )); + } else { let new_role = match layout.staging.get().roles.get(&adv.id) { - Some(NodeRoleV(Some(_))) => "(pending)", + Some(NodeRoleV(Some(_))) => "pending...", _ => "NO ROLE ASSIGNED", }; healthy_nodes.push(format!( - "{id:?}\t{h}\t{addr}\t{new_role}", + "{id:?}\t{h}\t{addr}\t\t\t{new_role}", id = adv.id, h = adv.status.hostname, addr = adv.addr, @@ -101,55 +135,65 @@ pub async fn cmd_status(rpc_cli: &Endpoint, rpc_host: NodeID) -> } format_table(healthy_nodes); - let status_keys = status.iter().map(|adv| adv.id).collect::>(); - let failure_case_1 = status.iter().any(|adv| { - !adv.is_up - && matches!( - layout.current().roles.get(&adv.id), - Some(NodeRoleV(Some(_))) - ) - }); - let failure_case_2 = layout - .current() - .roles - .items() + // Determine which nodes are unhealthy and print that to stdout + let status_map = status .iter() - .any(|(id, _, v)| !status_keys.contains(id) && v.0.is_some()); - if failure_case_1 || failure_case_2 { - println!("\n==== FAILED NODES ===="); - let mut failed_nodes = - vec!["ID\tHostname\tAddress\tTags\tZone\tCapacity\tLast seen".to_string()]; - for adv in status.iter().filter(|adv| !adv.is_up) { - if let Some(NodeRoleV(Some(cfg))) = layout.current().roles.get(&adv.id) { - let tf = timeago::Formatter::new(); - failed_nodes.push(format!( - "{id:?}\t{host}\t{addr}\t[{tags}]\t{zone}\t{capacity}\t{last_seen}", - id = adv.id, - host = adv.status.hostname, - addr = adv.addr, - tags = cfg.tags.join(","), - zone = cfg.zone, - capacity = cfg.capacity_string(), - last_seen = adv - .last_seen_secs_ago + .map(|adv| (adv.id, adv)) + .collect::>(); + + let tf = timeago::Formatter::new(); + let mut failed_nodes = + vec!["ID\tHostname\tAddress\tTags\tZone\tCapacity\tLast seen".to_string()]; + let mut listed = HashSet::new(); + for ver in layout.versions.iter().rev() { + for (node, _, role) in ver.roles.items().iter() { + let cfg = match role { + NodeRoleV(Some(role)) if role.capacity.is_some() => role, + _ => continue, + }; + + if listed.contains(node) { + continue; + } + listed.insert(*node); + + let adv = status_map.get(node); + if adv.map(|x| x.is_up).unwrap_or(false) { + continue; + } + + // Node is in a layout version, is not a gateway node, and is not up: + // it is in a failed state, add proper line to the output + let (host, addr, last_seen) = match adv { + Some(adv) => ( + adv.status.hostname.as_str(), + adv.addr.to_string(), + adv.last_seen_secs_ago .map(|s| tf.convert(Duration::from_secs(s))) .unwrap_or_else(|| "never seen".into()), - )); - } - } - for (id, _, role_v) in layout.current().roles.items().iter() { - if let NodeRoleV(Some(cfg)) = role_v { - if !status_keys.contains(id) { - failed_nodes.push(format!( - "{id:?}\t??\t??\t[{tags}]\t{zone}\t{capacity}\tnever seen", - id = id, - tags = cfg.tags.join(","), - zone = cfg.zone, - capacity = cfg.capacity_string(), - )); - } - } + ), + None => ("??", "??".into(), "never seen".into()), + }; + let capacity = if ver.version == layout.current().version { + cfg.capacity_string() + } else { + "draining metadata...".to_string() + }; + failed_nodes.push(format!( + "{id:?}\t{host}\t{addr}\t[{tags}]\t{zone}\t{capacity}\t{last_seen}", + id = node, + host = host, + addr = addr, + tags = cfg.tags.join(","), + zone = cfg.zone, + capacity = capacity, + last_seen = last_seen, + )); } + } + + if failed_nodes.len() > 1 { + println!("\n==== FAILED NODES ===="); format_table(failed_nodes); } From 11e6fef93ce3ca56584fc99223b71da77d320dd7 Mon Sep 17 00:00:00 2001 From: Alex Auvolat Date: Mon, 27 Nov 2023 16:17:41 +0100 Subject: [PATCH 132/538] cli: add layout history and layout assume-sync commands --- src/garage/cli/cmd.rs | 14 ++++- src/garage/cli/layout.rs | 111 ++++++++++++++++++++++++++++++++++++++ src/garage/cli/structs.rs | 16 ++++++ src/rpc/layout/schema.rs | 9 +++- 4 files changed, 147 insertions(+), 3 deletions(-) diff --git a/src/garage/cli/cmd.rs b/src/garage/cli/cmd.rs index c99243b9..08ed00cf 100644 --- a/src/garage/cli/cmd.rs +++ b/src/garage/cli/cmd.rs @@ -135,13 +135,14 @@ pub async fn cmd_status(rpc_cli: &Endpoint, rpc_host: NodeID) -> } format_table(healthy_nodes); - // Determine which nodes are unhealthy and print that to stdout + // Determine which nodes are unhealthy and print that to stdout let status_map = status .iter() .map(|adv| (adv.id, adv)) .collect::>(); let tf = timeago::Formatter::new(); + let mut drain_msg = false; let mut failed_nodes = vec!["ID\tHostname\tAddress\tTags\tZone\tCapacity\tLast seen".to_string()]; let mut listed = HashSet::new(); @@ -163,7 +164,7 @@ pub async fn cmd_status(rpc_cli: &Endpoint, rpc_host: NodeID) -> } // Node is in a layout version, is not a gateway node, and is not up: - // it is in a failed state, add proper line to the output + // it is in a failed state, add proper line to the output let (host, addr, last_seen) = match adv { Some(adv) => ( adv.status.hostname.as_str(), @@ -177,6 +178,7 @@ pub async fn cmd_status(rpc_cli: &Endpoint, rpc_host: NodeID) -> let capacity = if ver.version == layout.current().version { cfg.capacity_string() } else { + drain_msg = true; "draining metadata...".to_string() }; failed_nodes.push(format!( @@ -195,6 +197,14 @@ pub async fn cmd_status(rpc_cli: &Endpoint, rpc_host: NodeID) -> if failed_nodes.len() > 1 { println!("\n==== FAILED NODES ===="); format_table(failed_nodes); + if drain_msg { + println!(); + println!("Your cluster is expecting to drain data from nodes that are currently unavailable."); + println!("If these nodes are definitely dead, please review the layout history with"); + println!( + "`garage layout history` and use `garage layout assume-sync` to force progress." + ); + } } if print_staging_role_changes(&layout) { diff --git a/src/garage/cli/layout.rs b/src/garage/cli/layout.rs index 0be8278f..3c7843bd 100644 --- a/src/garage/cli/layout.rs +++ b/src/garage/cli/layout.rs @@ -32,6 +32,10 @@ pub async fn cli_layout_command_dispatch( LayoutOperation::Config(config_opt) => { cmd_config_layout(system_rpc_endpoint, rpc_host, config_opt).await } + LayoutOperation::History => cmd_layout_history(system_rpc_endpoint, rpc_host).await, + LayoutOperation::AssumeSync(assume_sync_opt) => { + cmd_layout_assume_sync(system_rpc_endpoint, rpc_host, assume_sync_opt).await + } } } @@ -311,6 +315,113 @@ pub async fn cmd_config_layout( Ok(()) } +pub async fn cmd_layout_history( + rpc_cli: &Endpoint, + rpc_host: NodeID, +) -> Result<(), Error> { + let layout = fetch_layout(rpc_cli, rpc_host).await?; + let min_stored = layout.min_stored(); + + println!("==== LAYOUT HISTORY ===="); + let mut table = vec!["Version\tStatus\tStorage nodes\tGateway nodes".to_string()]; + for ver in layout + .versions + .iter() + .rev() + .chain(layout.old_versions.iter().rev()) + { + let status = if ver.version == layout.current().version { + "current" + } else if ver.version >= min_stored { + "draining" + } else { + "historical" + }; + table.push(format!( + "#{}\t{}\t{}\t{}", + ver.version, + status, + ver.roles + .items() + .iter() + .filter(|(_, _, x)| matches!(x, NodeRoleV(Some(c)) if c.capacity.is_some())) + .count(), + ver.roles + .items() + .iter() + .filter(|(_, _, x)| matches!(x, NodeRoleV(Some(c)) if c.capacity.is_none())) + .count(), + )); + } + format_table(table); + + println!(); + println!("==== UPDATE TRACKERS ===="); + println!("This is the internal data that Garage stores to know which nodes have what data."); + println!(); + let mut table = vec!["Node\tAck\tSync\tSync_ack".to_string()]; + let all_nodes = layout.get_all_nodes(); + for node in all_nodes.iter() { + table.push(format!( + "{:?}\t#{}\t#{}\t#{}", + node, + layout.update_trackers.ack_map.get(node), + layout.update_trackers.sync_map.get(node), + layout.update_trackers.sync_ack_map.get(node), + )); + } + table[1..].sort(); + format_table(table); + + if layout.versions.len() > 1 { + println!(); + println!( + "If some nodes are not catching up to the latest layout version in the update tracker," + ); + println!("it might be because they are offline or unable to complete a sync successfully."); + println!( + "You may force progress using `garage layout assume-sync --version {}`", + layout.current().version + ); + } + + Ok(()) +} + +pub async fn cmd_layout_assume_sync( + rpc_cli: &Endpoint, + rpc_host: NodeID, + opt: AssumeSyncOpt, +) -> Result<(), Error> { + let mut layout = fetch_layout(rpc_cli, rpc_host).await?; + + let min_v = layout.min_stored(); + if opt.version <= min_v || opt.version > layout.current().version { + return Err(Error::Message(format!( + "Invalid version, you may use the following version numbers: {}", + (min_v + 1..=layout.current().version) + .map(|x| x.to_string()) + .collect::>() + .join(" ") + ))); + } + + let all_nodes = layout.get_all_nodes(); + for node in all_nodes.iter() { + layout.update_trackers.ack_map.set_max(*node, opt.version); + layout.update_trackers.sync_map.set_max(*node, opt.version); + layout + .update_trackers + .sync_ack_map + .set_max(*node, opt.version); + } + + send_layout(rpc_cli, rpc_host, layout).await?; + println!("Success."); + + Ok(()) +} + // --- utility --- pub async fn fetch_layout( diff --git a/src/garage/cli/structs.rs b/src/garage/cli/structs.rs index 3badc447..c4b400f4 100644 --- a/src/garage/cli/structs.rs +++ b/src/garage/cli/structs.rs @@ -112,6 +112,14 @@ pub enum LayoutOperation { /// Revert staged changes to cluster layout #[structopt(name = "revert", version = garage_version())] Revert(RevertLayoutOpt), + + /// View the history of layouts in the cluster + #[structopt(name = "history", version = garage_version())] + History, + + /// Assume all nodes are synchronized up to a certain layout version + #[structopt(name = "assume-sync", version = garage_version())] + AssumeSync(AssumeSyncOpt), } #[derive(StructOpt, Debug)] @@ -169,6 +177,14 @@ pub struct RevertLayoutOpt { pub(crate) yes: bool, } +#[derive(StructOpt, Debug)] +pub struct AssumeSyncOpt { + /// Version number of the layout to assume is currently up-to-date. + /// This will generally be the current layout version. + #[structopt(long = "version")] + pub(crate) version: u64, +} + #[derive(Serialize, Deserialize, StructOpt, Debug)] pub enum BucketOperation { /// List buckets diff --git a/src/rpc/layout/schema.rs b/src/rpc/layout/schema.rs index 08db44ca..cb36297d 100644 --- a/src/rpc/layout/schema.rs +++ b/src/rpc/layout/schema.rs @@ -391,7 +391,10 @@ impl UpdateTracker { changed } - pub(crate) fn set_max(&mut self, peer: Uuid, value: u64) -> bool { + /// This bumps the update tracker for a given node up to the specified value. + /// This has potential impacts on the correctness of Garage and should only + /// be used in very specific circumstances. + pub fn set_max(&mut self, peer: Uuid, value: u64) -> bool { match self.0.get_mut(&peer) { Some(e) if *e < value => { *e = value; @@ -412,6 +415,10 @@ impl UpdateTracker { .min() .unwrap_or(min_version) } + + pub fn get(&self, node: &Uuid) -> u64 { + self.0.get(node).copied().unwrap_or(0) + } } impl UpdateTrackers { From c539077d30809c9d2232aa0fe107a9652dcb7c26 Mon Sep 17 00:00:00 2001 From: Alex Auvolat Date: Mon, 27 Nov 2023 16:20:19 +0100 Subject: [PATCH 133/538] cli: remove historic layout info from status --- src/garage/cli/cmd.rs | 18 ------------------ 1 file changed, 18 deletions(-) diff --git a/src/garage/cli/cmd.rs b/src/garage/cli/cmd.rs index 08ed00cf..4d1306b6 100644 --- a/src/garage/cli/cmd.rs +++ b/src/garage/cli/cmd.rs @@ -91,15 +91,6 @@ pub async fn cmd_status(rpc_cli: &Endpoint, rpc_host: NodeID) -> Some(NodeRoleV(Some(cfg))) => Some(cfg), _ => None, }); - let historic_role = - layout - .old_versions - .iter() - .rev() - .find_map(|x| match x.roles.get(&adv.id) { - Some(NodeRoleV(Some(cfg))) => Some(cfg), - _ => None, - }); if let Some(cfg) = prev_role { healthy_nodes.push(format!( "{id:?}\t{host}\t{addr}\t[{tags}]\t{zone}\tdraining metadata...", @@ -109,15 +100,6 @@ pub async fn cmd_status(rpc_cli: &Endpoint, rpc_host: NodeID) -> tags = cfg.tags.join(","), zone = cfg.zone, )); - } else if let Some(cfg) = historic_role { - healthy_nodes.push(format!( - "{id:?}\t{host}\t{addr}\t[{tags}]\t{zone}\tremoved, metadata drained", - id = adv.id, - host = adv.status.hostname, - addr = adv.addr, - tags = cfg.tags.join(","), - zone = cfg.zone, - )); } else { let new_role = match layout.staging.get().roles.get(&adv.id) { Some(NodeRoleV(Some(_))) => "pending...", From 3908619eac7c46c0d1b065adb4b79db798bc8d22 Mon Sep 17 00:00:00 2001 From: Quentin Dufour Date: Tue, 28 Nov 2023 09:34:01 +0100 Subject: [PATCH 134/538] add ClusterHealthReport endpoint to the API --- doc/api/garage-admin-v1.yml | 60 ++++++++++++++++++++++++++++++++++--- 1 file changed, 56 insertions(+), 4 deletions(-) diff --git a/doc/api/garage-admin-v1.yml b/doc/api/garage-admin-v1.yml index 8b5a5b37..fd78feb1 100644 --- a/doc/api/garage-admin-v1.yml +++ b/doc/api/garage-admin-v1.yml @@ -7,12 +7,64 @@ info: *Disclaimer: The API is not stable yet, hence its v0 tag. The API can change at any time, and changes can include breaking backward compatibility. Read the changelog and upgrade your scripts before upgrading. Additionnaly, this specification is very early stage and can contain bugs, especially on error return codes/types that are not tested yet. Do not expect a well finished and polished product!* paths: + /health: + get: + tags: + - Nodes + operationId: "GetHealth" + summary: "Cluster health report" + description: | + Returns the global status of the cluster, the number of connected nodes (over the number of known ones), the number of healthy storage nodes (over the declared ones), and the number of healthy partitions (over the total). + responses: + '500': + description: | + The server can not answer your request because it is in a bad state + '200': + description: | + Information about the queried node, its environment and the current layout + content: + application/json: + schema: + type: object + required: [ status, knownNodes, connectedNodes, storageNodes, storageNodesOk, partitions, partitionsQuorum, partitionsAllOk ] + properties: + status: + type: string + example: "healthy" + knownNodes: + type: integer + format: int64 + example: 4 + connectedNodes: + type: integer + format: int64 + example: 4 + storageNodes: + type: integer + format: int64 + example: 3 + storageNodesOk: + type: integer + format: int64 + example: 3 + partitions: + type: integer + format: int64 + example: 256 + partitionsQuorum: + type: integer + format: int64 + example: 256 + partitionsAllOk: + type: integer + format: int64 + example: 256 /status: get: tags: - Nodes operationId: "GetNodes" - summary: "Status of this node and other nodes in the cluster" + summary: "Describe cluster" description: | Returns the cluster's current status, including: - ID of the node being queried and its version of the Garage daemon @@ -88,7 +140,7 @@ paths: tags: - Nodes operationId: "AddNode" - summary: "Connect target node to other Garage nodes" + summary: "Connect a new node" description: | Instructs this Garage node to connect to other Garage nodes at specified `@`. `node_id` is generated automatically on node start. requestBody: @@ -131,8 +183,8 @@ paths: error: type: string nullable: true - example: - + example: null + /layout: get: tags: From 539af6eac434bd94acbcabcc5bb5c10450b71c5d Mon Sep 17 00:00:00 2001 From: Alex Auvolat Date: Tue, 28 Nov 2023 11:12:39 +0100 Subject: [PATCH 135/538] rpc helper: write comments + small refactoring of tracing --- src/rpc/rpc_helper.rs | 105 +++++++++++++++++++++++++++++++++++------- 1 file changed, 88 insertions(+), 17 deletions(-) diff --git a/src/rpc/rpc_helper.rs b/src/rpc/rpc_helper.rs index e9a9143f..f71f5ae7 100644 --- a/src/rpc/rpc_helper.rs +++ b/src/rpc/rpc_helper.rs @@ -129,6 +129,12 @@ impl RpcHelper { N: IntoReq + Send, H: StreamingEndpointHandler, { + let tracer = opentelemetry::global::tracer("garage"); + let span_name = format!("RPC [{}] to {:?}", endpoint.path(), to); + let mut span = tracer.start(span_name); + span.set_attribute(KeyValue::new("from", format!("{:?}", self.0.our_node_id))); + span.set_attribute(KeyValue::new("to", format!("{:?}", to))); + let metric_tags = [ KeyValue::new("rpc_endpoint", endpoint.path().to_string()), KeyValue::new("from", format!("{:?}", self.0.our_node_id)), @@ -140,6 +146,7 @@ impl RpcHelper { let node_id = to.into(); let rpc_call = endpoint .call_streaming(&node_id, msg, strat.rs_priority) + .with_context(Context::current_with_span(span)) .record_duration(&self.0.metrics.rpc_duration, &metric_tags); let timeout = async { @@ -182,12 +189,17 @@ impl RpcHelper { N: IntoReq, H: StreamingEndpointHandler, { + let tracer = opentelemetry::global::tracer("garage"); + let span_name = format!("RPC [{}] call_many {} nodes", endpoint.path(), to.len()); + let span = tracer.start(span_name); + let msg = msg.into_req().map_err(netapp::error::Error::from)?; let resps = join_all( to.iter() .map(|to| self.call(endpoint, *to, msg.clone(), strat)), ) + .with_context(Context::current_with_span(span)) .await; Ok(to .iter() @@ -219,6 +231,22 @@ impl RpcHelper { /// Make a RPC call to multiple servers, returning either a Vec of responses, /// or an error if quorum could not be reached due to too many errors + /// + /// If RequestStrategy has send_all_at_once set, then all requests will be + /// sent at once, and `try_call_many` will return as soon as a quorum of + /// responses is achieved, dropping and cancelling the remaining requests. + /// + /// Otherwise, `quorum` requests will be sent at the same time, and if an + /// error response is received, a new request will be sent to replace it. + /// The ordering of nodes to which requests are sent is determined by + /// the `RpcHelper::request_order` function, which takes into account + /// parameters such as node zones and measured ping values. + /// + /// In both cases, the basic contract of this function is that even in the + /// absence of failures, the RPC call might not be driven to completion + /// on all of the specified nodes. It is therefore unfit for broadcast + /// write operations where we expect all nodes to successfully store + /// the written date. pub async fn try_call_many( &self, endpoint: &Arc>, @@ -235,7 +263,12 @@ impl RpcHelper { let quorum = strategy.rs_quorum.unwrap_or(to.len()); let tracer = opentelemetry::global::tracer("garage"); - let span_name = format!("Read RPC {} to {} of {}", endpoint.path(), quorum, to.len()); + let span_name = format!( + "RPC [{}] try_call_many (quorum {}/{})", + endpoint.path(), + quorum, + to.len() + ); let mut span = tracer.start(span_name); span.set_attribute(KeyValue::new("from", format!("{:?}", self.0.our_node_id))); @@ -266,6 +299,10 @@ impl RpcHelper { // to reach a quorum, priorizing nodes with the lowest latency. // When there are errors, we start new requests to compensate. + // TODO: this could be made more aggressive, e.g. if after 2x the + // average ping of a given request, the response is not yet received, + // preemptively send an additional request to any remaining nodes. + // Reorder requests to priorize closeness / low latency let request_order = self.request_order(to.iter().copied()); let send_all_at_once = strategy.rs_send_all_at_once.unwrap_or(false); @@ -278,9 +315,7 @@ impl RpcHelper { let self2 = self.clone(); let msg = msg.clone(); let endpoint2 = endpoint.clone(); - (to, async move { - self2.call(&endpoint2, to, msg, strategy).await - }) + async move { self2.call(&endpoint2, to, msg, strategy).await } }); // Vectors in which success results and errors will be collected @@ -296,10 +331,8 @@ impl RpcHelper { // If the current set of requests that are running is not enough to possibly // reach quorum, start some new requests. while send_all_at_once || successes.len() + resp_stream.len() < quorum { - if let Some((req_to, fut)) = requests.next() { - let tracer = opentelemetry::global::tracer("garage"); - let span = tracer.start(format!("RPC to {:?}", req_to)); - resp_stream.push(fut.with_context(Context::current_with_span(span))); + if let Some(fut) = requests.next() { + resp_stream.push(fut) } else { break; } @@ -379,6 +412,25 @@ impl RpcHelper { .collect::>() } + /// Make a RPC call to multiple servers, returning either a Vec of responses, + /// or an error if quorum could not be reached due to too many errors + /// + /// Contrary to try_call_many, this fuction is especially made for broadcast + /// write operations. In particular: + /// + /// - The request are sent to all specified nodes as soon as `try_write_many_sets` + /// is invoked. + /// + /// - When `try_write_many_sets` returns, all remaining requests that haven't + /// completed move to a background task so that they have a chance to + /// complete successfully if there are no failures. + /// + /// In addition, the nodes to which requests should be sent are divided in + /// "quorum sets", and `try_write_many_sets` only returns once a quorum + /// has been validated in each set. This is used in the case of cluster layout + /// changes, where data has to be written both in the old layout and in the + /// new one as long as all nodes have not successfully tranisitionned and + /// moved all data to the new layout. pub async fn try_write_many_sets( &self, endpoint: &Arc>, @@ -394,11 +446,11 @@ impl RpcHelper { { let quorum = strategy .rs_quorum - .expect("internal error: missing quroum in try_write_many_sets"); + .expect("internal error: missing quorum value in try_write_many_sets"); let tracer = opentelemetry::global::tracer("garage"); let span_name = format!( - "Write RPC {} (quorum {} in {} sets)", + "RPC [{}] try_write_many_sets (quorum {} in {} sets)", endpoint.path(), quorum, to_sets.len() @@ -430,6 +482,8 @@ impl RpcHelper { { let msg = msg.into_req().map_err(netapp::error::Error::from)?; + // Peers may appear in many quorum sets. Here, build a list of peers, + // mapping to the index of the quorum sets in which they appear. let mut peers = HashMap::>::new(); for (i, set) in to_sets.iter().enumerate() { for peer in set.iter() { @@ -437,24 +491,30 @@ impl RpcHelper { } } + // Send one request to each peer of the quorum sets let requests = peers.iter().map(|(peer, _)| { let self2 = self.clone(); let msg = msg.clone(); let endpoint2 = endpoint.clone(); let to = *peer; - let tracer = opentelemetry::global::tracer("garage"); - let span = tracer.start(format!("RPC to {:?}", to)); - let fut = async move { (to, self2.call(&endpoint2, to, msg, strategy).await) }; - fut.with_context(Context::current_with_span(span)) + async move { (to, self2.call(&endpoint2, to, msg, strategy).await) } }); let mut resp_stream = requests.collect::>(); + // Success and error responses will be collected in these two vectors let mut successes = vec![]; let mut errors = vec![]; + // `set_counters` is used to keep track of how many success and error + // responses are received within each quorum set. When a node returns + // its response, it counts as a sucess/an error for all of the quorum + // sets which it is part of. let mut set_counters = vec![(0, 0); to_sets.len()]; + // Drive requests to completion while let Some((node, resp)) = resp_stream.next().await { + // Store the response in the correct vector and increment the + // appropriate counters match resp { Ok(msg) => { for set in peers.get(&node).unwrap().iter() { @@ -470,9 +530,8 @@ impl RpcHelper { } } + // If we have a quorum of ok in all quorum sets, then it's a success! if set_counters.iter().all(|(ok_cnt, _)| *ok_cnt >= quorum) { - // Success - // Continue all other requets in background tokio::spawn(async move { resp_stream.collect::)>>().await; @@ -481,16 +540,28 @@ impl RpcHelper { return Ok(successes); } + // If there is a quorum set for which too many errors were received, + // we know it's impossible to get a quorum, so return immediately. if set_counters .iter() .enumerate() .any(|(i, (_, err_cnt))| err_cnt + quorum > to_sets[i].len()) { - // Too many errors in this set, we know we won't get a quorum break; } } + // At this point, there is no quorum and we know that a quorum + // will never be achieved. Currently, we drop all remaining requests. + // Should we still move them to background so that they can continue + // for non-failed nodes? Not doing so has no impact on correctness, + // but it means that more cancellation messages will be sent. Idk. + // (When an in-progress request future is dropped, Netapp automatically + // sends a cancellation message to the remote node to inform it that + // the result is no longer needed. In turn, if the remote node receives + // the cancellation message in time, it interrupts the task of the + // running request handler.) + // Failure, could not get quorum let errors = errors.iter().map(|e| format!("{}", e)).collect::>(); Err(Error::Quorum( From 1f6efe57be97f0456afbecc8dab11a618d4a42f5 Mon Sep 17 00:00:00 2001 From: Alex Auvolat Date: Tue, 28 Nov 2023 11:31:02 +0100 Subject: [PATCH 136/538] doc: update the `db_engine` section --- doc/book/reference-manual/configuration.md | 55 ++++++++++++---------- 1 file changed, 29 insertions(+), 26 deletions(-) diff --git a/doc/book/reference-manual/configuration.md b/doc/book/reference-manual/configuration.md index 1ac681cf..e48b39a3 100644 --- a/doc/book/reference-manual/configuration.md +++ b/doc/book/reference-manual/configuration.md @@ -107,44 +107,47 @@ on how to operate Garage in such a setup. ### `db_engine` (since `v0.8.0`) -By default, Garage uses the Sled embedded database library -to store its metadata on-disk. Since `v0.8.0`, Garage can use alternative storage backends as follows: +Since `v0.8.0`, Garage can use alternative storage backends as follows: | DB engine | `db_engine` value | Database path | | --------- | ----------------- | ------------- | -| [Sled](https://sled.rs) | `"sled"` | `/db/` | -| [LMDB](https://www.lmdb.tech) | `"lmdb"` | `/db.lmdb/` | +| [LMDB](https://www.lmdb.tech) (default since `v0.9.0`) | `"lmdb"` | `/db.lmdb/` | +| [Sled](https://sled.rs) (default up to `v0.8.0`) | `"sled"` | `/db/` | | [Sqlite](https://sqlite.org) | `"sqlite"` | `/db.sqlite` | +Sled was the only database engine up to Garage v0.7.0. Performance issues and +API limitations of Sled prompted the addition of alternative engines in v0.8.0. +Since v0.9.0, LMDB is the default engine instead of Sled, and Sled is +deprecated. We plan to remove Sled in Garage v1.0. + Performance characteristics of the different DB engines are as follows: -- Sled: the default database engine, which tends to produce - large data files and also has performance issues, especially when the metadata folder - is on a traditional HDD and not on SSD. -- LMDB: the recommended alternative on 64-bit systems, - much more space-efficiant and slightly faster. Note that the data format of LMDB is not portable - between architectures, so for instance the Garage database of an x86-64 - node cannot be moved to an ARM64 node. Also note that, while LMDB can technically be used on 32-bit systems, - this will limit your node to very small database sizes due to how LMDB works; it is therefore not recommended. -- Sqlite: Garage supports Sqlite as a storage backend for metadata, - however it may have issues and is also very slow in its current implementation, - so it is not recommended to be used for now. +- Sled: tends to produce large data files and also has performance issues, + especially when the metadata folder is on a traditional HDD and not on SSD. -It is possible to convert Garage's metadata directory from one format to another with a small utility named `convert_db`, -which can be downloaded at the following locations: -[for amd64](https://garagehq.deuxfleurs.fr/_releases/convert_db/amd64/convert_db), -[for i386](https://garagehq.deuxfleurs.fr/_releases/convert_db/i386/convert_db), -[for arm64](https://garagehq.deuxfleurs.fr/_releases/convert_db/arm64/convert_db), -[for arm](https://garagehq.deuxfleurs.fr/_releases/convert_db/arm/convert_db). -The `convert_db` utility is used as folows: +- LMDB: the recommended database engine on 64-bit systems, much more + space-efficient and slightly faster. Note that the data format of LMDB is not + portable between architectures, so for instance the Garage database of an + x86-64 node cannot be moved to an ARM64 node. Also note that, while LMDB can + technically be used on 32-bit systems, this will limit your node to very + small database sizes due to how LMDB works; it is therefore not recommended. + +- Sqlite: Garage supports Sqlite as an alternative storage backend for + metadata, and although it has not been tested as much, it is expected to work + satisfactorily. Since Garage v0.9.0, performance issues have largely been + fixed by allowing for a no-fsync mode (see `metadata_fsync`). Sqlite does not + have the database size limitation of LMDB on 32-bit systems. + +It is possible to convert Garage's metadata directory from one format to another +using the `garage convert-db` command, which should be used as follows: ``` -convert-db -a -i \ - -b -o +garage convert-db -a -i \ + -b -o ``` -Make sure to specify the full database path as presented in the table above, -and not just the path to the metadata directory. +Make sure to specify the full database path as presented in the table above +(third colummn), and not just the path to the metadata directory. ### `metadata_fsync` From 939d1f2e17f0aa9729bc15759e30d1324e8b3e4e Mon Sep 17 00:00:00 2001 From: Alex Auvolat Date: Tue, 28 Nov 2023 11:53:26 +0100 Subject: [PATCH 137/538] doc: improve navigation in configuration reference --- doc/book/cookbook/exposing-websites.md | 2 +- doc/book/operations/layout.md | 2 +- doc/book/reference-manual/configuration.md | 137 +++++++++++++++------ doc/book/reference-manual/features.md | 2 +- 4 files changed, 100 insertions(+), 43 deletions(-) diff --git a/doc/book/cookbook/exposing-websites.md b/doc/book/cookbook/exposing-websites.md index 5f6a5a28..9382a541 100644 --- a/doc/book/cookbook/exposing-websites.md +++ b/doc/book/cookbook/exposing-websites.md @@ -38,7 +38,7 @@ Our website serving logic is as follow: Now we need to infer the URL of your website through your bucket name. Let assume: - - we set `root_domain = ".web.example.com"` in `garage.toml` ([ref](@/documentation/reference-manual/configuration.md#root_domain)) + - we set `root_domain = ".web.example.com"` in `garage.toml` ([ref](@/documentation/reference-manual/configuration.md#web_root_domain)) - our bucket name is `garagehq.deuxfleurs.fr`. Our bucket will be served if the Host field matches one of these 2 values (the port is ignored): diff --git a/doc/book/operations/layout.md b/doc/book/operations/layout.md index ece17ddb..ee05aba1 100644 --- a/doc/book/operations/layout.md +++ b/doc/book/operations/layout.md @@ -12,7 +12,7 @@ An introduction to building cluster layouts can be found in the [production depl In Garage, all of the data that can be stored in a given cluster is divided into slices which we call *partitions*. Each partition is stored by one or several nodes in the cluster -(see [`replication_mode`](@/documentation/reference-manual/configuration.md#replication-mode)). +(see [`replication_mode`](@/documentation/reference-manual/configuration.md#replication_mode)). The layout determines the correspondence between these partition, which exist on a logical level, and actual storage nodes. diff --git a/doc/book/reference-manual/configuration.md b/doc/book/reference-manual/configuration.md index e48b39a3..4a9a17a9 100644 --- a/doc/book/reference-manual/configuration.md +++ b/doc/book/reference-manual/configuration.md @@ -77,7 +77,64 @@ The following gives details about each available configuration option. ## Available configuration options -### `metadata_dir` +### Index + +Top-level configuration options: +[`block_size`](#block_size), +[`bootstrap_peers`](#bootstrap_peers), +[`compression_level`](#compression_level), +[`data_dir`](#metadata_dir), +[`data_fsync`](#data_fsync), +[`db_engine`](#db_engine), +[`lmdb_map_size`](#lmdb_map_size), +[`metadata_dir`](#metadata_dir), +[`metadata_fsync`](#metadata_fsync), +[`replication_mode`](#replication_mode), +[`rpc_bind_addr`](#rpc_bind_addr), +[`rpc_public_addr`](#rpc_public_addr), +[`rpc_secret`](#rpc_secret), +[`rpc_secret_file`](#rpc_secret), +[`sled_cache_capacity`](#sled_cache_capacity), +[`sled_flush_every_ms`](#sled_flush_every_ms). + +The `[consul_discovery]` section: +[`api`](#consul_api), +[`ca_cert`](#consul_ca_cert), +[`client_cert`](#consul_client_cert), +[`client_key`](#consul_client_cert), +[`consul_http_addr`](#consul_http_addr), +[`meta`](#consul_tags), +[`service_name`](#consul_service_name), +[`tags`](#consul_tags), +[`tls_skip_verify`](#consul_tls_skip_verify), +[`token`](#consul_token). + +The `[kubernetes_discovery]` section: +[`namespace`](#kube_namespace), +[`service_name`](#kube_service_name), +[`skip_crd`](#kube_skip_crd). + +The `[s3_api]` section: +[`api_bind_addr`](#s3_api_bind_addr), +[`root_domain`](#s3_root_domain), +[`s3_region`](#s3_region). + +The `[s3_web]` section: +[`bind_addr`](#web_bind_addr), +[`root_domain`](#web_root_domain). + +The `[admin]` section: +[`api_bind_addr`](#admin_api_bind_addr), +[`metrics_token`](#admin_metrics_token), +[`metrics_token_file`](#admin_metrics_token), +[`admin_token`](#admin_token), +[`admin_token_file`](#admin_token), +[`trace_sink`](#admin_trace_sink), + + +### Top-level configuration options + +#### `metadata_dir` {#metadata_dir} The directory in which Garage will store its metadata. This contains the node identifier, the network configuration and the peer list, the list of buckets and keys as well @@ -85,7 +142,7 @@ as the index of all objects, object version and object blocks. Store this folder on a fast SSD drive if possible to maximize Garage's performance. -### `data_dir` +#### `data_dir` {#data_dir} The directory in which Garage will store the data blocks of objects. This folder can be placed on an HDD. The space available for `data_dir` @@ -105,7 +162,7 @@ data_dir = [ See [the dedicated documentation page](@/documentation/operations/multi-hdd.md) on how to operate Garage in such a setup. -### `db_engine` (since `v0.8.0`) +#### `db_engine` (since `v0.8.0`) {#db_engine} Since `v0.8.0`, Garage can use alternative storage backends as follows: @@ -149,7 +206,7 @@ garage convert-db -a -i \ Make sure to specify the full database path as presented in the table above (third colummn), and not just the path to the metadata directory. -### `metadata_fsync` +#### `metadata_fsync` {#metadata_fsync} Whether to enable synchronous mode for the database engine or not. This is disabled (`false`) by default. @@ -179,7 +236,7 @@ Here is how this option impacts the different database engines: Note that the Sqlite database is always ran in `WAL` mode (`PRAGMA journal_mode = WAL`). -### `data_fsync` +#### `data_fsync` {#data_fsync} Whether to `fsync` data blocks and their containing directory after they are saved to disk. @@ -192,7 +249,7 @@ at the cost of a moderate drop in write performance. Similarly to `metatada_fsync`, this is likely not necessary if geographical replication is used. -### `block_size` +#### `block_size` {#block_size} Garage splits stored objects in consecutive chunks of size `block_size` (except the last one which might be smaller). The default size is 1MiB and @@ -207,7 +264,7 @@ files will remain available. This however means that chunks from existing files will not be deduplicated with chunks from newly uploaded files, meaning you might use more storage space that is optimally possible. -### `sled_cache_capacity` +#### `sled_cache_capacity` {#sled_cache_capacity} This parameter can be used to tune the capacity of the cache used by [sled](https://sled.rs), the database Garage uses internally to store metadata. @@ -215,14 +272,14 @@ Tune this to fit the RAM you wish to make available to your Garage instance. This value has a conservative default (128MB) so that Garage doesn't use too much RAM by default, but feel free to increase this for higher performance. -### `sled_flush_every_ms` +#### `sled_flush_every_ms` {#sled_flush_every_ms} This parameters can be used to tune the flushing interval of sled. Increase this if sled is thrashing your SSD, at the risk of losing more data in case of a power outage (though this should not matter much as data is replicated on other nodes). The default value, 2000ms, should be appropriate for most use cases. -### `lmdb_map_size` +#### `lmdb_map_size` {#lmdb_map_size} This parameters can be used to set the map size used by LMDB, which is the size of the virtual memory region used for mapping the database file. @@ -230,7 +287,7 @@ The value of this parameter is the maximum size the metadata database can take. This value is not bound by the physical RAM size of the machine running Garage. If not specified, it defaults to 1GiB on 32-bit machines and 1TiB on 64-bit machines. -### `replication_mode` +#### `replication_mode` {#replication_mode} Garage supports the following replication modes: @@ -313,7 +370,7 @@ to the cluster while rebalancing is in progress. In theory, no data should be lost as rebalancing is a routine operation for Garage, although we cannot guarantee you that everything will go right in such an extreme scenario. -### `compression_level` +#### `compression_level` {#compression_level} Zstd compression level to use for storing blocks. @@ -337,7 +394,7 @@ Compression is done synchronously, setting a value too high will add latency to This value can be different between nodes, compression is done by the node which receive the API call. -### `rpc_secret`, `rpc_secret_file` or `GARAGE_RPC_SECRET` (env) +#### `rpc_secret`, `rpc_secret_file` or `GARAGE_RPC_SECRET` (env) {#rpc_secret} Garage uses a secret key, called an RPC secret, that is shared between all nodes of the cluster in order to identify these nodes and allow them to @@ -349,7 +406,7 @@ Since Garage `v0.8.2`, the RPC secret can also be stored in a file whose path is given in the configuration variable `rpc_secret_file`, or specified as an environment variable `GARAGE_RPC_SECRET`. -### `rpc_bind_addr` +#### `rpc_bind_addr` {#rpc_bind_addr} The address and port on which to bind for inter-cluster communcations (reffered to as RPC for remote procedure calls). @@ -358,14 +415,14 @@ the node, even in the case of a NAT: the NAT should be configured to forward the port number to the same internal port nubmer. This means that if you have several nodes running behind a NAT, they should each use a different RPC port number. -### `rpc_public_addr` +#### `rpc_public_addr` {#rpc_public_addr} The address and port that other nodes need to use to contact this node for RPC calls. **This parameter is optional but recommended.** In case you have a NAT that binds the RPC port to a port that is different on your public IP, this field might help making it work. -### `bootstrap_peers` +#### `bootstrap_peers` {#bootstrap_peers} A list of peer identifiers on which to contact other Garage peers of this cluster. These peer identifiers have the following syntax: @@ -382,42 +439,42 @@ key will be returned by `garage node id` and you will have to add the IP yourself. -## The `[consul_discovery]` section +### The `[consul_discovery]` section Garage supports discovering other nodes of the cluster using Consul. For this to work correctly, nodes need to know their IP address by which they can be reached by other nodes of the cluster, which should be set in `rpc_public_addr`. -### `consul_http_addr` and `service_name` +#### `consul_http_addr` {#consul_http_addr} The `consul_http_addr` parameter should be set to the full HTTP(S) address of the Consul server. -### `api` +#### `api` {#consul_api} Two APIs for service registration are supported: `catalog` and `agent`. `catalog`, the default, will register a service using the `/v1/catalog` endpoints, enabling mTLS if `client_cert` and `client_key` are provided. The `agent` API uses the `v1/agent` endpoints instead, where an optional `token` may be provided. -### `service_name` +#### `service_name` {#consul_service_name} `service_name` should be set to the service name under which Garage's RPC ports are announced. -### `client_cert`, `client_key` +#### `client_cert`, `client_key` {#consul_client_cert} TLS client certificate and client key to use when communicating with Consul over TLS. Both are mandatory when doing so. Only available when `api = "catalog"`. -### `ca_cert` +#### `ca_cert` {#consul_ca_cert} TLS CA certificate to use when communicating with Consul over TLS. -### `tls_skip_verify` +#### `tls_skip_verify` {#consul_tls_skip_verify} Skip server hostname verification in TLS handshake. `ca_cert` is ignored when this is set. -### `token` +#### `token` {#consul_token} Uses the provided token for communication with Consul. Only available when `api = "agent"`. The policy assigned to this token should at least have these rules: @@ -437,49 +494,49 @@ node_prefix "" { } ``` -### `tags` and `meta` +#### `tags` and `meta` {#consul_tags} Additional list of tags and map of service meta to add during service registration. -## The `[kubernetes_discovery]` section +### The `[kubernetes_discovery]` section Garage supports discovering other nodes of the cluster using kubernetes custom resources. For this to work, a `[kubernetes_discovery]` section must be present with at least the `namespace` and `service_name` parameters. -### `namespace` +#### `namespace` {#kube_namespace} `namespace` sets the namespace in which the custom resources are configured. -### `service_name` +#### `service_name` {#kube_service_name} `service_name` is added as a label to the advertised resources to filter them, to allow for multiple deployments in a single namespace. -### `skip_crd` +#### `skip_crd` {#kube_skip_crd} `skip_crd` can be set to true to disable the automatic creation and patching of the `garagenodes.deuxfleurs.fr` CRD. You will need to create the CRD manually. -## The `[s3_api]` section +### The `[s3_api]` section -### `api_bind_addr` +#### `api_bind_addr` {#s3_api_bind_addr} The IP and port on which to bind for accepting S3 API calls. This endpoint does not suport TLS: a reverse proxy should be used to provide it. Alternatively, since `v0.8.5`, a path can be used to create a unix socket with 0222 mode. -### `s3_region` +#### `s3_region` {#s3_region} Garage will accept S3 API calls that are targetted to the S3 region defined here. API calls targetted to other regions will fail with a AuthorizationHeaderMalformed error message that redirects the client to the correct region. -### `root_domain` {#root_domain} +#### `root_domain` {#s3_root_domain} The optional suffix to access bucket using vhost-style in addition to path-style request. Note path-style requests are always enabled, whether or not vhost-style is configured. @@ -491,12 +548,12 @@ using the hostname `my-bucket.s3.garage.eu`. -## The `[s3_web]` section +### The `[s3_web]` section Garage allows to publish content of buckets as websites. This section configures the behaviour of this module. -### `bind_addr` +#### `bind_addr` {#web_bind_addr} The IP and port on which to bind for accepting HTTP requests to buckets configured for website access. @@ -504,7 +561,7 @@ This endpoint does not suport TLS: a reverse proxy should be used to provide it. Alternatively, since `v0.8.5`, a path can be used to create a unix socket with 0222 mode. -### `root_domain` +#### `root_domain` {#web_root_domain} The optional suffix appended to bucket names for the corresponding HTTP Host. @@ -513,11 +570,11 @@ will be accessible either with hostname `deuxfleurs.fr.web.garage.eu` or with hostname `deuxfleurs.fr`. -## The `[admin]` section +### The `[admin]` section Garage has a few administration capabilities, in particular to allow remote monitoring. These features are detailed below. -### `api_bind_addr` +#### `api_bind_addr` {#admin_api_bind_addr} If specified, Garage will bind an HTTP server to this port and address, on which it will listen to requests for administration features. @@ -526,7 +583,7 @@ See [administration API reference](@/documentation/reference-manual/admin-api.md Alternatively, since `v0.8.5`, a path can be used to create a unix socket. Note that for security reasons, the socket will have 0220 mode. Make sure to set user and group permissions accordingly. -### `metrics_token`, `metrics_token_file` or `GARAGE_METRICS_TOKEN` (env) +#### `metrics_token`, `metrics_token_file` or `GARAGE_METRICS_TOKEN` (env) {#admin_metrics_token} The token for accessing the Metrics endpoint. If this token is not set, the Metrics endpoint can be accessed without access control. @@ -537,7 +594,7 @@ You can use any random string for this value. We recommend generating a random t `metrics_token_file` and the `GARAGE_METRICS_TOKEN` environment variable are supported since Garage `v0.8.2`. -### `admin_token`, `admin_token_file` or `GARAGE_ADMIN_TOKEN` (env) +#### `admin_token`, `admin_token_file` or `GARAGE_ADMIN_TOKEN` (env) {#admin_token} The token for accessing all of the other administration endpoints. If this token is not set, access to these endpoints is disabled entirely. @@ -548,7 +605,7 @@ You can use any random string for this value. We recommend generating a random t `admin_token_file` and the `GARAGE_ADMIN_TOKEN` environment variable are supported since Garage `v0.8.2`. -### `trace_sink` +#### `trace_sink` {#admin_trace_sink} Optionally, the address of an OpenTelemetry collector. If specified, Garage will send traces in the OpenTelemetry format to this endpoint. These diff --git a/doc/book/reference-manual/features.md b/doc/book/reference-manual/features.md index 2f8e633a..e8ba9510 100644 --- a/doc/book/reference-manual/features.md +++ b/doc/book/reference-manual/features.md @@ -52,7 +52,7 @@ This is particularly usefull when nodes are far from one another and talk to one Garage supports a variety of replication modes, with 1 copy, 2 copies or 3 copies of your data, and with various levels of consistency, in order to adapt to a variety of usage scenarios. -Read our reference page on [supported replication modes](@/documentation/reference-manual/configuration.md#replication-mode) +Read our reference page on [supported replication modes](@/documentation/reference-manual/configuration.md#replication_mode) to select the replication mode best suited to your use case (hint: in most cases, `replication_mode = "3"` is what you want). ### Web server for static websites From cfa5550cb284a0fa440b8266342469ef89cf92f0 Mon Sep 17 00:00:00 2001 From: Alex Auvolat Date: Tue, 28 Nov 2023 11:58:27 +0100 Subject: [PATCH 138/538] doc: move replication_mode to top of configuration page reference --- doc/book/reference-manual/configuration.md | 170 ++++++++++----------- 1 file changed, 85 insertions(+), 85 deletions(-) diff --git a/doc/book/reference-manual/configuration.md b/doc/book/reference-manual/configuration.md index 4a9a17a9..18d160bb 100644 --- a/doc/book/reference-manual/configuration.md +++ b/doc/book/reference-manual/configuration.md @@ -8,6 +8,8 @@ weight = 20 Here is an example `garage.toml` configuration file that illustrates all of the possible options: ```toml +replication_mode = "3" + metadata_dir = "/var/lib/garage/meta" data_dir = "/var/lib/garage/data" metadata_fsync = true @@ -21,8 +23,6 @@ sled_cache_capacity = "128MiB" sled_flush_every_ms = 2000 lmdb_map_size = "1T" -replication_mode = "3" - compression_level = 1 rpc_secret = "4425f5c26c5e11581d3223904324dcb5b5d5dfb14e5e7f35e38c595424f5f1e6" @@ -134,6 +134,89 @@ The `[admin]` section: ### Top-level configuration options +#### `replication_mode` {#replication_mode} + +Garage supports the following replication modes: + +- `none` or `1`: data stored on Garage is stored on a single node. There is no + redundancy, and data will be unavailable as soon as one node fails or its + network is disconnected. Do not use this for anything else than test + deployments. + +- `2`: data stored on Garage will be stored on two different nodes, if possible + in different zones. Garage tolerates one node failure, or several nodes + failing but all in a single zone (in a deployment with at least two zones), + before losing data. Data remains available in read-only mode when one node is + down, but write operations will fail. + + - `2-dangerous`: a variant of mode `2`, where written objects are written to + the second replica asynchronously. This means that Garage will return `200 + OK` to a PutObject request before the second copy is fully written (or even + before it even starts being written). This means that data can more easily + be lost if the node crashes before a second copy can be completed. This + also means that written objects might not be visible immediately in read + operations. In other words, this mode severely breaks the consistency and + durability guarantees of standard Garage cluster operation. Benefits of + this mode: you can still write to your cluster when one node is + unavailable. + +- `3`: data stored on Garage will be stored on three different nodes, if + possible each in a different zones. Garage tolerates two node failure, or + several node failures but in no more than two zones (in a deployment with at + least three zones), before losing data. As long as only a single node fails, + or node failures are only in a single zone, reading and writing data to + Garage can continue normally. + + - `3-degraded`: a variant of replication mode `3`, that lowers the read + quorum to `1`, to allow you to read data from your cluster when several + nodes (or nodes in several zones) are unavailable. In this mode, Garage + does not provide read-after-write consistency anymore. The write quorum is + still 2, ensuring that data successfully written to Garage is stored on at + least two nodes. + + - `3-dangerous`: a variant of replication mode `3` that lowers both the read + and write quorums to `1`, to allow you to both read and write to your + cluster when several nodes (or nodes in several zones) are unavailable. It + is the least consistent mode of operation proposed by Garage, and also one + that should probably never be used. + +Note that in modes `2` and `3`, +if at least the same number of zones are available, an arbitrary number of failures in +any given zone is tolerated as copies of data will be spread over several zones. + +**Make sure `replication_mode` is the same in the configuration files of all nodes. +Never run a Garage cluster where that is not the case.** + +The quorums associated with each replication mode are described below: + +| `replication_mode` | Number of replicas | Write quorum | Read quorum | Read-after-write consistency? | +| ------------------ | ------------------ | ------------ | ----------- | ----------------------------- | +| `none` or `1` | 1 | 1 | 1 | yes | +| `2` | 2 | 2 | 1 | yes | +| `2-dangerous` | 2 | 1 | 1 | NO | +| `3` | 3 | 2 | 2 | yes | +| `3-degraded` | 3 | 2 | 1 | NO | +| `3-dangerous` | 3 | 1 | 1 | NO | + +Changing the `replication_mode` between modes with the same number of replicas +(e.g. from `3` to `3-degraded`, or from `2-dangerous` to `2`), can be done easily by +just changing the `replication_mode` parameter in your config files and restarting all your +Garage nodes. + +It is also technically possible to change the replication mode to a mode with a +different numbers of replicas, although it's a dangerous operation that is not +officially supported. This requires you to delete the existing cluster layout +and create a new layout from scratch, meaning that a full rebalancing of your +cluster's data will be needed. To do it, shut down your cluster entirely, +delete the `custer_layout` files in the meta directories of all your nodes, +update all your configuration files with the new `replication_mode` parameter, +restart your cluster, and then create a new layout with all the nodes you want +to keep. Rebalancing data will take some time, and data might temporarily +appear unavailable to your users. It is recommended to shut down public access +to the cluster while rebalancing is in progress. In theory, no data should be +lost as rebalancing is a routine operation for Garage, although we cannot +guarantee you that everything will go right in such an extreme scenario. + #### `metadata_dir` {#metadata_dir} The directory in which Garage will store its metadata. This contains the node identifier, @@ -287,89 +370,6 @@ The value of this parameter is the maximum size the metadata database can take. This value is not bound by the physical RAM size of the machine running Garage. If not specified, it defaults to 1GiB on 32-bit machines and 1TiB on 64-bit machines. -#### `replication_mode` {#replication_mode} - -Garage supports the following replication modes: - -- `none` or `1`: data stored on Garage is stored on a single node. There is no - redundancy, and data will be unavailable as soon as one node fails or its - network is disconnected. Do not use this for anything else than test - deployments. - -- `2`: data stored on Garage will be stored on two different nodes, if possible - in different zones. Garage tolerates one node failure, or several nodes - failing but all in a single zone (in a deployment with at least two zones), - before losing data. Data remains available in read-only mode when one node is - down, but write operations will fail. - - - `2-dangerous`: a variant of mode `2`, where written objects are written to - the second replica asynchronously. This means that Garage will return `200 - OK` to a PutObject request before the second copy is fully written (or even - before it even starts being written). This means that data can more easily - be lost if the node crashes before a second copy can be completed. This - also means that written objects might not be visible immediately in read - operations. In other words, this mode severely breaks the consistency and - durability guarantees of standard Garage cluster operation. Benefits of - this mode: you can still write to your cluster when one node is - unavailable. - -- `3`: data stored on Garage will be stored on three different nodes, if - possible each in a different zones. Garage tolerates two node failure, or - several node failures but in no more than two zones (in a deployment with at - least three zones), before losing data. As long as only a single node fails, - or node failures are only in a single zone, reading and writing data to - Garage can continue normally. - - - `3-degraded`: a variant of replication mode `3`, that lowers the read - quorum to `1`, to allow you to read data from your cluster when several - nodes (or nodes in several zones) are unavailable. In this mode, Garage - does not provide read-after-write consistency anymore. The write quorum is - still 2, ensuring that data successfully written to Garage is stored on at - least two nodes. - - - `3-dangerous`: a variant of replication mode `3` that lowers both the read - and write quorums to `1`, to allow you to both read and write to your - cluster when several nodes (or nodes in several zones) are unavailable. It - is the least consistent mode of operation proposed by Garage, and also one - that should probably never be used. - -Note that in modes `2` and `3`, -if at least the same number of zones are available, an arbitrary number of failures in -any given zone is tolerated as copies of data will be spread over several zones. - -**Make sure `replication_mode` is the same in the configuration files of all nodes. -Never run a Garage cluster where that is not the case.** - -The quorums associated with each replication mode are described below: - -| `replication_mode` | Number of replicas | Write quorum | Read quorum | Read-after-write consistency? | -| ------------------ | ------------------ | ------------ | ----------- | ----------------------------- | -| `none` or `1` | 1 | 1 | 1 | yes | -| `2` | 2 | 2 | 1 | yes | -| `2-dangerous` | 2 | 1 | 1 | NO | -| `3` | 3 | 2 | 2 | yes | -| `3-degraded` | 3 | 2 | 1 | NO | -| `3-dangerous` | 3 | 1 | 1 | NO | - -Changing the `replication_mode` between modes with the same number of replicas -(e.g. from `3` to `3-degraded`, or from `2-dangerous` to `2`), can be done easily by -just changing the `replication_mode` parameter in your config files and restarting all your -Garage nodes. - -It is also technically possible to change the replication mode to a mode with a -different numbers of replicas, although it's a dangerous operation that is not -officially supported. This requires you to delete the existing cluster layout -and create a new layout from scratch, meaning that a full rebalancing of your -cluster's data will be needed. To do it, shut down your cluster entirely, -delete the `custer_layout` files in the meta directories of all your nodes, -update all your configuration files with the new `replication_mode` parameter, -restart your cluster, and then create a new layout with all the nodes you want -to keep. Rebalancing data will take some time, and data might temporarily -appear unavailable to your users. It is recommended to shut down public access -to the cluster while rebalancing is in progress. In theory, no data should be -lost as rebalancing is a routine operation for Garage, although we cannot -guarantee you that everything will go right in such an extreme scenario. - #### `compression_level` {#compression_level} Zstd compression level to use for storing blocks. From c04dd8788a3764da2f307b1d10c2d56b7b0e4a61 Mon Sep 17 00:00:00 2001 From: Alex Auvolat Date: Tue, 28 Nov 2023 14:25:04 +0100 Subject: [PATCH 139/538] admin: more info in admin GetClusterStatus --- doc/drafts/admin-api.md | 143 +++++++++++++++++++++------------------ src/api/admin/cluster.rs | 122 +++++++++++++++++++++++++++------ src/garage/admin/mod.rs | 2 +- src/garage/cli/cmd.rs | 9 +-- src/rpc/system.rs | 12 ++-- 5 files changed, 192 insertions(+), 96 deletions(-) diff --git a/doc/drafts/admin-api.md b/doc/drafts/admin-api.md index 411f6418..274bd5c4 100644 --- a/doc/drafts/admin-api.md +++ b/doc/drafts/admin-api.md @@ -69,8 +69,8 @@ Example response body: ```json { - "node": "ec79480e0ce52ae26fd00c9da684e4fa56658d9c64cdcecb094e936de0bfe71f", - "garageVersion": "git:v0.9.0-dev", + "node": "b10c110e4e854e5aa3f4637681befac755154b20059ec163254ddbfae86b09df", + "garageVersion": "v0.10.0", "garageFeatures": [ "k2v", "sled", @@ -81,83 +81,92 @@ Example response body: ], "rustVersion": "1.68.0", "dbEngine": "LMDB (using Heed crate)", - "knownNodes": [ + "layoutVersion": 5, + "nodes": [ { - "id": "ec79480e0ce52ae26fd00c9da684e4fa56658d9c64cdcecb094e936de0bfe71f", - "addr": "10.0.0.11:3901", + "id": "62b218d848e86a64f7fe1909735f29a4350547b54c4b204f91246a14eb0a1a8c", + "role": { + "id": "62b218d848e86a64f7fe1909735f29a4350547b54c4b204f91246a14eb0a1a8c", + "zone": "dc1", + "capacity": 100000000000, + "tags": [] + }, + "addr": "10.0.0.3:3901", + "hostname": "node3", "isUp": true, - "lastSeenSecsAgo": 9, - "hostname": "node1" + "lastSeenSecsAgo": 12, + "draining": false, + "dataPartition": { + "available": 660270088192, + "total": 873862266880 + }, + "metadataPartition": { + "available": 660270088192, + "total": 873862266880 + } }, { - "id": "4a6ae5a1d0d33bf895f5bb4f0a418b7dc94c47c0dd2eb108d1158f3c8f60b0ff", - "addr": "10.0.0.12:3901", + "id": "a11c7cf18af297379eff8688360155fe68d9061654449ba0ce239252f5a7487f", + "role": null, + "addr": "10.0.0.2:3901", + "hostname": "node2", "isUp": true, - "lastSeenSecsAgo": 1, - "hostname": "node2" + "lastSeenSecsAgo": 11, + "draining": true, + "dataPartition": { + "available": 660270088192, + "total": 873862266880 + }, + "metadataPartition": { + "available": 660270088192, + "total": 873862266880 + } }, { - "id": "23ffd0cdd375ebff573b20cc5cef38996b51c1a7d6dbcf2c6e619876e507cf27", - "addr": "10.0.0.21:3901", + "id": "a235ac7695e0c54d7b403943025f57504d500fdcc5c3e42c71c5212faca040a2", + "role": { + "id": "a235ac7695e0c54d7b403943025f57504d500fdcc5c3e42c71c5212faca040a2", + "zone": "dc1", + "capacity": 100000000000, + "tags": [] + }, + "addr": "127.0.0.1:3904", + "hostname": "lindy", "isUp": true, - "lastSeenSecsAgo": 7, - "hostname": "node3" + "lastSeenSecsAgo": 2, + "draining": false, + "dataPartition": { + "available": 660270088192, + "total": 873862266880 + }, + "metadataPartition": { + "available": 660270088192, + "total": 873862266880 + } }, { - "id": "e2ee7984ee65b260682086ec70026165903c86e601a4a5a501c1900afe28d84b", - "addr": "10.0.0.22:3901", + "id": "b10c110e4e854e5aa3f4637681befac755154b20059ec163254ddbfae86b09df", + "role": { + "id": "b10c110e4e854e5aa3f4637681befac755154b20059ec163254ddbfae86b09df", + "zone": "dc1", + "capacity": 100000000000, + "tags": [] + }, + "addr": "10.0.0.1:3901", + "hostname": "node1", "isUp": true, - "lastSeenSecsAgo": 1, - "hostname": "node4" + "lastSeenSecsAgo": 3, + "draining": false, + "dataPartition": { + "available": 660270088192, + "total": 873862266880 + }, + "metadataPartition": { + "available": 660270088192, + "total": 873862266880 + } } - ], - "layout": { - "version": 12, - "roles": [ - { - "id": "ec79480e0ce52ae26fd00c9da684e4fa56658d9c64cdcecb094e936de0bfe71f", - "zone": "dc1", - "capacity": 10737418240, - "tags": [ - "node1" - ] - }, - { - "id": "4a6ae5a1d0d33bf895f5bb4f0a418b7dc94c47c0dd2eb108d1158f3c8f60b0ff", - "zone": "dc1", - "capacity": 10737418240, - "tags": [ - "node2" - ] - }, - { - "id": "23ffd0cdd375ebff573b20cc5cef38996b51c1a7d6dbcf2c6e619876e507cf27", - "zone": "dc2", - "capacity": 10737418240, - "tags": [ - "node3" - ] - } - ], - "stagedRoleChanges": [ - { - "id": "e2ee7984ee65b260682086ec70026165903c86e601a4a5a501c1900afe28d84b", - "remove": false, - "zone": "dc2", - "capacity": 10737418240, - "tags": [ - "node4" - ] - } - { - "id": "23ffd0cdd375ebff573b20cc5cef38996b51c1a7d6dbcf2c6e619876e507cf27", - "remove": true, - "zone": null, - "capacity": null, - "tags": null, - } - ] - } + ] } ``` diff --git a/src/api/admin/cluster.rs b/src/api/admin/cluster.rs index 593bd778..3ce1b254 100644 --- a/src/api/admin/cluster.rs +++ b/src/api/admin/cluster.rs @@ -1,3 +1,4 @@ +use std::collections::HashMap; use std::net::SocketAddr; use std::sync::Arc; @@ -15,25 +16,95 @@ use crate::admin::error::*; use crate::helpers::{json_ok_response, parse_json_body}; pub async fn handle_get_cluster_status(garage: &Arc) -> Result, Error> { + let layout = garage.system.cluster_layout(); + let mut nodes = garage + .system + .get_known_nodes() + .into_iter() + .map(|i| { + ( + i.id, + NodeResp { + id: hex::encode(i.id), + addr: Some(i.addr), + hostname: i.status.hostname, + is_up: i.is_up, + last_seen_secs_ago: i.last_seen_secs_ago, + data_partition: i + .status + .data_disk_avail + .map(|(avail, total)| FreeSpaceResp { + available: avail, + total, + }), + metadata_partition: i.status.meta_disk_avail.map(|(avail, total)| { + FreeSpaceResp { + available: avail, + total, + } + }), + ..Default::default() + }, + ) + }) + .collect::>(); + + for (id, _, role) in layout.current().roles.items().iter() { + if let layout::NodeRoleV(Some(r)) = role { + let role = NodeRoleResp { + id: hex::encode(id), + zone: r.zone.to_string(), + capacity: r.capacity, + tags: r.tags.clone(), + }; + match nodes.get_mut(id) { + None => { + nodes.insert( + *id, + NodeResp { + id: hex::encode(id), + role: Some(role), + ..Default::default() + }, + ); + } + Some(n) => { + if n.role.is_none() { + n.role = Some(role); + } + } + } + } + } + + for ver in layout.versions.iter().rev().skip(1) { + for (id, _, role) in ver.roles.items().iter() { + if let layout::NodeRoleV(Some(r)) = role { + if !nodes.contains_key(id) && r.capacity.is_some() { + nodes.insert( + *id, + NodeResp { + id: hex::encode(id), + draining: true, + ..Default::default() + }, + ); + } + } + } + } + + let mut nodes = nodes.into_iter().map(|(_, v)| v).collect::>(); + nodes.sort_by(|x, y| x.id.cmp(&y.id)); + let res = GetClusterStatusResponse { node: hex::encode(garage.system.id), garage_version: garage_util::version::garage_version(), garage_features: garage_util::version::garage_features(), rust_version: garage_util::version::rust_version(), db_engine: garage.db.engine(), - known_nodes: garage - .system - .get_known_nodes() - .into_iter() - .map(|i| KnownNodeResp { - id: hex::encode(i.id), - addr: i.addr, - is_up: i.is_up, - last_seen_secs_ago: i.last_seen_secs_ago, - hostname: i.status.hostname, - }) - .collect(), - layout: format_cluster_layout(&garage.system.cluster_layout()), + layout_version: layout.current().version, + nodes, }; Ok(json_ok_response(&res)?) @@ -157,8 +228,8 @@ struct GetClusterStatusResponse { garage_features: Option<&'static [&'static str]>, rust_version: &'static str, db_engine: String, - known_nodes: Vec, - layout: GetClusterLayoutResponse, + layout_version: u64, + nodes: Vec, } #[derive(Serialize)] @@ -192,14 +263,27 @@ struct NodeRoleResp { tags: Vec, } -#[derive(Serialize)] +#[derive(Serialize, Default)] #[serde(rename_all = "camelCase")] -struct KnownNodeResp { +struct FreeSpaceResp { + available: u64, + total: u64, +} + +#[derive(Serialize, Default)] +#[serde(rename_all = "camelCase")] +struct NodeResp { id: String, - addr: SocketAddr, + role: Option, + addr: Option, + hostname: Option, is_up: bool, last_seen_secs_ago: Option, - hostname: String, + draining: bool, + #[serde(skip_serializing_if = "Option::is_none")] + data_partition: Option, + #[serde(skip_serializing_if = "Option::is_none")] + metadata_partition: Option, } // ---- update functions ---- diff --git a/src/garage/admin/mod.rs b/src/garage/admin/mod.rs index 77918a0f..da4226cf 100644 --- a/src/garage/admin/mod.rs +++ b/src/garage/admin/mod.rs @@ -295,7 +295,7 @@ impl AdminRpcHandler { let info = node_info.get(id); let status = info.map(|x| &x.status); let role = layout.current().roles.get(id).and_then(|x| x.0.as_ref()); - let hostname = status.map(|x| x.hostname.as_str()).unwrap_or("?"); + let hostname = status.and_then(|x| x.hostname.as_deref()).unwrap_or("?"); let zone = role.map(|x| x.zone.as_str()).unwrap_or("?"); let capacity = role .map(|x| x.capacity_string()) diff --git a/src/garage/cli/cmd.rs b/src/garage/cli/cmd.rs index 4d1306b6..c7f0ad2b 100644 --- a/src/garage/cli/cmd.rs +++ b/src/garage/cli/cmd.rs @@ -62,6 +62,7 @@ pub async fn cmd_status(rpc_cli: &Endpoint, rpc_host: NodeID) -> let mut healthy_nodes = vec!["ID\tHostname\tAddress\tTags\tZone\tCapacity\tDataAvail".to_string()]; for adv in status.iter().filter(|adv| adv.is_up) { + let host = adv.status.hostname.as_deref().unwrap_or("?"); if let Some(NodeRoleV(Some(cfg))) = layout.current().roles.get(&adv.id) { let data_avail = match &adv.status.data_disk_avail { _ if cfg.capacity.is_none() => "N/A".into(), @@ -75,7 +76,7 @@ pub async fn cmd_status(rpc_cli: &Endpoint, rpc_host: NodeID) -> healthy_nodes.push(format!( "{id:?}\t{host}\t{addr}\t[{tags}]\t{zone}\t{capacity}\t{data_avail}", id = adv.id, - host = adv.status.hostname, + host = host, addr = adv.addr, tags = cfg.tags.join(","), zone = cfg.zone, @@ -95,7 +96,7 @@ pub async fn cmd_status(rpc_cli: &Endpoint, rpc_host: NodeID) -> healthy_nodes.push(format!( "{id:?}\t{host}\t{addr}\t[{tags}]\t{zone}\tdraining metadata...", id = adv.id, - host = adv.status.hostname, + host = host, addr = adv.addr, tags = cfg.tags.join(","), zone = cfg.zone, @@ -108,7 +109,7 @@ pub async fn cmd_status(rpc_cli: &Endpoint, rpc_host: NodeID) -> healthy_nodes.push(format!( "{id:?}\t{h}\t{addr}\t\t\t{new_role}", id = adv.id, - h = adv.status.hostname, + h = host, addr = adv.addr, new_role = new_role, )); @@ -149,7 +150,7 @@ pub async fn cmd_status(rpc_cli: &Endpoint, rpc_host: NodeID) -> // it is in a failed state, add proper line to the output let (host, addr, last_seen) = match adv { Some(adv) => ( - adv.status.hostname.as_str(), + adv.status.hostname.as_deref().unwrap_or("?"), adv.addr.to_string(), adv.last_seen_secs_ago .map(|s| tf.convert(Duration::from_secs(s))) diff --git a/src/rpc/system.rs b/src/rpc/system.rs index c7d41ee4..be4aefa2 100644 --- a/src/rpc/system.rs +++ b/src/rpc/system.rs @@ -126,7 +126,7 @@ pub struct System { #[derive(Debug, Clone, Serialize, Deserialize)] pub struct NodeStatus { /// Hostname of the node - pub hostname: String, + pub hostname: Option, /// Replication factor configured on the node pub replication_factor: usize, @@ -765,9 +765,11 @@ impl EndpointHandler for System { impl NodeStatus { fn initial(replication_factor: usize, layout_manager: &LayoutManager) -> Self { NodeStatus { - hostname: gethostname::gethostname() - .into_string() - .unwrap_or_else(|_| "".to_string()), + hostname: Some( + gethostname::gethostname() + .into_string() + .unwrap_or_else(|_| "".to_string()), + ), replication_factor, layout_digest: layout_manager.layout().digest(), meta_disk_avail: None, @@ -777,7 +779,7 @@ impl NodeStatus { fn unknown() -> Self { NodeStatus { - hostname: "?".to_string(), + hostname: None, replication_factor: 0, layout_digest: Default::default(), meta_disk_avail: None, From 80886906507ba12586874ec66ef683139108cbcf Mon Sep 17 00:00:00 2001 From: Quentin Dufour Date: Tue, 28 Nov 2023 16:18:28 +0100 Subject: [PATCH 140/538] fix the doc --- doc/book/build/golang.md | 80 +++++++++++++++++++++----- doc/book/build/javascript.md | 4 +- doc/book/build/python.md | 11 ++-- doc/book/reference-manual/admin-api.md | 11 +++- 4 files changed, 83 insertions(+), 23 deletions(-) diff --git a/doc/book/build/golang.md b/doc/book/build/golang.md index a508260e..f3f28a40 100644 --- a/doc/book/build/golang.md +++ b/doc/book/build/golang.md @@ -37,30 +37,84 @@ import ( "context" "fmt" "os" + "strings" garage "git.deuxfleurs.fr/garage-sdk/garage-admin-sdk-golang" ) func main() { - // Set Host and other parameters + // Initialization configuration := garage.NewConfiguration() configuration.Host = "127.0.0.1:3903" - - - // We can now generate a client client := garage.NewAPIClient(configuration) - - // Authentication is handled through the context pattern ctx := context.WithValue(context.Background(), garage.ContextAccessToken, "s3cr3t") - // Send a request - resp, r, err := client.NodesApi.GetNodes(ctx).Execute() - if err != nil { - fmt.Fprintf(os.Stderr, "Error when calling `NodesApi.GetNodes``: %v\n", err) - fmt.Fprintf(os.Stderr, "Full HTTP response: %v\n", r) + // Nodes + fmt.Println("--- nodes ---") + nodes, _, _ := client.NodesApi.GetNodes(ctx).Execute() + fmt.Fprintf(os.Stdout, "First hostname: %v\n", nodes.KnownNodes[0].Hostname) + capa := int64(1000000000) + change := []garage.NodeRoleChange{ + garage.NodeRoleChange{NodeRoleUpdate: &garage.NodeRoleUpdate { + Id: *nodes.KnownNodes[0].Id, + Zone: "dc1", + Capacity: *garage.NewNullableInt64(&capa), + Tags: []string{ "fast", "amd64" }, + }}, } + staged, _, _ := client.LayoutApi.AddLayout(ctx).NodeRoleChange(change).Execute() + msg, _, _ := client.LayoutApi.ApplyLayout(ctx).LayoutVersion(*garage.NewLayoutVersion(staged.Version + 1)).Execute() + fmt.Printf(strings.Join(msg.Message, "\n")) // Layout configured - // Process the response - fmt.Fprintf(os.Stdout, "Target hostname: %v\n", resp.KnownNodes[resp.Node].Hostname) + health, _, _ := client.NodesApi.GetHealth(ctx).Execute() + fmt.Printf("Status: %s, nodes: %v/%v, storage: %v/%v, partitions: %v/%v\n", health.Status, health.ConnectedNodes, health.KnownNodes, health.StorageNodesOk, health.StorageNodes, health.PartitionsAllOk, health.Partitions) + + // Key + fmt.Println("\n--- key ---") + key := "openapi-key" + keyInfo, _, _ := client.KeyApi.AddKey(ctx).AddKeyRequest(garage.AddKeyRequest{Name: *garage.NewNullableString(&key) }).Execute() + defer client.KeyApi.DeleteKey(ctx).Id(*keyInfo.AccessKeyId).Execute() + fmt.Printf("AWS_ACCESS_KEY_ID=%s\nAWS_SECRET_ACCESS_KEY=%s\n", *keyInfo.AccessKeyId, *keyInfo.SecretAccessKey.Get()) + + id := *keyInfo.AccessKeyId + canCreateBucket := true + updateKeyRequest := *garage.NewUpdateKeyRequest() + updateKeyRequest.SetName("openapi-key-updated") + updateKeyRequest.SetAllow(garage.UpdateKeyRequestAllow { CreateBucket: &canCreateBucket }) + update, _, _ := client.KeyApi.UpdateKey(ctx).Id(id).UpdateKeyRequest(updateKeyRequest).Execute() + fmt.Printf("Updated %v with key name %v\n", *update.AccessKeyId, *update.Name) + + keyList, _, _ := client.KeyApi.ListKeys(ctx).Execute() + fmt.Printf("Keys count: %v\n", len(keyList)) + + // Bucket + fmt.Println("\n--- bucket ---") + global_name := "global-ns-openapi-bucket" + local_name := "local-ns-openapi-bucket" + bucketInfo, _, _ := client.BucketApi.CreateBucket(ctx).CreateBucketRequest(garage.CreateBucketRequest{ + GlobalAlias: &global_name, + LocalAlias: &garage.CreateBucketRequestLocalAlias { + AccessKeyId: keyInfo.AccessKeyId, + Alias: &local_name, + }, + }).Execute() + defer client.BucketApi.DeleteBucket(ctx).Id(*bucketInfo.Id).Execute() + fmt.Printf("Bucket id: %s\n", *bucketInfo.Id) + + updateBucketRequest := *garage.NewUpdateBucketRequest() + website := garage.NewUpdateBucketRequestWebsiteAccess() + website.SetEnabled(true) + website.SetIndexDocument("index.html") + website.SetErrorDocument("errors/4xx.html") + updateBucketRequest.SetWebsiteAccess(*website) + quotas := garage.NewUpdateBucketRequestQuotas() + quotas.SetMaxSize(1000000000) + quotas.SetMaxObjects(999999999) + updateBucketRequest.SetQuotas(*quotas) + updatedBucket, _, _ := client.BucketApi.UpdateBucket(ctx).Id(*bucketInfo.Id).UpdateBucketRequest(updateBucketRequest).Execute() + fmt.Printf("Bucket %v website activation: %v\n", *updatedBucket.Id, *updatedBucket.WebsiteAccess) + + bucketList, _, _ := client.BucketApi.ListBuckets(ctx).Execute() + fmt.Printf("Bucket count: %v\n", len(bucketList)) } ``` diff --git a/doc/book/build/javascript.md b/doc/book/build/javascript.md index ff009ffe..a065c595 100644 --- a/doc/book/build/javascript.md +++ b/doc/book/build/javascript.md @@ -31,9 +31,9 @@ npm install --save git+https://git.deuxfleurs.fr/garage-sdk/garage-admin-sdk-js. A short example: ```javascript -const garage = require('garage_administration_api_v0garage_v0_8_0'); +const garage = require('garage_administration_api_v1garage_v0_9_0'); -const api = new garage.ApiClient("http://127.0.0.1:3903/v0"); +const api = new garage.ApiClient("http://127.0.0.1:3903/v1"); api.authentications['bearerAuth'].accessToken = "s3cr3t"; const [node, layout, key, bucket] = [ diff --git a/doc/book/build/python.md b/doc/book/build/python.md index 5b797897..896c99d3 100644 --- a/doc/book/build/python.md +++ b/doc/book/build/python.md @@ -80,7 +80,7 @@ from garage_admin_sdk.apis import * from garage_admin_sdk.models import * configuration = garage_admin_sdk.Configuration( - host = "http://localhost:3903/v0", + host = "http://localhost:3903/v1", access_token = "s3cr3t" ) @@ -94,13 +94,14 @@ print(f"running garage {status.garage_version}, node_id {status.node}") # Change layout of this node current = layout.get_layout() -layout.add_layout({ - status.node: NodeClusterInfo( +layout.add_layout([ + NodeRoleChange( + id = status.node, zone = "dc1", - capacity = 1, + capacity = 1000000000, tags = [ "dev" ], ) -}) +]) layout.apply_layout(LayoutVersion( version = current.version + 1 )) diff --git a/doc/book/reference-manual/admin-api.md b/doc/book/reference-manual/admin-api.md index 6932ac60..15630788 100644 --- a/doc/book/reference-manual/admin-api.md +++ b/doc/book/reference-manual/admin-api.md @@ -13,8 +13,11 @@ We will bump the version numbers prefixed to each API endpoint at each time the or semantics change, meaning that code that relies on these endpoint will break when changes are introduced. -The Garage administration API was introduced in version 0.7.2, this document -does not apply to older versions of Garage. +Versions: + - Before Garage 0.7.2 - no admin API + - Garage 0.7.2 - admin APIv0 + - Garage 0.9.0 - admin APIv1, deprecate admin APIv0 + ## Access control @@ -131,7 +134,9 @@ $ curl -so /dev/null -w "%{http_code}" http://localhost:3903/check?domain=exampl ### Cluster operations -These endpoints are defined on a dedicated [Redocly page](https://garagehq.deuxfleurs.fr/api/garage-admin-v0.html). You can also download its [OpenAPI specification](https://garagehq.deuxfleurs.fr/api/garage-admin-v0.yml). +These endpoints have a dedicated OpenAPI spec. + - APIv1 - [HTML spec](https://garagehq.deuxfleurs.fr/api/garage-admin-v1.html) - [OpenAPI YAML](https://garagehq.deuxfleurs.fr/api/garage-admin-v1.yml) + - APIv0 (deprecated) - [HTML spec](https://garagehq.deuxfleurs.fr/api/garage-admin-v0.html) - [OpenAPI YAML](https://garagehq.deuxfleurs.fr/api/garage-admin-v0.yml) Requesting the API from the command line can be as simple as running: From c8356a91d9bf1d1488ec288099f2a55a1019918f Mon Sep 17 00:00:00 2001 From: Alex Auvolat Date: Thu, 7 Dec 2023 10:30:26 +0100 Subject: [PATCH 141/538] layout updates: fix the set of nodes among which minima are calculated --- src/rpc/layout/helper.rs | 25 +++++++++++++++++++++---- src/rpc/layout/history.rs | 8 +++++--- src/rpc/layout/schema.rs | 2 +- 3 files changed, 27 insertions(+), 8 deletions(-) diff --git a/src/rpc/layout/helper.rs b/src/rpc/layout/helper.rs index 5d159f3e..881a039e 100644 --- a/src/rpc/layout/helper.rs +++ b/src/rpc/layout/helper.rs @@ -51,20 +51,37 @@ impl LayoutHelper { pub fn new(mut layout: LayoutHistory, mut ack_lock: HashMap) -> Self { layout.cleanup_old_versions(); + let all_nodes = layout.get_all_nodes(); let all_nongateway_nodes = layout.get_all_nongateway_nodes(); - layout.clamp_update_trackers(&all_nongateway_nodes); + + layout.clamp_update_trackers(&all_nodes); let min_version = layout.min_stored(); + + // ack_map_min is the minimum value of ack_map among all nodes + // in the cluster (gateway, non-gateway, current and previous layouts). + // It is the highest layout version which all of these nodes have + // acknowledged, indicating that they are aware of it and are no + // longer processing write operations that did not take it into account. let ack_map_min = layout .update_trackers .ack_map - .min(&all_nongateway_nodes, min_version); + .min_among(&all_nodes, min_version); + + // sync_map_min is the minimum value of sync_map among all storage nodes + // in the cluster (non-gateway nodes only, current and previous layouts). + // It is the highest layout version for which we know that all relevant + // storage nodes have fullfilled a sync, and therefore it is safe to + // use a read quorum within that layout to ensure consistency. + // Gateway nodes are excluded here because they hold no relevant data + // (they store the bucket and access key tables, but we don't have + // consistency on those). + // TODO: this value could take quorums into account instead. let sync_map_min = layout .update_trackers .sync_map - .min(&all_nongateway_nodes, min_version); + .min_among(&all_nongateway_nodes, min_version); - let all_nodes = layout.get_all_nodes(); let trackers_hash = layout.calculate_trackers_hash(); let staging_hash = layout.calculate_staging_hash(); diff --git a/src/rpc/layout/history.rs b/src/rpc/layout/history.rs index 7d4a1b48..c448ac24 100644 --- a/src/rpc/layout/history.rs +++ b/src/rpc/layout/history.rs @@ -77,14 +77,16 @@ impl LayoutHistory { } // If there are old versions that no one is reading from anymore, - // remove them + // remove them (keep them in self.old_versions). + // ASSUMPTION: we only care about where nodes in the current layout version + // are reading from, as we assume older nodes are being discarded. while self.versions.len() > 1 { - let all_nongateway_nodes = self.get_all_nongateway_nodes(); + let current_nodes = &self.current().node_id_vec; let min_version = self.min_stored(); let sync_ack_map_min = self .update_trackers .sync_ack_map - .min(&all_nongateway_nodes, min_version); + .min_among(¤t_nodes, min_version); if self.min_stored() < sync_ack_map_min { let removed = self.versions.remove(0); info!( diff --git a/src/rpc/layout/schema.rs b/src/rpc/layout/schema.rs index cb36297d..49e84420 100644 --- a/src/rpc/layout/schema.rs +++ b/src/rpc/layout/schema.rs @@ -408,7 +408,7 @@ impl UpdateTracker { } } - pub(crate) fn min(&self, storage_nodes: &[Uuid], min_version: u64) -> u64 { + pub(crate) fn min_among(&self, storage_nodes: &[Uuid], min_version: u64) -> u64 { storage_nodes .iter() .map(|x| self.0.get(x).copied().unwrap_or(min_version)) From 95eb13eb08d517d328e3c8aeb222440a27211ee9 Mon Sep 17 00:00:00 2001 From: Alex Auvolat Date: Thu, 7 Dec 2023 10:55:15 +0100 Subject: [PATCH 142/538] rpc: refactor result tracking for quorum sets --- src/rpc/layout/manager.rs | 6 ++ src/rpc/rpc_helper.rs | 151 +++++++++++++++++++--------- src/table/replication/parameters.rs | 2 +- src/table/table.rs | 54 ++-------- 4 files changed, 123 insertions(+), 90 deletions(-) diff --git a/src/rpc/layout/manager.rs b/src/rpc/layout/manager.rs index c65831a2..17465019 100644 --- a/src/rpc/layout/manager.rs +++ b/src/rpc/layout/manager.rs @@ -352,6 +352,12 @@ impl AsRef for WriteLock { } } +impl AsMut for WriteLock { + fn as_mut(&mut self) -> &mut T { + &mut self.value + } +} + impl Drop for WriteLock { fn drop(&mut self) { let layout = self.layout_manager.layout(); // acquire read lock diff --git a/src/rpc/rpc_helper.rs b/src/rpc/rpc_helper.rs index f71f5ae7..c6dcbe75 100644 --- a/src/rpc/rpc_helper.rs +++ b/src/rpc/rpc_helper.rs @@ -484,15 +484,10 @@ impl RpcHelper { // Peers may appear in many quorum sets. Here, build a list of peers, // mapping to the index of the quorum sets in which they appear. - let mut peers = HashMap::>::new(); - for (i, set) in to_sets.iter().enumerate() { - for peer in set.iter() { - peers.entry(*peer).or_default().push(i); - } - } + let mut result_tracker = QuorumSetResultTracker::new(to_sets, quorum); // Send one request to each peer of the quorum sets - let requests = peers.iter().map(|(peer, _)| { + let requests = result_tracker.nodes.iter().map(|(peer, _)| { let self2 = self.clone(); let msg = msg.clone(); let endpoint2 = endpoint.clone(); @@ -501,52 +496,25 @@ impl RpcHelper { }); let mut resp_stream = requests.collect::>(); - // Success and error responses will be collected in these two vectors - let mut successes = vec![]; - let mut errors = vec![]; - - // `set_counters` is used to keep track of how many success and error - // responses are received within each quorum set. When a node returns - // its response, it counts as a sucess/an error for all of the quorum - // sets which it is part of. - let mut set_counters = vec![(0, 0); to_sets.len()]; - // Drive requests to completion while let Some((node, resp)) = resp_stream.next().await { // Store the response in the correct vector and increment the // appropriate counters - match resp { - Ok(msg) => { - for set in peers.get(&node).unwrap().iter() { - set_counters[*set].0 += 1; - } - successes.push(msg); - } - Err(e) => { - for set in peers.get(&node).unwrap().iter() { - set_counters[*set].1 += 1; - } - errors.push(e); - } - } + result_tracker.register_result(node, resp); // If we have a quorum of ok in all quorum sets, then it's a success! - if set_counters.iter().all(|(ok_cnt, _)| *ok_cnt >= quorum) { + if result_tracker.all_quorums_ok() { // Continue all other requets in background tokio::spawn(async move { resp_stream.collect::)>>().await; }); - return Ok(successes); + return Ok(result_tracker.success_values()); } // If there is a quorum set for which too many errors were received, // we know it's impossible to get a quorum, so return immediately. - if set_counters - .iter() - .enumerate() - .any(|(i, (_, err_cnt))| err_cnt + quorum > to_sets[i].len()) - { + if result_tracker.too_many_failures() { break; } } @@ -563,13 +531,104 @@ impl RpcHelper { // running request handler.) // Failure, could not get quorum - let errors = errors.iter().map(|e| format!("{}", e)).collect::>(); - Err(Error::Quorum( - quorum, - Some(to_sets.len()), - successes.len(), - peers.len(), - errors, - )) + Err(result_tracker.quorum_error()) + } +} + +// ------- utility for tracking successes/errors among write sets -------- + +pub struct QuorumSetResultTracker { + // The set of nodes and the quorum sets they belong to + pub nodes: HashMap>, + pub quorum: usize, + + // The success and error responses received + pub successes: Vec<(Uuid, S)>, + pub failures: Vec<(Uuid, E)>, + + // The counters for successes and failures in each set + pub success_counters: Box<[usize]>, + pub failure_counters: Box<[usize]>, + pub set_lens: Box<[usize]>, +} + +impl QuorumSetResultTracker { + pub fn new(sets: &[A], quorum: usize) -> Self + where + A: AsRef<[Uuid]>, + { + let mut nodes = HashMap::>::new(); + for (i, set) in sets.iter().enumerate() { + for node in set.as_ref().iter() { + nodes.entry(*node).or_default().push(i); + } + } + + let num_nodes = nodes.len(); + Self { + nodes, + quorum, + successes: Vec::with_capacity(num_nodes), + failures: vec![], + success_counters: vec![0; sets.len()].into_boxed_slice(), + failure_counters: vec![0; sets.len()].into_boxed_slice(), + set_lens: sets + .iter() + .map(|x| x.as_ref().len()) + .collect::>() + .into_boxed_slice(), + } + } + + pub fn register_result(&mut self, node: Uuid, result: Result) { + match result { + Ok(s) => { + self.successes.push((node, s)); + for set in self.nodes.get(&node).unwrap().iter() { + self.success_counters[*set] += 1; + } + } + Err(e) => { + self.failures.push((node, e)); + for set in self.nodes.get(&node).unwrap().iter() { + self.failure_counters[*set] += 1; + } + } + } + } + + pub fn all_quorums_ok(&self) -> bool { + self.success_counters + .iter() + .all(|ok_cnt| *ok_cnt >= self.quorum) + } + + pub fn too_many_failures(&self) -> bool { + self.failure_counters + .iter() + .zip(self.set_lens.iter()) + .any(|(err_cnt, set_len)| *err_cnt + self.quorum > *set_len) + } + + pub fn success_values(self) -> Vec { + self.successes + .into_iter() + .map(|(_, x)| x) + .collect::>() + } + + pub fn quorum_error(self) -> Error { + let errors = self + .failures + .iter() + .map(|(n, e)| format!("{:?}: {}", n, e)) + .collect::>(); + Error::Quorum( + self.quorum, + Some(self.set_lens.len()), + self.successes.len(), + self.nodes.len(), + errors, + ) } } diff --git a/src/table/replication/parameters.rs b/src/table/replication/parameters.rs index a4e701bb..db11ff5f 100644 --- a/src/table/replication/parameters.rs +++ b/src/table/replication/parameters.rs @@ -3,7 +3,7 @@ use garage_util::data::*; /// Trait to describe how a table shall be replicated pub trait TableReplication: Send + Sync + 'static { - type WriteSets: AsRef>> + Send + Sync + 'static; + type WriteSets: AsRef>> + AsMut>> + Send + Sync + 'static; // See examples in table_sharded.rs and table_fullcopy.rs // To understand various replication methods diff --git a/src/table/table.rs b/src/table/table.rs index 7d1ff31c..6508cf5d 100644 --- a/src/table/table.rs +++ b/src/table/table.rs @@ -20,6 +20,7 @@ use garage_util::error::Error; use garage_util::metrics::RecordDuration; use garage_util::migrate::Migrate; +use garage_rpc::rpc_helper::QuorumSetResultTracker; use garage_rpc::system::System; use garage_rpc::*; @@ -180,10 +181,6 @@ impl Table { // a quorum of nodes has answered OK, then the insert has succeeded and // consistency properties (read-after-write) are preserved. - // Some code here might feel redundant with RpcHelper::try_write_many_sets, - // but I think deduplicating could lead to more spaghetti instead of - // improving the readability, so I'm leaving as is. - let quorum = self.data.replication.write_quorum(); // Serialize all entries and compute the write sets for each of them. @@ -197,7 +194,10 @@ impl Table { for entry in entries.into_iter() { let entry = entry.borrow(); let hash = entry.partition_key().hash(); - let write_sets = self.data.replication.write_sets(&hash); + let mut write_sets = self.data.replication.write_sets(&hash); + for set in write_sets.as_mut().iter_mut() { + set.sort(); + } let e_enc = Arc::new(ByteBuf::from(entry.encode()?)); entries_vec.push((write_sets, e_enc)); } @@ -212,12 +212,8 @@ impl Table { .collect::>(); write_sets.sort(); write_sets.dedup(); - let mut write_set_index = HashMap::<&Uuid, Vec>::new(); - for (i, write_set) in write_sets.iter().enumerate() { - for node in write_set.iter() { - write_set_index.entry(node).or_default().push(i); - } - } + + let mut result_tracker = QuorumSetResultTracker::new(&write_sets, quorum); // Build a map of all nodes to the entries that must be sent to that node. let mut call_list: HashMap> = HashMap::new(); @@ -230,7 +226,6 @@ impl Table { } // Build futures to actually perform each of the corresponding RPC calls - let call_count = call_list.len(); let call_futures = call_list.into_iter().map(|(node, entries)| { let this = self.clone(); let tracer = opentelemetry::global::tracer("garage"); @@ -254,27 +249,11 @@ impl Table { // Run all requests in parallel thanks to FuturesUnordered, and collect results. let mut resps = call_futures.collect::>(); - let mut set_counters = vec![(0, 0); write_sets.len()]; - let mut successes = 0; - let mut errors = vec![]; while let Some((node, resp)) = resps.next().await { - match resp { - Ok(_) => { - successes += 1; - for set in write_set_index.get(&node).unwrap().iter() { - set_counters[*set].0 += 1; - } - } - Err(e) => { - errors.push(e); - for set in write_set_index.get(&node).unwrap().iter() { - set_counters[*set].1 += 1; - } - } - } + result_tracker.register_result(node, resp.map(|_| ())); - if set_counters.iter().all(|(ok_cnt, _)| *ok_cnt >= quorum) { + if result_tracker.all_quorums_ok() { // Success // Continue all other requests in background @@ -285,25 +264,14 @@ impl Table { return Ok(()); } - if set_counters - .iter() - .enumerate() - .any(|(i, (_, err_cnt))| err_cnt + quorum > write_sets[i].len()) - { + if result_tracker.too_many_failures() { // Too many errors in this set, we know we won't get a quorum break; } } // Failure, could not get quorum within at least one set - let errors = errors.iter().map(|e| format!("{}", e)).collect::>(); - Err(Error::Quorum( - quorum, - Some(write_sets.len()), - successes, - call_count, - errors, - )) + Err(result_tracker.quorum_error()) } pub async fn get( From d90de365b3b30cb631b22fcd62c98bddb5a91549 Mon Sep 17 00:00:00 2001 From: Alex Auvolat Date: Thu, 7 Dec 2023 11:16:10 +0100 Subject: [PATCH 143/538] table sync: use write quorums to report global success or failure of sync --- src/rpc/layout/helper.rs | 2 +- src/rpc/layout/manager.rs | 2 +- src/table/replication/fullcopy.rs | 3 +- src/table/replication/parameters.rs | 2 +- src/table/replication/sharded.rs | 4 +-- src/table/sync.rs | 51 +++++++++++++++++------------ 6 files changed, 36 insertions(+), 28 deletions(-) diff --git a/src/rpc/layout/helper.rs b/src/rpc/layout/helper.rs index 881a039e..0aa7c6aa 100644 --- a/src/rpc/layout/helper.rs +++ b/src/rpc/layout/helper.rs @@ -180,7 +180,7 @@ impl LayoutHelper { ret } - pub(crate) fn write_sets_of(&self, position: &Hash) -> Vec> { + pub fn storage_sets_of(&self, position: &Hash) -> Vec> { self.layout() .versions .iter() diff --git a/src/rpc/layout/manager.rs b/src/rpc/layout/manager.rs index 17465019..dc963ba0 100644 --- a/src/rpc/layout/manager.rs +++ b/src/rpc/layout/manager.rs @@ -139,7 +139,7 @@ impl LayoutManager { pub fn write_sets_of(self: &Arc, position: &Hash) -> WriteLock>> { let layout = self.layout(); let version = layout.current().version; - let nodes = layout.write_sets_of(position); + let nodes = layout.storage_sets_of(position); layout .ack_lock .get(&version) diff --git a/src/table/replication/fullcopy.rs b/src/table/replication/fullcopy.rs index df930224..30122f39 100644 --- a/src/table/replication/fullcopy.rs +++ b/src/table/replication/fullcopy.rs @@ -1,4 +1,3 @@ -use std::iter::FromIterator; use std::sync::Arc; use garage_rpc::layout::*; @@ -69,7 +68,7 @@ impl TableReplication for TableFullReplication { partition: 0u16, first_hash: [0u8; 32].into(), last_hash: [0xff; 32].into(), - storage_nodes: Vec::from_iter(layout.current().all_nodes().to_vec()), + storage_sets: vec![layout.current().all_nodes().to_vec()], }], } } diff --git a/src/table/replication/parameters.rs b/src/table/replication/parameters.rs index db11ff5f..78470f35 100644 --- a/src/table/replication/parameters.rs +++ b/src/table/replication/parameters.rs @@ -40,5 +40,5 @@ pub struct SyncPartition { pub partition: Partition, pub first_hash: Hash, pub last_hash: Hash, - pub storage_nodes: Vec, + pub storage_sets: Vec>, } diff --git a/src/table/replication/sharded.rs b/src/table/replication/sharded.rs index 2a16bc0c..55d0029d 100644 --- a/src/table/replication/sharded.rs +++ b/src/table/replication/sharded.rs @@ -60,12 +60,12 @@ impl TableReplication for TableShardedReplication { .current() .partitions() .map(|(partition, first_hash)| { - let storage_nodes = layout.storage_nodes_of(&first_hash); + let storage_sets = layout.storage_sets_of(&first_hash); SyncPartition { partition, first_hash, last_hash: [0u8; 32].into(), // filled in just after - storage_nodes, + storage_sets, } }) .collect::>(); diff --git a/src/table/sync.rs b/src/table/sync.rs index efeac402..cfcbc4b5 100644 --- a/src/table/sync.rs +++ b/src/table/sync.rs @@ -18,6 +18,7 @@ use garage_util::encode::{debug_serialize, nonversioned_encode}; use garage_util::error::{Error, OkOrMessage}; use garage_rpc::layout::*; +use garage_rpc::rpc_helper::QuorumSetResultTracker; use garage_rpc::system::System; use garage_rpc::*; @@ -106,44 +107,52 @@ impl TableSyncer { must_exit: &mut watch::Receiver, ) -> Result<(), Error> { let my_id = self.system.id; - let retain = partition.storage_nodes.contains(&my_id); + let retain = partition.storage_sets.iter().any(|x| x.contains(&my_id)); if retain { debug!( "({}) Syncing {:?} with {:?}...", F::TABLE_NAME, partition, - partition.storage_nodes + partition.storage_sets ); - let mut sync_futures = partition - .storage_nodes + let mut result_tracker = QuorumSetResultTracker::new( + &partition.storage_sets, + self.data.replication.write_quorum(), + ); + + let mut sync_futures = result_tracker + .nodes .iter() - .filter(|node| **node != my_id) + .map(|(node, _)| *node) .map(|node| { - self.clone() - .do_sync_with(&partition, *node, must_exit.clone()) + let must_exit = must_exit.clone(); + async move { + if node == my_id { + (node, Ok(())) + } else { + (node, self.do_sync_with(&partition, node, must_exit).await) + } + } }) .collect::>(); - let mut n_errors = 0; - while let Some(r) = sync_futures.next().await { - if let Err(e) = r { - n_errors += 1; - warn!("({}) Sync error: {}", F::TABLE_NAME, e); + while let Some((node, res)) = sync_futures.next().await { + if let Err(e) = &res { + warn!("({}) Sync error with {:?}: {}", F::TABLE_NAME, node, e); } + result_tracker.register_result(node, res); } - if n_errors > 0 { - return Err(Error::Message(format!( - "Sync failed with {} nodes.", - n_errors - ))); + + if result_tracker.too_many_failures() { + return Err(result_tracker.quorum_error()); + } else { + Ok(()) } } else { self.offload_partition(&partition.first_hash, &partition.last_hash, must_exit) - .await?; + .await } - - Ok(()) } // Offload partition: this partition is not something we are storing, @@ -264,7 +273,7 @@ impl TableSyncer { } async fn do_sync_with( - self: Arc, + self: &Arc, partition: &SyncPartition, who: Uuid, must_exit: watch::Receiver, From aa59059a910eb6e1e824b84413a66909d697ef8a Mon Sep 17 00:00:00 2001 From: Alex Auvolat Date: Thu, 7 Dec 2023 11:50:00 +0100 Subject: [PATCH 144/538] layout cli: safer skip-dead-nodes command --- src/garage/cli/cmd.rs | 23 ++++++++++++++++------- src/garage/cli/layout.rs | 35 +++++++++++++++++++++++++---------- src/garage/cli/structs.rs | 12 ++++++++---- 3 files changed, 49 insertions(+), 21 deletions(-) diff --git a/src/garage/cli/cmd.rs b/src/garage/cli/cmd.rs index c7f0ad2b..196c0cb3 100644 --- a/src/garage/cli/cmd.rs +++ b/src/garage/cli/cmd.rs @@ -49,13 +49,7 @@ pub async fn cli_command_dispatch( } pub async fn cmd_status(rpc_cli: &Endpoint, rpc_host: NodeID) -> Result<(), Error> { - let status = match rpc_cli - .call(&rpc_host, SystemRpc::GetKnownNodes, PRIO_NORMAL) - .await?? - { - SystemRpc::ReturnKnownNodes(nodes) => nodes, - resp => return Err(Error::Message(format!("Invalid RPC response: {:?}", resp))), - }; + let status = fetch_status(rpc_cli, rpc_host).await?; let layout = fetch_layout(rpc_cli, rpc_host).await?; println!("==== HEALTHY NODES ===="); @@ -268,3 +262,18 @@ pub async fn cmd_admin( } Ok(()) } + +// ---- utility ---- + +pub async fn fetch_status( + rpc_cli: &Endpoint, + rpc_host: NodeID, +) -> Result, Error> { + match rpc_cli + .call(&rpc_host, SystemRpc::GetKnownNodes, PRIO_NORMAL) + .await?? + { + SystemRpc::ReturnKnownNodes(nodes) => Ok(nodes), + resp => Err(Error::Message(format!("Invalid RPC response: {:?}", resp))), + } +} diff --git a/src/garage/cli/layout.rs b/src/garage/cli/layout.rs index 3c7843bd..cdf77c04 100644 --- a/src/garage/cli/layout.rs +++ b/src/garage/cli/layout.rs @@ -33,8 +33,8 @@ pub async fn cli_layout_command_dispatch( cmd_config_layout(system_rpc_endpoint, rpc_host, config_opt).await } LayoutOperation::History => cmd_layout_history(system_rpc_endpoint, rpc_host).await, - LayoutOperation::AssumeSync(assume_sync_opt) => { - cmd_layout_assume_sync(system_rpc_endpoint, rpc_host, assume_sync_opt).await + LayoutOperation::SkipDeadNodes(assume_sync_opt) => { + cmd_layout_skip_dead_nodes(system_rpc_endpoint, rpc_host, assume_sync_opt).await } } } @@ -388,13 +388,21 @@ pub async fn cmd_layout_history( Ok(()) } -pub async fn cmd_layout_assume_sync( +pub async fn cmd_layout_skip_dead_nodes( rpc_cli: &Endpoint, rpc_host: NodeID, - opt: AssumeSyncOpt, + opt: SkipDeadNodesOpt, ) -> Result<(), Error> { + let status = fetch_status(rpc_cli, rpc_host).await?; let mut layout = fetch_layout(rpc_cli, rpc_host).await?; + if layout.versions.len() == 1 { + return Err(Error::Message( + "This command cannot be called when there is only one live cluster layout version" + .into(), + )); + } + let min_v = layout.min_stored(); if opt.version <= min_v || opt.version > layout.current().version { return Err(Error::Message(format!( @@ -408,12 +416,19 @@ pub async fn cmd_layout_assume_sync( let all_nodes = layout.get_all_nodes(); for node in all_nodes.iter() { - layout.update_trackers.ack_map.set_max(*node, opt.version); - layout.update_trackers.sync_map.set_max(*node, opt.version); - layout - .update_trackers - .sync_ack_map - .set_max(*node, opt.version); + if status.iter().any(|x| x.id == *node && x.is_up) { + continue; + } + + if layout.update_trackers.ack_map.set_max(*node, opt.version) { + println!("Increased the ACK tracker for node {:?}", node); + } + + if opt.allow_missing_data { + if layout.update_trackers.sync_map.set_max(*node, opt.version) { + println!("Increased the SYNC tracker for node {:?}", node); + } + } } send_layout(rpc_cli, rpc_host, layout).await?; diff --git a/src/garage/cli/structs.rs b/src/garage/cli/structs.rs index c4b400f4..6bc3da22 100644 --- a/src/garage/cli/structs.rs +++ b/src/garage/cli/structs.rs @@ -117,9 +117,9 @@ pub enum LayoutOperation { #[structopt(name = "history", version = garage_version())] History, - /// Assume all nodes are synchronized up to a certain layout version - #[structopt(name = "assume-sync", version = garage_version())] - AssumeSync(AssumeSyncOpt), + /// Skip dead nodes when awaiting for a new layout version to be synchronized + #[structopt(name = "skip-dead-nodes", version = garage_version())] + SkipDeadNodes(SkipDeadNodesOpt), } #[derive(StructOpt, Debug)] @@ -178,11 +178,15 @@ pub struct RevertLayoutOpt { } #[derive(StructOpt, Debug)] -pub struct AssumeSyncOpt { +pub struct SkipDeadNodesOpt { /// Version number of the layout to assume is currently up-to-date. /// This will generally be the current layout version. #[structopt(long = "version")] pub(crate) version: u64, + /// Allow the skip even if a quorum of ndoes could not be found for + /// the data among the remaining nodes + #[structopt(long = "allow-missing-data")] + pub(crate) allow_missing_data: bool, } #[derive(Serialize, Deserialize, StructOpt, Debug)] From 9cecea64d4509e95ac9793b29c947e2ecf9bb0b8 Mon Sep 17 00:00:00 2001 From: Alex Auvolat Date: Thu, 7 Dec 2023 14:27:53 +0100 Subject: [PATCH 145/538] layout: allow sync update tracker to progress with only quorums --- src/garage/cli/layout.rs | 6 +-- src/rpc/layout/helper.rs | 33 +++++++++--- src/rpc/layout/history.rs | 101 ++++++++++++++++++++++++++++++++++++ src/rpc/layout/manager.rs | 18 ++++--- src/rpc/layout/schema.rs | 6 +-- src/rpc/replication_mode.rs | 7 +++ src/rpc/system.rs | 2 +- 7 files changed, 152 insertions(+), 21 deletions(-) diff --git a/src/garage/cli/layout.rs b/src/garage/cli/layout.rs index cdf77c04..fac826f5 100644 --- a/src/garage/cli/layout.rs +++ b/src/garage/cli/layout.rs @@ -365,9 +365,9 @@ pub async fn cmd_layout_history( table.push(format!( "{:?}\t#{}\t#{}\t#{}", node, - layout.update_trackers.ack_map.get(node), - layout.update_trackers.sync_map.get(node), - layout.update_trackers.sync_ack_map.get(node), + layout.update_trackers.ack_map.get(node, min_stored), + layout.update_trackers.sync_map.get(node, min_stored), + layout.update_trackers.sync_ack_map.get(node, min_stored), )); } table[1..].sort(); diff --git a/src/rpc/layout/helper.rs b/src/rpc/layout/helper.rs index 0aa7c6aa..eeaf4ffa 100644 --- a/src/rpc/layout/helper.rs +++ b/src/rpc/layout/helper.rs @@ -7,6 +7,7 @@ use serde::{Deserialize, Serialize}; use garage_util::data::*; use super::schema::*; +use crate::replication_mode::ReplicationMode; use crate::rpc_helper::RpcHelper; #[derive(Debug, Clone, Serialize, Deserialize, Default, PartialEq, Eq)] @@ -22,6 +23,7 @@ pub struct LayoutDigest { } pub struct LayoutHelper { + replication_mode: ReplicationMode, layout: Option, // cached values @@ -48,7 +50,23 @@ impl Deref for LayoutHelper { } impl LayoutHelper { - pub fn new(mut layout: LayoutHistory, mut ack_lock: HashMap) -> Self { + pub fn new( + replication_mode: ReplicationMode, + mut layout: LayoutHistory, + mut ack_lock: HashMap, + ) -> Self { + // In the new() function of the helper, we do a bunch of cleanup + // and calculations on the layout history to make sure things are + // correct and we have rapid access to important values such as + // the layout versions to use when reading to ensure consistency. + + if !replication_mode.is_read_after_write_consistent() { + // Fast path for when no consistency is required. + // In this case we only need to keep the last version of the layout, + // we don't care about coordinating stuff in the cluster. + layout.keep_current_version_only(); + } + layout.cleanup_old_versions(); let all_nodes = layout.get_all_nodes(); @@ -68,7 +86,7 @@ impl LayoutHelper { .ack_map .min_among(&all_nodes, min_version); - // sync_map_min is the minimum value of sync_map among all storage nodes + // sync_map_min is the minimum value of sync_map among storage nodes // in the cluster (non-gateway nodes only, current and previous layouts). // It is the highest layout version for which we know that all relevant // storage nodes have fullfilled a sync, and therefore it is safe to @@ -76,11 +94,10 @@ impl LayoutHelper { // Gateway nodes are excluded here because they hold no relevant data // (they store the bucket and access key tables, but we don't have // consistency on those). - // TODO: this value could take quorums into account instead. - let sync_map_min = layout - .update_trackers - .sync_map - .min_among(&all_nongateway_nodes, min_version); + // This value is calculated using quorums to allow progress even + // if not all nodes have successfully completed a sync. + let sync_map_min = + layout.calculate_sync_map_min_with_quorum(replication_mode, &all_nongateway_nodes); let trackers_hash = layout.calculate_trackers_hash(); let staging_hash = layout.calculate_staging_hash(); @@ -91,6 +108,7 @@ impl LayoutHelper { .or_insert(AtomicUsize::new(0)); LayoutHelper { + replication_mode, layout: Some(layout), ack_map_min, sync_map_min, @@ -115,6 +133,7 @@ impl LayoutHelper { let changed = f(&mut self.layout.as_mut().unwrap()); if changed { *self = Self::new( + self.replication_mode, self.layout.take().unwrap(), std::mem::take(&mut self.ack_lock), ); diff --git a/src/rpc/layout/history.rs b/src/rpc/layout/history.rs index c448ac24..a53256cc 100644 --- a/src/rpc/layout/history.rs +++ b/src/rpc/layout/history.rs @@ -6,6 +6,7 @@ use garage_util::encode::nonversioned_encode; use garage_util::error::*; use super::*; +use crate::replication_mode::ReplicationMode; impl LayoutHistory { pub fn new(replication_factor: usize) -> Self { @@ -64,6 +65,13 @@ impl LayoutHistory { // ---- housekeeping (all invoked by LayoutHelper) ---- + pub(crate) fn keep_current_version_only(&mut self) { + while self.versions.len() > 1 { + let removed = self.versions.remove(0); + self.old_versions.push(removed); + } + } + pub(crate) fn cleanup_old_versions(&mut self) { // If there are invalid versions before valid versions, remove them if self.versions.len() > 1 && self.current().check().is_ok() { @@ -114,6 +122,99 @@ impl LayoutHistory { } } + pub(crate) fn calculate_sync_map_min_with_quorum( + &self, + replication_mode: ReplicationMode, + all_nongateway_nodes: &[Uuid], + ) -> u64 { + // This function calculates the minimum layout version from which + // it is safe to read if we want to maintain read-after-write consistency. + // In the general case the computation can be a bit expensive so + // we try to optimize it in several ways. + + // If there is only one layout version, we know that's the one + // we need to read from. + if self.versions.len() == 1 { + return self.current().version; + } + + let quorum = replication_mode.write_quorum(); + + let min_version = self.min_stored(); + let global_min = self + .update_trackers + .sync_map + .min_among(&all_nongateway_nodes, min_version); + + // If the write quorums are equal to the total number of nodes, + // i.e. no writes can succeed while they are not written to all nodes, + // then we must in all case wait for all nodes to complete a sync. + // This is represented by reading from the layout with version + // number global_min, the smallest layout version for which all nodes + // have completed a sync. + if quorum == self.current().replication_factor { + return global_min; + } + + // In the general case, we need to look at all write sets for all partitions, + // and find a safe layout version to read for that partition. We then + // take the minimum value among all partition as the safe layout version + // to read in all cases (the layout version to which all reads are directed). + let mut current_min = self.current().version; + let mut sets_done = HashSet::>::new(); + + for (_, p_hash) in self.current().partitions() { + for v in self.versions.iter() { + if v.version == self.current().version { + // We don't care about whether nodes in the latest layout version + // have completed a sync or not, as the sync is push-only + // and by definition nodes in the latest layout version do not + // hold data that must be pushed to nodes in the latest layout + // version, since that's the same version (any data that's + // already in the latest version is assumed to have been written + // by an operation that ensured a quorum of writes within + // that version). + continue; + } + + // Determine set of nodes for partition p in layout version v. + // Sort the node set to avoid duplicate computations. + let mut set = v + .nodes_of(&p_hash, v.replication_factor) + .collect::>(); + set.sort(); + + // If this set was already processed, skip it. + if sets_done.contains(&set) { + continue; + } + + // Find the value of the sync update trackers that is the + // highest possible minimum within a quorum of nodes. + let mut sync_values = set + .iter() + .map(|x| self.update_trackers.sync_map.get(x, min_version)) + .collect::>(); + sync_values.sort(); + let set_min = sync_values[sync_values.len() - quorum]; + if set_min < current_min { + current_min = set_min; + } + // defavorable case, we know we are at the smallest possible version, + // so we can stop early + assert!(current_min >= global_min); + if current_min == global_min { + return current_min; + } + + // Add set to already processed sets + sets_done.insert(set); + } + } + + current_min + } + pub(crate) fn calculate_trackers_hash(&self) -> Hash { blake2sum(&nonversioned_encode(&self.update_trackers).unwrap()[..]) } diff --git a/src/rpc/layout/manager.rs b/src/rpc/layout/manager.rs index dc963ba0..ec8a2a15 100644 --- a/src/rpc/layout/manager.rs +++ b/src/rpc/layout/manager.rs @@ -14,12 +14,13 @@ use garage_util::error::*; use garage_util::persister::Persister; use super::*; +use crate::replication_mode::ReplicationMode; use crate::rpc_helper::*; use crate::system::*; pub struct LayoutManager { node_id: Uuid, - replication_factor: usize, + replication_mode: ReplicationMode, persist_cluster_layout: Persister, layout: Arc>, @@ -37,14 +38,16 @@ impl LayoutManager { node_id: NodeID, system_endpoint: Arc>, fullmesh: Arc, - replication_factor: usize, + replication_mode: ReplicationMode, ) -> Result, Error> { + let replication_factor = replication_mode.replication_factor(); + let persist_cluster_layout: Persister = Persister::new(&config.metadata_dir, "cluster_layout"); let cluster_layout = match persist_cluster_layout.load() { Ok(x) => { - if x.current().replication_factor != replication_factor { + if x.current().replication_factor != replication_mode.replication_factor() { return Err(Error::Message(format!( "Prevous cluster layout has replication factor {}, which is different than the one specified in the config file ({}). The previous cluster layout can be purged, if you know what you are doing, simply by deleting the `cluster_layout` file in your metadata directory.", x.current().replication_factor, @@ -62,7 +65,8 @@ impl LayoutManager { } }; - let mut cluster_layout = LayoutHelper::new(cluster_layout, Default::default()); + let mut cluster_layout = + LayoutHelper::new(replication_mode, cluster_layout, Default::default()); cluster_layout.update_trackers(node_id.into()); let layout = Arc::new(RwLock::new(cluster_layout)); @@ -77,7 +81,7 @@ impl LayoutManager { Ok(Arc::new(Self { node_id: node_id.into(), - replication_factor, + replication_mode, persist_cluster_layout, layout, change_notify, @@ -291,11 +295,11 @@ impl LayoutManager { adv.update_trackers ); - if adv.current().replication_factor != self.replication_factor { + if adv.current().replication_factor != self.replication_mode.replication_factor() { let msg = format!( "Received a cluster layout from another node with replication factor {}, which is different from what we have in our configuration ({}). Discarding the cluster layout we received.", adv.current().replication_factor, - self.replication_factor + self.replication_mode.replication_factor() ); error!("{}", msg); return Err(Error::Message(msg)); diff --git a/src/rpc/layout/schema.rs b/src/rpc/layout/schema.rs index 49e84420..df949906 100644 --- a/src/rpc/layout/schema.rs +++ b/src/rpc/layout/schema.rs @@ -411,13 +411,13 @@ impl UpdateTracker { pub(crate) fn min_among(&self, storage_nodes: &[Uuid], min_version: u64) -> u64 { storage_nodes .iter() - .map(|x| self.0.get(x).copied().unwrap_or(min_version)) + .map(|x| self.get(x, min_version)) .min() .unwrap_or(min_version) } - pub fn get(&self, node: &Uuid) -> u64 { - self.0.get(node).copied().unwrap_or(0) + pub fn get(&self, node: &Uuid, min_version: u64) -> u64 { + self.0.get(node).copied().unwrap_or(min_version) } } diff --git a/src/rpc/replication_mode.rs b/src/rpc/replication_mode.rs index e244e063..2f7e2fec 100644 --- a/src/rpc/replication_mode.rs +++ b/src/rpc/replication_mode.rs @@ -54,4 +54,11 @@ impl ReplicationMode { Self::ThreeWayDangerous => 1, } } + + pub fn is_read_after_write_consistent(&self) -> bool { + match self { + Self::None | Self::TwoWay | Self::ThreeWay => true, + _ => false, + } + } } diff --git a/src/rpc/system.rs b/src/rpc/system.rs index be4aefa2..81a47ff3 100644 --- a/src/rpc/system.rs +++ b/src/rpc/system.rs @@ -280,7 +280,7 @@ impl System { netapp.id, system_endpoint.clone(), fullmesh.clone(), - replication_factor, + replication_mode, )?; // ---- set up metrics and status exchange ---- From 431b28e0cfdc9cac6c649193cf602108a8b02997 Mon Sep 17 00:00:00 2001 From: Alex Auvolat Date: Thu, 7 Dec 2023 15:15:59 +0100 Subject: [PATCH 146/538] fix build with discovery features --- src/rpc/system.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/rpc/system.rs b/src/rpc/system.rs index 81a47ff3..adfef6b6 100644 --- a/src/rpc/system.rs +++ b/src/rpc/system.rs @@ -514,7 +514,7 @@ impl System { if let Err(e) = c .publish_consul_service( self.netapp.id, - &self.local_status.load_full().hostname, + &self.local_status.load_full().hostname.as_deref().unwrap(), rpc_public_addr, ) .await @@ -541,7 +541,7 @@ impl System { if let Err(e) = publish_kubernetes_node( k, self.netapp.id, - &self.local_status.load_full().hostname, + &self.local_status.load_full().hostname.as_deref().unwrap(), rpc_public_addr, ) .await From 91b874c4efa40e64663368369a712e0a5a389e53 Mon Sep 17 00:00:00 2001 From: Alex Auvolat Date: Fri, 8 Dec 2023 10:36:37 +0100 Subject: [PATCH 147/538] rpc: fix system::health --- src/rpc/system.rs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/rpc/system.rs b/src/rpc/system.rs index adfef6b6..a8f12852 100644 --- a/src/rpc/system.rs +++ b/src/rpc/system.rs @@ -456,14 +456,14 @@ impl System { let mut partitions_quorum = 0; let mut partitions_all_ok = 0; for (_, hash) in partitions.iter() { - let write_sets = layout + let mut write_sets = layout .versions .iter() .map(|x| x.nodes_of(hash, x.replication_factor)); let has_quorum = write_sets .clone() .all(|set| set.filter(|x| node_up(x)).count() >= quorum); - let all_ok = write_sets.clone().all(|mut set| set.all(|x| node_up(&x))); + let all_ok = write_sets.all(|mut set| set.all(|x| node_up(&x))); if has_quorum { partitions_quorum += 1; } @@ -474,7 +474,7 @@ impl System { // Determine overall cluster status let status = - if partitions_quorum == partitions.len() && storage_nodes_ok == storage_nodes.len() { + if partitions_all_ok == partitions.len() && storage_nodes_ok == storage_nodes.len() { ClusterHealthStatus::Healthy } else if partitions_quorum == partitions.len() { ClusterHealthStatus::Degraded From 7f2541101f15614c79020b35d3d7dab767c32676 Mon Sep 17 00:00:00 2001 From: Alex Auvolat Date: Fri, 8 Dec 2023 11:24:23 +0100 Subject: [PATCH 148/538] cli: improvements to the layout commands when multiple layouts are live --- src/garage/admin/mod.rs | 3 +- src/garage/cli/cmd.rs | 4 +-- src/garage/cli/layout.rs | 67 ++++++++++++++++++++++++++-------------- src/garage/cli/util.rs | 4 ++- 4 files changed, 49 insertions(+), 29 deletions(-) diff --git a/src/garage/admin/mod.rs b/src/garage/admin/mod.rs index da4226cf..de7851e1 100644 --- a/src/garage/admin/mod.rs +++ b/src/garage/admin/mod.rs @@ -274,8 +274,7 @@ impl AdminRpcHandler { fn gather_cluster_stats(&self) -> String { let mut ret = String::new(); - // Gather storage node and free space statistics - // TODO: not only layout.current() ??? + // Gather storage node and free space statistics for current nodes let layout = &self.garage.system.cluster_layout(); let mut node_partition_count = HashMap::::new(); for short_id in layout.current().ring_assignment_data.iter() { diff --git a/src/garage/cli/cmd.rs b/src/garage/cli/cmd.rs index 196c0cb3..fb6dface 100644 --- a/src/garage/cli/cmd.rs +++ b/src/garage/cli/cmd.rs @@ -179,7 +179,7 @@ pub async fn cmd_status(rpc_cli: &Endpoint, rpc_host: NodeID) -> println!("Your cluster is expecting to drain data from nodes that are currently unavailable."); println!("If these nodes are definitely dead, please review the layout history with"); println!( - "`garage layout history` and use `garage layout assume-sync` to force progress." + "`garage layout history` and use `garage layout skip-dead-nodes` to force progress." ); } } @@ -274,6 +274,6 @@ pub async fn fetch_status( .await?? { SystemRpc::ReturnKnownNodes(nodes) => Ok(nodes), - resp => Err(Error::Message(format!("Invalid RPC response: {:?}", resp))), + resp => Err(Error::unexpected_rpc_message(resp)), } } diff --git a/src/garage/cli/layout.rs b/src/garage/cli/layout.rs index fac826f5..f76e33c5 100644 --- a/src/garage/cli/layout.rs +++ b/src/garage/cli/layout.rs @@ -354,35 +354,44 @@ pub async fn cmd_layout_history( )); } format_table(table); - println!(); - println!("==== UPDATE TRACKERS ===="); - println!("This is the internal data that Garage stores to know which nodes have what data."); - println!(); - let mut table = vec!["Node\tAck\tSync\tSync_ack".to_string()]; - let all_nodes = layout.get_all_nodes(); - for node in all_nodes.iter() { - table.push(format!( - "{:?}\t#{}\t#{}\t#{}", - node, - layout.update_trackers.ack_map.get(node, min_stored), - layout.update_trackers.sync_map.get(node, min_stored), - layout.update_trackers.sync_ack_map.get(node, min_stored), - )); - } - table[1..].sort(); - format_table(table); if layout.versions.len() > 1 { + println!("==== UPDATE TRACKERS ===="); + println!("Several layout versions are currently live in the version, and data is being migrated."); + println!( + "This is the internal data that Garage stores to know which nodes have what data." + ); + println!(); + let mut table = vec!["Node\tAck\tSync\tSync_ack".to_string()]; + let all_nodes = layout.get_all_nodes(); + for node in all_nodes.iter() { + table.push(format!( + "{:?}\t#{}\t#{}\t#{}", + node, + layout.update_trackers.ack_map.get(node, min_stored), + layout.update_trackers.sync_map.get(node, min_stored), + layout.update_trackers.sync_ack_map.get(node, min_stored), + )); + } + table[1..].sort(); + format_table(table); + println!(); println!( - "If some nodes are not catching up to the latest layout version in the update tracker," + "If some nodes are not catching up to the latest layout version in the update trackers," ); println!("it might be because they are offline or unable to complete a sync successfully."); println!( - "You may force progress using `garage layout assume-sync --version {}`", + "You may force progress using `garage layout skip-dead-nodes --version {}`", layout.current().version ); + } else { + println!("Your cluster is currently in a stable state with a single live layout version."); + println!("No metadata migration is in progress. Note that the migration of data blocks is not tracked,"); + println!( + "so you might want to keep old nodes online until their data directories become empty." + ); } Ok(()) @@ -415,6 +424,7 @@ pub async fn cmd_layout_skip_dead_nodes( } let all_nodes = layout.get_all_nodes(); + let mut did_something = false; for node in all_nodes.iter() { if status.iter().any(|x| x.id == *node && x.is_up) { continue; @@ -422,19 +432,28 @@ pub async fn cmd_layout_skip_dead_nodes( if layout.update_trackers.ack_map.set_max(*node, opt.version) { println!("Increased the ACK tracker for node {:?}", node); + did_something = true; } if opt.allow_missing_data { if layout.update_trackers.sync_map.set_max(*node, opt.version) { println!("Increased the SYNC tracker for node {:?}", node); + did_something = true; } } } - send_layout(rpc_cli, rpc_host, layout).await?; - println!("Success."); - - Ok(()) + if did_something { + send_layout(rpc_cli, rpc_host, layout).await?; + println!("Success."); + Ok(()) + } else if !opt.allow_missing_data { + Err(Error::Message("Nothing was done, try passing the `--allow-missing-data` flag to force progress even when not enough nodes can complete a metadata sync.".into())) + } else { + Err(Error::Message( + "Sorry, there is nothing I can do for you. Please wait patiently. If you ask for help, please send the output of the `garage layout history` command.".into(), + )) + } } // --- utility --- @@ -448,7 +467,7 @@ pub async fn fetch_layout( .await?? { SystemRpc::AdvertiseClusterLayout(t) => Ok(t), - resp => Err(Error::Message(format!("Invalid RPC response: {:?}", resp))), + resp => Err(Error::unexpected_rpc_message(resp)), } } diff --git a/src/garage/cli/util.rs b/src/garage/cli/util.rs index 2232d395..0511e2b1 100644 --- a/src/garage/cli/util.rs +++ b/src/garage/cli/util.rs @@ -450,6 +450,8 @@ pub fn print_block_info( if refcount != nondeleted_count { println!(); - println!("Warning: refcount does not match number of non-deleted versions"); + println!( + "Warning: refcount does not match number of non-deleted versions (see issue #644)." + ); } } From 063294dd569e10c6d85e29eb6507249eece00956 Mon Sep 17 00:00:00 2001 From: Alex Auvolat Date: Fri, 8 Dec 2023 11:50:58 +0100 Subject: [PATCH 149/538] layout version: refactor get_node_zone --- src/rpc/layout/test.rs | 4 ++-- src/rpc/layout/version.rs | 47 +++++++++++++++++++-------------------- 2 files changed, 25 insertions(+), 26 deletions(-) diff --git a/src/rpc/layout/test.rs b/src/rpc/layout/test.rs index bb072c97..88eb518e 100644 --- a/src/rpc/layout/test.rs +++ b/src/rpc/layout/test.rs @@ -34,8 +34,8 @@ fn check_against_naive(cl: &LayoutVersion) -> Result { zone_token.insert(z.clone(), 0); } for uuid in cl.nongateway_nodes() { - let z = cl.get_node_zone(&uuid)?; - let c = cl.get_node_capacity(&uuid).unwrap(); + let z = cl.expect_get_node_zone(&uuid); + let c = cl.expect_get_node_capacity(&uuid); zone_token.insert( z.to_string(), zone_token[z] + min(NB_PARTITIONS, (c / over_size) as usize), diff --git a/src/rpc/layout/version.rs b/src/rpc/layout/version.rs index 947fab56..cbfbee94 100644 --- a/src/rpc/layout/version.rs +++ b/src/rpc/layout/version.rs @@ -70,6 +70,14 @@ impl LayoutVersion { } } + /// Given a node uuids, this function returns the label of its zone if it has one + pub fn get_node_zone(&self, uuid: &Uuid) -> Option<&str> { + match self.node_role(uuid) { + Some(role) => Some(&role.zone), + _ => None, + } + } + /// Returns the number of partitions associated to this node in the ring pub fn get_node_usage(&self, uuid: &Uuid) -> Result { for (i, id) in self.node_id_vec.iter().enumerate() { @@ -129,28 +137,22 @@ impl LayoutVersion { // ===================== internal information extractors ====================== - /// Given a node uuids, this function returns the label of its zone - pub(crate) fn get_node_zone(&self, uuid: &Uuid) -> Result<&str, Error> { - match self.node_role(uuid) { - Some(role) => Ok(&role.zone), - _ => Err(Error::Message( - "The Uuid does not correspond to a node present in the cluster.".into(), - )), - } - } - - fn expect_get_node_capacity(&self, uuid: &Uuid) -> u64 { + pub(crate) fn expect_get_node_capacity(&self, uuid: &Uuid) -> u64 { self.get_node_capacity(&uuid) .expect("non-gateway node with zero capacity") } + pub(crate) fn expect_get_node_zone(&self, uuid: &Uuid) -> &str { + self.get_node_zone(&uuid).expect("node without a zone") + } + /// Returns the sum of capacities of non gateway nodes in the cluster - fn get_total_capacity(&self) -> Result { + fn get_total_capacity(&self) -> u64 { let mut total_capacity = 0; for uuid in self.nongateway_nodes() { total_capacity += self.expect_get_node_capacity(&uuid); } - Ok(total_capacity) + total_capacity } /// Returns the effective value of the zone_redundancy parameter @@ -227,10 +229,7 @@ impl LayoutVersion { // Check that every partition is spread over at least zone_redundancy zones. let zones_of_p = nodes_of_p .iter() - .map(|n| { - self.get_node_zone(&self.node_id_vec[*n as usize]) - .expect("Zone not found.") - }) + .map(|n| self.expect_get_node_zone(&self.node_id_vec[*n as usize])) .collect::>(); if zones_of_p.iter().unique().count() < zone_redundancy { return Err(format!( @@ -516,7 +515,7 @@ impl LayoutVersion { } let mut s_down = 1; - let mut s_up = self.get_total_capacity()?; + let mut s_up = self.get_total_capacity(); while s_down + 1 < s_up { g = self.generate_flow_graph( (s_down + s_up) / 2, @@ -586,7 +585,7 @@ impl LayoutVersion { } for n in 0..self.nongateway_nodes().len() { let node_capacity = self.expect_get_node_capacity(&self.node_id_vec[n]); - let node_zone = zone_to_id[self.get_node_zone(&self.node_id_vec[n])?]; + let node_zone = zone_to_id[self.expect_get_node_zone(&self.node_id_vec[n])]; g.add_edge(Vertex::N(n), Vertex::Sink, node_capacity / partition_size)?; for p in 0..NB_PARTITIONS { if !exclude_assoc.contains(&(p, n)) { @@ -632,7 +631,7 @@ impl LayoutVersion { // The algorithm is such that it will start with the flow that we just computed // and find ameliorating paths from that. for (p, n) in exclude_edge.iter() { - let node_zone = zone_to_id[self.get_node_zone(&self.node_id_vec[*n])?]; + let node_zone = zone_to_id[self.expect_get_node_zone(&self.node_id_vec[*n])]; g.add_edge(Vertex::PZ(*p, node_zone), Vertex::N(*n), 1)?; } g.compute_maximal_flow()?; @@ -652,7 +651,7 @@ impl LayoutVersion { let mut cost = CostFunction::new(); for (p, assoc_p) in prev_assign.iter().enumerate() { for n in assoc_p.iter() { - let node_zone = zone_to_id[self.get_node_zone(&self.node_id_vec[*n])?]; + let node_zone = zone_to_id[self.expect_get_node_zone(&self.node_id_vec[*n])]; cost.insert((Vertex::PZ(p, node_zone), Vertex::N(*n)), -1); } } @@ -707,7 +706,7 @@ impl LayoutVersion { let mut msg = Message::new(); let used_cap = self.partition_size * NB_PARTITIONS as u64 * self.replication_factor as u64; - let total_cap = self.get_total_capacity()?; + let total_cap = self.get_total_capacity(); let percent_cap = 100.0 * (used_cap as f32) / (total_cap as f32); msg.push(format!( "Usable capacity / total cluster capacity: {} / {} ({:.1} %)", @@ -754,7 +753,7 @@ impl LayoutVersion { let mut old_zones_of_p = Vec::::new(); for n in prev_assign[p].iter() { old_zones_of_p - .push(zone_to_id[self.get_node_zone(&self.node_id_vec[*n])?]); + .push(zone_to_id[self.expect_get_node_zone(&self.node_id_vec[*n])]); } if !old_zones_of_p.contains(&z) { new_partitions_zone[z] += 1; @@ -796,7 +795,7 @@ impl LayoutVersion { for z in 0..id_to_zone.len() { let mut nodes_of_z = Vec::::new(); for n in 0..storing_nodes.len() { - if self.get_node_zone(&self.node_id_vec[n])? == id_to_zone[z] { + if self.expect_get_node_zone(&self.node_id_vec[n]) == id_to_zone[z] { nodes_of_z.push(n); } } From 5dd200c015aed786173f0e11541b0505f95dd6d1 Mon Sep 17 00:00:00 2001 From: Alex Auvolat Date: Fri, 8 Dec 2023 12:02:24 +0100 Subject: [PATCH 150/538] layout: move block_read_nodes_of to rpc_helper to avoid double-locking (in theory, this could have caused a deadlock) --- src/block/manager.rs | 2 +- src/rpc/layout/helper.rs | 27 ++------- src/rpc/rpc_helper.rs | 121 ++++++++++++++++++++++++--------------- 3 files changed, 80 insertions(+), 70 deletions(-) diff --git a/src/block/manager.rs b/src/block/manager.rs index 47111160..bfd390ee 100644 --- a/src/block/manager.rs +++ b/src/block/manager.rs @@ -266,7 +266,7 @@ impl BlockManager { { let who = self .system - .cluster_layout() + .rpc_helper() .block_read_nodes_of(hash, self.system.rpc_helper()); for node in who.iter() { diff --git a/src/rpc/layout/helper.rs b/src/rpc/layout/helper.rs index eeaf4ffa..147c8b4f 100644 --- a/src/rpc/layout/helper.rs +++ b/src/rpc/layout/helper.rs @@ -8,7 +8,6 @@ use garage_util::data::*; use super::schema::*; use crate::replication_mode::ReplicationMode; -use crate::rpc_helper::RpcHelper; #[derive(Debug, Clone, Serialize, Deserialize, Default, PartialEq, Eq)] pub struct LayoutDigest { @@ -155,6 +154,10 @@ impl LayoutHelper { self.ack_map_min } + pub fn all_sync(&self) -> u64 { + self.sync_map_min + } + pub fn sync_versions(&self) -> (u64, u64, u64) { ( self.layout().current().version, @@ -177,28 +180,6 @@ impl LayoutHelper { .collect() } - pub fn block_read_nodes_of(&self, position: &Hash, rpc_helper: &RpcHelper) -> Vec { - let mut ret = Vec::with_capacity(12); - let ver_iter = self - .layout() - .versions - .iter() - .rev() - .chain(self.layout().old_versions.iter().rev()); - for ver in ver_iter { - if ver.version > self.sync_map_min { - continue; - } - let nodes = ver.nodes_of(position, ver.replication_factor); - for node in rpc_helper.request_order(nodes) { - if !ret.contains(&node) { - ret.push(node); - } - } - } - ret - } - pub fn storage_sets_of(&self, position: &Hash) -> Vec> { self.layout() .versions diff --git a/src/rpc/rpc_helper.rs b/src/rpc/rpc_helper.rs index c6dcbe75..7e1387ed 100644 --- a/src/rpc/rpc_helper.rs +++ b/src/rpc/rpc_helper.rs @@ -26,7 +26,7 @@ use garage_util::data::*; use garage_util::error::Error; use garage_util::metrics::RecordDuration; -use crate::layout::LayoutHelper; +use crate::layout::{LayoutHelper, LayoutHistory}; use crate::metrics::RpcMetrics; // Default RPC timeout = 5 minutes @@ -304,7 +304,7 @@ impl RpcHelper { // preemptively send an additional request to any remaining nodes. // Reorder requests to priorize closeness / low latency - let request_order = self.request_order(to.iter().copied()); + let request_order = self.request_order(&self.0.layout.read().unwrap(), to.iter().copied()); let send_all_at_once = strategy.rs_send_all_at_once.unwrap_or(false); // Build future for each request @@ -368,50 +368,6 @@ impl RpcHelper { } } - pub fn request_order(&self, nodes: impl Iterator) -> Vec { - // Retrieve some status variables that we will use to sort requests - let peer_list = self.0.fullmesh.get_peer_list(); - let layout = self.0.layout.read().unwrap(); - let our_zone = match layout.current().node_role(&self.0.our_node_id) { - Some(pc) => &pc.zone, - None => "", - }; - - // Augment requests with some information used to sort them. - // The tuples are as follows: - // (is another node?, is another zone?, latency, node ID, request future) - // We store all of these tuples in a vec that we can sort. - // By sorting this vec, we priorize ourself, then nodes in the same zone, - // and within a same zone we priorize nodes with the lowest latency. - let mut nodes = nodes - .map(|to| { - let peer_zone = match layout.current().node_role(&to) { - Some(pc) => &pc.zone, - None => "", - }; - let peer_avg_ping = peer_list - .iter() - .find(|x| x.id.as_ref() == to.as_slice()) - .and_then(|pi| pi.avg_ping) - .unwrap_or_else(|| Duration::from_secs(10)); - ( - to != self.0.our_node_id, - peer_zone != our_zone, - peer_avg_ping, - to, - ) - }) - .collect::>(); - - // Sort requests by (priorize ourself, priorize same zone, priorize low latency) - nodes.sort_by_key(|(diffnode, diffzone, ping, _to)| (*diffnode, *diffzone, *ping)); - - nodes - .into_iter() - .map(|(_, _, _, to)| to) - .collect::>() - } - /// Make a RPC call to multiple servers, returning either a Vec of responses, /// or an error if quorum could not be reached due to too many errors /// @@ -533,6 +489,79 @@ impl RpcHelper { // Failure, could not get quorum Err(result_tracker.quorum_error()) } + + // ---- functions not related to MAKING RPCs, but just determining to what nodes + // they should be made and in which order ---- + + pub fn block_read_nodes_of(&self, position: &Hash, rpc_helper: &RpcHelper) -> Vec { + let layout = self.0.layout.read().unwrap(); + + let mut ret = Vec::with_capacity(12); + let ver_iter = layout + .versions + .iter() + .rev() + .chain(layout.old_versions.iter().rev()); + for ver in ver_iter { + if ver.version > layout.all_sync() { + continue; + } + let nodes = ver.nodes_of(position, ver.replication_factor); + for node in rpc_helper.request_order(&layout, nodes) { + if !ret.contains(&node) { + ret.push(node); + } + } + } + ret + } + + fn request_order( + &self, + layout: &LayoutHistory, + nodes: impl Iterator, + ) -> Vec { + // Retrieve some status variables that we will use to sort requests + let peer_list = self.0.fullmesh.get_peer_list(); + let our_zone = match layout.current().node_role(&self.0.our_node_id) { + Some(pc) => &pc.zone, + None => "", + }; + + // Augment requests with some information used to sort them. + // The tuples are as follows: + // (is another node?, is another zone?, latency, node ID, request future) + // We store all of these tuples in a vec that we can sort. + // By sorting this vec, we priorize ourself, then nodes in the same zone, + // and within a same zone we priorize nodes with the lowest latency. + let mut nodes = nodes + .map(|to| { + let peer_zone = match layout.current().node_role(&to) { + Some(pc) => &pc.zone, + None => "", + }; + let peer_avg_ping = peer_list + .iter() + .find(|x| x.id.as_ref() == to.as_slice()) + .and_then(|pi| pi.avg_ping) + .unwrap_or_else(|| Duration::from_secs(10)); + ( + to != self.0.our_node_id, + peer_zone != our_zone, + peer_avg_ping, + to, + ) + }) + .collect::>(); + + // Sort requests by (priorize ourself, priorize same zone, priorize low latency) + nodes.sort_by_key(|(diffnode, diffzone, ping, _to)| (*diffnode, *diffzone, *ping)); + + nodes + .into_iter() + .map(|(_, _, _, to)| to) + .collect::>() + } } // ------- utility for tracking successes/errors among write sets -------- From 64a6e557a4ff6aa1ad833a1b25ef8c85cf9ee3f3 Mon Sep 17 00:00:00 2001 From: Alex Auvolat Date: Fri, 8 Dec 2023 12:18:12 +0100 Subject: [PATCH 151/538] rpc helper: small refactorings --- src/rpc/rpc_helper.rs | 31 +++++++++++++++++-------------- 1 file changed, 17 insertions(+), 14 deletions(-) diff --git a/src/rpc/rpc_helper.rs b/src/rpc/rpc_helper.rs index 7e1387ed..65af8901 100644 --- a/src/rpc/rpc_helper.rs +++ b/src/rpc/rpc_helper.rs @@ -436,13 +436,12 @@ impl RpcHelper { H: StreamingEndpointHandler + 'static, S: Send + 'static, { - let msg = msg.into_req().map_err(netapp::error::Error::from)?; - // Peers may appear in many quorum sets. Here, build a list of peers, // mapping to the index of the quorum sets in which they appear. let mut result_tracker = QuorumSetResultTracker::new(to_sets, quorum); // Send one request to each peer of the quorum sets + let msg = msg.into_req().map_err(netapp::error::Error::from)?; let requests = result_tracker.nodes.iter().map(|(peer, _)| { let self2 = self.clone(); let msg = msg.clone(); @@ -523,10 +522,10 @@ impl RpcHelper { ) -> Vec { // Retrieve some status variables that we will use to sort requests let peer_list = self.0.fullmesh.get_peer_list(); - let our_zone = match layout.current().node_role(&self.0.our_node_id) { - Some(pc) => &pc.zone, - None => "", - }; + let our_zone = layout + .current() + .get_node_zone(&self.0.our_node_id) + .unwrap_or(""); // Augment requests with some information used to sort them. // The tuples are as follows: @@ -536,10 +535,7 @@ impl RpcHelper { // and within a same zone we priorize nodes with the lowest latency. let mut nodes = nodes .map(|to| { - let peer_zone = match layout.current().node_role(&to) { - Some(pc) => &pc.zone, - None => "", - }; + let peer_zone = layout.current().get_node_zone(&to).unwrap_or(""); let peer_avg_ping = peer_list .iter() .find(|x| x.id.as_ref() == to.as_slice()) @@ -567,21 +563,28 @@ impl RpcHelper { // ------- utility for tracking successes/errors among write sets -------- pub struct QuorumSetResultTracker { - // The set of nodes and the quorum sets they belong to + /// The set of nodes and the index of the quorum sets they belong to pub nodes: HashMap>, + /// The quorum value, i.e. number of success responses to await in each set pub quorum: usize, - // The success and error responses received + /// The success responses received pub successes: Vec<(Uuid, S)>, + /// The error responses received pub failures: Vec<(Uuid, E)>, - // The counters for successes and failures in each set + /// The counters for successes in each set pub success_counters: Box<[usize]>, + /// The counters for failures in each set pub failure_counters: Box<[usize]>, + /// The total number of nodes in each set pub set_lens: Box<[usize]>, } -impl QuorumSetResultTracker { +impl QuorumSetResultTracker +where + E: std::fmt::Display, +{ pub fn new(sets: &[A], quorum: usize) -> Self where A: AsRef<[Uuid]>, From 4dbf254512327ef4e7abbd5525b89bfa5b7ecb6f Mon Sep 17 00:00:00 2001 From: Alex Auvolat Date: Fri, 8 Dec 2023 14:15:52 +0100 Subject: [PATCH 152/538] layout: refactoring, merge two files --- src/rpc/layout/helper.rs | 2 +- src/rpc/layout/mod.rs | 441 +++++++++++++++++++++++++++++++++++++- src/rpc/layout/schema.rs | 431 ------------------------------------- src/rpc/layout/version.rs | 1 - 4 files changed, 440 insertions(+), 435 deletions(-) delete mode 100644 src/rpc/layout/schema.rs diff --git a/src/rpc/layout/helper.rs b/src/rpc/layout/helper.rs index 147c8b4f..2ba010b8 100644 --- a/src/rpc/layout/helper.rs +++ b/src/rpc/layout/helper.rs @@ -6,7 +6,7 @@ use serde::{Deserialize, Serialize}; use garage_util::data::*; -use super::schema::*; +use super::*; use crate::replication_mode::ReplicationMode; #[derive(Debug, Clone, Serialize, Deserialize, Default, PartialEq, Eq)] diff --git a/src/rpc/layout/mod.rs b/src/rpc/layout/mod.rs index eb127fda..facdb2ce 100644 --- a/src/rpc/layout/mod.rs +++ b/src/rpc/layout/mod.rs @@ -1,7 +1,13 @@ +use std::fmt; + +use bytesize::ByteSize; + +use garage_util::crdt::{AutoCrdt, Crdt}; +use garage_util::data::Uuid; + mod graph_algo; mod helper; mod history; -mod schema; mod version; #[cfg(test)] @@ -13,7 +19,6 @@ pub mod manager; pub use helper::{LayoutDigest, LayoutHelper}; pub use manager::WriteLock; -pub use schema::*; pub use version::*; // ---- defines: partitions ---- @@ -39,3 +44,435 @@ const NB_PARTITIONS: usize = 1usize << PARTITION_BITS; // Change this to u16 the day we want to have more than 256 nodes in a cluster pub type CompactNodeType = u8; pub const MAX_NODE_NUMBER: usize = 256; + +// ======== actual data structures for the layout data ======== +// ======== that is persisted to disk ======== +// some small utility impls are at the end of this file, +// but most of the code that actually computes stuff is in +// version.rs, history.rs and helper.rs + +mod v08 { + use crate::layout::CompactNodeType; + use garage_util::crdt::LwwMap; + use garage_util::data::{Hash, Uuid}; + use serde::{Deserialize, Serialize}; + + /// The layout of the cluster, i.e. the list of roles + /// which are assigned to each cluster node + #[derive(Clone, Debug, Serialize, Deserialize)] + pub struct ClusterLayout { + pub version: u64, + + pub replication_factor: usize, + pub roles: LwwMap, + + // see comments in v010::ClusterLayout + pub node_id_vec: Vec, + #[serde(with = "serde_bytes")] + pub ring_assignation_data: Vec, + + /// Role changes which are staged for the next version of the layout + pub staging: LwwMap, + pub staging_hash: Hash, + } + + #[derive(PartialEq, Eq, PartialOrd, Ord, Clone, Debug, Serialize, Deserialize)] + pub struct NodeRoleV(pub Option); + + /// The user-assigned roles of cluster nodes + #[derive(PartialEq, Eq, PartialOrd, Ord, Clone, Debug, Serialize, Deserialize)] + pub struct NodeRole { + /// Datacenter at which this entry belong. This information is used to + /// perform a better geodistribution + pub zone: String, + /// The capacity of the node + /// If this is set to None, the node does not participate in storing data for the system + /// and is only active as an API gateway to other nodes + pub capacity: Option, + /// A set of tags to recognize the node + pub tags: Vec, + } + + impl garage_util::migrate::InitialFormat for ClusterLayout {} +} + +mod v09 { + use super::v08; + use crate::layout::CompactNodeType; + use garage_util::crdt::{Lww, LwwMap}; + use garage_util::data::{Hash, Uuid}; + use serde::{Deserialize, Serialize}; + pub use v08::{NodeRole, NodeRoleV}; + + /// The layout of the cluster, i.e. the list of roles + /// which are assigned to each cluster node + #[derive(Clone, Debug, Serialize, Deserialize)] + pub struct ClusterLayout { + pub version: u64, + + pub replication_factor: usize, + + /// This attribute is only used to retain the previously computed partition size, + /// to know to what extent does it change with the layout update. + pub partition_size: u64, + /// Parameters used to compute the assignment currently given by + /// ring_assignment_data + pub parameters: LayoutParameters, + + pub roles: LwwMap, + + // see comments in v010::ClusterLayout + pub node_id_vec: Vec, + #[serde(with = "serde_bytes")] + pub ring_assignment_data: Vec, + + /// Parameters to be used in the next partition assignment computation. + pub staging_parameters: Lww, + /// Role changes which are staged for the next version of the layout + pub staging_roles: LwwMap, + pub staging_hash: Hash, + } + + /// This struct is used to set the parameters to be used in the assignment computation + /// algorithm. It is stored as a Crdt. + #[derive(PartialEq, Eq, PartialOrd, Ord, Clone, Copy, Debug, Serialize, Deserialize)] + pub struct LayoutParameters { + pub zone_redundancy: ZoneRedundancy, + } + + /// Zone redundancy: if set to AtLeast(x), the layout calculation will aim to store copies + /// of each partition on at least that number of different zones. + /// Otherwise, copies will be stored on the maximum possible number of zones. + #[derive(PartialEq, Eq, PartialOrd, Ord, Clone, Copy, Debug, Serialize, Deserialize)] + pub enum ZoneRedundancy { + AtLeast(usize), + Maximum, + } + + impl garage_util::migrate::Migrate for ClusterLayout { + const VERSION_MARKER: &'static [u8] = b"G09layout"; + + type Previous = v08::ClusterLayout; + + fn migrate(previous: Self::Previous) -> Self { + use itertools::Itertools; + + // In the old layout, capacities are in an arbitrary unit, + // but in the new layout they are in bytes. + // Here we arbitrarily multiply everything by 1G, + // such that 1 old capacity unit = 1GB in the new units. + // This is totally arbitrary and won't work for most users. + let cap_mul = 1024 * 1024 * 1024; + let roles = multiply_all_capacities(previous.roles, cap_mul); + let staging_roles = multiply_all_capacities(previous.staging, cap_mul); + let node_id_vec = previous.node_id_vec; + + // Determine partition size + let mut tmp = previous.ring_assignation_data.clone(); + tmp.sort(); + let partition_size = tmp + .into_iter() + .dedup_with_count() + .map(|(npart, node)| { + roles + .get(&node_id_vec[node as usize]) + .and_then(|p| p.0.as_ref().and_then(|r| r.capacity)) + .unwrap_or(0) / npart as u64 + }) + .min() + .unwrap_or(0); + + // By default, zone_redundancy is maximum possible value + let parameters = LayoutParameters { + zone_redundancy: ZoneRedundancy::Maximum, + }; + + Self { + version: previous.version, + replication_factor: previous.replication_factor, + partition_size, + parameters, + roles, + node_id_vec, + ring_assignment_data: previous.ring_assignation_data, + staging_parameters: Lww::new(parameters), + staging_roles, + staging_hash: [0u8; 32].into(), // will be set in the next migration + } + } + } + + fn multiply_all_capacities( + old_roles: LwwMap, + mul: u64, + ) -> LwwMap { + let mut new_roles = LwwMap::new(); + for (node, ts, role) in old_roles.items() { + let mut role = role.clone(); + if let NodeRoleV(Some(NodeRole { + capacity: Some(ref mut cap), + .. + })) = role + { + *cap *= mul; + } + new_roles.merge_raw(node, *ts, &role); + } + new_roles + } +} + +mod v010 { + use super::v09; + use crate::layout::CompactNodeType; + use garage_util::crdt::{Lww, LwwMap}; + use garage_util::data::Uuid; + use serde::{Deserialize, Serialize}; + use std::collections::BTreeMap; + pub use v09::{LayoutParameters, NodeRole, NodeRoleV, ZoneRedundancy}; + + /// Number of old (non-live) versions to keep, see LayoutHistory::old_versions + pub const OLD_VERSION_COUNT: usize = 5; + + /// The history of cluster layouts, with trackers to keep a record + /// of which nodes are up-to-date to current cluster data + #[derive(Clone, Debug, Serialize, Deserialize, PartialEq)] + pub struct LayoutHistory { + /// The versions currently in use in the cluster + pub versions: Vec, + /// At most 5 of the previous versions, not used by the garage_table + /// module, but usefull for the garage_block module to find data blocks + /// that have not yet been moved + pub old_versions: Vec, + + /// Update trackers + pub update_trackers: UpdateTrackers, + + /// Staged changes for the next version + pub staging: Lww, + } + + /// A version of the layout of the cluster, i.e. the list of roles + /// which are assigned to each cluster node + #[derive(Clone, Debug, Serialize, Deserialize, PartialEq)] + pub struct LayoutVersion { + /// The number of this version + pub version: u64, + + /// Roles assigned to nodes in this version + pub roles: LwwMap, + /// Parameters used to compute the assignment currently given by + /// ring_assignment_data + pub parameters: LayoutParameters, + + /// The number of replicas for each data partition + pub replication_factor: usize, + /// This attribute is only used to retain the previously computed partition size, + /// to know to what extent does it change with the layout update. + pub partition_size: u64, + + /// node_id_vec: a vector of node IDs with a role assigned + /// in the system (this includes gateway nodes). + /// The order here is different than the vec stored by `roles`, because: + /// 1. non-gateway nodes are first so that they have lower numbers + /// 2. nodes that don't have a role are excluded (but they need to + /// stay in the CRDT as tombstones) + pub node_id_vec: Vec, + /// number of non-gateway nodes, which are the first ids in node_id_vec + pub nongateway_node_count: usize, + /// The assignation of data partitions to nodes, the values + /// are indices in node_id_vec + #[serde(with = "serde_bytes")] + pub ring_assignment_data: Vec, + } + + /// The staged changes for the next layout version + #[derive(Clone, Debug, Serialize, Deserialize, PartialEq)] + pub struct LayoutStaging { + /// Parameters to be used in the next partition assignment computation. + pub parameters: Lww, + /// Role changes which are staged for the next version of the layout + pub roles: LwwMap, + } + + /// The tracker of acknowlegments and data syncs around the cluster + #[derive(Clone, Debug, Serialize, Deserialize, Default, PartialEq)] + pub struct UpdateTrackers { + /// The highest layout version number each node has ack'ed + pub ack_map: UpdateTracker, + /// The highest layout version number each node has synced data for + pub sync_map: UpdateTracker, + /// The highest layout version number each node has + /// ack'ed that all other nodes have synced data for + pub sync_ack_map: UpdateTracker, + } + + /// Generic update tracker struct + #[derive(Clone, Debug, Serialize, Deserialize, Default, PartialEq)] + pub struct UpdateTracker(pub BTreeMap); + + impl garage_util::migrate::Migrate for LayoutHistory { + const VERSION_MARKER: &'static [u8] = b"G010lh"; + + type Previous = v09::ClusterLayout; + + fn migrate(previous: Self::Previous) -> Self { + let nongateway_node_count = previous + .node_id_vec + .iter() + .enumerate() + .filter(|(_, uuid)| { + let role = previous.roles.get(uuid); + matches!(role, Some(NodeRoleV(Some(role))) if role.capacity.is_some()) + }) + .map(|(i, _)| i + 1) + .max() + .unwrap_or(0); + + let version = LayoutVersion { + version: previous.version, + replication_factor: previous.replication_factor, + partition_size: previous.partition_size, + parameters: previous.parameters, + roles: previous.roles, + node_id_vec: previous.node_id_vec, + nongateway_node_count, + ring_assignment_data: previous.ring_assignment_data, + }; + let update_tracker = UpdateTracker( + version + .nongateway_nodes() + .iter() + .copied() + .map(|x| (x, version.version)) + .collect::>(), + ); + let staging = LayoutStaging { + parameters: previous.staging_parameters, + roles: previous.staging_roles, + }; + Self { + versions: vec![version], + old_versions: vec![], + update_trackers: UpdateTrackers { + ack_map: update_tracker.clone(), + sync_map: update_tracker.clone(), + sync_ack_map: update_tracker.clone(), + }, + staging: Lww::raw(previous.version, staging), + } + } + } +} + +pub use v010::*; + +// ---- utility functions ---- + +impl AutoCrdt for LayoutParameters { + const WARN_IF_DIFFERENT: bool = true; +} + +impl AutoCrdt for NodeRoleV { + const WARN_IF_DIFFERENT: bool = true; +} + +impl Crdt for LayoutStaging { + fn merge(&mut self, other: &LayoutStaging) { + self.parameters.merge(&other.parameters); + self.roles.merge(&other.roles); + } +} + +impl NodeRole { + pub fn capacity_string(&self) -> String { + match self.capacity { + Some(c) => ByteSize::b(c).to_string_as(false), + None => "gateway".to_string(), + } + } + + pub fn tags_string(&self) -> String { + self.tags.join(",") + } +} + +impl fmt::Display for ZoneRedundancy { + fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { + match self { + ZoneRedundancy::Maximum => write!(f, "maximum"), + ZoneRedundancy::AtLeast(x) => write!(f, "{}", x), + } + } +} + +impl core::str::FromStr for ZoneRedundancy { + type Err = &'static str; + fn from_str(s: &str) -> Result { + match s { + "none" | "max" | "maximum" => Ok(ZoneRedundancy::Maximum), + x => { + let v = x + .parse::() + .map_err(|_| "zone redundancy must be 'none'/'max' or an integer")?; + Ok(ZoneRedundancy::AtLeast(v)) + } + } + } +} + +impl UpdateTracker { + fn merge(&mut self, other: &UpdateTracker) -> bool { + let mut changed = false; + for (k, v) in other.0.iter() { + if let Some(v_mut) = self.0.get_mut(k) { + if *v > *v_mut { + *v_mut = *v; + changed = true; + } + } else { + self.0.insert(*k, *v); + changed = true; + } + } + changed + } + + /// This bumps the update tracker for a given node up to the specified value. + /// This has potential impacts on the correctness of Garage and should only + /// be used in very specific circumstances. + pub fn set_max(&mut self, peer: Uuid, value: u64) -> bool { + match self.0.get_mut(&peer) { + Some(e) if *e < value => { + *e = value; + true + } + None => { + self.0.insert(peer, value); + true + } + _ => false, + } + } + + pub(crate) fn min_among(&self, storage_nodes: &[Uuid], min_version: u64) -> u64 { + storage_nodes + .iter() + .map(|x| self.get(x, min_version)) + .min() + .unwrap_or(min_version) + } + + pub fn get(&self, node: &Uuid, min_version: u64) -> u64 { + self.0.get(node).copied().unwrap_or(min_version) + } +} + +impl UpdateTrackers { + pub(crate) fn merge(&mut self, other: &UpdateTrackers) -> bool { + let c1 = self.ack_map.merge(&other.ack_map); + let c2 = self.sync_map.merge(&other.sync_map); + let c3 = self.sync_ack_map.merge(&other.sync_ack_map); + c1 || c2 || c3 + } +} diff --git a/src/rpc/layout/schema.rs b/src/rpc/layout/schema.rs deleted file mode 100644 index df949906..00000000 --- a/src/rpc/layout/schema.rs +++ /dev/null @@ -1,431 +0,0 @@ -use std::fmt; - -use bytesize::ByteSize; - -use garage_util::crdt::{AutoCrdt, Crdt}; -use garage_util::data::Uuid; - -mod v08 { - use crate::layout::CompactNodeType; - use garage_util::crdt::LwwMap; - use garage_util::data::{Hash, Uuid}; - use serde::{Deserialize, Serialize}; - - /// The layout of the cluster, i.e. the list of roles - /// which are assigned to each cluster node - #[derive(Clone, Debug, Serialize, Deserialize)] - pub struct ClusterLayout { - pub version: u64, - - pub replication_factor: usize, - pub roles: LwwMap, - - /// node_id_vec: a vector of node IDs with a role assigned - /// in the system (this includes gateway nodes). - /// The order here is different than the vec stored by `roles`, because: - /// 1. non-gateway nodes are first so that they have lower numbers - /// 2. nodes that don't have a role are excluded (but they need to - /// stay in the CRDT as tombstones) - pub node_id_vec: Vec, - /// the assignation of data partitions to node, the values - /// are indices in node_id_vec - #[serde(with = "serde_bytes")] - pub ring_assignation_data: Vec, - - /// Role changes which are staged for the next version of the layout - pub staging: LwwMap, - pub staging_hash: Hash, - } - - #[derive(PartialEq, Eq, PartialOrd, Ord, Clone, Debug, Serialize, Deserialize)] - pub struct NodeRoleV(pub Option); - - /// The user-assigned roles of cluster nodes - #[derive(PartialEq, Eq, PartialOrd, Ord, Clone, Debug, Serialize, Deserialize)] - pub struct NodeRole { - /// Datacenter at which this entry belong. This information is used to - /// perform a better geodistribution - pub zone: String, - /// The capacity of the node - /// If this is set to None, the node does not participate in storing data for the system - /// and is only active as an API gateway to other nodes - pub capacity: Option, - /// A set of tags to recognize the node - pub tags: Vec, - } - - impl garage_util::migrate::InitialFormat for ClusterLayout {} -} - -mod v09 { - use super::v08; - use crate::layout::CompactNodeType; - use garage_util::crdt::{Lww, LwwMap}; - use garage_util::data::{Hash, Uuid}; - use serde::{Deserialize, Serialize}; - pub use v08::{NodeRole, NodeRoleV}; - - /// The layout of the cluster, i.e. the list of roles - /// which are assigned to each cluster node - #[derive(Clone, Debug, Serialize, Deserialize)] - pub struct ClusterLayout { - pub version: u64, - - pub replication_factor: usize, - - /// This attribute is only used to retain the previously computed partition size, - /// to know to what extent does it change with the layout update. - pub partition_size: u64, - /// Parameters used to compute the assignment currently given by - /// ring_assignment_data - pub parameters: LayoutParameters, - - pub roles: LwwMap, - - /// see comment in v08::ClusterLayout - pub node_id_vec: Vec, - /// see comment in v08::ClusterLayout - #[serde(with = "serde_bytes")] - pub ring_assignment_data: Vec, - - /// Parameters to be used in the next partition assignment computation. - pub staging_parameters: Lww, - /// Role changes which are staged for the next version of the layout - pub staging_roles: LwwMap, - pub staging_hash: Hash, - } - - /// This struct is used to set the parameters to be used in the assignment computation - /// algorithm. It is stored as a Crdt. - #[derive(PartialEq, Eq, PartialOrd, Ord, Clone, Copy, Debug, Serialize, Deserialize)] - pub struct LayoutParameters { - pub zone_redundancy: ZoneRedundancy, - } - - /// Zone redundancy: if set to AtLeast(x), the layout calculation will aim to store copies - /// of each partition on at least that number of different zones. - /// Otherwise, copies will be stored on the maximum possible number of zones. - #[derive(PartialEq, Eq, PartialOrd, Ord, Clone, Copy, Debug, Serialize, Deserialize)] - pub enum ZoneRedundancy { - AtLeast(usize), - Maximum, - } - - impl garage_util::migrate::Migrate for ClusterLayout { - const VERSION_MARKER: &'static [u8] = b"G09layout"; - - type Previous = v08::ClusterLayout; - - fn migrate(previous: Self::Previous) -> Self { - use itertools::Itertools; - - // In the old layout, capacities are in an arbitrary unit, - // but in the new layout they are in bytes. - // Here we arbitrarily multiply everything by 1G, - // such that 1 old capacity unit = 1GB in the new units. - // This is totally arbitrary and won't work for most users. - let cap_mul = 1024 * 1024 * 1024; - let roles = multiply_all_capacities(previous.roles, cap_mul); - let staging_roles = multiply_all_capacities(previous.staging, cap_mul); - let node_id_vec = previous.node_id_vec; - - // Determine partition size - let mut tmp = previous.ring_assignation_data.clone(); - tmp.sort(); - let partition_size = tmp - .into_iter() - .dedup_with_count() - .map(|(npart, node)| { - roles - .get(&node_id_vec[node as usize]) - .and_then(|p| p.0.as_ref().and_then(|r| r.capacity)) - .unwrap_or(0) / npart as u64 - }) - .min() - .unwrap_or(0); - - // By default, zone_redundancy is maximum possible value - let parameters = LayoutParameters { - zone_redundancy: ZoneRedundancy::Maximum, - }; - - Self { - version: previous.version, - replication_factor: previous.replication_factor, - partition_size, - parameters, - roles, - node_id_vec, - ring_assignment_data: previous.ring_assignation_data, - staging_parameters: Lww::new(parameters), - staging_roles, - staging_hash: [0u8; 32].into(), // will be set in the next migration - } - } - } - - fn multiply_all_capacities( - old_roles: LwwMap, - mul: u64, - ) -> LwwMap { - let mut new_roles = LwwMap::new(); - for (node, ts, role) in old_roles.items() { - let mut role = role.clone(); - if let NodeRoleV(Some(NodeRole { - capacity: Some(ref mut cap), - .. - })) = role - { - *cap *= mul; - } - new_roles.merge_raw(node, *ts, &role); - } - new_roles - } -} - -mod v010 { - use super::v09; - use crate::layout::CompactNodeType; - use garage_util::crdt::{Lww, LwwMap}; - use garage_util::data::Uuid; - use serde::{Deserialize, Serialize}; - use std::collections::BTreeMap; - pub use v09::{LayoutParameters, NodeRole, NodeRoleV, ZoneRedundancy}; - - pub const OLD_VERSION_COUNT: usize = 5; - - /// The history of cluster layouts, with trackers to keep a record - /// of which nodes are up-to-date to current cluster data - #[derive(Clone, Debug, Serialize, Deserialize, PartialEq)] - pub struct LayoutHistory { - /// The versions currently in use in the cluster - pub versions: Vec, - /// At most 5 of the previous versions, not used by the garage_table - /// module, but usefull for the garage_block module to find data blocks - /// that have not yet been moved - pub old_versions: Vec, - - /// Update trackers - pub update_trackers: UpdateTrackers, - - /// Staged changes for the next version - pub staging: Lww, - } - - /// A version of the layout of the cluster, i.e. the list of roles - /// which are assigned to each cluster node - #[derive(Clone, Debug, Serialize, Deserialize, PartialEq)] - pub struct LayoutVersion { - pub version: u64, - - pub replication_factor: usize, - - /// This attribute is only used to retain the previously computed partition size, - /// to know to what extent does it change with the layout update. - pub partition_size: u64, - /// Parameters used to compute the assignment currently given by - /// ring_assignment_data - pub parameters: LayoutParameters, - - pub roles: LwwMap, - - /// see comment in v08::ClusterLayout - pub node_id_vec: Vec, - /// number of non-gateway nodes, which are the first ids in node_id_vec - pub nongateway_node_count: usize, - /// see comment in v08::ClusterLayout - #[serde(with = "serde_bytes")] - pub ring_assignment_data: Vec, - } - - /// The staged changes for the next layout version - #[derive(Clone, Debug, Serialize, Deserialize, PartialEq)] - pub struct LayoutStaging { - /// Parameters to be used in the next partition assignment computation. - pub parameters: Lww, - /// Role changes which are staged for the next version of the layout - pub roles: LwwMap, - } - - /// The tracker of acknowlegments and data syncs around the cluster - #[derive(Clone, Debug, Serialize, Deserialize, Default, PartialEq)] - pub struct UpdateTrackers { - /// The highest layout version number each node has ack'ed - pub ack_map: UpdateTracker, - /// The highest layout version number each node has synced data for - pub sync_map: UpdateTracker, - /// The highest layout version number each node has - /// ack'ed that all other nodes have synced data for - pub sync_ack_map: UpdateTracker, - } - - /// The history of cluster layouts - #[derive(Clone, Debug, Serialize, Deserialize, Default, PartialEq)] - pub struct UpdateTracker(pub BTreeMap); - - impl garage_util::migrate::Migrate for LayoutHistory { - const VERSION_MARKER: &'static [u8] = b"G010lh"; - - type Previous = v09::ClusterLayout; - - fn migrate(previous: Self::Previous) -> Self { - let nongateway_node_count = previous - .node_id_vec - .iter() - .enumerate() - .filter(|(_, uuid)| { - let role = previous.roles.get(uuid); - matches!(role, Some(NodeRoleV(Some(role))) if role.capacity.is_some()) - }) - .map(|(i, _)| i + 1) - .max() - .unwrap_or(0); - - let version = LayoutVersion { - version: previous.version, - replication_factor: previous.replication_factor, - partition_size: previous.partition_size, - parameters: previous.parameters, - roles: previous.roles, - node_id_vec: previous.node_id_vec, - nongateway_node_count, - ring_assignment_data: previous.ring_assignment_data, - }; - let update_tracker = UpdateTracker( - version - .nongateway_nodes() - .iter() - .copied() - .map(|x| (x, version.version)) - .collect::>(), - ); - let staging = LayoutStaging { - parameters: previous.staging_parameters, - roles: previous.staging_roles, - }; - Self { - versions: vec![version], - old_versions: vec![], - update_trackers: UpdateTrackers { - ack_map: update_tracker.clone(), - sync_map: update_tracker.clone(), - sync_ack_map: update_tracker.clone(), - }, - staging: Lww::raw(previous.version, staging), - } - } - } -} - -pub use v010::*; - -// ---- utility functions ---- - -impl AutoCrdt for LayoutParameters { - const WARN_IF_DIFFERENT: bool = true; -} - -impl AutoCrdt for NodeRoleV { - const WARN_IF_DIFFERENT: bool = true; -} - -impl Crdt for LayoutStaging { - fn merge(&mut self, other: &LayoutStaging) { - self.parameters.merge(&other.parameters); - self.roles.merge(&other.roles); - } -} - -impl NodeRole { - pub fn capacity_string(&self) -> String { - match self.capacity { - Some(c) => ByteSize::b(c).to_string_as(false), - None => "gateway".to_string(), - } - } - - pub fn tags_string(&self) -> String { - self.tags.join(",") - } -} - -impl fmt::Display for ZoneRedundancy { - fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { - match self { - ZoneRedundancy::Maximum => write!(f, "maximum"), - ZoneRedundancy::AtLeast(x) => write!(f, "{}", x), - } - } -} - -impl core::str::FromStr for ZoneRedundancy { - type Err = &'static str; - fn from_str(s: &str) -> Result { - match s { - "none" | "max" | "maximum" => Ok(ZoneRedundancy::Maximum), - x => { - let v = x - .parse::() - .map_err(|_| "zone redundancy must be 'none'/'max' or an integer")?; - Ok(ZoneRedundancy::AtLeast(v)) - } - } - } -} - -impl UpdateTracker { - fn merge(&mut self, other: &UpdateTracker) -> bool { - let mut changed = false; - for (k, v) in other.0.iter() { - if let Some(v_mut) = self.0.get_mut(k) { - if *v > *v_mut { - *v_mut = *v; - changed = true; - } - } else { - self.0.insert(*k, *v); - changed = true; - } - } - changed - } - - /// This bumps the update tracker for a given node up to the specified value. - /// This has potential impacts on the correctness of Garage and should only - /// be used in very specific circumstances. - pub fn set_max(&mut self, peer: Uuid, value: u64) -> bool { - match self.0.get_mut(&peer) { - Some(e) if *e < value => { - *e = value; - true - } - None => { - self.0.insert(peer, value); - true - } - _ => false, - } - } - - pub(crate) fn min_among(&self, storage_nodes: &[Uuid], min_version: u64) -> u64 { - storage_nodes - .iter() - .map(|x| self.get(x, min_version)) - .min() - .unwrap_or(min_version) - } - - pub fn get(&self, node: &Uuid, min_version: u64) -> u64 { - self.0.get(node).copied().unwrap_or(min_version) - } -} - -impl UpdateTrackers { - pub(crate) fn merge(&mut self, other: &UpdateTrackers) -> bool { - let c1 = self.ack_map.merge(&other.ack_map); - let c2 = self.sync_map.merge(&other.sync_map); - let c3 = self.sync_ack_map.merge(&other.sync_ack_map); - c1 || c2 || c3 - } -} diff --git a/src/rpc/layout/version.rs b/src/rpc/layout/version.rs index cbfbee94..5b307156 100644 --- a/src/rpc/layout/version.rs +++ b/src/rpc/layout/version.rs @@ -10,7 +10,6 @@ use garage_util::data::*; use garage_util::error::*; use super::graph_algo::*; -use super::schema::*; use super::*; // The Message type will be used to collect information on the algorithm. From f8df90b79b93e4a1391839435718bad8c697246d Mon Sep 17 00:00:00 2001 From: Alex Auvolat Date: Fri, 8 Dec 2023 14:54:11 +0100 Subject: [PATCH 153/538] table: fix insert_many to not send duplicates --- src/table/table.rs | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/src/table/table.rs b/src/table/table.rs index 6508cf5d..59cfdd07 100644 --- a/src/table/table.rs +++ b/src/table/table.rs @@ -196,6 +196,8 @@ impl Table { let hash = entry.partition_key().hash(); let mut write_sets = self.data.replication.write_sets(&hash); for set in write_sets.as_mut().iter_mut() { + // Sort nodes in each write sets to merge write sets with same + // nodes but in possibly different orders set.sort(); } let e_enc = Arc::new(ByteBuf::from(entry.encode()?)); @@ -220,7 +222,16 @@ impl Table { for (write_sets, entry_enc) in entries_vec.iter() { for write_set in write_sets.as_ref().iter() { for node in write_set.iter() { - call_list.entry(*node).or_default().push(entry_enc.clone()) + let node_entries = call_list.entry(*node).or_default(); + match node_entries.last() { + Some(x) if Arc::ptr_eq(x, entry_enc) => { + // skip if entry already in list to send to this node + // (could happen if node is in several write sets for this entry) + } + _ => { + node_entries.push(entry_enc.clone()); + } + } } } } From e4f493b48156e6e30f16fba10f300f6cb5fe0b0d Mon Sep 17 00:00:00 2001 From: Alex Auvolat Date: Mon, 11 Dec 2023 14:57:42 +0100 Subject: [PATCH 154/538] table: remove redundant tracing in insert_many --- src/table/table.rs | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/src/table/table.rs b/src/table/table.rs index 59cfdd07..05a0dab1 100644 --- a/src/table/table.rs +++ b/src/table/table.rs @@ -239,9 +239,7 @@ impl Table { // Build futures to actually perform each of the corresponding RPC calls let call_futures = call_list.into_iter().map(|(node, entries)| { let this = self.clone(); - let tracer = opentelemetry::global::tracer("garage"); - let span = tracer.start(format!("RPC to {:?}", node)); - let fut = async move { + async move { let rpc = TableRpc::::Update(entries); let resp = this .system @@ -254,8 +252,7 @@ impl Table { ) .await; (node, resp) - }; - fut.with_context(Context::current_with_span(span)) + } }); // Run all requests in parallel thanks to FuturesUnordered, and collect results. From 85b5a6bcd11c0a7651e4c589569e1935a3d18e46 Mon Sep 17 00:00:00 2001 From: Alex Auvolat Date: Mon, 11 Dec 2023 15:31:47 +0100 Subject: [PATCH 155/538] fix some clippy lints --- src/api/admin/cluster.rs | 2 +- src/rpc/layout/helper.rs | 2 +- src/rpc/layout/history.rs | 14 ++++++-------- src/rpc/layout/mod.rs | 2 +- src/rpc/layout/version.rs | 6 +++--- src/rpc/rpc_helper.rs | 2 +- src/rpc/system.rs | 2 +- src/table/sync.rs | 8 ++++---- src/table/table.rs | 3 +-- 9 files changed, 19 insertions(+), 22 deletions(-) diff --git a/src/api/admin/cluster.rs b/src/api/admin/cluster.rs index 3ce1b254..8677257d 100644 --- a/src/api/admin/cluster.rs +++ b/src/api/admin/cluster.rs @@ -94,7 +94,7 @@ pub async fn handle_get_cluster_status(garage: &Arc) -> Result>(); + let mut nodes = nodes.into_values().collect::>(); nodes.sort_by(|x, y| x.id.cmp(&y.id)); let res = GetClusterStatusResponse { diff --git a/src/rpc/layout/helper.rs b/src/rpc/layout/helper.rs index 2ba010b8..7e5d37e9 100644 --- a/src/rpc/layout/helper.rs +++ b/src/rpc/layout/helper.rs @@ -129,7 +129,7 @@ impl LayoutHelper { where F: FnOnce(&mut LayoutHistory) -> bool, { - let changed = f(&mut self.layout.as_mut().unwrap()); + let changed = f(self.layout.as_mut().unwrap()); if changed { *self = Self::new( self.replication_mode, diff --git a/src/rpc/layout/history.rs b/src/rpc/layout/history.rs index a53256cc..23196aee 100644 --- a/src/rpc/layout/history.rs +++ b/src/rpc/layout/history.rs @@ -42,8 +42,7 @@ impl LayoutHistory { let set = self .versions .iter() - .map(|x| x.all_nodes()) - .flatten() + .flat_map(|x| x.all_nodes()) .collect::>(); set.into_iter().copied().collect::>() } @@ -56,8 +55,7 @@ impl LayoutHistory { let set = self .versions .iter() - .map(|x| x.nongateway_nodes()) - .flatten() + .flat_map(|x| x.nongateway_nodes()) .collect::>(); set.into_iter().copied().collect::>() } @@ -94,7 +92,7 @@ impl LayoutHistory { let sync_ack_map_min = self .update_trackers .sync_ack_map - .min_among(¤t_nodes, min_version); + .min_among(current_nodes, min_version); if self.min_stored() < sync_ack_map_min { let removed = self.versions.remove(0); info!( @@ -144,7 +142,7 @@ impl LayoutHistory { let global_min = self .update_trackers .sync_map - .min_among(&all_nongateway_nodes, min_version); + .min_among(all_nongateway_nodes, min_version); // If the write quorums are equal to the total number of nodes, // i.e. no writes can succeed while they are not written to all nodes, @@ -281,7 +279,7 @@ To know the correct value of the new layout version, invoke `garage layout show` let (new_version, msg) = self .current() .clone() - .calculate_next_version(&self.staging.get())?; + .calculate_next_version(self.staging.get())?; self.versions.push(new_version); self.cleanup_old_versions(); @@ -297,7 +295,7 @@ To know the correct value of the new layout version, invoke `garage layout show` pub fn revert_staged_changes(mut self) -> Result { self.staging.update(LayoutStaging { - parameters: Lww::new(self.current().parameters.clone()), + parameters: Lww::new(self.current().parameters), roles: LwwMap::new(), }); diff --git a/src/rpc/layout/mod.rs b/src/rpc/layout/mod.rs index facdb2ce..162e3c6e 100644 --- a/src/rpc/layout/mod.rs +++ b/src/rpc/layout/mod.rs @@ -357,7 +357,7 @@ mod v010 { update_trackers: UpdateTrackers { ack_map: update_tracker.clone(), sync_map: update_tracker.clone(), - sync_ack_map: update_tracker.clone(), + sync_ack_map: update_tracker, }, staging: Lww::raw(previous.version, staging), } diff --git a/src/rpc/layout/version.rs b/src/rpc/layout/version.rs index 5b307156..ee4b2821 100644 --- a/src/rpc/layout/version.rs +++ b/src/rpc/layout/version.rs @@ -137,19 +137,19 @@ impl LayoutVersion { // ===================== internal information extractors ====================== pub(crate) fn expect_get_node_capacity(&self, uuid: &Uuid) -> u64 { - self.get_node_capacity(&uuid) + self.get_node_capacity(uuid) .expect("non-gateway node with zero capacity") } pub(crate) fn expect_get_node_zone(&self, uuid: &Uuid) -> &str { - self.get_node_zone(&uuid).expect("node without a zone") + self.get_node_zone(uuid).expect("node without a zone") } /// Returns the sum of capacities of non gateway nodes in the cluster fn get_total_capacity(&self) -> u64 { let mut total_capacity = 0; for uuid in self.nongateway_nodes() { - total_capacity += self.expect_get_node_capacity(&uuid); + total_capacity += self.expect_get_node_capacity(uuid); } total_capacity } diff --git a/src/rpc/rpc_helper.rs b/src/rpc/rpc_helper.rs index 65af8901..77a36ca1 100644 --- a/src/rpc/rpc_helper.rs +++ b/src/rpc/rpc_helper.rs @@ -442,7 +442,7 @@ impl RpcHelper { // Send one request to each peer of the quorum sets let msg = msg.into_req().map_err(netapp::error::Error::from)?; - let requests = result_tracker.nodes.iter().map(|(peer, _)| { + let requests = result_tracker.nodes.keys().map(|peer| { let self2 = self.clone(); let msg = msg.clone(); let endpoint2 = endpoint.clone(); diff --git a/src/rpc/system.rs b/src/rpc/system.rs index a8f12852..41d76177 100644 --- a/src/rpc/system.rs +++ b/src/rpc/system.rs @@ -315,7 +315,7 @@ impl System { local_status: ArcSwap::new(Arc::new(local_status)), node_status: RwLock::new(HashMap::new()), netapp: netapp.clone(), - fullmesh: fullmesh.clone(), + fullmesh, system_endpoint, replication_mode, replication_factor, diff --git a/src/table/sync.rs b/src/table/sync.rs index cfcbc4b5..1561a2e5 100644 --- a/src/table/sync.rs +++ b/src/table/sync.rs @@ -123,15 +123,15 @@ impl TableSyncer { let mut sync_futures = result_tracker .nodes - .iter() - .map(|(node, _)| *node) + .keys() + .copied() .map(|node| { let must_exit = must_exit.clone(); async move { if node == my_id { (node, Ok(())) } else { - (node, self.do_sync_with(&partition, node, must_exit).await) + (node, self.do_sync_with(partition, node, must_exit).await) } } }) @@ -145,7 +145,7 @@ impl TableSyncer { } if result_tracker.too_many_failures() { - return Err(result_tracker.quorum_error()); + Err(result_tracker.quorum_error()) } else { Ok(()) } diff --git a/src/table/table.rs b/src/table/table.rs index 05a0dab1..a5be2910 100644 --- a/src/table/table.rs +++ b/src/table/table.rs @@ -209,8 +209,7 @@ impl Table { // it takes part, to optimize the detection of a quorum. let mut write_sets = entries_vec .iter() - .map(|(wss, _)| wss.as_ref().iter().map(|ws| ws.as_slice())) - .flatten() + .flat_map(|(wss, _)| wss.as_ref().iter().map(|ws| ws.as_slice())) .collect::>(); write_sets.sort(); write_sets.dedup(); From adccce1145d5d82581e4a5da707be35badb2d5a6 Mon Sep 17 00:00:00 2001 From: Alex Auvolat Date: Mon, 11 Dec 2023 15:45:14 +0100 Subject: [PATCH 156/538] layout: refactor/fix bad while loop --- src/rpc/layout/history.rs | 31 ++++++++++++++----------------- 1 file changed, 14 insertions(+), 17 deletions(-) diff --git a/src/rpc/layout/history.rs b/src/rpc/layout/history.rs index 23196aee..b8cc27da 100644 --- a/src/rpc/layout/history.rs +++ b/src/rpc/layout/history.rs @@ -86,23 +86,20 @@ impl LayoutHistory { // remove them (keep them in self.old_versions). // ASSUMPTION: we only care about where nodes in the current layout version // are reading from, as we assume older nodes are being discarded. - while self.versions.len() > 1 { - let current_nodes = &self.current().node_id_vec; - let min_version = self.min_stored(); - let sync_ack_map_min = self - .update_trackers - .sync_ack_map - .min_among(current_nodes, min_version); - if self.min_stored() < sync_ack_map_min { - let removed = self.versions.remove(0); - info!( - "Layout history: moving version {} to old_versions", - removed.version - ); - self.old_versions.push(removed); - } else { - break; - } + let current_nodes = &self.current().node_id_vec; + let min_version = self.min_stored(); + let sync_ack_map_min = self + .update_trackers + .sync_ack_map + .min_among(current_nodes, min_version); + while self.min_stored() < sync_ack_map_min { + assert!(self.versions.len() > 1); + let removed = self.versions.remove(0); + info!( + "Layout history: moving version {} to old_versions", + removed.version + ); + self.old_versions.push(removed); } while self.old_versions.len() > OLD_VERSION_COUNT { From 0041b013a473e3ae72f50209d8f79db75a72848b Mon Sep 17 00:00:00 2001 From: Alex Auvolat Date: Mon, 11 Dec 2023 16:09:22 +0100 Subject: [PATCH 157/538] layout: refactoring and fix in layout helper --- src/rpc/layout/helper.rs | 43 +++++++++++++++++++------------- src/rpc/layout/manager.rs | 2 +- src/rpc/layout/mod.rs | 2 +- src/rpc/rpc_helper.rs | 2 +- src/rpc/system.rs | 4 +-- src/table/replication/sharded.rs | 2 +- src/table/sync.rs | 16 ++++++------ 7 files changed, 38 insertions(+), 33 deletions(-) diff --git a/src/rpc/layout/helper.rs b/src/rpc/layout/helper.rs index 7e5d37e9..9fb738ea 100644 --- a/src/rpc/layout/helper.rs +++ b/src/rpc/layout/helper.rs @@ -10,7 +10,7 @@ use super::*; use crate::replication_mode::ReplicationMode; #[derive(Debug, Clone, Serialize, Deserialize, Default, PartialEq, Eq)] -pub struct LayoutDigest { +pub struct RpcLayoutDigest { /// Cluster layout version pub current_version: u64, /// Number of active layout versions @@ -21,6 +21,13 @@ pub struct LayoutDigest { pub staging_hash: Hash, } +#[derive(Debug, Clone, Copy, Eq, PartialEq)] +pub struct SyncLayoutDigest { + current: u64, + ack_map_min: u64, + min_stored: u64, +} + pub struct LayoutHelper { replication_mode: ReplicationMode, layout: Option, @@ -150,20 +157,20 @@ impl LayoutHelper { &self.all_nongateway_nodes } - pub fn all_ack(&self) -> u64 { + pub fn ack_map_min(&self) -> u64 { self.ack_map_min } - pub fn all_sync(&self) -> u64 { + pub fn sync_map_min(&self) -> u64 { self.sync_map_min } - pub fn sync_versions(&self) -> (u64, u64, u64) { - ( - self.layout().current().version, - self.all_ack(), - self.layout().min_stored(), - ) + pub fn sync_digest(&self) -> SyncLayoutDigest { + SyncLayoutDigest { + current: self.layout().current().version, + ack_map_min: self.ack_map_min(), + min_stored: self.layout().min_stored(), + } } pub fn read_nodes_of(&self, position: &Hash) -> Vec { @@ -206,8 +213,8 @@ impl LayoutHelper { self.staging_hash } - pub fn digest(&self) -> LayoutDigest { - LayoutDigest { + pub fn digest(&self) -> RpcLayoutDigest { + RpcLayoutDigest { current_version: self.current().version, active_versions: self.versions.len(), trackers_hash: self.trackers_hash, @@ -231,13 +238,13 @@ impl LayoutHelper { // 3. Acknowledge everyone has synced up to min(self.sync_map) self.sync_ack(local_node_id); - info!("ack_map: {:?}", self.update_trackers.ack_map); - info!("sync_map: {:?}", self.update_trackers.sync_map); - info!("sync_ack_map: {:?}", self.update_trackers.sync_ack_map); + debug!("ack_map: {:?}", self.update_trackers.ack_map); + debug!("sync_map: {:?}", self.update_trackers.sync_map); + debug!("sync_ack_map: {:?}", self.update_trackers.sync_ack_map); } fn sync_first(&mut self, local_node_id: Uuid) { - let first_version = self.versions.first().as_ref().unwrap().version; + let first_version = self.min_stored(); self.update(|layout| { layout .update_trackers @@ -275,13 +282,13 @@ impl LayoutHelper { .versions .iter() .map(|x| x.version) - .take_while(|v| { + .skip_while(|v| { self.ack_lock .get(v) .map(|x| x.load(Ordering::Relaxed) == 0) .unwrap_or(true) }) - .max() - .unwrap_or(self.min_stored()) + .next() + .unwrap_or(self.current().version) } } diff --git a/src/rpc/layout/manager.rs b/src/rpc/layout/manager.rs index ec8a2a15..6747b79d 100644 --- a/src/rpc/layout/manager.rs +++ b/src/rpc/layout/manager.rs @@ -256,7 +256,7 @@ impl LayoutManager { // ---- RPC HANDLERS ---- - pub(crate) fn handle_advertise_status(self: &Arc, from: Uuid, remote: &LayoutDigest) { + pub(crate) fn handle_advertise_status(self: &Arc, from: Uuid, remote: &RpcLayoutDigest) { let local = self.layout().digest(); if remote.current_version > local.current_version || remote.active_versions != local.active_versions diff --git a/src/rpc/layout/mod.rs b/src/rpc/layout/mod.rs index 162e3c6e..33676c37 100644 --- a/src/rpc/layout/mod.rs +++ b/src/rpc/layout/mod.rs @@ -17,7 +17,7 @@ pub mod manager; // ---- re-exports ---- -pub use helper::{LayoutDigest, LayoutHelper}; +pub use helper::{LayoutHelper, RpcLayoutDigest, SyncLayoutDigest}; pub use manager::WriteLock; pub use version::*; diff --git a/src/rpc/rpc_helper.rs b/src/rpc/rpc_helper.rs index 77a36ca1..ae3a19c4 100644 --- a/src/rpc/rpc_helper.rs +++ b/src/rpc/rpc_helper.rs @@ -502,7 +502,7 @@ impl RpcHelper { .rev() .chain(layout.old_versions.iter().rev()); for ver in ver_iter { - if ver.version > layout.all_sync() { + if ver.version > layout.sync_map_min() { continue; } let nodes = ver.nodes_of(position, ver.replication_factor); diff --git a/src/rpc/system.rs b/src/rpc/system.rs index 41d76177..83cc6816 100644 --- a/src/rpc/system.rs +++ b/src/rpc/system.rs @@ -34,7 +34,7 @@ use crate::consul::ConsulDiscovery; #[cfg(feature = "kubernetes-discovery")] use crate::kubernetes::*; use crate::layout::{ - self, manager::LayoutManager, LayoutDigest, LayoutHelper, LayoutHistory, NodeRoleV, + self, manager::LayoutManager, LayoutHelper, LayoutHistory, NodeRoleV, RpcLayoutDigest, }; use crate::replication_mode::*; use crate::rpc_helper::*; @@ -132,7 +132,7 @@ pub struct NodeStatus { pub replication_factor: usize, /// Cluster layout digest - pub layout_digest: LayoutDigest, + pub layout_digest: RpcLayoutDigest, /// Disk usage on partition containing metadata directory (tuple: `(avail, total)`) #[serde(default)] diff --git a/src/table/replication/sharded.rs b/src/table/replication/sharded.rs index 55d0029d..8ba3700f 100644 --- a/src/table/replication/sharded.rs +++ b/src/table/replication/sharded.rs @@ -54,7 +54,7 @@ impl TableReplication for TableShardedReplication { fn sync_partitions(&self) -> SyncPartitions { let layout = self.system.cluster_layout(); - let layout_version = layout.all_ack(); + let layout_version = layout.ack_map_min(); let mut partitions = layout .current() diff --git a/src/table/sync.rs b/src/table/sync.rs index 1561a2e5..cd080df0 100644 --- a/src/table/sync.rs +++ b/src/table/sync.rs @@ -83,7 +83,7 @@ impl TableSyncer { bg.spawn_worker(SyncWorker { syncer: self.clone(), layout_notify: self.system.layout_notify(), - layout_versions: self.system.cluster_layout().sync_versions(), + layout_digest: self.system.cluster_layout().sync_digest(), add_full_sync_rx, todo: None, next_full_sync: Instant::now() + Duration::from_secs(20), @@ -483,7 +483,7 @@ struct SyncWorker { syncer: Arc>, layout_notify: Arc, - layout_versions: (u64, u64, u64), + layout_digest: SyncLayoutDigest, add_full_sync_rx: mpsc::UnboundedReceiver<()>, next_full_sync: Instant, @@ -493,15 +493,13 @@ struct SyncWorker { impl SyncWorker { fn check_add_full_sync(&mut self) { - let layout_versions = self.syncer.system.cluster_layout().sync_versions(); - if layout_versions != self.layout_versions { - self.layout_versions = layout_versions; + let layout_digest = self.syncer.system.cluster_layout().sync_digest(); + if layout_digest != self.layout_digest { + self.layout_digest = layout_digest; info!( - "({}) Layout versions changed (max={}, ack={}, min stored={}), adding full sync to syncer todo list", + "({}) Layout versions changed ({:?}), adding full sync to syncer todo list", F::TABLE_NAME, - layout_versions.0, - layout_versions.1, - layout_versions.2 + layout_digest, ); self.add_full_sync(); } From fa9247f11b89c960dffe82d6bf990ed4335788e3 Mon Sep 17 00:00:00 2001 From: Alex Auvolat Date: Thu, 14 Dec 2023 16:23:48 +0100 Subject: [PATCH 158/538] jepsen: updated results, confirming that task3 works --- script/jepsen.garage/.gitignore | 1 + script/jepsen.garage/README.md | 55 ++++++++++-------- script/jepsen.garage/Vagrantfile | 8 +++ script/jepsen.garage/all_tests_1.sh | 18 ++++++ script/jepsen.garage/all_tests_2.sh | 16 +++++ script/jepsen.garage/nodes2.vagrant | 7 +++ .../results/Results-2023-11-16.png | Bin 0 -> 1517471 bytes .../results/Results-2023-12-13-task3c.png | Bin 0 -> 1075969 bytes .../results/Results-2023-12-13-tsfix2.png | Bin 0 -> 1136760 bytes .../results/Results-2023-12-14-task3-set1.png | Bin 0 -> 1075655 bytes script/jepsen.garage/src/jepsen/garage.clj | 10 +++- .../jepsen.garage/src/jepsen/garage/set.clj | 12 ++-- 12 files changed, 96 insertions(+), 31 deletions(-) create mode 100755 script/jepsen.garage/all_tests_1.sh create mode 100755 script/jepsen.garage/all_tests_2.sh create mode 100644 script/jepsen.garage/nodes2.vagrant create mode 100644 script/jepsen.garage/results/Results-2023-11-16.png create mode 100644 script/jepsen.garage/results/Results-2023-12-13-task3c.png create mode 100644 script/jepsen.garage/results/Results-2023-12-13-tsfix2.png create mode 100644 script/jepsen.garage/results/Results-2023-12-14-task3-set1.png diff --git a/script/jepsen.garage/.gitignore b/script/jepsen.garage/.gitignore index 6eb8c209..31842a96 100644 --- a/script/jepsen.garage/.gitignore +++ b/script/jepsen.garage/.gitignore @@ -13,4 +13,5 @@ pom.xml.asc .hg/ .direnv /store +/store.* .vagrant diff --git a/script/jepsen.garage/README.md b/script/jepsen.garage/README.md index f7479a3d..50c7eb38 100644 --- a/script/jepsen.garage/README.md +++ b/script/jepsen.garage/README.md @@ -7,29 +7,19 @@ Jepsen checking of Garage consistency properties. Requirements: - vagrant -- VirtualBox, configured so that nodes can take an IP in a private network `192.168.56.0/24` +- VirtualBox, configured so that nodes can take an IP in a private network `192.168.56.0/24` (it's the default) - a user that can create VirtualBox VMs - leiningen - gnuplot -Set up VMs: +Set up VMs before running tests: ``` vagrant up ``` -Run tests (this one should fail): +Run tests: see commands below. -``` -lein run test --nodes-file nodes.vagrant --time-limit 64 --concurrency 50 --rate 50 --workload reg -``` - -These ones are working: - -``` -lein run test --nodes-file nodes.vagrant --time-limit 64 --rate 50 --concurrency 50 --workload set1 -lein run test --nodes-file nodes.vagrant --time-limit 64 --rate 50 --concurrency 50 --workload set2 -``` ## Results @@ -73,16 +63,19 @@ Results with timestamp patch (`--patch tsfix2`): Example of a failed run: `garage reg2/20231024T120806.899+0200`. This is the failure mode we are looking for and trying to fix for NLnet task 3. -- Changes brought by NLnet task 3 code (commit 707442f5de): - no failures with `--scenario r` (0 of 10 runs), `--scenario pr` (0 of 10 runs), +Results with NLnet task 3 code (commit 707442f5de, `--patch task3a`): + +- No failures with `--scenario r` (0 of 10 runs), `--scenario pr` (0 of 10 runs), `--scenario cpr` (0 of 10 runs) and `--scenario dpr` (0 of 10 runs). +- Same with `--patch task3c` (commit `0041b013`, the final version). + ### Set, basic test (write some items, then read) -Command: `lein run test --nodes-file nodes.vagrant --time-limit 60 --rate 200 --concurrency 200 --workload set1 --ops-per-key 100 --patch tsfix2` +Command: `lein run test --nodes-file nodes.vagrant --time-limit 60 --rate 200 --concurrency 200 --workload set1 --ops-per-key 100` -Results: +Results without NLnet task3 code (`--patch tsfix2`): - For now, no failures with clock-scramble nemesis + partition nemesis -> TODO long test run @@ -90,15 +83,22 @@ Results: - **Fails with the partition + layout reconfiguration nemesis** (`--scenario pr`). Example of a failed run: `garage set1/20231024T172214.488+0200` (1 failure in 4 runs). - TODO: investigate. This is the failure mode we are looking for and trying to fix for NLnet task 3. +Results with NLnet task 3 code (commit 707442f5de, `--patch task3a`): + +- The tests are buggy and often result in an "unknown" validity status, which + is caused by some requests not returning results during network partitions or + other nemesis-induced broken cluster states. However, when the tests were + able to finish, there were no failures with scenarios `r`, `pr`, `cpr`, + `dpr`. + ### Set, continuous test (interspersed reads and writes) -Command: `lein run test --nodes-file nodes.vagrant --time-limit 60 --rate 100 --concurrency 100 --workload set2 --ops-per-key 100 --patch tsfix2` +Command: `lein run test --nodes-file nodes.vagrant --time-limit 60 --rate 100 --concurrency 100 --workload set2 --ops-per-key 100` -Results: +Results without NLnet task3 code (`--patch tsfix2`): - No failures with clock-scramble nemesis + db nemesis + partition nemesis (`--scenario cdp`) (0 failures in 10 runs). @@ -106,17 +106,26 @@ Results: Example of a failed run: `garage set2/20231025T141940.198+0200` (10 failures in 10 runs). This is the failure mode we are looking for and trying to fix for NLnet task 3. -- Changes brought by NLnet task 3 code (commit 707442f5de): - no failures with `--scenario r` (0 of 10 runs), `--scenario pr` (0 of 10 runs). +Results with NLnet task3 code (commit 707442f5de, `--patch task3a`): + +- No failures with `--scenario r` (0 of 10 runs), `--scenario pr` (0 of 10 runs), `--scenario cpr` (0 of 10 runs) and `--scenario dpr` (0 of 10 runs). +- Same with `--patch task3c` (commit `0041b013`, the final version). + + +## NLnet task 3 final results + +- With code from task3 (`--patch task3c`): [reg2 and set2](results/Results-2023-12-13-task3c.png), [set1](results/Results-2023-12-14-task3-set1.png). +- Without (`--patch tsfix2`): [reg2 and set2](results/Results-2023-12-13-tsfix2.png), set1 TBD. ## Investigating (and fixing) errors ### Segfaults They are due to the download being interrupted in the middle (^C during first launch on clean VMs), the `garage` binary is truncated. -Add `:force?` to the `cached-wget!` call in `daemon.clj` to re-download the binary. +Add `:force?` to the `cached-wget!` call in `daemon.clj` to re-download the binary, +or restar the VMs to clear temporary files. ### In `jepsen.garage`: prefix wierdness diff --git a/script/jepsen.garage/Vagrantfile b/script/jepsen.garage/Vagrantfile index 4d02397d..b54c2426 100644 --- a/script/jepsen.garage/Vagrantfile +++ b/script/jepsen.garage/Vagrantfile @@ -29,4 +29,12 @@ Vagrant.configure("2") do |config| config.vm.define "n5" do |config| vm(config, "n5", "192.168.56.25") end config.vm.define "n6" do |config| vm(config, "n6", "192.168.56.26") end config.vm.define "n7" do |config| vm(config, "n7", "192.168.56.27") end + + config.vm.define "n8" do |config| vm(config, "n8", "192.168.56.28") end + config.vm.define "n9" do |config| vm(config, "n9", "192.168.56.29") end + config.vm.define "n10" do |config| vm(config, "n10", "192.168.56.30") end + config.vm.define "n11" do |config| vm(config, "n11", "192.168.56.31") end + config.vm.define "n12" do |config| vm(config, "n12", "192.168.56.32") end + config.vm.define "n13" do |config| vm(config, "n13", "192.168.56.33") end + config.vm.define "n14" do |config| vm(config, "n14", "192.168.56.34") end end diff --git a/script/jepsen.garage/all_tests_1.sh b/script/jepsen.garage/all_tests_1.sh new file mode 100755 index 00000000..b5397d13 --- /dev/null +++ b/script/jepsen.garage/all_tests_1.sh @@ -0,0 +1,18 @@ +#!/usr/bin/env bash + +set -x + +#for ppatch in task3c task3a tsfix2; do +for ppatch in tsfix2; do + #for psc in c cp cdp r pr cpr dpr; do + for psc in cdp r pr cpr dpr; do + #for ptsk in reg2 set1 set2; do + for ptsk in set1; do + for irun in $(seq 10); do + lein run test --nodes-file nodes.vagrant \ + --time-limit 60 --rate 100 --concurrency 100 --ops-per-key 100 \ + --workload $ptsk --patch $ppatch --scenario $psc + done + done + done +done diff --git a/script/jepsen.garage/all_tests_2.sh b/script/jepsen.garage/all_tests_2.sh new file mode 100755 index 00000000..641643ed --- /dev/null +++ b/script/jepsen.garage/all_tests_2.sh @@ -0,0 +1,16 @@ +#!/usr/bin/env bash + +set -x + +#for ppatch in task3c tsfix2; do +for ppatch in tsfix2; do + for psc in cdp r pr cpr dpr; do + for ptsk in set1; do + for irun in $(seq 10); do + lein run test --nodes-file nodes2.vagrant \ + --time-limit 60 --rate 100 --concurrency 100 --ops-per-key 100 \ + --workload $ptsk --patch $ppatch --scenario $psc + done + done + done +done diff --git a/script/jepsen.garage/nodes2.vagrant b/script/jepsen.garage/nodes2.vagrant new file mode 100644 index 00000000..842bf276 --- /dev/null +++ b/script/jepsen.garage/nodes2.vagrant @@ -0,0 +1,7 @@ +192.168.56.28 +192.168.56.29 +192.168.56.30 +192.168.56.31 +192.168.56.32 +192.168.56.33 +192.168.56.34 diff --git a/script/jepsen.garage/results/Results-2023-11-16.png b/script/jepsen.garage/results/Results-2023-11-16.png new file mode 100644 index 0000000000000000000000000000000000000000..26dac833a750bea3e37c8ffac405555f0de58aa6 GIT binary patch literal 1517471 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

5nvr@#Zv}HW`2osnUlidgr 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 LTZCSqGEj zaBSjDYw79+Bg1_ct>!R)gF&pB$8i#}nU!8a>MOg#W$Uw~7Z`$v&KmRqlTFqaf&lXc zh;{3O;Rj!@$x%T>IA<+5koC{=)_uuS+~+;fI)D*9V%~srX05JlhUvp%{KB$S|0@vLe@OfWZzT8*FsdhKMJa)vPOQ zaVtVYLCSN`*UGcDHSY@8k6cMP3)Oi7iii3agG+6B?ZO=%?KKq>*!3te7HD11UxTbw zQTeqo2qy&bH@d`x_yTE|ZKemCcE!mlNg2X-;+C`NSfCD7k_0@eAmCA{mSNi^;axrk z)S~})3GA2{vC8@i6?lbEU(@aao2!EuP0YTCS|Rcut+f_r)zf<>$D2XuUipJx44Zi0xK7;vy&W0?;D{ZB(2R@(CT4E#b0pCUTBn9sEg z&=JPJ>2(+U5b&PV(ybyV6@AP8vl7wj)8nD<#zY<65W`~Sh(n+`eb3xc_wCPGN5K?c z=+4i^HZi*1R~}h}s-DXMRTgF4m}HR+VX=WhE}{uJs#n7v`#FV57lWQ-lK*>6FY#+vSLSVO?)ete9vo z2y!yM{5)XJDuUU@*-DOpbzj)JEPx9ZH_XQF6aQi;K1^Ojs7kk~Da{hM4`qHO@Qp9C zI$39Bp4kDCIt`{C8D)rwMub@okFgkW5gzti0Gb%LzqRN9-*4t=3+>g_W{W&Xs0qtt z?fWb*@qL)#hJjR4&+*0kZN~htIFZ@2bHI)mAn9GvAo+E>`iX(xWs7!Yj+eNUW2RZB z>vqH8Ob3#!PG;-v#g^s^8%tbhsN@}+-2zjyddFtJu$~h!gkK=8KYrPzbNL4Dz6bom zw^tl_Tx&ZZ^IQ2nmJq}E-h@hSavgCdqMZ5??%qq+Bml8)ES=P6r;S3AGRsYnjAXrd zNWKtg+5#_b|LX}`^vDT9#I*>}F10+U5i<=6g97OOHneP)gaUj%9Y zU;%b6;vcJTVcIcLJx zfE8=d((g)YSglBs$qFu8;frZNo6PPtI{r^M?b*=3aN3=#*ukd=AH1HW;-(TZ6vjMTOFa9ay z6kCbyF4amjyE|dQGRbIV%b)qJ@kcZ*mdoNrCtrM+@u(Dti%D<((C6J2{-osz1SmLb zRW|KlP#5#^fj4X?*2ok(xUgS$W)>8v<2=$lBo<~AJpUwS1PkGEHB4hj}ijw zzAMBW7n8ZL%|>dg5t_8hj+^R}NxH+)9>-KtX&4qxGsK32Kh==CY+mXMoFE7y8i# zVrcmvI;pWA`d198>1xo&W6sQ-eihYrQzjGR-RuTUlRjHN?XRcK?lA3=dv9&Ri?5pi zgJv_M3w8hYA#H||sKuc=f4bo?!K6kPOku4lGXhEgv47d!`wUBenlm2j_3_mq`Mo8P z{RLvjALG(vd#7T7WZiknaMk2NayY)SGUEz2QeKWVR&vdGS8an1(s2IjRYUQ z>b?ROt7{`R7y}7ByZJ5 z>)b)y?nT?`#5V7X=5(t^E$#zu|8QAOfo-KZmnEkt&ymv%LXGVuplw&|vg}Pa>K|e8 zl1ps5XYb_zNya#Rl1ee+zF~%I-i!lJp3no`e8=6~rj3WqV!4e}N`yC;;Mf9!Wvdjc zI6gu$zId!}U%xCcz62#jQhg&EBZY>vw2|Y@qDjZ#hVknWKQi{Li*##rw_YnGe1gDu zJPuecqFSg~gT{%uKjiOJK|z%>Ju*1$n{yb~~bGNJ9dH<*+(CAt*Jkq>ZX zDUPQbb}8LcX>+w%7T;=I|B;eQ%1Nr!iMz@95WZoNxZ+M%UH5PU8+Y85X40yWg!wm$ zo0v(B)^w{YG#H8Od$T?`#MP~y)E%oYKVqyhgDf|_@3RF>0v?w*Udhj9iCO{($Db^( zUhlVQ65A>Njjwtvko3_Q-K)ip!E?tCe1a$VZtrK_hQx%yYDm>N$cAu@foS~Kj|qEU zI!^+--v2$4@z+I=*L%VD@OsFl82osH>1wgal;8KaCs}lOUehz9ZYY-GqeQ(vogI0M zL!~5+%X#_foNJ?evr%$QfJ- z40DP+(=Df>KsVx`CJFE9qmMEq|7Ng^#nAs=?wiVTmkCs#A-{vC#)@T3;5I%3Z0U{y z+$G&FEt2K%EiB;q4@4z%A`0@?Jan6Q(=}B8y|9|_b8(Yd7X9{r(^#zphr9baQ*y?t z`8oa}8}yxMlCQMgg$Vb>hvDu4%xQ@qxOljEFsf=Sar=5ckW46OtDY^s$M=Pq{%FBwrDdbB# zTB5H(@z{m!3S@kxjru*0RimJSzQFraWXRrsaKATMOQ0KWS3h&TJ>WveaYahgFw;u{ zO|%@}vOoBMj)5V{?vrGFd~STj*IakERs=L(aYod_Jd^q+;o~=fvhpIm%TN zo)M4hJ(0;J@gpw1)RAy`%kIe}C*+8SmRxv|;r5!&;3n;0zEy0#-18iW?ekzg+KH0z z`KisQu2(8txCAua*xRrNcmwx*1o+R=BuV3(UMIuuf7^)59Z+LX5Fxz~UU{_lRG=Wt zZ_L-kk`Z>FrkVk2UDo%iNLgOnBW>#R$I#OL^>JcECB&`pV&yZ&(Ls-DPD)p|6?@Zl zlIC;$piLgP^i7BM$$WMq1=2<)5&P{SHTw;ocIbr#81zv=63IwLStJTwT@N*tF`xRL zwq6{M+und({!bFOn{%J<7o2Ytvg8N}hw_e4GvyeD#VAYCM3Cr`pAn3In025ViGNgP zrx0|^|4VC)(aM%P5^{9lByq0Mc5(c9aBo$Ucp;`(tXt))pSQ~n@`X@jAXa|KZo_$Y zr3c|qU#6FC^V}?c{F^0hYoVC_H(0|1)}@cy3fTZ!rQ6gXSiCjP`BCL-r_fI2T@b{X z#BK0fRf%058w2O=ep}Cz*~5$o%>m{n`l)Khp*?>)9UgXFt#N0Jb)I2VppN0C3w-aI z?(t0PQS685?i5H7=1VMA-;17)q}|%l>(w44!eCM}pBBCc64ckkA94_e?7r$TJ3PD5 zYJ#uC^Tx?y*)Q__?0mdgazm9L4WWW(aO&d`IPB#$If3xKhb5R`YBiRNwH!cv9=xE1 z@r503kLw#HpR)*c#33@8PxSHVzxaKL?$4b?motf0`KaxCd$>ZqAl9^Ndg>zyXJ~>3cg7 zSlXh#*3XLy2rHFM+_ZCFf3n~4;vVw!_xRA0FVE~ z5|AyO&Qj0^&|>`!rlTa3RZ-sgv>=GB%jZ~Fpja3!jtUphcDyfv|qTlb?A-3D^? z2m;k7!uXi4ZH25co7RVf6v}#<4^tqp zY@%hzk%C&xh~gn17xi62VMA#)&g$#X2k>SyNU#s|Vu?5hu|>k@h=eKrS!V4xMWcGy z7hNj33O`lyNiIUQGHC7lk$78DfHgBT_Q^wl%M@B!AMjsUD{Nvc*S0n;a`~KDDrqe{ zeuP`+@iTybl4iLQ#<4nTdrP4QNAdK+XB>pXJ;L8^WySa_yt|Zew}!v}@J-mtej7`> z^BZ{qs8V^|*z1nkDBT-?iA0A#*uI(*Sfy@{yi+@zhw6p)FoX;+22nf3?txWfva4lw z&;@4WOhTgr^&Fv7=W6dgDG0oeA=wf>u5tSL)Jo-9> zIBTRmTk-_f)x!0Nelh`82pdMhT54&sr8$BmS%GnRIhUuj6VLbIA7eg3PE zvqZY_Mq%}M5L2K%@_-K(S@PcQVq1B%F2>$50;-Ru9>a%I^n?il#8#Uhl5`fybnp{WoHuHR8pg7kjX|DC13 z?m2(3|JIU{#m=frU+S`P!}(m54YtpB0h@LoaGgIW(|tv5x#%?*`a+1M*s$BCbM4^( zGYN~RIX^9X+X!>P1`}iDSzxPWZJ~Dps0au-NuAbW&Rm?} z7VunmBl8!Yv1_o+9)runT&hv8H$xaH@h;~kmU+H=J`n7A`uh)Xyr;$Qb;k{<~NU> z?o}3w{JJhwP%k3ns}a)Vu%4Ux3nt&f8VYN4+R#E>HI@B8p zMp`VIk1Y^*>I86uyJFPtp4p&e{@90w14LxIVyz(SFXRn32Z$!ur(eWJRZ26|TcBH? z^J1tw_YV~Ae(~YTsQ@y{aj25{6+K|e%;f4)Da@rae;4+PZ`2`^Ez(57dYSJ}wdda= zpUROI0dkDsD{SjG3fBD8Q}4hpp@AgCvPMWy3RTto-yeHl!aldxBw2fxQj+ongP$@EgMG zG#F0tr2yk2XrFWa2nJMh?T96<2rm6(6Vmu2T(rudI zJ;~CQD~qpnwzH*2-uuJ;q(>BK-dDOF^~Ws7U!jgSkM`_!m6NxRcl1Bx&A&7S;W#a*ohkl3=qvO1 zHB_e0l>Pzw8Wmy4f(D>w{Gb0oP5qrBA+-ZoNuzMKG||V&&EF#BcQZ)XULyftImrKS zeD{C#b!>_Phr%*CJ}LhDllsq}rt<+uR0jTo_5K%6?SG{>|N5K~1gNEDM)3?+1f?hw>qp18J zBJ1Cda7c^4zO9D+=V|;${^q}Y;D!K)rsOcI;5>doIw-lCAGmCG1y?Ws-4~L2_W=V< zGS|42;wqYMi*8N#C{MclyucZ7pN0o??-*_SRwiHH{aS_9KBhz#~u6|3$@SB z@V~^J*A$p=B=hmmi3E=K++G>{Y(?kNyg%a}nUs9Og8h8TKmFUrkOg%LeLy zyP5vuulA3=ah6#_pqTI`$s6rCO8ZNEY_7v5jq1G$-K}8?+E%u$_|E?17hgwY^3Sln zvZbEpsX#+Mv$6;8)|eHA5~;uBb4{FkkdeLpHNx1~wh9P#qx?}@)mHBBPS(cNLw*$W zIm6XWluwNJieUJ^6wrQY&cJgv3SWJ_EsVn@OF$qBh&7{t9i8`)QxxH%qJR-xxjB0% zaQ-CiL3HhM#q1S9Soe%o9M#K>jYLrajbGH{RLQb>(`AAkp(gd-nja}_+i@I@f4?8N zDX!G2kV=pzpD~Z32SmZNfTLWpJ>&M4?&`2r{PkRV^8XG~Xs%7xMiks&dS>p1%^&(P|Dv>d6K#OSuJW)g%~>5OHzSb%soJAH`r8X z^KeJ@0S;gI^jn}(@9EYL+uc$i3nmV*nj-Q%D##pMD$r|YH#)qtjn*v(q-{<72D`BW~Oo=WCfj~Jd1 zDLqSuZV{adrX1c}m5rF~)mk{1%T&P^g1)oX&(UjeF=w|L^&#VTzH$se+<0HPA4}_j z+c9%H!}8-E?l}xaGj^2#%GT_;O>SOrLWRkfYP;6s0iH1NReJMRAc;(JOkYxcffK2O z;E6>!t<+a`>(M>kR1-Z)>TAZ@5~{9y@AftZ`FBdVwsQ#hZmqX|_#dB5$X(qm?5yS& zXTUd~`{SvhG;Mwas^-~!$H$2n?*usmWdTEmu8hFlYG^UmhrT$TeQI`dLTRGB{#xvO z%+TZQe27J*QR-{9@D^U2Y}icUblv-+S=VB@0<374%&nr@eHseEwQjwLn0K+czh4-Q z_5ieW9}CSddRgG9P+n?OW|Y82f1C9C-(NL-T{dCHg7WBcBfIiy(K zb$d8}V`)@}3TP z-JX8r*c$JjdQlHdd#g_d(hJnaZWpH2eLU*G;F3^ zqhf|ZqP3F$P*4((XR02md)~d9a-4zU_{%Nwx?e7Rp;I5Ha|2rXmY@5>7Ni*hT2*-+ zOl4C&8>F6K6e(7k)&Yctp+1 zr|9c!4W!s-OXRg&3#EVt1~xf1bpo^Jjd$bq-7$Rnk}14r3SB`Zb1x@ucYRQ|0lVy% zb20Uzx}RDA*Gt`aKYhC}o4n{YZ`=DWfw#I1JS8(DaHX#T)FeA@JxxYDeN_<1NDeG| zfvy9ikl4H`q{W(^w6z~cMsMB6ifwO+tO_mT)(^g7Zkhu3z`&dbH^7~*_3{LQcC#C* z)-MbVccxNZer;5Ga5ll?&lZ*VZFB}wV z)o4MdnDq<_-uU$PH&ZbU9NXs#jfR7}aPEo2n-MfBEwGFS}7(4%FL| zCxi;7^G&Zm$_IwEISI~KG`c$o!{J|C*h%xg-@(2)n~3LzVR3npIqK5gUFzvZvfig2 z!I#_|RD=V@u<=qXMo=bWdX=WaW~=pU&y%nbZCO%DikB>H_P3Sw7e(XDRrV%jUo1tU z8CB&iTf#StNovo=pWwJMe@NG`eVdXiGI=T?QRTVyBPiKk9%$h6fx8=GWwB`+)J46y zg8%U{3{B5tHFCge5yk4g4QkUxYF$Hc2@tAy#P6=$p|!krGerivr)@ zex^z;-6_vnOh-j0OD`@^fy4;;9g9z8t#F}7K?neKZkF;H-Rtbl1eD>mCAaZ$7X?{Z!Qsgu z^GT>~86`Ke$k)OtPV=wk^{of{HMGVV^sJj|5o}xEqfk~m2t!8efpC&slpZH(nkVs? zqvu9S&^anpLpc5tLb1IzW0lE`q3vw&tzzSsiO`ytFL`!Ktd+1DkD1obiq^{hG3ALQ zHW^kN#Bp7wG+r*_asFXnR!*kaZ6bNJCUr{_CNul`aihOxsscv8TTWy@6qKsKm`LW` zD@P1fRv-!R?$`^q#f`-55Qq=K4+LZtOb0kQ64|jR^lkYj!!jUpWpUkz6_b=ymG0;}p* z8c|}D1!jUsT2)9l=V+S?fGb6qLlx43lhLbg#TLTty01!)nMp=R;YY_F2;sljNGmN> z`<|3EW1(!YpJo9qHrVE!b-$pAQf3{jV#Eq`_CE{`GxFPM@7N-FP%*I`#mx`;jM)sv z3PIBz#S547Yi*}IyV~HX_2!tLOi!w@M7GX&a!R9Sy#F1+uD8jWKUYPr$-OB2u{pyG6n>V(l~(6&of_M(U(WLcdys5JT4@ z_)S^ugvx8|jrwWW?8Kz}^}uA~bEt4n8FrE^Y2J{l?6mb+i-=S;d4JUlH`!l_&mYPz z?41jVymNH}Z&DR+Q!HI4;-W9+$Pr|v{q!yZ(&Riv-&vzJ z<&N*_?+~?VLv@o_vin8_lg{u_MZ-r; z)cw{-n;;Ks?dK3_L$6FEi5f##pugEuE<6Y;M_8srhZnN1@Ui&0aJ>{FiJhIQHX{rY z{}s$J4^DcBF+;Zl$EJB~ufjSwo*Mb<(;U z_#n{A*{W09ir%X@T>1UwdyE<(^G=xf&nuQlP@S7|rb(tLkus(&vkcIfX@ORfQTCfI zJ^IDzj&f!oGv+o4^0TA6AbTVO16AA0rFpI&N76y3@Rtl?r)b{^FGteyel09E1=TK` z?j>czGX;}mc}z!5{KxwBzkl!|f!}-X1)Kb)hQz}uDod)R6ZM;W<8T2;ThFihIj~F1 z0h6=zqDdswM2>*cDcC_h*$N#EM-q%{+es{5qe_Rgp^48Q%_%y+$d)~btf0j^_%@r* zMS*}rq7)KKbmS01pT{b&F`66h6QGfcnLW3Ux4PWszE}rzB~ha?p3#q@i8^4?M*0+O zl!mtRgk#%dzuLi2Prw*)eP5aZ-<-R}!npPP8sY^($0aisxXuwy>Fq{gZ?~$+Z8rZI z$L1f^9)x}x7~+;G^rvI_CJP2@j!S0?^2U#jwEL7g!C`O=gs zh$78%-uT+^J+iq;ZWQ4-3g^B{Mqy;&`C6QM2sy%&rYi!a%FVM0yj;vh4y$w$n+ae9 zkOGhsYegK~qTl@|^c77`X!$I=T@)v$P5ur6)dz8at2PjYv`ZbY*nPmNvHe$CL8C`( zut{}wzLey?8;ep>yAy3&GsLm`)qoou^8IJ3aeN4AmW%}WwCjU8>O5Wxc%6G^wsT>T zwe^4rd1(=OJtvIA(vesAOUJB_v?usCFd9plSE!mQe+L4qgK0M7vA;1dr3VtvqE=Ve zdO1SU;=*8Cv|QEB$K#>-23whWYT!pO-TLH+9&s^Y!<_zynH9OOrB-?|VP1Z$N$15E zq6jEW{a`IcRO>FxSqT{Ff(;$R#XKwvxYVsu_Nuc!-M4U`-kyYmLVaWpR6fdnt;S=P zVMhL?_(-OYoh&c86zVvJR(C$#uG_DPsZpv%`c%7rdniTSfZK*z(%c(Vw(;ug1d zy#B$Xdbh+Ei?S8PFWziIeNdIE@XI=`*T=%C?r|QbR=e4gv&mAl>lE*c(!o|Y-z$T) z9?R`#Ks)XduH@M46@r%S5JqyTdMqVkq-7fP*5sk`!CUnF;vEak)xX#tAS~Y zOkvVQq;Yfsq~VXTbf4pWK{CFX^&9=D`8N~p7^j3#hM({yBw71x9UnBE(EeE8d`U6H z0Oyonn8*5%g|-tC#-x=!O$zQ5_~+wS3oa!J z@ylU@M=-yTIJZGONQDM+yMo*-mKY52;r9PQ0Wj+zU}^Q&`uQCaiG0 zU(Ap07g99@@{Sqb9{NoSo(W0;r1%XcWAX%3^CqQ_YHAFdUrfLbv~r8odK>AXcb1f$ zCjgdyvzH%w!=dgEVCm*y(a~;8*2W|81Qd|5KM&&0a4ac=ak@0l$f|ruLJ_&94#Dz77wu5ZUN` zvyxo51$QBbl2);2$OL{;L5UTDUOu2D29LHm(FvzHo*2+G8;22TGQXIfRM+*K6Jp(m z($4jyR%qee;1;%5q`GTI=%|;20;SDT#@+HP z!P6;&I8%oqV1MKLRsK?j!=P&r?xG`T#VVf`wDLtb4|qXF0~8kpgJ5Wz5QaKwkC0m! zo>wHo42o$L?ovo(EZhkN`r#!#eu(v;FlWUHv`u{V32cK95M5@gm0=aa6cw3Q7z!2O zu=hTplA8ezvoIT^IQDUNd23mah^FLe#QIaH0^#9H6bNO z*8Su!naT00Fdlv3I4e$Y_{h`Nn_cdLa7#s%Q(5m)N`owQ+uuQ%TFJobnEWqvjv;3V zQu1d!#U25!YH*YE*DEFM6*Ed(vtc5QT{z6e`Jj&i4;lc+c*X zPMPIcPAfE*e_E{|6Cd(v)_L0|4VXL8WT_~t{>xI!<3ExTAx^&nX?r-=Pw}EA)OoEL zma)J0kI|~P4doo612vx^%Hb1^cAWr`0G&D3P&}`toX@b2%Se$%*t+zy9AaYD#BAG7 za(RBe5jI;+jo?=^W!KCU2NnIsEHX;nGJmAix%R#&58(Q_h)oKZPm@!bxp{lpcM_q| z=(a4umOo!5CSff7O{=FkBpxVhlZ;pgO(F(zCcguTPp442LJc2U>e>UIp6*U}b;L!7ifPSzw|3t`CZND&=5Zsp z&*MPxnwm{l-R49m*4kZge9jc(1(RvGvhv>Xqg6lCs_ATp!DAfzJAqe}{q<>j(NpVA z5fzcQfLHuN>a6ZE;8?Ad*rn^~3+Ta5f%SL-v?OB2N3FO5SUpS1X12f*(25TLTJgYe z^2qh_fq;Nc*pn7WCJ=uB-X}nE(G|nbwu6jOo$35yo+mvLp+JvNcz(ZjqauiM(SxL~ zS@IEA|8C}Vxs>h^(T2we!K>aNOVmaCEWo*THlyGM)HVolkSrD5YQHTKqGfQ7t3daE zx?@9LV-ior0+Qeat9&)PFF$6XDqU}<4(hI7bok?VHC|>oH;A<%`6)P73fLs`K>=mD3+|Dg99cynd>4I+7m{NBW#7QVXUTS7w2PAua-F7Gw~Sm^ix!1|2UMcnEbx7QrHVI9Kkd+XOVL`|PLDP0zT z4lEwdGdE<(`(Mb)X--?t!eBoM`@3RXrcIC%sWA4Ia8a4x!3#&~d|)*dm?pYZfjKrVHJ3lN`&pNMqn( z&3*@WnxeK@SIx{BH~_7)#dG&lfCtgTaP_l2&$4)^^{ne>4bQFTUU3W#$5yp-y4@Wt z8qN+5%&HXys3#5aA-F?brgtsc-m6Q7uYMP z7C4PpB-#%Z;HDjmvbfWFH$z%PtHCPqSYDU1r*IZ@=MS`Lb*v&)hEPlJ>CIJVym5r3VGKSPoo(STjmCdB7rJ3pzN%@0kY z(cBDd4D$tYYi_0V!8s4Ni@ruU zXt&&!P8=*ex%r;4a6}UPdHqI#oT1@$IA@0VNf$a{K&!(KN>7WE#7G&qNn*dxR@xV? zs@^!uRXh{dmq$YG5}aOhmSduK1Nmu7&cM5KNn9LV2YB)hBGVe*`CIJhcaY^9r9Ryv zq;qn*yH>zN*dyUO7oqsC{mFl|4eG7`ICN7OK@oBM zw%#i&ZfaC9ncJ?h^Y~(BV37H)0Jo0cdqVN!%!r;OQATrKU4-9zAaVYMevZL$-sI20 zbA65*L+uXMbuW9%P&nu{+Su!u?}?VON?(U^&w6@F5&?Q~bDISWXT(5^Vk?Lv!35a> zldyOT8j27hQuw#T#Q1}@?ckQLmXO$@J#|q-U#__Vy;^j2BzJUD)zm9~* zSx^|#vu+g*BbcfgOi`x^BwFVM`1R3+y}$T%^Hl!TM}EB~$Gl2rRkhy_m_DTJ8rJdn zQEJ$Av7u27$Eq9dkil{K1EXm1>jk=blDo6rGE~-Vx?^}CHr-%(Jp-@2JqJTpUrm={ z^Dis{C2yx*s?)$ZjpjVr>&3jE(?i?~s+&G?em3$7B%&`wB2hJP37^g1VlY#e!s%yo zcXqbUm)!c4+S+yL0+W&H{{ArV9gZp>Z(8T-Yq;>mh|M`6S-B2j`~u@t_w<#`^?Yzm zskt-1T8oQ!w)`<5gc(l8&}rxQh0O=+O=QG<{XBw*(tkXwAOC=*{&)lN%+ zZ2boAvOfDDdLm1U+(_WG3|q0_N29CWwYBQ`Wfd-$7YRX42sTVx`AN9TxAuCy^&e%o zl;6&`B~vaBfVYlo;p@$iO;^rmx~OgGc7ycBJyXETr1Me}#x;Qm58i2fmvWYixF~8@ zIdOs+``Ex!`YIbpx7Iey0)=2=H(_t%`upn`f`&R4?!Sie_@$JJ`DvTbn$9=EP`%XV zYs-`B4piqOO#%~oOgIqo7!#w%SquwfhusGyjM;CPlE3fr?_>dPz=vS~42ZZthx?c0iK*WLO;mnjUz}WsY;V`nCes=I=L*iLJ z0kCDIi)Iw|dkB-IXu_r6!gYY_Gm?2wPUZY`y2g@%cPkRtC25g}`K*(k#9NsTX1U5r zGPAiNe1W>9rc^dsefG>=#anSF8S^^N3r&A+9kS3g50^q)f1Ve+i|`$;0~XD$}boI0G9RZlV-wP>~h z34(%=Be-?@n!Q6L;b8MqP-0?T-gUTBo?pnKNI}QO9DZI5EQVS;1OZhDMmI@T+*|@= zzsWYJ+O+&cHA_g%h1a?Ff}u%(5m&DxFiPOOY>=Q|L*8sXH~#68<}gh}S<>4&P~Bk> z+3{41s_k^Wwxms^!|Cr1NtJyr9eNzEh#C_u+V29M)l$UO#vD^eUEj73@Ai@~LP2i+ zx7TO2>(^I5ZHh(CIJE1}qWfMr{MvP0SDD&wiu%qxOL`!{@s@qkQF}^vAyXL!c1T$G z@!V^VjChqrqR16?r1sHT_Q?s{HRg3IfETbW8RqvvmBxSZlS4VtzxE|5XF1zO&fFJP zl8f8hw{&NyaBwGYa;kWJHQqmWnID#zi09%m7iH|c+BZT28o+#7Ul+Ig^ldcg%aq|P zC)t(FCUPKefvms7#@R&5*-Wq{JK|{|38kYrY`v+!bgu%_hBg$RhDK8NKp`isnT53Y$OzR@|3!A%ycokMlwXZ z+l~fzj4Jt#FtZ^vi&;FMH!bQjn7=W-Nv#=GpASp7`eF>Q_-MY3(gPDlP^GHqC9^?V1XJn9! zL#sxyeljolC~anC%~4GIX1oibTHUBA%WJ(>+?HdiG*(mfIlB*^AqzWU>BQrXzC)98 zNCOrEdww1f{ErqqixD8M#_{b9*$@v~>l0=T_0QA5GfTsI`ZD2=GW&8 zLchf7LdNeJfNdyC12f6!>>jD#_sp_jN;EU)hlwbuoo z>{4`UBb51T)DEM*vqV^{)GPU`94sUsBC@k@|c=&X`RQ?H=Y^&3wwde4byd(wYK1Fy#*7!3+)r#`ad81GjYY^~!r zQyPM5QBOD{x0|80svRGwr0XcnVRsSB8ZdE_vW3@k|C>bu2u$i6}-MXN3Y^ z@15M*R zlTLtR;(WNc(Q>pLY)0M?!#>lubz$90G0KjvKIy}T?rz`gvkKps#5`T_7ny#}qz!QC z$xT6)0GB>2RxWOD`3R=Rzdt@!GQp10m#Uxs>iNg{4_xCT%H6U463RF^I&D!2ol6fe zL)zzhw49IIT`W`(=)`F^Twv}s?x0IcHgDm2wQ8YeD4 zYg5#XOB8dl4f77A@M3Jce6wY+`%GbgYGa^h{ zt@JNiD@qQRgBxcyiQmUY69$^wpBmb)XetDKQa1?2|ti+Sy;{%BmLw;1La4N@$()zK=%IPC?YGi}@r@0UPzS6IU$^ zIQ(yM6p{OlMr@bn&q=+XVM+oV@?!M^2}vXk;^~6~vD?NNm6z;fP>WX(eoCQK8nJxk zRWQz6qV0FrF=n}N&Ef_7^F|7kUapPN#MWT?#vcGf!;1VOpDo5;I(Hay@RRb*9$2Q1 z>JNo=L6^Ty#X?P1eQto^-lmKF>icD)NbS>x8(~U6TaJFzF8B?n&Y&gD>f#b@ zdwTfpYbJnSEZ2Jj7k?t?GSf8ZHm8_?>^sNi${=;aHCW@k3&@Klyc5ZXA8X-_LRCm~wZ$5%bdV6}cF|q9}-U#sZasH1xeXRAF zQU5!>{?IW~oUIE0qomMTlNe>B80O)lc1qF}sW-ymFK4Wn`^%pqBOjNNMGzlbXxWHG zc8Bb&cJB2c6=htVv?d1Pe|s7k_}m%tScn~$dZb||itGV${4DYEJAhh9Yu%*V+^;9v zWB-NN$1paACeH4`o$P&~h@!$XBi0cxINvQ>ulc^lN@HNp4^FB znA_h^WPeCqCtx^@zTA;xVH=Zz-s`#0j4U>SZzF_C`uvW5p7?(tWr1 zBKiGhIV6YwA;~I3UKuaS{h~jnJL>)SU#!klK)9{?X*vsPQ#$Af7A2kM0fU>Y=pqY5 zTm_P^MC2f#vl_>KqrfWAG&YF;bjUP;zg{7nZ+wBXU!!>2?L!NJ{k(JeaS!d<&t3*i zZP0$G9!0}gX@ym(*bgX7qal<;d-jSO$?Q*~cuB`&0|9U8x+z1&<8CS(Y2o>s1CAaU z9z{aAk|EC8VEy*sc$*akpwsz!&&go6tRHty_~SYrvEde1SKXE5Y&ir1SlqwJ1Jbd{ zT9}|^V|`bUp8q!fyjd|#caM*3yh@w7RsHm_YvUfG+#3R%1fEJMq)A_Nlz6lSbLU;= ze^T{h-N3>zp>eIp2MMw@!$G>zfz!Pf$3woFBZp=SlvR(%)z^OB>~m!`iW+RB zG`jU5Qqq1f2hVgp8lybkz3`w#?d;r-{EC!+rRFKtbGz#;DkHZP`>$ni58YH@h6RdA zu-8gtlenA{WcR{?op65nMR^<+6QnUQb7yz*F*V%G!U}@1^db0xhVSDjJ2<9~3(8Pd z0rnFS`ANm>&z`#X-`+?o0pZQR82VDG9-GR>ssAlQzZgle(|>7xi0uUgNN1Ve2OJzf zGW4JR$-T`GV}^5ei51@@i5AY0wApSFZCT>96+9FK6Khm%)LH`33hjeCa=9v z{}$u{v<46MTkr&W7+I{U2!7x#ReCJpLYwDiekIJUzpM5D8Eq$X>8vE@nXFZq54s)a&!o%P*CZ8w{gS!bi6poIR1!g>eQxrG~(Y=2Y=8n2r69tje(7ee() zV!L}4y~Brv7`&KY85_+VbBY>0ewf!2sEMwz4PkGFgF57$Aldiq6aQ>Dofdu#cL}az4)wxPl)Z?%962Iafoth+?qO z=RYxJWia>!hcM7YYt<(=0tF+0qF1QmzdLoKsA+kn_^Itk!{IkTFAnnIDN(IzKTOk2 z7iqkRLgOfi2D(s2xu3sh4!JjFC z*ZV4t^8$cl#j97spHP$#_WqRcRtYWTwKq-y5(@9(E)P75IT$w6ZKNDo$W!ey?FI`! z3K1;BelFvB?a+9}#&x98pD8wW9l`3>6p8NZ!w_o{L9>x|l_d5m#j%VBP#{ury_^V$ z+Y62Uy5QGqqhm!oDDc+GdOg=)|K&vnJuOgu-2a&v4}M0t4yLh21nhVXHEMWt;NIP- zAGS?!)o;v{B*ls(UmA+Oimbm72aoDfbaA#Uz#$`s24OMl%6UV?jzb0I&03Z_Lf=<( z&DQ>VkY0bUylj;3stt?m>Zmi`?NF#%K|#M;SzAm|-|faiFZYeXq97-7RG_Zdq=rVs zY#?UR{b{y&^+xL7D81jlnDK<;-0&}}?ZfVN z;KCf9X#|~sCEH}~a?zPVpsDRE$UL4-sOKGxQco z1jMB;h13C_0zf?>S7zWhWu9-A)_ID`Fe{WR^FQ(Q zB@9bWxQjoVpTs0`SocJa>QFEf4>`_QX{X2ni0GXL79gdXGMR~g@ge3Z(jw5xbGY<$ zC8F@gBBSCnp4Z&OBsb8hTBTE_4iwtpwd{EF4P(Jk-S>s3jHi${>D@|%9L~tm!ufoy zTIb^LAN|5LXmSnuZ>yj3q-F-9GYtsb6tslqwk>sPyS&yFogtt=!OM3tLv7*FyKT5O zO-RtAQLkb>lEJ*e;A0((`?9;fgzI&{=j={#e{XsZjhekBf32RKeM-oso?7dXu5f=? zeSgw37}w?cAtKJ_tL5*DW8_s|u8*s|6C@nZLYXYu?4m1;v}hj-PUOwpSG{cpKhJS_ zIQWj|vO9WR2c@DvN&kpGpOii4vI{k@acvAI)=gQy??zl)YTfCt8%t+6?<8SlTWUh! zp19bFGg^Py*}nfzoc^KcZ=8PYX?Xbx5CmHlc=*hA_M&RxC^SMKe0%zI^y2`_vRILV z9qi}ED})r&zr^h+o*sn(P7;@=`9(DHkK%SyTrV4y)iGrXwGF#LF{d+byDD-Tpj%7+ zj^a<|m;xDV5XChJz3cX@I0)q*{QNi@<{HppfUOgGioZdgE!y5MR_I(f7t>`GkM|&$5 z#2ttO%1Cq;ZJ3aunB)(?MvkQ=&5Zirk2_vg2w}sEVhPfK3)(;NJKGKwxMv`nSa-b~ zsk$zbkhD5Cvf1bSZP5{={DSPEk^Hasm$FIFy1(Ih>RHL+cVQPNDp; z{`Ki|9R14aJo)zD!=9 zrR7X_7G{_cFnvSSRW zfuBusmOHBeoQrvj&mBcXbe<%p_R!z2N*CDs^sE|2)s=5vXTR03~nEL`x4n8+-d( z?9ZREIxb`=7Bwa@H9nCi)%36U5l^F(&myherBRWsN2$?9K1>OYPrDhZ!glz+ZxjV~ z@AkU(HW-CPX@aV+a zFczo}csbt{ZN3HxBn}_8FcYuF1-0Y9Je1g;IfS^MIg=U>I znLW*azWouL4Jh6OWmsXZe2fh?w*@+!3a4vvVaKac23bXzyo7y;yQ?&vHF~JyL7<0AOJPmuaq| zUbCDHj?Dso1R!0j+^8zMtAj4eJ*gL=p;-*sC$<}WosAt|w;r>8U6*xue%b$jfXs94 zkA5^$2R8*N9d!`uoHW|nsk~B00-Vwg$2=>92tL;xgvus`{4ZDnrqySyV)ph zMZAgIPPSnl*9m-nc9S~QG}p1w`ddOAL3@`2C33>c3x8(j_fQ%A`r`|RTk(PWW*bh# zO@LezP97iXQFU>F)bJEGTl%i?J;WVh>k063r`hA+WLnr5WV~$cYIywY9NO|(RU(!G6u)*=IdW$NU^<4b;UM z($l}L8P2T*p~SPq4`Q_bFqNDDt`0`i1?OA8CigRoAdczimoxV>kZ_yR4WV(E2bwQY z8+Se0+xI+#oRnsf2WA9rzd4XMOS9*`xk5it1c^JJPnB3&XYPYnu7^Z~D41YYw#}bL zAeJJ86%!GlTfm_a74l1l|Gz`?Cd7)^v`k?{JLdKo-6|wd%4zNTitciyLxS zkOU>>gv@=ffIr+Rj(f3TRs>nhV|!UL!)3DLb65vFNyW~Z5~0+r;l(YKoxgBIsHABk z9VYtaE39Xm68z0rRG*h)wM7mJSh2d7{XnSrWgm0SN4r?H^SMHtSZx(CobfMWo*fzO zXV^)eq(7+f>MwPB(dXiiZ{YBY@>*IHYn&U}aq)|F90G`(^;3zfN(PuN?tZ@pt;oV5 zI`1r(4_@t6#-B%>O$^E#DOv8*^xNDGiS+B%;VdtLMY@bu^8+q@lKa3*VYi)K-F${p zav$Rz>lpnYeGcqYhfyB_4A%S7QCKk%fVB6Ca-Mlcec#Y=0uv(xh@K#2v!L97ldCDoS;cHY9l~sS0S}Z?zmOtQ|KSbpqSr7)L zIuDG?*PK(n*<43b`ys1YF2&Ojxa+hkyX8JllmIns>@Aaj+N8uxu$w_Zd%-raU+uIWzJ5Kr!7>R-^?nh#Nxv-X=OhJuy9nLC&xmPhkAtJKY zd=wd=whyO}|CO2-pDi?pRLlpQc^-Gm+fC9G=SB#}w=dDD5Ac?aiQyClCRMipL%5L6Nf+Sw)9$SCek=zW`Tr?8?^dP?pl@6_ zAB*cwJhnT{{s;$y9v2u^<%%)u3%_*SOG}?XkdmyrQD*BWp|B0w_9t)HmrTv-IYJk9G=zO*e8Ub_G0H<2dXfvL+xs2K@ z*0-EFvTWE~xf%x^b+$;*N9WJtee?-n@#XkDls&AC{tn`FeTH z@>oyxN1=Q81{%lt`Hb?53#$s0Qft8}%%Gg8Ib)BNus1lM#pg1s0p$lFXv1;Z;rLXB zVUXyuu_=pI!%i0OO{eZx{xkyyc`wbVs@h1m$s$T?qoWJtbwEj*`#xxUfP;dW@CJuo zSgxkHIqMi`Vl&o^j>il&#(YC&It>qp0`FIQ34vj0t~eYhz%#XtNptvPDw!gVKyl>A z&PiO&8@T$0r|*(w;4T9Q3HqA9{0+@F{}Y;zxNYDpVD@k;eR>yKasr2D62dJ)*WvxO z6$8V#>u9Z)s8hvFh(~9);ZQiCh70Ry6MFm z4xj8Ba+pV{A`w7CV!CD%&-8N!Fmenml}cY!UFfgS&6`WSa9Wv_LMvO?L9UcgdDa@_Ih1GkezOE3mpCn zKi|1TL->R{5|nJ(FY{}DsYIgEGKNy41gmBWS9IK~)^i~FHzfzPA8)8bQtjLw|9MI0 z$cMPR&5$cN=l;g~nxq<$xpuQTpdBEA0|&()>G{YLq5&0Aj#AxM=_M@agGVRzqG=HkIfS!K$eT<0qG8S_r8Ie&$M)hLYl>+pxag8o=OZWiD7; zCUYXL>FzGoN~VhiUACry!`F$x;O9&yOad2fD(+@Eu}(uR@f)|M%6j~89BdUbK2h+$ z=)5#~IrFG`Ux`Sm>pNK&Q|L=(FZ}*mIc?53;FFJ|j|fT;KDap-la1I zX6&KwCp^&IEk6N)$|V3ic=<@W5F5cViyYV(N?;w5j@b`+gT3c>eoTWYLz?b(@9f{L zO~~v%Xg~UZ1123euzZ-=Mrp!N0?=X_L{@YX(!QI%gnm7u0VebHm2}~{9mW(uqK@LX zCMLPAfaD-5U?1pJ(Nch;GaPPh+gxuHf_8P=Lu>GKBfzXEm*XIAEIILB(Zb`^Ou!#O4mP0`S)TRsucl*_JPneu$gXTJrZj zFT&`mQQsp&5brB=C~|?(01^B1m=+6 z>c&d~iEV|Sbk^=haAkFf78nBtkpC9|eaVykdYB*uvdaI(+*?Q0v2BZ+8-fLQw+%sp zh7eqWli==7aEIU;AV_cs0fIwtcXxLP?(XgmUF5v;?zy*b&V8@@*JJb;`~!n6RcqC% zT62E$n@_&?dB-6OG|A?B-dLZA6Uar3cauj)ZT$Ddfs9&Y47NjpZ#wYNJ*|6pt8%V@ zuof!~{9NvpgJ26AzK~6R3HzMEEj5`ODR(LT`p z^mdgCI(3O{igcE}yiZMd{~aaBmFb*W>2GSUfF>j{AVi~%##^#SO9@RJxJ3B>PZ)aq zzhmg(#qk8NZMN# z8uAqH@ZNN5ZwhLORc|lrd7lz4t5|%(MRu&K%P#~Wwos2Z$UkrH9t!4;uoRsOKnrzc zjM!z=ggpA0A@yK))ob-93t&;DPB-l&0%yqX47ixE*$S#}7hKnON(B=mW-;x2kQ!=q z_=W7ksO*x#hz#xM{i4)Yo5`M?gw)@gY}dNU$ip#Xk88wc=M$gd&OO{NW)pvT_v-?v z8qflwIB^A*=NG|dA9~W+;!%e?^&Xo}dc>L6I%cJ;;30@Cg1diw5-y#6uH2)QrM39Y z#3rO>A`G;Low*lOWgy94Jr9I$6t+q^CL@%w8E&o!N7zZdJfE`d@*H+e!Ep^%LTB34BIT`|drnGF{5M95+uIE=-{gUeD#+IAbq!t>)*pPNu? zP~CiP;IF5oQ{WM|EhLy@3b-^~*EWmfbZ0r^Y`S;ij09W)P+)C4gI`+Ocef3_@D~in zpnS6he&_fV_o=MBSUb~Wr}_7fKR`Ph0Osq)gXM=7c%KF-y4m_!mpt^%FTP$^@$dM0 zR&XLloyopoC6_<%5I+X7tg-CmO==W$>(Ncl?&jnkR6JUZ z?Cg*B8r@Qcmb8UQK^|kYxGC@p7Qy^7JJ`jl#vpowy3!d^R2a+^P^ zf(EA?HgZjo!5ZYgGzUsUicFZILEL~l>B0c+@qo$OK}c)=irWt;4FQ*?gpq3)xqXr+ zSuV9$kRoiYezHfy5ea^2!6Xpa5&F3Ox9G1^@5a;JPo4r97mh<(Ar@% z*8VM5#4}t^pi89}F}uy?kS{4H6(rU20l?urHg-JZwD0p0Ug_EdC6oT2L+NK8=Iju@ z+g3g2yU|o8wfE`|`ti^L=4cV+$drz%1qt_xaT-*lswZ^+&b!MxjE}IlkWU?g^kg>;F_E zHo*4Q&8e(z@*YVaddUa5*CGOFWj|Lo#L3}xypVHKqx@E|;U2#Em<|xO(6i->PYjr) zGm-uR>NRKo0P5Sp4-G0aP2~F!X+ul#fC41Z7&Abwbp0ELq}2JZV!?~LVJjXdqTi&J zK+k^_)Zz;4@m#*a9m(VSjArh1u@h}ZSQ;8@-+^^ri}yt)H{Rk~dg?2**POV)71qt* z#f3CsT@10}48h3_r8depK#dVF8&4`G$>=rwM2Qsj1vtg!lSHZ`ZqItmZ2u6$!`Z?q zBbGQFuLR_{7AqDijS)=Z;1vA~A3`-KIfld8L=#=>tC+;b*JUtl=UQ7Fm_!;YEu|~d zC5g0Z3i%#BGAOb{9_A}?)jflKuz7t-?xz?6b ztt?~;t#g}~y$Rh=C&8>_P1ItqLj&Q}mXTmD@>RiQc$$SPY^`>BtM_$> zG-J;ZbnnhaBQQ!8=6iHtab7K8Tw8$$TPR#6HMelqX}nuMyR@T0AfbiU_gdQ=))-az z-TMhXzr=mp$WO!tgnUciZl3KRKjl_Gp&VR7BlJoxe!*+uOgZ2ofF#<7(S-_?QTO-< zP_M@>3I4Y{ecggf^iDI-_U4N(EdHHFR6z7Rdlzo?T8fWg(!J~sXODPNgT zQ#hwJzVi6xizMT>)w*a5n7V9HSn=xUHDN>S>F2s|!Ha-`;myiB-JrH-7arEq-bIO` zq_(7l+&ckGu>M?R(7-9Qb8@=7C~kwK{K|&x_|=46p*)ZrnM?P3ff?=!a>D-c`r>2g zca97(J9zS{VtUk=5z(b#|6zab98nTY{TuN(LKowc`o&|&qt-gVZX*Pv9+OKCaL4?_ z$Sj*ktL@NpvmB7ynB=M2`1U4aObG_Rs??Iw>&jknsY2lm+y z8+lbpksRrvfR=-hR-MQx@{J$C+WjVF56tWVt@@rTaDG!6PU{qaTS&W)+eWwjAp_72 z0=ZX*_v%Q{C?P#;uUtMluC4d`MAxThW)f3V0nanE{{^Dgk(~ZGN`qmN+Dr&MNQ z`^%yU>md~0t$ydL%B>Oo=r}H0$%Co2)LB_aUz~%%dhG?{jYs$pHHc;GMY|YHr5}s=?D@Wj@@rO=&RGqydi1SokPw7qJO@Gc z0O>td((#>*;4#!k8ffD)iutk)$BK?5Z%K4u|HXcL4c zQ@FRsUD?mW)U#S?gec%%FgES^zMMCVHy?=E9_)gxdckT^!UX#X6FD@|A(wSUz7qZm zg<%-B_X}2vl9xsZ07hSe3}Ezgb=K+qi3kvCW2v7|`;Q53FD|R8SSd?50&Xt=56E(X z1)PcbSi0p?UZ)nQd`Uvv6Z=jmIOPPCwX6k(Wb*|%3MZ-0G0T2>2Q<5~g?)8`#;BoU z>05$tKV(@EE$>+eJ^=W6=H-?4OkQ7gICY)F4g!G#=gsllSeTKLYIbp9D{G-xb6>%a z3FfN!3z!_CXk_^JfN~?9vPd_lrzkeh;`nS7jD=`TLQq+!&So@95?>D2671I2J?byH zV^&naMy9E<2q@u2u>d7}IiQ5Ehef7rrsL4zYed@#iq}}4BK0$)mA&4GhezTGtZa8` z7U8@(sogasXoQ}@&Pm{V0_H6gvsO4*8)S#Gz#0Stcp1#rQPbzMnmvy=yH%#rom=TM)?I=Uhf54mF~H?xW-|+zz!>_H>jk}89-~7X zc@-{rcCnq8<}7{`yU|Z?p2Zu~y-hBd^sHavRlS&E&v|{xNOzbjaKvjA9Fd^m3GU-E zB{W=V1dtLUjPbWhcXJ`(t2s&j&h8WWDfQQeHG^E#T4uOV zU3NqEX-+zOOQZ;7iljwM8hf!(Ot8x-&w49o4dZ>JGhBw-;G3PWPg3j13165g!}XvF zw7~n97gGv=DuAu@37~+Kg>c!Ma={V;FCpQ7EvnIL_|>p-=QZFjoW=Kd4mTr)jj

  • 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

    tOJE^ve}`m~=%C@NhPI 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

    2R8bjh~(^w%{mcBq!txh2PP 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

    q)xj10@WXt9^-4m=_Vr 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�X*jc}q+2m7Wpc&)WHv+bsCjSK*k@*AK;E(# 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

    jhmBk5ATfl5e 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%0D7v$yjgoDcFj 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 z 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 S+z}A)b3@S}ASv+}Y+ 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
    a)3v00r!HS&3cc9C zAm^0VNd#(b*H8sWD01zzL5pq=#R{P|{d&(6LYowjck0Y$20FWKZEXGp1@%Z4J<(m1 z%A7i`-g5rW(5LPG{{-|YRpY*erFA$hFmW;DdpIYwS(kQ5<&p*~-)Pzkwyi&Rt}a`*mKs`=L3lemk*X^N4$?gJ|gRB3uxA&XcI{RgVkw!e$)*>D)Ah;Pu74 z=WQ0v)=4iQbXYo>Lpe(dtHnTz+3JZs{{sviKr68x=vVx9&@x`yib4$+8p;L)~` zp*2-E8SYW5SL2Z4c(H4}DSjsG#!KE{;D-JO)k*LN)!C;#6np|=&BD7g^)p_V`FKBU9O|+3}khqOVZZps7ltYlWv{YCtSM z=Jep;xue(QD5mokJQIoux9XK1CD5gz042CALUHW%(B2zX4IUY@jh^vqUX9dVuRjIZ zL%sZoCg-Y)O_r^7{$03vzGG0p_cGRWv_KaKHw*UR>N!j*X|wa!M`QEB$)k?ooz2`9hl9}b(13ejT#l)pp@hgm)Ft{yTPD59@ z$Z*m!_af1+@@b;W4 zBK~<%)bDpZI~WE&F0I(Y(b)&H1s(GarG-(AmU6B(4B88oeXk~pQD2%KT|sw5r>?3R z`$a%*TTQk$<qhcRZ~Sw*$|jeYu_)urpIbZKSHk=e3Myi$FH6{U<>FqI}U${-4j{)!Hd4XDuI7> zwvnifB;aJ*js)EG+=oJ@y>I2bTecRX4^SOV=+KZkXN%kMlt$3KcN@|rzf>Run+A?J z1=rq{z*v&J%J*sE7p|$T>U*&VV}nG4*7VdLYV3rk9c(s_mvIqbOiCJI_%qary54W(AxxRP@N zSC=ZzO(q4U_T#t*!;_UkMn7mWBFg~|mR_C%ak)|_NN$A=a z^0w!yWe%prxbL&~Uu^$_4I|ed&k8bi#Lw^7&<1){;=4+AK86XLc_GEEvNMGN^}2~G z8H=KXA@C+3X-Cimyx`kpBgF`I3C_(0kcf<7fH>{eJpfhNp}=+e6dk< zkatlM$Kp^)^R-`KU%PxSr0*P%aieJN%B>F)Ar$Uxbg+_FHhh;f!7Ix)F)B(5Lm3aS z?&ktb>;*B?3}1ffotx?Rzf2sAp|!DPRLJvi(dE*9xZag~WOM8A;&kK;0^wUzmOz^a zOSbirhgR}?q!QPT1E+`M-ao&?ylYzC8u;wxqul89xEVoBT`=C@KC(WEb&rlm9wI%3 zD_Q}a@{qLTHyix$%p20SfkP_tRnzlynW8g$yGz)I+79ttRqPR;Rzm}|lFn*GhgJkj z?6;??p*rRuwJs6pHtBt@9GyxlOVQ@t2D&`Uh7_gNFJ-a9nec3iLF2+^K@8E^wD9fiHv18~0eRmCmS|%8cEQr?-~)!^HkB*ldr5n_ZLB(mX^+NdJ@IG*EgD9RL|+B zk78`cRP#9stkjAgGpTR9k_UAh;MknBZtUI4q=Ri4u2enc#}0j!uw#$0*hNkhjvNeW zFbXgT_v}KZT43yLzTPT8c}j=Iog_G5qbNmn_&L_w!?T`DjpVTHeQb&H7}7%Upm-fm$k~Kg1e#3)TF-&lYICU8oWR@q3ws$W=&sVX zNqv{clr2I$qZ6;Zc4X4^7Q5i?_0P|Tp2D# zV=$FzglMxw0t6mBX9J?m7C8#_X~S^jaAg<`wHN0;jm2|i(Fb+kU`uVr`=F=Kp_@|6 zsMa`hgurA!GdeHM%qmx?B(>$+XxwzT}7zv?i5D(%8Bh!YfbApIDgOR!xEbB?Ss^G+nQEEjF%XO zaBG7qE-m}w6iWWS^9GhRy=SAoa;-%okpHdo_oAY7PfL97tPkK zOEX=%)vJZ)Gd*5xnctKa3A}=cnItDaf?=iOj{U{3{&>aIIr!}sGUs+Q3XW_ir!h3! zK}0tCOiaclLLmvP-Q>KxL4G=doP6NzktGJJFqV2r$d|&GSc{Xv`0QqazsMr~{TG@{ zF~~@_YwIODxuER}Pp8VvTAgJ+8k%#j*7oHZBA>&cJHaGgI<&j-@vcAT&b|;-&8+NU zbKF;FW>vAQ_V8MMv`;A*0q`{j+j#gTirdE5NNUJ*6bb6a$x9}nCntgS&vx$sA zcylMj(0nw~zLYBpw?w4-B{#)=?th|@C2d7J+T5d>-QPcgU5d3F7mV}tkdohI+@oUN z$N@bmr`Gq1TSJEcFl88Ap>o^fT!>tBTEDi`vBHGN2Fs%k=?$P536f%26vLlrG5_(+ zs}eIDM_Je<-Px~lZ?8MPH=JW-t-))rSIZ)fg%&`9UxbpHvT53w5LvraR++FODKXh4 zyQ}SbWMaJ(-TKG4t+!mp_&ROM&p@xE5aH=o^}%7IvZ3g!2m&$eP@apL}*us6Fa*A^c0F-U(OtM;2knw5Ym3KMT4D zn@LMY96tCSyVp;nCc>k(O!Y{#ih(iOucQ3$(3~motMKgv5Trn`P05^~YI4(Uru0X+rq{!>XsM+w=DMt9fD1E~^hx zFS=Gntog^r5$MdlsZ-n{GS|5+wFBv_#81!xZh?8T0zZI820wKMXykQLJhF#a%|_8? zLWn(VGO+!LK*z09QGR$o9Cf}2WKrK<0`B$AAhJn8~oyImO?{jDB0%ipW%kGp5J%#hl20OkJtQA2Tex{K_q;om0Wg zfGqHUOfUw#xH`o4pfecr!B{QQyZ$4`3jAoUs9@ckT{!+Va2z`w0)N15Etc%O-^n;frdt5X=Y=ueQb)9MeAWmIxi_TgGgp2KV~ z5dsBkGhVzMA|ru)e{r>6P0%7P_Ms{8P}YbIxR7Im7dBlU7Irn$9z$hR0+<%{KYCSZ zJp;x}#Pq)K3J5Pb-a91SPrFRG>1(F4m8srv;@@yRI9Ni_5(?>89UTau(w-jFDABuU zYC^WpIG{vrvl{X`n+m{qI)0nJ`Y422J^!@(H^|7*_%@S**q@|7#-CV-CiQ9P-syI| zTCc-IJ|6P-q}fVqr%%`b=faqml?l-#XeoRIxWm=XFi6x2Y=H!6lP|ix4-%7Ga^gMz z5+-;&PDsfHw2w!uXNNhNA}n#J|Hd%(k==LdkBpFu)IA6+qRl{bHHCWeR6#aL+$ko< z7?8)!Q*6&)UaXK?^zoR=N)Lzb{*M8SoPm#){Mp#Ho?264*K38+gL@@LsP)aAq?R5e z3bGim&b#t_sG|dPo5-B&ZvBF0y%Iu7xPo_?hTB;1;Ids3@OPB!CB{Jp6EvP}9R{J# z5X|4ywz@ofLl0AA03JJm=HDtSZ7@?lQo4O=fX}~(8#3!*-8@S9=X5UCq=0<&d#j(8{JeHC4*x<1eRfa zZY4Iw3YUwREx@+5=7^6b{BO?6%vYJ<_F~+Jc?siZ+3MoZO>Hqi7KI`E(NF~Bl<}mBDM{>(NsW#iJ2?V;|>6mrgYdnpE$dD8RK5DV0X zx$FYnA7dNXOa38?C|Csp-)|b@z8tUkyab^V=1UkLIgyw>#3agCh1gnwLRNn`-zPep z8_9Pg>O)R%-1!|)4&oZ@Kp~0VwYcGd%9LDEEmj6y)01>M+X|l`w+LhqP`(C#pI01S znbIiO5ab(D$us@XP$yE>@oS`B-N(Qg@lk9FW`W6~-*aR1qu>1QdRi!iLU45N+)@w# zTcj}a6?u)$zY~T{05T(hGEHD-NwmcItjVqBP7rYw(^ywvQ<@^^){Wvj|grN z79~CB1PDxrahQ04f$klmC=u3>t5BdPK zBHE^bx82)uqC$;yl$LI64Sj;H3TzKCT2`W;uX}Dk5?dNqei<69ps4sw-5WomB;9vN zVOi+<1>pMyU1B!uKc&2JUgFq%9pee&-cl^O%cCOrE=mMLbCTI~gw}9;LnrWS>s&eD zwI7T$Fv$%H7f96x&OE=^K4S5n6J) z9Dx#kh^Ad@S3i7-UN(HK!%yw}3n(lqaO%)*KQMN$9bAu@z+`Rwl6*P3>jGix`?fh~YC&}gfF{XZ++ay?>f05d`6I z=xFg!_VQZ0bpU$&y2aw;=U7(f#E?7O4o;NHoJu>tFha4F1fEI~rZ;HV`_@Ae9iHy= zXfjj030nLe+6OHj;{TUDl*@i7&nn$Qab%%&iL%l#K7B`pTEge7l>%iav&@sD1kC}v zA(6eE;rU0|92x$GkLs_lay=wDD`?1;;WFMrt{er=fqq=ikQV)s<#<*R+$A__Kk7>9(zc0z=w@+v z!LF;xuLSl&$uC3fsOczZCqqb}MzkJSJBn3UPSY+^rmf~~Io@JLA>+Yzgt(t+z7h0e z-bP73eX}>yMjHxtBMw`UZ~f!pp3e(=fasNfR$-g@K z)}bAamFUm0jw8CM1cb_6w&qbRC?cYok4RU{iNL~ zthfb=jc7m5I+0v5=H-QefwP`*#`?@f~{%4NQUJ(jidK3xnw$z>0X5ujY zA6qD$ep@I382Eo^q5K&|>+y3vpS!Y<2Uq_kBkn}wd6A<5)O2xIB}xd7*Zu={^VB;_ z|I9wJujYLLO=0|e$^&kQ?C-!r7isA?+ShM?1iVhr*qe=@PE)feSoC)COj|grG_ouo zjp!!#o-H+rp&An2#82&70KlJI4@ZPhYH3lq5#`S5h3j9#1vD=^FnKf~QC=TEZ%vL1 zsuJ00?~)dlD#9m+-W)|lWY}QXUA+USpEn@_^|N5rvCBuGezV%;<~DJVWMPkAsNW-a zV`b$%ki4bRUFhC7G;Q5i_`b4FbLnpYokAb`@fu)q&j#g&I~R2I*o3m$KQjs|vh}oLlM>X#-)*C^lH1iO zt_}#3wVgfY9k6sxCA3qR&U)g;Q>-&XXhiOgM?T881B}Ou<$vuI{2+=CW!K^pgm6u~^he62J$rO<$Y_+a*+K1|$ zS>eb1vQj0ck0Zgva=*Y%3XNIncrsshf}J$40zbnclk`jOr)=xyfx{Wa=mt$k2&sO@NNY$JT-M)_BV2xNq$2qLjh?Xg(Muhsg8WlV(hQVe0Dyf}6G zn>+MZA=Z)=acFU=#-a%L??ce9590p6`{19h!@s^8e*csP7hGfty1$z*|HnTcR77|+ z87V)T|HbwE&sP}nC;w`M{E7q%%Kgl4j62UD`Gq|8uRrkXIy|hW1N@+#Gb6bqg3C~l z0dUw*X=N=pnjyJd!!I%A-+wJ+&hFp;v>(FqsGg9xNe5(%|Nm+)oyiYCAhsaLuz-!v z#{&~FV3-^yox;7vVnFU9B3kWRp-$L+{p7jqsi8^MX7fmce&J&I(c+UY(c&aLTFyxu zf^f1y-GNl$YHiS_qI!0$5KF2bdP(KcNS7i^`dBTlr?{Df@6HL-P98}>**MbETL<57 zwJ-l2sNBY;`5u3%95e6zxu+G0o&M6be!thj{d8GwqK1oxRsB|v*!f-l-Kg*42DRTf zF3$uVx3w&?zPx3&@$9!z6==|EL!fbnZvOQ?% zq4NC7XxFHAkC+%~&jaO6YU*9k+uzekYQdwfW<1Ln({y+)wcS`Pq3;D}w6c2q<~{R% zw67^E7j5P7o#rdD*PqgkKPL;uX;U1YBFiz!$4uD`yxE>nXe(*dZRjrGk~6B>T1SG5sML)W)Le%OYQwpA43hq ziI*Mpe?ChQ*q03%FpH1-a($Vm^hQFTpo07e?{bPZg1U%(+_xO*@2Z2)W3Yk@$t&WR3+h`3==&Fc2?aod?h*Z#l#NM=X?? zvj?U}+mqOx0`mL6SjyzYyV{SeWSfihx5gZ2m*Xu)t-T#r-e(bFgeGnb8|P8RgZOT1 zn5}o0qcseD1Nt}A)XQIz!p_-7(Xz|q$NQ7k-^t_k>fgzJQvCeDM!Se4)c2f?=JMS0 zV+9Y*mv_XnQI}#bY&H^sQNdcr;ESY*dfnbJbds3UPoR zVxE1L8zx39*{ZRdH{kS4$fP7BpV#1bv?+oy&SqSF1UE|v1y7fFD!)^C;>X3kN_Gg7 zF$l5nH{$_uL1)lK>+|GSMBe)?DEjaDISh`+>9w#YLze>P&pSy^5#~^BNN|m?Y3NXK zny)^6qeooN!NBV970%Yf6j})XO1ViSB}VhlovZWmk#qgKpHfIbLQ#9LACM-MhB+xI zd#lF+cziXL`D}_nyJe*XC14R5l$w8EX5amVx#gtlw71`feC@)9ST7Oz!)S(_oXsLeogVCA!mWz}8K<8dKcdA77-`j>k1|xSGJV z{3b8E8=bmBV8qn1UEM?BH!G;a?4bU4eF7qgxxjc3s9mGT8p-7%RkP`d%c9fFUv8x2`RjL?7j> znZ-zjCx@zq#)q;<-YRDnpz-?;+R3Q9d_YyYQLG{N_;E;rf((@SD!|@r(kcrq)~3#& zo*%Xx^*sya`0S3q+>1w@x?GI*=`7I1Y}axaQG4$I`Ui;7Qt}G=DNDr@AvXy?H(Vpj zKEF)$Kz1bGKolC0v2*XW6He&<9_oC$B<0KFjbdxn4o5W!cNjT-cRuV59MdWsC!u5TmA(p(Ry>ehbLqg=q%=3hvgVr?&Sy5E=g%Oagl3&WKrGXO`$*9Z+Wt=J?ABLVs-4 z+ifQMg=)SOWrYRNZg19Emqpx;Q6@JF^Xz-ClC`0uOEIY4czOPbSyAiR)7Kwio>G`1 zQvcLTUZ;nYIrl$=I+L+y>tU0qvgYeVn-j3$OOr>He3o*$n}JS%BjDpzHSJwpJ&HUj z;tRH#Nx+)$uF7_8H*537f`*M!ObB)VsJF!sM~w5Uv8vUy;YM?lH4Z z)Nv>ZF-&`J&D~Y`tlZ+l0qHG;{gDcan1!={;GduMpLx%lo@W? zfGnV!w_j(k6GZq2>G5nvSqv1txwyD1DjhAzpw<=DH%##9i0yh{_Pw8sn(5ZH=^W96 zb($I)mT=Y&57tAm!~D-NdIf0w=~&8YX>M+R$zjS|ct96Lj_fat)l=h#>@UEMvHvm* zIm15_<8fWAB4f&S@vLLvti#UM`u*1(Dg%oL*9_B5)$1D0b|cNRLOWbrPoR!C)cTJM zywyJ5PoW>E-zbu+!kaD2B9=i5xHC(8@dla5T;(?9=L9LO(cv4z@!q$boQ=CGlIG@nOF# zIrGN)`GvW<28X}49rN9AMJlAkuz0~P+OfG>sfBp z;W4w(b5jU5EY#|(g`Y+%XITjA?N6Kc&Ux=}wrwSi!OK2%!;g2aqOa8(c3Ou`*6yCQ zH=&OlRl=&89SQx2`qF+XCVh3abtGTm{#rOy71Rb#428*bP-l#OQX0q%XAf%#f%~gv zxPPCr3s}dOL8G-0Z91u~WlknD`g+?n-zS#uJEU*CR2>kBtOH`g0oNOI%_1D*T`ak(mvacZ8gf4M4+p?nGnuNy|ns{Fue_-5Vr8)-sLL<_5m@86KR>yZSKa_mSR>pr;`3p{l`E(+<#m19KR;dXM(4)hcsvM6|G^i?XyHT&NN zh`*+I>4Dh-Byey)q-7p=2X?&|QY1iC$qw8f408a zQsy{kD*r$jQ;_qH`>MO(0ONX88RGd3T{^u667ec#HQW^@1;oLk+vGN8yosAfDlM48Qwq1M+M| zHS73hYGkw^x0MF}>+K?jj&vNhO}$NssCEYQY&Cu!THo1yu1=a_8rXjx4|tt89B z%a}b&%$-jm}_y-9_j(lX|&POiKcy#K+^H$h)5zJ>T-WlVDrjUQ{G#ne(MqRi4Ye z@LBV><7nba^QD@%gS~i>cP3_$H=U@(g?>Z6xIDl4F{-`7!&fTJSF-q_$}ZNfOwJpg zY?pOEu(hu?QOSfHSto#w@}Tug#r*aa7jnt!Y9EiaDZkKsO_S698c;TdQUTpi7BuaVMSy$fMHQ*1{ThkIE(sGgWOl4xj8C*w!bYX{C;xl4v-U3%D&w^)tr(%`3Uo}Dq3!_KekdcNufj`oGIgUcU!%U03amA*S}Fn826tc@|m^H@?M3ae4K+*O8P!DqHcW{PxL^ zQcMmhv@g}WDxRLMsA+Oi9=ylMdY@f0(y5ewA1Ttid$^Zh?En0ril^aK_=dtppu%?` z{LSylQm>e@1(D;4AY{8OsX#j+N+!3E9w5F<_i2n5y{;};?hR@K8RhbgU(_+1}0$S@R_K`7TZtAfN zwrH{E6PWc!*mQ3;!&Ih#^msHZ$7U!yF!NnnXR$oGRz zEULsyFcr@gn$+=)rruEr!OeTSt8vTZq`>-R08VIKSAE!;Ek(9$_Fej~3r(-q7Y|{v zt1WG{8pRL%&0Ly&?mTZ7c>NKtjAc;i16MbS2UeQ&YdAmftv232mht5W&*ugs5t8Qhb`X5#bNQBM zo#~`2%jDP@pHHp5kh7TC>rzO=S`4ezjPSr<7I)QC#qYLWc)sq;qP&Jm>!Wt}DLwa6 zKHpq6_bp69tC(^<`yO(Mxhfo6TgZjbPp&L&=ETKc9#653G|YSb>@vmePBgl{d@{l> zlEk1;)?xM*DEpbKqk9u71IC`L&&;&`LqA!6x9QrK>SQN0@PetXa5Xh4eH1b}_gc;n z1Ry%^GV4*YPo%Fb!a945gT>mkv2lqtqdQ5fE5E+C@EGA|`+&Mj*RO#`e!Yew3r?|h zE73Oh*@rvp;m%SX9$2fsGH{U7u$|&=zH}ESBW#Z?WYFqYI(h1+xq-FHy)rW-z)cEt zqSVyKxq&FwVui7eBE0J@Y6LlHTu9A{PVJ(}Ol_Ya%v^0M; zc+v$59j^&|$Zv9kk3q5__s3DNz~sk1Jk$gFQ}!>gD|=sOsOK}$8PIawZIpNx%dQ-23XBXJGA{i2KpdI_SJ zzOU86Gs^|YZp2X3wMe_CdCLjPY|uwTYt}>xOGq15sjO8-R3WK6xzD6D)b_gW1yWWc zV~gE_?m$Ulvo2eS`mD%qBY6-ze;HD!yJ4&b_PEF5w_JnG^~GVZcWAv9CCn06LTz|1 zi=k(D$xmdoWmhVZ#*Nv7Q3uJ0hb(MpG-lWU;ct}u@g>0TvD^8x{KRJc99X@u1)g%{CO>$Sgc)c~OB1!?G$_?tP=c#M~ zK{on%800A;OFaDRheB5VLq9SnpEd2RS%)WlI%Mk^^b8q5zK08z`f~l~5xO<_mleG8 zQIv(6_K~wRI?YY8T9aL2?j<&xBVXEorITB!JYB9~%No=FVu9Umx{gYFL-})|PPZ6( z8xJ3fQRSv8zI%jhW4uApGxEF+!F?M4c6I_m5dxbqzD~PIV32`J^>Bq6(?LuYi7#e7 zi(gMxIg|RnP||!s7teK{BojNs;CPCo5D`bIf>WqTz)C_t#<{;v8z!LKEWlM}JvAV% zL*Cj=VWP#p{@2Dys+2wgO>Le)f#Xq~k>qmw86no^n2TRN(%^l!F4l?}z#lFZ#GTqs zB(rvGC=Jswc#dt^+$kIq~xndS?CshilrekL;EwB|U z1Zh>DJ-qp7DUaPAXV7K#%r1KXJ|;Qb^@noOfb0oSP7;bv<#HsW&ZAQos45#G9Vxtu zFyhCyjBV=T1>>yYml4Zw#rnBK{rCciZiAAA(AL?HN-8T5LEiWw;d$OAi>rOXh@*2> z{59Y19&a|2c84>kvmC#&mpABRjfLkkFo;!u6Cs-J8fv=8ZdbJeGJICzz65DB) z9u2m?yh$kQi2pAmQ)iqPQbkjLUFYb;p4_q3K5Y-DTc?#Q%J<6nWJhgG|utiCjUCA)8BgwOTdKHj<_t=y4X)kvRFWXcUjj zNWKZRzT-7l)HrI9RNR=3W+<8_Q~#${vNta1`Ah;CiQo6S7|N`da}ME3S}__9+E@|o zP?MpGtHg(Hi>8~)Bu`K!7a#qcceUT~?3Da_C@NTLPJ+GsxUh$8tFq?fH`WO`ATo1A@Mrip?kBD4_FIG@zkqdOeNlIq6=7|r4jgE)bA2FtVHKFBidiWvG+sccF1FDHZB(#scgU|QM*=kNqVd8c- z6%QwYInfCEXa<$iUF6&FwY}QJnbgGt0=sV;7ZY_&B@qS{vdhV8ipYCe>8SH{B2!ir z0+=n9-JjBKsIo6&oE!LHmKmno4D8Jcc%u)_m6VJj$M}e$epFH13!I}I+DKlXdy2d( z!)=>6;z*rk!~w$=e-7q5-|F%7$-q*Mpk<=>toAy9mFz4I_UU!gE43tO_0mN|QG96TV6?{Ku&pn&2 zX+J@HK|cd8xDXBCF=4B)geiN-(WwJ!Zd4~;KfSBkWG`dU; zcP|kqWCPTA_fxDbku(QZ;oA>f7Q2~|Z!;6w|CE=3Fp?!PAmYR=k;a+#1?q~OQA<7x z%^U`VO1f)Gg8U~la)MNO)Dj}=p}HRDzk9FZBX6Uw--j$#^|0Mw)zF;$ft<9$-5(0P zdyyTul*S-u9(B$wGg_V=u>-K$;HGc)LICTQOF1a$VuC|ZVH`&?Cc3R$1cy`qoZ@H> z9G{#ly01s}p}4uo$l6#h)vZmb2j$b&mLYxQ8jw_kl1-1}!xBRjPdR8e z-MTt@r8iKg^O&z$__=cPiMuaCQD^U*I9`Jg7uGg}))-B36DWd|9HZkj=#k+NCAI+9c`C`X)@V@z(`M!E+ouA5xmOtlh z>W-M!!*gfxfM>&>u|dRm7(`$6#Gt}-eT2tL5iKiAM>+LNDw$GR;{#@Ch|dl@-}3U! zL^6tiDEB^(shn>*`)b64JKAh3iFH^l3y+y2!$7_6Km_cpNg@VC1b;s@iF()w_9P~aO$d*> zHT2(i#sr#lsWR!*tS3;kWJ;^q-@@*Y*Br4O$5$nwHCsOe3#^M?){*A{pPyX+l!+pY zDxYX8F%XaLRUr)}@B=I1I^)cpjPM6)O%u9Nx1?^F?95Wd+3|`ehj3Fdc1S?yKnpW1 zcI3EMP$L~3>sUc)pgk-!&9g|uMqef)O5Y<_PK!o8Cp0_59wb89jFZx1-FfFh?W>zf z7j}R#)|P$SWeiT>8yd>Oj9Iq3s>)}3lLdS2*}YKdj%QFU8jbZk7N(w zQY-NWHw4$Mt}c+{geL@DpVQ%fKD@Uc-eKCx< zSBmwLyeb2{b=w6$ECGHjHF2A%Ngg+%cP1hOUfSuz9a>jBgl!8vjR~i3}GtMf*z{ilxbh3GFe%)IgIP zqrCWrFA`uAWfDhrqq^^Ukjchca48(Q=l}vb^sbju_}zYb616Xk*d@VU8)1?B@JQc> zZ<;AvA%B5ucOg8cmcsfS$az|}yR~9Qajace@p>y>K@L2!ymwH|YRbO8j~$pZq3~~S zW&B92MvmRZx#{Fs zwzV|D>2o;r+>X!EZ z!I%s_nS+sFYnE_XooeY#hs=!!PL|Na7kTvS!AxTu%?028-65$SoEA3-5p&_6B-lR)VSLwAJrAaG|}iOw3?kF)+qN1+h^9a zi-EmEOjDd*?lzhP2OSOVbd^Kfgjr!-O!~PaX$AsADtl9Tz^?6n0Y&c zM@Q&pLXREBolrObwXiD*Uz%#(jJS1`H$R>X+bwj+RS6CB$bJ`-p!&L&V@gre5?rJw zIPW)HvK!iS?{EqjU6?n3OQ$}Yp=05E?mE@vt&+#?yaUy$_%(&jZ z-OC=eN1GsWG>>kQTVO%BY5x3ySy-ABjSbRFp^mmd9r-VLq_pWCEy1m6@(@aUKgitR zLz<37%7yDl{*}P)x<6h48XE70{OiwEK1Um=MmMzZ?E3WEGuYObQ)5!q20>$)3T;W&8+uvemz2^zRMwp$@dNI*j33tfB(LM2^ zPi9KdpVG#BB?P5BpL)1ZIbUz!3~%R%9l7%+E!(A_8piH8Wt{dq*#;E;T!Rx=*yy}o z75iG>O||h|cS|6_;YXHM;0YEoD;;u7ELDj1(@kK5HtBT5Lyz7q4Dmyk2@~G#QAT$x z*x_*acDxm?JL(Pul5`Ikp96uUE5-)iN1B#PuIdz5eTIQMHdETC%gQoKST|6-I5=eh z9haH0^5yN|9aH`=pr6rTC#r0w-9y1-hs@N+=h`W~{!<|t*e5*u2)a|OsoWD11H9hB zt888d1bY$3CWQg*MkRsW9_S&}+YQ`|o4_E+QPc9p_O9%hpKpK^4_2T~fwjHiO%RIH zxSFafbY}Uaq@99vM*XXEz6L1^W0dBGude4I+>8P^B=zG}l#WVNFrGmTeO%VZa#dIb zcQ|n~X*_<`ZIn%@lR1jJQTcia)!Tlcp(CFw5^=7=2^kxt8Zu@SFz&D4>%wyG$xp-+ z(mL>Yr%fs~%?sW;M<`v~bOqPDA*v*yFFp{UdB<787V5xG*%g8+RaXxS3u9mXO_j0xO&epY4*)d4)X{ zE@h3D-IgoC@D=1;nE&KS|hRA5b^XvyzKV>+@^ZE>) zPN6LqaDqpqn{(hYt{eyWa1+W2O#E$O9%B^ zeAI>7X3Kd8ZW0u6FLkTYUa2he%AF?~r;uf(AJs7LPg2@H#Qei13DOB~$F|o{RmZ1c zA<+&>V1_~(tcBH4=k>l^pX?q+Q9g0E87ws+16CEWty+t%>6ZF8D0H#sCnx)ep!4gC z)tiYTg7F9FN$(u{_r870LIU$WxV~rB;K#?cT(wyWJ3|yjQzO<3b3_{}oKzp9{(6Pj zvJ(!DetwRW#i|f7e9oUJJOsxubq%hu_SL@A-`&W+E87npX=#w{9e*(AenNcMkdz1? z$!*L9an|28i|GB`8T)-GgSr@@kZD~Hxpih#aJ!FpqCz3Fm6SBd;9_wok^aps;P-ow z=OIO=gYd_vzVQHOj|TDizZ?7i^(Tb*_(+<;q5oTd_xC^fAqae=Cdla{kK}*-ZT|fj zkV_)|I4n*&8bQBEPTonWHz+mm!QRNAe?6f8eB5kd;Ow#G31@L3&eF>+dT@dlOL=R{ zFyQ87HUU1;IEG55-d$w-%=9>N?Em^iY2QL3@Y7Lsl{5KuP?0j= zKIk&BcCY|z7N*a%Xj&=uM7gdvZd=~QRk&4S@}tj|H}_oFo8>1owF@JonR8p zmI?M1m>3y@e9m&!7N~jlSb?$U3D^^|JU_-i_3C_^GSk62{WY)pg~@9$XZpmZ<6mK= zqMSM6Vf){iiWOeV$q;)OT>f?}RRe9nHbcr3@Uob7efj11$esRiZO&B@n+jkeytLZaS4 zaqY&sU;wcyfxTQ{$XBHf&aoJ{S$8x_akfYe!UCvo63%$q-4i`YPJ8g+ndaB4ZgGdW zgx6F}?CtBYe|9JhfGyOK)MUE{ez~XmQm{wW)Wa4}&mjddkAuGFpgET8 zY{P(?2&=_)R_k%~^g`xnVISV}gk%1|Vp_@GA7D`ZW|1~B$UQKu2f6YYp*wTGWOQ0O zT_kM6c6fA&$%BrhS?w?&`eaz(OBjJ4m-NBGtFse+Vf&}P#>cKd2YmB>91b-`(m^&D zshm~c6UGk_Vzqdmxea@!$_-_|$L@?2{lxI4QS7qLNb>b+Lw-?j5ieun@Z!b)qVBE3 zs@&Rs?FrIIDIr}3jUbJLFcC$%yOHkhhDnQnbcm9YN=SDIQj*f$U6W=HTx;#;dA@h~ zynBD|_r1s79{hzcnfJV7jB$NtrW}!WW-7Z$4TW|P&H>hVk zxOqZ^z~?)o2{^pHIP2ir2wRmpAh#q0B(dfY=@ew*2r+#u(uyJSb*_Ni-ovEXs<4c> zYiq#(sWej(0Yq`B3%1;DH>>~QictK3nz2zXmdQa6+%V|IzAATqoX26VEQm>YeXav@ zgCD;cCCya&6iUas4n&kczZ7~|4n7P7?hSRZH?F1wnTYEHEq8chh;fcgtzCHsej2+c zV5Xe{tt8N1vLBT$ygp0$7IW!veJQA3`}NK7j8Gi12Xz10?&aa22yk|DfQ|6&b(0Yp z!Myj|Q{DPV(q*?CgCLV{KvVo(T(7+uq3gs~W3AWSI+L_Ml~z~-c;d10Int(P;Uo7b zhaPY3OjsSrf%?{Aj!>3DrB$iNortXyv{{_=n#7UXQy#43%U7A{T@Bn2-(}#TT%7|R zN{qUT{UU;mq_+@{pGHe%=i7NN#U!|oQ<64i3uPMW&#io<1%^d+Jmg*kQzTuuy*^yU zkWd+1xP`;3V zU5(y_hDv%39>5tO>GqK-=qsmeTm!HGkE3A*21Z7!*k}j>NSLloh}a_1&dmfY`^t@o za;bw-RDzD>Jpd4wyoQ%z6`m@py)3gxBq&Y#?vg9>r;74=iB($#2n7}f4|!P|Gz%^2 z{T)u1@VJt>kO{uXKe)Zp519D70X-~QKh|mw*c0MXA-4yvd-**9MjAC?{Ns6yaSav) zY}mA6jRe>9E_!3Uwz@Pb*_&*nXcB@wO-m+7@^NJmPOA-`59w05by;#KWb&~|@>_^z zJYfh#lgO;+oEv;LR@1Rr$G>|7o2cDHUtMqLcvbJzOAt&E8%A$TyW7XL6$Y!9OT1r* zlF0$78aX}5z&`oI`aLeBD?Z7lb7%Lx%C z!|`Eccn~bm3#!P7u_=UC=x;pj?fqZ|6BgN;1);nF+>#Auq0#i zw#pCB)B1>q=Vq)8UV2#C+F}%Hs(l>4!~dM)OT8zvt$j<-3ongb&sFM%YU>A>&h%YE z_xecKXc#THH!%d(De+1RJHB2$8TSMYQ52&|g;p&pIt27#J1>l99914npj!X@5qdi8 z{B*3GTTWvVY4&X7(b-R{zS2*$o8>hQ^adM4VXQ@#^yZHs{N?5E)3**&puoOMv+g(f zFPT0$S)S~XORvhHrn{jFcn{BAH1Hphy*R&I zlT?3C6Zpz|T)3+6>P1cEj)=yn=L=Kf#JSEng1#vco$ub^3<48tZ&$b!uD0ESlfQT# z@Tngk@{C_iUGL3=!UYoCZl^-M$KV-I(aN^Vniz-$J8R;1XIOi{k&BTLtRek;J2`*z z=*w#O6Ly!Yw#m?)y2w8w$Z^XBJ>4j@9OM=S!U+p5yySyPBv#{fL@uP-Gz0c${i{+Q z!T-cOf2k*Xq~=_8zbAD1;?(qVnBK+i4<|QYx@@bw-2C$7q~YqayM?fS&whe?M%A8F zlk|CbXEyp>pa;!h&X5rj@CPcT9Bksild8_D!c7^Xr=?fOh;Fty#ZZ%> z#Y2+dft?j`N`m|$Y{A$5aLgUybiq<{(VB`05KnccKGWeKl>$3`h8p+w#yXk%+2|E) z#+aveEMmn_^^sfsMa^$#w0~5-`jV8yZlS~uE`Fj-KMjc<^0c+%De} zKfHu>jSerUVVb z$zqIv11R+{eWaF{q(?kC-|_E4rc$aCI<7PRF>^%VvuDVUxtip|x4X9yh2(qBsM0A| zzOsJwM{#m}#!{bj#``Cg<5%0sINI6B&hRKa9|0ljY&F`N0fdgDtQc{jCb-7M*bDWB z!v`chOPCLyR!VbtXbd&*gUfFD0ovD)Wqvf?8%Q48QtbeL-%Iqw|6YEByVH$k@_6h+ zs}f`+b=Hs|y!shg-GQ{ZfKQ9AXpqZr%EIP%UA|xgEH+S;Mvp?ST^7F5L~DkXbUX{| zO;s>h<|2Dc!a)}{N)1|W_7EyTMHkK9fc?fZ*#fZ46@Nh&ip+EBjOUnL1|7|3GnBwo zwEQ%OmtY1NdL*iNJ=$QW21(;7l@}Py(Y%l0IxWrdhh*|-T_o+=q3U8E!)Q3A7aqwf zeTjj04^>Uug*pn^b1__KizDjuKI?3Y8r=~{0bdCgefiM*aSSKUdc286Qh3WM{EPFB zL$7lsuME zaMY{UU3`h~SN|Sy(MGh%k#ENmTS8&p;LUh>7*t&3@#bXJZ`ex7O2Ae&XA)*_ z;Z_gdl?%aj$2$$jveb&?&6Y$LrB89^NOT()@V;G?}p)UBbim1XFnrn+09gmuxCeAF%vZJ+KY5&V=fpE}Z+1kxW{=>y(l9_R=8Q*RaPdYsIs7S{`OEoHw`?%}{%VwW z8IcC5Iz;-=qV|#dmQv<)RBQrlfAzQ;y%E=IyM96(hU;Ilbsyq=W*QN?%y{EL9p)+8 zg6NLV02$B5asA_Je%A_5nRv-_X|Z$lnFCfL>73r2+w6osL;`jX3f)(Ts~y@2yXYq) zcIH@FvvN>2UrwDxWErs54;rFXCYVn$WlSwUAUk`>F=MJ>=wXh>8Hy<90(e(P-M00H zc3dC4_sKC|M9HhaDIl6Ik~*Jn#hFFSlDV3*2OFeKcwftxr*&q(jG>u1_y=K`Hjz2S zMDEOlF$_-IE-2I7i zMmcQewK82_PVcIo1t8?C=F|M_KP7T?DicP0hGx#pqo^xDs55B?Nq5aw@f<`1j!F52 z+!V`;4>+2jgjz5v07fvkso9EUHsTvnq4w~cxQ)+ljP&_wWP5{ zTJ&e$oo`-@hXU39(k*QJmFFX30G`P_%6duu?}{4sH=JapH4gn;8B|R6we7UL7S(#W zslpvvh-iU7@>DqS7@&FoluX7G*(=%{q7XA>)Hp{$(^lPCRdvPg(9)oTpl)2h<-R`S zur7evppB=b;8%POXSs1q79}IUpYHtf=~3pLbhrG_t=+Pc@N*nW?e{bhmnr6i1C`mE z^EGy-`#$4OkAPwl5hx~; zeZ*}6#L$(PbJ0sD53jPSQr90y`?NWSW2%O9U1lEdr2_V$p(dc;N%%(Q_82 zhcZG_qRx}icViewiX!jD>@-lyM!(Z`)TLH9ir_@U+e1$7ir48i_APzi{qbcSgM3ja z4x+HnNZU(D5MB6{(;XkF4u1vr(x!;LT+Hc^6D+U0ddk<+d4iw~K*!PdMZOr`Wu@Uw zK6e26$TKu3qy<~Bo&%iCot;AqG-jU12>g<@=}tE8KX7wGKj!aCRT>?Gqn~=w2*e~MfqjjUSne=eCAuGcv8fZ@OfW- z02znLdR3+D6~N27r$r(PX}`41K*+lngwv-S ziJDlkWAD+CP_{O#@@d$aZ0*7R&n;1~-2HS?5*-O?pE;UD8MsT2;_xiZ7VRAmQ>>&f zWHMXIESx9EM3u};qnzRMHjL=I!RhcQc{yn-FlL%I7=omk`Bl1Y<-2?@=}NK+>aMgn@4MC@@O$?!Pdv_gmt{PMOn9 z?A6-gXa_suG4(+Jm>Ny8G9X9&3D&JGa$C5^A8_=lz=*2)=)mh+`R^8DxQHR>Lu!!r z*UX!Y&l?7kasFQ!NF>>@13rSfXk!%_i?aGFH%G~j?Ay1Zu`HB}m=u#s z#&9_eh_p~uNdZ5XwUXAoQ0o!Wg-qlU_eQNS)2L8NM+;XEACNZQQI&EdqcoKF_qn}K zjiN(~q_M2uiarjUDt~D^ULd%3A4i;~;q*1a3@P$R3~sjI_0!M302fCfs9Q4FkXD_h z5y6z3=ZpGS#J_(?lXQ}k?q{*EW!OThWjw~F;{?Lg9Me7Qsy{!04|0wwmiXk*hD(i` z*!}WK*21-^%PmPs%k!BtF0bbAY3Oict{QgSTE91=Z80)08^{8CJ2)~9$j9aajbC0# zC8A$m$?60_@oSV!u0Oq!ds(2z^y#C4FRAVR0IHw$k7K}KYDC3xu>Io0MQrVKNq$)a z8fuAl1{0-gyxa=clQ0?;Sn0Bp%o@7L$;^*5wbqszusl2>=tBu@Q-1+8iM`G?!@~Gy z-K;8kuAwezO$e-($ddqv49EvK-CKahI9Cl*Ye&3|zphnkI#n z(;iQB$n(2ox8OFt+K)&rxDoChHNv;X%{?nl$H9QdrRHC5oo-gU{E~x9s-61YSRv^g z&*whDtT_%+E6Th-*v9MX0?xahOwpCZYtL{`-AB|)QI|k4IWS3zr;>*2=sa{Q`cKvv zOppzeiD=p{im`d_NH)RPSt*t9RA-vxx8E=tI}`altA)s#{9dxZq{Xvna4u6tsym<9pXoxi^?&$Gj3k%}jkhl#{L=Grb^DH0pN zlSljB0m;UrH38ka(p=l4RD%57E=2;`nJU3geEnb-7>N$nG^j6KAi? zi{2U!_^*w9i=5Kg`;ZUh>0TtVRpGQ)7fbO}lq9~55q`P0HKqREPqube-L@nE@kLxY zuwE7QqlBm;@Kf1#s`1(sDr>|ygmAQ33!}@)>n4IDPh^eOoec)aBmS9ZR4JU@eKQnL z(8hbOs&K}gHDj4lM$$`F07oW0t)uFbV+c{fE*vUC-M*(`t;E=EL`jL%%zfD}x|PZz zIsTE>XMvo2lEx?550YZiYaa%wu;;Q3g*YX3%)R#MR2(}8JoMlJ>_j7f1rr<! zX&*E$mIU?p8TUg5^#(&O5MSLFPKJN#wr8;)cO|0LOKikmrv9DNkpQgVYO-G4Iy@TX z!muwg}qF6z@B9@pgFa$WnGkN*bzJ@Ypekeyu^deWyOz8J~07K@ctPp z=4C&74-miYdJ#nGK~@DYqn{Rxg)0oO(2{~ELffq~f_XL!o&|1DhX=9tpmTJtMdQR- z^;HWNQpGTgqhoR`PeJ|r<&^fUOVfY@R`w{C6{y<$fg0v|{{uBlK6GR^?}1WEG|YT9 z5B|{86(=_LOB{K1n&^?+Ed`M-tCu|VICcJAi5ks!5pC!dWCW3xi3aE`!)Vc|YpJbG z%a9LqqNk(Mmhf*zB5-UbQ|h zTmgJu9Dyw{Fh~A;qW_mU(r_i0YzTRvBrlKNVi>gvjr5FrTD9pkY75*EV`4=ub;lA* zojPOG4Ttje`ql#c(T*R7>qk2^{01(6Cz+EELvSWL>!w8cuQz_n5SN)=mpFf zc!l9FIuoB9sQo35wERX4fIA`bGu?&fs?Uh*inKg|ICA(8ab$dKtNM*NQo$+F>p?$Z z36HOFrgo&XsAw!yReZYWn%TfDe>Y_IW-u;vgvZ$G2_MGbzqni)UMC6$M8xjHEk zR8i&I&;kMQP zhjbv%ML_2d9Kn)$p#&ja^4sx99^!J3+ripRPeT{XdgB63#!Bos#T6NYBU|wrc{rN#r?pEag|7Fziy z`2FaQJ~GyvK(qijm_um-z`=+1X;UeoEf&e#8XF`)AwJqr;E08!N+zscQ6PJn?D(e3 zkRq7eWu-TZ>@;GB_zWS-phI5J;b0-EusM>%>5|V}nSxTAl%un|FX+6z%v335d9ID< z;A(c^ubU3KPHwfTPP%;?CJWb_M|4q+bW6BMt@f3xIn#mQcDCH}y z)|e>tZ{3M5;(H5%qyYp-_r4;uEgGBr$Jk$vNCHO0+O@D;D%E}pFBd**wC6<74^Q`D z>GtsEe5XbqNxwj{Ul^cbuP~$j;794N*m8tmdpQ?v*{52ZVFI-!^4{rH3P$F;yTgME z)P!mPwNLt`i0sc`sy&h#T>Daf9m$6ucjQW$;| zNbBC{HD31gL3>WHW$d4d$jcT=d9{+DuThB4?wsP=%8VJWtmN1XVIwJ5%4YBv=A;?kGg+} z4chSoj?JduOgrl=9(5}@=F9Q=uT&=5UhiUox4Kb(-DP4N#WWD#&edcqZ(U%Qlf*4Ig} zVdQa#GiERq*e96xN2dFBcvJTGphA9Ekc2aB7^c;*JI8%Mvua1&!GYJ+__^3?z!UlRMqn zn#y`qci#9Qw&8r*VMymuzn(F6<@oV}8`wp0x!KN+RVYKvGG38`H%tp}MXtweZj5af zgJwjj_L=cI6zNe51HwOKnDt+bwK$ zNA@Ma^R;nrd{2lE#l<00?cHH*pDZ&yHDi%k+L;E1o4qD%G?#==+h1veR~~{;>8**; z5A{2)hm{Rt?IxLAbCoW^C07Z&gVjRN*@ND0LtE0Su|2G3%3;1Wth0 zXVNf{61>9SlXt?6R;fBV>w~(?`w!~x)oY4i4YW*e>fQ~z^*jovm#2q=%_XE^S`8ou z^P6ihUTMVY9B{V0)-WZjMeG9`k}6I!Bc6EC5iK&V>rWMD>PIfD)HjjDV>lBCeWpg9 zu6}|V+&z-yz+RY<88b6B%E~>G;iU{{tqq00o^MT2Hz42nFnAuDTg)jMQ~sJ}di7wW z@Rf^XrRm+|_Ibb^Fis29-Fx@lQ9j}Z?uk9qd~pzlRO4#8caeR zKb!Xz6&QQqTY9>5TLaj~B=Hx<_p>W|g5d_^(=g9dvwr|tiTs7}6`eP|(fTRKe=~b) zSmEsJ)i%FMQ%epP`~8zFLM%fYh$Oaj5kg*Qg1(1Y)&?g1^Tt#yUB}6xb^Jame1>HY z8>y_cT$w`@E$QCK)G5oJb=O%Vd3pJO59p7ove)ozNEU7&zIwaAAil+knUr&yYR}FC z_gUX82D2I%28PqN=5jkPZi!u5y5qa0AwLiYjR)eO**BxJks6LpLzSTW{{->zJBCIq zJLYS!TP*D8HIFY&jVDens{O9oVS@gPL3~S~9Qf)T{^uSB3l~uNYEiE3B&}hTP$-BY z56)JW3F#jr_@IqzEuY{sr=xQp2j9n6vErdJNAO4ZC)X zdIs@FlKvM#KF_~EKI5YskdMt)zbN$HPvYU?%kXT~NBnoB^3qmP7P7!(Hbor&G#=#H zMST16)!a=!jR7e@SOEZAyG2`g;O#PB&$JAJF6^Zi4|4wOfltNDgK6&h_v@u{so1N$ zy;+O-qhA41r8fh}TzS1qOiu+0U7e2958$oi4j12k+tM`#cI+QOb_yiA?Ek>WbVq+- zcgMc}?bw|Y+pp7tdc!WBb`Sn1Xj@MpK-+q#H%M*izl0LRBh^~do&2k)G#dB}t)1Ttx2vef?9 zkNihY@aBJf3B>?LMmU`Mn8Qpuqth1L8UyiQnSYJJ*ebizbBn_1d*?5jVGlULm70JK<#_?+A7Z^^uS<(9@; z4xnS?@Zvz}@Su-cy|M@fjI5UZ;@+2zZ>0HqlI&T(QpLRfZj!d+<}VVRJe(-3;GMoc z`S|qxZ)*?2AHa?DbpVfFXm%~<6P-|cuJ`r#gfQjeqW2vX2ZJ4ysC2kg`9;`reQCrF z8-=`w9YWbddF>r!3eQ1)a>XE$ZcfE;-aeO5^=`A>gBK%TF&aTfkK3V~P*1v!R9qbO z{;5c8VxkDG`0D|qcq2|lCC!}}NgWh_C`f~T*(b1)17=WNy${d+#PGb@WrPA(Lmpjl zSZl|T5JA1XVZhe-0azs817t`aSR`G31OG`)UL-#GwAxPU8JmBIH`D`6PuYUfG90eG zXGhPH*t6bFd+XHU=Euedo9xsnoTl>3A%*qDsVMh@ShAehTot6P|A6n2N*xYLai6aC zaDQ4$wl-TW_U?BF*e(p+A3&1uJacRbqUv)6xxZRDM?I%2?)3OHoTGVdikK`;I|>RG zR$A@$3KqdbFMo&lGW*^j%_T(chr9i0?%Dm_tQ}UG6mBNOptLIS<@M4R;fsdrz+7i* z9M?MP2iOF1X{Um=Umf{@Ytl?ZbdC$pN9ejX2)HKONlzWxiHR>(0Tw8asL2ZwaVfOi zObd3WWgWxnW!ODW;SJ}p!a8E08}x#aQzQ&)!F|?n!Tthl=ntCmo^F zkI&I_jU*I%Ft7gobQ`qad$omz#)%#+F)6oM#r5`M1a_NXW{v6FWecim}!&YJkI*sOSdpLBUR-*hI-m zlC&Cw7Mrpl+JN(aSBz!&w`~Vs9)UrfWm5!{5|w)flHaq|%8KC%>^VbmA8L3-A?|X| zAPr~RWQAr&PTiZfZjk4@*ySJ$BCQdIaIJMydf%oWXb7P2;!#0QjE41qCUrWwHzq&X z8TAR~A7pmnwiRGvqv_h;Ye;5)@M8qf{0w?L>9iq^#OxnaXob4FLbZ}3VGI|jbN4bc zL4uq*WesYQ;L1|`C)4xej8Kz^GE$n?=f_zR_j=!(7x!cX0yB?p)xpToD&*1$2pwjNo^1R zwhSArCLFAXa*XcI5gZPyh;{wo-LI|L&Nn=tW!6x)ReYQ4;Z$UCdT3!#g%2-h3xRuU1b#VXs_I<*f*h@5mVc zz#yR4JR3ymvOE$Wuk$1tuih4w=W#Yc`41c)6`Lbi# z=9+EUWzF?M1Hq2_35SEZg{%Vf2s1|8X-`Pow> znQMawtC?XmJ9=fhaVFZrWoPB1%D8qT3-0O3$<29q?cuhS>)ihYEbjjku=s-Du~}@A zi((UhK#OR}c<`+b7~W3~J&}Fo?s3Gk!@(!3pkBS+F9l2IHvDBMmCsa$g*y`3XFs z0c2@&dz9R-FVu~!$kZtf67{s%0mWOn`66$DUEFLXy_Bn+kCAj|9A()rYBQQ-kr_$J)#+r zPZ+eWVGf>Rm2Jc|XV66Dj@VmZH0enqDd&2zcPtP;eBRfX0ADUS| z0)L`)_fh_><$F=$bx=8@?svGwdUz35+-Wg-sjH{^JHMaQe#6U+hdeb`CcwHUD;@J_ zpxR&Rpr)^lJbEI+%KhWiTuYS!VZ(+zxZPNjalhooRxB~@$1os^6CFxL|M{r*{MGoucD>Y^e!zf zu8nP82pZ;ltGjAzpvvdNhCh~BEvZ%TtrGMoXM>?!yXm1|h?V+V0&%Hz1NbJOO^kIX zXSL4yyfG}cqJJTd$AHOHZS~18P?1E|t*z{iM^!9qh(E|(-}zX-0-r%u`e?<_KuI?~ zPPPCaQlRDiuva&3UVMkJM0e+@V}5$!XO#lFj~}8U(He{Elnd(vwR>-c`!h(l-ADZT zFrzh3$NN57D_u=Fe{A(p-8-+TLu6)eCq%5&s<_R94-KcYM(Q@s*Y^;{4h~)?aegKx zx6#z$b3MH4(a;tZ@$u-DPNuIyy==3+`Jmn;P0@{>)-y-XH{GQEN#exjrW^J2oNPog zq+qV52Q%UBWA2Pu;pR8g+7GyR`3Vww=Tt?%r){a&OCc2Vz7Znw+a=N&3P9G43RXOH zkGP}S?Gj1+uju3Im;voh+&5i6NchgSZAaFZ4A=^o6Y^r_4*2blm6lw=gOPQ=%c!Cj zYMB>`mUs!*>+_JVR&@eX%uJxwRM!a=@v=8s=O5eE#bsf6fTr%c!|NF%+xUo2IH!Dw)4sM;?N74EMi%Y6Zp+$9+7 zQ*i}X40vn>fe^5ePDKkBG4UqPBPH3NbMJzc9ueduVg?t~dPfzJBCP=RN7gvTz-(&+fS_bG;GuY6v zP^=~>+xTf*=(N_UZ?P_dbk?n-PYb2a>`hc?8^}6Sw^&|KF9WGk%=~(lUeBO!wQS8M zg0Py@@yad7V{JIz5XMj+J8dQq#^fA>6{pJq@xU`WpdxH#g?EUep0ruE*SRn zSc9@umi_IkE$gK+-Dh5s_pviaFfrtt4F)dC?dpHzvEDR>{>eserh5y@3=d47xdXzJ z&p|ee#vKrzX^zY`B?xk(E-H9a5iR)NVgW2U$t~xZl4iM22CY6`SITCJ5M`L>6}22& z3B(T@@o0x-5Gxb`Uo( z+mtv*=S1cuEYyKnqs^LkwmF-t3*`clvYZkp%mx|`UkL$%wMXu(xc^X)>mW5W1XAFA z-n_cK`14pmi+ziqV9Q)!qdRag?||Mv9C=nOO7rE$v}+JcYH6SyhVz2^N%yO@JOp?7 zN-u-8v9KM<*L2+H=2L*GtRIBkm*JR6{B9XR4WSj`eq=0OxOy;QU95QEcQ8j9!%Jo! z1iTbVI|^Jq`9W$O&EK>M zSR&x;-9<*_bO<5(j$4J%bjSSm)**VQ&;Hv-ZPhda0)Yn&A54G@6W;sui5(S&T-(Vz(N&IL z%w^x;j`88RDnAF+|8;IkxdFyJ4mSrv@fNDLqC{hKJ6~kzS4=z?qtS>`a|n+8;FAWH z`GCBNd8m}Xn$Ix(H2}7vtlJdqx0<@@*E3P1WpLmx0@W&KXiT0RK$fEzTO3BLnEvVj zyccIY<(6CHB!o$V=S+>q(Xd&hC#n+boh`Nt1wF1Mfk)h2b&elDc)cS8%xzdFkmxwC zFIo+U_h?!~ifZ~}rLbk z!X~7Vcc==QSgSifVVfA{=Q^8P_@NhkcWmOvYiP2j`My5GKaA>kYg$E%>aCd^^qLv? zm?zlu{2qAFBJzxjXwDP^FP*1Oj{G8Z1a(=K-YE`1=S`+;`2XDl~%_8 zf0!!$tBUQ7&8Pb_>7X*-8LO%Kc#vL^rM=7+hFA?g!2q^ES?omr2h_}b1DsMo9&d7_)3!B(N|g%U@JNyZP*HV%7=(qBsWojV zX$Idi3Te;&#)G6&7wH$)6D_W8&sksff4r))Sz=?Pw9of(M31m4Gd}^^lg_;J{ca^Q z(KsG)3aHK41DXbgOsRqF6DbXgcIs-hXcxMNz?Z4rv{MJi$g|XN-Xnqs5InLYZqa9} zraCifxcp(JCTu;f*dpgYfLs+6t%4)h3S8wO(OMH;S3k$m1efo1+sTQO8{ERbL}j$a zM>B=t2ImIWdcepi1^AL_OUg{p5Kam!^VJ&FD|Ag(AC-};?&e?o6=&&YaIsHKG;Edv>lO8!qY^NfZV;U2u-X`Fi|r4U=1N8^b( z=Bi0B!iC^8B8hhkHzqF~*iBbgYYom74d&Pe-~l|h6!+VX>1dE4^6b1P-=OKJOtB-Q z0)opra+{*UmP(bsL1Ee_#=472->70X;$!AzlDi0FR#zOUJCn;?!WJML)PA83uKd{@ zIlzQ$xoV?GGjiYAJ^oJ59PU2V>Kr66GOg{>q3la4xDDA}JbRB>&(=ARPtGQZ3Jhsv z%q}7+nx&Z!+nLh zG$jEbHMfO@T$*bvWP}|@P&E(R_0-~^oEzZTD+ebjYdos~M{EBTcO_r^QyOnaZKF$f zZUi2@4a0S+(ckM6?mv_@Mo<->Xcw;@7lSyj%67TBQ%kSDEr5hyR1W5xx8N~-m8pdQ z`EW^Im`PuhU?_pmUD_~BU#TIrFBcXaXnJ>)ql7LE#UL%!N7L@9$fT1G2D0g)B51Wgxe+$zomz(9{q>a3Jv9zn!0X;qtfqtOabz*a;u;}vIb;gXGaLEt${ zgT3>6to!rnO8%tlNc&TySpr5Tjc=|8po0)s1QjcEjI^a4&yU6K^K&A!w6Tvv(RO_L ztD`!!%46TcZ^fA3{qMI{N&=o7_jNg`$l(rNll#RU@utJ9qOJ@U9FdI0w=JJ#T;E}& z;Hk>S4p^h}xSh7(V4nB{DVWmzD-KFo{&zU&!(z3thU_9lo6iTSQSn8`M)PG3_}W{Z4e!af}%h~Zj8n+5FyQFt*^zu?b;i7@LY%P8M{ zI}tAC!$!CpnGwf&f40&ij=hAmQ!{<-P%_?}O@WLVeYoSqp&ZD$dxr#1o z?JsjSQxxvd^V~hJXTOEI0cshp$oT^Ct!WM|MU7UPpxBlcoC*uC3 z5G|w%y6?)IC~beo=&cD})k9;03HowcIy7ZFf$bf=rXph*9Pz`(v^xW(u zr2vznwiz5jw33J&DekHjvG6{GT7zJt?ycBc_il%V6=JECdG6G0*+U-DLMFwbFmuU}K@P=<~7;%}866Re5Dr>xX zg%>>ryBEb$;^VbSEwrLK>3yw8feKC$C|m&L1l}H|+^gZ?R(&te(3d*R55IVx->JY7 zr%=}V&+U~f-}7E$>MlO3Ka~HX*%$(t~{vQXMN9Qd3rJ{PjDGu zgq;OtQoi1ck}%@kQBXd`%R%<|AS1v@yUbf+6b-jb%gmTz$zJK^VoSm8-CKl66TzeR&yW4vby)KNS|%zNkEGLu=d-a3d(x zVNbS)kL%27;ASa&1 zxG@LYjkqPvsPg;=CzTNBomI)_ASoP+XjFGL%Dp8|&>$u!KJEM`Y6|M=;WtgknURcZ zN#;OMrC!WW#h|YpPG~zd!af^56HXE*#iKd$NySaIv)x{o+4INCXi;R<6^Hd$LVNE@ zA|7pM^C`D@?rYd^rp2g2G3`qgU`!4{?=G%g7c0! z&=Y?Xzhla;8xmo%9>*BgjQY+dqaeiu{ZeX=LnB1^TO zBEKO#HB&?uFBSeCptKc)^^5>dKD!8q7_+gsR=$ucp|-1hc#4F&QEMTgsd!X%Id!&luAkHZnkpe zrDq(sa}@p<%3M@_65*tGmjco2uo5yu4m&S_x4Se|&aQsw=1E^W*~8nzN449 zfA8;xl?{@ferUk8pc7mk6tocc%1hxd;^Z$=rR!lp7SP(vUgUY1EjZ*pDQV`uy7#ZQ z>R(tZ84W!nW}dBL(Q<*=Qh#*EK_1JVAHkIsH>>XUPv@CC1X^UaK`#3*g^C~8WS|D; zl@WNAiPgPK-jyWlO%j;sTR0E6`@&d*GAI~H{a|Rpg_5Q0juY1duJAeGZUAbt7 zYfs3E+O$;a0YX`jC+OBQz|FdTDKBbzir#U%z?`aa{_)SxMuF=y1#tdoWR4%NnX zU7GOB+0nXej1r$bN^j`kdEswOEB{6^LDv(r{N@__-*I4$YOO5zqjtv=$-}p!s}TPn zVE-!;%n&+E@^7%7_EG~zo*f3Rg*WzhZY-Gl&iWtjIMt6Girr^oGQkmgn#zp?B=~X^ zuC0Al?s`i6y21~iO$JaQu`LwU6ugm(;hW=ws)duPyr)UHwN8;28z0}?jJAKtOJGs` zei~N_cMVlT6go2Ltiv*)xq+y6Hlo3Z)_i|Fyhj0ze;_#tmQBJ_qA4~QptuMP9VhEi zAuY;dqOqJJDeaCZ>h6DEni-`fAjb`@@;WubvNoeZB(%Uo@ONr{eJ{CG9h&->T3qa0 zu|#*M%AN$Xbc{~?S*%m0SLr8zg^6j`M;WcT7=HIcRwpo7zb~3-!ro5R>`ca`d_iyUq;r%2dt<884I42Kvh^2pJ$ zW8Z_M4#9Q}Tl5SrJMJFR0KsM8m9UjLlyNxcLdbmu;h|Er)3vjmbSRB3;WJHKn>K?No;~w}J$@np{=Gl{qySpc z6DFpHV~lx@o(f)D2T#D2FY~tx&qnj$wR=FF%kAZnSivXr@@2ngz|({#xoDosYX7c@BtK3G`N4?B&_Aoc-b1EDtmF%w*$m z#fFlWq3$q@&89Y~KDRQ-dHOzHOF6%=X^*05oqT~LdSxz4Fg@a`r4mQ(5_iiVGqVI& zAaDoOB5k7Vr6S%IJ>NVjvVq5VncY-nXLkhG_zYofy7#ra?icbuT$>-)L}{9qdbk-C zi*%y|6Xey_RCXk*&jecvlVN|W%(fj%7ikIT>?3IdW196#m0yx{0@}t(TWn!1C1v6>*?tT=l zG%$p3doFzlW_`EGRntwqGEFxnT`#Yr^Hr~$$<-^xLhUlkaB+*~+nU;sjmc!gVo{W# zrD2QchKT!+WRDz!9_MU(()}Ni6j}@#m1l>O!LF6g*73c=k^c1Ynr|Qe8O+YRW}A!L zW~wbLsO$lM{BVy#ce6Pfk+(QXaQy6w=FwK8FUyfYpS%?oLNu>(@~#GS)Zo$=AL*;m za>bKA$zl8F=f}!ku0wcLeoc@W%GJd5v53ICFRc6b3X^H6K+-L2jQ=6)hMX#yOI7oo^T^&%I!unqDkQ1WK>xO?oHVZ z?@3J57q~#ZInB~Rx${Gs`URfvDX)Bkbed-N0XD5Z=|Bq)%&+B9!ubF;*=PR^6bzcr zwkPyVj=b={Sb$flmMwFfWgTTa=#dErR`peiE4&@g9+^+eV4f0=BR(F%xz`6PnKsRV zGUF}?(_)-4jEuE9mbUAioTF=Om6ah85NwU0QnMA$*AWW|erQ+iAR}Az3>_Zj5*_5U zbk@9Ro~m=T+k54uK}n0jL* zIAr(KUT_xcPZe84I_A57TK5Xxr5mrFiFT#}vEMyN&B(JOlOxMx6()F%J*D*p3f(vU zO+in2#i1g#YM*SALSVg-$I*yAbiok8_D{U1$kG`cGoL3W2WS@W%)Pq9}PN0jA~Mf?X%#ka`$u6)AF}s7U=mU6wT~a z@9xkQED(FwzWbGi{vRU7N&JO@9vApF7qFuWRP~nf?W->M7;aTr+3V+YnZG&a?BL^k zA-Z9suvk7}-5|m|Mms~b-^Z+-Li)DlD|Y3I42Visrw3uPQWK^4AS~}Xa`#X=HS};i zLm}rT+}Gl#Wo1&8Z}N?96BUbLU_*NGj^M>Eej*Q>!U_%-b55!#WJK3cOwHs3qhzx(RXzxf+V zQ^YlFb?!vnz|Hvb`Ex&u=@iOy)SipbCw)xOftZX&6I=~0Pm$lIO@C*cY|gKADwILN zaq4c55Ij8^tws6dX&}&%hX5kOPY)QEnlWE})M>zXoeL~LG5Gn0I~!O49Smk_9-uXX zyxuM`qAH_Hw{%T!&uSoy#;ehbaA_+aeb?2^8sGhn*-NdQK?a+Ls#H7uY7nT@W@a8F zbDb`x*vlJ@m%TeJ8fCdIzLz32-*w&-Em<_gUjBZwrJwkO$hUoJ{P0yNxQsU z+&#C;A9)IICtZz$9Cp$aKPAuD_=}^e7T9NJ!=`QJRknZk!=F+|Qz5n;U_xnEghxZ-B4-Cfu*0osky5>C3<2-(1 zxL(w5?&k(+AIYblY-|n5x-NGyO6j9E^a*G)m%NMW_Cx2-%Eo!ba@yVCon^C`M;spe zhB5M~XQ_=r6z_4QO5ItCJOks4X_nI{w1Nq14;!^dwrH_n?;t z|KPAs$!4c2iw#kyUVEwbl)>)W^Liws9kuHNVS3lvzQRdooYQsS zd9lH9%)x0%ds{wLK_;trG!W%Cp65EuQe7*eD zqI=f~Y*OgC${Go?87t${lOI=C#xX_%{_B?T_r;}#0PeXxHH6|Jk6}^tpF#zC!)i}u z6jRbV_7*Ihk4J3Iw@NhD2WUO8D~phHpxRi*6&B{7q52ANoC5W)#eyY=esYO6QhMxl zF8C96Kgvk`?a6fVdo`Bd3X}!`&-BI03HWc$npqws%!h~L)aR;(J$NG&`l9|vg7L9w zwZq+mQFVLhKmNS~Js;kvWPsuY|&4zg|Q zr3-9L6e=NC6G0VSj=Q`}&4xF`eWs13rZ2ywp#gVkyvCZ$3NBv(!z7o+x;mmz9?wyHyM4|R1bt` z#P3fFb~vg3^9^i#;V!t5tcXDL@Kc~-A+K`&5M^4whzkt-=s9F7j_)PQlP7w2b%L6G zK*az1axh0%T4m)IAu)Kw`B>HxVfJ!u=QItV?ajLlF?t<|PI?7QnUU=j-NV-=F^eI# zFW3bLz@5oQFdsx=Emhi@%c%oK@8G3mApf;dtl^~ z1nS!hmG9Hm{^BoMA9TkWrW+~C0JQbCdiNx=WA5<`e*}9RFVEz>w`$^%fF{CEQ#!ax zsTdjqsd!49ypJ6YWLD#)kF?PY2LgXDl*gzI=m)V+>K-BK=qt*xn90CfnX7@@Ec>w9 ziKQCQXcj*zIr-J%WV42#=#*p!Y3jg zcZV>-B_&bE?{*8`BP(laIk!Z<3`&%DbrLW8hA}!D$AyzC&LOLl6?p)ry=Uc4{c3!)KDhM`)%pVk!#r!OO9bN?pH zG}NT&bAZ`aBKA=tr<|1i`W}@Y&vYH( zHvh)M7>Y4=^=fp1o6i}K>kty%`}hnd`GHByt*0P=u`#Q*Xc9*nl5gtnlT5zNC1dYf z>u|c$I?0W%+_?ZmMj^wa7ak6&t6No&_VbhNjMN`x(##&#iEk?=YDpH#?Q`CC9_kxRS>BF#GL9b#uCto?Y?T_u zsESmKT)WbN0=3q&*j=pPfPH1u~AjAV`+{=fe?OxUET6R@@_AtK$)G z1WK7iezk;|y2kHAP$Gn=n8y$el3V^wx(*7W5S08`QJ?x5i zefj;ubC=Pgq#b(!HG&}_56t-JzpP$z40xxQ<72DGLDnOGRwu6Y^( z$nK1fY4vy|RJ9FEw0e>?vC5)O-1PUYK76 zmUBYq%#(53BpP8&E7mJ*d;m9Dt@-F@Es-i)Wf&DzkGPK=pt z(|F_Ovm4j{5@xctP5NRGdez_7NdkAA==eKvyu+eL!TdyQU3nZ;vOG+Ma6AsV;z_Q( zIlh}@e0QWIv5+2x3~-E)Vg0k^15S-*zkJv%-p9227th4OU1xS&*8Z zm1lc~(m~qeVyNcZ;&!Q)?6y=h|K`gy@jOk~axuR=Fak-Lcf)dh-@GTRz1=G2)$u9S1wilQ5#%gN)>l#2-2cP4O7S7*eQ7>lcpctJ^5bpK`-@gsI^mPEYu*Llw~4z%rjNiNIn-dqgJb@DZ(@+0 z-6o+nBD?RW0)n3wg`5HC;ss*`2h&KRVVx1R4DcR;KtrR+po*v3@jUut`5 z(i?BwZVl4E3<%|)Ff9=%l;wbRZ*^zveoeq{Wf-|J}I?ek6e1p+xWhv!de zvZ%j+)`XTl-ci$ss0#>$eN7HLkIGElHwpz`D(({s-yZh49*?^p4ZL!%Y+$YjaRA8o z0*{D@1o&SUA)zshlo?2hX2wH4mLKnE=9<@1mrfbiY?LFn`iU3$dKgyK585N6?}B(UqEG@2fvS_Y1JSnSN75L%$5`)tMS_I*}-Di9|;;*n2ZcIu~>uBhXSx_yJ#N)}a z?mSAg?!GW{U!-zG1GfjBd$Pt?M4)JeXNrJ$PE9m8MG(*9a@*#YCKF~|`5GTqqzN>c z^6ihJ1}4E+TnD2diJZ4$x9)`rUl=p)eZ;!eG3{MB3rYiOQ)E{QG?1bD8G61m zs?Ms2XXz%_faS$ueqe0fSMKG17I4srJjxBB*LcDjdq~rh)$yL+K3k=4`-B<~^4xwh4fznt=5PdsNLTv%%$Yjc7NV+d(INvDuq6oQA_; zP8(Cw+j#_)V&%1uZ*Lv{Jx zYOFQn;NV}SLc^oDi>Aw_LdVB@*kmk*&t|U2`6tN?X zxh=C`o=j5}BAVZx%u?g=&qt=znCvakXxnNuJ4LHKm?zWq7*#ZB{M6%A6GVz*zXXxu zzF0>mQxlUZ&yu*Qeb{Mfh1B2NAyl2FHsOdv`dS;dswgW;&wr{>Ro-0k!C;!Qiud-~ zvY?kOXiZ(gVPSD;NS1MA#W)~PuS;&AmW>!mTfoIGt3mRhp#C6-iDQ3voHK#1dRh+B z)@EIp#%|M_vio|Mtjy5dl8n}b(4pr({op&c3p8aY7=O(A@1{)8D+K3HLuHv16q?4C zOHFzQEx4LCW17U&ReFgV(5L5}52Ct?OGU|5C6wIt(S=3bs5ijgqNJ=rbwaIsjy|4u)(_)`u!mek83aaPXEe38Fcf`w5E^ z=a@Aj_Z0*(y7^`)ceI9+Yg#^1VKj_a4H&q)846GFy{uXG8ftwoQRkC#R4yY`U+2O! znUsBJ81?LfmC)xqi}+rwioQF>j=g!-JVPk+g#Ozsoms>-H>pw7r=K0py~CrUSXOzj zjNR)~dM-RbsPa(F+h=pS7CXaPuV1{o4-Wdq+=IAsfsJWEL^Mr_O!6skp^I@SYEdYA z@se!z>3wsT#bDH9a&eacv+Wbzm{`{CW8H5`IR}x2#$^LZQ&cWAtzMd+49R@xG0<8S zs2~-lF+?;W)FcG{lgha$xjaoUNi54?0_y$3KCvSUtHugMcu!;F##>mJIJq%J{TfXL zP8Oq`;Ok|kbA8PfAnfn8h`u%%$n}#j9ZiWY~OqZIK_mR_!m;T zp)kfl$b#&7cL@t%h0=fe2bKOZ3JVO^MRuGrU!NT8XLe{2wTeWrL7sKBj139oTkyp* zpE6NLu$W6KKpLAzFCNJ`R9sSDYhyJdy*#!xZfx!)zuGL|Z(P}mw|r;H_|xfkWVrd1 zA1pE)rppv#I1x)y;42ycy-IxQu&zo>QTD<&b-XI(O?o23A2qGWbm(@ERLqSGAd*atIt-A-h7M3NWYR!V7l{8@VzkIJxZB+RB6ag8z8BgFr{IP5t$grQ zEI_yW9(~G2EdbI?lVc4z<&<0Yv-RDdF9uTzIIz7ESLlb%G4e@HXE)^z#j4^mMEh7d z=MB{1I3gkUzHZ!HcHeNYoFBVc_3_2ZVJ>_wz3U%i1$}hoY9Y=8{NxL^q%i#Qq6K#! zt-;C#g@Bh@hFMb$U+>!{-RIUg*nM1Qu+}xaTor@4Fi8w!u1T2j**HNpZO`K2%A3tR z$JtJ0|7>~1OHFP=OFGgmBlss9`yI3fT{6>)p9^a1fXbC^od1%Jq~MQF@g12>G0u>! zB5^tUxL_m73@e~)DX_ks%w^Mer~A{K+4blv@^Z@E1}n~&nA{vhb#)()HEwwRr8q6< zhG+sF4+G`2;^|orht{wgE_bz44^KSKbafP-X~7Y3DQLTNs*?k8rXO0v{%>)nX8Ggi z@@H`0s|8VbmM)9+!HeS)-3m_VLH3eUOaM6NmVV)3)Qn-HRX3NXjOL(*R~E zIic!Zt<1b~%Q~(?S^%+6{Y{>Etkmt$4`6tusHmtfhZN1D#L+1Z-a5!UeS2%l&~U5= z+Y%3X;5m8qe)u|;nrgY1X#jiXL$ndHk)3`KwCgw%~JyxW`l^ z?IgfW*vf;L?=WGQOlP1^#vl`qQc|>m5M&j@hy^$OO}zN6f0ePgYe+jSFeUqo`=C8u zTTf+h6l0d>L$Y`4u10W$V zQ)W%bKNnLasJOk={^rSa@RmM&`QXC}q)iNjUHhXpKvC+>--Uh_gNP7`GLMIc`N6Fl6TFyb3J;K<0ryy~ydGqly!#Tf<=b%ytA4yU_>xy3Pf9#aiBF<=fz zlz&Kh#51fr!jN1npRY;f#n=XCV! zKvT=zKC8HYoEAw+RPNi2;K#)9D= zRV16V2>XQR`PPso0#8Dg{9%IOifO%oIjok`iHz4kmU(s1@TV+uTkjdrxsvAWoSmwI zu{8IM3$msDB+jR-ONmWl za_yUz`$I^WlS3oh_S6Gqw3hU1a~I9j8&pEC80mTi<(pM&rlpJF?(3@jkejoBoVUkKvE0a3HYW35I%Lt_ z1!k0mE9r_TG`tBnyQ_|-d{z?@m$Eh}(-bOB#Azi{RSziG?)e%xR1)#Te%NZrMT zAiw%Fn)48)Qv(;W6_}#{(!ZgEz~@9(;e|7NTb7?-JfjoFywTyAG>5a@(oPvj;Z-+w z&G*Svm7}Jn$ycZs<`si8ym~jBX*V+Vf}xnR>SB-JhJ19;3c*`MxDe-07Qmd1rspY# z!%hO8&8-oORVB>yS2Bh^Fv^?hm|JB03`6eL32}a}C}fUj87LDrokrt|_#?Fn48}0T z1Jrka5tCjvDda z5)*p47X@3kqPVdztvfXHrh){C4T#6nI|zq0&6rGGjtCpW7Lup>63PwJa6A zH{^1&_g?l5HsK~&yZhxGM5=L>IY-I^YVnXRAx$jw_|Koe5AO0#7o)V=mQ*p z%OPyDP{d!9{2YzvEmY1h*_@9j+CFt?uX%+k#irbnrJwW$s|0&svevbz7YV&ua{Np< zLAXxa41Nk&kE3p{h8_%M7@B^isPYNB#d~Zf)oTSubiUq?Y&zD2%B`|GS+*Oj@xA;D z1e;85%c~CSM{sMDs62H_$!*`KN^|)078-P1zfex-JJI+ zUgrr5RTtj%?4-{cS!{4wEZw0bGTB3x$NF5h01A=GOI3F z0&dVmDav8iD|m}gThW;3mhbej;y^1G_fNcKFcd1nJLj34G4yC$`K*!P_`Z2lEtO7R z!nzXJ_b+9B3y;!tOVe=rst$ykA-{y1VC^-VZH~Ty2{%E1!Bi6gjsW>n^y5yY+jr!t z&tltkkv$sVUT`0f&aoaLNM^{qxajZkLq8u0A(6S}))$NBuVH^H5dbo|InrgA#`Nb$ zR7&i~<(|myR$GRZ$Mc_zJflQSgT;^N$lBtFFUxz++&z9OWxrK&$Q=pr}4b+d|0no9K=6K1Px4l&2fhwT0Pyw^xeZFyH1v^U&XYoBHk13_@x0GqiGl z_%>OGrH;3-d^{4GT7DenSH?^4!=L9fy+PeU_l z4@RHj;=Wwoq(;ae^L^TN9Dh=QGs$@5ca-ExQ=pxmtq|2k{1K{OPeBScg*ohL>mKoJ zIT~-UgJy{evJV(dyYZqFxM}Gg6fiOCy(e;y2@n6``{}uRs1q7uqjWs{XnSKlCHrHl z`GsBRFo{6jEA_<1*zqUg6hCgR5&W@VwIk5PfM;NqG@<6w=)fEG^0U%El$#Dufyl$+ zexJ9|`;&Q1r1(J8BlDDv2)p**7$8kP*23Bp`OkUnHR80|g{* zkRAST{9eWO;Wo5gBEhGX&8@-;MXv?=+`SOe`fEWehFZZ@ru<;qo#l~0<+!4I2_hs4 zsU2Tl)*pwd|PqDAB%^pp&+ib0M7Oys5i&$LtYy}iw^@uBq8v59+Iegrjtu1gn z+G`D;dFRNrG);RbCjvlYu??@MqQ6v0xCs)5Z4g<3e z&W}dj{EGs(h{QYFNDOx1;;l9&nF5;J({czzP+XH;YuR|HDaRB!l_4m=k zuY??JDCO4i@%LaO$Mt)VNnUK^NM6I-ns&zdKbOM+>L>rFThp_Y3$riudB)EPA&e77@a z41TXNA0XneTW>i-h&{o16`9s6f=*`Cvzy-f((3t}_Y)zZgBB)_e@qn!gx5i!tWs!L5{@XOW+hcR7=a@>zAsH_xve|M_H3 z<$VSV!ocuMO`IyLv(0RqD{Wu_lv%>$P~`Ew(3Cth%Nu}(eX++uA@ou=WQ@1WNqGU` zm{Tix#}oxg;JG+@DJNI$*Vz&ObMyUP6zdso_9#uga zoH1qxjCo3rj-eCpV3<{NdIPVwVV9-hX2*YR0y~<^d(H1uVtWXw>7|FK_ zw&Vful0;LuMh;7dB;O9CNGAT$X};>X*I6?DoUbzj{M_dp0Nsi&7YDDD>6Uz9J&_xK zz1c01o4%9O@@=<8brxM+53p%EgQ|D!jwtg&Gp1}9=-S!e=nNIp<~hf?Tm_q}8hm!pR(qBIvT^w*_%^+5r6$zL!YyAHG zrNVyI-!BsNH+Bg45x;1T`~TxD{I6Q2xAF_{J90L9GlMzY&reLdT1 zlC4bktN794)oGUx&GD_$U#jY5tvR3q|8;HudD%wK!Ac-Sx9>sbyLGF2YZ!Eo1dm}b zSK|%6EZ=ez=ygYSNrnZY)*o%h(^SkQQCIK8z0M(_1P!*WT1WYBcN@Ycm29 zLGn{>AOnPu@NzleLCwL*6u!Lj3SnqFOIFt1XEtx+G+d0;+?D7z+<&f1CCe^>BH>ai zVQqMLIMw<(4R8&{O1_fF_h?(`@o-)tF8GnCp5OKXI<^@jlNi3#%fp)LdYby_`xnf2 zJq$7Eq;B#`^zvFeG2RFY%b+nt$I9w(m?6s&6K{DUkuoU$n&SZ+XA)?YrF7aV7o0p2 zDuID~z?xY(<1yiWDtawLW*^zQ8ptTQJa>B{DcsNKx#PVw9Hx+L=8 z`xoo~jpPe~FI=||OF|MdU3*;tL)YtWzDuURvL^82qX=`|JzgscOGx-q&(cm7LE|_R zMP0pxbA5@!3@Ollstw!S+<2Ufk0S)C495yeVR>zf?Ubv3B?&bK#~qPAv~*zPED)CA zElL$a)TzesCzH=@Sx)^7zvl(VY&^v-moCFb7-%iA)Xl;;B818I^7(uD7!S>owhUMX zwq(J`#mZKRRLd^mF`q(E*8hU*lO7KOgxcGR8Jwl#F%b^tY6qrh5O^9%%vxL~c-2nn z!L@)G6B&7C&>G0w`E2e%zJ;bf8tf0RT`7$?53oBNv!>fsfe9G?axqX)r)!syNoHRu4ds*D9&2}nr1bk^JX3@zK}A_;p(bHGJkXjm(ANOf>MDS zPVu`J0g}V`#Qf8FQy=Dz*RZj?4-e4{hBKctVTd4JFCZtAc{mj%*hmIWT7~jMr!B%1 zWbM~sa!fm%U+f>{|78FA#Q^&^_c!)WlV{`jH~IGyiyCiR5Clezt(JTXHbtpF+igT< z9l6wcXqd1-24@B;M20hfT$`+rjTFI@j!xnenIgZ6*KM9YSc%8K*b~i=2`IK_#Q0oE z$HMYejVSc!qZQm)387`w?yR$#U*A<>KmBEFBu!i3B2zv@V3vN)Bc4&S+K)o-S=JFC0XL|EI+`&_6HJ~} z>9W?Qr=c{I5%=}rapnBWc7iDh@Y(mbnn0x^H|{-$2#o5Za{0LnrTSR01%==16Sy2s zw~7r+#{kkx*IgQ}wJ&r`_c-jlA!dUyr0i!=YuXP(`J%IYe+b$gShrUx9u@!M{uo-M zM5Cw!Czv^@yn1x6ECy2r)qfF%%@f?=KIY}(m*s%#U2AvC^R)DA|AM$*)l=1dDZ zqAS5|?IH;K`UcNy)87+7m!?BBs10RbM~gj&b{(%UVb(C9>i^e=VzdDp;dMIS)jlYe~k;*8gh4#?w>RpdKFj%_X zIOl&46)$`l^pFp#*6f#N?2YUx;>~8$mo$1fS&m-D#FmA-Q)Gf~gBRW9d7FbrqJ;GV z`mmN+Gi4P~w57|u!nri>iD(Sq$|4yHUgd;5Ypq@B&FepAVmL6(nZ=cnkV|-G7fF6F zzEh$7wM&01sndX$7##Lu-s@^m3BWVmX5)whq9?JZCOy<$+&!81Cb=3I) zNG!FUoH$IRy_Vr&dND#v<<-bc;?Qopq9|cu;Y0DQogzM0w8)O!T5U>iG6uTx{h&+! ze7~KSJjyu6b?4F0Nh2x8%4Vj{lV%>@+by5(>FE|RCB1=(i_Y_cQa`|*k2l%!Ib3D_ z@!b^?01sa27R-PWTe(c_UQ?VuO#NU&v8{5xmu&<*Nc)7n$e4zas+SU;H?X z)%}Jn66h*JuK>m|yif5M(pP(EckaIYKz`j`>YWgeX4G{k2^}(pCn$7}2wiwO?(nFd z@E^T>lTGs>2$a-*Txq8D@Xr_wW%toNqA%mNaas?m=&Z05pf|`jx7iQcq^s`P8IhhU zw}=8GYq@5Z+w~WgNUjtQ-TkCLC7x`_PmL9~-Y|zl$V_iq94Ft_1^xC^212cQ)NtiC zp=VR2oh&T1k@SQbSWcMlk#bZIn^@}4hN(m3g?e4wc44d_^@p5-5Q`DZzmbB=f02Uf zg0xBvnQ|sSXBnG1rJ(q3QOtnyc_+&+5&`CRpx}D z?=cvn%S>~QzR#b|Aq>=XEP|wNt?R^glEqIV;lr1)%$}F(;c?ZH!&mR}f}cG2;uS>> z7ev`pr|QD@KeL_@!-Tp1C z)Y6R52J<_4EP20;mAjR+BGuYoyr@SND={oc7Tcn_9Osm>%7jw1V(t`}zG{1yYfW_J z!K@ygBhTaXoHUobXovJkL$*rkPk?@Hm|l9MoBmX_UmHx5&|p5sL5d0{y>>wlGP29q zC&S$Qe=Sz;eI#DCxjDChjTkZ4^Gc)DLZ4i1m2_c!wK>^B#ZObYzgwUD%{EjRk8e2= zhwEbPZ5ej-SJQh>@qUtSy}Ue;9_3Q2wwIDWWg7X}>%5vK*&gzOA)7@-eNImS@8>os zPIfkZ;2PoLm;Mjj@UAxu%{48E$_Z|$AxS9?#*fzo2UP}L9`TD~snIIABCbI6#VXr8 zsJ!ZFlJmQO-`2_sPtTayqn3By5<{O;Otq{g9WubImCkZV06B4&>|mDflU0g8j&*6i zj5C#7{uas*>6L&JjzC1S!Lu95xWElQ=XmVjZC4^0_c>)PW!g4kB=qc3%e~KM91Yik zts*&Q3lR}{`~DPHzLfh@Tv>!20yaXw&6T}C#C#%y6kl60w}bsr{OCQ?mT(L2g;7lJ zhl@sJu8Tc*&L(E!_#OSWmilwbZ8p1&?wovvk?14?10-sgzY-L4zHc{HdA;8ah50K7 zFpza{DR$d3G{>;q+$Md>Y**A;Ip~=$1LzW$IA2PM~ z?N3AHlkxtq^pa+QTZ+Gfxoy)`df2#Jdc3cyuzc&U%d^!W4ppL~1qJf(rbS8me)nDu zZGJKy>NTw~7|KcW1})HOmOiGk%!}ml!%$*`O;1ZO$9{fy z^UH31#VEC^0G0OB1oW+{hw_L|>d>G!?LyCf++umPhq5U29X%ur(0~D_t$VnO-VrxPv&ftltNTYs9~5!vv1J z7xU0LnZNa7ex}BG)C~g}KUe8#sNRg99_4r8dc8cq<6Z^XH^{nLu1xCWlBN9lPL?S! zBn2$xBrD-!5cIt&HTl_IhvGAX=%3biv4^>$fsal6*)o(o^k$X2#|FW0lPU!zq z7VzTo1|VP}58--8AWI#J845K_R;dG%RcaMzFIS;KX(ArDmJwAr+fu=7l^IEDDYP{C zRc({6E-p41UMk!^piwAVz&Deo-FwdqucBG1zWe{XaN1vnxai{07Q$qPc#r~%Z; z<0dra>MfY8(qRp2meo|d zI|8@s(T;OH7y&Ip!!9y1!pEx5J@aU^iL+Q>gO$isyh*Pcf!7^iirFE(qjQUG&ck2d z+u%>c6Y8Csjlm<6V%Y~f;t$MlzQUFb5dYlju0Qf%utYiu0d3XeIuI#(!Z0x^g?+0e z8xzBKuA&ZUUiA-M<$ZZy`^UOt79ypabzsis#UVZnSM(DtnyLqB-izF-{Bw2+SroWf z59W3D`bA&OKF zKnv@|>HSSEj8=MmUq;}iOIdT+`+*_liS#N{85#{Q)f$qejqV~2 z{LC-LaZ|bn%zcHhTmKz$%zpH^?lK?$y4PP2cx_*bxv={ZK#@6LdEZzu90SEF4aLAZtylwr0F}u^Ul2V+gtMUn z5B}xp&dXceA<^PR|9K#*5cj471 zMV^=^@y>KWxh!`@+rb74q?J2~dr$3O>bc(IFrG}mgg|(~yduq1N~C%m8@Cbu$(Gn| zZN)1zjE)az1AXOprtA2$(efKf-{z>SK9ZVx{S>o2`1+!%bY6EA-|e(D*&y5t~$>4*jKJ_v>Suvabx>ztxnJKhY-f>WqVWI7JDm z+o^!q_hYci-sRb%hVdN#_p>0^ra;`PkGe%f8d%qQtB~?r3X5-Mx8#3FDT^-XacDEj z%_sEC5h)!$8&nznHz{Qr>%jrFjoZU3R#C%_|L)revK|VJ$~OEMWU6=SCLR!wo75)yxMXq*h2EGfVAr?ERg^@Y#j+s+ z2^r}F1Vf)dfqavE(ajxdoIYj;I+C`*Pt;+wEdciY3xi~c{}&8WZ^20E)`AAY)03Qj zs99QtPDLsSX`6NeQ^u3E@WRhA4ySEp(?bqIPncWdnyHtB`kTG)@wgD2mV8SDT^_O! zAym}rdD8b}dF8Zz>t4mS5M;C@tOuZlj#@NekMo27?2G)1$F8Nn4U`Z=Jl9@ullYcw zok{C<ax}UhjQ*BNi31{1)ihR|;*o-X4R6T#)dTc#?kz{OwYZ3e0bXBR`lk)%WBMlJAg|K{Jg!|1$Hr;?+K^aBk@NQTV#@Qc#bVuPLtA2FDNNIottxtUHh6S6@Z(^i6*Dht$|*88C7==10x3Xw>)w(;{jvy+von;w^e< zEZ#MNE#i5NU)U64NcLHSG>2u|h)&haVFPb%6IPyBMANgccJM}kV5#et-E5V-QR_fw z!Fs5xO+wLwhE34qOMd>r5hcFmPlnQ^zd`hKuo9(e(02`QAkX~fziJY4LKZ51biX!H zU@D*G9}vp>acYoqOb8XS!`@f8alzg1re7V{pakox+VFeD#*Q6bT(TW|D&@-G)Q%U> z4hCpre3u~L0r0)pgW{+|K4L6)L|Z`}j&t_B*Vv-j@n|uWapbfOKb&$j$$v8(VSI-Z zH2DixN7eZ*p5W6MSa-B%eJr@ck2E6p zr7)iFCyI(aq7|>b4>=XPH}*0K*|m4Q&^_<6GKDv#nerYNS(56wQ_Hc2H9ovn<+bEy zso3uDrjzqN(%W_J3fV~2b?%znDaa?0(2y6yc}yRLpNNLMg|3vJRXbUymG9RsN3S_! zH`_ui=PV{{#Jk|`-9bVc^?N*7ce&Hc<+TV9>d8BsYN|SSfC2fDt!>4okth#5k^A9Z zb8J`2R0^_?YbYOT6#l#Hasu(Yp;{E2g`y?rHB)__UZm z3PEvO!YU8yLAAiJvWF@HIgi26Ze-N0vj$off7;R2$#QkEV?hL+P-2ZB#=Hb}1LG?1 zBeVzFv?{&KQK@f%K(f9cT+D-BiSP>AI6f`Sba_!Zk`7PT zgol_FhR!h0C~T)*>BtLoNUH6-i8c^*?8AY}NxMXggD}xa3{^eaIG6K-nvGu><|h+b z7q3;G!*Pct`+^ zg>tKdeiMyw;K;EDI8}}2qLwu(!kTx)lAJPQ1b+X?V2-a<&-*AwS+XmL2h#jzFfrc& z1~auJjTt7Ae5{p_^Fhq4u1O0!ENaf(@b1DmmcaE9PMI?~l-p&y%*Mc5HJc{xAlsab z+N8OTNUo!B`0{5E1HN1WeI)^VYhg7;$km5J1=Y2oChgQ>U_^N%NSNj34_AaIN6-=F zGWar!%?84vs$)*ptc4@Yc<}zG+BoH8Rd6CZvpza&#&4MUx${vhxpdM3_i(vJgL@7_{KLB!sY z(#%uw>f{Q~`{k{PU>dBE4Fbg*cvKtG{;YAo6b6UcYb>pd3oNezX0s-3o0r*(6;xp4 z2mK1vcL(QqF0BH(4cw)$vyVupOQsZQU{n2!#+RC&?;Jx@dxm(^i zkg2dO8T&NF|LAfIZ+&o=W}o}||(Y?@14 zLHfbxy7MM8B?zGxtB-$k#PlxNTB9z*6so{@%518%(|ruX9spw=3Wt!{D;6gqFxT`m zVfn{@Lwde4FK~O*d9*%C_C|4OjH`aXw!%DDq_h6`wT@yFHunx2+ z_?`CFGpYu2RCF|b-HcU+syr`!fh42x$an(xr1Jl>KJGh+`S zR>(fg*JHJ~y^a8-C=dUu#PLkuGcRdv(WWM!lP~YXkNtG4gr0XThPvACXsM1Qd3t0E z0%_!PH>WrpoV>rRk>u*xG@ltq_;BbM8HIwnJ5C9+bcWE6#fDL7u60bI9dXDM9rv(h zs9w!^xMm4{7L6}*=Js%V*O7idB?}mga*Rmo0}~`($A6nJX=alPl89$V+Om1S`ONHd z$r`R3`i9@bF<9RUSSG!Y)I}S~!SIllCNVD5lv4fU zAlw`Y^UJ+vNql!D1}s`^caYhX#Z5w(^0q*$lbd5(iY1ECx-o|%wkQCt2y?X0p;sQI z7V70|1#&4;ewibiF?C_)NKvMb3pe9S*YgPY`KhQhUkhV{$uelgQvF3eL^=dpa79&) z2rm!@K0%eUr2;ZoknCj-NMEvCV*MpdCHm&Onf@Fhj2mG=3@~J%wG+%Av27mo4L;cR~y|!mIB0S4? zYqyH!&Cx?nQIvOy#-O~IEXU_&N0fE$&<%ehN)4cp-p8K{eTCmLn=YLaXe2v;J-4sr zze|Al6`OYOh#I^4v9?y)3kwd2yQG-#6c(XD~&`@RR8*r1s*bGLaxSr6AzIlWE>5M%Q1uU?w9|q!7;CTw>Q(F zwc&U*K_O*E;!{4{?VTVaykA-BR48?q^RA#>#&B9eKdu{sX2Dp8{g=g2Bgkz5dh>zP zGG;N<(KrJu720q`mZkkbmU-x}V0Edn^1;uSjkx|>^WVLFpk`zqUGj!gR!->KPnl$V zXjf|DEt!@4YZ#7xxf>NWQ@pDEK$YRzYyTt4W}<`SF#J=D=P6$bz^tbRp(&YPeRAQ5 zjFi-Cxd97zESy7z+4%iMR+EqRKN`bkGgRHpS)Xg-itC5)TTYd~4mHlL_5lHzXTujy z=d5{~%bI=5j6Dyz|7CvxXA5sn;MGit#Hg-{(md)k-_RkP?To+aVPKo9Fr%(?%Hu0O zFnS$Qg8+ap)B9M=kcyRZ_V)4@K@f|OV}nFBb~sVu)Afjy6bJH}mH3xKuynudiImiK z1uPq)A4?TX*KuuHxVs&>>KCfI*Z)YcsjIG@09Mpqq4|72{QxzEw#EtvXL7Ov9R^+7n~ho$u5QBbEw zfA}R$C5T<0D$)-Noa~KANNCff6kWWxikZsExs12zMQyX!By=aNX1_4``6Go}0(dJi zvBmNNYq6Z;NL5okg`91taleW_-?Gl?|HIx}M`hLSi`oxJ34%0ANOuWHD*XToQX<_U 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%0D))gPDHse`_9)9*|qMRtPW#-&w3qF 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

    2l%8X~X1QkgX8v#{g?%_m?Q1@bBP0ciLv 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

    Oy511yz9 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

    =wfA0opa1_m-#OnoV=x@b5N5pZ`^@*b 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

    g8BRe@Egvc; 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 z%0A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

    TzD=|=A{cFK2l z4UR(K;I$yQ==4*>OF&*5&rY=!nRu_SHVDnf+}Q#wund@5W#|VIJ`eVXG~QWI{)ch= zco)kO<1+t;(ZH{3&@)rVR*~3s@H+-1QE;w3u1x~{%o(-0Tm-I?ssI!f z2hzLP>aQ-?isoeB@B81!S=eW1W>z?lJ|1r#1b*sBv0_b>r6TBtAfsf1L+)%d8FN;4 z|F{eJU>AD*OBDWoxBt0{|6bdFborI{#N;p$O%e$8?U|EAUI*g3ko1+P}g9ckya76bNI`h=L#*|e!4zrekk`f zYjP?fDbVxDu-~I1)}oFgjY3p;u6u>tsHU*zESrbsxdGJi{L_#T_u8uoe`NF>mBkh| zG>FH3G+#rxO(VBAT`K6M_plu)Hf~IMoLz4=(rp?F`k@f%i2k3XhA_d^M*iWv;GL}M zWchWzqB;jb$1f?_4q<-g%J7ZAjRFZ=A3$M!{+jB1haTNDn?J9H%#b3^ACzm za15nIB5rUPY04k+elYn4E&g(LyH-^D5?-|lq`WWKL9W6rUhqJ-*E5E`er>;VN78kN zb$PaGN!i>a)^Ex=EWh}x5$)iWiMBSWj{Cu@GZ+}W^^KfRcOO2Q>{dNF5}<>oH{@nJ zkpDcN$y$}tSY{2jGbcDBgsB090gB&Tda($2Q&jQG=O zYHg@)QoOxOftZ*^7z#EU)wH)xP<%du-^LZCNbU76D6`M!t4a-G2Ng14J>u_DB!;xQ zW()xhb;5^=YO>adH_xUyv6j=R)hh!^BcW%+guy%GlY@gQctv7OT_Aa>fmD>>2PE!V zXamZIM)2vm8HOiX9|!sMv60?4K1FS4#^Zh*jQW^MB5{jDO9Ex=u(OTCRxjQm9<}Q+ z>s(ONkHld&FOOh+B@* z-DAbP?n1*BtNbSLU(P5gJiecmgfPhx6!>6?jFUOP`b{Th|9tvQ!GV$~BcZvJ0JkiR zk4bs?Qm2xFw_|wOFjT~M7}2y!-8l+ekB1ZsmrO$U@}Kv(t$eRO(!=wLnl1UI9rWyn z-m6ZSadN8!yy%OoemZ}{HLi)l+h^_l`5}K+&~=R2hN_uH2^Z5cC`kHR88sFtM$Wap z)dsmGJRyQJ?MW2rVsx73(rlY-TY6Adq5anST_H%sptkf~wt2D((ql@?qt&BV*JUR# zY`8^n3obHt~F|G$X79)`QCOCqB8) zs2&FSe<=yueN2L{)GOYQwzfO;EW6|Q-p52rcw@8TCJtL&kc#7~E2y=eX&}hfwDO7h zC=C4Jex9vR9D7_vfy%^A8_};t-e6+6g1_~~k$4p!R_FQmq56zR*Fd0R! z$ykwwp}w1%F+PNASA&C)$Wt&)nsrtAP;(@Pd!MoVPyzLl?6J8YPbcHU*&jeVfvjL2 z$>u?#-!7F2R^`qEq&kAXpz4c+>sgE~c+vw38*UsF^}Ll_y`a?}3Rz&cMOkkzr5vC* zB*+Q9B<{9{eC@P_$poVKYBQzlA~VMzJ9x+5+A-nyin)p4MgSv*P)EpGAU!y3%?Ybf z$=-V)=jxN?gVz`%I#!7F%s3Mh$p{pz3IVdaekb9haYrDEqK-OXg^RWK)FBLAh8a%M zY#uZd2io69-;>p|28`VZ^GiA!^Rg-=Ylzdu)cWHDuD@f&Vl2y7(8XzWwgfg?M*T|v z{_0iLYIdf~mJ!7Shg4l^N8|Ba;vc4V>h0!4Xexn2J@01p1BFEGY_`uCLzP zt@{mx)vRn7BR%whM%VYTX*2J7^<^*OCi@MVsDGX}x84_5{_PWh!J#gDp-k*`bjh2tZT4SQq}i_P#d`;W2tKJ77MR$K6%Vqmf@ zUcnaMnRsj@)#`%%Qk)Vbx%TucdzmO_vbp*BIpo=-z8;X^8rsX>`4}DurIRwW`~NTz zT&4z_`sOE=z#Kthi+gWe<%}crM)1~Sys4A+r+kknRBqW~ z9SAsXfXm!A6rqkDyLyF~bgy11R*=LXxDbe!2$HP>MRYRaMWpy}5A=Y`XNnfer&GQ5 zqU6@AvPkF0)je8D)+*zjSh)8G!+Q`bDt$k;77w{Hf=6#!Qr4Ebpx6B85x|V|ZOesA z&_p0iTAq`HjlWX`@tb^?3bArf*yVSdFIf=+BYux60`{G_V*Gf6$(XQi^3F6Q5u3cY z_tq_`1yii6{Xb3YEJYw@zYTv=Hc2kyvSB{yD5ncBe^#HB+}RMJB)ua40=Pe~6iFvq;COMj?zQIx$sG9t3nEQ9gYoSAy_Z&8 z5R~aO!Mo2;45s3rV#t5Mv4(*hIgcP-U|GSZ&+2~l=D%}5w7eZ=8o{d*eYFqdIl;0K~VX?28k<^$$hlI?*Ql}(M)2U6$bXiEU zyc9*I;!`(jXW9!z$C=|>#AB#SYeV<$PbFr=?g)-N{^Hr9nUTd%rMHbmO!?){%O`2v z`6SiU{&5i7RC_l|PkOaR_T^BqTuj~bL&xV-^r-KJ>rqhT%Lh?kknrslad#iosN4?#JpI<<_Z32JTCCDG;wtO*qJIjC>Opn%rPua~*d3CAw z(q~I}hD#4_UKsY&nX;&S1w_t9Q5Sg1j^YSFddR7Ey9k7L3f-kZ+B4V-e7jJ=t6TKm z>y8B8Bq>;>2@JWk*j|w<3>&_4ziaAY{sZ;#t$%PsLNvy?`=lTyv~P`kZDlkp#ubT4 zHMRT7CGjVrdw{<$Imo}lG{)@5@&kJtW%LxZb=eXvmfs%wZJsKHkz)v1EmOPhWcZE`jufD=Q%X zLkCa7*D8?=C9M2h5YxWA!p*%RlQe8)DhRK7o5NYUg$P~#{z|HgO%-y{;kAX@+Vcwz zOC4TToZf}(W?rdiF)T2Zn+StJpAT&$BOVF;hOwV_tDNw+(3WBH&) znQ-XNL$z?1yrOm&o5Z6F2G55p*Nhlh9?;CJ+A0JQHaT3VzcML@MY~4A;u>5z*S)6v zuUS21mMfo)QkJBm_^g8}TyUu>J*&i{QOyB1ALuVoHka56uX~`>&fIN9Di(k_sFqS3 zOML_Ig24K6uMrYH({rkyS>@o%ujl>RfBrhncseVVvY@5Q^d0dFv%U!Zq3Y4y@8Sjf zFM|Inkh;&sZVG z1q=&*J4Lir{XLD#Y1yC~TbWhCw|_J7CnIKMKnJn+%K?x*L9NLtP8HS23Ywt%S?;xn z=siK)-OF$EFG8^NfPyUUQNS~o*=hG>f8-_JGaIApsZ98{$abLCoc63CF!|rCh-|9s zpO&VAciL952^DkK&g0&#MZ}g&CHrAf$k|)oRug3l&22-PCjO54v~Fbe)9b2NCZjh? zL!zeE+Ap_Nk0(uS>-A8>xh+;;1@vwX*KO)k|7mn#VMExsvKF}owfbeH!4XC)8OFha z6K32y!Gkzk3HojC8iSabDvFWh&PGz#)Gke|MXhXHU2F|h%zu)F%5nOujnHlckLxB| zIVLGX)kF{boP!+9v2yrN7GQg!#Z!^>EW9S7j4aurdNIdouiQX!#%m_jX%0@1k4x>+WO2ikK)Ze|BXzXETWi`eLgFXqLyi+~;v>`{tcv}|=eV!QT zX^(p?X{zkMvr!O?@K97BT9rr!8pceAu(hR2o@#V^|8$~~fpx{ux>9oIwXY?)ZEe(h zU!94^-%}(BuA+;z#+aBeF9I6eBZmxlCG~+355&2 zUwqjL-NcbIrJs4El>-!SW6)0oqF^4^`a8ZAvK8VrW9mvAV*C}YD=WBVaoTzU;xjAU zJov$^OSS_YKf;fpmyIW8S|m(4zuE-Dj>p?PzIj$?l`~>h-%Au@Avt2;J5;-4BwNau z4HN9gWXYM%y*a6by$@iR@o?WDlrvoH%icO1Tt9s!oHu0UU^qJ;%rr}{!;?SgcVS*Z z2nG#{d4P`X^OrYe)N@T$c%AjN&PjLv{<-0q;D9_mCerTAMasRcj$a`V=>ih zod~E?{YKK-;Mp$gz{eGs8Q{WvrNIiUbzr!3b(>Q6bia@lkB*dJA7sBZIPzU`u8_R7 z?MpPjfS^SWirtVrexc@UWs~&Q!UNiykskkLb6I0ZVwq#|@a3!&cxl&dd}GhO-x8L$ zhaU|->auo!Ad%>P++4mZQgrpIJ8uCdpR*JzNN|&~?L($Fv)1Cuxw1A_!BildFpqZ_Z?&b==`@yAWpii{s7xPLn#Co;5O%A#spB&aX^h9U4W-53 zkhyCfM&72}J0*u*GlG6*-n7=Ro(`*5O()M0eQMT&Iri*y`t7ic!1F3rYj48EA>W?! zwl@SaPIHH#j=-`3ewn#~;fWA6K3&ys5(C9-*90xz#`6ToFNY)%imi~aw`<$!=Pt8q z*?UNgv(*JzN+D1&EXrgQQ;Rfyk^jbAuy)&V8e$f#a{l3f)!KG92RFByO+fz4NtLj7 z$_1gpDIhrKDZ8ih)z!YNuIJ+2z{YZW8-a3YKZoEyHsd9@dbQ7IdPylbXkx0D8jNr> zIFaup?krpcXwQSBcB(H9#DoI;zZ_N-F!Gy|3>iQsM`Z_F_X|LX4lv5*#y^uho<1dr zNf`O1l*|fxS=nFlBW5xUIx!)Mxe&=6g1D?pkCO0BB|#l#v@+1#-Wet_E@N&^q9Y9RC{)>&p&A@`|?;Nc=c+4v=6Xr(jkqhnub z61t&^hCN)sdmmbuH{mF5iks>S%tF`jRwfluQWM(IKm3+Du+|9o4zE}cKYcI<_6}4nlXlSXC-}TM>5mfD1Dz`1w2wu%f6X_}5AN7!Z^adrP?mBZcdU+W= zkh$H}u(!^?8Y>j!@+D34vek-JRgVFiN0q&e=k2$-&ZaTPUuhjSz-BHn@lVpJ_PG9zll(-0G$ z=@FXSAzb-l@izmu`7(Dk+XCI=_5sPP4=dE|kk(5zDGSf5J)8E41TE;`Cmkw@YYzsU zMjWBw=WjVaWvi8!e)Q%+^)Bl)Y9@kZC!ObZvS7%s0N zU>H8&HzJ|P9*tiINGZYMEL1*MqrylznkUpc!(bUtd6}+!cPPO91%@3k@_@*s-|m-n z?TBcI-BzIFEpDcoRB`98ghWW*lK;->fJ6P)0fNq< zY76d15ROeVByez(IF3jVx1J39a}ayeXEx_N$WrR7S6@2U*C_2j-{GD#E1M0BQqBwz zCT#D>z~Vn|cWXLw2MXR`j+FzObd38aD{Zw;H9!U-IO=b9ou52i{|9GcJeT!JpLvx_ zvwk@fH1`;&$?cV=tLUz5!n^5{&0T7kjcc(a$d%b5y-D{fXD)oWM2_wjwsMkCYyXu0 z$6tphseRK=`X3dNeY=OpL(%a~1NJWQd#6NDm`>p(EiW9*$NX)j5~xb<^sU%xomg+= z6HIvUy_EX*FS!&?`x*8+mP4PT@RE^O|= zb3NK>m%ruZ96Sa5Vv2!fOjd0YI{n0!9JW||4_TLyM)8;>9~ybJJX*ow?4Qc zMVzZq2?{H#wZ>Jz?85qPak1@8Em&wo_`#}JxjK-mi=B*oCYqITR7e4`z5J6lJ4`ui zVGnJytui{GBQJXBRT zQ}uYMqsc7_iTH74;qzT${78YB>wg`G=*J|K(Fa8jTQ1^^`W0iuP?>u~j?;dDmwGAI zvrvQyu4yF{4-#PF{b`@@UNR$8NYIs^`X5v6KQn9c=mD~ZklBRkG1)NC^u3P))2kh! z+rx22cwtq(TtEJL+NVzqv=49TlfEX3u{Yp_E<7PCNL^};4$K4n^K!#gV}pc(9j2N3 z4)ad%cJ~s4(6Xi@1(P$SWKz^D*M98nP(YXQgWQvT;-9vY#zsG zg_JtlKbe!lTB)6Eg*I>z%NK_V*nN`_u@!y+{mESt0Dy2C0Jng|qmOB52M6jS+{hqn zpo_p3zk8Bbr9whuI*Qu#9aLCrl3UPG#8gt!c(~odYJCCUi+nA;EOs+#Kfz<4O(0xT za(NxQD^{ytKLILqXXjvB6=Lb-Ce#y`bOfL* zWubF_zThokr7GbC{bvcr*T55%o~A!VM4kUY7ex~#OazPLk=0l)2p2KQvAT#N(6S>Ki=i^&>gTV3nTu`UEcKr^>?e! z1XDpG_~`zDyS5xbmSf;dmqqKGUzK+%_plX8KJ8M=ZiX2ybxE72NNl%B7OWNX{5hAsLYIzp|?J2qcW&?+=kLD40w) zmU13m9#BeGI*jODC(zJOyBM{y$f>^NpGh#mC=g?xhnfn0M27%w?kz1HaR4YGk3%(| zM4*$FFFuvnmK-u@8}sVoC4N&bzdC#nx-LbvT~~27t|7X~OI?y+05j27aQ?JgkOoeJ z*zFH}k-5Pp&!4TXr<_~INvfYm&h*`P-|pL9q~5a3*SpkE*g&26$|ghn7duCkUr8CrqXIKOljQSJsL&u4Mw!bPN8X&gBegMiO_ z<)z*(AmT2J)wg}W?{0s#7`^=G0 zDJa|%YM2wnS^v@kcVR$26Av+iKR}Ks5pfR&D)MOH$2kxl{FFYtHLMK$0#Pf6irw1z z5z#vT6E}MeJ|}RLS8&+Uvz7JxmaDV5kid2+Cr&dCqIPK4Qe;L`!?d$VKGxxt4vl8@|!fBG%$HDyd6WQ2;!dh{WT#Z2zk%Jvlp$HBgx;%{}@ zStg8X2F-M)%SZ>s03DYSxFqL36OQJJm(dCXQ|*UrRql;i*6 z4R$hrZZeUdp9d<^8w|Cf+q`+)UaX{xfxi9?d>8HV8uLJkDq7K$SKZzge0G@3)VJ=lpzDUUpe^Oy`;VS@0cp?<-eja zX72Qfv(&M{?L8hkHaQmYs616KEfMXCq^c4z-)6rL_uUN)Ed~+|TejO%sZT+hKV`7h zIJa9;twu~*NhiAMnuL!^Eek(Xnfq~k^2$JmZg36?H_6XC@@KTFe5o|ZPPS9Z1Qcb5 z(U>eUy-X+|h|_I*98h(%S+-us;w1ZBL`-dVqS3($bMyo;ld}|E4Lx4{@HRhk$<%K3 zY>Ib@{D9ev#rI9cP-qMgXJ`eLH!U0^cta5H1Anw$1wU2hYI=L7i@rXcku;nbCk&nh zH1Ehz_+J0jW_ZYoP&&jp3&f$VeqJU?(lAWixpB5Ydn%#9yd&YNlTnuG7whAq$hpMt zoZq1*SH7GTD)$;+Y%58Z3|=WYbn4R3209I5)?&a`=Jr{t-SD~cCoJ z+P-g7tE|dHHuGRkds+BXS#sDWC%NTfJi{Sno3#tr5uUuMM|TLX1nQ`@K< zFWz|NSeth7jm|E-U6lt_Y;^^V&tJd}5DT5D9dFqxxF@t}y7*zrhPMZ)jpK}5P)~z~ z(p4xgh%|Kjp%bxU0iBVUL6p&F@sv*7945UsxG7`RaeKISYbwX7hg1pW+}Rgw$K~*p zc8`jSnn{%T`SQw=hdlCWkX8Kcw8$Dvr!;o`Te3z&XNJNT;~$&%fn^9UjdOs zTEI`CnI{1ccjZ#=Jt`-RcKu+%ectM*Bw%XF?zA1A(TKR0-18~9xV0TPiFrr^StVD$<8Pct zk`f+abDoRTh^CZndEA@%p9g@KdNOwIt?3*tI2(Q6KZT-vO~rl5Z{k3v;K8+yw-BR{OVEKD#KsmVOeh4 zg=>QLK63AE6>@cc;t_diD0ZESK{l)Lm_UAaxf$nq%E$fh0ujT2r_&r?RF-1DsM>(4 z^W*xkZrIql@XAmw;c$0*7dzp_VyPW*M9@k9f_?EUIp{#NY(@Qi4{y~Ee6KPG?QcAl^l~RdyVaZv>9iy(! zey69S*yO(tZ{Wl285Jy$H!2|)B)Y^cROeV+9t@g`UX!v}OBW@SdUQ*-S6fG~e=D*9 zC3q^!bAiX-Ea3e`W$ka;9fr?Bw_E|CCqlB7(ip_F<}2gEBqkjEGAfPUKp!ZSU{k?(kP1wpiPEZn1V{hOr+d zzIv+_XySfUR9x&m<3@5sJ)4=0POa_-2;+&dxZyFD7&j{4Zk8&(=_0Xxx%k;O14v{5 zK6=b6QH;Ft#xd~*soAUYyclNKFu*9Ki3zuIo9gJSH<;;YdlcKb@f=9vcu?pyS1&CF zy7l{lH@i{t5yB&4to0NAb7f1=2D#HB*7w?%u495(Wgh6{{Hl2hTSnXW7?WYw zp0>pKo2lpezQvG~<+duA%eH%l=-r!}{bb=v=RK)|_6@tnH(fXm&Cq^90oVKMnUyr( zB#!GnqJ#YoC;O@)gs78X3wF?XnXhicM=yUWpR3|=>BLMO|`L`q+lc8aMAUz=P;c3JL(U zYY54nu-eX`D7GH$e@k}REbC0=$vL<@u|sNGGA81wDh_=$N>dRPO8mIgEes-VFh*%# z&`Jus52M1$I@kZ{zlmk-QHfV)((n=*IQHc;&E9dIw9cZ~9&efYOc?8*^k<`n_C#xT z$w4F}dNlw#+Gg^r)xNMZ*1bbLxNN*qgp{Mqc{RfKgTrcoeV1qdJ%hMT@*(hO|gE>Pe@omE{^lH z;4#ClH=T{AFD`&$Gz6a54^KSgu`inYp)R8S#aIs78w1$~*H01kCg{iUnH zlPS@GvNorpG2AW|kkaZIbOSfN8J&(?Ozu^(i(Vvlvd?f6-qg8mlP0aS!vq5^yo zhvo3XfX=iI(vleQ+;9=0dUX{984%g5Trm2r(ty)YSo zsOl=qW|Y+fZ`%^>%}V>Cln_cAs2#nKTDE1SiPs?H_->Kd zUR`6d$KX>|BNI6Y$Uzj8;u*&3=dgc|OG>)1C+?4e)*FS$><9q(<&!!Yq!-ZiB4JK* z$V26oH!4CcxvFe7OQhv98HgW-&{rATe>BzPgs#g`j%6AVo31MDhKQsw2z-(Be*X@; zE$ciW>q2v822W%{khOOe@PVpm{Gui*8yjdmc(Dx17vZrvAVvk+QS31gVu)){oX8UeY0nOPhv$BFHB!vNBLE8sHvDUWF zo$%~+Z}wI?G>!dsM){`vM~#hdex>m6jD{Jk+8?d>!8u$i8-i|Y+U!*_M{K#YOZS`I zj#{$lH9c%&kVe~XPX^{!v{+555YNeBeXW?x`e^?e(3{9bKF12?ZCZ>VBVDk`(H_ew z@)?N4omqnDuPk}sv}Waz%@Q`Ttn@b(z^KJU#{V!&+9>Z5X3ML_V$vVDc*MA50D-4J z=x}>f0>IPWE%q#&ug&*Hqs`{amGS3z7xCNp&)kl4SU>PSoB@Q4qodzwJWzV5ztY|^ zd1?%;uXO4%wu_?8-q~)18ciQmLchHocTCs$F>3BTqbvNh{NTUFiQAR?aoX27u#(p7F8&j@XtkBm~B#B=pKse<}!k>j--A%-@Z~K^~Yj92#X$G~gym%0VRE9?AA;2w>vl z7?l2YP%l`61u_3IjcI^KIu1O$Z878u+P@ozFfu?&XIWC%sWr|&ALzVq9TD)M61#lZThVjZqr>!!8fr4ht+C!4|xlX70~k5uf>54zSPErd7YklVIW#`xYU zzs^5Y3+$W+9GAH)FVaP>F88|5fR3=a@O;Lj{KmarqOEM}fhSb=BKKRVu0YA?Z`io_ zu*1=kBTkt-nsb=z^N#9SLJ+*kGR#&qPBvnGn2W1P_=x%9dxvXNJZ1iCYj1P&B5Ty&^R$7? zi0?i00QoXRwzZ?Hmm^l{XzICC^Ru)l@7Q7_&Hv`0%Jt@Q^Ce(y?gN#zfYoR0ww*Np z>Z4$s3{#N;1^{qOYJ30qY8i%#}G*3q}4K`!?9 z@hQ|l95)GQD954rw2hp;aG|kS2?dfr3Jt~r=hMm=FAFs@$*4&Gods}6BK4%bL*pc-^{?(71LAU`sCfa2WFY8HI~XUJtv%WQ^0;r->r}K7;cGa%-;KS` zG+}^j2HUD^A_bH{No3Hv#UG3u5zD&o2WWHt_t@#WfdA{*>AIyQETEPVLU6EQ;YMOI zsPhSzGRgApx^STf&&!3s;NiObyC)F(`2Cx;-MKcyLzPpl5m@k!e`1d`Igk~V{h^6- zAo0n2e*WI$Jcg z)%jt`?UnIFv9rrgmfQQ?iN{WD<$TAj2Qjd&2abBLmBGe_Sw)Y$J(gnP=40=%%=c6R z)!U~V-?6bB{$JwLsM6zq#ZEgkA+I$+kJiTG*FLNlWz61RVYMaR*D|THABX0(0 zf^gk7RV>37;ZPm?4Uo9f0-2@29yJHNQNcrC5pVUhl0b0?HQaXkLhi1>M% z68sXoX45WflNW!&4ZJvL{biZjAM`Xq)SiBXmBXfqp@ZqjYwJC1PQTF?2U*hsek*9} zBAof6s6W{_wQHO|l>meva#9~|nRQHRIL;Svk zv_Wts(8D9d6A(&C9=n#?Nsu~{L2?cl!v+KystRy!e3928Pv5g3IU8SqLCu_Yl{cb5 zU4-NE(EGpO5GL+X_h~?@?wU2m9@-ztCX(9BU_)$m?TxK1CTvT@i{?>0ei!qcfWp_7 z=SiRJ#d=gBXSe!?ybFj;w*JiQMK{W6J889vsgaZarFmmhrW6!cH`xhGp+5n(%X)qG z3TOElAcZ}2ettx=+{r(}_l}~BQ}FH#S<~JGNBdUg%crdf=V&$+yG7NATDz0758D4b z__HHh#fOcE{x6UX-Z^B0^^EWG4o$4_Oe(B^cPr{w)N1)_T%*j#n@RatQMbco(Luk+ zx}3(%T7WFbupU6VAtDLo6>oepr?Gyg+t(fz=L~h^)^>Bqh1lrm#M~?^FnQF&JK37P zg}E6~t-2>x$|aUrRa5g`V{PNKEG>Z`9)VbYB z8som|*X<6|HaoYc*v7dcW)d52nj8@R1?B;Jo2B`Nc-&WZSiuKvqTkM;0H3g^qa9>_ z6L>FpZ`Aak_~*xUiRo~cA0OP|OR8SxLB?Zkz|!-+p}lCw`2T`+=BxYO2CU~^;y-bM z4tt3*F9)`!kha7I6+D6En}=VEwNZjQhWqw_40ek!e^zd{@7YgeVq9z4URw;!j$*LUSm_RKPm4Gm# z-}EC>yj1@ihcD$Dx`ubdoNRG+NF6^Fm5hhaXLOWK?w{}Nx7zw6jK4TE>Zhw@%nG`D zK)T`sv3K?BYGI$0u$B?yKvZF&0s40SiJw;B_^Ml?L1Xz=P=uFJt@8f~(0PmxE}7(x zKzwP{WPXt&Zi<&u=zRd$pZ>VpY~rerQa&~!0e7y5QS z46J+!Hsn1Dy7k)jk&=~*B^qa#S3u2!Ezk0ycc65RtLLDy_)MsJTriMW>l$ zME5KGWx*?Wz=c@Peb?&h@1u?jA$wTEg)*NST!nL~xo~Va zI0vlXpy0%fi7npU)jOMi=#s6tt;RbZK$y9>fCpys4Q6;>phmUs-UYDcGRQ7`MNrzDcM6* zGp-%VyQx)gHXW_syl&sn-uXMNx~ZWBxp5e!Rlbo~8kWjkdIU+%%>3cjR1ud(wX`eG zR%0@LQroz)`FmAL0s{ky?kQ?`Fg`x=fBLYPBGG}m))yOQS6iC-cI3r|Bi)&lvVKP^ ztKytqW5t^mLbm1vs(l{|Da;L(ov}f?-_s>E(F)(mOiF$=_i`G4@~J%oGkls33}Al? z*ln!P(c532jS}wrWN3O96U8Ch*S@}=7VUE;pcgQuB>b$e&uwsAP&h}KavrmuysAnm zsZa|u6rY3>sj;ssC^VCB)1jxb2$FQm&)uB;ep13}!2_`XJE&%VBMuA5GOv4~LHqVSE3>>7 z!oJKv;3H|nG4eq8ZsZS#wr#%G7*0Kr$>rcB5l>`c%x)6J#ram=0{T`M+Jrainl}Wy z3fC;?B&U9_hirG0LfW>=(|GqdJ9RRfBQdw>i0ZXND^5Ys8My@&O~>vKgDsrzfs7GU z#*SehW$-_WDqX zhQNRZgWS!{9f9mA@03b| z6tNT4%q8|vD^>aKfJk`qY$eebNf8z7Zc*Q7Zljj%Ty#40`}YI1r#+#xs66byxv{%} zb4m{v&@(w^`zDktqncmzqIYpDOKIjxY1@l7-KQc;h;b^7yI)G!NF3goQJ$Sq*si|6 zSIqEnWNv(~IMv0!sX;JH_t<{5GmT8&eDX;`h?i)%6g%})r5M44=WVthC$kr#}H%tq#xD7v~#oA_EmQuVE?+=|9$6ECj8m-vz4*)%UDdnYe*N{yq{fF zO5ic7l;Um-24zXIka?)MU8tg3*>^fuSVN@Yqp@V3^B_E7_Gl(PJb|b5o!yKJMJg^y zuYTI+JY^rxu<6}DYAK%N0*mACzc?w5cqcqva~+N83GQ&7l~|g_A%YDKV%j0krrBNq zyLvN`=Ad{d8~b-brr=9xYbEIyQ-5y57AuAT!R<7{x9_s4r-?qyItaTnuSWyTLSBs3 zWP=VD`6Fbld1T&H8R}L(H;2tA2qTey9-yFzP^|y)=5ql7|3q&z$$l$XImMSGcoI(_ zMEtfo28~ak9Y68#*%J#tFxmi(4aP{CvLpCnh%MPpL-I?jBSYx#R8z{YSJR~whmEiJ zCTj@e}a`3*@6O^c5>gVChnoOGnE}bKJ9C;!7&}hgfF|8zjNY*PHG}{4QD# zxUnyuI(<#0hY{2>gS$h%^hw|-!%3%97S-AxmR5x=Q1&|hx3Ex!WjukZ z%aRv9%Gz45j~ihyupIJJO(9x~-IBV7?=R><(5=>ER?w#Z`|D#_Ul$8np?ACPc0t<> z{xSEL7n+KS3i+XT27ZLW!;QDfiMV1P5)S=vvfQth*Qajp+cRvJPZ2+@WBD}g-a1GQ z9W->*IqZ-k#oM4|FXEG*sLB{tKmCDSWYEaIZLkOqg5t0cBUTK*jr$luz0v7ZX*~)& zGKBemoSZHYv~U22&Ok#p8`#67KO7Ft zlEjg&g|npAVdr8)eizcnsvx|}RF)}IT@l`q+JhZDQ4#tj6_NcJRPkj^kk?xAmk2`y z3iTS{(e$8m<$g`zg+6C&hpnDjlvWDGE7oZ^+t;-9E;_Kms@kP-1!cE$l;sG%|49c5 z6Q9gmfj|#?TO{&TRs1g+2PXXN>cP%!{ytV8X=D_Ppxf}Not!EydS`ua4XPso_6a~o zul?8}Cz-9>JB03ttqMwa9dhG#`gZevdQ(p2J;qPwQ~Yv$G_$H5p=>9SCVR@&sfY+Y zVhf`-{M?hVo~vo7HapT>e8b|&)@sDRoSy%&p|T~i(98s;FP7@$Th4w?KXWU<<;YCE zIn*R(1X;esaT&lSdo=eYI{I}p)(Z_o6O(R;8INcw7XKjkz%*n4(*=j9*_kC*TRTGU z5|D3sPa>N39U@p25E@2`i&?&j_Vuw*8yMnlS96U?w#|@;s{PnPMz23meSqX7v&04q zQ3(w+xCvHxE8wG3@k8TiWsX-#F5#?nSFG8M;q&I)YPGo-uf71#QWL3oou@0;L@PF1-X zP8W5Whd&tN4+wEf^Q4FMMI?TeH1tt!w);pL)HCPy5=&!%89|%b(jB(!^ws@~n@uLD zX3PA=2j3k>JP3jbkd_Z8EWdi{Y8r1TfbQ-3qznQPPlfJG)qc`3UEsktGm_ON>@~-W z#Xg(lp$J`+z#UqqZdYPKOTZ0x!AEd3TAa7U&$altkSA53{6Xj1o4ygbVQIF#@UI2P zsGKxZ6+w0Xwm+U#S=vFz!2Lkauw4W%X=H;Ft%7+sAHFOQZlY&3x46H3+7{g8IGXr{ z*c_H~|44#fVIZOZ6iK5UzcRlB{dA<26Nsto>#`1>7pm z3ls>1yKD52u^p~DX{l>$2K7s}ooZv6MX@UO=Xj&$xA@{91cMh802!n$%5ewZ`2u%&uAEJ2vn+ZCT^ z6922am6N%-7&gS#_l?J9zX-1+1D=BuJ0jZ#Yr1VVG$gU4I8ZCXR9R4W)GkS(^g zLsr8^LA1a9hz|QJHhoBzK}Dccrld^Xd}-XB#2FfufUCb4M)Jzsmm3gWjm`K=PiLRf zJt6?;aD#hamXQ^88}GSCYL|OxKr+;XAhhK5#wH{lre%GnX~KsLxAF z8wA1UaQt_|R^Y_^X@W&Nhs8G_lg{=SOIeK!ijxbI^eJ+UhgOvg`o3pO?9T@XgO?LX z5G)cTic-6M-G7A*Vq3Y0eI;Zu`{HTy4DguOp!y^MVyrfu{O-il~phV($-jmG!L8^6| z*jDsUpRfe=Elw5PIyRenX!rhh0wc)J9M*tWoAtjsN&m65C3^5n>Od9CjXF$`St!lg zC^9!)nOBH(zNi3;ekV`u?gj;@+Ee>xB6cG4M$ zAiuZ>^985P^*109bSZpZNGK{)3S)oY6W_8LcyVsD+;4U71@02{OR4qyVRSRmj`KXf z%~K_BfHtwW%Hpdyf0OzQx3Xp4*+^Gf>hy z#L|c#EK+jv-q8eYP4A9{{qe~L_VNoCT#f!E3(Rf-C$l_DhjaLBMd|h_{1=}S1`_!| ze|S?u;>WX|DtjEW)0(UVdsq&X zTe3tdsf%~8XAo(L9Mue1iWw+#`)8i6Aj1K>w}3#0M6$xM3-!gw7n01h5Mtc6?dPEU zLv)M!llIQ5ZQB9n3+M-e2?MJE`to;E7UEnm>TdZx+XbEt5MLtMO(cHo4KnUgp;Dc8 z40s)aaCPD>03H4kY0N(G?mTH1li+Hv7BRBuZN-1}1l^f^*5rnM5%aJ8aA1i|C;l-a zs7V{cR%h{Y8w>++@0*#V>Mz^1^KU=Da85`@#8(c}0rOF$;Nf4|7C2L?Nkj43i1I4g= zX7SUzKMs6+HOkNHufn1KsgIMo9&jy%;T2DtgI~wV@5m1yEr0eQgf2bx?uLc;VHn&- zG>80HKiTY%HON3jVQPT8*6c}x&~aFGLrvZ`KY?rOUL~Q3{WwP=2uXB!{bKUsOjc`3==Ku(HIp{GR;$Ez@Yz!{S{>$;s1*J-0&hmk8owC~#*R0y-vb|^; zg3zAc`)Wv`o!g$aow=$d=!+hKwpPp0HF2wiTcC>Kl%GG|!W~!N`ci(l7*EF|q*!zI ziC>$sLEA_dR2%gAOq4q9^K*(l^42`hn?ADCx(tFNv-Z;>wQ;RNyf_YLQFvF-M}tiK z=)s75{Ajedavb!rC(15F!30!(Lo9{V1OB}P3b+3D%RLHCcB}sXw8j$juko{VfIWybIU(GLm7tLpPKhwcS=|V0pdC9Xs+b6jjyqNi%aF1IWvMNScBK~2O{%2Nmdio!J7!M|iz&Mu|6z%9;VJq*0Fp$4 zsmA0ldoLeF_E4{423!{iJn!~4hizTf#{U;DX~L3JPz6(tItn>aw6nSdyYG6$Pzhx> z!|O}$Q0&j)V9wV#t$@!zeL**l{Ngza`eWuz3}cx+3ybQYAh3=0I)-iT$pX_E$;P%U z**Blm!LQUtjiSCutf_As)2H3DbK@96(rdlX1Z4KDhie5_D2aaJ*Ww2SOsVvvc0dEA znD>7chTBtHx@z+G>Z*MS_5Cp>MSJ}dVq8OMhzu>XUlI8TG#ALdylTF$$pSqlI~e)$ zrHs^!UO1?#ZHz3Ny|3ng5DBM=KXWo70!`!!oBO72{CA0LEIrA$Orq?^k!+aI@l>Ed zjiDYm>eHUl3RK4d_3x=!1+9&nKY>mPr-ZOUCLDe|i{8;OQ)Nd|l9}r6Cu&n0T+a_H zIW@pfz~-|9-_9Soka~O`NKnyL^^_JE8&Xsc^_D5`Spxj!{C<8JmtF|1 zyShWoyb1_%;9*V@%+1&AX_)2DndQ8v1-QYcc0S5nc8dpCx=5E>gD54JP^Z!d<8o$3 z(b$z7FQR}Je@+_rr7z}4HC?6MFN!g9X5!~U7XD5WsPNk zQ4nB!$#`NgsFJgwIwBtzsqpUma%}rOdWVjms#`f!*cqT?oEXdO4<6~d{Y0yZeEjk` z_33d>thNfUmExzdrlsIBYz>pL5)5>G!+v;DT-g!MEgL?;dI2(%mKs=JPv|BX7*SY| zFH`m>==3>0#I|=W(dW91O6>LspKQcx`h3J$*i1xECTcd4rMIb`h}(8I(Wphjeyl3Y z5wYA80xDfN?W2~ypOkA^XSQWuS**@WkI)m526|lxQFk4BqAUhDe@@}te;>*UfN3oGUK61G|VZ5!3 zpd2)TbG+Zt1~skfC4Ipxo$I>-quTi>eN?2L&J0*6D%zg#~dL%+!-H# zL-b?N939J!m_Y|0H%;_H-s&6Wh8Sh|-Fi zt6X6g)w4`;B3q~-lxd&N#Dbpat_{}s_y}*Q8-Jb839=sjtK&k^D)ssEMluepl4zCY zc0#SypUKrm(x=;K`t4z{UT3@Ro{Ew(;fpvHV*6BlP9_Bx#kg;$INR8H9g)Z_gs5#* zVZ}MWzlOiX;KZK}x+;uBOV?CW(LhK%7jB!VM_G6m^mg54OK~&sTSLaDPq|BObe)kJ zQ*}W>2=Y0gGId)P6FmHgC_u~wZ;yGx`+9SFXTC0e2Zh>34TrY#(-rB zWG$OC2JFSOk3QK~4V5G^-iU_CE))$vks@&;Y%Qi=LPv+m&l?4v7#+=G*apyA2rpTB>qv!5i@Gj9ZS0P> zdBUF^;Jmb_lXLK06|~a4uizVWq^CIeBX8*~N9j(y((WeX=e@3~QM#Z>+N6e^&U$DF ztRykUg|F$;>Vurq7`2pP=S`gJH2hwz#eY@vhUIQEXlQ0J^O4xCw)bhn_-Fx_iEr?7 zUkTb$J8aN>DOVvWogzr2Yjd=j=r-&#C{6}Y_QIvut%QMo<2J?TRBNjb zV^%8+uai!{@-2N%HA(N65-}>h4w&!o!|HOf>_D7ZV@VPrKPA*r7u$?xs=YEUBDT}KF3091(4#I}w^^Ei zEWwN2sBtwQbzt=^5U#%RN$`3lV=eP3Uj!s$EpmE1`XVThkBjs8XC|r~`)$UHZ*pA^ zPd1zs&&>CymCxVDAL>Fu{oE&zmD<8cvgae&S%W)NI48H4q@fa7>FM38DS86I2Rg!A z%YU+En24MGnU;2Z=h1Xl(*ByuqcA+z`DiD=n0V6ImeZbTf2I<&nRkYAG|vW+*M(2w z11)5Ni5%Pc+Pyx!nW}$>%*8o{qkMg#vNcV5a2{7r%EMLBaUtDE^q=!&|I_QsRsi{& zG`P}O(h4ZCBym|<)wgL;E8<&H&qPd<-&jExY39|0(T6Ss_+1|ZIX6mlBw?gxm$UbX z-G~enZ$$3X{3R3Ar-uxkK#9bu-OQ&|lK^L7RbxWAGqDC{L65Sgg?-0>`7if0=UIP3 z*krp7iH*W_D^L8l$p5Fi_)mGf61EUu%xPaCub7=)fV<5g#P3KXb zIuh@5&)r0Q(AW>=rIq5!NoqXy_WJPf<Hh22z#(_j)19_|(;OCN<*LIuF zvyGwT7HZKb`5%Bl+?JkvZ^03G7MR_Eyqa@O>Tcl;yJSnOkbY?i)HNDE&R(Q;%PTmp zoZPK@-P>qt_)-nSKJSjRzpJGk^J(y|-}F(IxcHCBh1I}}@yXtk`sKdlnBJ_D%~#(G zh19FaJW|E)cyyEBXz0Ti^I)76O(=?j;eTgeQYHb(6SHa0wsRfvN<*7zHR0WD4zv@mK!y>KGUySt-F7-NF~s z(ZHPlx$lARbsG8pTIwI<^W}=m(@#ELkH=fzmWYdbRwUXl7MHNnPZe30wYE&2LoCnF zVNK<`Ut@=w8%6CjnjEu;wV66<;_C9Q0j!Fo-b&%afn;iOgdTHLd7I6+gK4O>m*ukh zj`9V=U!;HkET|BeEN}oHU+fo9%l-4gG;$yj1UGS*Hg&{;4qwaP8~^R|`nSAtJ0U*O z92?8L>YqQX#wNl?@*c=GA_(?k4-#zsyNUc~pwLX0{weY?#GTKY{U0|Y1YD{)VU2Rv zh8}=@<>&w2&i^+<;sZvvE5YAnxBqg#coHDfgW&W`ZzAdbW=8(fMMu(u{N?YF|ME-1 zyE&zRwQ2lIX6VH~26|41@9Se35Xjk8$rKW9Qn}xPe%10{PtBjn4FeX6E8{*4;pRTp9m4i*UZ%KOYBP4H)Crjvn>2Z|8$ zKqh489_OTv|Mp2ugH~XWkj(_PJg%;aqPRHJYgp55mc?zN2w^S&gh?bP%S1=-e^q%( zDJBxn*(Ksoyc=YB^eX^?whP#GJbs>}I8QQLRay;9RNY|>V(G7#Br^E6G=@|5pE(XR z3dhyZIWJ&#cVdYfBaW>M&ik1B!J(NVzMi-2cIjO(5g5cNX6GmL+M`#GIih9#UG8UT@Uae-su)M7KarhX#k@9`H4{Z=b$I2PPP$c?F{hh8uXp zA%iDMoJ(fV-_p#9L9|b}*xBXOiXS?|!u;-vEJq_6$|2Ku<{g=t1 zj7p(Aw(5c%=Q_Aq&QdQE$wXFyx)kH-ItPL3=&B<9I^?sH0c|a9*%%vetGhxTCeh21 zcbbK)1M|0mUk7OMCPL99Sy?boS_a3}3J$8&ieHT@mo_v#+&861Oqd2$uDkgxykp_< zuzPN8LzNLJB~#UDpnxY%ol6^7vM%-&hcZc#L9R%%Od)5vx#o3rBgxstV*l%{ExHA# zE}198gG^MJ7QA4xF!aWPAx!~$tWTW=|@;fJaEy`oo<*t?S&Q@bCw(VJa;*0%cGXYPn(K%R`&@2l%Dx_1vy z@KAS$*a9?=j}fcT3Cl#Z-LmqZ2WKMZ;K8Z44~QT}yF7)Td<4OhA!Mc%1%UpV8%Z!- z5|H^pJ*Bo=oL#)39B){3Jk_i+DRn=rSqa?4RHWfAgZuQ=(ZHMC#-f8lCYf@yrb>%b ze%e=U@nDg9$n0LfYP%UcmlHM%Yc(1d&dqR@|4X>%&sGiT!UThsesDzqZpay+Wy~J@ zU64XcXl5%lb?RrKq(O&J>OxauP^h;bcK7DMjs6S3a10zc(YHy~c=ryR!ZnVWQz{WW zw@y;^x!z%s5OA?%4B7=Ums=MPq6S=>>c; zP;}bI6F};bcSX5%BL;kMvXf)KTavG6J6+=5x>w}>`wEe5`0M=g4iVssNt`PG_*{K7_X^nULTNO^4KyN^= zV%G3(y4~k%x|Z5@;5=sc$=SdjpU}@no(RBj6!{9rsWf#@n6HcE^_@wcDd+nOgnSr$(Egzle?Fek#DAG(z8JR`^~X{J)W9< z3k|p}m$3fu=CfuJ_G-YlaE$Jg4kJ%bq|12zGQA4JE-`4`90e^M+>oCXi9FVxv#r9Y zgROSvRey#iId%{by4&l#c`3MOA=h-B4Fxc%!VZM0*`t$294for+tcA`gleO~<#xPj z`+)7^ML0XMvoU0+zgzeEuV}A-EQsY~;7p0X9g!BWn|jV-M^FBJYsHU@C68OB1qeXX z6z9Q|k&kNzQmQw7*1rqP=x2PBmXUr|G9P{3OC%`-Z+E@FY1!%DQ4a;RTPftu_FkAr zk(^HQzXyYpbxmRUHaR#y$HjN*x}zKIw3A&AQV6Nb@juWtZ!`tnejMk9wtjmTg}E`B zaq2@)gEO$w+7KCu8;^nNj6>^fRzn#1O3yZ7<|%oPV4J6dhceQfeNbjXVIs;mp%l{adtoz)FEPQ| zEzM;CXBv=&#GFlM4RK=n9qZJ>ntZ$<>7HkM8gdi^((R=!f5I41ZNIJ$0>W)gcm(bN zWg^XJ=P^~Hra-AA4pywv8j1kf_fC$Eq5FQ1+9)<*O#PT|4S0It-?(@iK3pTbs$9V7 z;1d1IS;OS|fhU-XJgPPW<$}nR8&tjWXH=@2K)ma);{DHOAIAy$!y|>-8D29Vl-c2l zr76tuZ=~V4jCFF&Ar_seb_g70cw{71bFvjy19bDl6=~t zGE#45e61!SmKozVnh3h5c%w1a!oF~KnuGs{ZJq{4?yNXxyKK%}T0~h*ZB6gjM~11( z)lu%D-B?m{m-syw-+;$Y%ZMJ78lQ1`9q0@}lUn*;qTWD^HMOkVWq$Oxj1ICC#B!-x z4!lS=rgecYxyI(8ZSgr|R;l!&()w6M$GjTbn6u^LNCDK6@6!_D&q0glBu7qX@EbUT zRI87$Fw&f(xT9r76{sSS!anZ2BeBDz&2r#+Z;&Z0VZ_3i=q=LaK~7ik(L-z6J@bkp zi^8DRhpb_O396lTN%8v=w&hMM(txwkoum@Sr4PPO&xP-KT2Bu1lF|uVjt)`R_{IEk zp0lSbkbDDamuD2qeh#qJt2!-(auznG-|4nSV@|n(5M!?OI?xh(I+@r z9sa}aY(4{R>I3n9MiFXu$8JB=QY`Scth;FTD{rQy053Eq(3)|`&d(2Y@2KUf$UZ;y z0G@E<2!dF-hz)SCKrS@v{`{2p zxcIg0hyHl!UqSL&smfxswlyn$80c*&?xLX z3sp6(W)F@T9kOw8Nd{0^{S?3dSYT1EbVWJmwJOuc|NofWU2ZKbvAtF9^NOQ+Zml{qAzp4pLRj)Y5T*8Q`$m z8E$VOc3Vw1^sNx{b$EI18y{QyXhuOi0Jhga>>rdw0n0C^-@t{Lq7U z)zJHPnahYsIx^`r0FXBmYzTKOzHf`p_v||TNqYbX7!EqmjeBzLubE6$H)l0fhKnDN zUyx!|7#sGD7lnq(cytw&MG(Eyz~*}K9P9{QYP3IzBk1yKO=L@Itn;v!mvtXV&~I$> zbTRFg6}83xiG+MeI3R`FYu`4rcD4^PY4jCT3G(FZ@Le<-QXbFU`29x6azlN8=|V4^ zXSekQWjW~fz_d%Vd|0h;$1yOtmDZ!3kj38iER*F7R`rli<`@7DLM)*>P3Sk7s+>YH z6vJB2^9fBU&dGx?W5?Nw*pG=tX~sJi(i%MogHJdm9p1ASN%lywVQ3vdb<5F&!~zpG z1>+CQXUeDpoh)34R-|=Jvx@cyDaWa&X$R;D+M}M5eoYVv7r$-t>{{$Q|K5?%r(A<- zcDTyIIydYB8w*S2c39Br`Odo{i&)JWw4g~q^iw6X8q+b}KEB^$vLv7+Me~5Ak6>ap zj~{pZZ1tdj1ulMv)GU{11@VakXdFeE<%dhlK)vHIpjDvQTckNy2iY)^e-BO|qaJ$F zk9X6=k=~0fZlyv&gSSW0uM!(Hi>)YM_3PP29qcT7xy>}`vT!B&Uhm02dv)PfoTdLvp*&#I-G}qgNkgxn_))hmSqrUap2(Pt&!NU9Pp$7T2YD>;S}a;l5`m*mGx1 zPf3mQ9trijWHQ9nIIX^6e7&ikGd%9;pRti~I?NUCBzA~ReSNNE?r7@>%{#vbnoL;T zU-aGi>=kYq&4R3HEqH-bXSl`lx<5l;QjLP5e*?b?2l=>Zb=LU`lczljh@GvYh1o+X z8DAcbp*Nm?U$7Uq68?J|KaxS63#r-Tz{0cXdvqz){)|)_ckE|;T$GRxgst?UkL(In z)7BExbANs=a|RpvRj#LmxG}2St@hw5ZA6cv;DW(i&e4tUG^w}Z&K8(3hEKOCYFhn{ z-ko7@;Drk*-@Y?n!1bsIvk_ z*fQ(T@Z)wPc7BMFYHyf(AnAqD>95@E;Cjc!JZVfd)WDMnmxOavv(-)(cGi5lPrl2o zcD$JO@Rv12!Q4KXA2mv3V%d2WC|yugGWGHxu|KRzfmGdHFwtcXUioyd{S)E;13>RD zC&UrsA^E{7?NJfCCz`Lr3060d>=%OQx)A@DI4?_0eOwjIsRxqWOo>LITvP*;d;dgW zc_82>WpbEHmsO5|+Wo?!ZmMCi)|$JRo7zqJB^MCg$5j==F!p|)aqz~l1)!6al9^)- zy8X6b1S@@ERqT0&WGhM;WF55k8QP#gk5R>ak74|4&#?^m39*|~Py7he>r02$_MMj7 zRfoun+`~BKYpdJH!@Qsod+L2|U>C0}VaX&ex=+ zeF~GM#FqV+K6L4V3g*9mVKIKVNhUYKCuxIw#_u_SPQAu%;JTBTOi4fe;9JMYPkGAC zwzoQVo`LM2d#kE^Aru^!Uk9N#hYNeWG%EM40Eb4+#YUoe%3FWo&X>CDq>rJvrwT1O zzYAaOD?@q=@T8Bwk*x|lTS!|)Zt6Bgk_Ml^P(M;M9C`F0qhT}+r^=DeOD6StINXZ` z++Qg&BBw@>HLO4RhTH+~9LDCl&~K@YAtT@D{OwEgm9|-&--+)?O*C-2H}YxxOT3zN zZP0};Wb>-ut*z)p)L0KJOV{6kjYJ6-$y5t4?gLmly*3)t|02wpyN)@n4~mp_7#EG5 z)AxjTd=#qxAJn~dR8?)e@4x7hmTpiGY3XiII;2yU(%l_W3n>v0loAl>?rxBl?(WXT zqWMjpH}-Sh?ep&a+h?3{#u550sppY94MlPtK$WmKC!VG zJw562^A;%^4-dHd_rqu3pU*w%CReYgWa!{lSZd4i*VG^|S>DY`DAPDIMz7y!I7h?M z<$F>PMKmT9Y(+F2uf(D$y4>cy7V{174Q<dP{I*U!tbO>^a~z$yam=|Zu1(g@aR$=s866a0B)@Sm{8K^ ze&Q~_0G3^)nad@>-HE&Ex$)&4vvm#HSWSX$U5_>~2&Kd{Oxtdr9T$^lgD@JjH%5g@ zNE~R($QZMwc3bVLnfteF6sX6f?&z|R7g#dDYc zs?a|CLx9rvGIXk24Yil=l#9Vy?7#)TD?C!R^trTnt|SmGb4DU%mNpfu%Vk4(&^Dy! z3rJei6xxSsAO{q#@)w8A`QSaL;p68fSLk)%qphojACc!UL&PQ10lZ5eGh3XC+U$( zR-2a}g}y8%Tggr0Vl+YFBa}Bz$0UprUy`D5hfHm_eV^RLx$ds+6}f)$JYCq)k2W4L zoOrU(=`OXyt`NRt(urb-H&tt63X9{|p#Jkob%clb1J)PmBGjE=^KV%BkO#~S)y-yB zVoz=pA~;{s-nkbcURWh~kh9byt{^1|8Hs5O4!&fr$=H519!YjOhWM`H)TZ;p^L1zD zb=|r;*CTAvv7E1dopQ`Q8_!nUuj0~-I*Q&Z;<1lZ#dBuM=6G{ z{MJGg!)4rsx4sB2#KQ@GX$d6ziA>Mg(w&rdq_HCs*VbL<7^{zIL3*o494bC`>AqIF zx>7Ce@QgwT)Nz>PiM=iXF%2A6n*LS|bTQzypUzP~CZjrSXn7i79b0)N z$ImHnx8_~n_nb0B9O(pRv}amoPYAUzZ2a!NP{pgPxWY~QAecL-B`CCr>@6hN9ttzS zX>+!&ut8vT>B*gND36^i(MQyO?R8mF;%BS`{%_I6b<4U6a?jV^hINKxGTiJIYYiK? zU5;neJwFgUhl|p7Uxx~G`0h1nlu#c9V&}D^Jy%+-^7Zo&o;>zm^>`Qcgq*oR3=KX% zNf5x~gDWQibJRnX2=2Etxj!)Z64zPX6k>oigy7*&;0$H!HNdm)RIqB}sH|8>^;e(+ zwM{e$l8iJCI8wXtrywholIdydc|W1svF2cN#8#`pWM(~%e%nVg6ecco-K!v(Cv1oa z`3O_`qrW24fc%Xg%JNC&K|w;k8hk9j9eP>=|TJaBa89Ba@;WbLZhLhPN-cdrTPOejIF@$QSwy zYzwRrl6gyhl~!H3Sxvk?y>xR-;tc{tfWd8g-Q7E2$wylgg>kzdEEAGvxtFEaiu!!4 zMT%xC!%wlb^r&%IK+$Ao%x&U8M`BEHG5k?_UX)$mkL!`$SSn06AZAkFr?SD8-FevX zl9w$}{8iYivu4>vQ(g}87T!lS$v+Go8_5m~4il3EdF^0J(I!%5PX4X_}^-C@4!;d44L9HqKfOhfmr@@JH^ z=I9UUAcK0}S$_YRk>Lu94mj&OigQdFLKqVHoP2_*lefqm)bOA%rlG8p_)3c&&3(IfAoPSJ)6+0OuMQR<1q@ zUB-DeRqrN6yai+xJEZ|qbs|g&pgoUKTXJ^8b>kozUEg_&aL0g+{^JM|+~w0GJIjl& zx@Awo4fxD~f8@5HBW@2DNgOj61IYLoPM;LjiXZvUqJ`sDTwpjL#I&z=dxcl<9Ae{V z;P|ypGT&j5zAjqPlOKr}Vdv1fJLvP3s!-v$@VV4)kWyhxnI5}s^!w*6 zejz4wU$RFKG$>ZSukyLZi;@6Dhh`}Cwf8`-i0#(F>rp43tZFl^3nQ+9jcwm&jl8gn zGF_JpC=VtLh)#*J2VV3BX8;4Y4^qUv*p2hGL^$=`!=*m=q*`6L+b#a88;;+gUtdR= z!wpaB!lqSRwBps&g!>D{a3ollTa;Q3)U+CgVtxZ21q=9V`5dG9obJ-s?NyYwUr>6k zqmiDcC0U%d!E$w44V^CtgttLYS({&M$2{w(ewKa_=bDnU8`E8DU@5r&|AR2D!TYy_ zF*7N^7IcK$%teK7y1siFOtj}t5o>^H%=}WE1Rc13g1VqCz8E3g-Nw*hK}N>l2FxbO zqq!D|G;8Sd_Uf@jj&0Q<&A89R0u`>9O8{N{Dh&6FkhS(#ylW;M)QK!U9$P6XXA^ga zm{E_;mFE#ChwKf?F--yY=^I5+1KlnYS@Mi*C9N6o`g&x%n)!9DmG~5Uw)%ptxbFl$ zmYDb$QI|E#C&V4W^G9IMej&P~NkL*{`D?;B+m1jGr39+mZI@yRs!#cY&le&-zV*7h zT-SGf^Al&4j2O$wo8fFbb|n$C8eEyM+Q;*6p4IXIGEtK1ErDsQ@T5%~u5=5isbyM% zqKTJR(O4DmXzPf%w*=f+RcAwmFj^A7le2$|pmWB}3J+_&yQN9h2&VfM&;_L8wIE4E z264R-6jHb~rz%XR$KB=Q-+!DUzGH?XhG(E}rBP$k`#f+wk@zv>WAMc;kgB8KYCJ#9 zFSZ=}Zi+U^*R}S;7E+x00txytC0OJv>memyg;*p%+2BDdPEE=?*bR-|M>MX{HXH1J zT?xXUzVw=RX*zn#7-f)vYF^XGfvc;n-4ff3Q!aYV91TS4)NuRxmwSwBKH1-TU%oTs zlb8ikdaq6b5c;+nVUE+U@~i||4Ze1Avkj+ukJz75%gpWFbgr4Is$yd79dohVnY1nJ z;01355S#jt>)YX&sq%X4O*yZ>jXNds16tg^ZZaIE z2Cb4yEOki*X5Q6M^a0OI3YnVB%A;r`bR2gFLmVc{$m@<{ zQaO-}MC-g8SwD3}fu7dD@eqX|efg<;_4X)}`I&jM9PLl^G?ddCa3n|SH8FP+%?CPH zgL)UBzK?UOqD5LMl;*<|+9@JL=LLN+*I&9)&?w+9D`KDY!Oc*jcu^!;dis#}UMhRe zohCiRt^jrG>0!fn@@Cktyn4dX1ti5WlaH2l)*Ffy8?*N#S2}DQy$PbeNrTDG1T2(Z z*ig~*P>01L&tRFMFA`Swr$YNN_+f{@bH}yHuNXL~4jFf_n@cz#W^ql)I#LS0-C4** zm%VNy2%l-La}_lCcI@2=El7*WArS>Apk3u^i`bu7Z#vNEf?I&oadsh&LU1Y^Sb+fP z%hz02TWrcI>Xv>iBDG=U+k?#j=T3qj<#DmxnMZFc)gfbvWSI`ziJ#e`{TB0aWxWw4 zooGm+M*mnytU%_&Or1R?JTlX0A*i1s`YK0v|Z4B>x6xPc4>r?#dH?yTJS}%IM-;$2?M$Z-DLMH+3u{{PL=kKV^n!I&>%dRC zcJoq=sNCI@hY+&#ZUpYrqr&AJA6OH`F@4}wy5dV03dKzu-ymz3GqTKqx&V!#Z zAUy);y{oHOMqi?i`Tl$?mq17r`xp=Z%hn>$4b|Rn2{{C{+QSJ``3ca=fVQ5CqqNan zRZP*kZ9V?m)#sw1b<(fAY(G~h^cw(1ty~?QmKKp6a+zZ{)!-2`lO~X;Sie^`R)b`` zU*%lK;&;W!CTAY91TTJ@U}UNNjUPJp*aiD-SviKH;J1`>GeSzOBCZ1>{dz`5v|eGN z6)R$H;cJ*%binOixus#8e~mT!@FqU&V-$QO&{V)DRe082q{Sg57^kM%;WoX9t;mRr zFN6Jab{ZDm0fj=pmR9I%L{9y2l1fW1a5}OYGSHb@2AY=0LFn*^7)RKa4IE@1;5lV~ zusR)Bmy2^o(-c9LpvpvHyrlx6mtk?5Z-{t!LcoYq<8hW%qRClOtzfW4Nx8G5(tL_Z z(NrrO@e+S(O-_uK#hbD)&xqzY9=qE>wNL8i#dGkaJ`?Y_ZX&`_j|V12Uqq%FG$x;v zJ5FQHo%>5#%&21z-zlD_-|O=SY_Rx!(0tx~I59$NIsBbpvHr|cplCqVc~c#GRM5y< z3fNhET#)zOufn|ZexhvJce$wXZoA%jH^XZimci0+kMNZzn=!CkW%m~A!}NX1EmaB- zu}}kQjIYMZkJ3ZS#!fjrWAN1AO^1q>HmN%jW0jRQkkqd(8-RjfrzC2j_P3x-R>Go3 z6r>((>8ZO%%MkyRRv zoX_`%>Q0{+?sm1`lU9gjD{#rC1JtmKE>VKa@w%pTgwe^`Ix&MEHL!N0gBs;ewd|C~=XgDu#nthXOuf?XH zNbq#UZRd5y%2ce7tW74B%e%LxkrmkW8|zJZY#5h~e@)=oz(eu;amyjEI^vm}_&u>= zK4zyG_LhExyqd=?hEBa~_;2~4208=b@PWwOlfBzRQ|F8bgVyg(?wDVVIeM^5`DE(K$Xe$2UVlkyC zl7#=|xcvu)`_EHV&;4)?cSqR*iQs{cN{k3-DwM@b5zx3SM&6=O8esi3U+{N;tRC;- z6|%}1!G8mKV}POVf;cHAiVs&4Al7U9uW$2TKeN9S=yUkri(UYyA6WeGaz|(%+yATU zN%L?$B^cC0{&qc?;2c1c@%rsIN{CA#%g?<2csKvH=p+99@&bX_Gj4!0j}k#} z^!{!2?VsbIrAShYyrq7ywt}MP{!U9WMKEDxV}N_C*yuTscpl%9)d#@h>wRC(yG!b) zPoJs)L@K=^p2bYXBZ0e%HJQcxl-xkrJkd8mF*Uq5t;6MRzr(XFFt}Mcd1XGB46>Pt zlLZnKwy~>x`xP9KrRmydhek3(Lh7%`c-B;tcq%Q9Y@_6*eo4Qh5^M05* z82t41ug@YR8o1EM$CkeeHwQ7*TzQ81H>EJ_()C0y^u1f`~E8k zjbyCCLL%kr$nRb&BM1mfQgHooWx_)pl70@F-6THDT6|sSrb52 zanX`cf~HqP6A$R|fv%YHwPzBfD|GuO*!Wv-pJc_NZ?gZ7PY8>5DI zU2ReHEA!-1R@D~zl|Y6S&t9%}T{5a}s~Nx6f~%>hh>H?D-~%w&q_{-ybiHcVD?h)p zVcBsL2-ymuzt!V4Kj2gDT#iKwIB%(#VF`wVBH%=h#QcjIMgS|D-@Om!Ly)Pc?s?Z* zF|AGmc+x9x4DXXy+$o-xjE(2IN}0x`g?zwtWp+m!I&BAlq*vt1zDy5~(|^6I|G1%5 zM1fm$GTNxo*JmXxs{*!wb~dK&$K>yKSokMYxU+T94_h^wGV8S_p&G3&<-76Lj`~7| zjza3>t_`FqO0UPb9n}u2v=e14dJ=KpDh`EVXRQ9Kyoz5R4|jx-aQS)*V3^=6EAeLq zc>)Pt?_JOcmw$F@-glt3n3-VMs~S5NvURl-2>0Iqwgusfb0>kta-rW{ZAg?rUXVO)f#f07H*XzWd`dx2_0(yp$W}PeA6FHvGq=!6vxWYv8NCz|GNATWewU zReViq4*hs+t&uA{(3Q+Vpx7+UKxR@uRw?nP?0qtM%jKmsmx&Z<8dGvMF#lDxwM))^ z{Pg*|Qc#4|6tn61fq{&Xw<-mc7sApWnq3asdl#|Ai?|est+e7bIM-4liQ)#=wM*P+ zOSDTFu;kOv@l@`S@)L-PCLA%=Du9T;Gi?vOHs7By7b!iraRFVAqlcCc3drx9@d4Q6 z{h8zL!PxAW2B=7lN&YLZos#+wh4elE93Fi1FI=&XnKrBF+{B?^F@PaW>bvUjH?Lxg zOg)gr@qZ_a#~X<}LamuJZLbRtJqm}aTS73oo$oH+0lNS^6rMS}zP76t5%*01>h4mT zN=9e59sB#SK#k~1^zguL;iQlU$-FL~<~aL1F6?@g>ScQ~F>WJFW80}c`N{}2Q%5IQ z?q~mZ8p$2rOH8=alJ*br_*`k7;Q1x}_MqL3flKC=Nx*MsSoTCkzNMREn0jy<=p-rP zc|J{jd*dX6k!(KGgVy~Van1cI9BenQD=8T&L)^OVy%f+XM?7ep&aWA0{AiOIvF*X? zaJjuIRszUfVB27Ylcd$RH2or{kLJda`ZwmB`rfAtl#=Zm<*0$TL* z^FL@Pmq6pahV(sEmwk9@~Yt8UYbFW@`TUXul$CDzc`;y=RUvtY}tu#Rf@wLf*H;dK}$$%GOJ~z zQJ#;>(e5_4j4dm+yP6pSu6KPUC#9fuz}<|;U^O-sYrfI1AmV0jyV*HIR9)I>0^7=j z6iG`tLeSCi_^!07N7MpcbadeA&9H?lUUnjdYO^<-jc`49AvMBF6EjnBV{hl2_=kU$>}d-MH5Q%GS7;3}i4 z=9tg|O?00nz6z!Ed}$DUI_|{!ily!4 zw~0c%{A;LM)Mpt^yTJRR*VytkQQZ+Fnff0YcPQt-Sth#OUF&d(%}W}L*T4Pbi7d9& ztRkJN{EYz!1qm-6s0^*5LvMuigx&1cSCPirx2C|+Ss59$P-{_r=@{%a5!;1^FS?bM z(y1YXrAyV*?J%dsv!icwEb9VAbQW5%zlRSfgR6p+N}R|Kea( z%g`g(pw+gSH;s(}g3AjQhL+R@KR^g3yC{CO$YZSwAow=E@dy zg-BmC2X;FssBzQZwumb!>S`^}9Ev5{khu8DEI9_xaBQT}i_zyuJYM%%Y|fz5nn(q@ zruvW9zs|NVuuzY$iLV#^?xi%e_!H75mAX5f7IHmE@O^jBo7#E2_BEvZZV57cV2Ub> zPxzfL*VoUWljCEh;1{80mF@pv0R~c%)~8eQuk(;EHYZ9n0S+#lQW=COy5b7G; zs7K@Nxq|D4iP6Q6%OSrP+f?^2)fUCFyfOFc?J`!9h)xB&k2~&fu>p(Vc%_9mwl+}^ z;8+=X#F4sNByVQ=Y~0_DBQ6Focf}Sf&a2Q-Lbn|jm&gz>0zQhpKmJy05IS*vdN!)Q zWpsbyq=PyqUv6er`=e?Kt>vLE5xR@&lB-pavu3sN9%JO94xqKsp~*_$f-%Z9cEY@L zAi!GA`vFfr=qY<)Vr!pCS19F|wtb4rW>xLPde8co(}Q0nh&xX~Y=-2oV-?rAz#+J9 z80kbNy*uL?%rlk__S0o@>v9E40=9`%-9dOANrNe|<7>I9V0`>Awg#0RhcJV>C*{|t zf3^!_c&B-P%9lc>J0V=z@21jn@(~v9*{@XIvbsKhDrfytH8wot8A`%NtTM7jfwduv zst&mO?HWz!o682YjDv?=P7~M?IUC&#jk7# z+g7hneQ`AofXD{}l~(x|(?HBPC)Fy~Qcaj;Z(@R+8ekmCtqi-js!~Qc;(wB^TupB9 zIG7;ao~c*jF_pD(YlB%#a-xBB1mGgbF4G2X7bD+GX*8cvjlD~G=an#qyvz3R@okT_o78Vv2=EJlLShLKA4T;tKdnN60 zQ>RQAgZs19T0{P!IyfOU0_MM{7XX2LwAr%Tc%FtOZZ``vy;gog>r!jr_PpDo26v{N zruRmU)eq$wD#=hRjiF}VvD3PG-5@81``fGC;_OKyzZ9go+wf@^SyB(lcT4v#JZ_uX zGMJi0J68Axal59f?Q(VZ{LOq=MQ4v~KG+SiHFGsx9u*>E0r6ILUasohU!H!cK&sU5 zdgTuI0(NAz@-G7z%M{Swy8fzQ&BGStXGHGL)`SZH>#x#%rY;jw%GY5P2#Pq=j_VU^ z_o`9P#$y#Ob1hW$?AX5U|8Luh<71zQhn2*fpMj@Wjv5@x4}FiqEguveA>oJ30ITz?7O}| z=Z?^m4qc$&7^a0cma&(I&@Jo zX95%JEu`Pb`#4y);M3|ekk@VFLa`pEu@KV{R!|GXjdlhIFB`It0|55qjLc2FE$_mX z)=(|FZ}&=F$Q1AZeWg#OTV3lENG@8O_GMNAbnZB3A9{BuinH4g!I%o0Pvr15gqSv& z(JL3J!1Ip?p=b0WYF~qI?QWI0{5D(S{o2s7cA9=JBZ-+$z(}MyCqg{Vjb$ui=swtR70BWoFKzmXr_OQnQ1e z&L6I0bGw>$4pY=7oXQv>_!yEX$N2`|%_)xRYs#Z5A0$=0$;!*?v&&7UcvSr#gjetK zons%5+co122Hpr~%X1d!>vUo~axemnm&0yzX-T|fuxv_EOB1jvVXsh!tKkB!)J1RLiCBSN$9XsyMr@671IK+2oRP^N zK(tf=tqk^XyesCd>G{?fora)EefB8W`P&E#ekyci?Avo=og^ zY#F#|97){+PrxH7-+~DM!X>x@Al%zfm4zmsj`$BYOCZDQqUU*kdUh8H1z?&tq{iLB+Zl~~Rn_r;+ z_2T_q0+N-J;N@CuycI|Me5*Mya4a76eP#ixl7J6JvcfY#dr(-N@_!K0kltXXdth?l zfeW#%v%SeLCY@wLr09@ZO$q*lj#J}oU2-?@ca3a-JB7N?p&%p!=<$o|Iupp#Dgw6imFmV!opjWmx}C?Z~3>}IeRFY>$Y z72d2|HnqVBKdCs^p`Aw~*#ae}QUvnwrzO8O((akT0r)OUG$u)lF@U0Qj|~0@AfX+l znr#yRrKer7p4q){Zgn|&i{TLTXN(9mg+yg>Bu3hMis6%fNevq?0Q#x^K}H)UE;$RY z9vW)TrWjo&{Z#=asHN(uiWwX+ej*OKUG38px&!A?ETVEw*$$H0aP{ zc79Fm#G&_0UsGSt*KjB+s>pN~6ltqw0YT|rpU=2O6cL`qD3sa-9iOb9?qwZ)&zt-g zUvkFh6w+k8oZRa%b@3uQ$dx5dD{f;h1DJz8e+rr7V9rT>{7D6kxyKjc;C6(Y1y81G z%_jv0_w2P{x?P72`1^bT82JF8tBbV+_#R9*Kh~yrJLY~sDKriJIP2kHvc^@Vy;oA~ zj%0j;97T!RT4SqnI+bhS@pK1m!u~9)($>z$jPZv6rT(RJU{>{-44SFMX-`z3Sb%B4=A2htVX|_rIGaRjY(=REu5%g zK{D1D~A+uLq}yfEs@1{ZcNSYO~ur5Sbu1i{{%uu zUT;As^MNjnH+dnp1Tcz4^Cd{I$-^yz0$&2XlhO&n7Rk}nU%~fpOx-OXVpU&EkMAwj z$I&PP4VtcAolwFRlFguKi5KmS^$AY7JV8d;)TO z%YhbFCAmiSh|Uz(ArZbCB%(?nY1IMLju}+vtBF#Q!hYB>Xk+cVN8Q`S1Zsy{C^yS> zteYs2#4|}RLa{j@OMYQ*{>G8A5}m9}{6?B;iSosy2p1K?A8>Te*BsnqWc=IO+Tgq< z3sQ{8Z*`CsD>=~v zXI&&6aoa%$0=Q#kf$b-RuJhzAIjVDodc57Ehp!Q|qlflkp4~14{*{ohna%7pTfn?L zLzi(qS2&meMSN-(VhK@YN)+4rqq6JaTJH@XDt_GG^E;h3Z?O z9DQbqQKKhT_aScq_R|Jm(LUofHh_@GgR1HZ!KJQV3BApKy$8wlC_n(Cg-^(`bbaj! zjtP#7q=Hki;V`#9ZunH5Mg{1R>`{$_?+});f&|?N9+u3$<_I^e0s(N-w+=vFYSrk| zeBTafezSr;JmG3Hp7)%9XG*MAVy zuHZoG?JibBIO5|-$Vyj}!~8Uw>!kiF9Wx>O-yF(uZW(5+9bvpz7{}Fahvvs_zrHyV zt~(1a0DFXtDBd55(6)2~`O@r7(nY9u>~}V@n(dv35@Se;CbRu!n|#nP0!8n(_KbO> zI{_nDmZ)uXrgjE{rDP^+7Sva#s^C*f@r37>EA9UUhA!QO6d5!MF!U2+F#U~(&M(=m zqUg86Pke9R&B&jRF0@i!L&|*TCCc=0FS-kE#z5Bso|jg&tV|ZHygZ zi$&zSl6=TyE+5Ow%Y|0Dg;4F;VGBJM=UH{fE)lZ1D^2F-o*X`!>(u9^NHCtZN=d8C$*omOM-9PLr4v` zGFcg-5-B<9g?q=Zj@sb}UK!RS+cU$}eD8SniUWY8ukLc*((s)gvfBK~!|W7%yhIUl z__#xC)i0+uAAHKurM<{+dx%+o2v@wQMNHMy-XH$Zf#_48n0W%v+|i$1%ltm)UsOrk zcU>S3?gajYlLEfGuMwv9^>;~IASqqE5Ze@i_@npL?i4K-cf$8Kj;!_H`Yc-BL>&f+ z_^6Q+ZF#)ecP;uadY}MaJmJfr3-IreXjYQ{5{d49XcUG;Ar}Yw_`pQ-k6G>yXTGlG z0-$Kq{hvB}RQPZ0Z)i!eV|VP2fi(wzy^(W2)lM(XXZM~@FBQ9hreb+@P9p0kJs9l?={1R7FFOpz~kl7-DE z44bu}`9}-6#RqOK3i@6)zEW#!cRVIiRp)-{;RJrAZ>T7qq7NhR^jF=pFHjHCesUT4 zu3w22YOk;I(KM(?Wl$^|8VrgcpMa>f$p~Fx(e4DH*$&u1$U~LnUH~(EpHIR}UjY9( z)$lNmm`aHUW&qJDMODVI>rTy&EJS0z$NkA9#>naKrpu5k{SHPM)ajb7Tgg-ShHa8j z(M_U~-nJDrDwpjdV;Aw5xTg%ZQVN@d59}L&Wc0EXlT0U)kVskP^0nA<3ku?5=w!dT z+-QRb1auvizJ^lyPOatZn_~^$bfOYACsjH@N~!k?X-ioKD*b(7^KOy97PX}Hn!hj; z8M>#xx%sq#v|yTKbH*`D`0Ij9%3$pZ*nVb+csZ%QpXz|EZ6FF%99pl$pUE_`)$hG1 zca0t~OYuJGiSmmkFe6a&1j=%)~@&y)NFgjm-L|3`O!?-;6aia3Nd}dvhP#&xpG(f+RKt} z4QtD|wh))TE9N#F&IE!Ug~k;b^eM`PW-Ps7lUiM=-_9?VdtD+G@GHC$hm}?v+c+Pa z$&*|zfEz%sr7-T#lZ=|P&S#iLBSwF@iNC-w7ebJrYT{NB;n%~S{w8!&GARW=Ni4r6 zMDSI01;zks8B15Z`+5*fDHZXaVFKnqddLL%l!MVF zIJHb6WUdm=FP8YDcK&!E^e{#A?x;r+n_x#=tVW#NUM!1pOfu?iwiCuAKY>3u5~_{z zJo${fNz@Bg#BTFybgmtsJTS1Htbp*S3o;``DPSE$du6^`INC4s`uoLuGnzU?vazYDodw}`2--Bf13vszA_qTx zv|$SnPDrt*pfzBv`}vMGad$v?L?a@w1_)q!lPO9`ep`Ti5O3mJ8=ifa@CdA)MD>`$ z!47p)J-hBL)UvsXgsgrvd()~(RL?jmd|;wZpgHW|6(`w6aNYJomV9lP0?!A-2*;h= zX*6I_gXj`y4}(r(hPh~A2Q8JpHOvgb&+3Ni=zTNeA2}W|Xh~B8In`wtHXhW5e zzS2eazYsd%F2m@QdC#AFxY8ML`Mwkb!#INGjK$Ftiz;;vnQ*TKW0eSu*}#F!5n4cC z{u~;nwaM=Uzl%USh!Yl7oATw$56$^mJE}ws2t+~;$apZ7jCOT-O9n1Z9nj_p6ssOs zk&lU0z`k;esQamQl`?-!sld%Za(vom0J6e9`62Nu^x}nwqamG}e<_&eE286<*_H2+ zH51!FTOXteIf%XeV^p@pSsa55mT&vXU6mJZ`b2{$R!?Y8@#01AF6b_XfNj0TjcS8N z&&us$g@N6A=WR94st~f{HBKl0)-2Ux99x=XiH=*KNT_&kYt!{>{D&WM-mecrH9xz< zy_WoN{DECjd~c--?h87^i8t*bUtpa`GS2-IFX!)WuTgeOPX`6b(pMMhP3(+Do48FE z%n}_c8cCFkttwdVKHDOzWGkgaphD9{x;H>FkJ(Pn0bp*3zRdxJzzhcL%Qqsw=gNrf z>+O9Fc$>q$+n%}2yChWMsy61}`#SYJO(2Gae{63r9}=;$wlDsb1EBTuntrjc=AZ#3 z-{{Q_eE;R%k|B|J)6}c8l=4o(0PYf_=AV*s_S}h_*_zlKViB#RQ3&dtodFzNcBxu_ zP}^({=7=a-T~U~|I@D>qH4Y{Ig`?bX9>O%qG;Zt*PjNzwVc}2|SgYrwa91yTgbdCN zypzaP9K4KADMGNHbopZ*2o@*>?I=6R1&TFYJ=eBNEzb>@6n9Jw*r>mmh`jHfsr0?Y zY89_amy9h=89wYFv;C>Hu-ZMjmCn;&sjk$cN+WXR!{cTfaEX;OE~&YM4TpW0&s6l2 zQ^Gb!l%`(-6x5E6#VLGco-SiM8wjA+eGp-(#yCe7)~$2=oY8&p7p->3G+=-Oxl=$HaKl^5yZcFMR_R5 zuxxVH>=(hnCve$R#_xY@*k13subW1xkjTkkbWOIN;2JFCUHWBwrrqtuH{tC#GMPixl(5A9ehfRYJUcBl z|1cDV>MW-{a`ZiH(5BjBtP(M_&l)b4MzSoDJ(cA2`q3o+oBayPhN#~^;9h=PN9EE3 zMHQhlpBmFV(pv>by=wY0G! zvW&6Z7PHA48SNwJH$PnQ4^LZd1iCWpn3}4o9K5N7Hpj9`4C|vAy%gP~fY{B;TZ;F% zEja$8BfZHt)|m~+%xWx2FN$C59ABMFQ!lt@gXXGkA1i}4bVogJSJn(lXkfDL*Ep9S z%;zmePjqi@(;%F4#&s@zzsz;`a>VrYYf4m{U;->Pel^c(X<#}TJeeu>F<(TRsUUvOnXMn_)DEEg=Fj>o&W6T`yWTnQ_5~TaYg5YK3CL6 zPO9vO_FfjECq(U6l(k-)gV4OnbGOC#yyA=>?*Cu`xE-FqQxB61ULA~M^q^03Xz8W6 z^o()4j8*=i_?%!Bx`6&p{mnf3vrAMwYPjG0n5)7M;Q7bQ?w|C{ms#sj`;neR0T$G( zTHE#!x+?SF*!cqC2}Ye1z3au8SljFUK8+GtEQvK{@9X^)2zghb0fR_1;>&L~Xx7&7 zCEd)Qj0Pk5N5Go??gT5luOqCM-pu>i zy_1*4vlC@yV7@YU{?kJkEYsAJME2!SK-FN;yWCJos8rW!mX63}D3#>ZXk>h zq=6O_2BAAQm9tBwQLv+w3pR1doqCD2WkJ%2=ndv?#uPBnDxLjg8$7``|YKidWot6T6ih& zY2dei{kvbHw~!+MxAcGOrz8gF8>k`1`AL%a!vO;{_JiSf8#l?#HuM2W(Q;NB6cES&`cV-ivE|}p&B9tIpY?UTPrBnKUs@4)G6;`W73TKi6vNZ;5o5^xq>+x zC+3x^Y=a&G#4mq;1Xz+CE1KrvY=3rFU94EH4qEe$!Hdz_b{Y!{k(DmR$17|c*-%4j6jW%rc5!*l>FsRyTdIc1Jn%A}-H4TjA?kgW<>)Tgd(hLhy` zZqL=~zi10-7$Pzzyal$y89z1oaB6&eH6b%bHrb!DYcm!UhVS%lqrc(pvrY>#)kP9c z%k@?i;ZO1LKiZ}>wAPaxJ~lL~?H`6xp6qD5)!(XVZX_tBjP&31aVn5S%g?r$!%f*e zzgec!lB;fv{-h)fQ|t{O;)-qwp#^2e1DIkA=a92BYK!R2(rBsAgifuZu5ywr+sUNg ztyLDk`KMCA3?Q^!yScNrm6;!l-h$H`iWO{Z_@w?|XU`|nW#t3Y+zWf-s=fN+^2LfL z^;=%t)kdXNs}wL;bGB~_0ML`I0h6<}^@Q*lq;O~_|Ae=$(U9e!PtuFjq*I~0&wn+? z@Bki!ywQuE_s|*#R*$<&0Rk~x{%vl7@k9>plPRzvz~`AvgQLfIA$oeC)EAwF?^|ao zb7je?oD?cwYh136YlXir5T+bPEq+b+%5A<CBRsU+fPgj4ESGKfAxmR|cBissRl`;^kR; z2omJarh|hmPFBLzlRup$d}Oz{yWc-kSBo z>JM46(ar>lL!ygWE5{>Qon@zkVcnhU3H4d>3C`uYsku;qtI1YNbH`tO=*IWU-vjUleg$@UQkJU22?=_{QJxY8 zsBa%K6&H*n&|we}Zac9XMTs`)ZuS-E$S6juXCN6HNjA>8I#-c9ZVZfEZ#nGx6wZ!O zm84^|0NoplP3DP=9t#o*PHLr91G_+>R!YK^T@6g=1Ej0WYQ!jhWo5l!-M8NNd29L(W zx2eaFBae=ay3$5`u}6?Era4}(|6y- z0)YTc2<{Lhcz^)Gr2`2B2<|Sy-Q8&djT0bPfMCJh-7N%ncXzkF$jqLZ|2gkFr%vr% z#RrONx?!#LJkKq^>$=U$IH&~HOxw+>kvQ79ppiLTlrUN;TN4AruCT3XaiwAr()ptm zsm-6Sfc6qgHP>!D!m`G0?czLOt-UD@p-OK?J?$hld-n$q^UgY1+RWgPGTUpx6RIS zRJ;?|NFu(wuqHAb?f6oRufNoq6rBlDO1{)KQaGf6@Q3Ce68C|3F$MYhRK$Y(%}*_4 zWfPLzZNtQ#WwigKTK{DjSEKj|c*O4~{W}1tSecM_1-=62DEItn^FV>j=8GQ+iL1z9{kY@3?>xLCAVUq~5WnCf1d{>kQYnLoeGtj*MLox&)d_w4!;=I51a`AAIM4xVzGQat*9^x~Tq+IZh=ZGgs%?jX)&*TrK@+(`(wIq?4OC6# zZ~-0$=bTKd1$viXR^%7-O@J#i*|-Q zmVZcHqMIMuRIlz75pjGWtGovKNMXg^^Lin+S0^$}<_!+tu4rD#;lZpLO(Fz5*wz|v zP>IDirg_xRHZcY0I63z%Js#}$zAn&VJyAMO8F@K5-qz(#S0oz?m zDKwuNj?dD_gg$nn|HHjg@-#K6qe_(;`G zpFo`*ljaW_f@aTl;Bg{#31*A5W3hO@P`0mZUeCD|bwS~{5kEzJx|A^_blg+Z-3?*) z<0IDt^x>AA0d{NKc~o}2`{nWhQ^hh|Z(%Fq-Xf2#&m%Ho(2%n5kk>ZTCU1B!wOn&^ zB7c(<-S@N)sWjQirEV@{Qi4PgyKeCX8^ySakTJuOt1791IleD0cgtKg69G3Bu9G)2 z#7W)3+|E9n!uEb^j`>kJFm8XJw@T_W6zNu^o|9&fhURGI6gw^FhAnr3F)tXBPNK&b<3DnM}A&?J7v<*7OrG8yqMgIoClSO^)`J3 z!#hyfQptxAJvDJb`*q7w#iAxLlxE5OMxjR6H7x?qJH4saS^c@ezO^2-2bwx`9`$=3 zQ#JY#OTQ*gVApYaYOBA(ijE32624zAhdi+p>dM^V9yiH1l>GW)%MCjy@sJc4tU(+t z!&$se{=kiau9Gj!2+=Y@@w&7kx+Co?#FIVa?vHs7>bzS~MdEd_%>QLKoJHovf&3)Y z8s;=)QMHz*60`w`4U=t@yHN{Unr@$S`v-~&2a%=ZVmyuie5tiH#jZ*4LoOdQ+vJtC z&ewVKT#q_`9}x6$&|L}(wNa#6!*Nf!vB)AGzQe15>Fm9x{7jzB+CC$Sk;`@$mwO-( zb6B}wrJbc=Exh=hq;qh_3NO*Bh@PMBY&Duf(r9)gC*$W>BX4c{j`HD*emE+>L4c^6 z^ON~AFshAp|JQXDp{`}*om<_upJ%*C3xQy@qe5|hYwrP1wB_G8w%udG?D@i`eKYtmj41r42?G$XK|&ETD!#K@a+6u=D&yrc(g z?r1$o4v4I#IjUCIkT8O{nZVuvbDX_J`{|H$-l|E0pY?L;v(F2Hl52zsp8wBcqa;vY_PdL9NkF$@TV69#Bvun-8pjGw58ppr%5ArJ;ryGbmOnpw3FeGSv zYs^KSQ8Z^(Br%6_d)y~PHiO;_6jK!x#C)jFfE-X5j-i$mxF+VL8*8xyL+Q=tQGw|` z0Lt`cg|b|ATLIL`j`j4m1^LWqr2;}#uM{Qvw*`j#;upB&V`ZU(tK;sX5K(A*9rlMA$PwTEh zo^INT=roJ61F>kovu^I#!yvH~s@qlb?Y4#-r#&N(V*<1*pD78kgz;W+((W8s&e4y; zbW=Up&K94f?}I-er=gkII%{nk7fJ)2r2Q_;l<18t^sh~@2HA6b*OYnF0jJdWVoG85 zlUdnRaMiARMaRvX`=vJ#c57DpMo;oi_V41lOFvtEl_yi9p1Oh|y~@^i6Rl%TK;jrj z&7T3|A4x+JxCZl(vwk0RSD@cGsV|DyoD5Xd{?gZ2AwlHzSRJhdj_i6!XD%RVM*Q%|_ zZr-Cx3xls%VsF+4ghH*xYIi&zLJLx-QOPcB;2a&a2E3mkPYveS8G3oMJHkx{_&%F2QcA#OHqIBdPMi$l5$?1w!oJz5(L#Pxics<_BfXWuszBT6 zb*7f(#|i)vcP*+`e}BVSWETzH!C?0+XrqJL;3khwG(jXEkdh{B&bPmn9DLhln12IK zCYmPhy8Ff5X4tN7^%0o!DqNk(ncnots;!*JyI8$ltUUTT3q1anhif2HuwY>rNnMBzqnIWqzH$U&W9MajtkrjsW{EApVK2nTMa4Us%27z z{G|XdI?h7TAf>$G$dBJUHELI*np;2+kowo+vq~hQAsuWjIV|s$F=St)X&p%=rS96% z`+;0g=uU~2idm1aU+EiHW+jtXaNOe!MYTVbm>Wh5BK0_}m??jBh84&jfxc!8Wxj%E zg%I>_Si|AlVO*u#K*^`)=LOicyhKl%eL}65kejv^nk4qhDPjUoa4KLx%e#}cu>{&4*#}n*M{Z;1L(&CiPX(;D)#sa>?ihXFu4sbKcl_9qi@6PH+OnuugWH?OCxK-^KMTiDK4 zEno1`&*WurOc7s6Ft#uPXI2WxJb~O6?-zCDrbSks~>*o7~-+pEo0m;D%r;EP8ZrPqiCU)gCOCjx%^MZ;DJhX^jgh>HgK@-6~J z)PGmkB!HK~^`@BJt7T{})TpQ~>kzB<7w;rj2BrXwZm*Mbrc*#v`{qka<#04)ceA#? z;7}X+v9TRn45hnbZ>eO~*jwx`rg|PHBzfV8F}_k@SXS6pP*W?E?V0?9$pS7VuWf$L zt@S}c2F0>e0nK}MkmkPR6a zJ?R`4{8(@OY_2+qI-V9dCQGwJYN$RRm2?>qrBTb_SK=a=X56{+*ajM%CHz+?z#Deug(qX4zlCy&zjSf_@D5bj|1FxP_*2oFNywDT1!@+&BP(-(;pdyJs8qe5hc%qvEWJLV;k zT}dNcKDSARq)oWWL7%}vgEM@wp>LZu_`pJ#CuFZO@6*JK>g@0Bre@BGIyeVs*D!st zl6B`mB1t}?T?2qXHmh}DP+oem#hye=|GsnL-i<@>rm>Yv|5TU8n*aXNoV^p_89AWL zOV0R3)KbyW?-Lrz=J3^dHB#v1Ekn_0-`PanKw7P90q;Is7`OA9J@K+YNu#1Q`QhCK zkuL`Q(KN~3-P)hSz^<2Anwwk2=LO=>&}=Xel;tOn`%FasRUZ{-UX(xcp+RfroaW?t zPNjs%3V8~}DBdWeR)oWMQQH_e!9U`7X(Wc$oI46QGv}w4zwQB{-?|# z(WM&9wxSlJ)1{!#CO@*7CO27_nMd3Uz=UmR*BDrUGjoLc>)PtM^z((G%1m)G*ybS* z?AG_t7iyzUeoWqF=WGK+LqBCy6SOh4Cw*adP_`xNNKmLJ0-BkbnOBv)iQl%8fY`4iI~1y1cW9(I|Z#nFDk5Ba58p-Frc3SNy%>_HwUE4x1lW5OwZ@ zSBB@N7o6L&IEgKh?z>l{915xaMqPk9_(l5##HIR%>TZ6-YPb zfvdb7C`gcZ-Y#Qjqg)F7Q)i8AZxxFLXs@F*R~8)2yY*0dXHYe)yaS0>y-7Oazi|He z4KZ$7cQ8dWFO0x?391>!t0SNV@fNtr zS3W^dL(}5Ji&W{xgz_a-Cb<<#BJElqIh~t_qXsE03i}gHPPu!WSGn!V<|=IpJ`fA~ z^4H%>1FQG!L*+B-=i-q~ST3)0HA%E^ne*9+j>cfekQp;I5l~<v z5(uZ@SaQubERjg(Y)z?myRe0IhB=f={cjfFSvXy1+3UDSu2J0Ei&U>`N(@@=J*z}a zj%j$nI1#v@S{wE9XvQctRp`GsT|BMiD4c+N`mDXhXyzPs9TbKG7wS0c(fW1R?YC;_ zLU5c}8Q&Wm+d(Lk6y)H8@MBCbk#IA(U%HUPU~tf+O>FKZnyjqVU{l_M=AQAwyi&0= ztzzibO&&=nlnJ7voT85WjYZrZIp*c!FzT)#%+F&d~ z;H?b}o7t{H*=<87wX;Qvr8-LVkQmcP{DMLNE)hdHjo&$F$piHQ{TB1BQ-Os*=ag=c z;uahcF@5u-T1k4#D!S$FCfJO!>p5{`76Jyt&;gptIhmu1(xEr;bkI&K=2c5F5;GI0 z1X0k;`8@B)4@(ph72q-L%T7H{$A;- zv-d+w^e<)>!>9%73LFzRB*09uAApwCwBmO_EHmemAj}|VC9-nwCxqD!BAOJIDb9M8 zs1D$FV8alN1WZ8o`<-c<~m zn<|-x>6=?l!`}eT$nOMJFGa|wiD-R&bp-vZcoPQRn8(`)AzpP*bn7M)3-Cn@5@9)4lGCz6Y$gk5 zj5UFl&k&|dW@O*VR(6QOZW|%st4sdvZDg{8JtFJ2U(Or}rT~z+8rJf0SwQV)K7Zfk zIXwLVe~6|`#(>l0LEBcOO{rRgbo`iRD;Lev@}H9tzVNnra3Z^mbHAI`AaEVXD^;CH zMmirnm~|@2zd49wTm2aqg`Nl7UPz<|A;2Gd4JPl%DkDG^sJ_?(-Gl_*Ghs7rNC)Lb z(ZC!Ak#T+z{-7fa^6T%|e^lT++z3 zXzh&va1s8tS{WqRG}Zmnn$PVY4V`Os>itOOTl}6Z%`i&Y)vY9ATGDylE=32C(vSLi zTl)ceG>N-$k^ey)zv50hb*Q)EBi3o<(!1o+VjFL|U6$YZ?4A)s#@H^50eQJ{sF#ic zq$1J$sSnbBgOB_^M*Kz%%HRP%)lC5W>j%y64SzbL=)U1|qTz%wS2r7S#@5qA_p9{- zEwz@Nx|IPxXBWWFnNkFC`Q5>MP(EGR$X4?dmbyqu}Z@og!jEN6k5W|-3>)C!PsRPX)6j0A@#mQF@hxHB-dn|Q) z;Kzc&AF(J+dET7*!?Sw&ZK6X`8}D6{?KdN6ydK;tb7j7jBHq;4q4htpHDZNFiu5bS zfgtu9C1&R7pxclk`HlgN{s!9JGBmUij_JH=?nVbDPi1*3F`b;RR!tVHiTNgkxle@M zu20qGa)O+LVIM~izAzk@3qT(oolRq9xT2~iDK#@VN=oj2i;|X=1k)99$X97lG2X1+ z-!#zAQ+#n+Zr6at_(DoW9jU% zCXtHDAx@fLxGvNv=9o5#vgv$*hDVCWg3*r`I+vf%fz7`$@j5gqr7eiI%I6Vh=8pl@ znX{JM1-~^Y5PGCRcm@-&Rmi|Lfqvll8GNtqosgptUnpJqS`Tf5Z;c=9D)32DiH?|p zgH{Id0Cx^toX;CG_pJN$P#fsVq(0Tm-VYdan`*O&}$rvw=ERPtX;)QBL1QRwlNCVZUFg>#jim)7IqZw zfKG{m0e-B|F5*a%#yK4%zEpL2CpVj$_^jI5$Gv>f^s!?Ht#gOHFmJ3dA8M$2#>x3> zDbx1MYwc_*yJz}9FqZP9uIU@yf>Xc8&+*#{$eClLtdkc>{cYK2qrSMog|wlLZlqbm z2|vS!=)#!Y+tIx%Y|i532Yo&`{IC}{yYd7jxbqIm!WlLQao#{pz=6ac-|ny_!BwZX zaPVZ^MUl_{_ZI{S6(<{O!`;c>Zcnc?x?p}t=E;RmyLX;0J*)Avp+ji}ClRrd+N2h0 zj*O+xkv>{D*Z8}yfDKE=d0qA+#g%eTIswQ+I0(~Txs-E>5R$X}y>~*J%a{ZU33i59 zNTh)_$6 zE*sa!Z01hhU0YFqWfa+HC#&VvFn>y9n~Dd?#~Zr)viWH;V1*=vPFLU#!G%MjB(7ChsC#&ZKp(VvQ`%+<4d`#Ycp6_s(1t9?dCN8Xvw3}(-W@o^_ z*=*waR0ke|HoZx9-X&YBDS-Ub=g-+&Rn!<5If=b8VWoFZ1jW?$ z^mG1{rE%Y7|B4aUL!Q5D<$b04Z4Sp>OJCeSW0YuHal^YFznYlKG!b*@WE$@9MRBGw z|8qV{%=jjefFA&cdVrzSpsMh17K9b=apCGsKIt&1hk*P&Cb=FCML%R{92Y1C84Q|y zS%EfW<4|YI$RsgvtCDcGdx?8)0BYO`1lIyt0Ba~{i5vVYfbluGPu623^o+p(a!&Dl z0+&b;{zgtky3)~S%*HKGo&%w&$*-K&F-N8vloY2tK0P;XnSzWfEul7@)z|%$Ol!pR zX*!i+3}jwf?64Wcv`+z3dv6Iim&)fyU?Gg7)! zFjFQ!vHd49JT<*%r#85*734@+>w16di-P6VbVm;(aSPPXvlz|D4Q*9z+oMvlVJrI9 z=iBtRh}}n^MapW9TM}IDY*V5(*z)`sX!nfbKIhD}ke${~*0V9TIx|4DRu5GYh(?^o zghOq%n86Eu1W*%OM|1_}a^-8Mc`vs7+y~y7rp~6I4)Zl%lUAPDZMcr9-P9dOjD6#d zEzN~ww%UB|jj7l9iLtu#ZhlQh;1y@CLg<7WLyS~_1H<=Ks=wx%zrTCR0oWs2R`szs z^_3d>+?sUravFne>(&!z9hlT)y12|9@BY=f!eEPEo?%avE9{9#*!WJ-pv*UxQJbJc z5#Uy#`+|@bEB9!CKfTXO-kAp@MJj$V3WH?W5ZK0}*#%-AY8uMPuCgB~kCao!=ywL4 zq3+RKTx>F~>9v#>SHZMOW|nTN>HAacq5{`B4*3x?zDo`hW4*peS_8 z18|F9V*%Xl>ob~}|4yF%3*#;RfDQb@2PZ+I|BAW(`!oMfKLHN@9#0AUj_CP&qH292 zf#h(SzbUu=V+BvfKXS_PuF)10!0UWyo&!u1#G2`p9iW;JqpBW%`1fC609i)-$Da;7 z`zx=33kc)&4*$DV_4rOcFevcY!E)HAUOc|DG5sUU8mrNF8wTLt)~lNTx;cOOjX&1E zKCmBdc3dAIh}ADZssHuT5@7-#Va4Y`P)7Z5S0sb+_J@R0!EsNq?o_FcuyCD~jTEd~ zQMm>{t{S2uBWbjXw0Rsq#u2a|uX-b}&3N2#{Xm_!4G{+fVbpf(FS<8}rgk#7HwS^V zr3a|`tagz}{!p(vJv&Zv=9+skjX!rz=5^X5crQx@M9k5tp7b{Dyh@10dE-nQ3mz4W zSI7Dd;z8-pU0i$jN)5NxpB}jMD}L_LJ4tjthEY(LQb9JI|3MOLJb02zJ>BK@NK60KS2@Y!Ue%?wUpL4Q z5I_k;jz131uQt$aZ}v#9HZxpvi|}&uPWp6%40}d%T}s!!nn?XT(tc1g@vjP1!uDRN z82GR@$lXR=)TBjg)u6}-DEdB#`r+G@iiL4gGEhejAK(G=iFs;nEW@!{+n}AXpqqx(`~Q&k?$gOkeXVaNYA@c zgX>dw5(K*3QKx@1!myvYM}3?#KX&lnUM{XuzHLWi)ohpsyeWstFBTS5K+>54N7oKp z!%ql+1hrT?+OUss8MPUo1+1u4cxnQ)fdtp%&1+7F`FaNNuI`+g?DsV+F%bPzR!@-P z-#zTbDu4N5weS(gII056sqGE0Srfg{1vbNkx9lui5f0O0qk!YDn#-YZxPf72uC?Qs z;*}Bc%L5jL^!$DnJdMSus)fQhjmt>@0tM zw(8YN&D+5hs}Fx8zWgQ*thkfQH#-x^Bns5(7O^xkd`E&vhh9!I4igev^Zc5mEuZIyv>TM^;@$gSSgg5YhEgAFb@eZF@B83(|&g9MSqt3rjLqic2Oy^{$G@^-o-yD;Q&A26eY6Z zpELjY*|Y&LYRw&`)oLPj(x^ysvnr;fA{6HjYh0;7@m6~S9T<^W4-M95M$~ zVU_3IiYB2`Cdd8k4!#S_Y6>rrNn%tG1L;nyniPA0jEx|z{x?duUb{{e-+8<^P}O|N z%>uUYI2}^#HJ{~-WI2@Tx?LZY3}jP!$1d-Iwu>oV zt&u36x3*h>R!1#MBb_6oW0qL=)!5FB#|FSeEPa!gDHw8cKNW^K7qkdx=I683tbKK7 z51J9MZT!cBvexIprU$7|-9R2XY0jc3??T#r-Xhpuo76{e!l{F0Wtw%n#t7Y}9 zsL=^N>_!6+dMu`3zOpVnJkqWvOCz^Io7-;57)|NGjmU?ASuBL($*eH1BKS?vQ=SO z-qN!q6Q! zYR=WFuxLH9_Tbc2Pe~+7J%bA+ODn1ME}9XF3j^MjY6HNW{EoKz&!6!5d3n4!hZQ5z zYn{xKMZQa~vRAtSevC+R7PZ1PQ0kn0@I{ZnjX}FXa0&Dt4R7Qd+Zk4D@PnZkl9kA4 zTm1Fi#qgp<)$~sdjDN7i>0z$}L%#H`u14E&=;2cGQ=QR4gRpYB*s6pNJwipIamv9bJfQpz&=65ZW;!<9Vilfzu=Y3XhuK&K}jsjo{muo zZ4>9Bo<^|fN~%!Jy3YM_ZzIZ5TIq7YS76uM)Aq z>(Izdge9+q`cN4x3Ish#Jev)&>Mjqmj6_wA9ZmQ!>{aAv(D@4Q!v|r#$k`retHB9C zaE!IqIAa;B=0I#Iq`>z`5|@nYCb#f9toN%qfQrW#xP=gSUEMB`c4&@0n$DCO3RN$8 z%{OVKddDt)|Ke5NzXULN**;t2+?UXH+Y$J)c&qITCY6zC7~? zy|JpZs1>WDb!8sEa_#_lq8Wn&UJXFwymq{i>N(}Q!*L=d_fo%ew3};z<9(_?0u7F+ z&&sBTx-tXE>rl94Jx{zB-W_?7L_kMqk(d0|1K0EW766^EdxuFz6ybYBq^4$>kpJT6 z5}&bM4j#LgAG?bZHH@SK~zJK=XyrsZTLvLHR4iwB7wxP4BZ@!b7G&j^|YiDgS{8 zyX!BKgNfh&{yRi?;_E*VVb-vSIM<<~;M|OXzwy}mxR5pP(FH)z3 ztgNxLl5&WxC;5F1#1vn|tS+@26brCQ=jcH*z9oV6CB+?q=*M|Q<2zX!XefCs9ZsUu(x)F;9>1h{74dB-HRnCJ z8mrfSG=g!Yc?-lgS|nL;-u|*m`bZ4xX#3!i?iKe1^bCvm#QFA;aIT(|ui8eyaJC5` zf%^vr1@a~;az%se%L)w>rOuLc$}24}AzYyqD%7$>CBorS_tVoDSRN;bZCX^@W1G{) zk0daD5PQVKG;Y7iCp zJNc2GB@vdwsf01*pj~tP%IJa?(#{x*~Z(_6wBbZv$z*fz)ZPX)Y2T% zld!i3zY#GcMsJTG-p0H@@# z&$VptGgaWKy&gUexP(4BC9BLm+}fFZIt)1zXmdjLZ(%5Uc8Z442qV>GQdIPDQU}@t zKy99=Wm?~VSx8zJS`|brXL!vbPwK&ONP;~-es|u-p>*Wq=ZG(8)ud@YK0tr67oDbb zT)8M9PNGZY*igpRSdM8F*nN&^Son15K~rM;dixqJ&)C8se|%@i$j zU!zzMv;F8Lc5GJD&Nt(2lsX!?8dLVM5^&G+X)D%M?M0`a;towoeH3agG{&c9C&^`) zphuij$Ocn`c(=^lkuUZ&b*H0@rsZ;4Z}zGtzJ0ExW?`}BZa49Hv`YTbC)DER43xm$ zoS_UqTVxffKVX04RQ&#)Qz3rTX7jr##lMf@plS`|L{IffZH z>qYaE$@PDDB@=lm#fOQ(VAkef&j$}7dx%f*)$NHE)$b?Up*%X+FKSdQN}Alx#=NaV zm+kdmQ10K~D1WOo%E?K}`L2n{2R4p_F=9XjVu^(5>LNk))@jNan0pmIo5{8oXz8w> zo}Y!lqJj(M^DE!#0_#abYoAM&2Pcb+&Hm(M(T_p#_F4FTa3Nm13d$wdf`$&~T=Kh~ zEVemd?#(Y^`W(&`&X=QJXNrEgpEI$FPdKKT>vtQRGN&#t%*qw=qw*WOV`r+YGQ~pC z$-*|X;9;otYH~Q<(POmpc0hNO`_V3W2bHq$eK*GcW&wt54ym*NcG3CPIZmvELhbpW z$K9DLb|j!XvAc9{Tk?I1J!?aik6nRv(FTWC#cS_P;ciL6MjYu*2lVa|MV~pi0`7R| zbGCi9Fs1UVbSCUoI3R#m!D`=;1QoKSGupyg$(E`Xo9(;X_-F_`7^$B9u4`#}ht|x( zq{)cD!YkESx8blgRI331WGoSC`TtNy;Y@XvxI_2GAO49fi9TaP-` zqEvt9t)5+!ZJ8`=I z#S9C$!gS_(E4zdKJYDC`r>rYqwPO9E0&4-~|IGtan6|kfQnFL_TG(7CV~4opAHZcV zD1)hA7q&IYqax&6vAQmL=j!o=6pdP@?N!@IumQ_<(j zWCkSuS`a#;Qc#L=Y_p00Y(5~Co`gP{mJiC zM-A%d-q9t}oY|KL|1R(St1$TI8z!0WJ@BlQqnr!%vyiPdV=YN_&xbiH^NrsBK!c|u zj(5a}(oxAjQrZrv-Azj=LZX`+xoU+p{3dB%6~4rZD=z^cmTRzJaN?)y3>zWTFc;ZgF7^n^i&b|+5d zEO@NaVAncT0Z~W83X^zI2Slm-d<|W!oD=dII@jZWn)UGwMDn1{DzhZ+SG3nXdwEUj zdl2CL1=huu1d29|@se>G%bY_SS~xAb;bHKRv$*CE(amQp0J(OwjnD#bQB2LiV4!LG zunr`yXDTfD6{|pHfDoNDuRI1syfY8wZaS5#68o~(=;lrRFCcjTpFl8VJpip4S`BG5 zCZ;StKR*Hhi0l^Esy9fBPez2R_#YzpPCMC;-KNy^5t5n5DwwazN>>EW z14FO(gRk#GlkI~;$=sueoqmJ1Y7OJaJGCe7nKfkuR60pK(r4W}4O^OuI0rY~m*G0~ zuI+1#PTR9S4xle{0dwX6z4)02o|aB*NX{*73f-tEdF5pN5lh1h{35Wu4mQjQSB_q2 zv9z+~oNGrEMZi?-9L)VC$D#BecZ= z&Hup$=U))aW4*_+enhmlEGA5EcK?u*-J0BSlX?@@#A=CrZ^D=$URvB6W6xZ7?IkxfX}a+_ z#EUMtsxXqiH}J$k)YiY(AMT6Pkfc|Af}kY#VfH*2fFD+KGH*6f8b62N!_}bo-Fc~D zNfWI_Vg`~%Q(MjqBzbIMhrU3nhSlGnBKt&wdo>Dwct!c@ckMMlZ7~YFA!P15LapK%p>CD zitM`thJa8>g9FA2)WtGT05I9~cX!&M?O}^zCuuoFycLIRQ+u9xJ&?2pxn zKHyLrzof3C-h|JTso!M^STat|Ii0>y^xi?K=%o~7E3wolGu#W1I5;;lsQR!~g|gMO zQL-l|#b08W4>3v3RC)*K{~(X}0wOLFaCD#CAb;L7oi@`1NXupxnupKJM>J?CtKM6v zXY^ga@Ybcpm~mV+3T$YIUT%kLWPKE-Qc^1c5-xp;G6!|I(yG}Ei^X*U<1l!2fV!>2c5@n?$|r3P2hUIS;g2#CKn#)VY=t(g zYF?!oP@C1vk3_Ac-Zt}Cg(C>jZXyqQo$kEU`F!vRZvrUPs?l<;_sk9X-(2zOg%JJY zVIm&>OLhZYofVgzt#?#)IZ_<{WHVNId+mB>jwZ;mVf>G^v7erF7sWmT95-Mm#ng6l zz=hA8`?Oj5<{EG#7;rL9e#t!za6Q1>W;aB3uYhN?t3fD8* z|IWfS59B|Fil5BuB9M%GH9e3*L4hdT`eMc_ugBQ|hA5nW{SAEGj0!96BO;8)*>(Vf z@v4Z4i*sf_hYK|(Up)&61BFrdcj?FFTa-)+$4DuH#1JpN;S_0x$7p%?HvBz+?6>HcJ~{4lc(5Zxfdo?)S(TzJZoWTo z#%dnYbK+ic+dqouz+`rKi07{xCl>1)HC|Pr1|H8g<>H}ESC6gCNUV%%?NTcr2=-eo z#Nz0KJQdko>n-m@Ul<6(ixbg3e?*M=?|^OyGmgu4vUhvmtYH@P2I`&Z5UWe^-D-!OM^(h;)ELU?H1GHq!dqu z(aA#QNS$?rzPEMqrQ4E!Q$NB>JS^@E7_+H=&Ol3v$TMl%)dzSTkKaGHSTIVQ`~xHF zSD^bEusPVfXEJREH zeC?Qb)#6_NIeCo@>rjjTrH&nXx*%3?z^!+8n@LFYHD$Wnc>b+UqrlA!|9OrA!)dBl z7+DMHJT5H|7hk_rUw9sz(TxtPj~O~KTx#Vh!_uCk)6Vixk^~GiqJzqsWdz?H`|k1N zn?2&z-T251*8Jn8kIB8wr?fwO@gJs`Vx7t=hw1V_@Zt0w@pZGS_3hCc`cq0hFwz8& zk{ONv)W8;=ye#gye(qiOaKbuO(&vZ;fA}VRo3)sZ6p6>QMUuypo2!Q(zME!`~L?|T%-(? zLCrY6VGXr7Z_GLCH-7K{SHrKk0BdHTB{o8enG*Gg8PzGm+wk>x%t0gCK%{Y>+AQWj zu;MM`#Xz64g3p7`_}gQ4YoK2W^04&>iJ&@;|5yvcATi#hO`nPxfKNNysv7l0LL&6| z;-spil%VBz5CL>2Tz_Z(=0;ml-}XhbrAk*jXq?f{-y+%oNxuXsD?O2uOR^CQySmSj zrVz!3?V&OIM}A-oSRexcF+X79 zlI2q@I}Ht7a69-IT}xrFW3t*!cy&4=Wcmz1i1)1j6Ct*+1GPC4E|6F5R%vIFI!nHR z$NwizjFc#ifVF-pjnBu;un)∈(7l=D%tM0dMg{nPS0CF-l50a$Jfc!)m0{%OmEw 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

  • >WgNZSBap(vlcJ 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 z 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