CacheDb

Struct CacheDb 

Source
pub struct CacheDb<D: Db> { /* private fields */ }

Implementations§

Source§

impl<D: Db> CacheDb<D>

Source

pub fn new(db: D, watermark: usize) -> CacheDb<D>

Note that watermark will still keep in the cache all objects still in use by the program. So, setting watermark to a value too low (eg. less than the size of objects actually in use by the program) would make cache operation slow. For this reason, if the cache used size reaches the watermark, then the watermark will be automatically increased.

Trait Implementations§

Source§

impl<D: ClientSideDb> ClientSideDb for CacheDb<D>

Source§

async fn storage_info(&self) -> Result<ClientStorageInfo>

Source§

async fn save_login(&self, info: LoginInfo) -> Result<()>

Source§

async fn get_saved_login(&self) -> Result<Option<LoginInfo>>

Source§

async fn remove_everything(&self) -> Result<()>

Source§

async fn get_json( &self, object_id: ObjectId, importance: Importance, ) -> Result<Value>

Source§

async fn recreate<T: Object>( &self, object_id: ObjectId, new_created_at: EventId, object: Arc<T>, updatedness: Option<Updatedness>, additional_importance: Importance, ) -> Result<Option<Arc<T>>>

Either create an object if it did not exist yet, or recreate it Read more
Source§

async fn client_query( &self, type_id: TypeId, query: Arc<Query>, ) -> Result<Vec<ObjectId>>

Source§

async fn remove(&self, object_id: ObjectId) -> Result<()>

Source§

async fn remove_event<T: Object>( &self, object_id: ObjectId, event_id: EventId, ) -> Result<()>

Source§

async fn set_object_importance( &self, object_id: ObjectId, new_importance: Importance, ) -> Result<()>

Source§

async fn set_importance_from_queries( &self, object_id: ObjectId, new_importance_from_queries: Importance, ) -> Result<()>

Source§

async fn client_vacuum( &self, notify_removals: impl 'static + CrdbSyncFn<ObjectId>, notify_query_removals: impl 'static + CrdbSyncFn<QueryId>, ) -> Result<()>

Source§

async fn list_uploads(&self) -> Result<Vec<UploadId>>

Source§

async fn get_upload(&self, upload_id: UploadId) -> Result<Option<Upload>>

Source§

async fn enqueue_upload( &self, upload: Upload, required_binaries: Vec<BinPtr>, ) -> Result<UploadId>

Source§

async fn upload_finished(&self, upload_id: UploadId) -> Result<()>

Source§

async fn get_saved_objects(&self) -> Result<HashMap<ObjectId, SavedObjectMeta>>

Source§

async fn get_saved_queries(&self) -> Result<HashMap<QueryId, SavedQuery>>

Source§

async fn record_query( &self, query_id: QueryId, query: Arc<Query>, type_id: TypeId, importance: Importance, ) -> Result<()>

Source§

async fn set_query_importance( &self, query_id: QueryId, importance: Importance, objects_matching_query: Vec<ObjectId>, ) -> Result<()>

Source§

async fn forget_query( &self, query_id: QueryId, objects_matching_query: Vec<ObjectId>, ) -> Result<()>

Source§

async fn update_queries( &self, queries: &HashSet<QueryId>, now_have_all_until: Updatedness, ) -> Result<()>

Source§

impl<D: Db> Db for CacheDb<D>

Source§

async fn reencode_old_versions<T: Object>(&self) -> usize

Returns the number of errors that happened while re-encoding

Source§

async fn create<T: Object>( &self, object_id: ObjectId, created_at: EventId, object: Arc<T>, updatedness: Option<Updatedness>, importance: Importance, ) -> Result<Option<Arc<T>>>

Returns the new latest snapshot if it actually changed Read more
Source§

async fn submit<T: Object>( &self, object_id: ObjectId, event_id: EventId, event: Arc<T::Event>, updatedness: Option<Updatedness>, additional_importance: Importance, ) -> Result<Option<Arc<T>>>

Returns the new latest snapshot if it actually changed Read more
Source§

async fn get_latest<T: Object>( &self, object_id: ObjectId, importance: Importance, ) -> Result<Arc<T>>

Source§

async fn create_binary(&self, binary_id: BinPtr, data: Arc<[u8]>) -> Result<()>

Source§

