Skip to content

Commit b0f3f8d

Browse files
authored
Remove __decribe_module_v10__ (#4246)
This reverts commit fd3cdb3. # Description of Changes Reverts #4105, We do not actually need `__describe_module_v10__`, as original describe reducer returns `enum` - `crates:lib::RawModuleDef` which is extended to add a variant for `V10` # API and ABI breaking changes NA # Expected complexity level and risk 1 # Testing Existing tests should be enough
1 parent 2d656d4 commit b0f3f8d

7 files changed

Lines changed: 22 additions & 72 deletions

File tree

crates/bindings-sys/src/lib.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -924,7 +924,7 @@ pub mod raw {
924924
/// would be where you would initialize the interepreter and load the user module into it.
925925
fn __setup__() -> Result;
926926
/// Required. Runs after `__setup__`; returns all the exports for the module.
927-
fn __describe_module_v10__() -> Encoded<ModuleDef>;
927+
fn __describe_module__() -> Encoded<ModuleDef>;
928928
/// Required. id is an index into the `ModuleDef.reducers` returned from `__describe_module__`.
929929
/// args is a bsatn-encoded product value defined by the schema at `reducers[id]`.
930930
fn __call_reducer__(

crates/bindings/src/rt.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -678,7 +678,7 @@ pub trait RowLevelSecurityInfo {
678678
}
679679

680680
/// A function which will be registered by [`register_describer`] into [`DESCRIBERS`],
681-
/// which will be called by [`__describe_module_v10__`] to construct a module definition.
681+
/// which will be called by [`__describe_module__`] to construct a module definition.
682682
///
683683
/// May be a closure over static data, so that e.g.
684684
/// [`register_row_level_security`] doesn't need to take a type parameter.
@@ -874,7 +874,7 @@ static ANONYMOUS_VIEWS: OnceLock<Vec<AnonymousFn>> = OnceLock::new();
874874
/// including when modules are updated (re-publishing).
875875
/// After initialization, the module cannot alter the schema.
876876
#[no_mangle]
877-
extern "C" fn __describe_module_v10__(description: BytesSink) {
877+
extern "C" fn __describe_module__(description: BytesSink) {
878878
// Collect the `module`.
879879
let mut module = ModuleBuilder::default();
880880
for describer in &mut *DESCRIBERS.lock().unwrap() {

crates/core/src/host/module_common.rs

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,11 @@
33
44
use crate::{
55
energy::EnergyMonitor,
6-
host::{module_host::ModuleInfo, wasm_common::module_host_actor::DescribeError, Scheduler},
6+
host::{
7+
module_host::ModuleInfo,
8+
wasm_common::{module_host_actor::DescribeError, DESCRIBE_MODULE_DUNDER},
9+
Scheduler,
10+
},
711
module_host_context::ModuleCreationContext,
812
replica_context::ReplicaContext,
913
};
@@ -86,10 +90,11 @@ impl ModuleCommon {
8690

8791
/// Runs the describer of modules in `run` and does some logging around it.
8892
pub(crate) fn run_describer<T>(
89-
describer_func_name: &str,
9093
log_traceback: impl Copy + FnOnce(&str, &str, &anyhow::Error),
9194
run: impl FnOnce() -> anyhow::Result<T>,
9295
) -> Result<T, DescribeError> {
96+
let describer_func_name = DESCRIBE_MODULE_DUNDER;
97+
9398
let start = std::time::Instant::now();
9499
log::trace!("Start describer \"{describer_func_name}\"...");
95100

crates/core/src/host/v8/mod.rs

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ use crate::host::wasm_common::module_host_actor::{
2525
InstanceOp, ProcedureExecuteResult, ProcedureOp, ReducerExecuteResult, ReducerOp, ViewExecuteResult, ViewOp,
2626
WasmInstance,
2727
};
28-
use crate::host::wasm_common::{RowIters, TimingSpanSet, DESCRIBE_MODULE_DUNDER};
28+
use crate::host::wasm_common::{RowIters, TimingSpanSet};
2929
use crate::host::{ModuleHost, ReducerCallError, ReducerCallResult, Scheduler};
3030
use crate::module_host_context::ModuleCreationContext;
3131
use crate::replica_context::ReplicaContext;
@@ -925,8 +925,6 @@ fn extract_description<'scope>(
925925
replica_ctx: &ReplicaContext,
926926
) -> Result<RawModuleDef, DescribeError> {
927927
run_describer(
928-
//TODO(shub): make it work with `DESCRIBE_MODULE_DUNDER_V10`
929-
DESCRIBE_MODULE_DUNDER,
930928
|a, b, c| log_traceback(replica_ctx, a, b, c),
931929
|| {
932930
catch_exception(scope, |scope| {

crates/core/src/host/wasm_common.rs

Lines changed: 3 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,6 @@ use super::{scheduler::ScheduleError, AbiCall};
1010
use crate::error::{DBError, DatastoreError, IndexError, NodesError};
1111
use spacetimedb_primitives::errno;
1212
use spacetimedb_sats::typespace::TypeRefError;
13-
use spacetimedb_schema::def::RawModuleDefVersion;
1413
use spacetimedb_table::table::UniqueConstraintViolation;
1514

1615
pub const CALL_REDUCER_DUNDER: &str = "__call_reducer__";
@@ -21,52 +20,13 @@ pub const CALL_VIEW_DUNDER: &str = "__call_view__";
2120

2221
pub const CALL_VIEW_ANON_DUNDER: &str = "__call_view_anon__";
2322

24-
/// Name of the function that modules export to the host to describe themselves.
25-
///
26-
/// Used by module definitions with versions up to
27-
/// [`RawModuleDefVersion::V9OrEarlier`].
2823
pub const DESCRIBE_MODULE_DUNDER: &str = "__describe_module__";
2924

30-
/// Versioned variant of [`DESCRIBE_MODULE_DUNDER`] for
31-
/// [`RawModuleDefVersion::V10`].
32-
pub const DESCRIBE_MODULE_DUNDER_V10: &str = "__describe_module_v10__";
33-
3425
/// functions with this prefix run prior to __setup__, initializing global variables and the like
3526
pub const PREINIT_DUNDER: &str = "__preinit__";
3627
/// initializes the user code in the module. fallible
3728
pub const SETUP_DUNDER: &str = "__setup__";
3829

39-
/// Detects the [`RawModuleDefVersion`] of a module by checking for the presence
40-
/// of a known describe function export.
41-
pub fn detect_raw_def_version<M>(module: &M) -> Result<RawModuleDefVersion, module_host_actor::DescribeError>
42-
where
43-
M: module_host_actor::WasmModule,
44-
{
45-
if module.get_export(DESCRIBE_MODULE_DUNDER).is_some() {
46-
Ok(RawModuleDefVersion::V9OrEarlier)
47-
} else if module.get_export(DESCRIBE_MODULE_DUNDER_V10).is_some() {
48-
Ok(RawModuleDefVersion::V10)
49-
} else {
50-
Err(module_host_actor::DescribeError::Signature(anyhow::anyhow!(
51-
"module does not export a {} or {} function",
52-
DESCRIBE_MODULE_DUNDER,
53-
DESCRIBE_MODULE_DUNDER_V10
54-
)))
55-
}
56-
}
57-
/// Returns the describe dunder symbol for a given module version.
58-
pub const fn describe_dunder(version: RawModuleDefVersion) -> &'static str {
59-
match version {
60-
RawModuleDefVersion::V9OrEarlier => DESCRIBE_MODULE_DUNDER,
61-
RawModuleDefVersion::V10 => DESCRIBE_MODULE_DUNDER_V10,
62-
}
63-
}
64-
65-
/// Returns all known describe dunder symbols.
66-
pub const fn describe_dunders() -> &'static [&'static str] {
67-
&[DESCRIBE_MODULE_DUNDER, DESCRIBE_MODULE_DUNDER_V10]
68-
}
69-
7030
#[derive(Debug, Clone)]
7131
#[allow(unused)]
7232
pub enum WasmType {
@@ -269,7 +229,7 @@ impl FuncNames {
269229
}
270230
Ok(())
271231
}
272-
pub fn check_required<F, T>(raw_def_ver: RawModuleDefVersion, get_export: F) -> Result<(), ValidationError>
232+
pub fn check_required<F, T>(get_export: F) -> Result<(), ValidationError>
273233
where
274234
F: Fn(&str) -> Option<T>,
275235
T: FuncSigLike,
@@ -283,9 +243,8 @@ impl FuncNames {
283243
let sig = get_func(CALL_REDUCER_DUNDER)?;
284244
Self::validate_signature("call_reducer", &sig, CALL_REDUCER_DUNDER, CALL_REDUCER_SIG)?;
285245

286-
let describe_dunder = describe_dunder(raw_def_ver);
287-
let sig = get_func(describe_dunder)?;
288-
Self::validate_signature("describe_module", &sig, describe_dunder, DESCRIBE_MODULE_SIG)?;
246+
let sig = get_func(DESCRIBE_MODULE_DUNDER)?;
247+
Self::validate_signature("describe_module", &sig, DESCRIBE_MODULE_DUNDER, DESCRIBE_MODULE_SIG)?;
289248

290249
Ok(())
291250
}

crates/core/src/host/wasm_common/module_host_actor.rs

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -283,7 +283,7 @@ impl From<TypeRefError> for InitializationError {
283283

284284
#[derive(thiserror::Error, Debug)]
285285
pub enum DescribeError {
286-
#[error("failed to call descriptor function: invalid signature or function does not exist: {0}")]
286+
#[error("bad signature for descriptor function: {0}")]
287287
Signature(anyhow::Error),
288288
#[error("error when preparing descriptor function: {0}")]
289289
Setup(anyhow::Error),
@@ -304,9 +304,8 @@ impl<T: WasmModule> WasmModuleHostActor<T> {
304304
mcc.program_hash,
305305
);
306306

307-
let raw_def_version = detect_raw_def_version(&module)?;
308307
let func_names = {
309-
FuncNames::check_required(raw_def_version, |name| module.get_export(name))?;
308+
FuncNames::check_required(|name| module.get_export(name))?;
310309
let mut func_names = FuncNames::default();
311310
module.for_each_export(|sym, ty| func_names.update_from_general(sym, ty))?;
312311
func_names.preinits.sort_unstable();

crates/core/src/host/wasmtime/wasmtime_module.rs

Lines changed: 6 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -352,27 +352,16 @@ pub struct WasmtimeInstance {
352352

353353
impl module_host_actor::WasmInstance for WasmtimeInstance {
354354
fn extract_descriptions(&mut self) -> Result<RawModuleDef, DescribeError> {
355-
let mut describer_res = None;
356-
for &describe_func_name in describe_dunders() {
357-
match self
358-
.instance
359-
.get_typed_func::<u32, ()>(&mut self.store, describe_func_name)
360-
{
361-
Ok(describer) => {
362-
describer_res = Some(Ok((describe_func_name, describer)));
363-
break;
364-
}
365-
Err(e) => describer_res = Some(Err(DescribeError::Signature(e))),
366-
}
367-
}
355+
let describer_func_name = DESCRIBE_MODULE_DUNDER;
368356

369-
let (describer_func_name, describer) = describer_res
370-
.transpose()?
371-
.ok_or_else(|| DescribeError::Signature(anyhow::anyhow!("no describer function found")))?;
357+
let describer = self
358+
.instance
359+
.get_typed_func::<u32, ()>(&mut self.store, describer_func_name)
360+
.map_err(DescribeError::Signature)?;
372361

373362
let sink = self.store.data_mut().setup_standard_bytes_sink();
374363

375-
run_describer(describer_func_name, log_traceback, || {
364+
run_describer(log_traceback, || {
376365
call_sync_typed_func(&describer, &mut self.store, sink)
377366
})?;
378367

0 commit comments

Comments
 (0)