Skip to content

Commit a2eef7f

Browse files
ldanilekConvex, Inc.
authored andcommitted
[virtual table cleanup] validators use VirtualSystemTable, not VirtualTableMapping (#28692)
GitOrigin-RevId: 8d3e3de24dd52e2f319c0450bafc83f96feecb59
1 parent f8831d7 commit a2eef7f

File tree

28 files changed

+172
-278
lines changed

28 files changed

+172
-278
lines changed

crates/application/src/application_function_runner/mod.rs

Lines changed: 6 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1014,14 +1014,8 @@ impl<RT: Runtime> ApplicationFunctionRunner<RT> {
10141014
.await?;
10151015

10161016
let table_mapping = tx.table_mapping().namespace(component.into());
1017-
let virtual_table_mapping = tx.virtual_table_mapping().namespace(component.into());
10181017

1019-
let outcome = ValidatedUdfOutcome::new(
1020-
mutation_outcome,
1021-
returns_validator,
1022-
&table_mapping,
1023-
&virtual_table_mapping,
1024-
);
1018+
let outcome = ValidatedUdfOutcome::new(mutation_outcome, returns_validator, &table_mapping);
10251019

10261020
Ok((tx, outcome))
10271021
}
@@ -1183,7 +1177,7 @@ impl<RT: Runtime> ApplicationFunctionRunner<RT> {
11831177
// We should use table mappings from the same transaction as the output
11841178
// validator was retrieved.
11851179
let table_mapping = tx.table_mapping().namespace(component.into());
1186-
let virtual_table_mapping = tx.virtual_table_mapping().namespace(component.into());
1180+
let virtual_system_mapping = tx.virtual_system_mapping().clone();
11871181
let udf_server_version = path_and_args.npm_version().clone();
11881182
// We should not be missing the module given we validated the path above
11891183
// which requires the module to exist.
@@ -1223,12 +1217,7 @@ impl<RT: Runtime> ApplicationFunctionRunner<RT> {
12231217
.unwrap();
12241218

12251219
let validated_outcome_result = outcome_result.map(|outcome| {
1226-
ValidatedActionOutcome::new(
1227-
outcome,
1228-
returns_validator,
1229-
&table_mapping,
1230-
&virtual_table_mapping,
1231-
)
1220+
ValidatedActionOutcome::new(outcome, returns_validator, &table_mapping)
12321221
});
12331222

12341223
timer.finish();
@@ -1348,7 +1337,7 @@ impl<RT: Runtime> ApplicationFunctionRunner<RT> {
13481337
if let Some(js_err) = returns_validator.check_output(
13491338
output,
13501339
&table_mapping,
1351-
&virtual_table_mapping,
1340+
&virtual_system_mapping,
13521341
) {
13531342
node_outcome.result = Err(js_err);
13541343
}
@@ -1365,12 +1354,8 @@ impl<RT: Runtime> ApplicationFunctionRunner<RT> {
13651354
syscall_trace: node_outcome.syscall_trace,
13661355
udf_server_version,
13671356
};
1368-
let outcome = ValidatedActionOutcome::new(
1369-
outcome,
1370-
returns_validator,
1371-
&table_mapping,
1372-
&virtual_table_mapping,
1373-
);
1357+
let outcome =
1358+
ValidatedActionOutcome::new(outcome, returns_validator, &table_mapping);
13741359
ActionCompletion {
13751360
outcome,
13761361
execution_time: start.elapsed(),

crates/application/src/cache/mod.rs

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -474,12 +474,11 @@ impl<RT: Runtime> CacheManager<RT> {
474474
.component_path_to_ids(path.component.clone())
475475
.await?;
476476
let table_mapping = tx.table_mapping().namespace(component.into());
477-
let virtual_table_mapping =
478-
tx.virtual_table_mapping().namespace(component.into());
477+
let virtual_system_mapping = tx.virtual_system_mapping();
479478
let returns_validation_error = returns_validator.check_output(
480479
&output,
481480
&table_mapping,
482-
&virtual_table_mapping,
481+
virtual_system_mapping,
483482
);
484483
if let Some(js_err) = returns_validation_error {
485484
query_outcome.result = Err(js_err);

crates/application/src/schema_worker/mod.rs

Lines changed: 8 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ use common::{
1414
IndexId,
1515
RepeatableTimestamp,
1616
},
17+
virtual_system_mapping::VirtualSystemMapping,
1718
};
1819
use database::{
1920
Database,
@@ -36,7 +37,6 @@ use metrics::{
3637
};
3738
use value::{
3839
NamespacedTableMapping,
39-
NamespacedVirtualTableMapping,
4040
ResolvedDocumentId,
4141
TableNamespace,
4242
TabletId,
@@ -62,7 +62,7 @@ pub struct PendingSchemaWork {
6262
id: ResolvedDocumentId,
6363
timer: StatusTimer,
6464
table_mapping: NamespacedTableMapping,
65-
virtual_table_mapping: NamespacedVirtualTableMapping,
65+
virtual_system_mapping: VirtualSystemMapping,
6666
db_schema: DatabaseSchema,
6767
ts: RepeatableTimestamp,
6868
active_schema: Option<DatabaseSchema>,
@@ -95,17 +95,7 @@ impl<RT: Runtime> SchemaWorker<RT> {
9595
tx: &mut Transaction<RT>,
9696
) -> anyhow::Result<Vec<PendingSchemaWork>> {
9797
let mut pending_schema_work = Vec::new();
98-
let namespaces: Vec<_> = tx
99-
.table_mapping()
100-
.iter()
101-
.filter_map(|(_, namespace, _, table_name)| {
102-
if *table_name == *SCHEMAS_TABLE {
103-
Some(namespace)
104-
} else {
105-
None
106-
}
107-
})
108-
.collect();
98+
let namespaces: Vec<_> = tx.table_mapping().namespaces_for_name(&SCHEMAS_TABLE);
10999
for namespace in namespaces {
110100
if let Some((id, db_schema)) = SchemaModel::new(tx, namespace)
111101
.get_by_state(SchemaState::Pending)
@@ -114,7 +104,7 @@ impl<RT: Runtime> SchemaWorker<RT> {
114104
tracing::debug!("SchemaWorker found a pending schema and is validating it...");
115105
let timer = schema_validation_timer();
116106
let table_mapping = tx.table_mapping().namespace(namespace);
117-
let virtual_table_mapping = tx.virtual_table_mapping().namespace(namespace);
107+
let virtual_system_mapping = tx.virtual_system_mapping().clone();
118108

119109
let active_schema = SchemaModel::new(tx, namespace)
120110
.get_by_state(SchemaState::Active)
@@ -127,7 +117,7 @@ impl<RT: Runtime> SchemaWorker<RT> {
127117
id,
128118
timer,
129119
table_mapping,
130-
virtual_table_mapping,
120+
virtual_system_mapping,
131121
db_schema,
132122
ts,
133123
active_schema,
@@ -150,7 +140,7 @@ impl<RT: Runtime> SchemaWorker<RT> {
150140
id,
151141
timer,
152142
table_mapping,
153-
virtual_table_mapping,
143+
virtual_system_mapping,
154144
db_schema,
155145
ts,
156146
active_schema,
@@ -161,7 +151,7 @@ impl<RT: Runtime> SchemaWorker<RT> {
161151
&db_schema,
162152
active_schema,
163153
&table_mapping,
164-
&virtual_table_mapping,
154+
&virtual_system_mapping,
165155
&|table_name| {
166156
snapshot
167157
.table_summary(namespace, table_name)
@@ -190,7 +180,7 @@ impl<RT: Runtime> SchemaWorker<RT> {
190180
&doc,
191181
table_name,
192182
&table_mapping,
193-
&virtual_table_mapping,
183+
&virtual_system_mapping,
194184
) {
195185
let mut backoff = Backoff::new(INITIAL_COMMIT_BACKOFF, MAX_COMMIT_BACKOFF);
196186
while backoff.failures() < MAX_COMMIT_FAILURES {

crates/common/src/schemas/mod.rs

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,6 @@ use value::{
3030
IdentifierFieldName,
3131
Namespace,
3232
NamespacedTableMapping,
33-
NamespacedVirtualTableMapping,
3433
};
3534

3635
use self::validator::{
@@ -52,6 +51,7 @@ use crate::{
5251
IndexDescriptor,
5352
TableName,
5453
},
54+
virtual_system_mapping::VirtualSystemMapping,
5555
};
5656

5757
pub mod json;
@@ -274,7 +274,7 @@ impl DatabaseSchema {
274274
new_schema: &'a DatabaseSchema,
275275
active_schema: Option<DatabaseSchema>,
276276
table_mapping: &NamespacedTableMapping,
277-
virtual_table_mapping: &NamespacedVirtualTableMapping,
277+
virtual_system_mapping: &VirtualSystemMapping,
278278
shape_provider: &F,
279279
) -> anyhow::Result<BTreeSet<&'a TableName>>
280280
where
@@ -293,7 +293,7 @@ impl DatabaseSchema {
293293
table_definition,
294294
&active_schema,
295295
table_mapping,
296-
virtual_table_mapping,
296+
virtual_system_mapping,
297297
&shape_provider(table_name),
298298
)
299299
.map(|must_revalidate| must_revalidate.then_some(table_name))
@@ -307,7 +307,7 @@ impl DatabaseSchema {
307307
table_definition: &TableDefinition,
308308
active_schema: &Option<DatabaseSchema>,
309309
table_mapping: &NamespacedTableMapping,
310-
virtual_table_mapping: &NamespacedVirtualTableMapping,
310+
virtual_system_mapping: &VirtualSystemMapping,
311311
table_shape: &Shape<C, S>,
312312
) -> anyhow::Result<bool> {
313313
let next_schema = table_definition.document_type.clone();
@@ -327,7 +327,7 @@ impl DatabaseSchema {
327327

328328
// Can skip validation thanks to the saved shape?
329329
let validator_from_shape =
330-
Validator::from_shape(table_shape, table_mapping, virtual_table_mapping);
330+
Validator::from_shape(table_shape, table_mapping, virtual_system_mapping);
331331
if validator_from_shape
332332
.filter_top_level_system_fields()
333333
.is_subset(&next_schema_validator)
@@ -348,7 +348,7 @@ impl DatabaseSchema {
348348
&self,
349349
doc: &ResolvedDocument,
350350
table_mapping: &NamespacedTableMapping,
351-
virtual_table_mapping: &NamespacedVirtualTableMapping,
351+
virtual_system_mapping: &VirtualSystemMapping,
352352
) -> Result<(), ValidationError> {
353353
if self.schema_validation
354354
&& let Ok(table_name) = table_mapping.tablet_name(doc.id().tablet_id)
@@ -357,7 +357,7 @@ impl DatabaseSchema {
357357
return document_schema.check_value(
358358
&doc.value().0,
359359
table_mapping,
360-
virtual_table_mapping,
360+
virtual_system_mapping,
361361
);
362362
}
363363
Ok(())
@@ -368,9 +368,9 @@ impl DatabaseSchema {
368368
doc: &ResolvedDocument,
369369
table_name: TableName,
370370
table_mapping: &NamespacedTableMapping,
371-
virtual_table_mapping: &NamespacedVirtualTableMapping,
371+
virtual_system_mapping: &VirtualSystemMapping,
372372
) -> Result<(), SchemaValidationError> {
373-
self.check_value(doc, table_mapping, virtual_table_mapping)
373+
self.check_value(doc, table_mapping, virtual_system_mapping)
374374
.map_err(|validation_error| SchemaValidationError::ExistingDocument {
375375
validation_error,
376376
table_name,
@@ -383,9 +383,9 @@ impl DatabaseSchema {
383383
doc: &ResolvedDocument,
384384
table_name: TableName,
385385
table_mapping: &NamespacedTableMapping,
386-
virtual_table_mapping: &NamespacedVirtualTableMapping,
386+
virtual_system_mapping: &VirtualSystemMapping,
387387
) -> Result<(), SchemaEnforcementError> {
388-
self.check_value(doc, table_mapping, virtual_table_mapping)
388+
self.check_value(doc, table_mapping, virtual_system_mapping)
389389
.map_err(|validation_error| SchemaEnforcementError::Document {
390390
validation_error,
391391
table_name,
@@ -750,7 +750,7 @@ impl DocumentSchema {
750750
&self,
751751
value: &ConvexObject,
752752
table_mapping: &NamespacedTableMapping,
753-
virtual_table_mapping: &NamespacedVirtualTableMapping,
753+
virtual_system_mapping: &VirtualSystemMapping,
754754
) -> Result<(), ValidationError> {
755755
match self {
756756
DocumentSchema::Any => {},
@@ -763,7 +763,7 @@ impl DocumentSchema {
763763
Validator::Union(schema_type).check_value(
764764
&ConvexValue::Object(value),
765765
table_mapping,
766-
virtual_table_mapping,
766+
virtual_system_mapping,
767767
)?;
768768
},
769769
}

0 commit comments

Comments
 (0)