diff --git a/safekeeper/src/http/routes.rs b/safekeeper/src/http/routes.rs
index 1e76a0a3cd..68f225829f 100644
--- a/safekeeper/src/http/routes.rs
+++ b/safekeeper/src/http/routes.rs
@@ -17,10 +17,9 @@ use hyper::{Body, Request, Response, StatusCode};
use pem::Pem;
use postgres_ffi::WAL_SEGMENT_SIZE;
use safekeeper_api::models::{
- AcceptorStateStatus, PullTimelineRequest, PutTenantPageserverLocationRequest, SafekeeperStatus,
- SkTimelineInfo, TenantDeleteResult, TenantShardPageserverLocation, TermSwitchApiEntry,
- TimelineCopyRequest, TimelineCreateRequest, TimelineDeleteResult, TimelineStatus,
- TimelineTermBumpRequest,
+ AcceptorStateStatus, PullTimelineRequest, SafekeeperStatus, SkTimelineInfo, TenantDeleteResult,
+ TermSwitchApiEntry, TimelineCopyRequest, TimelineCreateRequest, TimelineDeleteResult,
+ TimelineStatus, TimelineTermBumpRequest,
};
use safekeeper_api::{ServerInfo, membership, models};
use storage_broker::proto::{SafekeeperTimelineInfo, TenantTimelineId as ProtoTenantTimelineId};
@@ -37,7 +36,6 @@ use utils::shard::TenantShardId;
use crate::debug_dump::TimelineDigestRequest;
use crate::safekeeper::TermLsn;
use crate::timelines_global_map::DeleteOrExclude;
-use crate::wal_advertiser::advmap::UpdatePageserverAttachmentsArg;
use crate::{
GlobalTimelines, SafeKeeperConf, copy_timeline, debug_dump, patch_control_file, pull_timeline,
wal_advertiser,
@@ -71,20 +69,17 @@ fn check_permission(request: &Request
, tenant_id: Option) -> Res
})
}
-async fn post_tenant_pageserver_attachments(mut request: Request) -> Result<(), ApiError> {
+async fn post_tenant_pageserver_attachments(mut request: Request) -> Result, ApiError> {
let tenant_id = parse_request_param(&request, "tenant_id")?;
check_permission(&request, Some(tenant_id))?;
- let body: TenantShardPageserverAttachmentChange = json_request(&mut request).await?;
+ let body: models::TenantShardPageserverAttachmentChange = json_request(&mut request).await?;
let global_timelines = get_global_timelines(&request);
+ let wal_advertiser = global_timelines.get_wal_advertiser();
+ wal_advertiser
+ .update_pageserver_attachments(tenant_id, body)
+ .map_err(ApiError::InternalServerError)?;
- match body {
- TenantShardPageserverAttachmentChange::Attach(tenant_shard_pageserver_attachment) => {
- todo!()
- }
- TenantShardPageserverAttachmentChange::Detach(tenant_shard_pageserver_attachment) => {
- todo!()
- }
- }
+ json_response(StatusCode::OK, ())
}
/// Deactivates all timelines for the tenant and removes its data directory.
@@ -111,39 +106,6 @@ async fn tenant_delete_handler(mut request: Request) -> Result,
-) -> Result, ApiError> {
- let tenant_shard_id: TenantShardId = parse_request_param(&request, "tenant_shard_id")?;
- check_permission(&request, Some(tenant_shard_id.tenant_id))?;
-
- let PutTenantPageserverLocationRequest {
- pageserver_locations,
- }: PutTenantPageserverLocationRequest = json_request(&mut request).await?;
-
- let global_timelines = get_global_timelines(&request);
- let wal_advertiser = global_timelines.get_wal_advertiser();
- wal_advertiser
- .update_pageserver_attachments(
- tenant_shard_id,
- pageserver_locations
- .into_iter()
- .map(
- |TenantShardPageserverLocation {
- generation,
- pageserver_node_id,
- }| UpdatePageserverAttachmentsArg {
- generation,
- pageserver_node_id,
- },
- )
- .collect(),
- )
- .map_err(ApiError::InternalServerError)?;
-
- json_response(StatusCode::OK, ())
-}
-
async fn timeline_create_handler(mut request: Request) -> Result, ApiError> {
let request_data: TimelineCreateRequest = json_request(&mut request).await?;
@@ -777,9 +739,6 @@ pub fn make_router(
.delete("/v1/tenant/:tenant_id", |r| {
request_span(r, tenant_delete_handler)
})
- .put("/v1/tenant/:tenant_shard_id/pageserver_attachments", |r| {
- request_span(r, tenant_put_pageserver_attachments)
- })
// Will be used in the future instead of implicit timeline creation
.post("/v1/tenant/timeline", |r| {
request_span(r, timeline_create_handler)
diff --git a/safekeeper/src/timelines_global_map.rs b/safekeeper/src/timelines_global_map.rs
index 0898aaee9f..774cfad531 100644
--- a/safekeeper/src/timelines_global_map.rs
+++ b/safekeeper/src/timelines_global_map.rs
@@ -12,9 +12,7 @@ use anyhow::{Context, Result, bail};
use camino::Utf8PathBuf;
use camino_tempfile::Utf8TempDir;
use safekeeper_api::membership::Configuration;
-use safekeeper_api::models::{
- SafekeeperUtilization, TenantShardPageserverLocation, TimelineDeleteResult,
-};
+use safekeeper_api::models::{SafekeeperUtilization, TimelineDeleteResult};
use safekeeper_api::{ServerInfo, membership};
use tokio::fs;
use tracing::*;
@@ -59,18 +57,12 @@ struct GlobalTimelinesState {
impl GlobalTimelinesState {
/// Get dependencies for a timeline constructor.
fn get_dependencies(
-
&self,
- ,
) -> (
-
Arc,
-
Arc,
-
RateLimiter,
Arc,
- ,
Arc,
) {
(
@@ -189,7 +181,12 @@ impl GlobalTimelines {
{
let ttid = TenantTimelineId::new(tenant_id, timeline_id);
let wal_advertiser = wal_advertiser.load_timeline(ttid);
- match Timeline::load_timeline(conf.clone(), ttid, wal_backup.clone(), wal_advertiser) {
+ match Timeline::load_timeline(
+ conf.clone(),
+ ttid,
+ wal_backup.clone(),
+ wal_advertiser,
+ ) {
Ok(tli) => {
let mut shared_state = tli.write_shared_state().await;
self.state
@@ -254,7 +251,7 @@ impl GlobalTimelines {
start_lsn: Lsn,
commit_lsn: Lsn,
) -> Result> {
- let (conf, _, _, _) = {
+ let (conf, _, _, _, _) = {
let state = self.state.lock().unwrap();
if let Ok(timeline) = state.get(&ttid) {
// Timeline already exists, return it.
@@ -332,12 +329,11 @@ impl GlobalTimelines {
match GlobalTimelines::install_temp_timeline(
ttid,
tmp_path,
- wal_advertiser, conf.clone(),
+ wal_advertiser,
+ conf.clone(),
wal_backup.clone(),
)
-
- .await
-
+ .await
{
Ok(timeline) => {
let mut timeline_shared_state = timeline.write_shared_state().await;
diff --git a/safekeeper/src/wal_advertiser/advmap.rs b/safekeeper/src/wal_advertiser/advmap.rs
index 07048c78d0..f43de8e146 100644
--- a/safekeeper/src/wal_advertiser/advmap.rs
+++ b/safekeeper/src/wal_advertiser/advmap.rs
@@ -8,7 +8,7 @@ use std::{
use serde::Serialize;
use utils::{
generation::Generation,
- id::{NodeId, TenantTimelineId, TimelineId},
+ id::{NodeId, TenantId, TenantTimelineId, TimelineId},
lsn::Lsn,
shard::{ShardIndex, TenantShardId},
};
@@ -40,11 +40,6 @@ pub struct PageserverTimeline {
pub struct SafekeeperTimeline {}
-pub struct UpdatePageserverAttachmentsArg {
- pub generation: Generation,
- pub pageserver_node_id: NodeId,
-}
-
impl World {
pub fn housekeeping(&self) {}
pub fn load_timeline(&self, ttid: TenantTimelineId) -> Arc {
@@ -52,8 +47,8 @@ impl World {
}
pub fn update_pageserver_attachments(
&self,
- tenant_shard_id: TenantShardId,
- arg: Vec,
+ tenant_id: TenantId,
+ arg: safekeeper_api::models::TenantShardPageserverAttachmentChange,
) -> anyhow::Result<()> {
todo!()
}