aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--README.md28
-rw-r--r--doc/book/cookbook/real-world.md12
-rw-r--r--doc/book/design/goals.md2
-rw-r--r--doc/book/working-documents/migration-07.md2
-rw-r--r--doc/book/working-documents/migration-08.md34
-rw-r--r--src/api/generic_server.rs6
6 files changed, 64 insertions, 20 deletions
diff --git a/README.md b/README.md
index ec7e2485..9992fff2 100644
--- a/README.md
+++ b/README.md
@@ -15,18 +15,24 @@ Garage [![Build Status](https://drone.deuxfleurs.fr/api/badges/Deuxfleurs/garage
]
</p>
-Garage is a lightweight S3-compatible distributed object store, with the following goals:
+Garage is an S3-compatible distributed object storage service
+designed for self-hosting at a small-to-medium scale.
-- As self-contained as possible
-- Easy to set up
-- Highly resilient to network failures, network latency, disk failures, sysadmin failures
-- Relatively simple
-- Made for multi-datacenter deployments
+Garage is designed for storage clusters composed of nodes running
+at different physical locations,
+in order to easily provide a storage service that replicates data at these different
+locations and stays available even when some servers are unreachable.
+Garage also focuses on being lightweight, easy to operate, and highly resilient to
+machine failures.
-Non-goals include:
+Garage is built by [Deuxfleurs](https://deuxfleurs.fr),
+an experimental small-scale self hosted service provider,
+which has been using it in production since its first release in 2020.
-- Extremely high performance
-- Complete implementation of the S3 API
-- Erasure coding (our replication model is simply to copy the data as is on several nodes, in different datacenters if possible)
+Learn more on our dedicated documentation pages:
-Our main use case is to provide a distributed storage layer for small-scale self hosted services such as [Deuxfleurs](https://deuxfleurs.fr).
+- [Goals and use cases](https://garagehq.deuxfleurs.fr/documentation/design/goals/)
+- [Features](https://garagehq.deuxfleurs.fr/documentation/reference-manual/features/)
+- [Quick start](https://garagehq.deuxfleurs.fr/documentation/quick-start/)
+
+Garage is entirely free software released under the terms of the AGPLv3.
diff --git a/doc/book/cookbook/real-world.md b/doc/book/cookbook/real-world.md
index e101a706..4fcb5cf7 100644
--- a/doc/book/cookbook/real-world.md
+++ b/doc/book/cookbook/real-world.md
@@ -51,15 +51,15 @@ to store 2 TB of data in total.
## Get a Docker image
-Our docker image is currently named `dxflrs/amd64_garage` and is stored on the [Docker Hub](https://hub.docker.com/r/dxflrs/amd64_garage/tags?page=1&ordering=last_updated).
-We encourage you to use a fixed tag (eg. `v0.4.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.4.0` but it's up to you
-to check [the most recent versions on the Docker Hub](https://hub.docker.com/r/dxflrs/amd64_garage/tags?page=1&ordering=last_updated).
+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
+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/amd64_garage:v0.4.0
+sudo docker pull dxflrs/garage:v0.8.0
```
## Deploying and configuring Garage
@@ -125,7 +125,7 @@ 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 \
- lxpz/garage_amd64:v0.4.0
+ dxflrs/garage:v0.8.0
```
It should be restarted automatically at each reboot.
diff --git a/doc/book/design/goals.md b/doc/book/design/goals.md
index b97d73a9..9c2d89f0 100644
--- a/doc/book/design/goals.md
+++ b/doc/book/design/goals.md
@@ -14,10 +14,10 @@ website.
Garage is an opinionated object storage solutoin, we focus on the following **desirable properties**:
+ - **Internet enabled**: made for multi-sites (eg. datacenters, offices, households, etc.) interconnected through regular Internet connections.
- **Self-contained & lightweight**: works everywhere and integrates well in existing environments to target [hyperconverged infrastructures](https://en.wikipedia.org/wiki/Hyper-converged_infrastructure).
- **Highly resilient**: highly resilient to network failures, network latency, disk failures, sysadmin failures.
- **Simple**: simple to understand, simple to operate, simple to debug.
- - **Internet enabled**: made for multi-sites (eg. datacenters, offices, households, etc.) interconnected through regular Internet connections.
We also noted that the pursuit of some other goals are detrimental to our initial goals.
The following has been identified as **non-goals** (if these points matter to you, you should not use Garage):
diff --git a/doc/book/working-documents/migration-07.md b/doc/book/working-documents/migration-07.md
index 2d0444db..03cdfedc 100644
--- a/doc/book/working-documents/migration-07.md
+++ b/doc/book/working-documents/migration-07.md
@@ -16,7 +16,7 @@ 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 (`scrub`, `block_refs`, etc.)
-2. Disable api and web access. Garage does not support disabling
+2. Disable API and web access. Garage does not support disabling
these endpoints but you can change the port number or stop your reverse
proxy for instance.
3. Check once again that your cluster is healty. Run again `garage repair --all-nodes --yes tables` which is quick.
diff --git a/doc/book/working-documents/migration-08.md b/doc/book/working-documents/migration-08.md
new file mode 100644
index 00000000..5f97c45b
--- /dev/null
+++ b/doc/book/working-documents/migration-08.md
@@ -0,0 +1,34 @@
++++
+title = "Migrating from 0.7 to 0.8"
+weight = 13
++++
+
+**This guide explains how to migrate to 0.8 if you have an existing 0.7 cluster.
+We don't recommend trying to migrate to 0.8 directly from 0.6 or older.**
+
+**We make no guarantee that this migration will work perfectly:
+back up all your data before attempting it!**
+
+Garage v0.8 introduces new data tables that allow the counting of objects in buckets in order to implement bucket quotas.
+A manual migration step is required to first count objects in Garage buckets and populate these tables with accurate data.
+
+The migration steps are as follows:
+
+1. Disable API and web access. Garage v0.7 does not support disabling
+ these endpoints but you can change the port number or stop your reverse proxy for instance.
+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 (`scrub`, `block_refs`, etc.)
+3. Check that queues are empty: run `garage stats` to query them or inspect metrics in the Grafana dashboard.
+4. Turn off Garage v0.7
+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.7.tar.zst meta/`
+6. Install Garage v0.8
+7. **Before starting Garage v0.8**, run the offline migration step: `garage offline-repair --yes object_counters`.
+ This can take a while to run, depending on the number of objects stored in your cluster.
+8. Turn on Garage v0.8
+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.
diff --git a/src/api/generic_server.rs b/src/api/generic_server.rs
index a48be1bc..62fe4e5a 100644
--- a/src/api/generic_server.rs
+++ b/src/api/generic_server.rs
@@ -174,7 +174,11 @@ impl<A: ApiHandler> ApiServer<A> {
let current_context = Context::current();
let current_span = current_context.span();
- current_span.update_name::<String>(format!("S3 API {}", endpoint.name()));
+ current_span.update_name::<String>(format!(
+ "{} API {}",
+ A::API_NAME_DISPLAY,
+ endpoint.name()
+ ));
current_span.set_attribute(KeyValue::new("endpoint", endpoint.name()));
endpoint.add_span_attributes(current_span);