internal

package
v0.99.3 Latest Latest
Warning

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

Go to latest
Published: Jun 19, 2023 License: Apache-2.0 Imports: 22 Imported by: 0

Documentation

Index

Constants

View Source
const (
	DeviceListChanged = 1
	DeviceListLeft    = 2
)
View Source
const SentryCtxKey = "sliding-sync"

SentryCtxKey is a namespace under which we can report arbitrary key-value pairs to sentry.

View Source
const StateKeyLazy = "$LAZY"

Variables

This section is empty.

Functions

func Assert

func Assert(msg string, expr bool)

Assert that the expression is true, similar to assert() in C. If expr is false, print or panic.

If expr is false and SYNCV3_DEBUG=1 then the program panics. If expr is false and SYNCV3_DEBUG is unset or not '1' then the program logs an error along with a field which contains the file/line number of the caller/assertion of Assert. Assert should be used to verify invariants which should never be broken during normal functioning of the program, and shouldn't be used to log a normal error e.g network errors. Developers can make use of this function by setting SYNCV3_DEBUG=1 when running the server, which will fail-fast whenever a programming or logic error occurs. If expr is false and SYNCV3_SENTRY_DSN is configured, an error event is sent to Sentry, including the msg verbatim.

The msg provided should be the expectation of the assert e.g:

Assert("list is not empty", len(list) > 0)

Which then produces:

assertion failed: list is not empty

func AssertWithContext added in v0.99.2

func AssertWithContext(ctx context.Context, msg string, expr bool)

AssertWithContext is a version of Assert that associates any sentry events with a request context.

func CalculateRoomName

func CalculateRoomName(heroInfo *RoomMetadata, maxNumNamesPerRoom int) string

func ConfigureJaeger added in v0.99.1

func ConfigureJaeger(jaegerURL, version string) error

func DecorateLogger

func DecorateLogger(ctx context.Context, l *zerolog.Event) *zerolog.Event

func DeviceListChangesArrays

func DeviceListChangesArrays(m map[string]int) (changed, left []string)

func ExtractAccessToken added in v0.99.3

func ExtractAccessToken(req *http.Request) (accessToken string, err error)

func GetSentryHubFromContextOrDefault added in v0.99.2

func GetSentryHubFromContextOrDefault(ctx context.Context) *sentry.Hub

GetSentryHubFromContextOrDefault is a version of sentry.GetHubFromContext which automatically falls back to sentry.CurrentHub if the given context has not been attached a hub.

The various golang sentry integrations automatically attach a hub to contexts that are generated when serving HTTP requests. If that accounts for all your contexts, you have no need for this function; you can use sentry.GetHubFromContext without fear.

The returned pointer is always nonnil.

func IsMembershipChange

func IsMembershipChange(eventJSON gjson.Result) bool

func Logf added in v0.99.1

func Logf(ctx context.Context, category, format string, args ...interface{})

func ReportPanicsToSentry added in v0.99.3

func ReportPanicsToSentry()

ReportPanicsToSentry checks for panics by calling recover, reports any panic found to sentry, and then reraises the panic. To have tracebacks included in the report, make sure you call panic with something that implements error. (Anything else will be reported as a "message" rather than an "exception" in Sentry; by default, only "exceptions" are reported with tracebacks. See e.g.

   https://github.com/getsentry/sentry-go/blob/eec094e9470dd3855eaf47b025d853bcbc13df68/client.go#L438-L447
for some of the machinery.)

Typically, you want to call this in the form `defer internal.ReportPanicsToSentry()`.

func RequestContext

func RequestContext(ctx context.Context) context.Context

prepare a request context so it can contain syncv3 info

func SetRequestContextResponseInfo

func SetRequestContextResponseInfo(
	ctx context.Context, since, next int64, numRooms int, txnID string, numToDeviceEvents, numGlobalAccountData int,
	numChangedDevices, numLeftDevices int,
)

func SetRequestContextUserID

func SetRequestContextUserID(ctx context.Context, userID string)

add the user ID to this request context. Need to have called RequestContext first.

func ToDeviceListChangesMap

func ToDeviceListChangesMap(changed, left []string) map[string]int

Types

type DeviceData

type DeviceData struct {
	// Contains the latest device_one_time_keys_count values.
	// Set whenever this field arrives down the v2 poller, and it replaces what was previously there.
	OTKCounts map[string]int `json:"otk"`
	// Contains the latest device_unused_fallback_key_types value
	// Set whenever this field arrives down the v2 poller, and it replaces what was previously there.
	FallbackKeyTypes []string `json:"fallback"`

	DeviceLists DeviceLists `json:"dl"`

	// bitset for which device data changes are present. They accumulate until they get swapped over
	// when they get reset
	ChangedBits int `json:"c"`

	UserID   string
	DeviceID string
}

DeviceData contains useful data for this user's device. This list can be expanded without prompting schema changes. These values are upserted into the database and persisted forever.

func (*DeviceData) FallbackKeysChanged added in v0.98.1

func (dd *DeviceData) FallbackKeysChanged() bool

func (*DeviceData) OTKCountChanged added in v0.98.1

func (dd *DeviceData) OTKCountChanged() bool

func (*DeviceData) SetFallbackKeysChanged added in v0.98.1

func (dd *DeviceData) SetFallbackKeysChanged()

func (*DeviceData) SetOTKCountChanged added in v0.98.1

func (dd *DeviceData) SetOTKCountChanged()

type DeviceDataMap

type DeviceDataMap struct {
	Pos int64
	// contains filtered or unexported fields
}

func NewDeviceDataMap

func NewDeviceDataMap(startPos int64, devices []DeviceData) *DeviceDataMap

