mirror of
https://github.com/neondatabase/neon.git
synced 2026-01-07 13:32:57 +00:00
pageserver: persist stripe size in tenant manifest for tenant_import (#11181)
## Problem `tenant_import`, used to import an existing tenant from remote storage into a storage controller for support and debugging, assumed `DEFAULT_STRIPE_SIZE` since this can't be recovered from remote storage. In #11168, we are changing the stripe size, which will break `tenant_import`. Resolves #11175. ## Summary of changes * Add `stripe_size` to the tenant manifest. * Add `TenantScanRemoteStorageShard::stripe_size` and return from `tenant_scan_remote` if present. * Recover the stripe size during`tenant_import`, or fall back to 32768 (the original default stripe size). * Add tenant manifest compatibility snapshot: `2025-04-08-pgv17-tenant-manifest-v1.tar.zst` There are no cross-version concerns here, since unknown fields are ignored during deserialization where relevant.
This commit is contained in:
@@ -6014,9 +6014,21 @@ impl Service {
|
||||
.max()
|
||||
.expect("We already validated >0 shards");
|
||||
|
||||
// FIXME: we have no way to recover the shard stripe size from contents of remote storage: this will
|
||||
// only work if they were using the default stripe size.
|
||||
let stripe_size = ShardParameters::DEFAULT_STRIPE_SIZE;
|
||||
// Find the tenant's stripe size. This wasn't always persisted in the tenant manifest, so
|
||||
// fall back to the original default stripe size of 32768 (256 MB) if it's not specified.
|
||||
const ORIGINAL_STRIPE_SIZE: ShardStripeSize = ShardStripeSize(32768);
|
||||
let stripe_size = scan_result
|
||||
.shards
|
||||
.iter()
|
||||
.find(|s| s.tenant_shard_id.shard_count == shard_count && s.generation == generation)
|
||||
.expect("we validated >0 shards above")
|
||||
.stripe_size
|
||||
.unwrap_or_else(|| {
|
||||
if shard_count.count() > 1 {
|
||||
warn!("unknown stripe size, assuming {ORIGINAL_STRIPE_SIZE}");
|
||||
}
|
||||
ORIGINAL_STRIPE_SIZE
|
||||
});
|
||||
|
||||
let (response, waiters) = self
|
||||
.do_tenant_create(TenantCreateRequest {
|
||||
|
||||
Reference in New Issue
Block a user