caching

package
v0.0.0-...-811715e Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Nov 29, 2022 License: Apache-2.0 Imports: 13 Imported by: 0

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

This section is empty.

Types

type Cache

type Cache[K keyable, T any] interface {
	Get(key K) (value T, ok bool)
	Set(key K, value T)
	Unset(key K)
}

Cache is the interface that an implementation must satisfy.

type Caches

type Caches struct {
	RoomVersions        Cache[string, gomatrixserverlib.RoomVersion]           // room ID -> room version
	ServerKeys          Cache[string, gomatrixserverlib.PublicKeyLookupResult] // server name -> server keys
	RoomServerRoomNIDs  Cache[string, types.RoomNID]                           // room ID -> room NID
	RoomServerRoomIDs   Cache[types.RoomNID, string]                           // room NID -> room ID
	RoomServerEvents    Cache[int64, *gomatrixserverlib.Event]                 // event NID -> event
	RoomServerStateKeys Cache[types.EventStateKeyNID, string]                  // event NID -> event state key
	FederationPDUs      Cache[int64, *gomatrixserverlib.HeaderedEvent]         // queue NID -> PDU
	FederationEDUs      Cache[int64, *gomatrixserverlib.EDU]                   // queue NID -> EDU
	SpaceSummaryRooms   Cache[string, gomatrixserverlib.MSC2946SpacesResponse] // room ID -> space response
	LazyLoading         Cache[lazyLoadingCacheKey, string]                     // composite key -> event ID
}

Caches contains a set of references to caches. They may be different implementations as long as they satisfy the Cache interface.

func NewRistrettoCache

func NewRistrettoCache(maxCost config.DataUnit, maxAge time.Duration, enablePrometheus bool) *Caches

func (Caches) EvictFederationQueuedEDU

func (c Caches) EvictFederationQueuedEDU(eventNID int64)

func (Caches) EvictFederationQueuedPDU

func (c Caches) EvictFederationQueuedPDU(eventNID int64)

func (Caches) GetEventStateKey

func (c Caches) GetEventStateKey(eventStateKeyNID types.EventStateKeyNID) (string, bool)

func (Caches) GetFederationQueuedEDU

func (c Caches) GetFederationQueuedEDU(eventNID int64) (*gomatrixserverlib.EDU, bool)

func (Caches) GetFederationQueuedPDU

func (c Caches) GetFederationQueuedPDU(eventNID int64) (*gomatrixserverlib.HeaderedEvent, bool)

func (Caches) GetRoomServerEvent

func (c Caches) GetRoomServerEvent(eventNID types.EventNID) (*gomatrixserverlib.Event, bool)

func (Caches) GetRoomServerRoomID

func (c Caches) GetRoomServerRoomID(roomNID types.RoomNID) (string, bool)

func (Caches) GetRoomVersion

func (c Caches) GetRoomVersion(roomID string) (gomatrixserverlib.RoomVersion, bool)

func (Caches) GetSpaceSummary

func (c Caches) GetSpaceSummary(roomID string) (r gomatrixserverlib.MSC2946SpacesResponse, ok bool)

func (Caches) InvalidateLazyLoadedUser

func (c Caches) InvalidateLazyLoadedUser(device *userapi.Device, roomID, userID string)

func (Caches) IsLazyLoadedUserCached

func (c Caches) IsLazyLoadedUserCached(device *userapi.Device, roomID, userID string) (string, bool)

func (Caches) StoreEventStateKey

func (c Caches) StoreEventStateKey(eventStateKeyNID types.EventStateKeyNID, eventStateKey string)

func (Caches) StoreFederationQueuedEDU

func (c Caches) StoreFederationQueuedEDU(eventNID int64, event *gomatrixserverlib.EDU)

func (Caches) StoreFederationQueuedPDU

func (c Caches) StoreFederationQueuedPDU(eventNID int64, event *gomatrixserverlib.HeaderedEvent)

func (Caches) StoreLazyLoadedUser

func (c Caches) StoreLazyLoadedUser(device *userapi.Device, roomID, userID, eventID string)

func (Caches) StoreRoomServerEvent

func (c Caches) StoreRoomServerEvent(eventNID types.EventNID, event *gomatrixserverlib.Event)

func (Caches) StoreRoomServerRoomID

func (c Caches) StoreRoomServerRoomID(roomNID types.RoomNID, roomID string)

func (Caches) StoreRoomVersion

func (c Caches) StoreRoomVersion(roomID string, roomVersion gomatrixserverlib.RoomVersion)

func (Caches) StoreServerKey

func (Caches) StoreSpaceSummary

func (c Caches) StoreSpaceSummary(roomID string, r gomatrixserverlib.MSC2946SpacesResponse)

type EDUCache

type EDUCache struct {
	sync.RWMutex
	// contains filtered or unexported fields
}

EDUCache maintains a list of users typing in each room.

func NewTypingCache

func NewTypingCache() *EDUCache

NewTypingCache returns a new EDUCache initialised for use.

func (*EDUCache) AddTypingUser

func (t *EDUCache) AddTypingUser(
	userID, roomID string, expire *time.Time,
) int64

AddTypingUser sets an user as typing in a room. expire is the time when the user typing should time out. if expire is nil, defaultTypingTimeout is assumed. Returns the latest sync position for typing after update.

func (*EDUCache) GetLatestSyncPosition

func (t *EDUCache) GetLatestSyncPosition() int64

func (*EDUCache) GetTypingUsers

func (t *EDUCache) GetTypingUsers(roomID string) []string

GetTypingUsers returns the list of users typing in a room.

func (*EDUCache) GetTypingUsersIfUpdatedAfter