func (*DeviceDataMap) Get

func (d *DeviceDataMap) Get(userID, deviceID string) *DeviceData

func (*DeviceDataMap) Update

func (d *DeviceDataMap) Update(dd DeviceData) DeviceData

type DeviceLists

type DeviceLists struct {
	// map user_id -> DeviceList enum
	New  map[string]int `json:"n"`
	Sent map[string]int `json:"s"`
}

func (DeviceLists) Combine

func (dl DeviceLists) Combine(newer DeviceLists) DeviceLists

type EventMetadata added in v0.99.3

type EventMetadata struct {
	NID       int64
	Timestamp uint64
}

EventMetadata holds timing information about an event, to be used when sorting room lists by recency.

type HandlerError

type HandlerError struct {
	StatusCode int
	Err        error
	ErrCode    string
}

func ExpiredSessionError

func ExpiredSessionError() *HandlerError

func (*HandlerError) Error

func (e *HandlerError) Error() string

func (HandlerError) JSON

func (e HandlerError) JSON() []byte

func (*HandlerError) Unwrap added in v0.99.3

func (e *HandlerError) Unwrap() error

type Hero

type Hero struct {
	ID   string
	Name string
}

type Receipt

type Receipt struct {
	RoomID    string `db:"room_id"`
	EventID   string `db:"event_id"`
	UserID    string `db:"user_id"`
	TS        int64  `db:"ts"`
	ThreadID  string `db:"thread_id"`
	IsPrivate bool
}

type RequiredStateMap

type RequiredStateMap struct {
	// contains filtered or unexported fields
}

func NewRequiredStateMap

func NewRequiredStateMap(eventTypesWithWildcardStateKeys map[string]struct{},
	stateKeysForWildcardEventType []string,
	eventTypeToStateKeys map[string][]string,
	allState, lazyLoading bool) *RequiredStateMap

func (*RequiredStateMap) Empty added in v0.99.0

func (rsm *RequiredStateMap) Empty() bool

func (*RequiredStateMap) Include

func (rsm *RequiredStateMap) Include(evType, stateKey string) bool

func (*RequiredStateMap) IsLazyLoading

func (rsm *RequiredStateMap) IsLazyLoading() bool

func (*RequiredStateMap) QueryStateMap

func (rsm *RequiredStateMap) QueryStateMap() map[string][]string

work out what to ask the storage layer: if we have wildcard event types we need to pull all room state and cannot only pull out certain event types. If we have wildcard state keys we need to use an empty list for state keys.

type RoomMetadata

type RoomMetadata struct {
	RoomID         string
	Heroes         []Hero
	NameEvent      string // the content of m.room.name, NOT the calculated name
	CanonicalAlias string
	JoinCount      int
	InviteCount    int
	// LastMessageTimestamp is the origin_server_ts of the event most recently seen in
	// this room. Because events arrive at the upstream homeserver out-of-order (and
	// because origin_server_ts is an untrusted event field), this timestamp can
	// _decrease_ as new events come in.
	LastMessageTimestamp uint64
	// LatestEventsByType tracks timing information for the latest event in the room,
	// grouped by event type.
	LatestEventsByType map[string]EventMetadata
	Encrypted          bool
	PredecessorRoomID  *string
	UpgradedRoomID     *string
	RoomType           *string
	// if this room is a space, which rooms are m.space.child state events. This is the same for all users hence is global.
	ChildSpaceRooms map[string]struct{}
	// The latest m.typing ephemeral event for this room.
	TypingEvent json.RawMessage
}

RoomMetadata holds room-scoped data. It is primarily used in two places:

  • in the caches.GlobalCache, to hold the latest version of data that is consistent between all users in the room; and
  • in the sync3.RoomConnMetadata struct, to hold the version of data last seen by a given user sync connection.

Roughly speaking, the sync3.RoomConnMetadata is constantly catching up with changes in the caches.GlobalCache.

func NewRoomMetadata added in v0.99.3

func NewRoomMetadata(roomID string) *RoomMetadata

func (*RoomMetadata) IsSpace

func (m *RoomMetadata) IsSpace() bool

func (*RoomMetadata) RemoveHero

func (m *RoomMetadata) RemoveHero(userID string)

func (*RoomMetadata) SameInviteCount

func (m *RoomMetadata) SameInviteCount(other *RoomMetadata) bool

func (*RoomMetadata) SameJoinCount

func (m *RoomMetadata) SameJoinCount(other *RoomMetadata) bool

func (*RoomMetadata) SameRoomName

func (m *RoomMetadata) SameRoomName(other *RoomMetadata) bool

SameRoomName checks if the fields relevant for room names have changed between the two metadatas. Returns true if there are no changes.

type RuntimeTraceOTLPSpan added in v0.99.1

type RuntimeTraceOTLPSpan struct {
	// contains filtered or unexported fields
}

combined runtime/trace and OTLP span

func StartSpan added in v0.99.1

func StartSpan(ctx context.Context, name string) (newCtx context.Context, span *RuntimeTraceOTLPSpan)

func (*RuntimeTraceOTLPSpan) End added in v0.99.1

func (s *RuntimeTraceOTLPSpan) End()

type Task added in v0.99.1

type Task struct {
	// contains filtered or unexported fields
}

func StartTask added in v0.99.1

func StartTask(ctx context.Context, name string) (context.Context, *Task)

func (*Task) End added in v0.99.1

func (s *Task) End()

type TraceKey added in v0.99.1

type TraceKey string
var (
	OTLPSpan TraceKey = "otlp"
)

type UserDeviceKey

type UserDeviceKey struct {
	UserID   string
	DeviceID string
}

Jump to

Keyboard shortcuts

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