fix: Set up the transition shard in the in-mem catalog

pull/24376/head
Carol (Nichols || Goulding) 2023-02-22 17:25:42 -05:00
parent 5e01261a87
commit 584d3ab0e7
No known key found for this signature in database
GPG Key ID: E907EE5A736F87D4
1 changed files with 31 additions and 3 deletions

View File

@ -8,14 +8,14 @@ use crate::{
Result, ShardRepo, SoftDeletedRows, TableRepo, TopicMetadataRepo, Transaction, Result, ShardRepo, SoftDeletedRows, TableRepo, TopicMetadataRepo, Transaction,
}, },
metrics::MetricDecorator, metrics::MetricDecorator,
DEFAULT_MAX_COLUMNS_PER_TABLE, DEFAULT_MAX_TABLES, DEFAULT_MAX_COLUMNS_PER_TABLE, DEFAULT_MAX_TABLES, SHARED_TOPIC_ID, SHARED_TOPIC_NAME,
}; };
use async_trait::async_trait; use async_trait::async_trait;
use data_types::{ use data_types::{
Column, ColumnId, ColumnType, CompactionLevel, Namespace, NamespaceId, ParquetFile, Column, ColumnId, ColumnType, CompactionLevel, Namespace, NamespaceId, ParquetFile,
ParquetFileId, ParquetFileParams, Partition, PartitionId, PartitionKey, QueryPool, QueryPoolId, ParquetFileId, ParquetFileParams, Partition, PartitionId, PartitionKey, QueryPool, QueryPoolId,
SequenceNumber, Shard, ShardId, ShardIndex, SkippedCompaction, Table, TableId, Timestamp, SequenceNumber, Shard, ShardId, ShardIndex, SkippedCompaction, Table, TableId, Timestamp,
TopicId, TopicMetadata, TopicId, TopicMetadata, TRANSITION_SHARD_ID, TRANSITION_SHARD_INDEX,
}; };
use iox_time::{SystemProvider, TimeProvider}; use iox_time::{SystemProvider, TimeProvider};
use observability_deps::tracing::warn; use observability_deps::tracing::warn;
@ -123,7 +123,35 @@ impl Display for MemCatalog {
#[async_trait] #[async_trait]
impl Catalog for MemCatalog { impl Catalog for MemCatalog {
async fn setup(&self) -> Result<(), Error> { async fn setup(&self) -> Result<(), Error> {
// nothing to do let guard = Arc::clone(&self.collections).lock_owned().await;
let stage = guard.clone();
let mut transaction = MemTxn {
inner: MemTxnInner::Txn {
guard,
stage,
finalized: false,
},
time_provider: self.time_provider(),
};
let stage = transaction.stage();
// We need to manually insert the topic here so that we can create the transition shard
// below.
let topic = TopicMetadata {
id: SHARED_TOPIC_ID,
name: SHARED_TOPIC_NAME.to_string(),
};
stage.topics.push(topic.clone());
// The transition shard must exist and must have magic ID and INDEX.
let shard = Shard {
id: TRANSITION_SHARD_ID,
topic_id: topic.id,
shard_index: TRANSITION_SHARD_INDEX,
min_unpersisted_sequence_number: SequenceNumber::new(0),
};
stage.shards.push(shard);
transaction.commit_inplace().await?;
Ok(()) Ok(())
} }