func (t *EDUCache) GetTypingUsersIfUpdatedAfter(
	roomID string, position int64,
) (users []string, updated bool)

GetTypingUsersIfUpdatedAfter returns all users typing in this room with updated == true if the typing sync position of the room is after the given position. Otherwise, returns an empty slice with updated == false.

func (*EDUCache) RemoveUser

func (t *EDUCache) RemoveUser(userID, roomID string) int64

RemoveUser with mutex lock & stop the timer. Returns the latest sync position for typing after update.

func (*EDUCache) SetTimeoutCallback

func (t *EDUCache) SetTimeoutCallback(fn TimeoutCallbackFn)

SetTimeoutCallback sets a callback function that is called right after a user is removed from the typing user list due to timeout.

type EventStateKeyCache

type EventStateKeyCache interface {
	GetEventStateKey(eventStateKeyNID types.EventStateKeyNID) (string, bool)
	StoreEventStateKey(eventStateKeyNID types.EventStateKeyNID, eventStateKey string)
}

EventStateKeyCache contains the subset of functions needed for a room event state key cache.

type FederationCache

type FederationCache interface {
	GetFederationQueuedPDU(eventNID int64) (event *gomatrixserverlib.HeaderedEvent, ok bool)
	StoreFederationQueuedPDU(eventNID int64, event *gomatrixserverlib.HeaderedEvent)
	EvictFederationQueuedPDU(eventNID int64)

	GetFederationQueuedEDU(eventNID int64) (event *gomatrixserverlib.EDU, ok bool)
	StoreFederationQueuedEDU(eventNID int64, event *gomatrixserverlib.EDU)
	EvictFederationQueuedEDU(eventNID int64)
}

FederationCache contains the subset of functions needed for a federation event cache.

type LazyLoadCache

type LazyLoadCache interface {
	StoreLazyLoadedUser(device *userapi.Device, roomID, userID, eventID string)
	IsLazyLoadedUserCached(device *userapi.Device, roomID, userID string) (string, bool)
	InvalidateLazyLoadedUser(device *userapi.Device, roomID, userID string)
}

type RistrettoCachePartition

type RistrettoCachePartition[K keyable, V any] struct {
	Prefix  byte
	Mutable bool
	MaxAge  time.Duration
	// contains filtered or unexported fields
}

func (*RistrettoCachePartition[K, V]) Get

func (c *RistrettoCachePartition[K, V]) Get(key K) (value V, ok bool)

func (*RistrettoCachePartition[K, V]) Set

func (c *RistrettoCachePartition[K, V]) Set(key K, value V)

func (*RistrettoCachePartition[K, V]) Unset

func (c *RistrettoCachePartition[K, V]) Unset(key K)

type RistrettoCostedCachePartition

type RistrettoCostedCachePartition[k keyable, v costable] struct {
	*RistrettoCachePartition[k, v]
}

func (*RistrettoCostedCachePartition[K, V]) Set

func (c *RistrettoCostedCachePartition[K, V]) Set(key K, value V)

type RoomServerEventsCache

type RoomServerEventsCache interface {
	GetRoomServerEvent(eventNID types.EventNID) (*gomatrixserverlib.Event, bool)
	StoreRoomServerEvent(eventNID types.EventNID, event *gomatrixserverlib.Event)
}

RoomServerEventsCache contains the subset of functions needed for a roomserver event cache.

type RoomServerNIDsCache

type RoomServerNIDsCache interface {
	GetRoomServerRoomID(roomNID types.RoomNID) (string, bool)
	StoreRoomServerRoomID(roomNID types.RoomNID, roomID string)
}

RoomServerNIDsCache contains the subset of functions needed for a roomserver NID cache.

type RoomVersionCache

type RoomVersionCache interface {
	GetRoomVersion(roomID string) (roomVersion gomatrixserverlib.RoomVersion, ok bool)
	StoreRoomVersion(roomID string, roomVersion gomatrixserverlib.RoomVersion)
}

RoomVersionsCache contains the subset of functions needed for a room version cache.

type ServerKeyCache

type ServerKeyCache interface {
	// request -> timestamp is emulating gomatrixserverlib.FetchKeys:
	// https://github.com/matrix-org/gomatrixserverlib/blob/f69539c86ea55d1e2cc76fd8e944e2d82d30397c/keyring.go#L95
	// The timestamp should be the timestamp of the event that is being
	// verified. We will not return keys from the cache that are not valid
	// at this timestamp.
	GetServerKey(request gomatrixserverlib.PublicKeyLookupRequest, timestamp gomatrixserverlib.Timestamp) (response gomatrixserverlib.PublicKeyLookupResult, ok bool)

	// request -> result is emulating gomatrixserverlib.StoreKeys:
	// https://github.com/matrix-org/gomatrixserverlib/blob/f69539c86ea55d1e2cc76fd8e944e2d82d30397c/keyring.go#L112
	StoreServerKey(request gomatrixserverlib.PublicKeyLookupRequest, response gomatrixserverlib.PublicKeyLookupResult)
}

ServerKeyCache contains the subset of functions needed for a server key cache.

type SpaceSummaryRoomsCache

type SpaceSummaryRoomsCache interface {
	GetSpaceSummary(roomID string) (r gomatrixserverlib.MSC2946SpacesResponse, ok bool)
	StoreSpaceSummary(roomID string, r gomatrixserverlib.MSC2946SpacesResponse)
}

type TimeoutCallbackFn

type TimeoutCallbackFn func(userID, roomID string, latestSyncPosition int64)

TimeoutCallbackFn is a function called right after the removal of a user from the typing user list due to timeout. latestSyncPosition is the typing sync position after the removal.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL