mirror of
https://github.com/neondatabase/neon.git
synced 2026-01-08 22:12:56 +00:00
merge fixups; storcon and safekeeper compile again
This commit is contained in:
@@ -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)
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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!()
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user