async fn get_binary(&self, binary_id: BinPtr) -> Result<Option<Arc<[u8]>>>

Source§

async fn assert_invariants_generic(&self)

Source§

async fn assert_invariants_for<T: Object>(&self)

Source§

impl<D: ServerSideDb> ServerSideDb for CacheDb<D>

Source§

type Connection = <D as ServerSideDb>::Connection

Source§

type Transaction<'a> = <D as ServerSideDb>::Transaction<'a>

Source§

type Lock<'a> = <D as ServerSideDb>::Lock<'a>

Source§

fn get_users_who_can_read<'a, 'ret: 'a, T: Object, C: CanDoCallbacks>( &'ret self, object_id: ObjectId, object: &'a T, cb: &'a C, ) -> Pin<Box<dyn Future<Output = Result<UsersWhoCanRead<Self::Lock<'ret>>>> + 'a>>

Source§

async fn get_transaction(&self) -> Result<Self::Transaction<'_>>

Source§

async fn get_latest_snapshot( &self, transaction: &mut Self::Connection, user: User, object_id: ObjectId, ) -> Result<Arc<Value>>

Source§

async fn get_all( &self, connection: &mut Self::Connection, user: User, object_id: ObjectId, only_updated_since: Option<Updatedness>, ) -> Result<ObjectData>

Source§

async fn server_query( &self, user: User, type_id: TypeId, only_updated_since: Option<Updatedness>, query: Arc<Query>, ) -> Result<Vec<ObjectId>>

Source§

async fn server_vacuum( &self, no_new_changes_before: Option<EventId>, updatedness: Updatedness, kill_sessions_older_than: Option<SystemTime>, notify_recreation: impl FnMut(Update, HashSet<User>), ) -> Result<()>

Cleans up and optimizes up the database Read more
Source§

async fn recreate_at<'a, T: Object, C: CanDoCallbacks>( &'a self, object_id: ObjectId, event_id: EventId, updatedness: Updatedness, cb: &'a C, ) -> Result<Option<(EventId, Arc<T>)>>

This function assumes that the lock on object_id is already taken Read more
Source§

async fn create_and_return_rdep_changes<T: Object>( &self, object_id: ObjectId, created_at: EventId, object: Arc<T>, updatedness: Updatedness, ) -> Result<Option<(Arc<T>, Vec<ReadPermsChanges>)>>

Source§

async fn submit_and_return_rdep_changes<T: Object>( &self, object_id: ObjectId, event_id: EventId, event: Arc<T::Event>, updatedness: Updatedness, ) -> Result<Option<(Arc<T>, Vec<ReadPermsChanges>)>>

Source§

async fn update_pending_rdeps(&self) -> Result<()>

Source§

async fn login_session( &self, session: Session, ) -> Result<(SessionToken, SessionRef)>

Source§

async fn resume_session(&self, token: SessionToken) -> Result<Session>

Source§

async fn mark_session_active( &self, token: SessionToken, at: SystemTime, ) -> Result<()>

Source§

async fn rename_session<'a>( &'a self, token: SessionToken, new_name: &'a str, ) -> Result<()>

Source§

async fn list_sessions(&self, user: User) -> Result<Vec<Session>>

Source§

async fn disconnect_session( &self, user: User, session: SessionRef, ) -> Result<()>

Auto Trait Implementations§

§

impl<D> Freeze for CacheDb<D>
where D: Freeze,

§

impl<D> RefUnwindSafe for CacheDb<D>
where D: RefUnwindSafe,

§

impl<D> Send for CacheDb<D>

§

impl<D> Sync for CacheDb<D>

§

impl<D> Unpin for CacheDb<D>
where D: Unpin,

§

impl<D> UnwindSafe for CacheDb<D>
where D: UnwindSafe,

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> 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<D> CanDoCallbacks for D
where D: Db,

Source§

async fn get<T>(&self, object_id: DbPtr<T>) -> Result<Arc<T>, Error>
where T: Object,

Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

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> Same for T

Source§

type Output = T

Should always be Self
Source§

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

Source§

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>,

Source§

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
Source§

impl<T> ErasedDestructor for T
where T: 'static,

Source§

impl<T> ErasedDestructor for T
where T: 'static,

Source§

impl<T> MaybeSendSync for T

Source§

impl<T> Send for T
where T: Send,

Source§

impl<T> Sync for T
where T: Sync,