neon_local: add shard split command

This commit is contained in:
John Spray
2023-12-22 11:01:53 +00:00
parent dda046bbcd
commit 95505e5ac1
3 changed files with 20 additions and 6 deletions

View File

@@ -4,8 +4,8 @@ use camino::Utf8PathBuf;
use hyper::{Method, StatusCode};
use pageserver_api::{
models::{
ShardParameters, TenantCreateRequest, TenantShardSplitRequest, TimelineCreateRequest,
TimelineInfo,
ShardParameters, TenantCreateRequest, TenantShardSplitRequest, TenantShardSplitResponse,
TimelineCreateRequest, TimelineInfo,
},
shard::TenantShardId,
};
@@ -264,9 +264,9 @@ impl AttachmentService {
&self,
tenant_id: TenantId,
new_shard_count: u8,
) -> anyhow::Result<()> {
self.dispatch::<_, ()>(
Method::POST,
) -> anyhow::Result<TenantShardSplitResponse> {
self.dispatch(
Method::PUT,
format!("tenant/{tenant_id}/shard_split"),
Some(TenantShardSplitRequest { new_shard_count }),
)

View File

@@ -738,8 +738,9 @@ async fn handle_tenant_locate(req: Request<Body>) -> Result<Response<Body>, ApiE
}
let shard_params = shard_params.expect("result is non-empty, therefore this is set");
tracing::info!(
"Located tenant {} on shards {}",
"Located tenant {} with params {:?} on shards {}",
tenant_id,
shard_params,
result
.iter()
.map(|s| format!("{:?}", s))

View File

@@ -580,6 +580,15 @@ async fn handle_tenant(
println!("{tenant_table}");
println!("{shard_table}");
}
Some(("shard-split", matches)) => {
let tenant_id = get_tenant_id(matches, env)?;
let shard_count: u8 = matches.get_one::<u8>("shard-count").cloned().unwrap_or(0);
let attachment_service = AttachmentService::from_env(env);
attachment_service
.tenant_split(tenant_id, shard_count)
.await?;
}
Some((sub_name, _)) => bail!("Unexpected tenant subcommand '{}'", sub_name),
None => bail!("no tenant subcommand provided"),
@@ -1507,7 +1516,11 @@ fn cli() -> Command {
.arg(pageserver_id_arg.clone()))
.subcommand(Command::new("status")
.about("Human readable summary of the tenant's shards and attachment locations")
.arg(tenant_id_arg.clone()))
.subcommand(Command::new("shard-split")
.about("Increase the number of shards in the tenant")
.arg(tenant_id_arg.clone())
.arg(Arg::new("shard-count").value_parser(value_parser!(u8)).long("shard-count").action(ArgAction::Set).help("Number of shards in the new tenant (default 1)"))
)
)
.subcommand(