Struct mz_catalog::durable::transaction::Transaction

source ·
pub struct Transaction<'a> {
Show 24 fields durable_catalog: &'a mut dyn DurableCatalogState, databases: TableTransaction<DatabaseKey, DatabaseValue>, schemas: TableTransaction<SchemaKey, SchemaValue>, items: TableTransaction<ItemKey, ItemValue>, comments: TableTransaction<CommentKey, CommentValue>, roles: TableTransaction<RoleKey, RoleValue>, clusters: TableTransaction<ClusterKey, ClusterValue>, cluster_replicas: TableTransaction<ClusterReplicaKey, ClusterReplicaValue>, introspection_sources: TableTransaction<ClusterIntrospectionSourceIndexKey, ClusterIntrospectionSourceIndexValue>, id_allocator: TableTransaction<IdAllocKey, IdAllocValue>, configs: TableTransaction<ConfigKey, ConfigValue>, settings: TableTransaction<SettingKey, SettingValue>, system_gid_mapping: TableTransaction<GidMappingKey, GidMappingValue>, system_configurations: TableTransaction<ServerConfigurationKey, ServerConfigurationValue>, default_privileges: TableTransaction<DefaultPrivilegesKey, DefaultPrivilegesValue>, source_references: TableTransaction<SourceReferencesKey, SourceReferencesValue>, system_privileges: TableTransaction<SystemPrivilegesKey, SystemPrivilegesValue>, network_policies: TableTransaction<NetworkPolicyKey, NetworkPolicyValue>, storage_collection_metadata: TableTransaction<StorageCollectionMetadataKey, StorageCollectionMetadataValue>, unfinalized_shards: TableTransaction<UnfinalizedShardKey, ()>, txn_wal_shard: TableTransaction<(), TxnWalShardValue>, audit_log_updates: Vec<(AuditLogKey, Diff, u64)>, commit_ts: Timestamp, op_id: u64,
}
Expand description

A Transaction batches multiple catalog operations together and commits them atomically. An operation also logically groups multiple catalog updates together.

Fields§

§durable_catalog: &'a mut dyn DurableCatalogState§databases: TableTransaction<DatabaseKey, DatabaseValue>§schemas: TableTransaction<SchemaKey, SchemaValue>§items: TableTransaction<ItemKey, ItemValue>§comments: TableTransaction<CommentKey, CommentValue>§roles: TableTransaction<RoleKey, RoleValue>§clusters: TableTransaction<ClusterKey, ClusterValue>§cluster_replicas: TableTransaction<ClusterReplicaKey, ClusterReplicaValue>§introspection_sources: TableTransaction<ClusterIntrospectionSourceIndexKey, ClusterIntrospectionSourceIndexValue>§id_allocator: TableTransaction<IdAllocKey, IdAllocValue>§configs: TableTransaction<ConfigKey, ConfigValue>§settings: TableTransaction<SettingKey, SettingValue>§system_gid_mapping: TableTransaction<GidMappingKey, GidMappingValue>§system_configurations: TableTransaction<ServerConfigurationKey, ServerConfigurationValue>§default_privileges: TableTransaction<DefaultPrivilegesKey, DefaultPrivilegesValue>§source_references: TableTransaction<SourceReferencesKey, SourceReferencesValue>§system_privileges: TableTransaction<SystemPrivilegesKey, SystemPrivilegesValue>§network_policies: TableTransaction<NetworkPolicyKey, NetworkPolicyValue>§storage_collection_metadata: TableTransaction<StorageCollectionMetadataKey, StorageCollectionMetadataValue>§unfinalized_shards: TableTransaction<UnfinalizedShardKey, ()>§txn_wal_shard: TableTransaction<(), TxnWalShardValue>§audit_log_updates: Vec<(AuditLogKey, Diff, u64)>§commit_ts: Timestamp

The timestamp to commit this transaction at.

§op_id: u64

The ID of the current operation of this transaction.

Implementations§

source§

impl<'a> Transaction<'a>

source

