continuation

package
v0.0.1-beta.8 Latest Latest
Warning

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

Go to latest
Published: Oct 12, 2026 License: AGPL-3.0 Imports: 14 Imported by: 0

Documentation

Overview

SPDX-License-Identifier: AGPL-3.0-or-later

Index

Constants

View Source
const (
	HKDFLabel   = "c3api/routing/continuation/v1"
	RedisPrefix = "c3api:cont:"
	TTL         = 24 * time.Hour
)

Variables

This section is empty.

Functions

This section is empty.

Types

type BindRequest

type BindRequest struct {
	UserID           int64
	GroupID          int64
	RouteClassID     domain.RouteClassIDVal
	ProtocolTag      string
	ContinuationID   string
	AccountID        int64
	Fingerprint      domain.CandidateFingerprintVal
	IdentityRevision int64
}

BindRequest 是批量绑定的单条输入(异步 worker 的首帧快照):与同步 CreateOrRefresh 的参数一一对应,但整条以值快照携带——worker 不得持有 dispatch/请求 ctx/relay 切片。

type BindResult

type BindResult struct {
	Status string
	Err    error
}

BindResult 是批量绑定的单条结果:Status ∈ {"created","refreshed","conflict"}; 该条在排队前的校验/编码错误(此时 Status 为空,Err 非 nil)逐条隔离,不阻断 其余条目。

type Binding

type Binding struct {
	AccountID   int64
	Fingerprint domain.CandidateFingerprintVal
	// IdentityRevision 是**身份代际 K**(identity_revision),不是客户端 CAS
	// 令牌 C(lifecycle_revision)。绑定按 (I=指纹, K) 围栏在途续跑;
	// C 只围栏管理员写入,与绑定身份无关。
	IdentityRevision int64
	RedisAcked       bool
}

type Store

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

func New

func New(client *redis.Client, authSecret string) (*Store, error)

func (*Store) CreateOrRefresh

func (s *Store) CreateOrRefresh(ctx context.Context, userID, groupID int64, routeClassID domain.RouteClassIDVal, protocolTag, continuationID string, accountID int64, fingerprint domain.CandidateFingerprintVal, identityRevision int64) (string, error)

func (*Store) CreateOrRefreshBatch

func (s *Store) CreateOrRefreshBatch(ctx context.Context, reqs []BindRequest) ([]BindResult, error)

CreateOrRefreshBatch 与 CreateOrRefresh 同源校验/同源 key/payload,但把每个 EVAL 排进同一 pipeline,**一次 Exec** 完成(一次 Redis 往返)。逐条结果区分 created/refreshed/conflict 与逐条错误——逐条错误仅覆盖**排队前**的校验/key 生成失败(不写 Redis)。pipeline Exec 级错误 → 外层 error(整批失败):go-redis 的 Pipeline.Exec 返回**任一命令**的首个错误(不限于连接/协议),故任一命令级 失败也使整批返回 error(返回 nil 切片)。

func (*Store) Lookup

func (s *Store) Lookup(ctx context.Context, userID, groupID int64, routeClassID domain.RouteClassIDVal, protocolTag, continuationID string) (*Binding, bool, error)

func (*Store) RedisKey

func (s *Store) RedisKey(userID, groupID int64, routeClassID domain.RouteClassIDVal, protocolTag, continuationID string) (string, error)

Jump to

Keyboard shortcuts

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