Documentation
¶
Overview ¶
SPDX-License-Identifier: AGPL-3.0-or-later
Index ¶
- Constants
- type BindRequest
- type BindResult
- type Binding
- type Store
- func (s *Store) CreateOrRefresh(ctx context.Context, userID, groupID int64, ...) (string, error)
- func (s *Store) CreateOrRefreshBatch(ctx context.Context, reqs []BindRequest) ([]BindResult, error)
- func (s *Store) Lookup(ctx context.Context, userID, groupID int64, ...) (*Binding, bool, error)
- func (s *Store) RedisKey(userID, groupID int64, routeClassID domain.RouteClassIDVal, ...) (string, error)
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 ¶
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 (*Store) CreateOrRefresh ¶
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 切片)。
Click to show internal directories.
Click to hide internal directories.