pub fn new( durable_catalog: &'a mut dyn DurableCatalogState, _: Snapshot, commit_ts: Timestamp, ) -> Result<Transaction<'_>, CatalogError>

source

pub fn get_item(&self, id: &CatalogItemId) -> Option<Item>

source

pub fn get_items(&self) -> impl Iterator<Item = Item>

source

pub fn insert_audit_log_event(&mut self, event: VersionedEvent)

source

pub fn insert_audit_log_events( &mut self, events: impl IntoIterator<Item = VersionedEvent>, )

source

pub fn insert_user_database( &mut self, database_name: &str, owner_id: RoleId, privileges: Vec<MzAclItem>, temporary_oids: &HashSet<u32>, ) -> Result<(DatabaseId, u32), CatalogError>

source

pub(crate) fn insert_database( &mut self, id: DatabaseId, database_name: &str, owner_id: RoleId, privileges: Vec<MzAclItem>, oid: u32, ) -> Result<u32, CatalogError>

source

pub fn insert_user_schema( &mut self, database_id: DatabaseId, schema_name: &str, owner_id: RoleId, privileges: Vec<MzAclItem>, temporary_oids: &HashSet<u32>, ) -> Result<(SchemaId, u32), CatalogError>

source

pub fn insert_system_schema( &mut self, schema_id: u64, schema_name: &str, owner_id: RoleId, privileges: Vec<MzAclItem>, oid: u32, ) -> Result<(), CatalogError>

source

pub(crate) fn insert_schema( &mut self, schema_id: SchemaId, database_id: Option<DatabaseId>, schema_name: String, owner_id: RoleId, privileges: Vec<MzAclItem>, oid: u32, ) -> Result<(), CatalogError>

source

pub fn insert_builtin_role( &mut self, id: RoleId, name: String, attributes: RoleAttributes, membership: RoleMembership, vars: RoleVars, oid: u32, ) -> Result<RoleId, CatalogError>

source

pub fn insert_user_role( &mut self, name: String, attributes: RoleAttributes, membership: RoleMembership, vars: RoleVars, temporary_oids: &HashSet<u32>, ) -> Result<(RoleId, u32), CatalogError>

source

fn insert_role( &mut self, id: RoleId, name: String, attributes: RoleAttributes, membership: RoleMembership, vars: RoleVars, oid: u32, ) -> Result<(), CatalogError>

source

pub fn insert_user_cluster( &mut self, cluster_id: ClusterId, cluster_name: &str, introspection_source_indexes: Vec<(&'static BuiltinLog, CatalogItemId, GlobalId)>, owner_id: RoleId, privileges: Vec<MzAclItem>, config: ClusterConfig, temporary_oids: &HashSet<u32>, ) -> Result<(), CatalogError>

Panics if any introspection source id is not a system id

source

pub fn insert_system_cluster( &mut self, cluster_id: ClusterId, cluster_name: &str, introspection_source_indexes: Vec<(&'static BuiltinLog, CatalogItemId, GlobalId)>, privileges: Vec<MzAclItem>, owner_id: RoleId, config: ClusterConfig, temporary_oids: &HashSet<u32>, ) -> Result<(), CatalogError>

Panics if any introspection source id is not a system id

source

fn insert_cluster( &mut self, cluster_id: ClusterId, cluster_name: &str, introspection_source_indexes: Vec<(&'static BuiltinLog, CatalogItemId, GlobalId)>, owner_id: RoleId, privileges: Vec<MzAclItem>, config: ClusterConfig, temporary_oids: &HashSet<u32>, ) -> Result<(), CatalogError>

source

pub fn rename_cluster( &mut self, cluster_id: ClusterId, cluster_name: &str, cluster_to_name: &str, ) -> Result<(), CatalogError>

source

pub fn rename_cluster_replica( &mut self, replica_id: ReplicaId, replica_name: &QualifiedReplica, replica_to_name: &str, ) -> Result<(), CatalogError>

source

pub fn insert_cluster_replica( &mut self, cluster_id: ClusterId, replica_name: &str, config: ReplicaConfig, owner_id: RoleId, ) -> Result<ReplicaId, CatalogError>

source

pub(crate) fn insert_cluster_replica_with_id( &mut self, cluster_id: ClusterId, replica_id: ReplicaId, replica_name: &str, config: ReplicaConfig, owner_id: RoleId, ) -> Result<(), CatalogError>

source

pub fn insert_user_network_policy( &mut self, name: String, rules: Vec<NetworkPolicyRule>, privileges: Vec<MzAclItem>, owner_id: RoleId, temporary_oids: &HashSet<u32>, ) -> Result<NetworkPolicyId, CatalogError>

source

pub fn insert_network_policy( &mut self, id: NetworkPolicyId, name: String, rules: Vec<NetworkPolicyRule>, privileges: Vec<MzAclItem>, owner_id: RoleId, oid: u32, ) -> Result<NetworkPolicyId, CatalogError>

source

pub fn update_introspection_source_index_gids( &mut self, mappings: impl Iterator<Item = (ClusterId, impl Iterator<Item = (String, CatalogItemId, GlobalId, u32)>)>, ) -> Result<(), CatalogError>

Updates persisted information about persisted introspection source indexes.

Panics if provided id is not a system id.

source

pub fn insert_user_item( &mut self, id: CatalogItemId, global_id: GlobalId, schema_id: SchemaId, item_name: &str, create_sql: String, owner_id: RoleId, privileges: Vec<MzAclItem>, temporary_oids: &HashSet<u32>, versions: BTreeMap<RelationVersion, GlobalId>, ) -> Result<u32, CatalogError>

source

pub fn insert_item( &mut self, id: CatalogItemId, oid: u32, global_id: GlobalId, schema_id: SchemaId, item_name: &str, create_sql: String, owner_id: RoleId, privileges: Vec<MzAclItem>, extra_versions: BTreeMap<RelationVersion, GlobalId>, ) -> Result<(), CatalogError>

source

pub fn get_and_increment_id(&mut self, key: String) -> Result<u64, CatalogError>

source

pub fn get_and_increment_id_by( &mut self, key: String, amount: u64, ) -> Result<Vec<u64>, CatalogError>

source

pub fn allocate_system_item_ids( &mut self, amount: u64, ) -> Result<Vec<(CatalogItemId, GlobalId)>, CatalogError>

source

pub fn allocate_user_item_ids( &mut self, amount: u64, ) -> Result<Vec<(CatalogItemId, GlobalId)>, CatalogError>

source

pub fn allocate_user_replica_id(&mut self) -> Result<ReplicaId, CatalogError>

source

pub fn allocate_system_replica_id(&mut self) -> Result<ReplicaId, CatalogError>

source

pub fn allocate_audit_log_id(&mut self) -> Result<u64, CatalogError>

source

pub fn allocate_storage_usage_ids(&mut self) -> Result<u64, CatalogError>

source

fn allocate_oids( &mut self, amount: u64, temporary_oids: &HashSet<u32>, ) -> Result<Vec<u32>, CatalogError>

Allocates amount OIDs. OIDs can be recycled if they aren’t currently assigned to any object.

source

pub fn allocate_oid( &mut self, temporary_oids: &HashSet<u32>, ) -> Result<u32, CatalogError>

Allocates a single OID. OIDs can be recycled if they aren’t currently assigned to any object.

source

pub(crate) fn insert_id_allocator( &mut self, name: String, next_id: u64, ) -> Result<(), CatalogError>

source

pub fn remove_database(&mut self, id: &DatabaseId) -> Result<(), CatalogError>

Removes the database id from the transaction.

Returns an error if id is not found.

Runtime is linear with respect to the total number of databases in the catalog. DO NOT call this function in a loop, use Self::remove_databases instead.

source

pub fn remove_databases( &mut self, databases: &BTreeSet<DatabaseId>, ) -> Result<(), CatalogError>

Removes all databases in databases from the transaction.

Returns an error if any id in databases is not found.

NOTE: On error, there still may be some databases removed from the transaction. It is up to the caller to either abort the transaction or commit.

source

pub fn remove_schema( &mut self, database_id: &Option<DatabaseId>, schema_id: &SchemaId, ) -> Result<(), CatalogError>

Removes the schema identified by database_id and schema_id from the transaction.

Returns an error if (database_id, schema_id) is not found.

Runtime is linear with respect to the total number of schemas in the catalog. DO NOT call this function in a loop, use Self::remove_schemas instead.

source

pub fn remove_schemas( &mut self, schemas: &BTreeMap<SchemaId, ResolvedDatabaseSpecifier>, ) -> Result<(), CatalogError>

Removes all schemas in schemas from the transaction.

Returns an error if any id in schemas is not found.

NOTE: On error, there still may be some schemas removed from the transaction. It is up to the caller to either abort the transaction or commit.

source

pub fn remove_source_references( &mut self, source_id: CatalogItemId, ) -> Result<(), CatalogError>

source

pub fn remove_role(&mut self, name: &str) -> Result<(), CatalogError>

Removes the role name from the transaction.

Returns an error if name is not found.

Runtime is linear with respect to the total number of roles in the catalog. DO NOT call this function in a loop, use Self::remove_roles instead.

source

pub fn remove_roles( &mut self, roles: &BTreeSet<RoleId>, ) -> Result<(), CatalogError>

Removes all roles in roles from the transaction.

Returns an error if any id in roles is not found.

NOTE: On error, there still may be some roles removed from the transaction. It is up to the caller to either abort the transaction or commit.

source

pub fn remove_clusters( &mut self, clusters: &BTreeSet<ClusterId>, ) -> Result<(), CatalogError>

Removes all cluster in clusters from the transaction.

Returns an error if any id in clusters is not found.

NOTE: On error, there still may be some clusters removed from the transaction. It is up to the caller to either abort the transaction or commit.

source

pub fn remove_cluster_replica( &mut self, id: ReplicaId, ) -> Result<(), CatalogError>

Removes the cluster replica id from the transaction.

Returns an error if id is not found.

Runtime is linear with respect to the total number of cluster replicas in the catalog. DO NOT call this function in a loop, use Self::remove_cluster_replicas instead.

source

pub fn remove_cluster_replicas( &mut self, replicas: &BTreeSet<ReplicaId>, ) -> Result<(), CatalogError>

Removes all cluster replicas in replicas from the transaction.

Returns an error if any id in replicas is not found.

NOTE: On error, there still may be some cluster replicas removed from the transaction. It is up to the caller to either abort the transaction or commit.

source

pub fn remove_item(&mut self, id: CatalogItemId) -> Result<(), CatalogError>

Removes item id from the transaction.

Returns an error if id is not found.

Runtime is linear with respect to the total number of items in the catalog. DO NOT call this function in a loop, use Self::remove_items instead.

source

pub fn remove_items( &mut self, ids: &BTreeSet<CatalogItemId>, ) -> Result<(), CatalogError>

Removes all items in ids from the transaction.

Returns an error if any id in ids is not found.

NOTE: On error, there still may be some items removed from the transaction. It is up to the caller to either abort the transaction or commit.

source

pub fn remove_system_object_mappings( &mut self, descriptions: BTreeSet<SystemObjectDescription>, ) -> Result<(), CatalogError>

Removes all system object mappings in descriptions from the transaction.

Returns an error if any description in descriptions is not found.

NOTE: On error, there still may be some items removed from the transaction. It is up to the caller to either abort the transaction or commit.

source

pub fn remove_introspection_source_indexes( &mut self, introspection_source_indexes: BTreeSet<(ClusterId, String)>, ) -> Result<(), CatalogError>

Removes all introspection source indexes in indexes from the transaction.

Returns an error if any index in indexes is not found.

NOTE: On error, there still may be some indexes removed from the transaction. It is up to the caller to either abort the transaction or commit.

source

pub fn update_item( &mut self, id: CatalogItemId, item: Item, ) -> Result<(), CatalogError>

Updates item id in the transaction to item_name and item.

Returns an error if id is not found.

Runtime is linear with respect to the total number of items in the catalog. DO NOT call this function in a loop, use Self::update_items instead.

source

pub fn update_items( &mut self, items: BTreeMap<CatalogItemId, Item>, ) -> Result<(), CatalogError>

Updates all items with ids matching the keys of items in the transaction, to the corresponding value in items.

Returns an error if any id in items is not found.

NOTE: On error, there still may be some items updated in the transaction. It is up to the caller to either abort the transaction or commit.

source

pub fn update_role( &mut self, id: RoleId, role: Role, ) -> Result<(), CatalogError>

Updates role id in the transaction to role.

Returns an error if id is not found.

Runtime is linear with respect to the total number of items in the catalog. DO NOT call this function in a loop, implement and use some Self::update_roles instead. You should model it after Self::update_items.

source

pub fn update_roles( &mut self, roles: BTreeMap<RoleId, Role>, ) -> Result<(), CatalogError>

Updates all Roles with ids matching the keys of roles in the transaction, to the corresponding value in roles.

Returns an error if any id in roles is not found.

NOTE: On error, there still may be some roles updated in the transaction. It is up to the caller to either abort the transaction or commit.

source

pub fn update_system_object_mappings( &mut self, mappings: BTreeMap<CatalogItemId, SystemObjectMapping>, ) -> Result<(), CatalogError>

Updates persisted mapping from system objects to global IDs and fingerprints. Each element of mappings should be (old-global-id, new-system-object-mapping).

Panics if provided id is not a system id.

source

pub fn update_cluster( &mut self, id: ClusterId, cluster: Cluster, ) -> Result<(), CatalogError>

Updates cluster id in the transaction to cluster.

Returns an error if id is not found.

Runtime is linear with respect to the total number of clusters in the catalog. DO NOT call this function in a loop.

source

pub fn update_cluster_replica( &mut self, replica_id: ReplicaId, replica: ClusterReplica, ) -> Result<(), CatalogError>

Updates cluster replica replica_id in the transaction to replica.

Returns an error if replica_id is not found.

Runtime is linear with respect to the total number of cluster replicas in the catalog. DO NOT call this function in a loop.

source

pub fn update_database( &mut self, id: DatabaseId, database: Database, ) -> Result<(), CatalogError>

Updates database id in the transaction to database.

Returns an error if id is not found.

Runtime is linear with respect to the total number of databases in the catalog. DO NOT call this function in a loop.

source

pub fn update_schema( &mut self, schema_id: SchemaId, schema: Schema, ) -> Result<(), CatalogError>

Updates schema schema_id in the transaction to schema.

Returns an error if schema_id is not found.

Runtime is linear with respect to the total number of schemas in the catalog. DO NOT call this function in a loop.

source

pub fn update_network_policy( &mut self, id: NetworkPolicyId, network_policy: NetworkPolicy, ) -> Result<(), CatalogError>

Updates network_policy_id in the transaction to network policy.

Returns an error if id is not found.

Runtime is linear with respect to the total number of databases in the catalog. DO NOT call this function in a loop.

source

pub fn remove_network_policies( &mut self, network_policies: &BTreeSet<NetworkPolicyId>, ) -> Result<(), CatalogError>

Removes all network policies in network policies from the transaction.

Returns an error if any id in network policy is not found.

NOTE: On error, there still may be some roles removed from the transaction. It is up to the caller to either abort the transaction or commit.

source

pub fn set_default_privilege( &mut self, role_id: RoleId, database_id: Option<DatabaseId>, schema_id: Option<SchemaId>, object_type: ObjectType, grantee: RoleId, privileges: Option<AclMode>, ) -> Result<(), CatalogError>

Set persisted default privilege.

DO NOT call this function in a loop, use Self::set_default_privileges instead.

source

pub fn set_default_privileges( &mut self, default_privileges: Vec<DefaultPrivilege>, ) -> Result<(), CatalogError>

Set persisted default privileges.

source

pub fn set_system_privilege( &mut self, grantee: RoleId, grantor: RoleId, acl_mode: Option<AclMode>, ) -> Result<(), CatalogError>

Set persisted system privilege.

DO NOT call this function in a loop, use Self::set_system_privileges instead.

source

pub fn set_system_privileges( &mut self, system_privileges: Vec<MzAclItem>, ) -> Result<(), CatalogError>

Set persisted system privileges.

source

pub(crate) fn set_setting( &mut self, name: String, value: Option<String>, ) -> Result<(), CatalogError>

Set persisted setting.

source

pub fn set_catalog_content_version( &mut self, version: String, ) -> Result<(), CatalogError>

source

pub fn insert_introspection_source_indexes( &mut self, introspection_source_indexes: Vec<(ClusterId, String, CatalogItemId, GlobalId)>, temporary_oids: &HashSet<u32>, ) -> Result<(), CatalogError>

Insert persisted introspection source index.

source

pub fn set_system_object_mappings( &mut self, mappings: Vec<SystemObjectMapping>, ) -> Result<(), CatalogError>

Set persisted system object mappings.

source

pub fn set_replicas( &mut self, replicas: Vec<ClusterReplica>, ) -> Result<(), CatalogError>

Set persisted replica.

source

pub fn set_config( &mut self, key: String, value: Option<u64>, ) -> Result<(), CatalogError>

Set persisted configuration.

source

pub fn get_config(&self, key: String) -> Option<u64>

Get the value of a persisted config.

source

pub fn set_enable_0dt_deployment( &mut self, value: bool, ) -> Result<(), CatalogError>

Updates the catalog enable_0dt_deployment “config” value to match the enable_0dt_deployment “system var” value.

These are mirrored so that we can toggle the flag with Launch Darkly, but use it in boot before Launch Darkly is available.

source

pub fn set_0dt_deployment_max_wait( &mut self, value: Duration, ) -> Result<(), CatalogError>

Updates the catalog with_0dt_deployment_max_wait “config” value to match the with_0dt_deployment_max_wait “system var” value.

These are mirrored so that we can toggle the flag with Launch Darkly, but use it in boot before Launch Darkly is available.

source

pub fn set_enable_0dt_deployment_panic_after_timeout( &mut self, value: bool, ) -> Result<(), CatalogError>

Updates the catalog 0dt_deployment_panic_after_timeout “config” value to match the 0dt_deployment_panic_after_timeout “system var” value.

These are mirrored so that we can toggle the flag with Launch Darkly, but use it in boot before Launch Darkly is available.

source

pub fn reset_enable_0dt_deployment(&mut self) -> Result<(), CatalogError>

Removes the catalog enable_0dt_deployment “config” value to match the enable_0dt_deployment “system var” value.

These are mirrored so that we can toggle the flag with LaunchDarkly, but use it in boot before LaunchDarkly is available.

source

pub fn reset_0dt_deployment_max_wait(&mut self) -> Result<(), CatalogError>

Removes the catalog with_0dt_deployment_max_wait “config” value to match the with_0dt_deployment_max_wait “system var” value.

These are mirrored so that we can toggle the flag with LaunchDarkly, but use it in boot before LaunchDarkly is available.

source

pub fn reset_enable_0dt_deployment_panic_after_timeout( &mut self, ) -> Result<(), CatalogError>

Removes the catalog enable_0dt_deployment_panic_after_timeout “config” value to match the enable_0dt_deployment_panic_after_timeout “system var” value.

These are mirrored so that we can toggle the flag with LaunchDarkly, but use it in boot before LaunchDarkly is available.

source

pub fn set_system_config_synced_once(&mut self) -> Result<(), CatalogError>

Updates the catalog system_config_synced “config” value to true.

source

pub fn update_comment( &mut self, object_id: CommentObjectId, sub_component: Option<usize>, comment: Option<String>, ) -> Result<(), CatalogError>

source

pub fn drop_comments( &mut self, object_ids: &BTreeSet<CommentObjectId>, ) -> Result<(), CatalogError>

source

pub fn update_source_references( &mut self, source_id: CatalogItemId, references: Vec<SourceReference>, updated_at: u64, ) -> Result<(), CatalogError>

source

pub fn upsert_system_config( &mut self, name: &str, value: String, ) -> Result<(), CatalogError>

Upserts persisted system configuration name to value.

source

pub fn remove_system_config(&mut self, name: &str)

Removes persisted system configuration name.

source

pub fn clear_system_configs(&mut self)

Removes all persisted system configurations.

source

pub(crate) fn insert_config( &mut self, key: String, value: u64, ) -> Result<(), CatalogError>

source

pub fn get_clusters(&self) -> impl Iterator<Item = Cluster>

source

pub fn get_cluster_replicas(&self) -> impl Iterator<Item = ClusterReplica>

source

pub fn get_roles(&self) -> impl Iterator<Item = Role>

source

pub fn get_network_policies(&self) -> impl Iterator<Item = NetworkPolicy>

source

pub fn get_system_object_mappings( &self, ) -> impl Iterator<Item = SystemObjectMapping>

source

pub fn get_schemas(&self) -> impl Iterator<Item = Schema>

source

pub fn get_system_configurations( &self, ) -> impl Iterator<Item = SystemConfiguration>

source

pub fn get_introspection_source_indexes( &self, cluster_id: ClusterId, ) -> BTreeMap<String, (GlobalId, u32)>

source

pub fn get_catalog_content_version(&self) -> Option<String>

source

pub fn get_and_commit_op_updates(&mut self) -> Vec<StateUpdate>

Commit the current operation within the transaction. This does not cause anything to be written durably, but signals to the current transaction that we are moving on to the next operation.

Returns the updates of the committed operation.

source

fn get_op_updates(&self) -> Vec<StateUpdate>

source

pub fn is_savepoint(&self) -> bool

source

fn commit_op(&mut self)

source

pub fn op_id(&self) -> u64

source

pub fn commit_ts(&self) -> Timestamp

source

pub(crate) fn into_parts( self, ) -> (TransactionBatch, &'a mut dyn DurableCatalogState)

source

pub(crate) async fn commit_internal( self, ) -> Result<(&'a mut dyn DurableCatalogState, Timestamp), CatalogError>

Commits the storage transaction to durable storage. Any error returned outside read-only mode indicates the catalog may be in an indeterminate state and needs to be fully re-read before proceeding. In general, this must be fatal to the calling process. We do not panic/halt inside this function itself so that errors can bubble up during initialization.

In read-only mode, this will return an error indicating that the catalog is not writeable.

source

pub async fn commit(self) -> Result<(), CatalogError>

Commits the storage transaction to durable storage. Any error returned outside read-only mode indicates the catalog may be in an indeterminate state and needs to be fully re-read before proceeding. In general, this must be fatal to the calling process. We do not panic/halt inside this function itself so that errors can bubble up during initialization.

In read-only mode, this will return an error indicating that the catalog is not writeable.

IMPORTANT: It is assumed that the committer of this transaction has already applied all updates from this transaction. Therefore, updates from this transaction will not be returned when calling crate::durable::ReadOnlyDurableCatalogState::sync_to_current_updates or crate::durable::ReadOnlyDurableCatalogState::sync_updates.

An alternative implementation would be for the caller to explicitly consume their updates after committing and only then apply the updates in-memory. While this removes assumptions about the caller in this method, in practice it results in duplicate work on every commit.

Trait Implementations§

source§

impl<'a> Debug for Transaction<'a>

source§

fn fmt(&self, __f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl<'a> PartialEq for Transaction<'a>

source§

fn eq(&self, other: &Self) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
source§

impl StorageTxn<Timestamp> for Transaction<'_>

source§

fn get_collection_metadata(&self) -> BTreeMap<GlobalId, ShardId>

Retrieve all of the visible storage metadata. Read more
source§

fn insert_collection_metadata( &mut self, metadata: BTreeMap<GlobalId, ShardId>, ) -> Result<(), StorageError<Timestamp>>

Add new storage metadata for a collection. Read more
source§

fn delete_collection_metadata( &mut self, ids: BTreeSet<GlobalId>, ) -> Vec<(GlobalId, ShardId)>

Remove the metadata associated with the identified collections. Read more
source§

fn get_unfinalized_shards(&self) -> BTreeSet<ShardId>

Retrieve all of the shards that are no longer in use by an active collection but are yet to be finalized.
source§

fn insert_unfinalized_shards( &mut self, s: BTreeSet<ShardId>, ) -> Result<(), StorageError<Timestamp>>

Insert the specified values as unfinalized shards.
source§

fn mark_shards_as_finalized(&mut self, shards: BTreeSet<ShardId>)

Mark the specified shards as finalized, deleting them from the unfinalized shard collection.
source§

fn get_txn_wal_shard(&self) -> Option<ShardId>

Get the txn WAL shard for this environment if it exists.
source§

fn write_txn_wal_shard( &mut self, shard: ShardId, ) -> Result<(), StorageError<Timestamp>>

Store the specified shard as the environment’s txn WAL shard. Read more

Auto Trait Implementations§

§

impl<'a> Freeze for Transaction<'a>

§

impl<'a> !RefUnwindSafe for Transaction<'a>

§

impl<'a> Send for Transaction<'a>

§

impl<'a> !Sync for Transaction<'a>

§

impl<'a> Unpin for Transaction<'a>

§

impl<'a> !UnwindSafe for Transaction<'a>

Blanket Implementations§

source§

impl<T> Any for T
where T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> AsAny for T
where T: Any,

source§

fn as_any(&self) -> &(dyn Any + 'static)

source§

impl<T> Borrow<T> for T
where T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T, U> CastInto<U> for T
where U: CastFrom<T>,

source§

fn cast_into(self) -> U

Performs the cast.
source§

impl<T> Conv for T

source§

fn conv<T>(self) -> T
where Self: Into<T>,

Converts self into T using Into<T>. Read more
source§

impl<T> FmtForward for T

source§

fn fmt_binary(self) -> FmtBinary<Self>
where Self: Binary,

Causes self to use its Binary implementation when Debug-formatted.
source§

fn fmt_display(self) -> FmtDisplay<Self>
where Self: Display,

Causes self to use its Display implementation when Debug-formatted.
source§

fn fmt_lower_exp(self) -> FmtLowerExp<Self>
where Self: LowerExp,

Causes self to use its LowerExp implementation when Debug-formatted.
source§

fn fmt_lower_hex(self) -> FmtLowerHex<Self>
where Self: LowerHex,

Causes self to use its LowerHex implementation when Debug-formatted.
source§

fn fmt_octal(self) -> FmtOctal<Self>
where Self: Octal,

Causes self to use its Octal implementation when Debug-formatted.
source§

fn fmt_pointer(self) -> FmtPointer<Self>
where Self: Pointer,

Causes self to use its Pointer implementation when Debug-formatted.
source§

fn fmt_upper_exp(self) -> FmtUpperExp<Self>
where Self: UpperExp,

Causes self to use its UpperExp implementation when Debug-formatted.
source§

fn fmt_upper_hex(self) -> FmtUpperHex<Self>
where Self: UpperHex,

Causes self to use its UpperHex implementation when Debug-formatted.
source§

fn fmt_list(self) -> FmtList<Self>
where &'a Self: for<'a> IntoIterator,

Formats each item in a sequence. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

source§

impl<T> FutureExt for T

source§

fn with_context(self, otel_cx: Context) -> WithContext<Self>

Attaches the provided Context to this type, returning a WithContext wrapper. Read more
source§

fn with_current_context(self) -> WithContext<Self>

Attaches the current Context to this type, returning a WithContext wrapper. Read more
source§

impl<T> Instrument for T

source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
source§

impl<T, U> Into<U> for T
where U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

source§

impl<T> IntoRequest<T> for T

source§

fn into_request(self) -> Request<T>

Wrap the input message T in a tonic::Request
source§

impl<Unshared, Shared> IntoShared<Shared> for Unshared
where Shared: FromUnshared<Unshared>,

source§

fn into_shared(self) -> Shared

Creates a shared type from an unshared type.
source§

impl<T, U> OverrideFrom<Option<&T>> for U
where U: OverrideFrom<T>,

source§

fn override_from(self, layer: &Option<&T>) -> U

Override the configuration represented by Self with values from the given layer.
source§

impl<T> Pipe for T
where T: ?Sized,

source§

fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> R
where Self: Sized,

Pipes by value. This is generally the method you want to use. Read more
source§

fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> R
where R: 'a,

Borrows self and passes that borrow into the pipe function. Read more
source§

fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> R
where R: 'a,

Mutably borrows self and passes that borrow into the pipe function. Read more
source§

fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
where Self: Borrow<B>, B: 'a + ?Sized, R: 'a,

Borrows self, then passes self.borrow() into the pipe function. Read more
source§

fn pipe_borrow_mut<'a, B, R>( &'a mut self, func: impl FnOnce(&'a mut B) -> R, ) -> R
where Self: BorrowMut<B>, B: 'a + ?Sized, R: 'a,

Mutably borrows self, then passes self.borrow_mut() into the pipe function. Read more
source§

fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
where Self: AsRef<U>, U: 'a + ?Sized, R: 'a,

Borrows self, then passes self.as_ref() into the pipe function.
source§

fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
where Self: AsMut<U>, U: 'a + ?Sized, R: 'a,

Mutably borrows self, then passes self.as_mut() into the pipe function.
source§

fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
where Self: Deref<Target = T>, T: 'a + ?Sized, R: 'a,

Borrows self, then passes self.deref() into the pipe function.
source§

fn pipe_deref_mut<'a, T, R>( &'a mut self, func: impl FnOnce(&'a mut T) -> R, ) -> R
where Self: DerefMut<Target = T> + Deref, T: 'a + ?Sized, R: 'a,

Mutably borrows self, then passes self.deref_mut() into the pipe function.
source§

impl<T> Pointable for T

source§

const ALIGN: usize = _

The alignment of pointer.
§

type Init = T

The type for initializers.
source§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
source§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
source§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
source§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
source§

impl<P, R> ProtoType<R> for P
where R: RustType<P>,

source§

impl<T> Same for T

§

type Output = T

Should always be Self
source§

impl<'a, S, T> Semigroup<&'a S> for T
where T: Semigroup<S>,

source§

fn plus_equals(&mut self, rhs: &&'a S)

The method of std::ops::AddAssign, for types that do not implement AddAssign.
source§

impl<T> Tap for T

source§

fn tap(self, func: impl FnOnce(&Self)) -> Self

Immutable access to a value. Read more
source§

fn tap_mut(self, func: impl FnOnce(&mut Self)) -> Self

Mutable access to a value. Read more
source§

fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
where Self: Borrow<B>, B: ?Sized,

Immutable access to the Borrow<B> of a value. Read more
source§

fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
where Self: BorrowMut<B>, B: ?Sized,

Mutable access to the BorrowMut<B> of a value. Read more
source§

fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
where Self: AsRef<R>, R: ?Sized,

Immutable access to the AsRef<R> view of a value. Read more
source§

fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
where Self: AsMut<R>, R: ?Sized,

Mutable access to the AsMut<R> view of a value. Read more
source§

fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
where Self: Deref<Target = T>, T: ?Sized,

Immutable access to the Deref::Target of a value. Read more
source§

fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
where Self: DerefMut<Target = T> + Deref, T: ?Sized,

Mutable access to the Deref::Target of a value. Read more
source§

fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self

Calls .tap() only in debug builds, and is erased in release builds.
source§

fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self

Calls .tap_mut() only in debug builds, and is erased in release builds.
source§

fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
where Self: Borrow<B>, B: ?Sized,

Calls .tap_borrow() only in debug builds, and is erased in release builds.
source§

fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
where Self: BorrowMut<B>, B: ?Sized,

Calls .tap_borrow_mut() only in debug builds, and is erased in release builds.
source§

fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
where Self: AsRef<R>, R: ?Sized,

Calls .tap_ref() only in debug builds, and is erased in release builds.
source§

fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
where Self: AsMut<R>, R: ?Sized,

Calls .tap_ref_mut() only in debug builds, and is erased in release builds.
source§

fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
where Self: Deref<Target = T>, T: ?Sized,

Calls .tap_deref() only in debug builds, and is erased in release builds.
source§

fn tap_deref_mut_dbg<T>(self, func: impl FnOnce(&mut T)) -> Self
where Self: DerefMut<Target = T> + Deref, T: ?Sized,

Calls .tap_deref_mut() only in debug builds, and is erased in release builds.
source§

impl<T> TryConv for T

source§

fn try_conv<T>(self) -> Result<T, Self::Error>
where Self: TryInto<T>,

Attempts to convert self into T using TryInto<T>. Read more
source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
source§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

source§

fn vzip(self) -> V

source§

impl<T> WithSubscriber for T

source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more