Skip to content

Commit a8ded64

Browse files
committed
Consistent schema across partitions
Summary: This PR make sure that PPs have a consistent service schema by writing and upsert-schema record to bifrost. The leader processor makes sure to write this record to bifrost when schema changes are detected
1 parent 9781990 commit a8ded64

File tree

9 files changed

+117
-421
lines changed

9 files changed

+117
-421
lines changed

crates/types/src/schema/metadata/mod.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,8 +41,9 @@ use crate::schema::{deployment, service};
4141
use crate::time::MillisSinceEpoch;
4242
use crate::{Version, Versioned, identifiers};
4343

44-
#[derive(Debug, Clone, serde::Serialize, serde::Deserialize)]
44+
#[derive(derive_more::Debug, Clone, serde::Serialize, serde::Deserialize)]
4545
#[serde(from = "serde_hacks::Schema", into = "serde_hacks::Schema")]
46+
#[debug("Schema(version: {version})")]
4647
pub struct Schema {
4748
/// This gets bumped on each update.
4849
version: Version,

crates/wal-protocol/src/control.rs

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ use std::ops::RangeInclusive;
1212

1313
use restate_types::identifiers::{LeaderEpoch, PartitionId, PartitionKey};
1414
use restate_types::logs::{Keys, Lsn};
15+
use restate_types::schema::Schema;
1516
use restate_types::time::MillisSinceEpoch;
1617
use restate_types::{GenerationalNodeId, SemanticRestateVersion};
1718

@@ -62,3 +63,13 @@ pub struct PartitionDurability {
6263
/// Timestamp which the durability point was updated
6364
pub modification_time: MillisSinceEpoch,
6465
}
66+
67+
/// Consistency store schema across partition replicas.
68+
///
69+
/// Since v1.6.0.
70+
#[derive(Debug, Clone)]
71+
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
72+
pub struct UpsertSchema {
73+
pub partition_key_range: Keys,
74+
pub schema: Schema,
75+
}

0 commit comments

Comments
 (0)