From 6c990b2bf242d2bd4a4bf97ec7268d4f444a9a0d Mon Sep 17 00:00:00 2001 From: Alex Auvolat Date: Wed, 13 Apr 2022 16:45:46 +0200 Subject: [PATCH] rename api to s3::api in many places to make place for k2v::api --- src/api/error.rs | 2 +- src/api/lib.rs | 18 ++------ src/api/{ => s3}/api_server.rs | 20 ++++----- src/api/{s3_bucket.rs => s3/bucket.rs} | 2 +- src/api/{s3_copy.rs => s3/copy.rs} | 6 +-- src/api/{s3_cors.rs => s3/cors.rs} | 2 +- src/api/{s3_delete.rs => s3/delete.rs} | 2 +- src/api/{s3_get.rs => s3/get.rs} | 0 src/api/{s3_list.rs => s3/list.rs} | 4 +- src/api/s3/mod.rs | 14 ++++++ .../{s3_post_object.rs => s3/post_object.rs} | 6 +-- src/api/{s3_put.rs => s3/put.rs} | 2 +- src/api/{s3_router.rs => s3/router.rs} | 0 src/api/{s3_website.rs => s3/website.rs} | 2 +- src/api/{s3_xml.rs => s3/xml.rs} | 0 src/garage/server.rs | 10 ++--- src/model/garage.rs | 44 +++++++++++++------ src/web/web_server.rs | 4 +- 18 files changed, 79 insertions(+), 59 deletions(-) rename src/api/{ => s3}/api_server.rs (98%) rename src/api/{s3_bucket.rs => s3/bucket.rs} (99%) rename src/api/{s3_copy.rs => s3/copy.rs} (99%) rename src/api/{s3_cors.rs => s3/cors.rs} (99%) rename src/api/{s3_delete.rs => s3/delete.rs} (99%) rename src/api/{s3_get.rs => s3/get.rs} (100%) rename src/api/{s3_list.rs => s3/list.rs} (99%) create mode 100644 src/api/s3/mod.rs rename src/api/{s3_post_object.rs => s3/post_object.rs} (99%) rename src/api/{s3_put.rs => s3/put.rs} (99%) rename src/api/{s3_router.rs => s3/router.rs} (100%) rename src/api/{s3_website.rs => s3/website.rs} (99%) rename src/api/{s3_xml.rs => s3/xml.rs} (100%) diff --git a/src/api/error.rs b/src/api/error.rs index f53ed1fd..cd7afe5a 100644 --- a/src/api/error.rs +++ b/src/api/error.rs @@ -7,7 +7,7 @@ use hyper::{HeaderMap, StatusCode}; use garage_model::helper::error::Error as HelperError; use garage_util::error::Error as GarageError; -use crate::s3_xml; +use crate::s3::xml as s3_xml; /// Errors of this crate #[derive(Debug, Error)] diff --git a/src/api/lib.rs b/src/api/lib.rs index de60ec53..2f75431a 100644 --- a/src/api/lib.rs +++ b/src/api/lib.rs @@ -4,24 +4,12 @@ extern crate tracing; pub mod error; pub use error::Error; +pub mod helpers; mod encoding; -mod api_server; -pub use api_server::run_api_server; - /// This mode is public only to help testing. Don't expect stability here pub mod signature; -pub mod helpers; -mod s3_bucket; -mod s3_copy; -pub mod s3_cors; -mod s3_delete; -pub mod s3_get; -mod s3_list; -mod s3_post_object; -mod s3_put; -mod s3_router; -mod s3_website; -mod s3_xml; +pub mod s3; + diff --git a/src/api/api_server.rs b/src/api/s3/api_server.rs similarity index 98% rename from src/api/api_server.rs rename to src/api/s3/api_server.rs index e7b86d9e..14bb0eb9 100644 --- a/src/api/api_server.rs +++ b/src/api/s3/api_server.rs @@ -32,16 +32,16 @@ use crate::signature::streaming::SignedPayloadStream; use crate::signature::LONG_DATETIME; use crate::helpers::*; -use crate::s3_bucket::*; -use crate::s3_copy::*; -use crate::s3_cors::*; -use crate::s3_delete::*; -use crate::s3_get::*; -use crate::s3_list::*; -use crate::s3_post_object::handle_post_object; -use crate::s3_put::*; -use crate::s3_router::{Authorization, Endpoint}; -use crate::s3_website::*; +use crate::s3::bucket::*; +use crate::s3::copy::*; +use crate::s3::cors::*; +use crate::s3::delete::*; +use crate::s3::get::*; +use crate::s3::list::*; +use crate::s3::post_object::handle_post_object; +use crate::s3::put::*; +use crate::s3::router::{Authorization, Endpoint}; +use crate::s3::website::*; struct ApiMetrics { request_counter: Counter, diff --git a/src/api/s3_bucket.rs b/src/api/s3/bucket.rs similarity index 99% rename from src/api/s3_bucket.rs rename to src/api/s3/bucket.rs index d27b8379..92149074 100644 --- a/src/api/s3_bucket.rs +++ b/src/api/s3/bucket.rs @@ -15,7 +15,7 @@ use garage_util::data::*; use garage_util::time::*; use crate::error::*; -use crate::s3_xml; +use crate::s3::xml as s3_xml; use crate::signature::verify_signed_content; pub fn handle_get_bucket_location(garage: Arc) -> Result, Error> { diff --git a/src/api/s3_copy.rs b/src/api/s3/copy.rs similarity index 99% rename from src/api/s3_copy.rs rename to src/api/s3/copy.rs index a4d55390..320d9564 100644 --- a/src/api/s3_copy.rs +++ b/src/api/s3/copy.rs @@ -17,10 +17,10 @@ use garage_model::s3::block_ref_table::*; use garage_model::s3::object_table::*; use garage_model::s3::version_table::*; -use crate::api_server::{parse_bucket_key, resolve_bucket}; +use crate::s3::api_server::{parse_bucket_key, resolve_bucket}; use crate::error::*; -use crate::s3_put::{decode_upload_id, get_headers}; -use crate::s3_xml::{self, xmlns_tag}; +use crate::s3::put::{decode_upload_id, get_headers}; +use crate::s3::xml::{self as s3_xml, xmlns_tag}; pub async fn handle_copy( garage: Arc, diff --git a/src/api/s3_cors.rs b/src/api/s3/cors.rs similarity index 99% rename from src/api/s3_cors.rs rename to src/api/s3/cors.rs index ab77e23a..37ea2e43 100644 --- a/src/api/s3_cors.rs +++ b/src/api/s3/cors.rs @@ -10,7 +10,7 @@ use hyper::{header::HeaderName, Body, Method, Request, Response, StatusCode}; use serde::{Deserialize, Serialize}; use crate::error::*; -use crate::s3_xml::{to_xml_with_header, xmlns_tag, IntValue, Value}; +use crate::s3::xml::{to_xml_with_header, xmlns_tag, IntValue, Value}; use crate::signature::verify_signed_content; use garage_model::bucket_table::{Bucket, CorsRule as GarageCorsRule}; diff --git a/src/api/s3_delete.rs b/src/api/s3/delete.rs similarity index 99% rename from src/api/s3_delete.rs rename to src/api/s3/delete.rs index 2a5b683b..1e3f1249 100644 --- a/src/api/s3_delete.rs +++ b/src/api/s3/delete.rs @@ -9,7 +9,7 @@ use garage_model::garage::Garage; use garage_model::s3::object_table::*; use crate::error::*; -use crate::s3_xml; +use crate::s3::xml as s3_xml; use crate::signature::verify_signed_content; async fn handle_delete_internal( diff --git a/src/api/s3_get.rs b/src/api/s3/get.rs similarity index 100% rename from src/api/s3_get.rs rename to src/api/s3/get.rs diff --git a/src/api/s3_list.rs b/src/api/s3/list.rs similarity index 99% rename from src/api/s3_list.rs rename to src/api/s3/list.rs index 4f011597..c0d6721d 100644 --- a/src/api/s3_list.rs +++ b/src/api/s3/list.rs @@ -17,8 +17,8 @@ use garage_table::EmptyKey; use crate::encoding::*; use crate::error::*; -use crate::s3_put; -use crate::s3_xml; +use crate::s3::put as s3_put; +use crate::s3::xml as s3_xml; const DUMMY_NAME: &str = "Dummy Key"; const DUMMY_KEY: &str = "GKDummyKey"; diff --git a/src/api/s3/mod.rs b/src/api/s3/mod.rs new file mode 100644 index 00000000..3c24247e --- /dev/null +++ b/src/api/s3/mod.rs @@ -0,0 +1,14 @@ +mod api_server; +pub use api_server::run_api_server; + +mod bucket; +mod copy; +pub mod cors; +mod delete; +pub mod get; +mod list; +mod post_object; +mod put; +mod router; +mod website; +pub mod xml; diff --git a/src/api/s3_post_object.rs b/src/api/s3/post_object.rs similarity index 99% rename from src/api/s3_post_object.rs rename to src/api/s3/post_object.rs index 585e0304..a681cef3 100644 --- a/src/api/s3_post_object.rs +++ b/src/api/s3/post_object.rs @@ -14,10 +14,10 @@ use serde::Deserialize; use garage_model::garage::Garage; -use crate::api_server::resolve_bucket; +use crate::s3::api_server::resolve_bucket; use crate::error::*; -use crate::s3_put::{get_headers, save_stream}; -use crate::s3_xml; +use crate::s3::put::{get_headers, save_stream}; +use crate::s3::xml as s3_xml; use crate::signature::payload::{parse_date, verify_v4}; pub async fn handle_post_object( diff --git a/src/api/s3_put.rs b/src/api/s3/put.rs similarity index 99% rename from src/api/s3_put.rs rename to src/api/s3/put.rs index 868347fe..89aa8d84 100644 --- a/src/api/s3_put.rs +++ b/src/api/s3/put.rs @@ -20,7 +20,7 @@ use garage_model::s3::object_table::*; use garage_model::s3::version_table::*; use crate::error::*; -use crate::s3_xml; +use crate::s3::xml as s3_xml; use crate::signature::verify_signed_content; pub async fn handle_put( diff --git a/src/api/s3_router.rs b/src/api/s3/router.rs similarity index 100% rename from src/api/s3_router.rs rename to src/api/s3/router.rs diff --git a/src/api/s3_website.rs b/src/api/s3/website.rs similarity index 99% rename from src/api/s3_website.rs rename to src/api/s3/website.rs index b464dd45..561130dc 100644 --- a/src/api/s3_website.rs +++ b/src/api/s3/website.rs @@ -5,7 +5,7 @@ use hyper::{Body, Request, Response, StatusCode}; use serde::{Deserialize, Serialize}; use crate::error::*; -use crate::s3_xml::{to_xml_with_header, xmlns_tag, IntValue, Value}; +use crate::s3::xml::{to_xml_with_header, xmlns_tag, IntValue, Value}; use crate::signature::verify_signed_content; use garage_model::bucket_table::*; diff --git a/src/api/s3_xml.rs b/src/api/s3/xml.rs similarity index 100% rename from src/api/s3_xml.rs rename to src/api/s3/xml.rs diff --git a/src/garage/server.rs b/src/garage/server.rs index 58c9e782..726f5bc0 100644 --- a/src/garage/server.rs +++ b/src/garage/server.rs @@ -8,7 +8,7 @@ use garage_util::error::Error; use garage_admin::metrics::*; use garage_admin::tracing_setup::*; -use garage_api::run_api_server; +use garage_api::s3::run_api_server as run_s3_api_server; use garage_model::garage::Garage; use garage_web::run_web_server; @@ -56,8 +56,8 @@ pub async fn run_server(config_file: PathBuf) -> Result<(), Error> { info!("Create admin RPC handler..."); AdminRpcHandler::new(garage.clone()); - info!("Initializing API server..."); - let api_server = tokio::spawn(run_api_server( + info!("Initializing S3 API server..."); + let s3_api_server = tokio::spawn(run_s3_api_server( garage.clone(), wait_from(watch_cancel.clone()), )); @@ -80,8 +80,8 @@ pub async fn run_server(config_file: PathBuf) -> Result<(), Error> { // Stuff runs // When a cancel signal is sent, stuff stops - if let Err(e) = api_server.await? { - warn!("API server exited with error: {}", e); + if let Err(e) = s3_api_server.await? { + warn!("S3 API server exited with error: {}", e); } if let Err(e) = web_server.await? { warn!("Web server exited with error: {}", e); diff --git a/src/model/garage.rs b/src/model/garage.rs index 8629f3c8..17a35157 100644 --- a/src/model/garage.rs +++ b/src/model/garage.rs @@ -16,6 +16,7 @@ use garage_table::*; use crate::s3::block_ref_table::*; use crate::s3::object_table::*; use crate::s3::version_table::*; +use crate::k2v::item_table::*; use crate::bucket_alias_table::*; use crate::bucket_table::*; @@ -36,16 +37,22 @@ pub struct Garage { /// The block manager pub block_manager: Arc, - /// Table containing informations about buckets + /// Table containing buckets pub bucket_table: Arc>, - /// Table containing informations about bucket aliases + /// Table containing bucket aliases pub bucket_alias_table: Arc>, - /// Table containing informations about api keys + /// Table containing api keys pub key_table: Arc>, + /// Table containing S3 objects pub object_table: Arc>, + /// Table containing S3 object versions pub version_table: Arc>, + /// Table containing S3 block references (not blocks themselves) pub block_ref_table: Arc>, + + /// Table containing K2V items + pub k2v_item_table: Arc>, } impl Garage { @@ -96,6 +103,21 @@ impl Garage { system.clone(), ); + // ---- admin tables ---- + info!("Initialize bucket_table..."); + let bucket_table = Table::new(BucketTable, control_rep_param.clone(), system.clone(), &db); + + info!("Initialize bucket_alias_table..."); + let bucket_alias_table = Table::new( + BucketAliasTable, + control_rep_param.clone(), + system.clone(), + &db, + ); + info!("Initialize key_table_table..."); + let key_table = Table::new(KeyTable, control_rep_param, system.clone(), &db); + + // ---- S3 tables ---- info!("Initialize block_ref_table..."); let block_ref_table = Table::new( BlockRefTable { @@ -123,24 +145,19 @@ impl Garage { background: background.clone(), version_table: version_table.clone(), }, - meta_rep_param, + meta_rep_param.clone(), system.clone(), &db, ); - info!("Initialize bucket_table..."); - let bucket_table = Table::new(BucketTable, control_rep_param.clone(), system.clone(), &db); - - info!("Initialize bucket_alias_table..."); - let bucket_alias_table = Table::new( - BucketAliasTable, - control_rep_param.clone(), + // ---- K2V tables ---- + let k2v_item_table = Table::new( + K2VItemTable{}, + meta_rep_param.clone(), system.clone(), &db, ); - info!("Initialize key_table_table..."); - let key_table = Table::new(KeyTable, control_rep_param, system.clone(), &db); info!("Initialize Garage..."); @@ -156,6 +173,7 @@ impl Garage { object_table, version_table, block_ref_table, + k2v_item_table, }) } diff --git a/src/web/web_server.rs b/src/web/web_server.rs index c3d691d0..867adc51 100644 --- a/src/web/web_server.rs +++ b/src/web/web_server.rs @@ -20,8 +20,8 @@ use crate::error::*; use garage_api::error::{Error as ApiError, OkOrBadRequest, OkOrInternalError}; use garage_api::helpers::{authority_to_host, host_to_bucket}; -use garage_api::s3_cors::{add_cors_headers, find_matching_cors_rule, handle_options_for_bucket}; -use garage_api::s3_get::{handle_get, handle_head}; +use garage_api::s3::cors::{add_cors_headers, find_matching_cors_rule, handle_options_for_bucket}; +use garage_api::s3::get::{handle_get, handle_head}; use garage_model::garage::Garage;