merge fixups; storcon and safekeeper compile again

This commit is contained in:
Christian Schwarz
2025-06-02 11:26:14 +02:00
parent f5210a367d
commit 9ee75ceee6
3 changed files with 24 additions and 74 deletions

View File

@@ -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<Body>, tenant_id: Option<TenantId>) -> Res
})
}
async fn post_tenant_pageserver_attachments(mut request: Request<Body>) -> Result<(), ApiError> {
async fn post_tenant_pageserver_attachments(mut request: Request<Body>) -> Result<Response<Body>, 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<Body>) -> Result<Response<Bo
json_response(StatusCode::OK, response_body)
}
async fn tenant_put_pageserver_attachments(
mut request: Request<Body>,
) -> Result<Response<Body>, 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<Body>) -> Result<Response<Body>, 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)

View File

@@ -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<SafeKeeperConf>,
Arc<TimelinesSet>,
RateLimiter,
Arc<WalBackup>,
,
Arc<wal_advertiser::advmap::World>,
) {
(
@@ -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<Arc<Timeline>> {
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;

View File

@@ -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<SafekeeperTimeline> {
@@ -52,8 +47,8 @@ impl World {
}
pub fn update_pageserver_attachments(
&self,
tenant_shard_id: TenantShardId,
arg: Vec<UpdatePageserverAttachmentsArg>,
tenant_id: TenantId,
arg: safekeeper_api::models::TenantShardPageserverAttachmentChange,
) -> anyhow::Result<()> {
todo!()
}