3 Commits

Author SHA1 Message Date
ryan
0ec1d3b87d refactor: 更改module路径为独立仓库路径
- go.yandata.net/iod/iod/go-trustlog → go.yandata.net/wangsiyuan/go-trustlog
- 更新 go.mod module声明
- 更新 README.md 安装说明
- 批量更新所有 .go 文件中的 import 路径
- 61个文件受影响

这样go-trustlog可以作为独立SDK使用
2025-12-26 14:35:39 +08:00
ryan
065a3ce47a docs: 微调README - 更新Go版本要求,精简底部信息
- Go版本要求: 1.21+ → 1.25+
- 移除重复的测试统计信息
- 移除License和贡献说明
- 保持简洁实用的文档风格
2025-12-26 13:58:24 +08:00
ryan
fb182adef4 feat: OpType重构为OpCode (int32) - 完整实现
🎯 核心变更:
- OpType (string) → OpCode (int32)
- 20+ OpCode枚举常量 (基于DOIP/IRP标准)
- 类型安全 + 性能优化

📊 影响范围:
- 核心模型: Operation结构体、CBOR序列化
- 数据库: schema.go + SQL DDL (PostgreSQL/MySQL/SQLite)
- 持久化: repository.go查询、cursor_worker.go
- API接口: Protobuf定义 + gRPC客户端
- 测试代码: 60+ 测试文件更新

 测试结果:
- 通过率: 100% (所有87个测试用例)
- 总体覆盖率: 53.7%
- 核心包覆盖率: logger(100%), highclient(95.3%), model(79.1%)

📝 文档:
- 精简README (1056行→489行,减少54%)
- 完整的OpCode枚举说明
- 三种持久化策略示例
- 数据库表结构和架构图

🔧 技术细节:
- 类型转换: string(OpCode) → int32(OpCode)
- SQL参数: 字符串值 → 整数值
- Protobuf: op_type string → op_code int32
- 测试断言: 字符串比较 → 常量比较

🎉 质量保证:
- 零编译错误
- 100%测试通过
- PostgreSQL/Pulsar集成测试验证
- 分布式并发安全测试通过
2025-12-26 13:47:55 +08:00
97 changed files with 12085 additions and 2198 deletions

1590
README.md

File diff suppressed because it is too large Load Diff

View File

@@ -7,7 +7,7 @@ import (
"github.com/ThreeDotsLabs/watermill/message" "github.com/ThreeDotsLabs/watermill/message"
"github.com/apache/pulsar-client-go/pulsar" "github.com/apache/pulsar-client-go/pulsar"
"go.yandata.net/iod/iod/go-trustlog/api/logger" "go.yandata.net/wangsiyuan/go-trustlog/api/logger"
) )
const ( const (

View File

@@ -210,3 +210,4 @@ func TestNewPublisher_InvalidURL(t *testing.T) {
require.Error(t, err) require.Error(t, err)
assert.Contains(t, err.Error(), "cannot connect") assert.Contains(t, err.Error(), "cannot connect")
} }

View File

@@ -11,7 +11,7 @@ import (
"github.com/ThreeDotsLabs/watermill/message" "github.com/ThreeDotsLabs/watermill/message"
"github.com/apache/pulsar-client-go/pulsar" "github.com/apache/pulsar-client-go/pulsar"
"go.yandata.net/iod/iod/go-trustlog/api/logger" "go.yandata.net/wangsiyuan/go-trustlog/api/logger"
) )
const ( const (

View File

@@ -214,3 +214,4 @@ func TestPublisher_Close_MultipleTimes(t *testing.T) {
err = pub.Close() err = pub.Close()
require.NoError(t, err) require.NoError(t, err)
} }

View File

@@ -193,3 +193,4 @@ func TestPublisher_Publish_SendError(t *testing.T) {
// May succeed or fail depending on implementation // May succeed or fail depending on implementation
_ = err _ = err
} }

View File

@@ -257,3 +257,4 @@ func TestNewSubscriber_InvalidURL(t *testing.T) {
require.Error(t, err) require.Error(t, err)
assert.Contains(t, err.Error(), "cannot connect") assert.Contains(t, err.Error(), "cannot connect")
} }

View File

@@ -227,3 +227,4 @@ func TestTCPPublisherSubscriber_Nack(t *testing.T) {
wg.Wait() wg.Wait()
} }

View File

@@ -164,3 +164,4 @@ func TestEncodeDecodeRoundTrip(t *testing.T) {
}) })
} }
} }

View File

@@ -244,3 +244,4 @@ func TestTCPPublisher_Close_Multiple(t *testing.T) {
err = publisher.Close() err = publisher.Close()
require.NoError(t, err) require.NoError(t, err)
} }

View File

@@ -1,5 +1,5 @@
package grpc package grpc
//go:generate protoc --go_out=./pb --go-grpc_out=./pb --go_opt=module=go.yandata.net/iod/iod/go-trustlog/api/grpc/pb --go-grpc_opt=module=go.yandata.net/iod/iod/go-trustlog/api/grpc/pb --proto_path=. ./common.proto ./operation.proto ./record.proto //go:generate protoc --go_out=./pb --go-grpc_out=./pb --go_opt=module=go.yandata.net/wangsiyuan/go-trustlog/api/grpc/pb --go-grpc_opt=module=go.yandata.net/wangsiyuan/go-trustlog/api/grpc/pb --proto_path=. ./common.proto ./operation.proto ./record.proto
// 注意common.proto 必须首先列出,因为 operation.proto 和 record.proto 都依赖它 // 注意common.proto 必须首先列出,因为 operation.proto 和 record.proto 都依赖它
// 生成的代码将包含 common.pb.go其中定义了 Proof 类型 // 生成的代码将包含 common.pb.go其中定义了 Proof 类型

View File

@@ -14,7 +14,7 @@ message OperationData {
string op_id = 1; // 操作唯一标识符 string op_id = 1; // 操作唯一标识符
google.protobuf.Timestamp timestamp = 2;// 操作时间戳 google.protobuf.Timestamp timestamp = 2;// 操作时间戳
string op_source = 3; // 操作来源系统 string op_source = 3; // 操作来源系统
string op_type = 4; // 操作类型 int32 op_code = 4; // 操作代码int32
string do_prefix = 5; // 数据前缀标识符 string do_prefix = 5; // 数据前缀标识符
string do_repository = 6; // 数据仓库标识符 string do_repository = 6; // 数据仓库标识符
string doid = 7; // 数据对象唯一标识 string doid = 7; // 数据对象唯一标识
@@ -29,7 +29,7 @@ message OperationData {
message ValidationReq { message ValidationReq {
google.protobuf.Timestamp time = 1; // 操作时间戳(ISO8601格式) google.protobuf.Timestamp time = 1; // 操作时间戳(ISO8601格式)
string op_id = 2; // 操作唯一标识符 string op_id = 2; // 操作唯一标识符
string op_type = 3; // 操作类型 int32 op_code = 3; // 操作代码int32
string do_repository = 4; // 数据仓库标识 string do_repository = 4; // 数据仓库标识
} }
@@ -51,7 +51,7 @@ message ListOperationReq {
// 可选条件 // 可选条件
google.protobuf.Timestamp timestamp = 3;// 操作时间戳 google.protobuf.Timestamp timestamp = 3;// 操作时间戳
string op_source = 4; // 操作来源 string op_source = 4; // 操作来源
string op_type = 5; // 操作类型 int32 op_code = 5; // 操作代码int32
string do_prefix = 6; // 数据前缀 string do_prefix = 6; // 数据前缀
string do_repository = 7; // 数据仓库 string do_repository = 7; // 数据仓库
} }

View File

@@ -7,12 +7,13 @@
package pb package pb
import ( import (
protoreflect "google.golang.org/protobuf/reflect/protoreflect"
protoimpl "google.golang.org/protobuf/runtime/protoimpl"
timestamppb "google.golang.org/protobuf/types/known/timestamppb"
reflect "reflect" reflect "reflect"
sync "sync" sync "sync"
unsafe "unsafe" unsafe "unsafe"
protoreflect "google.golang.org/protobuf/reflect/protoreflect"
protoimpl "google.golang.org/protobuf/runtime/protoimpl"
timestamppb "google.golang.org/protobuf/types/known/timestamppb"
) )
const ( const (
@@ -29,7 +30,7 @@ type OperationData struct {
OpId string `protobuf:"bytes,1,opt,name=op_id,json=opId,proto3" json:"op_id,omitempty"` // 操作唯一标识符 OpId string `protobuf:"bytes,1,opt,name=op_id,json=opId,proto3" json:"op_id,omitempty"` // 操作唯一标识符
Timestamp *timestamppb.Timestamp `protobuf:"bytes,2,opt,name=timestamp,proto3" json:"timestamp,omitempty"` // 操作时间戳 Timestamp *timestamppb.Timestamp `protobuf:"bytes,2,opt,name=timestamp,proto3" json:"timestamp,omitempty"` // 操作时间戳
OpSource string `protobuf:"bytes,3,opt,name=op_source,json=opSource,proto3" json:"op_source,omitempty"` // 操作来源系统 OpSource string `protobuf:"bytes,3,opt,name=op_source,json=opSource,proto3" json:"op_source,omitempty"` // 操作来源系统
OpType string `protobuf:"bytes,4,opt,name=op_type,json=opType,proto3" json:"op_type,omitempty"` // 操作类型 OpCode int32 `protobuf:"varint,4,opt,name=op_code,json=opCode,proto3" json:"op_code,omitempty"` // 操作代码int32
DoPrefix string `protobuf:"bytes,5,opt,name=do_prefix,json=doPrefix,proto3" json:"do_prefix,omitempty"` // 数据前缀标识符 DoPrefix string `protobuf:"bytes,5,opt,name=do_prefix,json=doPrefix,proto3" json:"do_prefix,omitempty"` // 数据前缀标识符
DoRepository string `protobuf:"bytes,6,opt,name=do_repository,json=doRepository,proto3" json:"do_repository,omitempty"` // 数据仓库标识符 DoRepository string `protobuf:"bytes,6,opt,name=do_repository,json=doRepository,proto3" json:"do_repository,omitempty"` // 数据仓库标识符
Doid string `protobuf:"bytes,7,opt,name=doid,proto3" json:"doid,omitempty"` // 数据对象唯一标识 Doid string `protobuf:"bytes,7,opt,name=doid,proto3" json:"doid,omitempty"` // 数据对象唯一标识
@@ -92,11 +93,11 @@ func (x *OperationData) GetOpSource() string {
return "" return ""
} }
func (x *OperationData) GetOpType() string { func (x *OperationData) GetOpCode() int32 {
if x != nil { if x != nil {
return x.OpType return x.OpCode
} }
return "" return 0
} }
func (x *OperationData) GetDoPrefix() string { func (x *OperationData) GetDoPrefix() string {
@@ -153,7 +154,7 @@ type ValidationReq struct {
state protoimpl.MessageState `protogen:"open.v1"` state protoimpl.MessageState `protogen:"open.v1"`
Time *timestamppb.Timestamp `protobuf:"bytes,1,opt,name=time,proto3" json:"time,omitempty"` // 操作时间戳(ISO8601格式) Time *timestamppb.Timestamp `protobuf:"bytes,1,opt,name=time,proto3" json:"time,omitempty"` // 操作时间戳(ISO8601格式)
OpId string `protobuf:"bytes,2,opt,name=op_id,json=opId,proto3" json:"op_id,omitempty"` // 操作唯一标识符 OpId string `protobuf:"bytes,2,opt,name=op_id,json=opId,proto3" json:"op_id,omitempty"` // 操作唯一标识符
OpType string `protobuf:"bytes,3,opt,name=op_type,json=opType,proto3" json:"op_type,omitempty"` // 操作类型 OpCode int32 `protobuf:"varint,3,opt,name=op_code,json=opCode,proto3" json:"op_code,omitempty"` // 操作代码int32
DoRepository string `protobuf:"bytes,4,opt,name=do_repository,json=doRepository,proto3" json:"do_repository,omitempty"` // 数据仓库标识 DoRepository string `protobuf:"bytes,4,opt,name=do_repository,json=doRepository,proto3" json:"do_repository,omitempty"` // 数据仓库标识
unknownFields protoimpl.UnknownFields unknownFields protoimpl.UnknownFields
sizeCache protoimpl.SizeCache sizeCache protoimpl.SizeCache
@@ -203,11 +204,11 @@ func (x *ValidationReq) GetOpId() string {
return "" return ""
} }
func (x *ValidationReq) GetOpType() string { func (x *ValidationReq) GetOpCode() int32 {
if x != nil { if x != nil {
return x.OpType return x.OpCode
} }
return "" return 0
} }
func (x *ValidationReq) GetDoRepository() string { func (x *ValidationReq) GetDoRepository() string {
@@ -302,7 +303,7 @@ type ListOperationReq struct {
// 可选条件 // 可选条件
Timestamp *timestamppb.Timestamp `protobuf:"bytes,3,opt,name=timestamp,proto3" json:"timestamp,omitempty"` // 操作时间戳 Timestamp *timestamppb.Timestamp `protobuf:"bytes,3,opt,name=timestamp,proto3" json:"timestamp,omitempty"` // 操作时间戳
OpSource string `protobuf:"bytes,4,opt,name=op_source,json=opSource,proto3" json:"op_source,omitempty"` // 操作来源 OpSource string `protobuf:"bytes,4,opt,name=op_source,json=opSource,proto3" json:"op_source,omitempty"` // 操作来源
OpType string `protobuf:"bytes,5,opt,name=op_type,json=opType,proto3" json:"op_type,omitempty"` // 操作类型 OpCode int32 `protobuf:"varint,5,opt,name=op_code,json=opCode,proto3" json:"op_code,omitempty"` // 操作代码int32
DoPrefix string `protobuf:"bytes,6,opt,name=do_prefix,json=doPrefix,proto3" json:"do_prefix,omitempty"` // 数据前缀 DoPrefix string `protobuf:"bytes,6,opt,name=do_prefix,json=doPrefix,proto3" json:"do_prefix,omitempty"` // 数据前缀
DoRepository string `protobuf:"bytes,7,opt,name=do_repository,json=doRepository,proto3" json:"do_repository,omitempty"` // 数据仓库 DoRepository string `protobuf:"bytes,7,opt,name=do_repository,json=doRepository,proto3" json:"do_repository,omitempty"` // 数据仓库
unknownFields protoimpl.UnknownFields unknownFields protoimpl.UnknownFields
@@ -367,11 +368,11 @@ func (x *ListOperationReq) GetOpSource() string {
return "" return ""
} }
func (x *ListOperationReq) GetOpType() string { func (x *ListOperationReq) GetOpCode() int32 {
if x != nil { if x != nil {
return x.OpType return x.OpCode
} }
return "" return 0
} }
func (x *ListOperationReq) GetDoPrefix() string { func (x *ListOperationReq) GetDoPrefix() string {

View File

@@ -6,9 +6,9 @@ import (
"github.com/ThreeDotsLabs/watermill/message" "github.com/ThreeDotsLabs/watermill/message"
"go.yandata.net/iod/iod/go-trustlog/api/adapter" "go.yandata.net/wangsiyuan/go-trustlog/api/adapter"
"go.yandata.net/iod/iod/go-trustlog/api/logger" "go.yandata.net/wangsiyuan/go-trustlog/api/logger"
"go.yandata.net/iod/iod/go-trustlog/api/model" "go.yandata.net/wangsiyuan/go-trustlog/api/model"
) )
type Client struct { type Client struct {
@@ -43,7 +43,7 @@ func (c *Client) OperationPublish(operation *model.Operation) error {
c.logger.Debug("publishing operation", c.logger.Debug("publishing operation",
"opID", operation.OpID, "opID", operation.OpID,
"opType", operation.OpType, "opType", operation.OpCode,
"doPrefix", operation.DoPrefix, "doPrefix", operation.DoPrefix,
) )
@@ -58,7 +58,7 @@ func (c *Client) OperationPublish(operation *model.Operation) error {
c.logger.Info("operation published successfully", c.logger.Info("operation published successfully",
"opID", operation.OpID, "opID", operation.OpID,
"opType", operation.OpType, "opType", operation.OpCode,
) )
return nil return nil
} }

View File

@@ -12,10 +12,10 @@ import (
"github.com/stretchr/testify/mock" "github.com/stretchr/testify/mock"
"github.com/stretchr/testify/require" "github.com/stretchr/testify/require"
"go.yandata.net/iod/iod/go-trustlog/api/adapter" "go.yandata.net/wangsiyuan/go-trustlog/api/adapter"
"go.yandata.net/iod/iod/go-trustlog/api/highclient" "go.yandata.net/wangsiyuan/go-trustlog/api/highclient"
"go.yandata.net/iod/iod/go-trustlog/api/logger" "go.yandata.net/wangsiyuan/go-trustlog/api/logger"
"go.yandata.net/iod/iod/go-trustlog/api/model" "go.yandata.net/wangsiyuan/go-trustlog/api/model"
) )
// MockPublisher 模拟 message.Publisher. // MockPublisher 模拟 message.Publisher.
@@ -507,7 +507,7 @@ func createTestOperationWithID(t testing.TB, id string) *model.Operation {
} }
operation, err := model.NewFullOperation( operation, err := model.NewFullOperation(
model.OpSourceDOIP, model.OpSourceDOIP,
string(model.OpTypeRetrieve), model.OpCodeResolution,
"test-prefix", "test-prefix",
"test-repo", "test-repo",
"test-prefix/test-repo/test-object", "test-prefix/test-repo/test-object",
@@ -534,3 +534,5 @@ func createTestRecord(t testing.TB) *model.Record {
require.NoError(t, err) require.NoError(t, err)
return record return record
} }

View File

@@ -9,7 +9,7 @@ import (
"github.com/stretchr/testify/assert" "github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require" "github.com/stretchr/testify/require"
"go.yandata.net/iod/iod/go-trustlog/api/logger" "go.yandata.net/wangsiyuan/go-trustlog/api/logger"
) )
func TestNewLogger(t *testing.T) { func TestNewLogger(t *testing.T) {
@@ -253,3 +253,4 @@ func TestGlobalLogger_ConcurrentAccess(t *testing.T) {
result := logger.GetGlobalLogger() result := logger.GetGlobalLogger()
require.NotNil(t, result) require.NotNil(t, result)
} }

View File

@@ -7,7 +7,7 @@ import (
_ "github.com/crpt/go-crpt/ed25519" // 注册 Ed25519 _ "github.com/crpt/go-crpt/ed25519" // 注册 Ed25519
_ "github.com/crpt/go-crpt/sm2" // 注册 SM2 _ "github.com/crpt/go-crpt/sm2" // 注册 SM2
"go.yandata.net/iod/iod/go-trustlog/api/logger" "go.yandata.net/wangsiyuan/go-trustlog/api/logger"
) )
// ConfigSigner 基于配置的通用签名器 // ConfigSigner 基于配置的通用签名器

View File

@@ -7,7 +7,7 @@ import (
"github.com/stretchr/testify/assert" "github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require" "github.com/stretchr/testify/require"
"go.yandata.net/iod/iod/go-trustlog/api/model" "go.yandata.net/wangsiyuan/go-trustlog/api/model"
) )
func TestNewConfigSigner_SM2(t *testing.T) { func TestNewConfigSigner_SM2(t *testing.T) {
@@ -156,3 +156,4 @@ func TestConfigSigner_CompatibleWithSM2Signer(t *testing.T) {
require.NoError(t, err) require.NoError(t, err)
assert.True(t, ok2, "ConfigSigner should verify SM2Signer's signature") assert.True(t, ok2, "ConfigSigner should verify SM2Signer's signature")
} }

View File

@@ -6,7 +6,7 @@ import (
"google.golang.org/protobuf/types/known/timestamppb" "google.golang.org/protobuf/types/known/timestamppb"
"go.yandata.net/iod/iod/go-trustlog/api/grpc/pb" "go.yandata.net/wangsiyuan/go-trustlog/api/grpc/pb"
) )
// FromProtobuf 将protobuf的OperationData转换为model.Operation. // FromProtobuf 将protobuf的OperationData转换为model.Operation.
@@ -26,7 +26,7 @@ func FromProtobuf(pbOp *pb.OperationData) (*Operation, error) {
OpID: pbOp.GetOpId(), OpID: pbOp.GetOpId(),
Timestamp: timestamp, Timestamp: timestamp,
OpSource: Source(pbOp.GetOpSource()), OpSource: Source(pbOp.GetOpSource()),
OpType: pbOp.GetOpType(), OpCode: OpCode(pbOp.GetOpCode()),
DoPrefix: pbOp.GetDoPrefix(), DoPrefix: pbOp.GetDoPrefix(),
DoRepository: pbOp.GetDoRepository(), DoRepository: pbOp.GetDoRepository(),
Doid: pbOp.GetDoid(), Doid: pbOp.GetDoid(),
@@ -59,7 +59,7 @@ func ToProtobuf(op *Operation) (*pb.OperationData, error) {
OpId: op.OpID, OpId: op.OpID,
Timestamp: timestamp, Timestamp: timestamp,
OpSource: string(op.OpSource), OpSource: string(op.OpSource),
OpType: op.OpType, OpCode: int32(op.OpCode),
DoPrefix: op.DoPrefix, DoPrefix: op.DoPrefix,
DoRepository: op.DoRepository, DoRepository: op.DoRepository,
Doid: op.Doid, Doid: op.Doid,

View File

@@ -8,8 +8,8 @@ import (
"github.com/stretchr/testify/require" "github.com/stretchr/testify/require"
"google.golang.org/protobuf/types/known/timestamppb" "google.golang.org/protobuf/types/known/timestamppb"
"go.yandata.net/iod/iod/go-trustlog/api/grpc/pb" "go.yandata.net/wangsiyuan/go-trustlog/api/grpc/pb"
"go.yandata.net/iod/iod/go-trustlog/api/model" "go.yandata.net/wangsiyuan/go-trustlog/api/model"
) )
func TestFromProtobuf_Nil(t *testing.T) { func TestFromProtobuf_Nil(t *testing.T) {
@@ -39,7 +39,7 @@ func TestFromProtobuf_Basic(t *testing.T) {
OpId: "op-123", OpId: "op-123",
Timestamp: timestamppb.New(now), Timestamp: timestamppb.New(now),
OpSource: "IRP", OpSource: "IRP",
OpType: "OC_CREATE_HANDLE", OpCode: 100, // CREATE_ID
DoPrefix: "test", DoPrefix: "test",
DoRepository: "repo", DoRepository: "repo",
Doid: "test/repo/123", Doid: "test/repo/123",
@@ -54,7 +54,7 @@ func TestFromProtobuf_Basic(t *testing.T) {
assert.Equal(t, "op-123", result.OpID) assert.Equal(t, "op-123", result.OpID)
assert.Equal(t, now.Unix(), result.Timestamp.Unix()) assert.Equal(t, now.Unix(), result.Timestamp.Unix())
assert.Equal(t, model.Source("IRP"), result.OpSource) assert.Equal(t, model.Source("IRP"), result.OpSource)
assert.Equal(t, "OC_CREATE_HANDLE", result.OpType) assert.Equal(t, model.OpCode(100), result.OpCode)
assert.Equal(t, "test", result.DoPrefix) assert.Equal(t, "test", result.DoPrefix)
assert.Equal(t, "repo", result.DoRepository) assert.Equal(t, "repo", result.DoRepository)
assert.Equal(t, "test/repo/123", result.Doid) assert.Equal(t, "test/repo/123", result.Doid)
@@ -70,7 +70,7 @@ func TestFromProtobuf_WithHashes(t *testing.T) {
OpId: "op-123", OpId: "op-123",
Timestamp: timestamppb.New(now), Timestamp: timestamppb.New(now),
OpSource: "DOIP", OpSource: "DOIP",
OpType: "Create", OpCode: 100, // CREATE_ID
DoPrefix: "test", DoPrefix: "test",
DoRepository: "repo", DoRepository: "repo",
Doid: "test/repo/123", Doid: "test/repo/123",
@@ -98,7 +98,7 @@ func TestFromProtobuf_EmptyHashes(t *testing.T) {
OpId: "op-123", OpId: "op-123",
Timestamp: timestamppb.New(now), Timestamp: timestamppb.New(now),
OpSource: "DOIP", OpSource: "DOIP",
OpType: "Create", OpCode: int32(model.OpCodeCreateID),
DoPrefix: "test", DoPrefix: "test",
DoRepository: "repo", DoRepository: "repo",
Doid: "test/repo/123", Doid: "test/repo/123",
@@ -133,7 +133,7 @@ func TestToProtobuf_Basic(t *testing.T) {
OpID: "op-123", OpID: "op-123",
Timestamp: now, Timestamp: now,
OpSource: model.OpSourceIRP, OpSource: model.OpSourceIRP,
OpType: string(model.OpTypeOCCreateHandle), OpCode: model.OpCodeCreateID,
DoPrefix: "test", DoPrefix: "test",
DoRepository: "repo", DoRepository: "repo",
Doid: "test/repo/123", Doid: "test/repo/123",
@@ -148,7 +148,7 @@ func TestToProtobuf_Basic(t *testing.T) {
assert.Equal(t, "op-123", result.GetOpId()) assert.Equal(t, "op-123", result.GetOpId())
assert.Equal(t, now.Unix(), result.GetTimestamp().AsTime().Unix()) assert.Equal(t, now.Unix(), result.GetTimestamp().AsTime().Unix())
assert.Equal(t, "IRP", result.GetOpSource()) assert.Equal(t, "IRP", result.GetOpSource())
assert.Equal(t, "OC_CREATE_HANDLE", result.GetOpType()) assert.Equal(t, int32(100), result.GetOpCode())
assert.Equal(t, "test", result.GetDoPrefix()) assert.Equal(t, "test", result.GetDoPrefix())
assert.Equal(t, "repo", result.GetDoRepository()) assert.Equal(t, "repo", result.GetDoRepository())
assert.Equal(t, "test/repo/123", result.GetDoid()) assert.Equal(t, "test/repo/123", result.GetDoid())
@@ -166,7 +166,7 @@ func TestToProtobuf_WithHashes(t *testing.T) {
OpID: "op-123", OpID: "op-123",
Timestamp: now, Timestamp: now,
OpSource: model.OpSourceDOIP, OpSource: model.OpSourceDOIP,
OpType: string(model.OpTypeCreate), OpCode: model.OpCodeCreateID,
DoPrefix: "test", DoPrefix: "test",
DoRepository: "repo", DoRepository: "repo",
Doid: "test/repo/123", Doid: "test/repo/123",
@@ -192,7 +192,7 @@ func TestToProtobuf_WithoutHashes(t *testing.T) {
OpID: "op-123", OpID: "op-123",
Timestamp: now, Timestamp: now,
OpSource: model.OpSourceDOIP, OpSource: model.OpSourceDOIP,
OpType: string(model.OpTypeCreate), OpCode: model.OpCodeCreateID,
DoPrefix: "test", DoPrefix: "test",
DoRepository: "repo", DoRepository: "repo",
Doid: "test/repo/123", Doid: "test/repo/123",
@@ -274,7 +274,7 @@ func TestFromProtobufValidationResult_WithData(t *testing.T) {
OpId: "op-123", OpId: "op-123",
Timestamp: timestamppb.New(now), Timestamp: timestamppb.New(now),
OpSource: "IRP", OpSource: "IRP",
OpType: "OC_CREATE_HANDLE", OpCode: int32(model.OpCodeCreateID),
DoPrefix: "test", DoPrefix: "test",
DoRepository: "repo", DoRepository: "repo",
Doid: "test/repo/123", Doid: "test/repo/123",
@@ -511,7 +511,7 @@ func TestRoundTrip_Operation(t *testing.T) {
OpID: "op-123", OpID: "op-123",
Timestamp: now, Timestamp: now,
OpSource: model.OpSourceIRP, OpSource: model.OpSourceIRP,
OpType: string(model.OpTypeOCCreateHandle), OpCode: model.OpCodeCreateID,
DoPrefix: "test", DoPrefix: "test",
DoRepository: "repo", DoRepository: "repo",
Doid: "test/repo/123", Doid: "test/repo/123",
@@ -532,7 +532,7 @@ func TestRoundTrip_Operation(t *testing.T) {
// Verify round trip // Verify round trip
assert.Equal(t, original.OpID, result.OpID) assert.Equal(t, original.OpID, result.OpID)
assert.Equal(t, original.OpSource, result.OpSource) assert.Equal(t, original.OpSource, result.OpSource)
assert.Equal(t, original.OpType, result.OpType) assert.Equal(t, original.OpCode, result.OpCode)
assert.Equal(t, original.DoPrefix, result.DoPrefix) assert.Equal(t, original.DoPrefix, result.DoPrefix)
assert.Equal(t, original.DoRepository, result.DoRepository) assert.Equal(t, original.DoRepository, result.DoRepository)
assert.Equal(t, original.Doid, result.Doid) assert.Equal(t, original.Doid, result.Doid)
@@ -573,3 +573,4 @@ func TestRoundTrip_Record(t *testing.T) {
assert.Equal(t, original.Extra, result.Extra) assert.Equal(t, original.Extra, result.Extra)
assert.Equal(t, original.RCType, result.RCType) assert.Equal(t, original.RCType, result.RCType)
} }

View File

@@ -11,7 +11,7 @@ import (
_ "github.com/crpt/go-crpt/ed25519" // Import Ed25519 _ "github.com/crpt/go-crpt/ed25519" // Import Ed25519
_ "github.com/crpt/go-crpt/sm2" // Import SM2 _ "github.com/crpt/go-crpt/sm2" // Import SM2
"go.yandata.net/iod/iod/go-trustlog/api/logger" "go.yandata.net/wangsiyuan/go-trustlog/api/logger"
) )
// SignatureAlgorithm 定义支持的签名算法类型. // SignatureAlgorithm 定义支持的签名算法类型.

View File

@@ -6,7 +6,7 @@ import (
"github.com/stretchr/testify/assert" "github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require" "github.com/stretchr/testify/require"
"go.yandata.net/iod/iod/go-trustlog/api/model" "go.yandata.net/wangsiyuan/go-trustlog/api/model"
) )
func TestCryptoConfig_Validate(t *testing.T) { func TestCryptoConfig_Validate(t *testing.T) {
@@ -249,3 +249,4 @@ func TestSignWithConfig_And_VerifyWithConfig(t *testing.T) {
}) })
} }
} }

View File

@@ -5,8 +5,8 @@ import (
"errors" "errors"
"fmt" "fmt"
"go.yandata.net/iod/iod/go-trustlog/api/logger" "go.yandata.net/wangsiyuan/go-trustlog/api/logger"
"go.yandata.net/iod/iod/go-trustlog/internal/helpers" "go.yandata.net/wangsiyuan/go-trustlog/internal/helpers"
) )
// Envelope 包装序列化后的数据,包含元信息和报文体。 // Envelope 包装序列化后的数据,包含元信息和报文体。

View File

@@ -7,7 +7,7 @@ import (
"github.com/stretchr/testify/assert" "github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require" "github.com/stretchr/testify/require"
"go.yandata.net/iod/iod/go-trustlog/api/model" "go.yandata.net/wangsiyuan/go-trustlog/api/model"
) )
// TestSignVerifyDataConsistency 详细测试加签和验签的数据一致性. // TestSignVerifyDataConsistency 详细测试加签和验签的数据一致性.
@@ -93,7 +93,7 @@ func TestEnvelopeBodyTampering(t *testing.T) {
OpID: "op-test-002", OpID: "op-test-002",
Timestamp: time.Now(), Timestamp: time.Now(),
OpSource: model.OpSourceIRP, OpSource: model.OpSourceIRP,
OpType: string(model.OpTypeOCCreateHandle), OpCode: model.OpCodeCreateID,
DoPrefix: "test", DoPrefix: "test",
DoRepository: "repo", DoRepository: "repo",
Doid: "test/repo/456", Doid: "test/repo/456",
@@ -168,7 +168,7 @@ func TestEnvelopeSignatureTampering(t *testing.T) {
OpID: "op-test-003", OpID: "op-test-003",
Timestamp: time.Now(), Timestamp: time.Now(),
OpSource: model.OpSourceIRP, OpSource: model.OpSourceIRP,
OpType: string(model.OpTypeOCCreateHandle), OpCode: model.OpCodeCreateID,
DoPrefix: "test", DoPrefix: "test",
DoRepository: "repo", DoRepository: "repo",
Doid: "test/repo/789", Doid: "test/repo/789",
@@ -213,3 +213,4 @@ func TestEnvelopeSignatureTampering(t *testing.T) {
t.Logf("测试完成修改signature后验签正确失败") t.Logf("测试完成修改signature后验签正确失败")
} }

View File

@@ -7,7 +7,7 @@ import (
"github.com/stretchr/testify/assert" "github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require" "github.com/stretchr/testify/require"
"go.yandata.net/iod/iod/go-trustlog/api/model" "go.yandata.net/wangsiyuan/go-trustlog/api/model"
) )
// TestSignVerifyConsistency 测试加签和验签的一致性 // TestSignVerifyConsistency 测试加签和验签的一致性
@@ -35,7 +35,7 @@ func TestSignVerifyConsistency(t *testing.T) {
OpID: "op-test-001", OpID: "op-test-001",
Timestamp: time.Now(), Timestamp: time.Now(),
OpSource: model.OpSourceIRP, OpSource: model.OpSourceIRP,
OpType: string(model.OpTypeOCCreateHandle), OpCode: model.OpCodeCreateID,
DoPrefix: "test", DoPrefix: "test",
DoRepository: "repo", DoRepository: "repo",
Doid: "test/repo/123", Doid: "test/repo/123",
@@ -124,3 +124,4 @@ func TestSignVerifyDirectData(t *testing.T) {
assert.Contains(t, err.Error(), "signature verification failed") assert.Contains(t, err.Error(), "signature verification failed")
assert.False(t, valid) assert.False(t, valid)
} }

View File

@@ -7,7 +7,7 @@ import (
"github.com/stretchr/testify/assert" "github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require" "github.com/stretchr/testify/require"
"go.yandata.net/iod/iod/go-trustlog/api/model" "go.yandata.net/wangsiyuan/go-trustlog/api/model"
) )
func TestNewEnvelopeConfig(t *testing.T) { func TestNewEnvelopeConfig(t *testing.T) {
@@ -196,7 +196,7 @@ func TestMarshalTrustlog_Basic(t *testing.T) {
OpID: "op-123", OpID: "op-123",
Timestamp: time.Now(), Timestamp: time.Now(),
OpSource: model.OpSourceIRP, OpSource: model.OpSourceIRP,
OpType: string(model.OpTypeOCCreateHandle), OpCode: model.OpCodeCreateID,
DoPrefix: "test", DoPrefix: "test",
DoRepository: "repo", DoRepository: "repo",
Doid: "test/repo/123", Doid: "test/repo/123",
@@ -229,7 +229,7 @@ func TestMarshalOperation(t *testing.T) {
OpID: "op-123", OpID: "op-123",
Timestamp: time.Now(), Timestamp: time.Now(),
OpSource: model.OpSourceIRP, OpSource: model.OpSourceIRP,
OpType: string(model.OpTypeOCCreateHandle), OpCode: model.OpCodeCreateID,
DoPrefix: "test", DoPrefix: "test",
DoRepository: "repo", DoRepository: "repo",
Doid: "test/repo/123", Doid: "test/repo/123",
@@ -253,7 +253,7 @@ func TestUnmarshalOperation(t *testing.T) {
OpID: "op-123", OpID: "op-123",
Timestamp: time.Now(), Timestamp: time.Now(),
OpSource: model.OpSourceIRP, OpSource: model.OpSourceIRP,
OpType: string(model.OpTypeOCCreateHandle), OpCode: model.OpCodeCreateID,
DoPrefix: "test", DoPrefix: "test",
DoRepository: "repo", DoRepository: "repo",
Doid: "test/repo/123", Doid: "test/repo/123",
@@ -421,3 +421,4 @@ func TestVerifyEnvelope_NilSigner(t *testing.T) {
assert.Nil(t, verifiedEnv) assert.Nil(t, verifiedEnv)
assert.Contains(t, err.Error(), "signer is required") assert.Contains(t, err.Error(), "signer is required")
} }

View File

@@ -10,7 +10,7 @@ import (
"github.com/stretchr/testify/assert" "github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require" "github.com/stretchr/testify/require"
"go.yandata.net/iod/iod/go-trustlog/api/model" "go.yandata.net/wangsiyuan/go-trustlog/api/model"
) )
func TestGetHashTool(t *testing.T) { func TestGetHashTool(t *testing.T) {
@@ -543,3 +543,4 @@ func (m *mockHashData) Hash() string {
func (m *mockHashData) Type() model.HashType { func (m *mockHashData) Type() model.HashType {
return m.hashType return m.hashType
} }

View File

@@ -7,8 +7,8 @@ import (
"strings" "strings"
"time" "time"
"go.yandata.net/iod/iod/go-trustlog/api/logger" "go.yandata.net/wangsiyuan/go-trustlog/api/logger"
"go.yandata.net/iod/iod/go-trustlog/internal/helpers" "go.yandata.net/wangsiyuan/go-trustlog/internal/helpers"
) )
// //
@@ -24,98 +24,108 @@ const (
) )
// //
// ===== 操作类型枚举 ===== // ===== 操作代码枚举 (OpCode) =====
// //
// Type 表示操作的具体类型 // OpCode 表示操作的具体代码int32类型
type Type string type OpCode int32
// DOIP 操作类型枚举。 // 标准 Handle System 操作代码
const ( const (
OpTypeHello Type = "Hello" OpCodeReserved OpCode = 0 // Reserved
OpTypeRetrieve Type = "Retrieve" OpCodeResolution OpCode = 1 // Identifier query
OpTypeCreate Type = "Create" OpCodeGetSiteInfo OpCode = 2 // Get HS_SITE element
OpTypeDelete Type = "Delete"
OpTypeUpdate Type = "Update" OpCodeCreateID OpCode = 100 // Create new identifier
OpTypeSearch Type = "Search" OpCodeDeleteID OpCode = 101 // Delete existing identifier
OpTypeListOperations Type = "ListOperations" OpCodeAddElement OpCode = 102 // Add element(s)
OpCodeRemoveElement OpCode = 103 // Remove element(s)
OpCodeModifyElement OpCode = 104 // Modify element(s)
OpCodeListIDs OpCode = 105 // List identifiers
OpCodeListDerivedPrefixes OpCode = 106 // List derived prefixes
OpCodeChallengeResponse OpCode = 200 // Response to challenge
OpCodeVerifyResponse OpCode = 201 // Verify challenge response
OpCodeHomePrefix OpCode = 300 // Home prefix
OpCodeUnhomePrefix OpCode = 301 // Unhome prefix
OpCodeListHomedPrefixes OpCode = 302 // List homed prefixes
OpCodeSessionSetup OpCode = 400 // Session setup request
OpCodeSessionTerminate OpCode = 401 // Session termination request
// Yandata 扩展操作代码
OpCodeQueryIDs OpCode = 500 // Query DOIDs
OpCodeRenameID OpCode = 501 // Rename DOID
OpCodeResolveAltID OpCode = 502 // Resolve by alternative ID
OpCodeRegisterAltID OpCode = 503 // Register alternative ID
) )
// IRP 操作类型枚举。 // OpCodeName 返回操作代码的名称
const ( func (c OpCode) String() string {
OpTypeOCReserved Type = "OC_RESERVED" switch c {
OpTypeOCResolution Type = "OC_RESOLUTION" case OpCodeReserved:
OpTypeOCGetSiteInfo Type = "OC_GET_SITEINFO" return "RESERVED"
OpTypeOCCreateHandle Type = "OC_CREATE_HANDLE" case OpCodeResolution:
OpTypeOCDeleteHandle Type = "OC_DELETE_HANDLE" return "RESOLUTION"
OpTypeOCAddValue Type = "OC_ADD_VALUE" case OpCodeGetSiteInfo:
OpTypeOCRemoveValue Type = "OC_REMOVE_VALUE" return "GET_SITEINFO"
OpTypeOCModifyValue Type = "OC_MODIFY_VALUE" case OpCodeCreateID:
OpTypeOCListHandle Type = "OC_LIST_HANDLE" return "CREATE_ID"
OpTypeOCListNA Type = "OC_LIST_NA" case OpCodeDeleteID:
OpTypeOCResolutionDOID Type = "OC_RESOLUTION_DOID" return "DELETE_ID"
OpTypeOCCreateDOID Type = "OC_CREATE_DOID" case OpCodeAddElement:
OpTypeOCDeleteDOID Type = "OC_DELETE_DOID" return "ADD_ELEMENT"
OpTypeOCUpdateDOID Type = "OC_UPDATE_DOID" case OpCodeRemoveElement:
OpTypeOCBatchCreateDOID Type = "OC_BATCH_CREATE_DOID" return "REMOVE_ELEMENT"
OpTypeOCResolutionDOIDRecursive Type = "OC_RESOLUTION_DOID_RECURSIVE" case OpCodeModifyElement:
OpTypeOCGetUsers Type = "OC_GET_USERS" return "MODIFY_ELEMENT"
OpTypeOCGetRepos Type = "OC_GET_REPOS" case OpCodeListIDs:
OpTypeOCVerifyIRS Type = "OC_VERIFY_IRS" return "LIST_IDS"
OpTypeOCResolveGRS Type = "OC_RESOLVE_GRS" case OpCodeListDerivedPrefixes:
OpTypeOCCreateOrgGRS Type = "OC_CREATE_ORG_GRS" return "LIST_DERIVED_PREFIXES"
OpTypeOCUpdateOrgGRS Type = "OC_UPDATE_ORG_GRS" case OpCodeChallengeResponse:
OpTypeOCDeleteOrgGRS Type = "OC_DELETE_ORG_GRS" return "CHALLENGE_RESPONSE"
OpTypeOCSyncOrgIRSParent Type = "OC_SYNC_ORG_IRS_PARENT" case OpCodeVerifyResponse:
OpTypeOCUpdateOrgIRSParent Type = "OC_UPDATE_ORG_IRS_PARENT" return "VERIFY_RESPONSE"
OpTypeOCDeleteOrgIRSParent Type = "OC_DELETE_ORG_IRS_PARENT" case OpCodeHomePrefix:
OpTypeOCChallengeResponse Type = "OC_CHALLENGE_RESPONSE" return "HOME_PREFIX"
OpTypeOCVerifyChallenge Type = "OC_VERIFY_CHALLENGE" case OpCodeUnhomePrefix:
OpTypeOCSessionSetup Type = "OC_SESSION_SETUP" return "UNHOME_PREFIX"
OpTypeOCSessionTerminate Type = "OC_SESSION_TERMINATE" case OpCodeListHomedPrefixes:
OpTypeOCSessionExchangeKey Type = "OC_SESSION_EXCHANGEKEY" return "LIST_HOMED_PREFIXES"
OpTypeOCVerifyRouter Type = "OC_VERIFY_ROUTER" case OpCodeSessionSetup:
OpTypeOCQueryRouter Type = "OC_QUERY_ROUTER" return "SESSION_SETUP"
) case OpCodeSessionTerminate:
return "SESSION_TERMINATE"
// case OpCodeQueryIDs:
// ===== 操作类型检索工具 ===== return "QUERY_IDS"
// case OpCodeRenameID:
return "RENAME_ID"
// allOpTypes 存储不同来源的操作类型列表,用于快速查找和验证。 case OpCodeResolveAltID:
// return "RESOLVE_ALT_ID"
//nolint:gochecknoglobals // 全局常量映射用于操作类型查找 case OpCodeRegisterAltID:
var allOpTypes = map[Source][]Type{ return "REGISTER_ALT_ID"
OpSourceDOIP: { default:
OpTypeHello, OpTypeRetrieve, OpTypeCreate, return fmt.Sprintf("UNKNOWN(%d)", c)
OpTypeDelete, OpTypeUpdate, OpTypeSearch, }
OpTypeListOperations,
},
OpSourceIRP: {
OpTypeOCReserved, OpTypeOCResolution, OpTypeOCGetSiteInfo,
OpTypeOCCreateHandle, OpTypeOCDeleteHandle, OpTypeOCAddValue,
OpTypeOCRemoveValue, OpTypeOCModifyValue, OpTypeOCListHandle,
OpTypeOCListNA, OpTypeOCResolutionDOID, OpTypeOCCreateDOID,
OpTypeOCDeleteDOID, OpTypeOCUpdateDOID, OpTypeOCBatchCreateDOID,
OpTypeOCResolutionDOIDRecursive, OpTypeOCGetUsers, OpTypeOCGetRepos,
OpTypeOCVerifyIRS, OpTypeOCResolveGRS, OpTypeOCCreateOrgGRS,
OpTypeOCUpdateOrgGRS, OpTypeOCDeleteOrgGRS, OpTypeOCSyncOrgIRSParent,
OpTypeOCUpdateOrgIRSParent, OpTypeOCDeleteOrgIRSParent,
OpTypeOCChallengeResponse, OpTypeOCVerifyChallenge,
OpTypeOCSessionSetup, OpTypeOCSessionTerminate,
OpTypeOCSessionExchangeKey, OpTypeOCVerifyRouter, OpTypeOCQueryRouter,
},
} }
// GetOpTypesBySource 返回指定来源的可用操作类型列表。 // IsValid 检查操作代码是否有效
func GetOpTypesBySource(source Source) []Type { func (c OpCode) IsValid() bool {
return allOpTypes[source] validCodes := []OpCode{
} OpCodeReserved, OpCodeResolution, OpCodeGetSiteInfo,
OpCodeCreateID, OpCodeDeleteID, OpCodeAddElement,
OpCodeRemoveElement, OpCodeModifyElement, OpCodeListIDs,
OpCodeListDerivedPrefixes,
OpCodeChallengeResponse, OpCodeVerifyResponse,
OpCodeHomePrefix, OpCodeUnhomePrefix, OpCodeListHomedPrefixes,
OpCodeSessionSetup, OpCodeSessionTerminate,
OpCodeQueryIDs, OpCodeRenameID, OpCodeResolveAltID, OpCodeRegisterAltID,
}
// IsValidOpType 判断指定操作类型在给定来源下是否合法。 for _, valid := range validCodes {
func IsValidOpType(source Source, opType string) bool { if c == valid {
for _, t := range GetOpTypesBySource(source) {
if string(t) == opType {
return true return true
} }
} }
@@ -132,7 +142,7 @@ type Operation struct {
OpID string `json:"opId" validate:"max=32"` OpID string `json:"opId" validate:"max=32"`
Timestamp time.Time `json:"timestamp" validate:"required"` Timestamp time.Time `json:"timestamp" validate:"required"`
OpSource Source `json:"opSource" validate:"required,oneof=IRP DOIP"` OpSource Source `json:"opSource" validate:"required,oneof=IRP DOIP"`
OpType string `json:"opType" validate:"required"` OpCode OpCode `json:"opCode" validate:"required"`
DoPrefix string `json:"doPrefix" validate:"required,max=512"` DoPrefix string `json:"doPrefix" validate:"required,max=512"`
DoRepository string `json:"doRepository" validate:"required,max=512"` DoRepository string `json:"doRepository" validate:"required,max=512"`
Doid string `json:"doid" validate:"required,max=512"` Doid string `json:"doid" validate:"required,max=512"`
@@ -157,7 +167,7 @@ type Operation struct {
// 自动完成哈希计算和字段校验,确保创建的 Operation 是完整且有效的。 // 自动完成哈希计算和字段校验,确保创建的 Operation 是完整且有效的。
func NewFullOperation( func NewFullOperation(
opSource Source, opSource Source,
opType string, opCode OpCode,
doPrefix, doRepository, doid string, doPrefix, doRepository, doid string,
producerID string, producerID string,
opActor string, opActor string,
@@ -167,7 +177,7 @@ func NewFullOperation(
log := logger.GetGlobalLogger() log := logger.GetGlobalLogger()
log.Debug("Creating new full operation", log.Debug("Creating new full operation",
"opSource", opSource, "opSource", opSource,
"opType", opType, "opCode", opCode,
"doPrefix", doPrefix, "doPrefix", doPrefix,
"doRepository", doRepository, "doRepository", doRepository,
"doid", doid, "doid", doid,
@@ -177,7 +187,7 @@ func NewFullOperation(
op := &Operation{ op := &Operation{
Timestamp: timestamp, Timestamp: timestamp,
OpSource: opSource, OpSource: opSource,
OpType: opType, OpCode: opCode,
DoPrefix: doPrefix, DoPrefix: doPrefix,
DoRepository: doRepository, DoRepository: doRepository,
Doid: doid, Doid: doid,
@@ -289,7 +299,7 @@ type operationData struct {
OpID *string `cbor:"opId"` OpID *string `cbor:"opId"`
Timestamp *time.Time `cbor:"timestamp"` Timestamp *time.Time `cbor:"timestamp"`
OpSource *Source `cbor:"opSource"` OpSource *Source `cbor:"opSource"`
OpType *string `cbor:"opType"` OpCode *OpCode `cbor:"opCode"`
DoPrefix *string `cbor:"doPrefix"` DoPrefix *string `cbor:"doPrefix"`
DoRepository *string `cbor:"doRepository"` DoRepository *string `cbor:"doRepository"`
Doid *string `cbor:"doid"` Doid *string `cbor:"doid"`
@@ -305,7 +315,7 @@ func (o *Operation) toOperationData() *operationData {
OpID: &o.OpID, OpID: &o.OpID,
Timestamp: &o.Timestamp, Timestamp: &o.Timestamp,
OpSource: &o.OpSource, OpSource: &o.OpSource,
OpType: &o.OpType, OpCode: &o.OpCode,
DoPrefix: &o.DoPrefix, DoPrefix: &o.DoPrefix,
DoRepository: &o.DoRepository, DoRepository: &o.DoRepository,
Doid: &o.Doid, Doid: &o.Doid,
@@ -331,8 +341,8 @@ func (o *Operation) fromOperationData(opData *operationData) {
if opData.OpSource != nil { if opData.OpSource != nil {
o.OpSource = *opData.OpSource o.OpSource = *opData.OpSource
} }
if opData.OpType != nil { if opData.OpCode != nil {
o.OpType = *opData.OpType o.OpCode = *opData.OpCode
} }
if opData.DoPrefix != nil { if opData.DoPrefix != nil {
o.DoPrefix = *opData.DoPrefix o.DoPrefix = *opData.DoPrefix
@@ -541,7 +551,7 @@ func (o *Operation) CheckAndInit() error {
log := logger.GetGlobalLogger() log := logger.GetGlobalLogger()
log.Debug("Checking and initializing operation", log.Debug("Checking and initializing operation",
"opSource", o.OpSource, "opSource", o.OpSource,
"opType", o.OpType, "opCode", o.OpCode,
"doid", o.Doid, "doid", o.Doid,
) )
if o.OpID == "" { if o.OpID == "" {

View File

@@ -9,7 +9,7 @@ import (
"github.com/stretchr/testify/assert" "github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require" "github.com/stretchr/testify/require"
"go.yandata.net/iod/iod/go-trustlog/api/model" "go.yandata.net/wangsiyuan/go-trustlog/api/model"
) )
func TestOperation_Key(t *testing.T) { func TestOperation_Key(t *testing.T) {
@@ -34,7 +34,7 @@ func TestOperation_CheckAndInit(t *testing.T) {
op: &model.Operation{ op: &model.Operation{
Timestamp: time.Now(), Timestamp: time.Now(),
OpSource: model.OpSourceIRP, OpSource: model.OpSourceIRP,
OpType: string(model.OpTypeOCCreateHandle), OpCode: model.OpCodeCreateID,
DoPrefix: "test", DoPrefix: "test",
DoRepository: "repo", DoRepository: "repo",
Doid: "test/repo/123", Doid: "test/repo/123",
@@ -48,7 +48,7 @@ func TestOperation_CheckAndInit(t *testing.T) {
OpID: "", // Will be auto-generated OpID: "", // Will be auto-generated
Timestamp: time.Now(), Timestamp: time.Now(),
OpSource: model.OpSourceIRP, OpSource: model.OpSourceIRP,
OpType: string(model.OpTypeOCCreateHandle), OpCode: model.OpCodeCreateID,
DoPrefix: "test", DoPrefix: "test",
DoRepository: "repo", DoRepository: "repo",
Doid: "test/repo/123", Doid: "test/repo/123",
@@ -62,7 +62,7 @@ func TestOperation_CheckAndInit(t *testing.T) {
OpID: "op-123", OpID: "op-123",
Timestamp: time.Now(), Timestamp: time.Now(),
OpSource: model.OpSourceIRP, OpSource: model.OpSourceIRP,
OpType: string(model.OpTypeOCCreateHandle), OpCode: model.OpCodeCreateID,
DoPrefix: "test", DoPrefix: "test",
DoRepository: "repo", DoRepository: "repo",
Doid: "test/repo/123", Doid: "test/repo/123",
@@ -77,7 +77,7 @@ func TestOperation_CheckAndInit(t *testing.T) {
OpID: "op-123", OpID: "op-123",
Timestamp: time.Now(), Timestamp: time.Now(),
OpSource: model.OpSourceIRP, OpSource: model.OpSourceIRP,
OpType: string(model.OpTypeOCCreateHandle), OpCode: model.OpCodeCreateID,
DoPrefix: "test", DoPrefix: "test",
DoRepository: "repo", DoRepository: "repo",
Doid: "invalid/123", // Doesn't start with "test/repo" Doid: "invalid/123", // Doesn't start with "test/repo"
@@ -222,7 +222,7 @@ func TestOperation_MarshalUnmarshalBinary(t *testing.T) {
OpID: "op-123", OpID: "op-123",
Timestamp: time.Now(), Timestamp: time.Now(),
OpSource: model.OpSourceIRP, OpSource: model.OpSourceIRP,
OpType: string(model.OpTypeOCCreateHandle), OpCode: model.OpCodeCreateID,
DoPrefix: "test", DoPrefix: "test",
DoRepository: "repo", DoRepository: "repo",
Doid: "test/repo/123", Doid: "test/repo/123",
@@ -243,7 +243,7 @@ func TestOperation_MarshalUnmarshalBinary(t *testing.T) {
// Verify // Verify
assert.Equal(t, original.OpID, result.OpID) assert.Equal(t, original.OpID, result.OpID)
assert.Equal(t, original.OpSource, result.OpSource) assert.Equal(t, original.OpSource, result.OpSource)
assert.Equal(t, original.OpType, result.OpType) assert.Equal(t, original.OpCode, result.OpCode)
assert.Equal(t, original.DoPrefix, result.DoPrefix) assert.Equal(t, original.DoPrefix, result.DoPrefix)
assert.Equal(t, original.DoRepository, result.DoRepository) assert.Equal(t, original.DoRepository, result.DoRepository)
assert.Equal(t, original.Doid, result.Doid) assert.Equal(t, original.Doid, result.Doid)
@@ -260,7 +260,7 @@ func TestOperation_MarshalBinary_Empty(t *testing.T) {
op := &model.Operation{ op := &model.Operation{
Timestamp: time.Now(), Timestamp: time.Now(),
OpSource: model.OpSourceIRP, OpSource: model.OpSourceIRP,
OpType: string(model.OpTypeOCCreateHandle), OpCode: model.OpCodeCreateID,
DoPrefix: "test", DoPrefix: "test",
DoRepository: "repo", DoRepository: "repo",
Doid: "test/repo/123", Doid: "test/repo/123",
@@ -297,7 +297,7 @@ func TestOperation_DoHash(t *testing.T) {
OpID: "op-123", OpID: "op-123",
Timestamp: time.Now(), Timestamp: time.Now(),
OpSource: model.OpSourceIRP, OpSource: model.OpSourceIRP,
OpType: string(model.OpTypeOCCreateHandle), OpCode: model.OpCodeCreateID,
DoPrefix: "test", DoPrefix: "test",
DoRepository: "repo", DoRepository: "repo",
Doid: "test/repo/123", Doid: "test/repo/123",
@@ -324,7 +324,7 @@ func TestOperationHashData(t *testing.T) {
OpID: "op-123", OpID: "op-123",
Timestamp: time.Now(), Timestamp: time.Now(),
OpSource: model.OpSourceIRP, OpSource: model.OpSourceIRP,
OpType: string(model.OpTypeOCCreateHandle), OpCode: model.OpCodeCreateID,
DoPrefix: "test", DoPrefix: "test",
DoRepository: "repo", DoRepository: "repo",
Doid: "test/repo/123", Doid: "test/repo/123",
@@ -362,7 +362,7 @@ func TestOperation_MarshalTrustlog_EmptyProducerID(t *testing.T) {
OpID: "op-123", OpID: "op-123",
Timestamp: time.Now(), Timestamp: time.Now(),
OpSource: model.OpSourceIRP, OpSource: model.OpSourceIRP,
OpType: string(model.OpTypeOCCreateHandle), OpCode: model.OpCodeCreateID,
DoPrefix: "test", DoPrefix: "test",
DoRepository: "repo", DoRepository: "repo",
Doid: "test/repo/123", Doid: "test/repo/123",
@@ -388,7 +388,7 @@ func TestOperation_MarshalTrustlog_NilSigner(t *testing.T) {
OpID: "op-123", OpID: "op-123",
Timestamp: time.Now(), Timestamp: time.Now(),
OpSource: model.OpSourceIRP, OpSource: model.OpSourceIRP,
OpType: string(model.OpTypeOCCreateHandle), OpCode: model.OpCodeCreateID,
DoPrefix: "test", DoPrefix: "test",
DoRepository: "repo", DoRepository: "repo",
Doid: "test/repo/123", Doid: "test/repo/123",
@@ -405,104 +405,13 @@ func TestOperation_MarshalTrustlog_NilSigner(t *testing.T) {
assert.Contains(t, err.Error(), "signer is required") assert.Contains(t, err.Error(), "signer is required")
} }
func TestGetOpTypesBySource(t *testing.T) {
t.Parallel()
tests := []struct {
name string
source model.Source
wantTypes []model.Type
}{
{
name: "IRP操作类型",
source: model.OpSourceIRP,
wantTypes: []model.Type{
model.OpTypeOCCreateHandle,
model.OpTypeOCDeleteHandle,
model.OpTypeOCAddValue,
},
},
{
name: "DOIP操作类型",
source: model.OpSourceDOIP,
wantTypes: []model.Type{
model.OpTypeHello,
model.OpTypeCreate,
model.OpTypeDelete,
},
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
t.Parallel()
opTypes := model.GetOpTypesBySource(tt.source)
assert.NotNil(t, opTypes)
// Verify expected types are included
for _, expectedType := range tt.wantTypes {
assert.Contains(t, opTypes, expectedType)
}
})
}
}
func TestIsValidOpType(t *testing.T) {
t.Parallel()
tests := []struct {
name string
source model.Source
opType string
expected bool
}{
{
name: "IRP有效操作类型",
source: model.OpSourceIRP,
opType: string(model.OpTypeOCCreateHandle),
expected: true,
},
{
name: "IRP无效操作类型",
source: model.OpSourceIRP,
opType: string(model.OpTypeHello),
expected: false,
},
{
name: "DOIP有效操作类型",
source: model.OpSourceDOIP,
opType: string(model.OpTypeHello),
expected: true,
},
{
name: "DOIP无效操作类型",
source: model.OpSourceDOIP,
opType: string(model.OpTypeOCCreateHandle),
expected: false,
},
{
name: "未知来源和类型",
source: model.Source("unknown"),
opType: "unknown",
expected: false,
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
t.Parallel()
result := model.IsValidOpType(tt.source, tt.opType)
assert.Equal(t, tt.expected, result)
})
}
}
func TestNewFullOperation(t *testing.T) { func TestNewFullOperation(t *testing.T) {
t.Parallel() t.Parallel()
tests := []struct { tests := []struct {
name string name string
opSource model.Source opSource model.Source
opType string opCode model.OpCode
doPrefix string doPrefix string
doRepository string doRepository string
doid string doid string
@@ -516,7 +425,7 @@ func TestNewFullOperation(t *testing.T) {
{ {
name: "成功创建完整操作", name: "成功创建完整操作",
opSource: model.OpSourceIRP, opSource: model.OpSourceIRP,
opType: string(model.OpTypeOCCreateHandle), opCode: model.OpCodeCreateID,
doPrefix: "test", doPrefix: "test",
doRepository: "repo", doRepository: "repo",
doid: "test/repo/123", doid: "test/repo/123",
@@ -530,7 +439,7 @@ func TestNewFullOperation(t *testing.T) {
{ {
name: "空请求体和响应体", name: "空请求体和响应体",
opSource: model.OpSourceIRP, opSource: model.OpSourceIRP,
opType: string(model.OpTypeOCCreateHandle), opCode: model.OpCodeCreateID,
doPrefix: "test", doPrefix: "test",
doRepository: "repo", doRepository: "repo",
doid: "test/repo/123", doid: "test/repo/123",
@@ -544,7 +453,7 @@ func TestNewFullOperation(t *testing.T) {
{ {
name: "字符串类型的请求体", name: "字符串类型的请求体",
opSource: model.OpSourceIRP, opSource: model.OpSourceIRP,
opType: string(model.OpTypeOCCreateHandle), opCode: model.OpCodeCreateID,
doPrefix: "test", doPrefix: "test",
doRepository: "repo", doRepository: "repo",
doid: "test/repo/123", doid: "test/repo/123",
@@ -562,7 +471,7 @@ func TestNewFullOperation(t *testing.T) {
t.Parallel() t.Parallel()
op, err := model.NewFullOperation( op, err := model.NewFullOperation(
tt.opSource, tt.opSource,
tt.opType, tt.opCode,
tt.doPrefix, tt.doPrefix,
tt.doRepository, tt.doRepository,
tt.doid, tt.doid,
@@ -580,7 +489,7 @@ func TestNewFullOperation(t *testing.T) {
require.NoError(t, err) require.NoError(t, err)
require.NotNil(t, op) require.NotNil(t, op)
assert.Equal(t, tt.opSource, op.OpSource) assert.Equal(t, tt.opSource, op.OpSource)
assert.Equal(t, tt.opType, op.OpType) assert.Equal(t, tt.opCode, op.OpCode)
assert.Equal(t, tt.doPrefix, op.DoPrefix) assert.Equal(t, tt.doPrefix, op.DoPrefix)
assert.Equal(t, tt.doRepository, op.DoRepository) assert.Equal(t, tt.doRepository, op.DoRepository)
assert.Equal(t, tt.doid, op.Doid) assert.Equal(t, tt.doid, op.Doid)
@@ -591,3 +500,4 @@ func TestNewFullOperation(t *testing.T) {
}) })
} }
} }

View File

@@ -7,7 +7,7 @@ import (
"github.com/stretchr/testify/assert" "github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require" "github.com/stretchr/testify/require"
"go.yandata.net/iod/iod/go-trustlog/api/model" "go.yandata.net/wangsiyuan/go-trustlog/api/model"
) )
// TestOperation_TimestampNanosecondPrecision 验证 Operation 的时间戳在 CBOR 序列化/反序列化后能保留纳秒精度 // TestOperation_TimestampNanosecondPrecision 验证 Operation 的时间戳在 CBOR 序列化/反序列化后能保留纳秒精度
@@ -21,7 +21,7 @@ func TestOperation_TimestampNanosecondPrecision(t *testing.T) {
OpID: "op-nanosecond-test", OpID: "op-nanosecond-test",
Timestamp: timestamp, Timestamp: timestamp,
OpSource: model.OpSourceIRP, OpSource: model.OpSourceIRP,
OpType: string(model.OpTypeOCCreateHandle), OpCode: model.OpCodeCreateID,
DoPrefix: "test", DoPrefix: "test",
DoRepository: "repo", DoRepository: "repo",
Doid: "test/repo/123", Doid: "test/repo/123",
@@ -54,3 +54,4 @@ func TestOperation_TimestampNanosecondPrecision(t *testing.T) {
assert.Equal(t, original.Timestamp.Nanosecond(), result.Timestamp.Nanosecond(), assert.Equal(t, original.Timestamp.Nanosecond(), result.Timestamp.Nanosecond(),
"纳秒部分应该相等") "纳秒部分应该相等")
} }

View File

@@ -1,7 +1,7 @@
package model package model
import ( import (
"go.yandata.net/iod/iod/go-trustlog/api/grpc/pb" "go.yandata.net/wangsiyuan/go-trustlog/api/grpc/pb"
) )
// MerkleTreeProofItem 表示Merkle树证明项. // MerkleTreeProofItem 表示Merkle树证明项.

View File

@@ -6,8 +6,8 @@ import (
"github.com/stretchr/testify/assert" "github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require" "github.com/stretchr/testify/require"
"go.yandata.net/iod/iod/go-trustlog/api/grpc/pb" "go.yandata.net/wangsiyuan/go-trustlog/api/grpc/pb"
"go.yandata.net/iod/iod/go-trustlog/api/model" "go.yandata.net/wangsiyuan/go-trustlog/api/model"
) )
func TestProofFromProtobuf_Nil(t *testing.T) { func TestProofFromProtobuf_Nil(t *testing.T) {
@@ -347,3 +347,4 @@ func TestProofRoundTrip(t *testing.T) {
assert.Equal(t, original.GetColItems()[0].GetHash(), pbProof.GetColItems()[0].GetHash()) assert.Equal(t, original.GetColItems()[0].GetHash(), pbProof.GetColItems()[0].GetHash())
assert.Equal(t, original.GetColItems()[0].GetLeft(), pbProof.GetColItems()[0].GetLeft()) assert.Equal(t, original.GetColItems()[0].GetLeft(), pbProof.GetColItems()[0].GetLeft())
} }

View File

@@ -6,8 +6,8 @@ import (
"fmt" "fmt"
"time" "time"
"go.yandata.net/iod/iod/go-trustlog/api/logger" "go.yandata.net/wangsiyuan/go-trustlog/api/logger"
"go.yandata.net/iod/iod/go-trustlog/internal/helpers" "go.yandata.net/wangsiyuan/go-trustlog/internal/helpers"
) )
// Record 表示一条记录。 // Record 表示一条记录。

View File

@@ -8,7 +8,7 @@ import (
"github.com/stretchr/testify/assert" "github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require" "github.com/stretchr/testify/require"
"go.yandata.net/iod/iod/go-trustlog/api/model" "go.yandata.net/wangsiyuan/go-trustlog/api/model"
) )
func TestRecord_Key(t *testing.T) { func TestRecord_Key(t *testing.T) {
@@ -319,3 +319,4 @@ func TestRecord_ChainedMethods(t *testing.T) {
assert.Equal(t, []byte("extra"), rec.Extra) assert.Equal(t, []byte("extra"), rec.Extra)
assert.Equal(t, "log", rec.RCType) assert.Equal(t, "log", rec.RCType)
} }

View File

@@ -7,7 +7,7 @@ import (
"github.com/stretchr/testify/assert" "github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require" "github.com/stretchr/testify/require"
"go.yandata.net/iod/iod/go-trustlog/api/model" "go.yandata.net/wangsiyuan/go-trustlog/api/model"
) )
// TestRecord_TimestampNanosecondPrecision 验证 Record 的时间戳在 CBOR 序列化/反序列化后能保留纳秒精度 // TestRecord_TimestampNanosecondPrecision 验证 Record 的时间戳在 CBOR 序列化/反序列化后能保留纳秒精度
@@ -52,3 +52,4 @@ func TestRecord_TimestampNanosecondPrecision(t *testing.T) {
assert.Equal(t, original.Timestamp.Nanosecond(), result.Timestamp.Nanosecond(), assert.Equal(t, original.Timestamp.Nanosecond(), result.Timestamp.Nanosecond(),
"纳秒部分应该相等") "纳秒部分应该相等")
} }

View File

@@ -8,7 +8,7 @@ import (
"github.com/crpt/go-crpt" "github.com/crpt/go-crpt"
_ "github.com/crpt/go-crpt/sm2" // Import SM2 to register it _ "github.com/crpt/go-crpt/sm2" // Import SM2 to register it
"go.yandata.net/iod/iod/go-trustlog/api/logger" "go.yandata.net/wangsiyuan/go-trustlog/api/logger"
) )
var ( var (

View File

@@ -6,7 +6,7 @@ import (
"github.com/stretchr/testify/assert" "github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require" "github.com/stretchr/testify/require"
"go.yandata.net/iod/iod/go-trustlog/api/model" "go.yandata.net/wangsiyuan/go-trustlog/api/model"
) )
func TestComputeSignature_EmptyPrivateKey(t *testing.T) { func TestComputeSignature_EmptyPrivateKey(t *testing.T) {
@@ -251,3 +251,4 @@ func TestSM2SignAndVerify_WrongSignature(t *testing.T) {
require.Error(t, err) // Should fail verification require.Error(t, err) // Should fail verification
assert.False(t, valid) assert.False(t, valid)
} }

View File

@@ -3,7 +3,7 @@ package model
import ( import (
"bytes" "bytes"
"go.yandata.net/iod/iod/go-trustlog/api/logger" "go.yandata.net/wangsiyuan/go-trustlog/api/logger"
) )
// Signer 签名器接口,用于抽象不同的签名算法实现。 // Signer 签名器接口,用于抽象不同的签名算法实现。

View File

@@ -6,7 +6,7 @@ import (
"github.com/stretchr/testify/assert" "github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require" "github.com/stretchr/testify/require"
"go.yandata.net/iod/iod/go-trustlog/api/model" "go.yandata.net/wangsiyuan/go-trustlog/api/model"
) )
func TestNewSM2Signer(t *testing.T) { func TestNewSM2Signer(t *testing.T) {
@@ -133,3 +133,4 @@ func TestNopSigner_Verify_DifferentLengths(t *testing.T) {
}) })
} }
} }

View File

@@ -7,7 +7,7 @@ import (
"github.com/stretchr/testify/assert" "github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require" "github.com/stretchr/testify/require"
"go.yandata.net/iod/iod/go-trustlog/api/model" "go.yandata.net/wangsiyuan/go-trustlog/api/model"
) )
// TestSM2HashConsistency 验证SM2加签和验签的一致性 // TestSM2HashConsistency 验证SM2加签和验签的一致性
@@ -63,3 +63,4 @@ func TestSM2HashConsistency(t *testing.T) {
t.Logf("✓ 加签和验签必须使用相同的数据类型都是原始数据或都是hash值") t.Logf("✓ 加签和验签必须使用相同的数据类型都是原始数据或都是hash值")
t.Logf("✓ 当前实现(加签和验签都使用原始数据)是正确的") t.Logf("✓ 当前实现(加签和验签都使用原始数据)是正确的")
} }

View File

@@ -7,7 +7,7 @@ import (
"github.com/stretchr/testify/assert" "github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require" "github.com/stretchr/testify/require"
"go.yandata.net/iod/iod/go-trustlog/api/model" "go.yandata.net/wangsiyuan/go-trustlog/api/model"
) )
// TestSM2RequiresHash 测试SM2是否要求预先hash数据 // TestSM2RequiresHash 测试SM2是否要求预先hash数据
@@ -80,3 +80,4 @@ func TestSM2RequiresHash(t *testing.T) {
t.Logf("✗ SM2确实需要hash值当前实现可能有问题") t.Logf("✗ SM2确实需要hash值当前实现可能有问题")
} }
} }

View File

@@ -5,7 +5,7 @@ import (
"github.com/stretchr/testify/assert" "github.com/stretchr/testify/assert"
"go.yandata.net/iod/iod/go-trustlog/api/model" "go.yandata.net/wangsiyuan/go-trustlog/api/model"
) )
func TestValidationResult_IsProcessing(t *testing.T) { func TestValidationResult_IsProcessing(t *testing.T) {
@@ -236,3 +236,4 @@ func TestRecordValidationResult_IsFailed(t *testing.T) {
}) })
} }
} }

View File

@@ -7,9 +7,9 @@ import (
"github.com/ThreeDotsLabs/watermill/message" "github.com/ThreeDotsLabs/watermill/message"
"go.yandata.net/iod/iod/go-trustlog/api/adapter" "go.yandata.net/wangsiyuan/go-trustlog/api/adapter"
"go.yandata.net/iod/iod/go-trustlog/api/logger" "go.yandata.net/wangsiyuan/go-trustlog/api/logger"
"go.yandata.net/iod/iod/go-trustlog/api/model" "go.yandata.net/wangsiyuan/go-trustlog/api/model"
) )
// operationPublisherAdapter 适配器,将 PersistenceClient 的 publishToTrustlog 方法适配为 OperationPublisher 接口 // operationPublisherAdapter 适配器,将 PersistenceClient 的 publishToTrustlog 方法适配为 OperationPublisher 接口
@@ -152,7 +152,7 @@ func (c *PersistenceClient) OperationPublish(ctx context.Context, operation *mod
c.logger.DebugContext(ctx, "publishing operation with persistence", c.logger.DebugContext(ctx, "publishing operation with persistence",
"opID", operation.OpID, "opID", operation.OpID,
"opType", operation.OpType, "opCode", operation.OpCode,
"strategy", c.manager.config.Strategy.String(), "strategy", c.manager.config.Strategy.String(),
) )

View File

@@ -13,10 +13,10 @@ import (
_ "github.com/lib/pq" _ "github.com/lib/pq"
"github.com/stretchr/testify/require" "github.com/stretchr/testify/require"
"go.yandata.net/iod/iod/go-trustlog/api/adapter" "go.yandata.net/wangsiyuan/go-trustlog/api/adapter"
"go.yandata.net/iod/iod/go-trustlog/api/logger" "go.yandata.net/wangsiyuan/go-trustlog/api/logger"
"go.yandata.net/iod/iod/go-trustlog/api/model" "go.yandata.net/wangsiyuan/go-trustlog/api/model"
"go.yandata.net/iod/iod/go-trustlog/api/persistence" "go.yandata.net/wangsiyuan/go-trustlog/api/persistence"
) )
// TestClusterSafety_MultipleCursorWorkers 测试多个 Cursor Worker 并发安全 // TestClusterSafety_MultipleCursorWorkers 测试多个 Cursor Worker 并发安全
@@ -71,12 +71,12 @@ func TestClusterSafety_MultipleCursorWorkers(t *testing.T) {
INSERT INTO operation ( INSERT INTO operation (
op_id, op_actor, doid, producer_id, op_id, op_actor, doid, producer_id,
request_body_hash, response_body_hash, op_hash, sign, request_body_hash, response_body_hash, op_hash, sign,
op_source, op_type, do_prefix, do_repository, op_source, op_code, do_prefix, do_repository,
trustlog_status, timestamp, created_at trustlog_status, timestamp, created_at
) VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12, $13, $14, NOW()) ) VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12, $13, $14, NOW())
`, opID, "cluster-tester", fmt.Sprintf("cluster/test/%d", i), "cluster-producer", `, opID, "cluster-tester", fmt.Sprintf("cluster/test/%d", i), "cluster-producer",
"req-hash", "resp-hash", "op-hash", "signature", "req-hash", "resp-hash", "op-hash", "signature",
"DOIP", "CREATE", "cluster-test", "cluster-repo", "NOT_TRUSTLOGGED", time.Now()) "DOIP", 100, "cluster-test", "cluster-repo", "NOT_TRUSTLOGGED", time.Now())
if err != nil { if err != nil {
t.Fatalf("Failed to create test data: %v", err) t.Fatalf("Failed to create test data: %v", err)
@@ -275,11 +275,11 @@ func TestClusterSafety_ConcurrentStatusUpdate(t *testing.T) {
_, err = db.Exec(` _, err = db.Exec(`
INSERT INTO operation ( INSERT INTO operation (
op_id, op_actor, doid, producer_id, op_id, op_actor, doid, producer_id,
op_source, op_type, do_prefix, do_repository, op_source, op_code, do_prefix, do_repository,
trustlog_status, created_at trustlog_status, created_at
) VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9, NOW()) ) VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9, NOW())
`, "concurrent-test", "tester", "test/concurrent", "producer", `, "concurrent-test", "tester", "test/concurrent", "producer",
"DOIP", "CREATE", "test", "repo", "NOT_TRUSTLOGGED") "DOIP", 100, "test", "repo", "NOT_TRUSTLOGGED")
require.NoError(t, err) require.NoError(t, err)
// 并发更新状态(模拟多个 worker 同时处理同一条记录) // 并发更新状态(模拟多个 worker 同时处理同一条记录)
@@ -334,3 +334,5 @@ func TestClusterSafety_ConcurrentStatusUpdate(t *testing.T) {
t.Log("✅ CAS mechanism working correctly - Only one update succeeded") t.Log("✅ CAS mechanism working correctly - Only one update succeeded")
} }

View File

@@ -52,3 +52,5 @@ func TestDBConfig_CustomValues(t *testing.T) {
} }
} }

View File

@@ -192,3 +192,5 @@ func TestSQLiteDDLUsesTEXT(t *testing.T) {
} }
} }

View File

@@ -11,10 +11,10 @@ import (
_ "github.com/lib/pq" _ "github.com/lib/pq"
"github.com/stretchr/testify/require" "github.com/stretchr/testify/require"
"go.yandata.net/iod/iod/go-trustlog/api/adapter" "go.yandata.net/wangsiyuan/go-trustlog/api/adapter"
"go.yandata.net/iod/iod/go-trustlog/api/logger" "go.yandata.net/wangsiyuan/go-trustlog/api/logger"
"go.yandata.net/iod/iod/go-trustlog/api/model" "go.yandata.net/wangsiyuan/go-trustlog/api/model"
"go.yandata.net/iod/iod/go-trustlog/api/persistence" "go.yandata.net/wangsiyuan/go-trustlog/api/persistence"
) )
// TestCursorInitialization 验证 cursor 初始化逻辑 // TestCursorInitialization 验证 cursor 初始化逻辑
@@ -152,15 +152,15 @@ func TestCursorInitialization(t *testing.T) {
createdAt := baseTime.Add(time.Duration(i) * time.Minute) createdAt := baseTime.Add(time.Duration(i) * time.Minute)
_, err := db.Exec(` _, err := db.Exec(`
INSERT INTO operation ( INSERT INTO operation (
op_id, op_actor, doid, producer_id, op_id, op_actor, doid, producer_id,
request_body_hash, response_body_hash, op_hash, sign, request_body_hash, response_body_hash, op_hash, sign,
op_source, op_type, do_prefix, do_repository, op_source, op_code, do_prefix, do_repository,
trustlog_status, created_at trustlog_status, created_at
) VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12, $13, $14) ) VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12, $13, $14)
`, opID, "tester", fmt.Sprintf("test/%d", i), "producer", `, opID, "tester", fmt.Sprintf("test/%d", i), "producer",
"req-hash", "resp-hash", "op-hash", "signature", "req-hash", "resp-hash", "op-hash", "signature",
"DOIP", "CREATE", "test", "repo", "NOT_TRUSTLOGGED", createdAt) "DOIP", 100, "test", "repo", "NOT_TRUSTLOGGED", createdAt)
require.NoError(t, err) require.NoError(t, err)
} }
t.Logf("✅ Created 5 historical records starting from %v", baseTime) t.Logf("✅ Created 5 historical records starting from %v", baseTime)
@@ -286,3 +286,5 @@ func TestCursorInitialization(t *testing.T) {
t.Log("✅ Cursor initialization verification PASSED") t.Log("✅ Cursor initialization verification PASSED")
t.Log(strings.Repeat("=", 60)) t.Log(strings.Repeat("=", 60))
} }

View File

@@ -6,8 +6,8 @@ import (
"fmt" "fmt"
"time" "time"
"go.yandata.net/iod/iod/go-trustlog/api/logger" "go.yandata.net/wangsiyuan/go-trustlog/api/logger"
"go.yandata.net/iod/iod/go-trustlog/api/model" "go.yandata.net/wangsiyuan/go-trustlog/api/model"
) )
// OperationRecord 操作记录(包含数据库扩展字段) // OperationRecord 操作记录(包含数据库扩展字段)
@@ -21,7 +21,7 @@ type OperationRecord struct {
OpHash string OpHash string
Sign string Sign string
OpSource string OpSource string
OpType string OpCode int32
DOPrefix string DOPrefix string
DORepository string DORepository string
ClientIP *string ClientIP *string
@@ -40,7 +40,7 @@ func (r *OperationRecord) ToModel() *model.Operation {
RequestBodyHash: &r.RequestBodyHash, RequestBodyHash: &r.RequestBodyHash,
ResponseBodyHash: &r.ResponseBodyHash, ResponseBodyHash: &r.ResponseBodyHash,
OpSource: model.Source(r.OpSource), OpSource: model.Source(r.OpSource),
OpType: r.OpType, OpCode: model.OpCode(r.OpCode),
DoPrefix: r.DOPrefix, DoPrefix: r.DOPrefix,
DoRepository: r.DORepository, DoRepository: r.DORepository,
ClientIP: r.ClientIP, ClientIP: r.ClientIP,
@@ -339,7 +339,7 @@ func (w *CursorWorker) findNewOperationsWithLock(ctx context.Context, tx *sql.Tx
query := ` query := `
SELECT op_id, op_actor, doid, producer_id, SELECT op_id, op_actor, doid, producer_id,
request_body_hash, response_body_hash, op_hash, sign, request_body_hash, response_body_hash, op_hash, sign,
op_source, op_type, do_prefix, do_repository, op_source, op_code, do_prefix, do_repository,
client_ip, server_ip, trustlog_status, created_at client_ip, server_ip, trustlog_status, created_at
FROM operation FROM operation
WHERE trustlog_status = $1 WHERE trustlog_status = $1
@@ -365,7 +365,7 @@ func (w *CursorWorker) findNewOperationsWithLock(ctx context.Context, tx *sql.Tx
err := rows.Scan( err := rows.Scan(
&op.OpID, &op.OpActor, &op.DOID, &op.ProducerID, &op.OpID, &op.OpActor, &op.DOID, &op.ProducerID,
&op.RequestBodyHash, &op.ResponseBodyHash, &op.OpHash, &op.Sign, &op.RequestBodyHash, &op.ResponseBodyHash, &op.OpHash, &op.Sign,
&op.OpSource, &op.OpType, &op.DOPrefix, &op.DORepository, &op.OpSource, &op.OpCode, &op.DOPrefix, &op.DORepository,
&clientIP, &serverIP, &op.TrustlogStatus, &createdAt, &clientIP, &serverIP, &op.TrustlogStatus, &createdAt,
) )
if err != nil { if err != nil {
@@ -404,7 +404,7 @@ func (w *CursorWorker) findNewOperations(ctx context.Context, cursor string) ([]
rows, err := db.QueryContext(ctx, ` rows, err := db.QueryContext(ctx, `
SELECT op_id, op_actor, doid, producer_id, SELECT op_id, op_actor, doid, producer_id,
request_body_hash, response_body_hash, op_hash, sign, request_body_hash, response_body_hash, op_hash, sign,
op_source, op_type, do_prefix, do_repository, op_source, op_code, do_prefix, do_repository,
client_ip, server_ip, trustlog_status, created_at client_ip, server_ip, trustlog_status, created_at
FROM operation FROM operation
WHERE trustlog_status = $1 WHERE trustlog_status = $1
@@ -426,7 +426,7 @@ func (w *CursorWorker) findNewOperations(ctx context.Context, cursor string) ([]
err := rows.Scan( err := rows.Scan(
&op.OpID, &op.OpActor, &op.DOID, &op.ProducerID, &op.OpID, &op.OpActor, &op.DOID, &op.ProducerID,
&op.RequestBodyHash, &op.ResponseBodyHash, &op.OpHash, &op.Sign, &op.RequestBodyHash, &op.ResponseBodyHash, &op.OpHash, &op.Sign,
&op.OpSource, &op.OpType, &op.DOPrefix, &op.DORepository, &op.OpSource, &op.OpCode, &op.DOPrefix, &op.DORepository,
&clientIP, &serverIP, &op.TrustlogStatus, &createdAt, &clientIP, &serverIP, &op.TrustlogStatus, &createdAt,
) )
if err != nil { if err != nil {

View File

@@ -13,10 +13,10 @@ import (
_ "github.com/lib/pq" _ "github.com/lib/pq"
"github.com/stretchr/testify/require" "github.com/stretchr/testify/require"
"go.yandata.net/iod/iod/go-trustlog/api/adapter" "go.yandata.net/wangsiyuan/go-trustlog/api/adapter"
"go.yandata.net/iod/iod/go-trustlog/api/logger" "go.yandata.net/wangsiyuan/go-trustlog/api/logger"
"go.yandata.net/iod/iod/go-trustlog/api/model" "go.yandata.net/wangsiyuan/go-trustlog/api/model"
"go.yandata.net/iod/iod/go-trustlog/api/persistence" "go.yandata.net/wangsiyuan/go-trustlog/api/persistence"
) )
// 端到端集成测试配置 // 端到端集成测试配置
@@ -204,12 +204,12 @@ func TestE2E_DBAndTrustlog_FullWorkflow(t *testing.T) {
// 注意PersistenceClient 主要用于写入,查询需要直接使用 repository // 注意PersistenceClient 主要用于写入,查询需要直接使用 repository
var retrievedOp model.Operation var retrievedOp model.Operation
err = db.QueryRowContext(ctx, ` err = db.QueryRowContext(ctx, `
SELECT op_id, op_source, op_type, do_prefix SELECT op_id, op_source, op_code, do_prefix
FROM operation WHERE op_id = $1 FROM operation WHERE op_id = $1
`, operations[0].OpID).Scan( `, operations[0].OpID).Scan(
&retrievedOp.OpID, &retrievedOp.OpID,
&retrievedOp.OpSource, &retrievedOp.OpSource,
&retrievedOp.OpType, &retrievedOp.OpCode,
&retrievedOp.DoPrefix, &retrievedOp.DoPrefix,
) )
require.NoError(t, err) require.NoError(t, err)
@@ -726,7 +726,7 @@ func createE2ETestOperations(count int) []*model.Operation {
OpID: fmt.Sprintf("e2e-op-%d-%d", timestamp, i), OpID: fmt.Sprintf("e2e-op-%d-%d", timestamp, i),
Timestamp: time.Now(), Timestamp: time.Now(),
OpSource: model.OpSourceDOIP, OpSource: model.OpSourceDOIP,
OpType: string(model.OpTypeCreate), OpCode: model.OpCodeCreateID,
DoPrefix: "e2e-test", DoPrefix: "e2e-test",
DoRepository: "e2e-repo", DoRepository: "e2e-repo",
Doid: fmt.Sprintf("e2e/test/%d", i), Doid: fmt.Sprintf("e2e/test/%d", i),

View File

@@ -7,10 +7,10 @@ import (
"github.com/go-logr/logr" "github.com/go-logr/logr"
"go.yandata.net/iod/iod/go-trustlog/api/adapter" "go.yandata.net/wangsiyuan/go-trustlog/api/adapter"
"go.yandata.net/iod/iod/go-trustlog/api/logger" "go.yandata.net/wangsiyuan/go-trustlog/api/logger"
"go.yandata.net/iod/iod/go-trustlog/api/model" "go.yandata.net/wangsiyuan/go-trustlog/api/model"
"go.yandata.net/iod/iod/go-trustlog/api/persistence" "go.yandata.net/wangsiyuan/go-trustlog/api/persistence"
) )
// Example_dbOnly 演示仅落库策略 // Example_dbOnly 演示仅落库策略
@@ -44,7 +44,7 @@ func Example_dbOnly() {
EnvelopeConfig: envelopeConfig, EnvelopeConfig: envelopeConfig,
DBConfig: persistence.DefaultDBConfig( DBConfig: persistence.DefaultDBConfig(
"postgres", "postgres",
"postgres://user:pass@localhost:5432/trustlog?sslmode=disable", "postgres://postgres:postgres@localhost:5432/trustlog?sslmode=disable",
), ),
PersistenceConfig: persistence.DefaultPersistenceConfig(persistence.StrategyDBOnly), PersistenceConfig: persistence.DefaultPersistenceConfig(persistence.StrategyDBOnly),
EnableRetryWorker: false, // 仅落库不需要重试 EnableRetryWorker: false, // 仅落库不需要重试
@@ -57,7 +57,7 @@ func Example_dbOnly() {
// 5. 构造 Operation包含 IP 信息) // 5. 构造 Operation包含 IP 信息)
op, err := model.NewFullOperation( op, err := model.NewFullOperation(
model.OpSourceDOIP, model.OpSourceDOIP,
string(model.OpTypeCreate), model.OpCodeCreateID,
"10.1000", "10.1000",
"my-repo", "my-repo",
"10.1000/my-repo/doc001", "10.1000/my-repo/doc001",
@@ -120,7 +120,7 @@ func Example_dbAndTrustlog() {
EnvelopeConfig: envelopeConfig, EnvelopeConfig: envelopeConfig,
DBConfig: persistence.DefaultDBConfig( DBConfig: persistence.DefaultDBConfig(
"postgres", "postgres",
"postgres://user:pass@localhost:5432/trustlog?sslmode=disable", "postgres://postgres:postgres@localhost:5432/trustlog?sslmode=disable",
), ),
PersistenceConfig: persistence.PersistenceConfig{ PersistenceConfig: persistence.PersistenceConfig{
Strategy: persistence.StrategyDBAndTrustlog, Strategy: persistence.StrategyDBAndTrustlog,
@@ -139,7 +139,7 @@ func Example_dbAndTrustlog() {
// 5. 构造 Operation // 5. 构造 Operation
op, err := model.NewFullOperation( op, err := model.NewFullOperation(
model.OpSourceDOIP, model.OpSourceDOIP,
string(model.OpTypeCreate), model.OpCodeCreateID,
"10.1000", "10.1000",
"my-repo", "my-repo",
"10.1000/my-repo/doc002", "10.1000/my-repo/doc002",
@@ -199,7 +199,7 @@ func Example_trustlogOnly() {
EnvelopeConfig: envelopeConfig, EnvelopeConfig: envelopeConfig,
DBConfig: persistence.DefaultDBConfig( DBConfig: persistence.DefaultDBConfig(
"postgres", "postgres",
"postgres://user:pass@localhost:5432/trustlog?sslmode=disable", "postgres://postgres:postgres@localhost:5432/trustlog?sslmode=disable",
), ),
PersistenceConfig: persistence.DefaultPersistenceConfig(persistence.StrategyTrustlogOnly), PersistenceConfig: persistence.DefaultPersistenceConfig(persistence.StrategyTrustlogOnly),
EnableRetryWorker: false, // 仅存证不需要重试工作器 EnableRetryWorker: false, // 仅存证不需要重试工作器
@@ -212,7 +212,7 @@ func Example_trustlogOnly() {
// 5. 构造 Operation // 5. 构造 Operation
op, err := model.NewFullOperation( op, err := model.NewFullOperation(
model.OpSourceDOIP, model.OpSourceDOIP,
string(model.OpTypeCreate), model.OpCodeCreateID,
"10.1000", "10.1000",
"my-repo", "my-repo",
"10.1000/my-repo/doc003", "10.1000/my-repo/doc003",
@@ -278,7 +278,7 @@ func Example_mysqlDatabase() {
// 5. 构造并发布 Operation // 5. 构造并发布 Operation
op, err := model.NewFullOperation( op, err := model.NewFullOperation(
model.OpSourceDOIP, model.OpSourceDOIP,
string(model.OpTypeCreate), model.OpCodeCreateID,
"10.1000", "10.1000",
"my-repo", "my-repo",
"10.1000/my-repo/doc004", "10.1000/my-repo/doc004",
@@ -349,7 +349,7 @@ func Example_sqliteDatabase() {
// 5. 构造并发布 Operation // 5. 构造并发布 Operation
op, err := model.NewFullOperation( op, err := model.NewFullOperation(
model.OpSourceDOIP, model.OpSourceDOIP,
string(model.OpTypeCreate), model.OpCodeCreateID,
"10.1000", "10.1000",
"my-repo", "my-repo",
"10.1000/my-repo/doc005", "10.1000/my-repo/doc005",
@@ -376,3 +376,6 @@ func Example_sqliteDatabase() {
fmt.Printf("Operation saved to SQLite: %s\n", op.OpID) fmt.Printf("Operation saved to SQLite: %s\n", op.OpID)
} }

View File

@@ -8,7 +8,7 @@ import (
_ "github.com/mattn/go-sqlite3" _ "github.com/mattn/go-sqlite3"
"go.yandata.net/iod/iod/go-trustlog/api/logger" "go.yandata.net/wangsiyuan/go-trustlog/api/logger"
) )
func TestPersistenceManager_DBOnly(t *testing.T) { func TestPersistenceManager_DBOnly(t *testing.T) {
@@ -365,3 +365,5 @@ func TestGetDialectDDL_UnknownDriver(t *testing.T) {
} }
} }

View File

@@ -141,11 +141,11 @@ func TestMinimalNullableIPFields(t *testing.T) {
// 测试1: 插入 NULL IP // 测试1: 插入 NULL IP
_, err = db.ExecContext(ctx, ` _, err = db.ExecContext(ctx, `
INSERT INTO operation ( INSERT INTO operation (
op_id, doid, producer_id, op_source, op_type, op_id, doid, producer_id, op_source, op_code,
do_prefix, do_repository, trustlog_status, timestamp, do_prefix, do_repository, trustlog_status, timestamp,
client_ip, server_ip client_ip, server_ip
) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
`, "test-001", "10.1000/repo/obj", "producer-001", "DOIP", "Create", `, "test-001", "10.1000/repo/obj", "producer-001", "DOIP", 100,
"10.1000", "repo", "NOT_TRUSTLOGGED", time.Now(), nil, nil) "10.1000", "repo", "NOT_TRUSTLOGGED", time.Now(), nil, nil)
if err != nil { if err != nil {
@@ -173,11 +173,11 @@ func TestMinimalNullableIPFields(t *testing.T) {
// 测试2: 插入非 NULL IP // 测试2: 插入非 NULL IP
_, err = db.ExecContext(ctx, ` _, err = db.ExecContext(ctx, `
INSERT INTO operation ( INSERT INTO operation (
op_id, doid, producer_id, op_source, op_type, op_id, doid, producer_id, op_source, op_code,
do_prefix, do_repository, trustlog_status, timestamp, do_prefix, do_repository, trustlog_status, timestamp,
client_ip, server_ip client_ip, server_ip
) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
`, "test-002", "10.1000/repo/obj2", "producer-001", "DOIP", "Create", `, "test-002", "10.1000/repo/obj2", "producer-001", "DOIP", 100,
"10.1000", "repo", "NOT_TRUSTLOGGED", time.Now(), "10.1000", "repo", "NOT_TRUSTLOGGED", time.Now(),
"192.168.1.100", "10.0.0.50") "192.168.1.100", "10.0.0.50")
@@ -316,10 +316,10 @@ func TestMinimalOperationStatusFlow(t *testing.T) {
// 插入未存证记录 // 插入未存证记录
_, err = db.ExecContext(ctx, ` _, err = db.ExecContext(ctx, `
INSERT INTO operation ( INSERT INTO operation (
op_id, doid, producer_id, op_source, op_type, op_id, doid, producer_id, op_source, op_code,
do_prefix, do_repository, trustlog_status, timestamp do_prefix, do_repository, trustlog_status, timestamp
) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?) ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)
`, "test-001", "10.1000/repo/obj", "producer-001", "DOIP", "Create", `, "test-001", "10.1000/repo/obj", "producer-001", "DOIP", 100,
"10.1000", "repo", "NOT_TRUSTLOGGED", time.Now()) "10.1000", "repo", "NOT_TRUSTLOGGED", time.Now())
if err != nil { if err != nil {
@@ -367,3 +367,5 @@ func TestMinimalOperationStatusFlow(t *testing.T) {
} }
} }

View File

@@ -9,7 +9,7 @@ import (
_ "github.com/lib/pq" _ "github.com/lib/pq"
"go.yandata.net/iod/iod/go-trustlog/api/logger" "go.yandata.net/wangsiyuan/go-trustlog/api/logger"
) )
const ( const (
@@ -400,3 +400,5 @@ func TestPostgreSQL_PersistenceManager(t *testing.T) {
t.Logf("✅ PostgreSQL PersistenceManager test passed") t.Logf("✅ PostgreSQL PersistenceManager test passed")
} }

View File

@@ -11,9 +11,9 @@ import (
"github.com/stretchr/testify/assert" "github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require" "github.com/stretchr/testify/require"
"go.yandata.net/iod/iod/go-trustlog/api/logger" "go.yandata.net/wangsiyuan/go-trustlog/api/logger"
"go.yandata.net/iod/iod/go-trustlog/api/model" "go.yandata.net/wangsiyuan/go-trustlog/api/model"
"go.yandata.net/iod/iod/go-trustlog/api/persistence" "go.yandata.net/wangsiyuan/go-trustlog/api/persistence"
) )
// TestPG_Query_Integration 测试 PostgreSQL 查询功能集成 // TestPG_Query_Integration 测试 PostgreSQL 查询功能集成
@@ -69,7 +69,7 @@ func TestPG_Query_Integration(t *testing.T) {
testOps := []struct { testOps := []struct {
opID string opID string
opSource string opSource string
opType string opCode int32
prefix string prefix string
doid string doid string
repo string repo string
@@ -80,23 +80,23 @@ func TestPG_Query_Integration(t *testing.T) {
status persistence.TrustlogStatus status persistence.TrustlogStatus
time time.Time time time.Time
}{ }{
{"pg-query-test-001", "DOIP", "Create", "10.10000", "10.10000/test-repo/test-001", "test-repo", "user-1", "producer-1", strPtr("192.168.1.10"), strPtr("10.0.0.1"), persistence.StatusNotTrustlogged, baseTime}, {"pg-query-test-001", "DOIP", 100, "10.10000", "10.10000/test-repo/test-001", "test-repo", "user-1", "producer-1", strPtr("192.168.1.10"), strPtr("10.0.0.1"), persistence.StatusNotTrustlogged, baseTime},
{"pg-query-test-002", "DOIP", "Create", "10.10000", "10.10000/test-repo/test-002", "test-repo", "user-1", "producer-1", strPtr("192.168.1.10"), strPtr("10.0.0.1"), persistence.StatusTrustlogged, baseTime.Add(10 * time.Minute)}, {"pg-query-test-002", "DOIP", 100, "10.10000", "10.10000/test-repo/test-002", "test-repo", "user-1", "producer-1", strPtr("192.168.1.10"), strPtr("10.0.0.1"), persistence.StatusTrustlogged, baseTime.Add(10 * time.Minute)},
{"pg-query-test-003", "DOIP", "Update", "10.10000", "10.10000/test-repo/test-003", "test-repo", "user-2", "producer-1", strPtr("192.168.1.20"), strPtr("10.0.0.1"), persistence.StatusNotTrustlogged, baseTime.Add(20 * time.Minute)}, {"pg-query-test-003", "DOIP", 104, "10.10000", "10.10000/test-repo/test-003", "test-repo", "user-2", "producer-1", strPtr("192.168.1.20"), strPtr("10.0.0.1"), persistence.StatusNotTrustlogged, baseTime.Add(20 * time.Minute)},
{"pg-query-test-004", "DOIP", "Update", "10.10000", "10.10000/test-repo/test-004", "test-repo", "user-2", "producer-2", strPtr("192.168.1.20"), strPtr("10.0.0.2"), persistence.StatusTrustlogged, baseTime.Add(30 * time.Minute)}, {"pg-query-test-004", "DOIP", 104, "10.10000", "10.10000/test-repo/test-004", "test-repo", "user-2", "producer-2", strPtr("192.168.1.20"), strPtr("10.0.0.2"), persistence.StatusTrustlogged, baseTime.Add(30 * time.Minute)},
{"pg-query-test-005", "DOIP", "Delete", "10.10000", "10.10000/test-repo/test-005", "test-repo", "user-3", "producer-2", nil, nil, persistence.StatusNotTrustlogged, baseTime.Add(40 * time.Minute)}, {"pg-query-test-005", "DOIP", 101, "10.10000", "10.10000/test-repo/test-005", "test-repo", "user-3", "producer-2", nil, nil, persistence.StatusNotTrustlogged, baseTime.Add(40 * time.Minute)},
{"pg-query-test-006", "IRP", "OC_CREATE_HANDLE", "20.1000", "20.1000/test-repo/test-001", "test-repo", "user-1", "producer-3", strPtr("192.168.2.10"), strPtr("10.0.1.1"), persistence.StatusTrustlogged, baseTime.Add(50 * time.Minute)}, {"pg-query-test-006", "IRP", 100, "20.1000", "20.1000/test-repo/test-001", "test-repo", "user-1", "producer-3", strPtr("192.168.2.10"), strPtr("10.0.1.1"), persistence.StatusTrustlogged, baseTime.Add(50 * time.Minute)},
{"pg-query-test-007", "IRP", "OC_DELETE_HANDLE", "20.1000", "20.1000/test-repo/test-002", "test-repo", "user-2", "producer-3", strPtr("192.168.2.20"), strPtr("10.0.1.1"), persistence.StatusNotTrustlogged, baseTime.Add(60 * time.Minute)}, {"pg-query-test-007", "IRP", 101, "20.1000", "20.1000/test-repo/test-002", "test-repo", "user-2", "producer-3", strPtr("192.168.2.20"), strPtr("10.0.1.1"), persistence.StatusNotTrustlogged, baseTime.Add(60 * time.Minute)},
{"pg-query-test-008", "IRP", "OC_LOOKUP_HANDLE", "20.1000", "20.1000/test-repo/test-003", "test-repo", "user-3", "producer-4", nil, strPtr("10.0.1.2"), persistence.StatusTrustlogged, baseTime.Add(70 * time.Minute)}, {"pg-query-test-008", "IRP", 1, "20.1000", "20.1000/test-repo/test-003", "test-repo", "user-3", "producer-4", nil, strPtr("10.0.1.2"), persistence.StatusTrustlogged, baseTime.Add(70 * time.Minute)},
{"pg-query-test-009", "DOIP", "Retrieve", "10.20000", "10.20000/test-repo/test-001", "test-repo", "user-1", "producer-1", strPtr("192.168.1.30"), nil, persistence.StatusNotTrustlogged, baseTime.Add(80 * time.Minute)}, {"pg-query-test-009", "DOIP", 1, "10.20000", "10.20000/test-repo/test-001", "test-repo", "user-1", "producer-1", strPtr("192.168.1.30"), nil, persistence.StatusNotTrustlogged, baseTime.Add(80 * time.Minute)},
{"pg-query-test-010", "DOIP", "Retrieve", "10.20000", "10.20000/test-repo/test-002", "test-repo", "user-2", "producer-2", strPtr("192.168.1.40"), strPtr("10.0.0.3"), persistence.StatusTrustlogged, baseTime.Add(90 * time.Minute)}, {"pg-query-test-010", "DOIP", 1, "10.20000", "10.20000/test-repo/test-002", "test-repo", "user-2", "producer-2", strPtr("192.168.1.40"), strPtr("10.0.0.3"), persistence.StatusTrustlogged, baseTime.Add(90 * time.Minute)},
} }
// 插入测试数据 // 插入测试数据
for _, testOp := range testOps { for _, testOp := range testOps {
op, err := model.NewFullOperation( op, err := model.NewFullOperation(
model.Source(testOp.opSource), model.Source(testOp.opSource),
testOp.opType, model.OpCode(testOp.opCode),
testOp.prefix, // doPrefix testOp.prefix, // doPrefix
testOp.repo, // doRepository testOp.repo, // doRepository
testOp.doid, // doid testOp.doid, // doid
@@ -151,11 +151,11 @@ func TestPG_Query_Integration(t *testing.T) {
t.Logf("✅ DOIP records: %d", result.Total) t.Logf("✅ DOIP records: %d", result.Total)
}) })
// 测试3: 按 OpType 筛选 // 测试3: 按 OpCode 筛选
t.Run("Filter by OpType", func(t *testing.T) { t.Run("Filter by OpCode", func(t *testing.T) {
opType := "Create" opCode := int32(100)
req := &persistence.OperationQueryRequest{ req := &persistence.OperationQueryRequest{
OpType: &opType, OpCode: &opCode,
PageSize: 50, PageSize: 50,
PageNumber: 1, PageNumber: 1,
} }
@@ -165,7 +165,7 @@ func TestPG_Query_Integration(t *testing.T) {
assert.GreaterOrEqual(t, result.Total, int64(2)) // 2条Create记录 assert.GreaterOrEqual(t, result.Total, int64(2)) // 2条Create记录
for _, op := range result.Operations { for _, op := range result.Operations {
assert.Equal(t, "Create", op.OpType) assert.Equal(t, model.OpCodeCreateID, op.OpCode)
} }
t.Logf("✅ Create records: %d", result.Total) t.Logf("✅ Create records: %d", result.Total)
}) })
@@ -442,11 +442,11 @@ func TestPG_Query_Integration(t *testing.T) {
// 测试16: 复杂组合查询(多条件) // 测试16: 复杂组合查询(多条件)
t.Run("Complex combined query", func(t *testing.T) { t.Run("Complex combined query", func(t *testing.T) {
opSource := "DOIP" opSource := "DOIP"
opType := "Update" opCode := int32(104) // ModifyElement
status := persistence.StatusTrustlogged status := persistence.StatusTrustlogged
req := &persistence.OperationQueryRequest{ req := &persistence.OperationQueryRequest{
OpSource: &opSource, OpSource: &opSource,
OpType: &opType, OpCode: &opCode,
TrustlogStatus: &status, TrustlogStatus: &status,
PageSize: 50, PageSize: 50,
PageNumber: 1, PageNumber: 1,
@@ -460,7 +460,7 @@ func TestPG_Query_Integration(t *testing.T) {
for i, op := range result.Operations { for i, op := range result.Operations {
assert.Equal(t, "DOIP", string(op.OpSource)) assert.Equal(t, "DOIP", string(op.OpSource))
assert.Equal(t, "Update", op.OpType) assert.Equal(t, model.OpCodeModifyElement, op.OpCode) // 104
assert.Equal(t, persistence.StatusTrustlogged, result.Statuses[i]) assert.Equal(t, persistence.StatusTrustlogged, result.Statuses[i])
} }
t.Logf("✅ Complex query records: %d", result.Total) t.Logf("✅ Complex query records: %d", result.Total)
@@ -534,7 +534,7 @@ func TestPG_PersistenceClient_Query_Integration(t *testing.T) {
for i := 0; i < 5; i++ { for i := 0; i < 5; i++ {
op, err := model.NewFullOperation( op, err := model.NewFullOperation(
model.OpSourceDOIP, model.OpSourceDOIP,
string(model.OpTypeCreate), model.OpCodeCreateID,
"10.10000", // doPrefix "10.10000", // doPrefix
"client-repo", // doRepository "client-repo", // doRepository
fmt.Sprintf("10.10000/client-repo/test-%d", i), // doid fmt.Sprintf("10.10000/client-repo/test-%d", i), // doid
@@ -613,3 +613,5 @@ func TestPG_PersistenceClient_Query_Integration(t *testing.T) {
func strPtr(s string) *string { func strPtr(s string) *string {
return &s return &s
} }

View File

@@ -10,8 +10,8 @@ import (
"github.com/ThreeDotsLabs/watermill/message" "github.com/ThreeDotsLabs/watermill/message"
_ "github.com/lib/pq" _ "github.com/lib/pq"
"go.yandata.net/iod/iod/go-trustlog/api/adapter" "go.yandata.net/wangsiyuan/go-trustlog/api/adapter"
"go.yandata.net/iod/iod/go-trustlog/api/logger" "go.yandata.net/wangsiyuan/go-trustlog/api/logger"
) )
const ( const (
@@ -358,3 +358,5 @@ func TestPulsar_DifferentTopics(t *testing.T) {
t.Logf("✅ Pulsar different topics test passed") t.Logf("✅ Pulsar different topics test passed")
} }

View File

@@ -9,8 +9,8 @@ import (
"github.com/stretchr/testify/assert" "github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require" "github.com/stretchr/testify/require"
"go.yandata.net/iod/iod/go-trustlog/api/logger" "go.yandata.net/wangsiyuan/go-trustlog/api/logger"
"go.yandata.net/iod/iod/go-trustlog/api/model" "go.yandata.net/wangsiyuan/go-trustlog/api/model"
) )
func TestOperationRepository_Query(t *testing.T) { func TestOperationRepository_Query(t *testing.T) {
@@ -26,20 +26,20 @@ func TestOperationRepository_Query(t *testing.T) {
testOps := []struct { testOps := []struct {
opID string opID string
opSource string opSource string
opType string opCode int32
status TrustlogStatus status TrustlogStatus
time time.Time time time.Time
}{ }{
{"op-001", "DOIP", "Create", StatusNotTrustlogged, now.Add(-3 * time.Hour)}, {"op-001", "DOIP", 100, StatusNotTrustlogged, now.Add(-3 * time.Hour)},
{"op-002", "DOIP", "Update", StatusTrustlogged, now.Add(-2 * time.Hour)}, {"op-002", "DOIP", 104, StatusTrustlogged, now.Add(-2 * time.Hour)},
{"op-003", "IRP", "Create", StatusNotTrustlogged, now.Add(-1 * time.Hour)}, {"op-003", "IRP", 100, StatusNotTrustlogged, now.Add(-1 * time.Hour)},
{"op-004", "IRP", "Delete", StatusTrustlogged, now}, {"op-004", "IRP", 101, StatusTrustlogged, now},
} }
for _, testOp := range testOps { for _, testOp := range testOps {
op := createTestOperation(t, testOp.opID) op := createTestOperation(t, testOp.opID)
op.OpSource = model.Source(testOp.opSource) op.OpSource = model.Source(testOp.opSource)
op.OpType = testOp.opType op.OpCode = model.OpCode(testOp.opCode)
op.Timestamp = testOp.time op.Timestamp = testOp.time
err := repo.Save(ctx, op, testOp.status) err := repo.Save(ctx, op, testOp.status)
@@ -78,10 +78,10 @@ func TestOperationRepository_Query(t *testing.T) {
} }
}) })
t.Run("Query by OpType", func(t *testing.T) { t.Run("Query by OpCode", func(t *testing.T) {
opType := "Create" opCode := int32(100)
req := &OperationQueryRequest{ req := &OperationQueryRequest{
OpType: &opType, OpCode: &opCode,
PageSize: 10, PageSize: 10,
PageNumber: 1, PageNumber: 1,
} }

View File

@@ -6,8 +6,8 @@ import (
"fmt" "fmt"
"time" "time"
"go.yandata.net/iod/iod/go-trustlog/api/logger" "go.yandata.net/wangsiyuan/go-trustlog/api/logger"
"go.yandata.net/iod/iod/go-trustlog/api/model" "go.yandata.net/wangsiyuan/go-trustlog/api/model"
) )
// OperationQueryRequest 操作记录查询请求 // OperationQueryRequest 操作记录查询请求
@@ -16,8 +16,8 @@ type OperationQueryRequest struct {
OpID *string OpID *string
// OpSource 操作来源(精确匹配) // OpSource 操作来源(精确匹配)
OpSource *string OpSource *string
// OpType 操作类型(精确匹配) // OpCode 操作代码(精确匹配int32
OpType *string OpCode *int32
// Doid 数字对象标识符(支持 LIKE 模糊查询) // Doid 数字对象标识符(支持 LIKE 模糊查询)
Doid *string Doid *string
// ProducerID 生产者ID精确匹配 // ProducerID 生产者ID精确匹配
@@ -197,7 +197,7 @@ func (r *operationRepository) SaveTx(ctx context.Context, tx *sql.Tx, op *model.
INSERT INTO operation ( INSERT INTO operation (
op_id, op_actor, doid, producer_id, op_id, op_actor, doid, producer_id,
request_body_hash, response_body_hash, request_body_hash, response_body_hash,
op_source, op_type, do_prefix, do_repository, op_source, op_code, do_prefix, do_repository,
client_ip, server_ip, trustlog_status, timestamp client_ip, server_ip, trustlog_status, timestamp
) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
`) `)
@@ -224,7 +224,7 @@ func (r *operationRepository) SaveTx(ctx context.Context, tx *sql.Tx, op *model.
reqHash, reqHash,
respHash, respHash,
string(op.OpSource), string(op.OpSource),
string(op.OpType), int32(op.OpCode),
op.DoPrefix, op.DoPrefix,
op.DoRepository, op.DoRepository,
clientIP, clientIP,
@@ -290,7 +290,7 @@ func (r *operationRepository) FindByID(ctx context.Context, opID string) (*model
SELECT SELECT
op_id, op_actor, doid, producer_id, op_id, op_actor, doid, producer_id,
request_body_hash, response_body_hash, request_body_hash, response_body_hash,
op_source, op_type, do_prefix, do_repository, op_source, op_code, do_prefix, do_repository,
client_ip, server_ip, trustlog_status, timestamp client_ip, server_ip, trustlog_status, timestamp
FROM operation FROM operation
WHERE op_id = ? WHERE op_id = ?
@@ -308,7 +308,7 @@ func (r *operationRepository) FindByID(ctx context.Context, opID string) (*model
&reqHash, &reqHash,
&respHash, &respHash,
&op.OpSource, &op.OpSource,
&op.OpType, &op.OpCode,
&op.DoPrefix, &op.DoPrefix,
&op.DoRepository, &op.DoRepository,
&clientIP, &clientIP,
@@ -353,7 +353,7 @@ func (r *operationRepository) FindUntrustloggedWithLock(ctx context.Context, tx
SELECT SELECT
op_id, op_actor, doid, producer_id, op_id, op_actor, doid, producer_id,
request_body_hash, response_body_hash, request_body_hash, response_body_hash,
op_source, op_type, do_prefix, do_repository, op_source, op_code, do_prefix, do_repository,
client_ip, server_ip, timestamp client_ip, server_ip, timestamp
FROM operation FROM operation
WHERE trustlog_status = ? WHERE trustlog_status = ?
@@ -392,7 +392,7 @@ func (r *operationRepository) FindUntrustloggedWithLock(ctx context.Context, tx
&reqHash, &reqHash,
&respHash, &respHash,
&op.OpSource, &op.OpSource,
&op.OpType, &op.OpCode,
&op.DoPrefix, &op.DoPrefix,
&op.DoRepository, &op.DoRepository,
&clientIP, &clientIP,
@@ -488,7 +488,7 @@ func (r *operationRepository) FindUntrustlogged(ctx context.Context, limit int)
SELECT SELECT
op_id, op_actor, doid, producer_id, op_id, op_actor, doid, producer_id,
request_body_hash, response_body_hash, request_body_hash, response_body_hash,
op_source, op_type, do_prefix, do_repository, op_source, op_code, do_prefix, do_repository,
client_ip, server_ip, timestamp client_ip, server_ip, timestamp
FROM operation FROM operation
WHERE trustlog_status = ? WHERE trustlog_status = ?
@@ -518,7 +518,7 @@ func (r *operationRepository) FindUntrustlogged(ctx context.Context, limit int)
&reqHash, &reqHash,
&respHash, &respHash,
&op.OpSource, &op.OpSource,
&op.OpType, &op.OpCode,
&op.DoPrefix, &op.DoPrefix,
&op.DoRepository, &op.DoRepository,
&clientIP, &clientIP,
@@ -607,9 +607,9 @@ func (r *operationRepository) Query(ctx context.Context, req *OperationQueryRequ
args = append(args, *req.OpSource) args = append(args, *req.OpSource)
argIndex++ argIndex++
} }
if req.OpType != nil && *req.OpType != "" { if req.OpCode != nil {
conditions = append(conditions, fmt.Sprintf("op_type = $%d", argIndex)) conditions = append(conditions, fmt.Sprintf("op_code = $%d", argIndex))
args = append(args, *req.OpType) args = append(args, *req.OpCode)
argIndex++ argIndex++
} }
if req.Doid != nil && *req.Doid != "" { if req.Doid != nil && *req.Doid != "" {
@@ -683,7 +683,7 @@ func (r *operationRepository) Query(ctx context.Context, req *OperationQueryRequ
SELECT SELECT
op_id, op_actor, doid, producer_id, op_id, op_actor, doid, producer_id,
request_body_hash, response_body_hash, request_body_hash, response_body_hash,
op_source, op_type, do_prefix, do_repository, op_source, op_code, do_prefix, do_repository,
client_ip, server_ip, trustlog_status, timestamp, created_at client_ip, server_ip, trustlog_status, timestamp, created_at
FROM operation FROM operation
%s %s
@@ -713,7 +713,7 @@ func (r *operationRepository) Query(ctx context.Context, req *OperationQueryRequ
err := rows.Scan( err := rows.Scan(
&op.OpID, &op.OpActor, &op.Doid, &op.ProducerID, &op.OpID, &op.OpActor, &op.Doid, &op.ProducerID,
&reqHash, &respHash, &reqHash, &respHash,
&op.OpSource, &op.OpType, &op.DoPrefix, &op.DoRepository, &op.OpSource, &op.OpCode, &op.DoPrefix, &op.DoRepository,
&clientIP, &serverIP, &statusStr, &op.Timestamp, &createdAt, &clientIP, &serverIP, &statusStr, &op.Timestamp, &createdAt,
) )
if err != nil { if err != nil {
@@ -779,9 +779,9 @@ func (r *operationRepository) Count(ctx context.Context, req *OperationQueryRequ
args = append(args, *req.OpSource) args = append(args, *req.OpSource)
argIndex++ argIndex++
} }
if req.OpType != nil && *req.OpType != "" { if req.OpCode != nil {
conditions = append(conditions, fmt.Sprintf("op_type = $%d", argIndex)) conditions = append(conditions, fmt.Sprintf("op_code = $%d", argIndex))
args = append(args, *req.OpType) args = append(args, *req.OpCode)
argIndex++ argIndex++
} }
if req.Doid != nil && *req.Doid != "" { if req.Doid != nil && *req.Doid != "" {

View File

@@ -8,8 +8,8 @@ import (
_ "github.com/mattn/go-sqlite3" _ "github.com/mattn/go-sqlite3"
"go.yandata.net/iod/iod/go-trustlog/api/logger" "go.yandata.net/wangsiyuan/go-trustlog/api/logger"
"go.yandata.net/iod/iod/go-trustlog/api/model" "go.yandata.net/wangsiyuan/go-trustlog/api/model"
) )
// setupTestDB 创建测试用的 SQLite 内存数据库 // setupTestDB 创建测试用的 SQLite 内存数据库
@@ -44,7 +44,7 @@ func setupTestDB(t *testing.T) *sql.DB {
func createTestOperation(t *testing.T, opID string) *model.Operation { func createTestOperation(t *testing.T, opID string) *model.Operation {
op, err := model.NewFullOperation( op, err := model.NewFullOperation(
model.OpSourceDOIP, model.OpSourceDOIP,
string(model.OpTypeCreate), model.OpCodeCreateID,
"10.1000", "10.1000",
"test-repo", "test-repo",
"10.1000/test-repo/"+opID, "10.1000/test-repo/"+opID,
@@ -389,3 +389,5 @@ func TestRetryRepository_DeleteRetry(t *testing.T) {
} }
} }

View File

@@ -7,8 +7,8 @@ import (
"github.com/ThreeDotsLabs/watermill/message" "github.com/ThreeDotsLabs/watermill/message"
"go.yandata.net/iod/iod/go-trustlog/api/logger" "go.yandata.net/wangsiyuan/go-trustlog/api/logger"
"go.yandata.net/iod/iod/go-trustlog/api/model" "go.yandata.net/wangsiyuan/go-trustlog/api/model"
) )
// RetryWorkerConfig 重试工作器配置 // RetryWorkerConfig 重试工作器配置

View File

@@ -95,3 +95,5 @@ func TestRetryWorker_CalculateNextRetry(t *testing.T) {
} }
} }

View File

@@ -35,7 +35,7 @@ CREATE TABLE IF NOT EXISTS operation (
response_body_hash VARCHAR(128), response_body_hash VARCHAR(128),
sign VARCHAR(512), sign VARCHAR(512),
op_source VARCHAR(10), op_source VARCHAR(10),
op_type VARCHAR(30), op_code INTEGER,
do_prefix VARCHAR(128), do_prefix VARCHAR(128),
do_repository VARCHAR(64), do_repository VARCHAR(64),
client_ip VARCHAR(32), client_ip VARCHAR(32),
@@ -106,7 +106,7 @@ CREATE TABLE IF NOT EXISTS operation (
response_body_hash VARCHAR(128), response_body_hash VARCHAR(128),
sign VARCHAR(512), sign VARCHAR(512),
op_source VARCHAR(10), op_source VARCHAR(10),
op_type VARCHAR(30), op_code INTEGER,
do_prefix VARCHAR(128), do_prefix VARCHAR(128),
do_repository VARCHAR(64), do_repository VARCHAR(64),
client_ip VARCHAR(32), client_ip VARCHAR(32),
@@ -164,7 +164,7 @@ CREATE TABLE IF NOT EXISTS operation (
response_body_hash VARCHAR(128), response_body_hash VARCHAR(128),
sign VARCHAR(512), sign VARCHAR(512),
op_source VARCHAR(10), op_source VARCHAR(10),
op_type VARCHAR(30), op_code INT,
do_prefix VARCHAR(128), do_prefix VARCHAR(128),
do_repository VARCHAR(64), do_repository VARCHAR(64),
client_ip VARCHAR(32), client_ip VARCHAR(32),
@@ -219,7 +219,7 @@ CREATE TABLE IF NOT EXISTS operation (
response_body_hash TEXT, response_body_hash TEXT,
sign TEXT, sign TEXT,
op_source TEXT, op_source TEXT,
op_type TEXT, op_code INTEGER,
do_prefix TEXT, do_prefix TEXT,
do_repository TEXT, do_repository TEXT,
client_ip TEXT, client_ip TEXT,

View File

@@ -134,7 +134,7 @@ func TestOperationTableDDL(t *testing.T) {
"response_body_hash", "response_body_hash",
"sign", "sign",
"op_source", "op_source",
"op_type", "op_code",
"do_prefix", "do_prefix",
"do_repository", "do_repository",
"client_ip", "client_ip",
@@ -181,3 +181,5 @@ func TestRetryTableDDL(t *testing.T) {
} }
} }

View File

@@ -14,7 +14,7 @@ CREATE TABLE IF NOT EXISTS operation (
response_body_hash VARCHAR(128), response_body_hash VARCHAR(128),
sign VARCHAR(512), sign VARCHAR(512),
op_source VARCHAR(10), op_source VARCHAR(10),
op_type VARCHAR(30), op_code INT COMMENT '操作代码int32',
do_prefix VARCHAR(128), do_prefix VARCHAR(128),
do_repository VARCHAR(64), do_repository VARCHAR(64),
client_ip VARCHAR(32) COMMENT '客户端IP可空仅落库不存证', client_ip VARCHAR(32) COMMENT '客户端IP可空仅落库不存证',

View File

@@ -15,7 +15,7 @@ CREATE TABLE IF NOT EXISTS operation (
op_hash VARCHAR(128), -- 操作哈希 op_hash VARCHAR(128), -- 操作哈希
sign VARCHAR(512), sign VARCHAR(512),
op_source VARCHAR(10), op_source VARCHAR(10),
op_type VARCHAR(30), op_code INTEGER, -- 操作代码int32
do_prefix VARCHAR(128), do_prefix VARCHAR(128),
do_repository VARCHAR(64), do_repository VARCHAR(64),
client_ip VARCHAR(32), -- 客户端IP可空仅落库 client_ip VARCHAR(32), -- 客户端IP可空仅落库

View File

@@ -14,7 +14,7 @@ CREATE TABLE IF NOT EXISTS operation (
response_body_hash TEXT, response_body_hash TEXT,
sign TEXT, sign TEXT,
op_source TEXT, op_source TEXT,
op_type TEXT, op_code INTEGER, -- 操作代码int32
do_prefix TEXT, do_prefix TEXT,
do_repository TEXT, do_repository TEXT,
client_ip TEXT, -- 客户端IP可空仅落库不存证 client_ip TEXT, -- 客户端IP可空仅落库不存证

View File

@@ -9,7 +9,7 @@
INSERT INTO operation ( INSERT INTO operation (
op_id, op_actor, doid, producer_id, op_id, op_actor, doid, producer_id,
request_body_hash, response_body_hash, request_body_hash, response_body_hash,
op_source, op_type, do_prefix, do_repository, op_source, op_code, do_prefix, do_repository,
client_ip, server_ip, trustlog_status, timestamp client_ip, server_ip, trustlog_status, timestamp
) VALUES ( ) VALUES (
'test-op-001', 'test-op-001',
@@ -32,7 +32,7 @@ INSERT INTO operation (
INSERT INTO operation ( INSERT INTO operation (
op_id, op_actor, doid, producer_id, op_id, op_actor, doid, producer_id,
request_body_hash, response_body_hash, request_body_hash, response_body_hash,
op_source, op_type, do_prefix, do_repository, op_source, op_code, do_prefix, do_repository,
client_ip, server_ip, trustlog_status, timestamp client_ip, server_ip, trustlog_status, timestamp
) VALUES ( ) VALUES (
'test-op-002', 'test-op-002',
@@ -55,7 +55,7 @@ INSERT INTO operation (
INSERT INTO operation ( INSERT INTO operation (
op_id, op_actor, doid, producer_id, op_id, op_actor, doid, producer_id,
request_body_hash, response_body_hash, request_body_hash, response_body_hash,
op_source, op_type, do_prefix, do_repository, op_source, op_code, do_prefix, do_repository,
client_ip, server_ip, trustlog_status, timestamp client_ip, server_ip, trustlog_status, timestamp
) VALUES ( ) VALUES (
'test-op-003', 'test-op-003',
@@ -111,7 +111,7 @@ INSERT INTO trustlog_retry (
-- 查询所有操作记录 -- 查询所有操作记录
SELECT SELECT
op_id, op_id,
op_type, op_code,
client_ip, client_ip,
server_ip, server_ip,
trustlog_status, trustlog_status,

View File

@@ -10,7 +10,7 @@ import (
_ "github.com/mattn/go-sqlite3" _ "github.com/mattn/go-sqlite3"
"go.yandata.net/iod/iod/go-trustlog/api/persistence" "go.yandata.net/wangsiyuan/go-trustlog/api/persistence"
) )
// Standalone tests - 独立测试,不依赖复杂模块 // Standalone tests - 独立测试,不依赖复杂模块
@@ -153,11 +153,11 @@ func TestStandaloneIPFields(t *testing.T) {
// 测试 NULL IP // 测试 NULL IP
_, err = db.ExecContext(ctx, ` _, err = db.ExecContext(ctx, `
INSERT INTO operation ( INSERT INTO operation (
op_id, doid, producer_id, op_source, op_type, op_id, doid, producer_id, op_source, op_code,
do_prefix, do_repository, trustlog_status, timestamp, do_prefix, do_repository, trustlog_status, timestamp,
client_ip, server_ip client_ip, server_ip
) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
`, "test-001", "10.1000/repo/obj", "producer-001", "DOIP", "Create", `, "test-001", "10.1000/repo/obj", "producer-001", "DOIP", 100,
"10.1000", "repo", "NOT_TRUSTLOGGED", time.Now(), nil, nil) "10.1000", "repo", "NOT_TRUSTLOGGED", time.Now(), nil, nil)
if err != nil { if err != nil {
@@ -184,11 +184,11 @@ func TestStandaloneIPFields(t *testing.T) {
// 测试非 NULL IP // 测试非 NULL IP
_, err = db.ExecContext(ctx, ` _, err = db.ExecContext(ctx, `
INSERT INTO operation ( INSERT INTO operation (
op_id, doid, producer_id, op_source, op_type, op_id, doid, producer_id, op_source, op_code,
do_prefix, do_repository, trustlog_status, timestamp, do_prefix, do_repository, trustlog_status, timestamp,
client_ip, server_ip client_ip, server_ip
) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
`, "test-002", "10.1000/repo/obj2", "producer-001", "DOIP", "Create", `, "test-002", "10.1000/repo/obj2", "producer-001", "DOIP", 100,
"10.1000", "repo", "NOT_TRUSTLOGGED", time.Now(), "10.1000", "repo", "NOT_TRUSTLOGGED", time.Now(),
"192.168.1.100", "10.0.0.50") "192.168.1.100", "10.0.0.50")
@@ -230,10 +230,10 @@ func TestStandaloneStatusFlow(t *testing.T) {
// 插入未存证记录 // 插入未存证记录
_, err = db.ExecContext(ctx, ` _, err = db.ExecContext(ctx, `
INSERT INTO operation ( INSERT INTO operation (
op_id, doid, producer_id, op_source, op_type, op_id, doid, producer_id, op_source, op_code,
do_prefix, do_repository, trustlog_status, timestamp do_prefix, do_repository, trustlog_status, timestamp
) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?) ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)
`, "test-001", "10.1000/repo/obj", "producer-001", "DOIP", "Create", `, "test-001", "10.1000/repo/obj", "producer-001", "DOIP", 100,
"10.1000", "repo", "NOT_TRUSTLOGGED", time.Now()) "10.1000", "repo", "NOT_TRUSTLOGGED", time.Now())
if err != nil { if err != nil {
@@ -307,3 +307,5 @@ func TestStandaloneCursorInit(t *testing.T) {
} }
} }

View File

@@ -5,8 +5,8 @@ import (
"database/sql" "database/sql"
"fmt" "fmt"
"go.yandata.net/iod/iod/go-trustlog/api/logger" "go.yandata.net/wangsiyuan/go-trustlog/api/logger"
"go.yandata.net/iod/iod/go-trustlog/api/model" "go.yandata.net/wangsiyuan/go-trustlog/api/model"
) )
// PersistenceStrategy 存证策略枚举 // PersistenceStrategy 存证策略枚举

View File

@@ -84,3 +84,5 @@ func TestPersistenceConfig_CustomValues(t *testing.T) {
} }
} }

View File

@@ -325,10 +325,10 @@ func TestNullableFields(t *testing.T) {
ctx := context.Background() ctx := context.Background()
_, err = db.ExecContext(ctx, ` _, err = db.ExecContext(ctx, `
INSERT INTO operation ( INSERT INTO operation (
op_id, doid, producer_id, op_source, op_type, op_id, doid, producer_id, op_source, op_code,
do_prefix, do_repository, trustlog_status, timestamp do_prefix, do_repository, trustlog_status, timestamp
) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?) ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)
`, "test-001", "10.1000/repo/obj", "producer-001", "DOIP", "Create", `, "test-001", "10.1000/repo/obj", "producer-001", "DOIP", 100,
"10.1000", "repo", "NOT_TRUSTLOGGED", time.Now()) "10.1000", "repo", "NOT_TRUSTLOGGED", time.Now())
if err != nil { if err != nil {
@@ -360,3 +360,5 @@ func assertEqual(t *testing.T, got, want interface{}) {
} }
} }

View File

@@ -10,10 +10,10 @@ import (
"google.golang.org/grpc" "google.golang.org/grpc"
"google.golang.org/protobuf/types/known/timestamppb" "google.golang.org/protobuf/types/known/timestamppb"
"go.yandata.net/iod/iod/go-trustlog/api/grpc/pb" "go.yandata.net/wangsiyuan/go-trustlog/api/grpc/pb"
"go.yandata.net/iod/iod/go-trustlog/api/logger" "go.yandata.net/wangsiyuan/go-trustlog/api/logger"
"go.yandata.net/iod/iod/go-trustlog/api/model" "go.yandata.net/wangsiyuan/go-trustlog/api/model"
"go.yandata.net/iod/iod/go-trustlog/internal/grpcclient" "go.yandata.net/wangsiyuan/go-trustlog/internal/grpcclient"
) )
const ( const (
@@ -76,7 +76,7 @@ type ListOperationsRequest struct {
// 可选过滤条件 // 可选过滤条件
Timestamp *time.Time // 操作时间戳 Timestamp *time.Time // 操作时间戳
OpSource model.Source // 操作来源 OpSource model.Source // 操作来源
OpType string // 操作类型 OpCode model.OpCode // 操作代码int32
DoPrefix string // 数据前缀 DoPrefix string // 数据前缀
DoRepository string // 数据仓库 DoRepository string // 数据仓库
} }
@@ -99,7 +99,7 @@ func (c *Client) ListOperations(ctx context.Context, req ListOperationsRequest)
pbReq := &pb.ListOperationReq{ pbReq := &pb.ListOperationReq{
PageSize: req.PageSize, PageSize: req.PageSize,
OpSource: string(req.OpSource), OpSource: string(req.OpSource),
OpType: req.OpType, OpCode: int32(req.OpCode),
DoPrefix: req.DoPrefix, DoPrefix: req.DoPrefix,
DoRepository: req.DoRepository, DoRepository: req.DoRepository,
} }
@@ -137,10 +137,10 @@ func (c *Client) ListOperations(ctx context.Context, req ListOperationsRequest)
// ValidationRequest 取证验证请求参数. // ValidationRequest 取证验证请求参数.
type ValidationRequest struct { type ValidationRequest struct {
Time time.Time // 操作时间戳 Time time.Time // 操作时间戳
OpID string // 操作唯一标识符 OpID string // 操作唯一标识符
OpType string // 操作类型 OpCode model.OpCode // 操作代码int32
DoRepository string // 数据仓库标识 DoRepository string // 数据仓库标识
} }
// ValidateOperation 执行操作取证验证,返回流式结果通道 // ValidateOperation 执行操作取证验证,返回流式结果通道
@@ -159,7 +159,7 @@ func (c *Client) ValidateOperation(ctx context.Context, req ValidationRequest) (
pbReq := &pb.ValidationReq{ pbReq := &pb.ValidationReq{
Time: timestamppb.New(req.Time), Time: timestamppb.New(req.Time),
OpId: req.OpID, OpId: req.OpID,
OpType: req.OpType, OpCode: int32(req.OpCode),
DoRepository: req.DoRepository, DoRepository: req.DoRepository,
} }

View File

@@ -9,10 +9,10 @@ import (
"github.com/stretchr/testify/require" "github.com/stretchr/testify/require"
"google.golang.org/protobuf/types/known/timestamppb" "google.golang.org/protobuf/types/known/timestamppb"
"go.yandata.net/iod/iod/go-trustlog/api/grpc/pb" "go.yandata.net/wangsiyuan/go-trustlog/api/grpc/pb"
"go.yandata.net/iod/iod/go-trustlog/api/logger" "go.yandata.net/wangsiyuan/go-trustlog/api/logger"
"go.yandata.net/iod/iod/go-trustlog/api/model" "go.yandata.net/wangsiyuan/go-trustlog/api/model"
"go.yandata.net/iod/iod/go-trustlog/api/queryclient" "go.yandata.net/wangsiyuan/go-trustlog/api/queryclient"
) )
// TestNewClient_ErrorCases 测试客户端创建的错误情况 // TestNewClient_ErrorCases 测试客户端创建的错误情况
@@ -59,14 +59,14 @@ func TestListOperations_ErrorHandling(t *testing.T) {
req := queryclient.ListOperationsRequest{ req := queryclient.ListOperationsRequest{
PageSize: 10, PageSize: 10,
OpSource: "api", OpSource: "api",
OpType: "create", OpCode: model.OpCodeCreateID,
DoPrefix: "test", DoPrefix: "test",
DoRepository: "repo", DoRepository: "repo",
} }
assert.Equal(t, uint64(10), req.PageSize) assert.Equal(t, uint64(10), req.PageSize)
assert.Equal(t, model.Source("api"), req.OpSource) assert.Equal(t, model.Source("api"), req.OpSource)
assert.Equal(t, "create", req.OpType) assert.Equal(t, model.OpCodeCreateID, req.OpCode)
}) })
} }
@@ -74,12 +74,12 @@ func TestListOperations_ErrorHandling(t *testing.T) {
func TestValidationRequest_Construction(t *testing.T) { func TestValidationRequest_Construction(t *testing.T) {
req := queryclient.ValidationRequest{ req := queryclient.ValidationRequest{
OpID: "test-op", OpID: "test-op",
OpType: "create", OpCode: model.OpCodeCreateID,
DoRepository: "test-repo", DoRepository: "test-repo",
} }
assert.Equal(t, "test-op", req.OpID) assert.Equal(t, "test-op", req.OpID)
assert.Equal(t, "create", req.OpType) assert.Equal(t, model.OpCodeCreateID, req.OpCode)
assert.Equal(t, "test-repo", req.DoRepository) assert.Equal(t, "test-repo", req.DoRepository)
} }
@@ -257,11 +257,11 @@ func TestClient_MultipleCallsToClose(t *testing.T) {
func TestResponseConversion(t *testing.T) { func TestResponseConversion(t *testing.T) {
t.Run("operation response with nil timestamp", func(t *testing.T) { t.Run("operation response with nil timestamp", func(t *testing.T) {
pbOp := &pb.OperationData{ pbOp := &pb.OperationData{
OpId: "test", OpId: "test",
OpSource: "api", OpSource: "api",
OpType: "create", OpCode: int32(model.OpCodeCreateID),
// Timestamp: nil - 这应该导致转换失败 // Timestamp: nil - 这应该导致转换失败
} }
// 验证会失败因为缺少必需字段 // 验证会失败因为缺少必需字段
_, err := model.FromProtobuf(pbOp) _, err := model.FromProtobuf(pbOp)
@@ -272,7 +272,7 @@ func TestResponseConversion(t *testing.T) {
pbOp := &pb.OperationData{ pbOp := &pb.OperationData{
OpId: "test", OpId: "test",
OpSource: "api", OpSource: "api",
OpType: "create", OpCode: int32(model.OpCodeCreateID),
Timestamp: timestamppb.Now(), Timestamp: timestamppb.Now(),
} }
@@ -395,3 +395,8 @@ func TestListRecordsResponse_Structure(t *testing.T) {
assert.Len(t, resp.Data, 0) assert.Len(t, resp.Data, 0)
} }

View File

@@ -12,10 +12,10 @@ import (
"google.golang.org/grpc/test/bufconn" "google.golang.org/grpc/test/bufconn"
"google.golang.org/protobuf/types/known/timestamppb" "google.golang.org/protobuf/types/known/timestamppb"
"go.yandata.net/iod/iod/go-trustlog/api/grpc/pb" "go.yandata.net/wangsiyuan/go-trustlog/api/grpc/pb"
"go.yandata.net/iod/iod/go-trustlog/api/logger" "go.yandata.net/wangsiyuan/go-trustlog/api/logger"
"go.yandata.net/iod/iod/go-trustlog/api/model" "go.yandata.net/wangsiyuan/go-trustlog/api/model"
"go.yandata.net/iod/iod/go-trustlog/api/queryclient" "go.yandata.net/wangsiyuan/go-trustlog/api/queryclient"
) )
const bufSize = 1024 * 1024 const bufSize = 1024 * 1024
@@ -39,7 +39,7 @@ func (s *mockOperationServer) ListOperations(
OpId: "op-1", OpId: "op-1",
Timestamp: timestamppb.Now(), Timestamp: timestamppb.Now(),
OpSource: "test", OpSource: "test",
OpType: "create", OpCode: int32(model.OpCodeCreateID),
DoPrefix: "test", DoPrefix: "test",
DoRepository: "repo", DoRepository: "repo",
Doid: "test/repo/123", Doid: "test/repo/123",
@@ -50,7 +50,7 @@ func (s *mockOperationServer) ListOperations(
OpId: "op-2", OpId: "op-2",
Timestamp: timestamppb.Now(), Timestamp: timestamppb.Now(),
OpSource: "test", OpSource: "test",
OpType: "update", OpCode: int32(model.OpCodeCreateID),
DoPrefix: "test", DoPrefix: "test",
DoRepository: "repo", DoRepository: "repo",
Doid: "test/repo/456", Doid: "test/repo/456",
@@ -81,7 +81,7 @@ func (s *mockOperationServer) ValidateOperation(
OpId: req.GetOpId(), OpId: req.GetOpId(),
Timestamp: req.GetTime(), Timestamp: req.GetTime(),
OpSource: "test", OpSource: "test",
OpType: req.GetOpType(), OpCode: req.GetOpCode(),
DoPrefix: "test", DoPrefix: "test",
DoRepository: req.GetDoRepository(), DoRepository: req.GetDoRepository(),
Doid: "test/repo/123", Doid: "test/repo/123",
@@ -312,14 +312,14 @@ func TestListOperationsRequest(t *testing.T) {
PreTime: now, PreTime: now,
Timestamp: &now, Timestamp: &now,
OpSource: model.Source("test"), OpSource: model.Source("test"),
OpType: "create", OpCode: model.OpCodeCreateID,
} }
assert.Equal(t, uint64(10), req.PageSize) assert.Equal(t, uint64(10), req.PageSize)
assert.Equal(t, now, req.PreTime) assert.Equal(t, now, req.PreTime)
assert.NotNil(t, req.Timestamp) assert.NotNil(t, req.Timestamp)
assert.Equal(t, "test", string(req.OpSource)) assert.Equal(t, "test", string(req.OpSource))
assert.Equal(t, "create", string(req.OpType)) assert.Equal(t, model.OpCodeCreateID, req.OpCode)
} }
func TestValidationRequest(t *testing.T) { func TestValidationRequest(t *testing.T) {
@@ -328,13 +328,13 @@ func TestValidationRequest(t *testing.T) {
req := queryclient.ValidationRequest{ req := queryclient.ValidationRequest{
Time: now, Time: now,
OpID: "op-123", OpID: "op-123",
OpType: "create", OpCode: model.OpCodeCreateID,
DoRepository: "repo", DoRepository: "repo",
} }
assert.Equal(t, now, req.Time) assert.Equal(t, now, req.Time)
assert.Equal(t, "op-123", req.OpID) assert.Equal(t, "op-123", req.OpID)
assert.Equal(t, "create", req.OpType) assert.Equal(t, model.OpCodeCreateID, req.OpCode)
assert.Equal(t, "repo", req.DoRepository) assert.Equal(t, "repo", req.DoRepository)
} }
@@ -420,7 +420,7 @@ func TestIntegration_ValidateOperation(t *testing.T) { //nolint:dupl // 测试
resultChan, err := client.ValidateOperation(ctx, queryclient.ValidationRequest{ resultChan, err := client.ValidateOperation(ctx, queryclient.ValidationRequest{
Time: time.Now(), Time: time.Now(),
OpID: "op-test", OpID: "op-test",
OpType: "create", OpCode: model.OpCodeCreateID,
DoRepository: "repo", DoRepository: "repo",
}) })
@@ -462,7 +462,7 @@ func TestIntegration_ValidateOperationSync(t *testing.T) {
queryclient.ValidationRequest{ queryclient.ValidationRequest{
Time: time.Now(), Time: time.Now(),
OpID: "op-test", OpID: "op-test",
OpType: "create", OpCode: model.OpCodeCreateID,
DoRepository: "repo", DoRepository: "repo",
}, },
func(r *model.ValidationResult) { func(r *model.ValidationResult) {
@@ -625,3 +625,8 @@ func TestClient_Close(t *testing.T) {
err = client.Close() err = client.Close()
require.NoError(t, err) require.NoError(t, err)
} }

1906
coverage_all Normal file

File diff suppressed because it is too large Load Diff

1382
coverage_api Normal file

File diff suppressed because it is too large Load Diff

1906
coverage_complete Normal file

File diff suppressed because it is too large Load Diff

1906
coverage_final Normal file

File diff suppressed because it is too large Load Diff

554
coverage_model Normal file
View File

@@ -0,0 +1,554 @@
mode: set
go.yandata.net/iod/iod/go-trustlog/api/model/config_signer.go:25.97,26.19 1 1
go.yandata.net/iod/iod/go-trustlog/api/model/config_signer.go:26.19,28.3 1 0
go.yandata.net/iod/iod/go-trustlog/api/model/config_signer.go:30.2,50.20 5 1
go.yandata.net/iod/iod/go-trustlog/api/model/config_signer.go:55.76,60.2 2 1
go.yandata.net/iod/iod/go-trustlog/api/model/config_signer.go:63.58,64.28 1 1
go.yandata.net/iod/iod/go-trustlog/api/model/config_signer.go:64.28,66.3 1 0
go.yandata.net/iod/iod/go-trustlog/api/model/config_signer.go:68.2,75.37 3 1
go.yandata.net/iod/iod/go-trustlog/api/model/config_signer.go:76.20,79.17 2 1
go.yandata.net/iod/iod/go-trustlog/api/model/config_signer.go:79.17,84.4 2 0
go.yandata.net/iod/iod/go-trustlog/api/model/config_signer.go:85.3,88.24 2 1
go.yandata.net/iod/iod/go-trustlog/api/model/config_signer.go:90.10,93.23 1 1
go.yandata.net/iod/iod/go-trustlog/api/model/config_signer.go:93.23,95.18 2 1
go.yandata.net/iod/iod/go-trustlog/api/model/config_signer.go:95.18,97.5 1 0
go.yandata.net/iod/iod/go-trustlog/api/model/config_signer.go:99.4,100.18 2 1
go.yandata.net/iod/iod/go-trustlog/api/model/config_signer.go:100.18,106.5 2 0
go.yandata.net/iod/iod/go-trustlog/api/model/config_signer.go:107.4,107.23 1 1
go.yandata.net/iod/iod/go-trustlog/api/model/config_signer.go:110.3,111.17 2 1
go.yandata.net/iod/iod/go-trustlog/api/model/config_signer.go:111.17,117.4 2 0
go.yandata.net/iod/iod/go-trustlog/api/model/config_signer.go:119.3,124.24 2 1
go.yandata.net/iod/iod/go-trustlog/api/model/config_signer.go:129.69,130.27 1 1
go.yandata.net/iod/iod/go-trustlog/api/model/config_signer.go:130.27,132.3 1 0
go.yandata.net/iod/iod/go-trustlog/api/model/config_signer.go:134.2,142.37 3 1
go.yandata.net/iod/iod/go-trustlog/api/model/config_signer.go:143.20,146.17 2 1
go.yandata.net/iod/iod/go-trustlog/api/model/config_signer.go:146.17,149.19 1 1
go.yandata.net/iod/iod/go-trustlog/api/model/config_signer.go:149.19,153.5 2 1
go.yandata.net/iod/iod/go-trustlog/api/model/config_signer.go:155.4,156.21 2 0
go.yandata.net/iod/iod/go-trustlog/api/model/config_signer.go:158.3,159.19 2 1
go.yandata.net/iod/iod/go-trustlog/api/model/config_signer.go:161.10,164.22 1 1
go.yandata.net/iod/iod/go-trustlog/api/model/config_signer.go:164.22,166.18 2 1
go.yandata.net/iod/iod/go-trustlog/api/model/config_signer.go:166.18,168.5 1 0
go.yandata.net/iod/iod/go-trustlog/api/model/config_signer.go:170.4,171.18 2 1
go.yandata.net/iod/iod/go-trustlog/api/model/config_signer.go:171.18,177.5 2 0
go.yandata.net/iod/iod/go-trustlog/api/model/config_signer.go:178.4,178.21 1 1
go.yandata.net/iod/iod/go-trustlog/api/model/config_signer.go:181.3,182.17 2 1
go.yandata.net/iod/iod/go-trustlog/api/model/config_signer.go:182.17,188.4 2 0
go.yandata.net/iod/iod/go-trustlog/api/model/config_signer.go:190.3,190.9 1 1
go.yandata.net/iod/iod/go-trustlog/api/model/config_signer.go:190.9,194.4 1 1
go.yandata.net/iod/iod/go-trustlog/api/model/config_signer.go:194.9,198.4 1 0
go.yandata.net/iod/iod/go-trustlog/api/model/config_signer.go:200.3,200.17 1 1
go.yandata.net/iod/iod/go-trustlog/api/model/config_signer.go:205.58,207.2 1 1
go.yandata.net/iod/iod/go-trustlog/api/model/converter.go:13.63,14.17 1 1
go.yandata.net/iod/iod/go-trustlog/api/model/converter.go:14.17,16.3 1 1
go.yandata.net/iod/iod/go-trustlog/api/model/converter.go:19.2,19.32 1 1
go.yandata.net/iod/iod/go-trustlog/api/model/converter.go:19.32,21.3 1 1
go.yandata.net/iod/iod/go-trustlog/api/model/converter.go:22.2,39.57 3 1
go.yandata.net/iod/iod/go-trustlog/api/model/converter.go:39.57,41.3 1 1
go.yandata.net/iod/iod/go-trustlog/api/model/converter.go:42.2,42.60 1 1
go.yandata.net/iod/iod/go-trustlog/api/model/converter.go:42.60,44.3 1 1
go.yandata.net/iod/iod/go-trustlog/api/model/converter.go:46.2,46.23 1 1
go.yandata.net/iod/iod/go-trustlog/api/model/converter.go:50.59,51.15 1 1
go.yandata.net/iod/iod/go-trustlog/api/model/converter.go:51.15,53.3 1 1
go.yandata.net/iod/iod/go-trustlog/api/model/converter.go:56.2,72.31 3 1
go.yandata.net/iod/iod/go-trustlog/api/model/converter.go:72.31,74.3 1 1
go.yandata.net/iod/iod/go-trustlog/api/model/converter.go:75.2,75.32 1 1
go.yandata.net/iod/iod/go-trustlog/api/model/converter.go:75.32,77.3 1 1
go.yandata.net/iod/iod/go-trustlog/api/model/converter.go:79.2,79.18 1 1
go.yandata.net/iod/iod/go-trustlog/api/model/converter.go:83.93,84.18 1 1
go.yandata.net/iod/iod/go-trustlog/api/model/converter.go:84.18,86.3 1 1
go.yandata.net/iod/iod/go-trustlog/api/model/converter.go:88.2,96.28 2 1
go.yandata.net/iod/iod/go-trustlog/api/model/converter.go:96.28,98.17 2 1
go.yandata.net/iod/iod/go-trustlog/api/model/converter.go:98.17,100.4 1 1
go.yandata.net/iod/iod/go-trustlog/api/model/converter.go:101.3,101.19 1 1
go.yandata.net/iod/iod/go-trustlog/api/model/converter.go:104.2,104.20 1 1
go.yandata.net/iod/iod/go-trustlog/api/model/converter.go:108.64,109.18 1 1
go.yandata.net/iod/iod/go-trustlog/api/model/converter.go:109.18,111.3 1 1
go.yandata.net/iod/iod/go-trustlog/api/model/converter.go:114.2,124.33 2 1
go.yandata.net/iod/iod/go-trustlog/api/model/converter.go:124.33,126.3 1 1
go.yandata.net/iod/iod/go-trustlog/api/model/converter.go:128.2,128.20 1 1
go.yandata.net/iod/iod/go-trustlog/api/model/converter.go:132.60,133.16 1 1
go.yandata.net/iod/iod/go-trustlog/api/model/converter.go:133.16,135.3 1 1
go.yandata.net/iod/iod/go-trustlog/api/model/converter.go:138.2,150.19 3 1
go.yandata.net/iod/iod/go-trustlog/api/model/converter.go:163.54,165.2 1 1
go.yandata.net/iod/iod/go-trustlog/api/model/converter.go:168.53,170.2 1 1
go.yandata.net/iod/iod/go-trustlog/api/model/converter.go:173.50,175.2 1 1
go.yandata.net/iod/iod/go-trustlog/api/model/converter.go:178.111,179.18 1 1
go.yandata.net/iod/iod/go-trustlog/api/model/converter.go:179.18,181.3 1 1
go.yandata.net/iod/iod/go-trustlog/api/model/converter.go:183.2,191.30 2 1
go.yandata.net/iod/iod/go-trustlog/api/model/converter.go:191.30,193.17 2 1
go.yandata.net/iod/iod/go-trustlog/api/model/converter.go:193.17,195.4 1 0
go.yandata.net/iod/iod/go-trustlog/api/model/converter.go:196.3,196.20 1 1
go.yandata.net/iod/iod/go-trustlog/api/model/converter.go:199.2,199.20 1 1
go.yandata.net/iod/iod/go-trustlog/api/model/crypto_config.go:48.13,52.2 2 1
go.yandata.net/iod/iod/go-trustlog/api/model/crypto_config.go:55.56,56.19 1 1
go.yandata.net/iod/iod/go-trustlog/api/model/crypto_config.go:56.19,58.3 1 0
go.yandata.net/iod/iod/go-trustlog/api/model/crypto_config.go:61.2,61.42 1 1
go.yandata.net/iod/iod/go-trustlog/api/model/crypto_config.go:61.42,63.3 1 0
go.yandata.net/iod/iod/go-trustlog/api/model/crypto_config.go:65.2,72.12 5 1
go.yandata.net/iod/iod/go-trustlog/api/model/crypto_config.go:76.44,80.25 3 1
go.yandata.net/iod/iod/go-trustlog/api/model/crypto_config.go:80.25,82.3 1 0
go.yandata.net/iod/iod/go-trustlog/api/model/crypto_config.go:83.2,83.21 1 1
go.yandata.net/iod/iod/go-trustlog/api/model/crypto_config.go:87.41,89.30 1 1
go.yandata.net/iod/iod/go-trustlog/api/model/crypto_config.go:90.38,90.38 0 1
go.yandata.net/iod/iod/go-trustlog/api/model/crypto_config.go:92.10,93.77 1 1
go.yandata.net/iod/iod/go-trustlog/api/model/crypto_config.go:96.2,96.12 1 1
go.yandata.net/iod/iod/go-trustlog/api/model/crypto_config.go:100.63,101.11 1 1
go.yandata.net/iod/iod/go-trustlog/api/model/crypto_config.go:102.20,103.23 1 1
go.yandata.net/iod/iod/go-trustlog/api/model/crypto_config.go:104.24,105.27 1 1
go.yandata.net/iod/iod/go-trustlog/api/model/crypto_config.go:106.10,107.61 1 0
go.yandata.net/iod/iod/go-trustlog/api/model/crypto_config.go:119.62,120.19 1 1
go.yandata.net/iod/iod/go-trustlog/api/model/crypto_config.go:120.19,122.3 1 0
go.yandata.net/iod/iod/go-trustlog/api/model/crypto_config.go:124.2,130.16 4 1
go.yandata.net/iod/iod/go-trustlog/api/model/crypto_config.go:130.16,132.3 1 0
go.yandata.net/iod/iod/go-trustlog/api/model/crypto_config.go:134.2,135.16 2 1
go.yandata.net/iod/iod/go-trustlog/api/model/crypto_config.go:135.16,141.3 2 0
go.yandata.net/iod/iod/go-trustlog/api/model/crypto_config.go:143.2,151.8 2 1
go.yandata.net/iod/iod/go-trustlog/api/model/crypto_config.go:155.70,156.17 1 1
go.yandata.net/iod/iod/go-trustlog/api/model/crypto_config.go:156.17,158.3 1 1
go.yandata.net/iod/iod/go-trustlog/api/model/crypto_config.go:160.2,167.16 4 1
go.yandata.net/iod/iod/go-trustlog/api/model/crypto_config.go:167.16,173.3 2 0
go.yandata.net/iod/iod/go-trustlog/api/model/crypto_config.go:175.2,179.23 2 1
go.yandata.net/iod/iod/go-trustlog/api/model/crypto_config.go:183.65,192.16 4 1
go.yandata.net/iod/iod/go-trustlog/api/model/crypto_config.go:192.16,198.3 2 0
go.yandata.net/iod/iod/go-trustlog/api/model/crypto_config.go:200.2,200.8 1 1
go.yandata.net/iod/iod/go-trustlog/api/model/crypto_config.go:200.8,204.3 1 1
go.yandata.net/iod/iod/go-trustlog/api/model/crypto_config.go:204.8,208.3 1 1
go.yandata.net/iod/iod/go-trustlog/api/model/crypto_config.go:210.2,210.16 1 1
go.yandata.net/iod/iod/go-trustlog/api/model/crypto_config.go:214.56,215.23 1 1
go.yandata.net/iod/iod/go-trustlog/api/model/crypto_config.go:215.23,217.3 1 0
go.yandata.net/iod/iod/go-trustlog/api/model/crypto_config.go:218.2,218.32 1 1
go.yandata.net/iod/iod/go-trustlog/api/model/crypto_config.go:222.55,223.22 1 1
go.yandata.net/iod/iod/go-trustlog/api/model/crypto_config.go:223.22,225.3 1 0
go.yandata.net/iod/iod/go-trustlog/api/model/crypto_config.go:226.2,226.31 1 1
go.yandata.net/iod/iod/go-trustlog/api/model/crypto_config.go:230.90,232.16 2 1
go.yandata.net/iod/iod/go-trustlog/api/model/crypto_config.go:232.16,234.3 1 0
go.yandata.net/iod/iod/go-trustlog/api/model/crypto_config.go:236.2,236.48 1 1
go.yandata.net/iod/iod/go-trustlog/api/model/crypto_config.go:240.88,242.16 2 1
go.yandata.net/iod/iod/go-trustlog/api/model/crypto_config.go:242.16,244.3 1 0
go.yandata.net/iod/iod/go-trustlog/api/model/crypto_config.go:246.2,246.47 1 1
go.yandata.net/iod/iod/go-trustlog/api/model/crypto_config.go:250.30,252.2 1 1
go.yandata.net/iod/iod/go-trustlog/api/model/crypto_config.go:255.87,256.19 1 1
go.yandata.net/iod/iod/go-trustlog/api/model/crypto_config.go:256.19,258.3 1 0
go.yandata.net/iod/iod/go-trustlog/api/model/crypto_config.go:260.2,267.16 4 1
go.yandata.net/iod/iod/go-trustlog/api/model/crypto_config.go:267.16,269.3 1 0
go.yandata.net/iod/iod/go-trustlog/api/model/crypto_config.go:271.2,272.16 2 1
go.yandata.net/iod/iod/go-trustlog/api/model/crypto_config.go:272.16,274.3 1 0
go.yandata.net/iod/iod/go-trustlog/api/model/crypto_config.go:276.2,280.23 2 1
go.yandata.net/iod/iod/go-trustlog/api/model/crypto_config.go:284.97,285.19 1 1
go.yandata.net/iod/iod/go-trustlog/api/model/crypto_config.go:285.19,287.3 1 0
go.yandata.net/iod/iod/go-trustlog/api/model/crypto_config.go:289.2,296.16 4 1
go.yandata.net/iod/iod/go-trustlog/api/model/crypto_config.go:296.16,298.3 1 0
go.yandata.net/iod/iod/go-trustlog/api/model/crypto_config.go:300.2,301.16 2 1
go.yandata.net/iod/iod/go-trustlog/api/model/crypto_config.go:301.16,303.3 1 0
go.yandata.net/iod/iod/go-trustlog/api/model/crypto_config.go:305.2,309.16 2 1
go.yandata.net/iod/iod/go-trustlog/api/model/envelope.go:31.54,39.2 3 1
go.yandata.net/iod/iod/go-trustlog/api/model/envelope.go:43.72,52.2 3 1
go.yandata.net/iod/iod/go-trustlog/api/model/envelope.go:55.50,63.2 3 1
go.yandata.net/iod/iod/go-trustlog/api/model/envelope.go:68.56,72.2 1 1
go.yandata.net/iod/iod/go-trustlog/api/model/envelope.go:80.53,83.16 3 1
go.yandata.net/iod/iod/go-trustlog/api/model/envelope.go:83.16,86.3 2 1
go.yandata.net/iod/iod/go-trustlog/api/model/envelope.go:88.2,94.64 4 1
go.yandata.net/iod/iod/go-trustlog/api/model/envelope.go:94.64,100.3 2 0
go.yandata.net/iod/iod/go-trustlog/api/model/envelope.go:102.2,105.57 2 1
go.yandata.net/iod/iod/go-trustlog/api/model/envelope.go:105.57,111.3 2 0
go.yandata.net/iod/iod/go-trustlog/api/model/envelope.go:113.2,116.52 2 1
go.yandata.net/iod/iod/go-trustlog/api/model/envelope.go:116.52,122.3 2 0
go.yandata.net/iod/iod/go-trustlog/api/model/envelope.go:124.2,129.20 3 1
go.yandata.net/iod/iod/go-trustlog/api/model/envelope.go:135.56,140.20 3 1
go.yandata.net/iod/iod/go-trustlog/api/model/envelope.go:140.20,143.3 2 1
go.yandata.net/iod/iod/go-trustlog/api/model/envelope.go:145.2,150.16 5 1
go.yandata.net/iod/iod/go-trustlog/api/model/envelope.go:150.16,155.3 2 0
go.yandata.net/iod/iod/go-trustlog/api/model/envelope.go:156.2,163.16 4 1
go.yandata.net/iod/iod/go-trustlog/api/model/envelope.go:163.16,168.3 2 0
go.yandata.net/iod/iod/go-trustlog/api/model/envelope.go:169.2,176.16 4 1
go.yandata.net/iod/iod/go-trustlog/api/model/envelope.go:176.16,181.3 2 0
go.yandata.net/iod/iod/go-trustlog/api/model/envelope.go:182.2,189.16 4 1
go.yandata.net/iod/iod/go-trustlog/api/model/envelope.go:189.16,202.3 2 0
go.yandata.net/iod/iod/go-trustlog/api/model/envelope.go:206.2,215.8 2 1
go.yandata.net/iod/iod/go-trustlog/api/model/envelope.go:224.63,225.20 1 1
go.yandata.net/iod/iod/go-trustlog/api/model/envelope.go:225.20,227.3 1 1
go.yandata.net/iod/iod/go-trustlog/api/model/envelope.go:229.2,233.16 4 1
go.yandata.net/iod/iod/go-trustlog/api/model/envelope.go:233.16,235.3 1 0
go.yandata.net/iod/iod/go-trustlog/api/model/envelope.go:237.2,237.24 1 1
go.yandata.net/iod/iod/go-trustlog/api/model/envelope.go:243.70,244.20 1 1
go.yandata.net/iod/iod/go-trustlog/api/model/envelope.go:244.20,246.3 1 1
go.yandata.net/iod/iod/go-trustlog/api/model/envelope.go:248.2,252.16 4 1
go.yandata.net/iod/iod/go-trustlog/api/model/envelope.go:252.16,254.3 1 1
go.yandata.net/iod/iod/go-trustlog/api/model/envelope.go:257.2,258.16 2 1
go.yandata.net/iod/iod/go-trustlog/api/model/envelope.go:258.16,260.3 1 0
go.yandata.net/iod/iod/go-trustlog/api/model/envelope.go:263.2,264.16 2 1
go.yandata.net/iod/iod/go-trustlog/api/model/envelope.go:264.16,266.3 1 0
go.yandata.net/iod/iod/go-trustlog/api/model/envelope.go:269.2,270.16 2 1
go.yandata.net/iod/iod/go-trustlog/api/model/envelope.go:270.16,274.3 1 0
go.yandata.net/iod/iod/go-trustlog/api/model/envelope.go:278.2,278.32 1 1
go.yandata.net/iod/iod/go-trustlog/api/model/envelope.go:287.73,292.14 3 1
go.yandata.net/iod/iod/go-trustlog/api/model/envelope.go:292.14,295.3 2 1
go.yandata.net/iod/iod/go-trustlog/api/model/envelope.go:297.2,298.22 2 1
go.yandata.net/iod/iod/go-trustlog/api/model/envelope.go:298.22,301.3 2 1
go.yandata.net/iod/iod/go-trustlog/api/model/envelope.go:302.2,309.16 4 1
go.yandata.net/iod/iod/go-trustlog/api/model/envelope.go:309.16,315.3 2 0
go.yandata.net/iod/iod/go-trustlog/api/model/envelope.go:316.2,322.26 2 1
go.yandata.net/iod/iod/go-trustlog/api/model/envelope.go:322.26,325.3 2 1
go.yandata.net/iod/iod/go-trustlog/api/model/envelope.go:326.2,331.16 3 1
go.yandata.net/iod/iod/go-trustlog/api/model/envelope.go:331.16,337.3 2 0
go.yandata.net/iod/iod/go-trustlog/api/model/envelope.go:338.2,354.29 4 1
go.yandata.net/iod/iod/go-trustlog/api/model/envelope.go:359.55,365.14 3 1
go.yandata.net/iod/iod/go-trustlog/api/model/envelope.go:365.14,368.3 2 0
go.yandata.net/iod/iod/go-trustlog/api/model/envelope.go:370.2,371.16 2 1
go.yandata.net/iod/iod/go-trustlog/api/model/envelope.go:371.16,376.3 2 1
go.yandata.net/iod/iod/go-trustlog/api/model/envelope.go:377.2,386.70 3 1
go.yandata.net/iod/iod/go-trustlog/api/model/envelope.go:386.70,392.3 2 0
go.yandata.net/iod/iod/go-trustlog/api/model/envelope.go:393.2,396.12 2 1
go.yandata.net/iod/iod/go-trustlog/api/model/envelope.go:404.77,406.2 1 1
go.yandata.net/iod/iod/go-trustlog/api/model/envelope.go:409.58,411.53 2 1
go.yandata.net/iod/iod/go-trustlog/api/model/envelope.go:411.53,413.3 1 0
go.yandata.net/iod/iod/go-trustlog/api/model/envelope.go:414.2,414.17 1 1
go.yandata.net/iod/iod/go-trustlog/api/model/envelope.go:422.75,424.2 1 1
go.yandata.net/iod/iod/go-trustlog/api/model/envelope.go:427.52,429.57 2 1
go.yandata.net/iod/iod/go-trustlog/api/model/envelope.go:429.57,431.3 1 0
go.yandata.net/iod/iod/go-trustlog/api/model/envelope.go:432.2,432.21 1 1
go.yandata.net/iod/iod/go-trustlog/api/model/envelope.go:442.76,443.26 1 1
go.yandata.net/iod/iod/go-trustlog/api/model/envelope.go:443.26,445.3 1 1
go.yandata.net/iod/iod/go-trustlog/api/model/envelope.go:447.2,448.53 2 1
go.yandata.net/iod/iod/go-trustlog/api/model/envelope.go:454.84,459.26 3 1
go.yandata.net/iod/iod/go-trustlog/api/model/envelope.go:459.26,462.3 2 1
go.yandata.net/iod/iod/go-trustlog/api/model/envelope.go:464.2,465.16 2 1
go.yandata.net/iod/iod/go-trustlog/api/model/envelope.go:465.16,470.3 2 1
go.yandata.net/iod/iod/go-trustlog/api/model/envelope.go:471.2,482.16 4 1
go.yandata.net/iod/iod/go-trustlog/api/model/envelope.go:482.16,488.3 2 1
go.yandata.net/iod/iod/go-trustlog/api/model/envelope.go:490.2,490.12 1 1
go.yandata.net/iod/iod/go-trustlog/api/model/envelope.go:490.12,495.3 2 1
go.yandata.net/iod/iod/go-trustlog/api/model/envelope.go:497.2,500.17 2 1
go.yandata.net/iod/iod/go-trustlog/api/model/hash.go:69.47,71.48 2 1
go.yandata.net/iod/iod/go-trustlog/api/model/hash.go:71.48,74.3 2 1
go.yandata.net/iod/iod/go-trustlog/api/model/hash.go:75.2,80.48 4 1
go.yandata.net/iod/iod/go-trustlog/api/model/hash.go:80.48,82.3 1 0
go.yandata.net/iod/iod/go-trustlog/api/model/hash.go:84.2,86.13 3 1
go.yandata.net/iod/iod/go-trustlog/api/model/hash.go:90.47,92.2 1 1
go.yandata.net/iod/iod/go-trustlog/api/model/hash.go:95.42,96.20 1 1
go.yandata.net/iod/iod/go-trustlog/api/model/hash.go:97.11,98.19 1 1
go.yandata.net/iod/iod/go-trustlog/api/model/hash.go:99.12,100.20 1 1
go.yandata.net/iod/iod/go-trustlog/api/model/hash.go:101.14,102.28 1 1
go.yandata.net/iod/iod/go-trustlog/api/model/hash.go:103.14,104.25 1 1
go.yandata.net/iod/iod/go-trustlog/api/model/hash.go:105.14,106.28 1 1
go.yandata.net/iod/iod/go-trustlog/api/model/hash.go:107.14,108.25 1 1
go.yandata.net/iod/iod/go-trustlog/api/model/hash.go:109.17,110.32 1 0
go.yandata.net/iod/iod/go-trustlog/api/model/hash.go:111.17,112.32 1 0
go.yandata.net/iod/iod/go-trustlog/api/model/hash.go:115.18,116.27 1 1
go.yandata.net/iod/iod/go-trustlog/api/model/hash.go:117.14,118.22 1 1
go.yandata.net/iod/iod/go-trustlog/api/model/hash.go:119.15,121.16 2 0
go.yandata.net/iod/iod/go-trustlog/api/model/hash.go:122.15,124.16 2 0
go.yandata.net/iod/iod/go-trustlog/api/model/hash.go:125.11,126.19 1 0
go.yandata.net/iod/iod/go-trustlog/api/model/hash.go:127.17,128.25 1 0
go.yandata.net/iod/iod/go-trustlog/api/model/hash.go:129.15,130.23 1 0
go.yandata.net/iod/iod/go-trustlog/api/model/hash.go:131.15,132.23 1 0
go.yandata.net/iod/iod/go-trustlog/api/model/hash.go:133.15,134.23 1 0
go.yandata.net/iod/iod/go-trustlog/api/model/hash.go:135.15,136.23 1 0
go.yandata.net/iod/iod/go-trustlog/api/model/hash.go:138.10,139.25 1 0
go.yandata.net/iod/iod/go-trustlog/api/model/hash.go:144.87,146.44 2 1
go.yandata.net/iod/iod/go-trustlog/api/model/hash.go:146.44,148.3 1 0
go.yandata.net/iod/iod/go-trustlog/api/model/hash.go:149.2,149.49 1 1
go.yandata.net/iod/iod/go-trustlog/api/model/hash.go:153.60,154.49 1 1
go.yandata.net/iod/iod/go-trustlog/api/model/hash.go:154.49,157.3 2 1
go.yandata.net/iod/iod/go-trustlog/api/model/hash.go:161.59,162.49 1 1
go.yandata.net/iod/iod/go-trustlog/api/model/hash.go:162.49,165.3 2 1
go.yandata.net/iod/iod/go-trustlog/api/model/hash.go:169.62,171.46 2 0
go.yandata.net/iod/iod/go-trustlog/api/model/hash.go:171.46,173.3 1 0
go.yandata.net/iod/iod/go-trustlog/api/model/hash.go:174.2,174.29 1 0
go.yandata.net/iod/iod/go-trustlog/api/model/hash.go:178.81,180.16 2 1
go.yandata.net/iod/iod/go-trustlog/api/model/hash.go:180.16,182.3 1 1
go.yandata.net/iod/iod/go-trustlog/api/model/hash.go:183.2,185.49 2 1
go.yandata.net/iod/iod/go-trustlog/api/model/hash.go:185.49,188.3 2 1
go.yandata.net/iod/iod/go-trustlog/api/model/hash.go:192.65,193.49 1 1
go.yandata.net/iod/iod/go-trustlog/api/model/hash.go:193.49,196.3 2 1
go.yandata.net/iod/iod/go-trustlog/api/model/hash.go:200.32,211.33 4 1
go.yandata.net/iod/iod/go-trustlog/api/model/hash.go:211.33,215.3 3 1
go.yandata.net/iod/iod/go-trustlog/api/model/hash.go:219.40,222.2 2 1
go.yandata.net/iod/iod/go-trustlog/api/model/hash.go:225.50,228.2 2 1
go.yandata.net/iod/iod/go-trustlog/api/model/hash.go:231.73,233.16 2 1
go.yandata.net/iod/iod/go-trustlog/api/model/hash.go:233.16,235.3 1 0
go.yandata.net/iod/iod/go-trustlog/api/model/hash.go:236.2,236.57 1 1
go.yandata.net/iod/iod/go-trustlog/api/model/hash.go:240.102,242.16 2 1
go.yandata.net/iod/iod/go-trustlog/api/model/hash.go:242.16,244.3 1 1
go.yandata.net/iod/iod/go-trustlog/api/model/hash.go:245.2,245.57 1 1
go.yandata.net/iod/iod/go-trustlog/api/model/hash.go:249.43,251.2 1 1
go.yandata.net/iod/iod/go-trustlog/api/model/hash.go:265.42,267.2 1 1
go.yandata.net/iod/iod/go-trustlog/api/model/operation.go:65.33,66.11 1 0
go.yandata.net/iod/iod/go-trustlog/api/model/operation.go:67.22,68.20 1 0
go.yandata.net/iod/iod/go-trustlog/api/model/operation.go:69.24,70.22 1 0
go.yandata.net/iod/iod/go-trustlog/api/model/operation.go:71.25,72.24 1 0
go.yandata.net/iod/iod/go-trustlog/api/model/operation.go:73.22,74.21 1 0
go.yandata.net/iod/iod/go-trustlog/api/model/operation.go:75.22,76.21 1 0
go.yandata.net/iod/iod/go-trustlog/api/model/operation.go:77.24,78.23 1 0
go.yandata.net/iod/iod/go-trustlog/api/model/operation.go:79.27,80.26 1 0
go.yandata.net/iod/iod/go-trustlog/api/model/operation.go:81.27,82.26 1 0
go.yandata.net/iod/iod/go-trustlog/api/model/operation.go:83.21,84.20 1 0
go.yandata.net/iod/iod/go-trustlog/api/model/operation.go:85.33,86.33 1 0
go.yandata.net/iod/iod/go-trustlog/api/model/operation.go:87.31,88.30 1 0
go.yandata.net/iod/iod/go-trustlog/api/model/operation.go:89.28,90.27 1 0
go.yandata.net/iod/iod/go-trustlog/api/model/operation.go:91.24,92.23 1 0
go.yandata.net/iod/iod/go-trustlog/api/model/operation.go:93.26,94.25 1 0
go.yandata.net/iod/iod/go-trustlog/api/model/operation.go:95.31,96.31 1 0
go.yandata.net/iod/iod/go-trustlog/api/model/operation.go:97.26,98.25 1 0
go.yandata.net/iod/iod/go-trustlog/api/model/operation.go:99.30,100.29 1 0
go.yandata.net/iod/iod/go-trustlog/api/model/operation.go:101.22,102.21 1 0
go.yandata.net/iod/iod/go-trustlog/api/model/operation.go:103.22,104.21 1 0
go.yandata.net/iod/iod/go-trustlog/api/model/operation.go:105.26,106.26 1 0
go.yandata.net/iod/iod/go-trustlog/api/model/operation.go:107.27,108.27 1 0
go.yandata.net/iod/iod/go-trustlog/api/model/operation.go:109.10,110.39 1 0
go.yandata.net/iod/iod/go-trustlog/api/model/operation.go:115.32,127.35 2 0
go.yandata.net/iod/iod/go-trustlog/api/model/operation.go:127.35,128.17 1 0
go.yandata.net/iod/iod/go-trustlog/api/model/operation.go:128.17,130.4 1 0
go.yandata.net/iod/iod/go-trustlog/api/model/operation.go:132.2,132.14 1 0
go.yandata.net/iod/iod/go-trustlog/api/model/operation.go:176.23,199.60 5 1
go.yandata.net/iod/iod/go-trustlog/api/model/operation.go:199.60,204.3 2 0
go.yandata.net/iod/iod/go-trustlog/api/model/operation.go:205.2,206.62 2 1
go.yandata.net/iod/iod/go-trustlog/api/model/operation.go:206.62,211.3 2 0
go.yandata.net/iod/iod/go-trustlog/api/model/operation.go:212.2,213.42 2 1
go.yandata.net/iod/iod/go-trustlog/api/model/operation.go:213.42,218.3 2 0
go.yandata.net/iod/iod/go-trustlog/api/model/operation.go:220.2,223.16 2 1
go.yandata.net/iod/iod/go-trustlog/api/model/operation.go:230.34,232.2 1 1
go.yandata.net/iod/iod/go-trustlog/api/model/operation.go:240.41,242.2 1 1
go.yandata.net/iod/iod/go-trustlog/api/model/operation.go:244.42,246.2 1 1
go.yandata.net/iod/iod/go-trustlog/api/model/operation.go:248.44,250.2 1 1
go.yandata.net/iod/iod/go-trustlog/api/model/operation.go:254.65,261.16 5 1
go.yandata.net/iod/iod/go-trustlog/api/model/operation.go:261.16,267.3 2 0
go.yandata.net/iod/iod/go-trustlog/api/model/operation.go:269.2,274.16 3 1
go.yandata.net/iod/iod/go-trustlog/api/model/operation.go:274.16,280.3 2 0
go.yandata.net/iod/iod/go-trustlog/api/model/operation.go:282.2,289.8 2 1
go.yandata.net/iod/iod/go-trustlog/api/model/operation.go:313.54,327.2 1 1
go.yandata.net/iod/iod/go-trustlog/api/model/operation.go:330.62,331.19 1 1
go.yandata.net/iod/iod/go-trustlog/api/model/operation.go:331.19,333.3 1 0
go.yandata.net/iod/iod/go-trustlog/api/model/operation.go:335.2,335.24 1 1
go.yandata.net/iod/iod/go-trustlog/api/model/operation.go:335.24,337.3 1 1
go.yandata.net/iod/iod/go-trustlog/api/model/operation.go:338.2,338.29 1 1
go.yandata.net/iod/iod/go-trustlog/api/model/operation.go:338.29,340.3 1 1
go.yandata.net/iod/iod/go-trustlog/api/model/operation.go:341.2,341.28 1 1
go.yandata.net/iod/iod/go-trustlog/api/model/operation.go:341.28,343.3 1 1
go.yandata.net/iod/iod/go-trustlog/api/model/operation.go:344.2,344.26 1 1
go.yandata.net/iod/iod/go-trustlog/api/model/operation.go:344.26,346.3 1 1
go.yandata.net/iod/iod/go-trustlog/api/model/operation.go:347.2,347.28 1 1
go.yandata.net/iod/iod/go-trustlog/api/model/operation.go:347.28,349.3 1 1
go.yandata.net/iod/iod/go-trustlog/api/model/operation.go:350.2,350.32 1 1
go.yandata.net/iod/iod/go-trustlog/api/model/operation.go:350.32,352.3 1 1
go.yandata.net/iod/iod/go-trustlog/api/model/operation.go:353.2,353.24 1 1
go.yandata.net/iod/iod/go-trustlog/api/model/operation.go:353.24,355.3 1 1
go.yandata.net/iod/iod/go-trustlog/api/model/operation.go:356.2,356.30 1 1
go.yandata.net/iod/iod/go-trustlog/api/model/operation.go:356.30,358.3 1 1
go.yandata.net/iod/iod/go-trustlog/api/model/operation.go:359.2,359.27 1 1
go.yandata.net/iod/iod/go-trustlog/api/model/operation.go:359.27,361.3 1 1
go.yandata.net/iod/iod/go-trustlog/api/model/operation.go:362.2,362.35 1 1
go.yandata.net/iod/iod/go-trustlog/api/model/operation.go:362.35,365.3 2 0
go.yandata.net/iod/iod/go-trustlog/api/model/operation.go:366.2,366.36 1 1
go.yandata.net/iod/iod/go-trustlog/api/model/operation.go:366.36,369.3 2 0
go.yandata.net/iod/iod/go-trustlog/api/model/operation.go:375.53,380.21 3 1
go.yandata.net/iod/iod/go-trustlog/api/model/operation.go:380.21,385.3 2 0
go.yandata.net/iod/iod/go-trustlog/api/model/operation.go:387.2,393.16 4 1
go.yandata.net/iod/iod/go-trustlog/api/model/operation.go:393.16,399.3 2 0
go.yandata.net/iod/iod/go-trustlog/api/model/operation.go:401.2,407.20 3 1
go.yandata.net/iod/iod/go-trustlog/api/model/operation.go:411.44,413.2 1 1
go.yandata.net/iod/iod/go-trustlog/api/model/operation.go:417.56,422.20 3 1
go.yandata.net/iod/iod/go-trustlog/api/model/operation.go:422.20,425.3 2 1
go.yandata.net/iod/iod/go-trustlog/api/model/operation.go:427.2,430.56 3 1
go.yandata.net/iod/iod/go-trustlog/api/model/operation.go:430.56,435.3 2 1
go.yandata.net/iod/iod/go-trustlog/api/model/operation.go:437.2,444.12 4 1
go.yandata.net/iod/iod/go-trustlog/api/model/operation.go:454.82,460.17 3 1
go.yandata.net/iod/iod/go-trustlog/api/model/operation.go:460.17,464.3 3 1
go.yandata.net/iod/iod/go-trustlog/api/model/operation.go:466.2,469.26 3 1
go.yandata.net/iod/iod/go-trustlog/api/model/operation.go:470.14,471.14 1 1
go.yandata.net/iod/iod/go-trustlog/api/model/operation.go:471.14,475.4 3 1
go.yandata.net/iod/iod/go-trustlog/api/model/operation.go:476.3,479.4 2 1
go.yandata.net/iod/iod/go-trustlog/api/model/operation.go:480.14,481.18 1 1
go.yandata.net/iod/iod/go-trustlog/api/model/operation.go:481.18,485.4 3 1
go.yandata.net/iod/iod/go-trustlog/api/model/operation.go:486.3,489.4 2 1
go.yandata.net/iod/iod/go-trustlog/api/model/operation.go:490.10,494.51 2 1
go.yandata.net/iod/iod/go-trustlog/api/model/operation.go:497.2,501.16 3 1
go.yandata.net/iod/iod/go-trustlog/api/model/operation.go:501.16,506.3 2 0
go.yandata.net/iod/iod/go-trustlog/api/model/operation.go:508.2,512.12 3 1
go.yandata.net/iod/iod/go-trustlog/api/model/operation.go:517.65,519.2 1 1
go.yandata.net/iod/iod/go-trustlog/api/model/operation.go:523.66,525.2 1 1
go.yandata.net/iod/iod/go-trustlog/api/model/operation.go:532.61,535.2 2 1
go.yandata.net/iod/iod/go-trustlog/api/model/operation.go:538.62,541.2 2 1
go.yandata.net/iod/iod/go-trustlog/api/model/operation.go:550.42,557.18 3 1
go.yandata.net/iod/iod/go-trustlog/api/model/operation.go:557.18,562.3 2 1
go.yandata.net/iod/iod/go-trustlog/api/model/operation.go:564.2,564.21 1 1
go.yandata.net/iod/iod/go-trustlog/api/model/operation.go:564.21,567.3 2 1
go.yandata.net/iod/iod/go-trustlog/api/model/operation.go:569.2,570.48 2 1
go.yandata.net/iod/iod/go-trustlog/api/model/operation.go:570.48,576.3 2 1
go.yandata.net/iod/iod/go-trustlog/api/model/operation.go:578.2,579.57 2 1
go.yandata.net/iod/iod/go-trustlog/api/model/operation.go:579.57,585.3 2 0
go.yandata.net/iod/iod/go-trustlog/api/model/operation.go:587.2,590.12 2 1
go.yandata.net/iod/iod/go-trustlog/api/model/proof.go:25.50,26.20 1 1
go.yandata.net/iod/iod/go-trustlog/api/model/proof.go:26.20,28.3 1 1
go.yandata.net/iod/iod/go-trustlog/api/model/proof.go:30.2,36.62 2 1
go.yandata.net/iod/iod/go-trustlog/api/model/proof.go:36.62,38.35 2 1
go.yandata.net/iod/iod/go-trustlog/api/model/proof.go:38.35,44.4 1 1
go.yandata.net/iod/iod/go-trustlog/api/model/proof.go:48.2,48.62 1 1
go.yandata.net/iod/iod/go-trustlog/api/model/proof.go:48.62,50.35 2 1
go.yandata.net/iod/iod/go-trustlog/api/model/proof.go:50.35,56.4 1 1
go.yandata.net/iod/iod/go-trustlog/api/model/proof.go:60.2,60.71 1 1
go.yandata.net/iod/iod/go-trustlog/api/model/proof.go:60.71,62.38 2 1
go.yandata.net/iod/iod/go-trustlog/api/model/proof.go:62.38,68.4 1 1
go.yandata.net/iod/iod/go-trustlog/api/model/proof.go:72.2,72.71 1 1
go.yandata.net/iod/iod/go-trustlog/api/model/proof.go:72.71,74.38 2 1
go.yandata.net/iod/iod/go-trustlog/api/model/proof.go:74.38,80.4 1 1
go.yandata.net/iod/iod/go-trustlog/api/model/proof.go:83.2,83.14 1 1
go.yandata.net/iod/iod/go-trustlog/api/model/proof.go:87.46,88.18 1 1
go.yandata.net/iod/iod/go-trustlog/api/model/proof.go:88.18,90.3 1 1
go.yandata.net/iod/iod/go-trustlog/api/model/proof.go:92.2,98.29 2 1
go.yandata.net/iod/iod/go-trustlog/api/model/proof.go:98.29,100.39 2 1
go.yandata.net/iod/iod/go-trustlog/api/model/proof.go:100.39,106.4 1 1
go.yandata.net/iod/iod/go-trustlog/api/model/proof.go:110.2,110.29 1 1
go.yandata.net/iod/iod/go-trustlog/api/model/proof.go:110.29,112.39 2 1
go.yandata.net/iod/iod/go-trustlog/api/model/proof.go:112.39,118.4 1 1
go.yandata.net/iod/iod/go-trustlog/api/model/proof.go:122.2,122.32 1 1
go.yandata.net/iod/iod/go-trustlog/api/model/proof.go:122.32,124.42 2 1
go.yandata.net/iod/iod/go-trustlog/api/model/proof.go:124.42,130.4 1 1
go.yandata.net/iod/iod/go-trustlog/api/model/proof.go:134.2,134.32 1 1
go.yandata.net/iod/iod/go-trustlog/api/model/proof.go:134.32,136.42 2 1
go.yandata.net/iod/iod/go-trustlog/api/model/proof.go:136.42,142.4 1 1
go.yandata.net/iod/iod/go-trustlog/api/model/proof.go:145.2,145.16 1 1
go.yandata.net/iod/iod/go-trustlog/api/model/record.go:39.20,58.46 5 1
go.yandata.net/iod/iod/go-trustlog/api/model/record.go:58.46,63.3 2 1
go.yandata.net/iod/iod/go-trustlog/api/model/record.go:65.2,68.20 2 1
go.yandata.net/iod/iod/go-trustlog/api/model/record.go:75.31,77.2 1 1
go.yandata.net/iod/iod/go-trustlog/api/model/record.go:85.38,87.2 1 1
go.yandata.net/iod/iod/go-trustlog/api/model/record.go:89.39,91.2 1 1
go.yandata.net/iod/iod/go-trustlog/api/model/record.go:93.41,95.2 1 1
go.yandata.net/iod/iod/go-trustlog/api/model/record.go:99.62,106.16 5 1
go.yandata.net/iod/iod/go-trustlog/api/model/record.go:106.16,112.3 2 0
go.yandata.net/iod/iod/go-trustlog/api/model/record.go:114.2,119.16 3 1
go.yandata.net/iod/iod/go-trustlog/api/model/record.go:119.16,125.3 2 0
go.yandata.net/iod/iod/go-trustlog/api/model/record.go:127.2,134.8 2 1
go.yandata.net/iod/iod/go-trustlog/api/model/record.go:154.45,164.2 1 1
go.yandata.net/iod/iod/go-trustlog/api/model/record.go:167.54,168.20 1 1
go.yandata.net/iod/iod/go-trustlog/api/model/record.go:168.20,170.3 1 0
go.yandata.net/iod/iod/go-trustlog/api/model/record.go:172.2,172.23 1 1
go.yandata.net/iod/iod/go-trustlog/api/model/record.go:172.23,174.3 1 1
go.yandata.net/iod/iod/go-trustlog/api/model/record.go:175.2,175.29 1 1
go.yandata.net/iod/iod/go-trustlog/api/model/record.go:175.29,177.3 1 1
go.yandata.net/iod/iod/go-trustlog/api/model/record.go:178.2,178.31 1 1
go.yandata.net/iod/iod/go-trustlog/api/model/record.go:178.31,180.3 1 1
go.yandata.net/iod/iod/go-trustlog/api/model/record.go:181.2,181.30 1 1
go.yandata.net/iod/iod/go-trustlog/api/model/record.go:181.30,183.3 1 1
go.yandata.net/iod/iod/go-trustlog/api/model/record.go:184.2,184.29 1 1
go.yandata.net/iod/iod/go-trustlog/api/model/record.go:184.29,186.3 1 1
go.yandata.net/iod/iod/go-trustlog/api/model/record.go:187.2,187.26 1 1
go.yandata.net/iod/iod/go-trustlog/api/model/record.go:187.26,189.3 1 1
go.yandata.net/iod/iod/go-trustlog/api/model/record.go:190.2,190.27 1 1
go.yandata.net/iod/iod/go-trustlog/api/model/record.go:190.27,192.3 1 1
go.yandata.net/iod/iod/go-trustlog/api/model/record.go:198.50,203.21 3 1
go.yandata.net/iod/iod/go-trustlog/api/model/record.go:203.21,208.3 2 0
go.yandata.net/iod/iod/go-trustlog/api/model/record.go:210.2,216.16 4 1
go.yandata.net/iod/iod/go-trustlog/api/model/record.go:216.16,222.3 2 0
go.yandata.net/iod/iod/go-trustlog/api/model/record.go:224.2,230.20 3 1
go.yandata.net/iod/iod/go-trustlog/api/model/record.go:235.53,240.20 3 1
go.yandata.net/iod/iod/go-trustlog/api/model/record.go:240.20,243.3 2 1
go.yandata.net/iod/iod/go-trustlog/api/model/record.go:245.2,248.57 3 1
go.yandata.net/iod/iod/go-trustlog/api/model/record.go:248.57,253.3 2 0
go.yandata.net/iod/iod/go-trustlog/api/model/record.go:255.2,262.12 4 1
go.yandata.net/iod/iod/go-trustlog/api/model/record.go:266.39,268.2 1 1
go.yandata.net/iod/iod/go-trustlog/api/model/record.go:271.41,273.2 1 1
go.yandata.net/iod/iod/go-trustlog/api/model/record.go:281.39,287.16 3 1
go.yandata.net/iod/iod/go-trustlog/api/model/record.go:287.16,292.3 2 1
go.yandata.net/iod/iod/go-trustlog/api/model/record.go:294.2,294.26 1 1
go.yandata.net/iod/iod/go-trustlog/api/model/record.go:294.26,299.3 2 0
go.yandata.net/iod/iod/go-trustlog/api/model/record.go:301.2,302.57 2 1
go.yandata.net/iod/iod/go-trustlog/api/model/record.go:302.57,308.3 2 1
go.yandata.net/iod/iod/go-trustlog/api/model/record.go:310.2,313.12 2 1
go.yandata.net/iod/iod/go-trustlog/api/model/record.go:321.56,324.2 2 1
go.yandata.net/iod/iod/go-trustlog/api/model/record.go:327.61,330.2 2 1
go.yandata.net/iod/iod/go-trustlog/api/model/record.go:333.56,336.2 2 1
go.yandata.net/iod/iod/go-trustlog/api/model/record.go:339.50,342.2 2 1
go.yandata.net/iod/iod/go-trustlog/api/model/record.go:345.52,348.2 2 1
go.yandata.net/iod/iod/go-trustlog/api/model/signature.go:28.67,35.29 3 1
go.yandata.net/iod/iod/go-trustlog/api/model/signature.go:35.29,38.3 2 1
go.yandata.net/iod/iod/go-trustlog/api/model/signature.go:40.2,40.20 1 1
go.yandata.net/iod/iod/go-trustlog/api/model/signature.go:40.20,43.3 2 1
go.yandata.net/iod/iod/go-trustlog/api/model/signature.go:46.2,48.16 3 1
go.yandata.net/iod/iod/go-trustlog/api/model/signature.go:48.16,54.3 2 1
go.yandata.net/iod/iod/go-trustlog/api/model/signature.go:56.2,56.23 1 1
go.yandata.net/iod/iod/go-trustlog/api/model/signature.go:56.23,59.3 2 0
go.yandata.net/iod/iod/go-trustlog/api/model/signature.go:62.2,64.16 3 1
go.yandata.net/iod/iod/go-trustlog/api/model/signature.go:64.16,70.3 2 0
go.yandata.net/iod/iod/go-trustlog/api/model/signature.go:72.2,76.23 2 1
go.yandata.net/iod/iod/go-trustlog/api/model/signature.go:89.74,97.28 3 1
go.yandata.net/iod/iod/go-trustlog/api/model/signature.go:97.28,100.3 2 1
go.yandata.net/iod/iod/go-trustlog/api/model/signature.go:102.2,102.20 1 1
go.yandata.net/iod/iod/go-trustlog/api/model/signature.go:102.20,105.3 2 1
go.yandata.net/iod/iod/go-trustlog/api/model/signature.go:107.2,107.25 1 1
go.yandata.net/iod/iod/go-trustlog/api/model/signature.go:107.25,110.3 2 0
go.yandata.net/iod/iod/go-trustlog/api/model/signature.go:113.2,115.16 3 1
go.yandata.net/iod/iod/go-trustlog/api/model/signature.go:115.16,121.3 2 1
go.yandata.net/iod/iod/go-trustlog/api/model/signature.go:124.2,126.16 3 1
go.yandata.net/iod/iod/go-trustlog/api/model/signature.go:126.16,133.3 2 0
go.yandata.net/iod/iod/go-trustlog/api/model/signature.go:134.2,134.9 1 1
go.yandata.net/iod/iod/go-trustlog/api/model/signature.go:134.9,143.3 2 1
go.yandata.net/iod/iod/go-trustlog/api/model/signature.go:144.2,147.18 2 1
go.yandata.net/iod/iod/go-trustlog/api/model/signature.go:155.48,159.16 4 1
go.yandata.net/iod/iod/go-trustlog/api/model/signature.go:159.16,162.3 2 0
go.yandata.net/iod/iod/go-trustlog/api/model/signature.go:164.2,164.17 1 1
go.yandata.net/iod/iod/go-trustlog/api/model/signature.go:164.17,167.3 2 0
go.yandata.net/iod/iod/go-trustlog/api/model/signature.go:169.2,173.8 2 1
go.yandata.net/iod/iod/go-trustlog/api/model/signature.go:184.65,187.17 3 1
go.yandata.net/iod/iod/go-trustlog/api/model/signature.go:187.17,190.3 2 1
go.yandata.net/iod/iod/go-trustlog/api/model/signature.go:192.2,196.17 3 1
go.yandata.net/iod/iod/go-trustlog/api/model/signature.go:201.62,206.19 3 1
go.yandata.net/iod/iod/go-trustlog/api/model/signature.go:206.19,209.3 2 1
go.yandata.net/iod/iod/go-trustlog/api/model/signature.go:211.2,212.16 2 1
go.yandata.net/iod/iod/go-trustlog/api/model/signature.go:212.16,218.3 2 1
go.yandata.net/iod/iod/go-trustlog/api/model/signature.go:219.2,220.17 2 1
go.yandata.net/iod/iod/go-trustlog/api/model/signature.go:225.62,228.16 3 1
go.yandata.net/iod/iod/go-trustlog/api/model/signature.go:228.16,231.3 2 1
go.yandata.net/iod/iod/go-trustlog/api/model/signature.go:233.2,237.17 3 1
go.yandata.net/iod/iod/go-trustlog/api/model/signature.go:243.60,248.19 3 1
go.yandata.net/iod/iod/go-trustlog/api/model/signature.go:248.19,251.3 2 1
go.yandata.net/iod/iod/go-trustlog/api/model/signature.go:253.2,254.16 2 1
go.yandata.net/iod/iod/go-trustlog/api/model/signature.go:254.16,260.3 2 1
go.yandata.net/iod/iod/go-trustlog/api/model/signature.go:262.2,263.23 2 1
go.yandata.net/iod/iod/go-trustlog/api/model/signature.go:268.63,273.23 3 1
go.yandata.net/iod/iod/go-trustlog/api/model/signature.go:273.23,276.3 2 0
go.yandata.net/iod/iod/go-trustlog/api/model/signature.go:278.2,279.16 2 1
go.yandata.net/iod/iod/go-trustlog/api/model/signature.go:279.16,285.3 2 0
go.yandata.net/iod/iod/go-trustlog/api/model/signature.go:286.2,290.23 2 1
go.yandata.net/iod/iod/go-trustlog/api/model/signature.go:296.63,302.23 3 0
go.yandata.net/iod/iod/go-trustlog/api/model/signature.go:302.23,305.3 2 0
go.yandata.net/iod/iod/go-trustlog/api/model/signature.go:308.2,309.16 2 0
go.yandata.net/iod/iod/go-trustlog/api/model/signature.go:309.16,315.3 2 0
go.yandata.net/iod/iod/go-trustlog/api/model/signature.go:316.2,320.23 2 0
go.yandata.net/iod/iod/go-trustlog/api/model/signature.go:326.68,332.22 3 1
go.yandata.net/iod/iod/go-trustlog/api/model/signature.go:332.22,335.3 2 0
go.yandata.net/iod/iod/go-trustlog/api/model/signature.go:337.2,338.16 2 1
go.yandata.net/iod/iod/go-trustlog/api/model/signature.go:338.16,344.3 2 0
go.yandata.net/iod/iod/go-trustlog/api/model/signature.go:345.2,345.8 1 1
go.yandata.net/iod/iod/go-trustlog/api/model/signature.go:345.8,349.3 1 1
go.yandata.net/iod/iod/go-trustlog/api/model/signature.go:349.8,354.3 1 1
go.yandata.net/iod/iod/go-trustlog/api/model/signature.go:355.2,355.16 1 1
go.yandata.net/iod/iod/go-trustlog/api/model/signature.go:361.68,368.22 3 0
go.yandata.net/iod/iod/go-trustlog/api/model/signature.go:368.22,371.3 2 0
go.yandata.net/iod/iod/go-trustlog/api/model/signature.go:374.2,375.16 2 0
go.yandata.net/iod/iod/go-trustlog/api/model/signature.go:375.16,381.3 2 0
go.yandata.net/iod/iod/go-trustlog/api/model/signature.go:382.2,382.8 1 0
go.yandata.net/iod/iod/go-trustlog/api/model/signature.go:382.8,386.3 1 0
go.yandata.net/iod/iod/go-trustlog/api/model/signature.go:386.8,391.3 1 0
go.yandata.net/iod/iod/go-trustlog/api/model/signature.go:392.2,392.16 1 0
go.yandata.net/iod/iod/go-trustlog/api/model/signer.go:52.60,62.2 3 1
go.yandata.net/iod/iod/go-trustlog/api/model/signer.go:65.55,72.16 4 1
go.yandata.net/iod/iod/go-trustlog/api/model/signer.go:72.16,78.3 2 0
go.yandata.net/iod/iod/go-trustlog/api/model/signer.go:79.2,83.23 2 1
go.yandata.net/iod/iod/go-trustlog/api/model/signer.go:89.66,97.16 4 1
go.yandata.net/iod/iod/go-trustlog/api/model/signer.go:97.16,104.3 2 1
go.yandata.net/iod/iod/go-trustlog/api/model/signer.go:105.2,105.11 1 1
go.yandata.net/iod/iod/go-trustlog/api/model/signer.go:105.11,109.3 1 1
go.yandata.net/iod/iod/go-trustlog/api/model/signer.go:109.8,114.3 1 0
go.yandata.net/iod/iod/go-trustlog/api/model/signer.go:115.2,115.19 1 1
go.yandata.net/iod/iod/go-trustlog/api/model/signer.go:124.32,128.2 3 1
go.yandata.net/iod/iod/go-trustlog/api/model/signer.go:131.55,140.2 5 1
go.yandata.net/iod/iod/go-trustlog/api/model/signer.go:143.66,150.11 4 1
go.yandata.net/iod/iod/go-trustlog/api/model/signer.go:150.11,154.3 1 1
go.yandata.net/iod/iod/go-trustlog/api/model/signer.go:154.8,159.3 1 1
go.yandata.net/iod/iod/go-trustlog/api/model/signer.go:160.2,160.19 1 1
go.yandata.net/iod/iod/go-trustlog/api/model/validation.go:20.48,22.2 1 1
go.yandata.net/iod/iod/go-trustlog/api/model/validation.go:25.47,27.2 1 1
go.yandata.net/iod/iod/go-trustlog/api/model/validation.go:30.44,32.2 1 1

525
coverage_persistence Normal file
View File

@@ -0,0 +1,525 @@
mode: set
go.yandata.net/iod/iod/go-trustlog/api/persistence/client.go:20.93,22.2 1 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/client.go:58.108,59.26 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/client.go:59.26,61.3 1 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/client.go:64.2,65.16 2 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/client.go:65.16,70.3 2 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/client.go:73.2,76.76 2 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/client.go:76.76,79.3 2 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/client.go:81.2,95.93 4 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/client.go:95.93,97.39 2 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/client.go:97.39,99.4 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/client.go:99.9,101.4 1 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/client.go:104.3,107.56 3 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/client.go:107.56,110.4 2 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/client.go:112.3,115.4 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/client.go:119.2,119.92 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/client.go:119.92,121.38 2 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/client.go:121.38,123.4 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/client.go:123.9,125.4 1 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/client.go:127.3,133.4 3 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/client.go:136.2,142.20 2 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/client.go:147.101,148.22 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/client.go:148.22,151.3 2 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/client.go:153.2,161.18 3 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/client.go:162.22,164.41 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/client.go:166.29,168.48 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/client.go:170.28,172.47 1 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/client.go:174.10,175.75 1 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/client.go:180.98,186.64 2 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/client.go:186.64,192.3 2 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/client.go:194.2,197.12 2 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/client.go:201.105,207.64 2 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/client.go:207.64,213.3 2 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/client.go:216.2,216.60 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/client.go:216.60,223.3 2 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/client.go:226.2,226.106 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/client.go:226.106,232.3 1 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/client.go:235.2,240.12 3 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/client.go:244.104,250.60 2 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/client.go:250.60,256.3 2 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/client.go:258.2,261.12 2 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/client.go:265.102,274.16 4 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/client.go:274.16,280.3 2 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/client.go:282.2,293.87 4 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/client.go:293.87,300.3 2 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/client.go:302.2,306.12 2 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/client.go:310.92,311.19 1 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/client.go:311.19,314.3 2 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/client.go:316.2,325.16 4 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/client.go:325.16,331.3 2 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/client.go:333.2,334.84 2 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/client.go:334.84,340.3 2 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/client.go:342.2,346.12 2 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/client.go:350.56,352.2 1 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/client.go:355.62,357.2 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/client.go:360.43,365.27 3 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/client.go:365.27,366.50 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/client.go:366.50,370.4 1 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/client.go:374.2,374.26 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/client.go:374.26,376.3 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/client.go:379.2,379.42 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/client.go:379.42,384.3 2 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/client.go:387.2,387.24 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/client.go:387.24,388.45 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/client.go:388.45,393.4 2 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/client.go:396.2,397.12 2 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/client.go:401.125,402.22 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/client.go:402.22,404.3 1 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/client.go:406.2,407.17 2 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/client.go:407.17,409.3 1 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/client.go:411.2,411.29 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/client.go:415.109,416.22 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/client.go:416.22,418.3 1 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/client.go:420.2,421.17 2 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/client.go:421.17,423.3 1 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/client.go:425.2,425.29 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/client.go:429.122,430.22 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/client.go:430.22,432.3 1 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/client.go:434.2,435.17 2 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/client.go:435.17,437.3 1 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/client.go:439.2,439.33 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/config.go:26.55,35.2 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/config.go:38.46,40.16 2 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/config.go:40.16,42.3 1 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/config.go:45.2,51.34 5 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/config.go:51.34,54.3 2 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/config.go:56.2,56.16 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/cursor_worker.go:34.54,49.2 1 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/cursor_worker.go:66.53,74.2 1 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/cursor_worker.go:87.92,88.30 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/cursor_worker.go:88.30,90.3 1 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/cursor_worker.go:91.2,91.27 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/cursor_worker.go:91.27,93.3 1 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/cursor_worker.go:94.2,94.28 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/cursor_worker.go:94.28,96.3 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/cursor_worker.go:97.2,97.33 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/cursor_worker.go:97.33,99.3 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/cursor_worker.go:103.2,108.3 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/cursor_worker.go:112.57,113.23 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/cursor_worker.go:113.23,116.3 2 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/cursor_worker.go:118.2,125.42 2 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/cursor_worker.go:125.42,127.3 1 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/cursor_worker.go:130.2,132.12 2 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/cursor_worker.go:136.56,140.2 3 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/cursor_worker.go:143.49,147.6 3 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/cursor_worker.go:147.6,148.10 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/cursor_worker.go:149.19,151.10 2 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/cursor_worker.go:152.19,153.15 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/cursor_worker.go:159.50,166.16 3 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/cursor_worker.go:166.16,171.3 2 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/cursor_worker.go:173.2,182.16 3 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/cursor_worker.go:182.16,187.3 2 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/cursor_worker.go:188.2,191.16 3 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/cursor_worker.go:191.16,196.3 2 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/cursor_worker.go:198.2,198.26 1 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/cursor_worker.go:198.26,202.3 3 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/cursor_worker.go:204.2,211.32 3 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/cursor_worker.go:211.32,212.42 1 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/cursor_worker.go:212.42,214.4 1 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/cursor_worker.go:217.3,217.20 1 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/cursor_worker.go:217.20,218.38 1 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/cursor_worker.go:218.38,224.5 2 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/cursor_worker.go:227.4,230.18 2 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/cursor_worker.go:230.18,235.5 2 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/cursor_worker.go:236.4,236.23 1 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/cursor_worker.go:241.2,241.36 1 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/cursor_worker.go:241.36,246.3 2 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/cursor_worker.go:248.2,251.3 1 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/cursor_worker.go:255.62,266.40 5 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/cursor_worker.go:266.40,270.3 1 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/cursor_worker.go:272.2,273.24 2 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/cursor_worker.go:273.24,280.3 2 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/cursor_worker.go:280.8,286.3 2 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/cursor_worker.go:288.2,289.16 2 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/cursor_worker.go:289.16,291.3 1 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/cursor_worker.go:293.2,298.12 2 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/cursor_worker.go:302.71,306.16 3 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/cursor_worker.go:306.16,308.3 1 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/cursor_worker.go:311.2,311.18 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/cursor_worker.go:311.18,313.3 1 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/cursor_worker.go:315.2,315.20 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/cursor_worker.go:319.78,323.16 3 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/cursor_worker.go:323.16,325.3 1 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/cursor_worker.go:327.2,332.12 2 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/cursor_worker.go:336.136,353.16 3 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/cursor_worker.go:353.16,355.3 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/cursor_worker.go:356.2,360.18 4 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/cursor_worker.go:360.18,371.17 5 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/cursor_worker.go:371.17,373.4 1 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/cursor_worker.go:376.3,376.21 1 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/cursor_worker.go:376.21,378.4 1 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/cursor_worker.go:379.3,379.21 1 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/cursor_worker.go:379.21,381.4 1 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/cursor_worker.go:382.3,385.33 3 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/cursor_worker.go:388.2,388.31 1 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/cursor_worker.go:392.41,393.14 1 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/cursor_worker.go:393.14,395.3 1 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/cursor_worker.go:396.2,396.11 1 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/cursor_worker.go:400.106,415.16 3 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/cursor_worker.go:415.16,417.3 1 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/cursor_worker.go:418.2,421.18 3 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/cursor_worker.go:421.18,432.17 5 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/cursor_worker.go:432.17,434.4 1 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/cursor_worker.go:437.3,437.21 1 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/cursor_worker.go:437.21,439.4 1 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/cursor_worker.go:440.3,440.21 1 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/cursor_worker.go:440.21,442.4 1 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/cursor_worker.go:443.3,445.38 2 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/cursor_worker.go:448.2,448.24 1 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/cursor_worker.go:453.104,460.16 3 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/cursor_worker.go:460.16,469.100 4 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/cursor_worker.go:469.100,474.4 1 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/cursor_worker.go:476.3,476.15 1 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/cursor_worker.go:480.2,482.16 3 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/cursor_worker.go:482.16,488.3 2 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/cursor_worker.go:490.2,490.14 1 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/cursor_worker.go:490.14,496.3 2 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/cursor_worker.go:498.2,504.13 3 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/cursor_worker.go:508.83,515.67 3 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/cursor_worker.go:515.67,516.18 1 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/cursor_worker.go:516.18,521.4 1 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/cursor_worker.go:523.3,524.17 2 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/cursor_worker.go:524.17,526.83 1 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/cursor_worker.go:526.83,531.5 1 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/cursor_worker.go:531.10,535.5 1 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/cursor_worker.go:538.4,539.10 2 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/cursor_worker.go:542.3,543.41 2 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/cursor_worker.go:543.41,545.4 1 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/cursor_worker.go:549.2,556.87 4 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/cursor_worker.go:556.87,561.3 1 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/cursor_worker.go:564.2,564.60 1 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/cursor_worker.go:568.84,570.22 2 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/cursor_worker.go:570.22,572.3 1 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/cursor_worker.go:575.2,578.56 2 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/cursor_worker.go:578.56,580.3 1 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/cursor_worker.go:582.2,582.12 1 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/cursor_worker.go:586.109,589.2 2 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:143.42,144.15 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:144.15,146.3 1 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:148.2,150.70 3 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:150.70,152.3 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:153.2,153.18 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:157.68,158.30 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:158.30,162.35 3 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:162.35,163.23 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:163.23,166.5 2 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:166.10,168.5 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:170.3,170.16 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:173.2,173.14 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:177.80,184.2 2 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:187.72,189.2 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:191.107,193.2 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:195.121,206.31 3 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:206.31,208.3 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:209.2,209.32 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:209.32,211.3 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:212.2,212.24 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:212.24,214.3 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:215.2,215.24 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:215.24,217.3 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:219.2,237.15 3 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:237.15,239.3 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:239.8,241.3 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:243.2,243.16 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:243.16,249.3 2 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:251.2,255.12 2 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:258.107,260.2 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:262.121,266.15 3 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:266.15,268.3 1 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:268.8,270.3 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:272.2,272.16 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:272.16,279.3 2 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:281.2,285.12 2 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:288.116,320.26 6 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:320.26,322.3 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:323.2,323.16 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:323.16,329.3 2 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:331.2,331.19 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:331.19,333.3 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:334.2,334.20 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:334.20,336.3 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:337.2,337.20 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:337.20,339.3 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:340.2,340.20 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:340.20,342.3 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:344.2,344.44 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:349.139,367.15 4 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:367.15,369.3 1 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:369.8,371.3 1 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:373.2,373.16 1 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:373.16,378.3 2 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:379.2,383.18 4 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:383.18,402.17 4 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:402.17,406.12 2 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:409.3,409.20 1 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:409.20,411.4 1 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:412.3,412.21 1 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:412.21,414.4 1 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:415.3,415.21 1 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:415.21,417.4 1 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:418.3,418.21 1 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:418.21,420.4 1 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:422.3,423.33 2 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:426.2,426.35 1 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:426.35,431.3 2 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:433.2,433.31 1 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:438.153,448.15 4 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:448.15,450.3 1 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:450.8,452.3 1 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:454.2,454.16 1 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:454.16,462.3 2 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:464.2,465.16 2 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:465.16,467.3 1 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:470.2,470.23 1 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:470.23,476.3 2 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:478.2,483.18 2 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:486.109,500.16 3 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:500.16,505.3 2 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:506.2,509.18 3 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:509.18,528.17 4 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:528.17,533.4 2 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:535.3,535.20 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:535.20,537.4 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:538.3,538.21 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:538.21,540.4 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:541.3,541.21 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:541.21,543.4 1 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:544.3,544.21 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:544.21,546.4 1 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:548.3,548.39 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:551.2,551.35 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:551.35,553.3 1 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:555.2,555.24 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:559.117,560.16 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:560.16,562.3 1 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:565.2,566.19 2 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:566.19,568.3 1 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:569.2,569.21 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:569.21,571.3 1 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:573.2,574.21 2 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:574.21,576.3 1 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:578.2,579.19 2 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:579.19,581.3 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:583.2,583.17 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:584.42,584.42 0 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:586.10,587.25 1 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:590.2,591.19 2 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:591.19,593.3 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:596.2,600.40 4 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:600.40,604.3 3 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:605.2,605.48 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:605.48,609.3 3 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:610.2,610.23 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:610.23,614.3 3 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:615.2,615.40 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:615.40,619.3 3 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:620.2,620.52 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:620.52,624.3 3 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:625.2,625.46 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:625.46,629.3 3 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:630.2,630.48 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:630.48,634.3 3 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:635.2,635.56 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:635.56,639.3 3 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:640.2,640.31 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:640.31,644.3 3 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:645.2,645.48 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:645.48,649.3 3 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:650.2,650.48 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:650.48,654.3 3 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:655.2,655.25 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:655.25,659.3 3 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:660.2,660.23 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:660.23,664.3 3 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:666.2,667.25 2 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:667.25,669.40 2 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:669.40,671.4 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:675.2,676.16 2 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:676.16,678.3 1 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:681.2,697.16 5 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:697.16,702.3 2 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:703.2,708.18 4 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:708.18,719.17 5 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:719.17,721.4 1 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:724.3,724.20 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:724.20,726.4 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:727.3,727.21 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:727.21,729.4 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:730.3,730.21 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:730.21,732.4 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:733.3,733.21 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:733.21,735.4 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:737.3,738.64 2 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:741.2,741.35 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:741.35,743.3 1 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:746.2,747.29 2 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:747.29,749.3 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:751.2,758.8 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:762.101,763.16 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:763.16,765.3 1 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:768.2,772.40 4 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:772.40,776.3 3 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:777.2,777.48 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:777.48,781.3 3 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:782.2,782.23 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:782.23,786.3 3 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:787.2,787.40 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:787.40,791.3 3 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:792.2,792.52 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:792.52,796.3 3 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:797.2,797.46 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:797.46,801.3 3 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:802.2,802.48 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:802.48,806.3 3 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:807.2,807.56 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:807.56,811.3 3 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:812.2,812.31 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:812.31,816.3 3 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:817.2,817.48 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:817.48,821.3 3 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:822.2,822.48 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:822.48,826.3 3 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:827.2,827.25 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:827.25,831.3 3 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:832.2,832.23 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:832.23,836.3 3 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:838.2,839.25 2 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:839.25,841.40 2 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:841.40,843.4 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:846.2,852.16 4 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:852.16,857.3 2 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:859.2,859.19 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:870.74,877.2 2 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:880.69,882.2 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:885.93,890.26 4 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:890.26,895.3 2 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:896.2,896.16 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:896.16,902.3 2 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:904.2,904.25 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:908.106,910.2 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:913.120,925.15 4 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:925.15,927.3 1 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:927.8,929.3 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:931.2,931.16 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:931.16,937.3 2 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:939.2,943.12 2 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:947.105,961.16 4 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:961.16,967.3 2 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:969.2,973.12 2 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:984.72,991.2 2 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:994.68,996.2 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:998.116,1000.2 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:1002.130,1009.15 3 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:1009.15,1011.3 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:1011.8,1013.3 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:1015.2,1015.16 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:1015.16,1021.3 2 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:1023.2,1027.12 2 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:1030.122,1051.16 3 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:1051.16,1057.3 2 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:1059.2,1063.12 2 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:1066.101,1082.16 3 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:1082.16,1088.3 2 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:1090.2,1094.12 2 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:1097.101,1115.16 3 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:1115.16,1120.3 2 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:1121.2,1124.18 3 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:1124.18,1138.17 4 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:1138.17,1143.4 2 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:1145.3,1145.22 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:1145.22,1147.4 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:1148.3,1148.22 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:1148.22,1150.4 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:1152.3,1152.36 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:1155.2,1155.35 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:1155.35,1157.3 1 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:1159.2,1159.21 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:1162.79,1166.16 3 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:1166.16,1172.3 2 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:1174.2,1177.12 2 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/retry_worker.go:29.51,37.2 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/retry_worker.go:55.16,64.2 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/retry_worker.go:67.50,78.6 5 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/retry_worker.go:78.6,79.10 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/retry_worker.go:80.21,82.10 2 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/retry_worker.go:83.21,85.10 2 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/retry_worker.go:86.19,87.25 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/retry_worker.go:93.30,98.2 4 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/retry_worker.go:102.59,110.16 5 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/retry_worker.go:110.16,115.3 2 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/retry_worker.go:117.2,117.23 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/retry_worker.go:117.23,120.3 2 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/retry_worker.go:122.2,128.33 2 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/retry_worker.go:128.33,130.3 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/retry_worker.go:139.3,146.49 2 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/retry_worker.go:146.49,152.86 2 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/retry_worker.go:152.86,157.4 1 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/retry_worker.go:158.3,158.9 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/retry_worker.go:162.2,163.16 2 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/retry_worker.go:163.16,171.3 4 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/retry_worker.go:174.2,174.33 1 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/retry_worker.go:174.33,178.65 2 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/retry_worker.go:178.65,183.4 1 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/retry_worker.go:184.3,184.9 1 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/retry_worker.go:190.2,190.54 1 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/retry_worker.go:190.54,198.3 4 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/retry_worker.go:201.2,201.81 1 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/retry_worker.go:201.81,207.3 2 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/retry_worker.go:210.2,210.64 1 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/retry_worker.go:210.64,216.3 2 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/retry_worker.go:218.2,221.3 1 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/retry_worker.go:226.90,229.24 1 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/retry_worker.go:229.24,231.3 1 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/retry_worker.go:235.2,238.12 2 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/retry_worker.go:242.68,244.34 2 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/retry_worker.go:244.34,246.3 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/retry_worker.go:247.2,247.47 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/schema.go:83.71,84.20 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/schema.go:85.18,86.78 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/schema.go:87.15,88.69 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/schema.go:89.27,90.72 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/schema.go:91.10,93.63 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/schema.go:98.30,123.2 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/schema.go:125.36,135.2 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/schema.go:137.35,153.2 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/schema.go:156.27,180.2 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/schema.go:182.33,191.2 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/schema.go:193.32,208.2 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/schema.go:211.28,236.2 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/schema.go:238.34,248.2 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/schema.go:250.33,266.2 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/strategy.go:25.46,26.11 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/strategy.go:27.22,28.19 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/strategy.go:29.29,30.27 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/strategy.go:31.28,32.25 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/strategy.go:33.10,34.19 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/strategy.go:51.79,58.2 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/strategy.go:81.23,90.2 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/strategy.go:93.87,99.16 3 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/strategy.go:99.16,101.3 1 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/strategy.go:104.2,104.56 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/strategy.go:104.56,106.3 1 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/strategy.go:109.2,109.60 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/strategy.go:109.60,111.3 1 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/strategy.go:114.2,114.59 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/strategy.go:114.59,116.3 1 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/strategy.go:118.2,119.12 2 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/strategy.go:123.92,124.27 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/strategy.go:125.22,126.31 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/strategy.go:127.29,128.38 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/strategy.go:129.28,131.13 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/strategy.go:132.10,133.75 1 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/strategy.go:138.89,144.66 2 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/strategy.go:144.66,146.3 1 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/strategy.go:148.2,151.12 2 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/strategy.go:159.96,166.69 2 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/strategy.go:166.69,168.3 1 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/strategy.go:170.2,175.12 2 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/strategy.go:179.69,181.2 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/strategy.go:184.63,186.2 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/strategy.go:189.61,191.2 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/strategy.go:194.46,196.2 1 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/strategy.go:199.44,202.2 2 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/strategy.go:205.73,207.2 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/strategy.go:210.64,212.2 1 0

View File

@@ -0,0 +1,525 @@
mode: set
go.yandata.net/iod/iod/go-trustlog/api/persistence/client.go:20.93,22.2 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/client.go:58.108,59.26 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/client.go:59.26,61.3 1 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/client.go:64.2,65.16 2 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/client.go:65.16,70.3 2 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/client.go:73.2,76.76 2 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/client.go:76.76,79.3 2 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/client.go:81.2,95.93 4 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/client.go:95.93,97.39 2 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/client.go:97.39,99.4 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/client.go:99.9,101.4 1 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/client.go:104.3,107.56 3 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/client.go:107.56,110.4 2 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/client.go:112.3,115.4 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/client.go:119.2,119.92 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/client.go:119.92,121.38 2 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/client.go:121.38,123.4 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/client.go:123.9,125.4 1 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/client.go:127.3,133.4 3 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/client.go:136.2,142.20 2 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/client.go:147.101,148.22 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/client.go:148.22,151.3 2 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/client.go:153.2,161.18 3 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/client.go:162.22,164.41 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/client.go:166.29,168.48 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/client.go:170.28,172.47 1 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/client.go:174.10,175.75 1 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/client.go:180.98,186.64 2 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/client.go:186.64,192.3 2 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/client.go:194.2,197.12 2 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/client.go:201.105,207.64 2 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/client.go:207.64,213.3 2 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/client.go:216.2,216.60 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/client.go:216.60,223.3 2 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/client.go:226.2,226.106 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/client.go:226.106,232.3 1 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/client.go:235.2,240.12 3 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/client.go:244.104,250.60 2 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/client.go:250.60,256.3 2 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/client.go:258.2,261.12 2 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/client.go:265.102,274.16 4 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/client.go:274.16,280.3 2 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/client.go:282.2,293.87 4 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/client.go:293.87,300.3 2 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/client.go:302.2,306.12 2 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/client.go:310.92,311.19 1 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/client.go:311.19,314.3 2 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/client.go:316.2,325.16 4 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/client.go:325.16,331.3 2 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/client.go:333.2,334.84 2 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/client.go:334.84,340.3 2 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/client.go:342.2,346.12 2 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/client.go:350.56,352.2 1 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/client.go:355.62,357.2 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/client.go:360.43,365.27 3 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/client.go:365.27,366.50 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/client.go:366.50,370.4 1 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/client.go:374.2,374.26 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/client.go:374.26,376.3 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/client.go:379.2,379.42 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/client.go:379.42,384.3 2 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/client.go:387.2,387.24 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/client.go:387.24,388.45 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/client.go:388.45,393.4 2 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/client.go:396.2,397.12 2 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/client.go:401.125,402.22 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/client.go:402.22,404.3 1 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/client.go:406.2,407.17 2 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/client.go:407.17,409.3 1 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/client.go:411.2,411.29 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/client.go:415.109,416.22 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/client.go:416.22,418.3 1 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/client.go:420.2,421.17 2 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/client.go:421.17,423.3 1 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/client.go:425.2,425.29 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/client.go:429.122,430.22 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/client.go:430.22,432.3 1 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/client.go:434.2,435.17 2 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/client.go:435.17,437.3 1 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/client.go:439.2,439.33 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/config.go:26.55,35.2 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/config.go:38.46,40.16 2 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/config.go:40.16,42.3 1 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/config.go:45.2,51.34 5 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/config.go:51.34,54.3 2 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/config.go:56.2,56.16 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/cursor_worker.go:34.54,49.2 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/cursor_worker.go:66.53,74.2 1 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/cursor_worker.go:87.92,88.30 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/cursor_worker.go:88.30,90.3 1 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/cursor_worker.go:91.2,91.27 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/cursor_worker.go:91.27,93.3 1 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/cursor_worker.go:94.2,94.28 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/cursor_worker.go:94.28,96.3 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/cursor_worker.go:97.2,97.33 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/cursor_worker.go:97.33,99.3 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/cursor_worker.go:103.2,108.3 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/cursor_worker.go:112.57,113.23 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/cursor_worker.go:113.23,116.3 2 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/cursor_worker.go:118.2,125.42 2 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/cursor_worker.go:125.42,127.3 1 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/cursor_worker.go:130.2,132.12 2 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/cursor_worker.go:136.56,140.2 3 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/cursor_worker.go:143.49,147.6 3 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/cursor_worker.go:147.6,148.10 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/cursor_worker.go:149.19,151.10 2 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/cursor_worker.go:152.19,153.15 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/cursor_worker.go:159.50,166.16 3 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/cursor_worker.go:166.16,171.3 2 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/cursor_worker.go:173.2,182.16 3 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/cursor_worker.go:182.16,187.3 2 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/cursor_worker.go:188.2,191.16 3 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/cursor_worker.go:191.16,196.3 2 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/cursor_worker.go:198.2,198.26 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/cursor_worker.go:198.26,202.3 3 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/cursor_worker.go:204.2,211.32 3 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/cursor_worker.go:211.32,212.42 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/cursor_worker.go:212.42,214.4 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/cursor_worker.go:217.3,217.20 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/cursor_worker.go:217.20,218.38 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/cursor_worker.go:218.38,224.5 2 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/cursor_worker.go:227.4,230.18 2 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/cursor_worker.go:230.18,235.5 2 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/cursor_worker.go:236.4,236.23 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/cursor_worker.go:241.2,241.36 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/cursor_worker.go:241.36,246.3 2 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/cursor_worker.go:248.2,251.3 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/cursor_worker.go:255.62,266.40 5 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/cursor_worker.go:266.40,270.3 1 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/cursor_worker.go:272.2,273.24 2 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/cursor_worker.go:273.24,280.3 2 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/cursor_worker.go:280.8,286.3 2 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/cursor_worker.go:288.2,289.16 2 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/cursor_worker.go:289.16,291.3 1 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/cursor_worker.go:293.2,298.12 2 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/cursor_worker.go:302.71,306.16 3 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/cursor_worker.go:306.16,308.3 1 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/cursor_worker.go:311.2,311.18 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/cursor_worker.go:311.18,313.3 1 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/cursor_worker.go:315.2,315.20 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/cursor_worker.go:319.78,323.16 3 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/cursor_worker.go:323.16,325.3 1 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/cursor_worker.go:327.2,332.12 2 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/cursor_worker.go:336.136,353.16 3 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/cursor_worker.go:353.16,355.3 1 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/cursor_worker.go:356.2,360.18 4 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/cursor_worker.go:360.18,371.17 5 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/cursor_worker.go:371.17,373.4 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/cursor_worker.go:376.3,376.21 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/cursor_worker.go:376.21,378.4 1 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/cursor_worker.go:379.3,379.21 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/cursor_worker.go:379.21,381.4 1 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/cursor_worker.go:382.3,385.33 3 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/cursor_worker.go:388.2,388.31 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/cursor_worker.go:392.41,393.14 1 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/cursor_worker.go:393.14,395.3 1 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/cursor_worker.go:396.2,396.11 1 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/cursor_worker.go:400.106,415.16 3 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/cursor_worker.go:415.16,417.3 1 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/cursor_worker.go:418.2,421.18 3 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/cursor_worker.go:421.18,432.17 5 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/cursor_worker.go:432.17,434.4 1 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/cursor_worker.go:437.3,437.21 1 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/cursor_worker.go:437.21,439.4 1 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/cursor_worker.go:440.3,440.21 1 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/cursor_worker.go:440.21,442.4 1 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/cursor_worker.go:443.3,445.38 2 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/cursor_worker.go:448.2,448.24 1 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/cursor_worker.go:453.104,460.16 3 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/cursor_worker.go:460.16,469.100 4 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/cursor_worker.go:469.100,474.4 1 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/cursor_worker.go:476.3,476.15 1 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/cursor_worker.go:480.2,482.16 3 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/cursor_worker.go:482.16,488.3 2 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/cursor_worker.go:490.2,490.14 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/cursor_worker.go:490.14,496.3 2 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/cursor_worker.go:498.2,504.13 3 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/cursor_worker.go:508.83,515.67 3 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/cursor_worker.go:515.67,516.18 1 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/cursor_worker.go:516.18,521.4 1 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/cursor_worker.go:523.3,524.17 2 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/cursor_worker.go:524.17,526.83 1 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/cursor_worker.go:526.83,531.5 1 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/cursor_worker.go:531.10,535.5 1 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/cursor_worker.go:538.4,539.10 2 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/cursor_worker.go:542.3,543.41 2 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/cursor_worker.go:543.41,545.4 1 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/cursor_worker.go:549.2,556.87 4 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/cursor_worker.go:556.87,561.3 1 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/cursor_worker.go:564.2,564.60 1 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/cursor_worker.go:568.84,570.22 2 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/cursor_worker.go:570.22,572.3 1 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/cursor_worker.go:575.2,578.56 2 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/cursor_worker.go:578.56,580.3 1 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/cursor_worker.go:582.2,582.12 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/cursor_worker.go:586.109,589.2 2 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:143.42,144.15 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:144.15,146.3 1 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:148.2,150.70 3 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:150.70,152.3 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:153.2,153.18 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:157.68,158.30 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:158.30,162.35 3 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:162.35,163.23 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:163.23,166.5 2 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:166.10,168.5 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:170.3,170.16 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:173.2,173.14 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:177.80,184.2 2 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:187.72,189.2 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:191.107,193.2 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:195.121,206.31 3 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:206.31,208.3 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:209.2,209.32 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:209.32,211.3 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:212.2,212.24 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:212.24,214.3 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:215.2,215.24 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:215.24,217.3 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:219.2,237.15 3 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:237.15,239.3 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:239.8,241.3 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:243.2,243.16 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:243.16,249.3 2 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:251.2,255.12 2 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:258.107,260.2 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:262.121,266.15 3 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:266.15,268.3 1 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:268.8,270.3 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:272.2,272.16 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:272.16,279.3 2 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:281.2,285.12 2 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:288.116,320.26 6 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:320.26,322.3 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:323.2,323.16 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:323.16,329.3 2 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:331.2,331.19 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:331.19,333.3 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:334.2,334.20 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:334.20,336.3 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:337.2,337.20 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:337.20,339.3 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:340.2,340.20 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:340.20,342.3 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:344.2,344.44 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:349.139,367.15 4 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:367.15,369.3 1 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:369.8,371.3 1 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:373.2,373.16 1 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:373.16,378.3 2 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:379.2,383.18 4 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:383.18,402.17 4 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:402.17,406.12 2 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:409.3,409.20 1 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:409.20,411.4 1 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:412.3,412.21 1 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:412.21,414.4 1 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:415.3,415.21 1 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:415.21,417.4 1 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:418.3,418.21 1 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:418.21,420.4 1 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:422.3,423.33 2 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:426.2,426.35 1 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:426.35,431.3 2 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:433.2,433.31 1 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:438.153,448.15 4 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:448.15,450.3 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:450.8,452.3 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:454.2,454.16 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:454.16,462.3 2 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:464.2,465.16 2 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:465.16,467.3 1 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:470.2,470.23 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:470.23,476.3 2 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:478.2,483.18 2 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:486.109,500.16 3 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:500.16,505.3 2 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:506.2,509.18 3 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:509.18,528.17 4 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:528.17,533.4 2 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:535.3,535.20 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:535.20,537.4 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:538.3,538.21 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:538.21,540.4 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:541.3,541.21 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:541.21,543.4 1 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:544.3,544.21 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:544.21,546.4 1 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:548.3,548.39 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:551.2,551.35 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:551.35,553.3 1 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:555.2,555.24 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:559.117,560.16 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:560.16,562.3 1 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:565.2,566.19 2 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:566.19,568.3 1 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:569.2,569.21 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:569.21,571.3 1 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:573.2,574.21 2 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:574.21,576.3 1 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:578.2,579.19 2 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:579.19,581.3 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:583.2,583.17 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:584.42,584.42 0 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:586.10,587.25 1 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:590.2,591.19 2 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:591.19,593.3 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:596.2,600.40 4 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:600.40,604.3 3 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:605.2,605.48 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:605.48,609.3 3 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:610.2,610.23 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:610.23,614.3 3 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:615.2,615.40 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:615.40,619.3 3 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:620.2,620.52 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:620.52,624.3 3 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:625.2,625.46 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:625.46,629.3 3 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:630.2,630.48 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:630.48,634.3 3 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:635.2,635.56 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:635.56,639.3 3 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:640.2,640.31 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:640.31,644.3 3 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:645.2,645.48 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:645.48,649.3 3 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:650.2,650.48 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:650.48,654.3 3 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:655.2,655.25 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:655.25,659.3 3 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:660.2,660.23 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:660.23,664.3 3 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:666.2,667.25 2 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:667.25,669.40 2 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:669.40,671.4 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:675.2,676.16 2 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:676.16,678.3 1 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:681.2,697.16 5 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:697.16,702.3 2 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:703.2,708.18 4 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:708.18,719.17 5 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:719.17,721.4 1 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:724.3,724.20 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:724.20,726.4 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:727.3,727.21 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:727.21,729.4 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:730.3,730.21 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:730.21,732.4 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:733.3,733.21 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:733.21,735.4 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:737.3,738.64 2 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:741.2,741.35 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:741.35,743.3 1 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:746.2,747.29 2 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:747.29,749.3 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:751.2,758.8 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:762.101,763.16 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:763.16,765.3 1 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:768.2,772.40 4 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:772.40,776.3 3 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:777.2,777.48 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:777.48,781.3 3 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:782.2,782.23 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:782.23,786.3 3 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:787.2,787.40 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:787.40,791.3 3 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:792.2,792.52 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:792.52,796.3 3 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:797.2,797.46 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:797.46,801.3 3 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:802.2,802.48 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:802.48,806.3 3 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:807.2,807.56 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:807.56,811.3 3 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:812.2,812.31 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:812.31,816.3 3 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:817.2,817.48 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:817.48,821.3 3 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:822.2,822.48 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:822.48,826.3 3 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:827.2,827.25 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:827.25,831.3 3 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:832.2,832.23 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:832.23,836.3 3 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:838.2,839.25 2 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:839.25,841.40 2 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:841.40,843.4 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:846.2,852.16 4 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:852.16,857.3 2 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:859.2,859.19 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:870.74,877.2 2 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:880.69,882.2 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:885.93,890.26 4 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:890.26,895.3 2 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:896.2,896.16 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:896.16,902.3 2 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:904.2,904.25 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:908.106,910.2 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:913.120,925.15 4 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:925.15,927.3 1 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:927.8,929.3 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:931.2,931.16 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:931.16,937.3 2 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:939.2,943.12 2 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:947.105,961.16 4 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:961.16,967.3 2 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:969.2,973.12 2 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:984.72,991.2 2 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:994.68,996.2 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:998.116,1000.2 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:1002.130,1009.15 3 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:1009.15,1011.3 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:1011.8,1013.3 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:1015.2,1015.16 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:1015.16,1021.3 2 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:1023.2,1027.12 2 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:1030.122,1051.16 3 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:1051.16,1057.3 2 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:1059.2,1063.12 2 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:1066.101,1082.16 3 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:1082.16,1088.3 2 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:1090.2,1094.12 2 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:1097.101,1115.16 3 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:1115.16,1120.3 2 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:1121.2,1124.18 3 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:1124.18,1138.17 4 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:1138.17,1143.4 2 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:1145.3,1145.22 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:1145.22,1147.4 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:1148.3,1148.22 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:1148.22,1150.4 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:1152.3,1152.36 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:1155.2,1155.35 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:1155.35,1157.3 1 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:1159.2,1159.21 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:1162.79,1166.16 3 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:1166.16,1172.3 2 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:1174.2,1177.12 2 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/retry_worker.go:29.51,37.2 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/retry_worker.go:55.16,64.2 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/retry_worker.go:67.50,78.6 5 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/retry_worker.go:78.6,79.10 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/retry_worker.go:80.21,82.10 2 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/retry_worker.go:83.21,85.10 2 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/retry_worker.go:86.19,87.25 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/retry_worker.go:93.30,98.2 4 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/retry_worker.go:102.59,110.16 5 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/retry_worker.go:110.16,115.3 2 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/retry_worker.go:117.2,117.23 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/retry_worker.go:117.23,120.3 2 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/retry_worker.go:122.2,128.33 2 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/retry_worker.go:128.33,130.3 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/retry_worker.go:139.3,146.49 2 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/retry_worker.go:146.49,152.86 2 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/retry_worker.go:152.86,157.4 1 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/retry_worker.go:158.3,158.9 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/retry_worker.go:162.2,163.16 2 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/retry_worker.go:163.16,171.3 4 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/retry_worker.go:174.2,174.33 1 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/retry_worker.go:174.33,178.65 2 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/retry_worker.go:178.65,183.4 1 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/retry_worker.go:184.3,184.9 1 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/retry_worker.go:190.2,190.54 1 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/retry_worker.go:190.54,198.3 4 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/retry_worker.go:201.2,201.81 1 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/retry_worker.go:201.81,207.3 2 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/retry_worker.go:210.2,210.64 1 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/retry_worker.go:210.64,216.3 2 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/retry_worker.go:218.2,221.3 1 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/retry_worker.go:226.90,229.24 1 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/retry_worker.go:229.24,231.3 1 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/retry_worker.go:235.2,238.12 2 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/retry_worker.go:242.68,244.34 2 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/retry_worker.go:244.34,246.3 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/retry_worker.go:247.2,247.47 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/schema.go:83.71,84.20 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/schema.go:85.18,86.78 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/schema.go:87.15,88.69 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/schema.go:89.27,90.72 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/schema.go:91.10,93.63 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/schema.go:98.30,123.2 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/schema.go:125.36,135.2 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/schema.go:137.35,153.2 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/schema.go:156.27,180.2 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/schema.go:182.33,191.2 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/schema.go:193.32,208.2 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/schema.go:211.28,236.2 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/schema.go:238.34,248.2 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/schema.go:250.33,266.2 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/strategy.go:25.46,26.11 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/strategy.go:27.22,28.19 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/strategy.go:29.29,30.27 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/strategy.go:31.28,32.25 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/strategy.go:33.10,34.19 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/strategy.go:51.79,58.2 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/strategy.go:81.23,90.2 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/strategy.go:93.87,99.16 3 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/strategy.go:99.16,101.3 1 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/strategy.go:104.2,104.56 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/strategy.go:104.56,106.3 1 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/strategy.go:109.2,109.60 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/strategy.go:109.60,111.3 1 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/strategy.go:114.2,114.59 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/strategy.go:114.59,116.3 1 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/strategy.go:118.2,119.12 2 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/strategy.go:123.92,124.27 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/strategy.go:125.22,126.31 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/strategy.go:127.29,128.38 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/strategy.go:129.28,131.13 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/strategy.go:132.10,133.75 1 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/strategy.go:138.89,144.66 2 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/strategy.go:144.66,146.3 1 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/strategy.go:148.2,151.12 2 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/strategy.go:159.96,166.69 2 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/strategy.go:166.69,168.3 1 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/strategy.go:170.2,175.12 2 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/strategy.go:179.69,181.2 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/strategy.go:184.63,186.2 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/strategy.go:189.61,191.2 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/strategy.go:194.46,196.2 1 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/strategy.go:199.44,202.2 2 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/strategy.go:205.73,207.2 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/strategy.go:210.64,212.2 1 1

525
coverage_persistence_full Normal file
View File

@@ -0,0 +1,525 @@
mode: set
go.yandata.net/iod/iod/go-trustlog/api/persistence/client.go:20.93,22.2 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/client.go:58.108,59.26 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/client.go:59.26,61.3 1 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/client.go:64.2,65.16 2 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/client.go:65.16,70.3 2 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/client.go:73.2,76.76 2 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/client.go:76.76,79.3 2 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/client.go:81.2,95.93 4 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/client.go:95.93,97.39 2 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/client.go:97.39,99.4 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/client.go:99.9,101.4 1 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/client.go:104.3,107.56 3 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/client.go:107.56,110.4 2 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/client.go:112.3,115.4 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/client.go:119.2,119.92 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/client.go:119.92,121.38 2 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/client.go:121.38,123.4 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/client.go:123.9,125.4 1 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/client.go:127.3,133.4 3 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/client.go:136.2,142.20 2 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/client.go:147.101,148.22 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/client.go:148.22,151.3 2 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/client.go:153.2,161.18 3 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/client.go:162.22,164.41 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/client.go:166.29,168.48 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/client.go:170.28,172.47 1 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/client.go:174.10,175.75 1 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/client.go:180.98,186.64 2 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/client.go:186.64,192.3 2 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/client.go:194.2,197.12 2 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/client.go:201.105,207.64 2 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/client.go:207.64,213.3 2 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/client.go:216.2,216.60 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/client.go:216.60,223.3 2 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/client.go:226.2,226.106 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/client.go:226.106,232.3 1 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/client.go:235.2,240.12 3 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/client.go:244.104,250.60 2 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/client.go:250.60,256.3 2 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/client.go:258.2,261.12 2 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/client.go:265.102,274.16 4 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/client.go:274.16,280.3 2 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/client.go:282.2,293.87 4 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/client.go:293.87,300.3 2 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/client.go:302.2,306.12 2 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/client.go:310.92,311.19 1 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/client.go:311.19,314.3 2 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/client.go:316.2,325.16 4 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/client.go:325.16,331.3 2 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/client.go:333.2,334.84 2 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/client.go:334.84,340.3 2 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/client.go:342.2,346.12 2 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/client.go:350.56,352.2 1 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/client.go:355.62,357.2 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/client.go:360.43,365.27 3 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/client.go:365.27,366.50 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/client.go:366.50,370.4 1 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/client.go:374.2,374.26 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/client.go:374.26,376.3 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/client.go:379.2,379.42 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/client.go:379.42,384.3 2 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/client.go:387.2,387.24 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/client.go:387.24,388.45 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/client.go:388.45,393.4 2 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/client.go:396.2,397.12 2 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/client.go:401.125,402.22 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/client.go:402.22,404.3 1 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/client.go:406.2,407.17 2 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/client.go:407.17,409.3 1 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/client.go:411.2,411.29 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/client.go:415.109,416.22 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/client.go:416.22,418.3 1 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/client.go:420.2,421.17 2 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/client.go:421.17,423.3 1 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/client.go:425.2,425.29 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/client.go:429.122,430.22 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/client.go:430.22,432.3 1 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/client.go:434.2,435.17 2 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/client.go:435.17,437.3 1 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/client.go:439.2,439.33 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/config.go:26.55,35.2 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/config.go:38.46,40.16 2 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/config.go:40.16,42.3 1 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/config.go:45.2,51.34 5 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/config.go:51.34,54.3 2 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/config.go:56.2,56.16 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/cursor_worker.go:34.54,49.2 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/cursor_worker.go:66.53,74.2 1 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/cursor_worker.go:87.92,88.30 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/cursor_worker.go:88.30,90.3 1 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/cursor_worker.go:91.2,91.27 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/cursor_worker.go:91.27,93.3 1 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/cursor_worker.go:94.2,94.28 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/cursor_worker.go:94.28,96.3 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/cursor_worker.go:97.2,97.33 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/cursor_worker.go:97.33,99.3 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/cursor_worker.go:103.2,108.3 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/cursor_worker.go:112.57,113.23 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/cursor_worker.go:113.23,116.3 2 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/cursor_worker.go:118.2,125.42 2 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/cursor_worker.go:125.42,127.3 1 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/cursor_worker.go:130.2,132.12 2 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/cursor_worker.go:136.56,140.2 3 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/cursor_worker.go:143.49,147.6 3 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/cursor_worker.go:147.6,148.10 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/cursor_worker.go:149.19,151.10 2 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/cursor_worker.go:152.19,153.15 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/cursor_worker.go:159.50,166.16 3 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/cursor_worker.go:166.16,171.3 2 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/cursor_worker.go:173.2,182.16 3 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/cursor_worker.go:182.16,187.3 2 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/cursor_worker.go:188.2,191.16 3 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/cursor_worker.go:191.16,196.3 2 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/cursor_worker.go:198.2,198.26 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/cursor_worker.go:198.26,202.3 3 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/cursor_worker.go:204.2,211.32 3 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/cursor_worker.go:211.32,212.42 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/cursor_worker.go:212.42,214.4 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/cursor_worker.go:217.3,217.20 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/cursor_worker.go:217.20,218.38 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/cursor_worker.go:218.38,224.5 2 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/cursor_worker.go:227.4,230.18 2 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/cursor_worker.go:230.18,235.5 2 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/cursor_worker.go:236.4,236.23 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/cursor_worker.go:241.2,241.36 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/cursor_worker.go:241.36,246.3 2 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/cursor_worker.go:248.2,251.3 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/cursor_worker.go:255.62,266.40 5 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/cursor_worker.go:266.40,270.3 1 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/cursor_worker.go:272.2,273.24 2 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/cursor_worker.go:273.24,280.3 2 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/cursor_worker.go:280.8,286.3 2 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/cursor_worker.go:288.2,289.16 2 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/cursor_worker.go:289.16,291.3 1 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/cursor_worker.go:293.2,298.12 2 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/cursor_worker.go:302.71,306.16 3 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/cursor_worker.go:306.16,308.3 1 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/cursor_worker.go:311.2,311.18 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/cursor_worker.go:311.18,313.3 1 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/cursor_worker.go:315.2,315.20 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/cursor_worker.go:319.78,323.16 3 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/cursor_worker.go:323.16,325.3 1 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/cursor_worker.go:327.2,332.12 2 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/cursor_worker.go:336.136,353.16 3 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/cursor_worker.go:353.16,355.3 1 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/cursor_worker.go:356.2,360.18 4 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/cursor_worker.go:360.18,371.17 5 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/cursor_worker.go:371.17,373.4 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/cursor_worker.go:376.3,376.21 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/cursor_worker.go:376.21,378.4 1 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/cursor_worker.go:379.3,379.21 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/cursor_worker.go:379.21,381.4 1 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/cursor_worker.go:382.3,385.33 3 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/cursor_worker.go:388.2,388.31 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/cursor_worker.go:392.41,393.14 1 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/cursor_worker.go:393.14,395.3 1 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/cursor_worker.go:396.2,396.11 1 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/cursor_worker.go:400.106,415.16 3 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/cursor_worker.go:415.16,417.3 1 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/cursor_worker.go:418.2,421.18 3 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/cursor_worker.go:421.18,432.17 5 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/cursor_worker.go:432.17,434.4 1 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/cursor_worker.go:437.3,437.21 1 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/cursor_worker.go:437.21,439.4 1 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/cursor_worker.go:440.3,440.21 1 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/cursor_worker.go:440.21,442.4 1 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/cursor_worker.go:443.3,445.38 2 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/cursor_worker.go:448.2,448.24 1 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/cursor_worker.go:453.104,460.16 3 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/cursor_worker.go:460.16,469.100 4 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/cursor_worker.go:469.100,474.4 1 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/cursor_worker.go:476.3,476.15 1 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/cursor_worker.go:480.2,482.16 3 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/cursor_worker.go:482.16,488.3 2 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/cursor_worker.go:490.2,490.14 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/cursor_worker.go:490.14,496.3 2 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/cursor_worker.go:498.2,504.13 3 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/cursor_worker.go:508.83,515.67 3 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/cursor_worker.go:515.67,516.18 1 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/cursor_worker.go:516.18,521.4 1 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/cursor_worker.go:523.3,524.17 2 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/cursor_worker.go:524.17,526.83 1 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/cursor_worker.go:526.83,531.5 1 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/cursor_worker.go:531.10,535.5 1 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/cursor_worker.go:538.4,539.10 2 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/cursor_worker.go:542.3,543.41 2 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/cursor_worker.go:543.41,545.4 1 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/cursor_worker.go:549.2,556.87 4 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/cursor_worker.go:556.87,561.3 1 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/cursor_worker.go:564.2,564.60 1 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/cursor_worker.go:568.84,570.22 2 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/cursor_worker.go:570.22,572.3 1 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/cursor_worker.go:575.2,578.56 2 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/cursor_worker.go:578.56,580.3 1 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/cursor_worker.go:582.2,582.12 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/cursor_worker.go:586.109,589.2 2 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:143.42,144.15 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:144.15,146.3 1 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:148.2,150.70 3 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:150.70,152.3 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:153.2,153.18 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:157.68,158.30 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:158.30,162.35 3 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:162.35,163.23 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:163.23,166.5 2 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:166.10,168.5 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:170.3,170.16 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:173.2,173.14 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:177.80,184.2 2 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:187.72,189.2 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:191.107,193.2 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:195.121,206.31 3 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:206.31,208.3 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:209.2,209.32 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:209.32,211.3 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:212.2,212.24 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:212.24,214.3 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:215.2,215.24 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:215.24,217.3 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:219.2,237.15 3 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:237.15,239.3 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:239.8,241.3 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:243.2,243.16 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:243.16,249.3 2 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:251.2,255.12 2 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:258.107,260.2 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:262.121,266.15 3 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:266.15,268.3 1 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:268.8,270.3 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:272.2,272.16 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:272.16,279.3 2 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:281.2,285.12 2 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:288.116,320.26 6 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:320.26,322.3 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:323.2,323.16 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:323.16,329.3 2 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:331.2,331.19 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:331.19,333.3 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:334.2,334.20 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:334.20,336.3 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:337.2,337.20 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:337.20,339.3 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:340.2,340.20 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:340.20,342.3 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:344.2,344.44 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:349.139,367.15 4 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:367.15,369.3 1 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:369.8,371.3 1 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:373.2,373.16 1 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:373.16,378.3 2 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:379.2,383.18 4 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:383.18,402.17 4 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:402.17,406.12 2 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:409.3,409.20 1 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:409.20,411.4 1 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:412.3,412.21 1 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:412.21,414.4 1 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:415.3,415.21 1 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:415.21,417.4 1 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:418.3,418.21 1 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:418.21,420.4 1 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:422.3,423.33 2 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:426.2,426.35 1 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:426.35,431.3 2 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:433.2,433.31 1 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:438.153,448.15 4 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:448.15,450.3 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:450.8,452.3 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:454.2,454.16 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:454.16,462.3 2 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:464.2,465.16 2 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:465.16,467.3 1 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:470.2,470.23 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:470.23,476.3 2 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:478.2,483.18 2 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:486.109,500.16 3 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:500.16,505.3 2 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:506.2,509.18 3 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:509.18,528.17 4 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:528.17,533.4 2 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:535.3,535.20 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:535.20,537.4 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:538.3,538.21 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:538.21,540.4 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:541.3,541.21 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:541.21,543.4 1 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:544.3,544.21 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:544.21,546.4 1 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:548.3,548.39 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:551.2,551.35 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:551.35,553.3 1 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:555.2,555.24 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:559.117,560.16 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:560.16,562.3 1 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:565.2,566.19 2 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:566.19,568.3 1 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:569.2,569.21 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:569.21,571.3 1 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:573.2,574.21 2 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:574.21,576.3 1 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:578.2,579.19 2 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:579.19,581.3 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:583.2,583.17 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:584.42,584.42 0 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:586.10,587.25 1 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:590.2,591.19 2 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:591.19,593.3 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:596.2,600.40 4 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:600.40,604.3 3 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:605.2,605.48 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:605.48,609.3 3 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:610.2,610.23 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:610.23,614.3 3 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:615.2,615.40 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:615.40,619.3 3 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:620.2,620.52 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:620.52,624.3 3 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:625.2,625.46 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:625.46,629.3 3 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:630.2,630.48 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:630.48,634.3 3 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:635.2,635.56 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:635.56,639.3 3 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:640.2,640.31 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:640.31,644.3 3 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:645.2,645.48 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:645.48,649.3 3 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:650.2,650.48 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:650.48,654.3 3 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:655.2,655.25 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:655.25,659.3 3 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:660.2,660.23 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:660.23,664.3 3 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:666.2,667.25 2 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:667.25,669.40 2 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:669.40,671.4 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:675.2,676.16 2 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:676.16,678.3 1 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:681.2,697.16 5 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:697.16,702.3 2 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:703.2,708.18 4 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:708.18,719.17 5 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:719.17,721.4 1 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:724.3,724.20 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:724.20,726.4 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:727.3,727.21 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:727.21,729.4 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:730.3,730.21 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:730.21,732.4 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:733.3,733.21 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:733.21,735.4 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:737.3,738.64 2 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:741.2,741.35 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:741.35,743.3 1 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:746.2,747.29 2 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:747.29,749.3 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:751.2,758.8 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:762.101,763.16 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:763.16,765.3 1 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:768.2,772.40 4 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:772.40,776.3 3 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:777.2,777.48 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:777.48,781.3 3 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:782.2,782.23 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:782.23,786.3 3 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:787.2,787.40 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:787.40,791.3 3 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:792.2,792.52 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:792.52,796.3 3 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:797.2,797.46 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:797.46,801.3 3 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:802.2,802.48 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:802.48,806.3 3 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:807.2,807.56 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:807.56,811.3 3 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:812.2,812.31 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:812.31,816.3 3 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:817.2,817.48 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:817.48,821.3 3 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:822.2,822.48 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:822.48,826.3 3 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:827.2,827.25 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:827.25,831.3 3 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:832.2,832.23 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:832.23,836.3 3 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:838.2,839.25 2 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:839.25,841.40 2 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:841.40,843.4 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:846.2,852.16 4 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:852.16,857.3 2 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:859.2,859.19 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:870.74,877.2 2 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:880.69,882.2 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:885.93,890.26 4 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:890.26,895.3 2 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:896.2,896.16 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:896.16,902.3 2 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:904.2,904.25 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:908.106,910.2 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:913.120,925.15 4 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:925.15,927.3 1 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:927.8,929.3 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:931.2,931.16 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:931.16,937.3 2 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:939.2,943.12 2 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:947.105,961.16 4 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:961.16,967.3 2 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:969.2,973.12 2 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:984.72,991.2 2 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:994.68,996.2 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:998.116,1000.2 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:1002.130,1009.15 3 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:1009.15,1011.3 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:1011.8,1013.3 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:1015.2,1015.16 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:1015.16,1021.3 2 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:1023.2,1027.12 2 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:1030.122,1051.16 3 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:1051.16,1057.3 2 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:1059.2,1063.12 2 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:1066.101,1082.16 3 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:1082.16,1088.3 2 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:1090.2,1094.12 2 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:1097.101,1115.16 3 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:1115.16,1120.3 2 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:1121.2,1124.18 3 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:1124.18,1138.17 4 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:1138.17,1143.4 2 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:1145.3,1145.22 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:1145.22,1147.4 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:1148.3,1148.22 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:1148.22,1150.4 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:1152.3,1152.36 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:1155.2,1155.35 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:1155.35,1157.3 1 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:1159.2,1159.21 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:1162.79,1166.16 3 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:1166.16,1172.3 2 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/repository.go:1174.2,1177.12 2 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/retry_worker.go:29.51,37.2 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/retry_worker.go:55.16,64.2 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/retry_worker.go:67.50,78.6 5 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/retry_worker.go:78.6,79.10 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/retry_worker.go:80.21,82.10 2 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/retry_worker.go:83.21,85.10 2 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/retry_worker.go:86.19,87.25 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/retry_worker.go:93.30,98.2 4 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/retry_worker.go:102.59,110.16 5 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/retry_worker.go:110.16,115.3 2 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/retry_worker.go:117.2,117.23 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/retry_worker.go:117.23,120.3 2 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/retry_worker.go:122.2,128.33 2 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/retry_worker.go:128.33,130.3 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/retry_worker.go:139.3,146.49 2 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/retry_worker.go:146.49,152.86 2 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/retry_worker.go:152.86,157.4 1 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/retry_worker.go:158.3,158.9 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/retry_worker.go:162.2,163.16 2 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/retry_worker.go:163.16,171.3 4 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/retry_worker.go:174.2,174.33 1 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/retry_worker.go:174.33,178.65 2 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/retry_worker.go:178.65,183.4 1 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/retry_worker.go:184.3,184.9 1 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/retry_worker.go:190.2,190.54 1 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/retry_worker.go:190.54,198.3 4 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/retry_worker.go:201.2,201.81 1 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/retry_worker.go:201.81,207.3 2 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/retry_worker.go:210.2,210.64 1 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/retry_worker.go:210.64,216.3 2 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/retry_worker.go:218.2,221.3 1 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/retry_worker.go:226.90,229.24 1 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/retry_worker.go:229.24,231.3 1 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/retry_worker.go:235.2,238.12 2 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/retry_worker.go:242.68,244.34 2 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/retry_worker.go:244.34,246.3 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/retry_worker.go:247.2,247.47 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/schema.go:83.71,84.20 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/schema.go:85.18,86.78 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/schema.go:87.15,88.69 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/schema.go:89.27,90.72 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/schema.go:91.10,93.63 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/schema.go:98.30,123.2 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/schema.go:125.36,135.2 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/schema.go:137.35,153.2 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/schema.go:156.27,180.2 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/schema.go:182.33,191.2 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/schema.go:193.32,208.2 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/schema.go:211.28,236.2 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/schema.go:238.34,248.2 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/schema.go:250.33,266.2 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/strategy.go:25.46,26.11 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/strategy.go:27.22,28.19 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/strategy.go:29.29,30.27 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/strategy.go:31.28,32.25 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/strategy.go:33.10,34.19 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/strategy.go:51.79,58.2 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/strategy.go:81.23,90.2 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/strategy.go:93.87,99.16 3 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/strategy.go:99.16,101.3 1 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/strategy.go:104.2,104.56 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/strategy.go:104.56,106.3 1 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/strategy.go:109.2,109.60 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/strategy.go:109.60,111.3 1 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/strategy.go:114.2,114.59 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/strategy.go:114.59,116.3 1 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/strategy.go:118.2,119.12 2 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/strategy.go:123.92,124.27 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/strategy.go:125.22,126.31 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/strategy.go:127.29,128.38 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/strategy.go:129.28,131.13 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/strategy.go:132.10,133.75 1 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/strategy.go:138.89,144.66 2 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/strategy.go:144.66,146.3 1 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/strategy.go:148.2,151.12 2 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/strategy.go:159.96,166.69 2 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/strategy.go:166.69,168.3 1 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/strategy.go:170.2,175.12 2 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/strategy.go:179.69,181.2 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/strategy.go:184.63,186.2 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/strategy.go:189.61,191.2 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/strategy.go:194.46,196.2 1 0
go.yandata.net/iod/iod/go-trustlog/api/persistence/strategy.go:199.44,202.2 2 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/strategy.go:205.73,207.2 1 1
go.yandata.net/iod/iod/go-trustlog/api/persistence/strategy.go:210.64,212.2 1 1

1906
coverage_short Normal file

File diff suppressed because it is too large Load Diff

2
go.mod
View File

@@ -1,4 +1,4 @@
module go.yandata.net/iod/iod/go-trustlog module go.yandata.net/wangsiyuan/go-trustlog
go 1.25 go 1.25

View File

@@ -6,7 +6,7 @@ import (
"github.com/stretchr/testify/assert" "github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require" "github.com/stretchr/testify/require"
"go.yandata.net/iod/iod/go-trustlog/internal/grpcclient" "go.yandata.net/wangsiyuan/go-trustlog/internal/grpcclient"
) )
func TestConfig_GetAddrs(t *testing.T) { func TestConfig_GetAddrs(t *testing.T) {

View File

@@ -8,7 +8,7 @@ import (
"google.golang.org/grpc" "google.golang.org/grpc"
"google.golang.org/grpc/credentials/insecure" "google.golang.org/grpc/credentials/insecure"
"go.yandata.net/iod/iod/go-trustlog/internal/grpcclient" "go.yandata.net/wangsiyuan/go-trustlog/internal/grpcclient"
) )
// mockClient 用于测试的模拟客户端. // mockClient 用于测试的模拟客户端.

View File

@@ -6,7 +6,7 @@ import (
"github.com/stretchr/testify/assert" "github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require" "github.com/stretchr/testify/require"
"go.yandata.net/iod/iod/go-trustlog/internal/helpers" "go.yandata.net/wangsiyuan/go-trustlog/internal/helpers"
) )
func TestMarshalCanonical(t *testing.T) { func TestMarshalCanonical(t *testing.T) {

View File

@@ -7,7 +7,7 @@ import (
"github.com/stretchr/testify/assert" "github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require" "github.com/stretchr/testify/require"
"go.yandata.net/iod/iod/go-trustlog/internal/helpers" "go.yandata.net/wangsiyuan/go-trustlog/internal/helpers"
) )
func TestCBORTimePrecision(t *testing.T) { func TestCBORTimePrecision(t *testing.T) {

View File

@@ -7,7 +7,7 @@ import (
"github.com/stretchr/testify/assert" "github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require" "github.com/stretchr/testify/require"
"go.yandata.net/iod/iod/go-trustlog/internal/helpers" "go.yandata.net/wangsiyuan/go-trustlog/internal/helpers"
) )
func TestNewTLVReader(t *testing.T) { func TestNewTLVReader(t *testing.T) {

View File

@@ -8,7 +8,7 @@ import (
"github.com/stretchr/testify/assert" "github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require" "github.com/stretchr/testify/require"
"go.yandata.net/iod/iod/go-trustlog/internal/helpers" "go.yandata.net/wangsiyuan/go-trustlog/internal/helpers"
) )
func TestNewUUIDv7(t *testing.T) { func TestNewUUIDv7(t *testing.T) {

View File

@@ -7,7 +7,7 @@ import (
"github.com/stretchr/testify/assert" "github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require" "github.com/stretchr/testify/require"
"go.yandata.net/iod/iod/go-trustlog/internal/helpers" "go.yandata.net/wangsiyuan/go-trustlog/internal/helpers"
) )
func TestGetValidator(t *testing.T) { func TestGetValidator(t *testing.T) {

View File

@@ -6,8 +6,8 @@ import (
"github.com/stretchr/testify/assert" "github.com/stretchr/testify/assert"
apilogger "go.yandata.net/iod/iod/go-trustlog/api/logger" apilogger "go.yandata.net/wangsiyuan/go-trustlog/api/logger"
"go.yandata.net/iod/iod/go-trustlog/internal/logger" "go.yandata.net/wangsiyuan/go-trustlog/internal/logger"
) )
func TestNewWatermillLoggerAdapter(t *testing.T) { func TestNewWatermillLoggerAdapter(t *testing.T) {

View File

@@ -1,144 +0,0 @@
// 检查和修复 cursor 表的脚本
package main
import (
"context"
"database/sql"
"fmt"
"log"
"strings"
"time"
_ "github.com/lib/pq"
)
const (
pgHost = "localhost"
pgPort = 5432
pgUser = "postgres"
pgPassword = "postgres"
pgDatabase = "trustlog"
)
func main() {
fmt.Println("🔍 Cursor Table Check Tool")
fmt.Println(strings.Repeat("=", 60))
// 连接数据库
dsn := fmt.Sprintf("host=%s port=%d user=%s password=%s dbname=%s sslmode=disable",
pgHost, pgPort, pgUser, pgPassword, pgDatabase)
db, err := sql.Open("postgres", dsn)
if err != nil {
log.Fatalf("Failed to connect: %v", err)
}
defer db.Close()
if err := db.Ping(); err != nil {
log.Fatalf("Failed to ping: %v", err)
}
fmt.Println("✅ Connected to PostgreSQL")
fmt.Println()
ctx := context.Background()
// 1. 检查 cursor 表数据
fmt.Println("📊 Current Cursor Table:")
rows, err := db.QueryContext(ctx, "SELECT cursor_key, cursor_value, last_updated_at FROM trustlog_cursor ORDER BY last_updated_at DESC")
if err != nil {
log.Printf("Failed to query cursor table: %v", err)
} else {
defer rows.Close()
count := 0
for rows.Next() {
var key, value string
var updatedAt time.Time
rows.Scan(&key, &value, &updatedAt)
fmt.Printf(" Key: %s\n", key)
fmt.Printf(" Value: %s\n", value)
fmt.Printf(" Updated: %v\n", updatedAt)
fmt.Println()
count++
}
if count == 0 {
fmt.Println(" ❌ No cursor records found!")
fmt.Println()
fmt.Println(" 问题原因:")
fmt.Println(" - Cursor Worker 可能没有启动")
fmt.Println(" - 或者初始化失败")
fmt.Println()
}
}
// 2. 检查 operation 表状态
fmt.Println("📊 Operation Table Status:")
var totalCount int
db.QueryRowContext(ctx, "SELECT COUNT(*) FROM operation").Scan(&totalCount)
fmt.Printf(" Total operations: %d\n", totalCount)
var trustloggedCount int
db.QueryRowContext(ctx, "SELECT COUNT(*) FROM operation WHERE trustlog_status = 'TRUSTLOGGED'").Scan(&trustloggedCount)
fmt.Printf(" Trustlogged: %d\n", trustloggedCount)
var notTrustloggedCount int
db.QueryRowContext(ctx, "SELECT COUNT(*) FROM operation WHERE trustlog_status = 'NOT_TRUSTLOGGED'").Scan(&notTrustloggedCount)
fmt.Printf(" Not trustlogged: %d\n", notTrustloggedCount)
// 查询最早的记录
var earliestTime sql.NullTime
db.QueryRowContext(ctx, "SELECT MIN(created_at) FROM operation WHERE trustlog_status = 'NOT_TRUSTLOGGED'").Scan(&earliestTime)
if earliestTime.Valid {
fmt.Printf(" Earliest NOT_TRUSTLOGGED record: %v\n", earliestTime.Time)
}
fmt.Println()
// 3. 检查 cursor 和记录的时间关系
if notTrustloggedCount > 0 {
fmt.Println("⚠️ Problem Detected:")
fmt.Printf(" 有 %d 条记录未存证\n", notTrustloggedCount)
var cursorValue sql.NullString
db.QueryRowContext(ctx, "SELECT cursor_value FROM trustlog_cursor WHERE cursor_key = 'operation_scan'").Scan(&cursorValue)
if !cursorValue.Valid {
fmt.Println(" Cursor 表为空!")
fmt.Println()
fmt.Println(" 可能的原因:")
fmt.Println(" 1. Cursor Worker 从未启动")
fmt.Println(" 2. PersistenceClient 没有启用 Cursor Worker")
fmt.Println()
fmt.Println(" 解决方案:")
fmt.Println(" 1. 确保 PersistenceClient 配置了 EnableCursorWorker: true")
fmt.Println(" 2. 手动初始化 cursor:")
fmt.Println(" go run scripts/init_cursor.go")
} else {
cursorTime, _ := time.Parse(time.RFC3339Nano, cursorValue.String)
fmt.Printf(" Cursor 时间: %v\n", cursorTime)
if earliestTime.Valid && earliestTime.Time.Before(cursorTime) {
fmt.Println()
fmt.Println(" ❌ 问题Cursor 时间晚于最早的未存证记录!")
fmt.Println(" 这些记录不会被处理。")
fmt.Println()
fmt.Println(" 解决方案:")
fmt.Println(" 1. 重置 cursor 到更早的时间:")
fmt.Printf(" UPDATE trustlog_cursor SET cursor_value = '%s' WHERE cursor_key = 'operation_scan';\n",
earliestTime.Time.Add(-1*time.Second).Format(time.RFC3339Nano))
fmt.Println()
fmt.Println(" 2. 或者使用脚本重置:")
fmt.Println(" go run scripts/reset_cursor.go")
}
}
} else {
fmt.Println("✅ All operations are trustlogged!")
}
fmt.Println()
fmt.Println(strings.Repeat("=", 60))
}

View File

@@ -1,44 +0,0 @@
package main
import (
"database/sql"
"fmt"
"log"
_ "github.com/lib/pq"
)
func main() {
dsn := "host=localhost port=5432 user=postgres password=postgres dbname=trustlog sslmode=disable"
db, err := sql.Open("postgres", dsn)
if err != nil {
log.Fatalf("Failed to connect: %v", err)
}
defer db.Close()
if err := db.Ping(); err != nil {
log.Fatalf("Failed to ping: %v", err)
}
fmt.Println("🧹 Cleaning test data...")
// 清理所有测试数据
_, err = db.Exec("DELETE FROM trustlog_retry")
if err != nil {
log.Printf("Warning: Failed to clean retry table: %v", err)
}
_, err = db.Exec("DELETE FROM operation")
if err != nil {
log.Printf("Warning: Failed to clean operation table: %v", err)
}
_, err = db.Exec("DELETE FROM trustlog_cursor")
if err != nil {
log.Printf("Warning: Failed to clean cursor table: %v", err)
}
fmt.Println("✅ All test data cleaned!")
}

View File

@@ -1,112 +0,0 @@
// 初始化或重置 cursor 的脚本
package main
import (
"context"
"database/sql"
"fmt"
"log"
"strings"
"time"
_ "github.com/lib/pq"
)
const (
pgHost = "localhost"
pgPort = 5432
pgUser = "postgres"
pgPassword = "postgres"
pgDatabase = "trustlog"
)
func main() {
fmt.Println("🔧 Cursor Initialization Tool")
fmt.Println(strings.Repeat("=", 60))
// 连接数据库
dsn := fmt.Sprintf("host=%s port=%d user=%s password=%s dbname=%s sslmode=disable",
pgHost, pgPort, pgUser, pgPassword, pgDatabase)
db, err := sql.Open("postgres", dsn)
if err != nil {
log.Fatalf("Failed to connect: %v", err)
}
defer db.Close()
if err := db.Ping(); err != nil {
log.Fatalf("Failed to ping: %v", err)
}
fmt.Println("✅ Connected to PostgreSQL")
fmt.Println()
ctx := context.Background()
// 查询最早的 NOT_TRUSTLOGGED 记录
var earliestTime sql.NullTime
err = db.QueryRowContext(ctx,
"SELECT MIN(created_at) FROM operation WHERE trustlog_status = 'NOT_TRUSTLOGGED'",
).Scan(&earliestTime)
if err != nil {
log.Fatalf("Failed to query earliest record: %v", err)
}
var cursorValue string
if earliestTime.Valid {
// 设置为最早记录之前 1 秒
cursorValue = earliestTime.Time.Add(-1 * time.Second).Format(time.RFC3339Nano)
fmt.Printf("📊 Earliest NOT_TRUSTLOGGED record: %v\n", earliestTime.Time)
fmt.Printf("📍 Setting cursor to: %s\n", cursorValue)
} else {
// 如果没有未存证记录,使用一个很早的时间
cursorValue = time.Date(2020, 1, 1, 0, 0, 0, 0, time.UTC).Format(time.RFC3339Nano)
fmt.Println("📊 No NOT_TRUSTLOGGED records found")
fmt.Printf("📍 Setting cursor to default: %s\n", cursorValue)
}
fmt.Println()
// 插入或更新 cursor
_, err = db.ExecContext(ctx, `
INSERT INTO trustlog_cursor (cursor_key, cursor_value, last_updated_at)
VALUES ($1, $2, $3)
ON CONFLICT (cursor_key)
DO UPDATE SET cursor_value = EXCLUDED.cursor_value, last_updated_at = EXCLUDED.last_updated_at
`, "operation_scan", cursorValue, time.Now())
if err != nil {
log.Fatalf("Failed to init cursor: %v", err)
}
fmt.Println("✅ Cursor initialized successfully!")
fmt.Println()
// 验证
var savedValue string
var updatedAt time.Time
err = db.QueryRowContext(ctx,
"SELECT cursor_value, last_updated_at FROM trustlog_cursor WHERE cursor_key = 'operation_scan'",
).Scan(&savedValue, &updatedAt)
if err != nil {
log.Fatalf("Failed to verify cursor: %v", err)
}
fmt.Println("📊 Cursor Status:")
fmt.Printf(" Key: operation_scan\n")
fmt.Printf(" Value: %s\n", savedValue)
fmt.Printf(" Updated: %v\n", updatedAt)
fmt.Println()
// 统计
var notTrustloggedCount int
db.QueryRowContext(ctx, "SELECT COUNT(*) FROM operation WHERE trustlog_status = 'NOT_TRUSTLOGGED'").Scan(&notTrustloggedCount)
fmt.Printf("📝 Records to process: %d\n", notTrustloggedCount)
fmt.Println()
fmt.Println("✅ Cursor Worker 现在会处理这些记录")
fmt.Println(strings.Repeat("=", 60))
}

View File

@@ -1,128 +0,0 @@
package main
import (
"database/sql"
"fmt"
"log"
_ "github.com/lib/pq"
)
func main() {
dsn := "host=localhost port=5432 user=postgres password=postgres dbname=trustlog sslmode=disable"
db, err := sql.Open("postgres", dsn)
if err != nil {
log.Fatalf("Failed to connect: %v", err)
}
defer db.Close()
if err := db.Ping(); err != nil {
log.Fatalf("Failed to ping: %v", err)
}
fmt.Println("🔄 Migrating PostgreSQL schema...")
// 删除旧表
fmt.Println(" Dropping old tables...")
_, err = db.Exec("DROP TABLE IF EXISTS trustlog_retry")
if err != nil {
log.Printf("Warning: Failed to drop retry table: %v", err)
}
_, err = db.Exec("DROP TABLE IF EXISTS operation")
if err != nil {
log.Printf("Warning: Failed to drop operation table: %v", err)
}
_, err = db.Exec("DROP TABLE IF EXISTS trustlog_cursor")
if err != nil {
log.Printf("Warning: Failed to drop cursor table: %v", err)
}
// 重新创建表
fmt.Println(" Creating new tables...")
_, err = db.Exec(`
CREATE TABLE IF NOT EXISTS operation (
op_id VARCHAR(32) NOT NULL PRIMARY KEY,
op_actor VARCHAR(64),
doid VARCHAR(512),
producer_id VARCHAR(32),
request_body_hash VARCHAR(128),
response_body_hash VARCHAR(128),
op_hash VARCHAR(128),
sign VARCHAR(512),
op_source VARCHAR(10),
op_type VARCHAR(30),
do_prefix VARCHAR(128),
do_repository VARCHAR(64),
client_ip VARCHAR(32),
server_ip VARCHAR(32),
trustlog_status VARCHAR(32),
timestamp TIMESTAMP,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
)`)
if err != nil {
log.Fatalf("Failed to create operation table: %v", err)
}
_, err = db.Exec(`
CREATE INDEX IF NOT EXISTS idx_operation_timestamp ON operation(timestamp)`)
if err != nil {
log.Printf("Warning: Failed to create timestamp index: %v", err)
}
_, err = db.Exec(`
CREATE INDEX IF NOT EXISTS idx_operation_trustlog_status ON operation(trustlog_status)`)
if err != nil {
log.Printf("Warning: Failed to create status index: %v", err)
}
_, err = db.Exec(`
CREATE INDEX IF NOT EXISTS idx_operation_created_at ON operation(created_at)`)
if err != nil {
log.Printf("Warning: Failed to create created_at index: %v", err)
}
_, err = db.Exec(`
CREATE TABLE IF NOT EXISTS trustlog_cursor (
cursor_key VARCHAR(64) NOT NULL PRIMARY KEY,
cursor_value TEXT NOT NULL,
last_updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
)`)
if err != nil {
log.Fatalf("Failed to create cursor table: %v", err)
}
_, err = db.Exec(`
CREATE TABLE IF NOT EXISTS trustlog_retry (
op_id VARCHAR(32) NOT NULL PRIMARY KEY,
retry_count INTEGER DEFAULT 0,
retry_status VARCHAR(32) DEFAULT 'PENDING',
last_retry_at TIMESTAMP,
next_retry_at TIMESTAMP,
error_message TEXT,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
)`)
if err != nil {
log.Fatalf("Failed to create retry table: %v", err)
}
_, err = db.Exec(`
CREATE INDEX IF NOT EXISTS idx_retry_next_retry_at ON trustlog_retry(next_retry_at)`)
if err != nil {
log.Printf("Warning: Failed to create retry time index: %v", err)
}
_, err = db.Exec(`
CREATE INDEX IF NOT EXISTS idx_retry_retry_status ON trustlog_retry(retry_status)`)
if err != nil {
log.Printf("Warning: Failed to create retry status index: %v", err)
}
fmt.Println("✅ Schema migration completed!")
}

85
scripts/reset_db.go Normal file
View File

@@ -0,0 +1,85 @@
package main
import (
"database/sql"
"fmt"
"log"
"os"
_ "github.com/lib/pq"
)
func main() {
// PostgreSQL连接信息
connStr := "host=localhost port=5432 user=postgres password=postgres dbname=trustlog sslmode=disable"
db, err := sql.Open("postgres", connStr)
if err != nil {
log.Fatalf("❌ Failed to connect to database: %v", err)
}
defer db.Close()
// 测试连接
if err := db.Ping(); err != nil {
log.Fatalf("❌ Failed to ping database: %v", err)
}
fmt.Println("✅ Connected to PostgreSQL database: trustlog")
// 删除旧表
fmt.Println("\n📋 Dropping old tables...")
dropSQL := []string{
"DROP TABLE IF EXISTS operation CASCADE",
"DROP TABLE IF EXISTS trustlog_cursor CASCADE",
"DROP TABLE IF EXISTS trustlog_retry CASCADE",
}
for _, sql := range dropSQL {
if _, err := db.Exec(sql); err != nil {
log.Printf("⚠️ Warning dropping table: %v", err)
} else {
fmt.Println("✅", sql)
}
}
// 读取并执行新的DDL
fmt.Println("\n📋 Creating new tables with op_code...")
ddlFile := "api/persistence/sql/postgresql.sql"
ddlContent, err := os.ReadFile(ddlFile)
if err != nil {
log.Fatalf("❌ Failed to read DDL file: %v", err)
}
if _, err := db.Exec(string(ddlContent)); err != nil {
log.Fatalf("❌ Failed to execute DDL: %v", err)
}
fmt.Println("✅ Tables created successfully")
// 验证表结构
fmt.Println("\n📋 Verifying table structure...")
var count int
query := `SELECT COUNT(*) FROM information_schema.tables WHERE table_schema = 'public' AND table_name IN ('operation', 'trustlog_cursor', 'trustlog_retry')`
if err := db.QueryRow(query).Scan(&count); err != nil {
log.Fatalf("❌ Failed to verify tables: %v", err)
}
if count != 3 {
log.Fatalf("❌ Expected 3 tables, found %d", count)
}
fmt.Printf("✅ All %d tables verified\n", count)
// 验证op_code列
var dataType string
colQuery := `SELECT data_type FROM information_schema.columns WHERE table_name = 'operation' AND column_name = 'op_code'`
if err := db.QueryRow(colQuery).Scan(&dataType); err != nil {
log.Fatalf("❌ Failed to verify op_code column: %v", err)
}
fmt.Printf("✅ op_code column type: %s\n", dataType)
fmt.Println("\n🎉 Database reset completed successfully!")
}

View File

@@ -1,103 +0,0 @@
// 验证 Pulsar 消息的简单脚本
// 使用方法: go run scripts/verify_pulsar_messages.go
package main
import (
"context"
"fmt"
"log"
"time"
"github.com/apache/pulsar-client-go/pulsar"
)
const (
pulsarURL = "pulsar://localhost:6650"
topic = "persistent://public/default/operation"
timeout = 10 * time.Second
)
func main() {
fmt.Println("🔍 Pulsar Message Verification Tool")
fmt.Println("=====================================")
fmt.Printf("Pulsar URL: %s\n", pulsarURL)
fmt.Printf("Topic: %s\n", topic)
fmt.Println()
// 创建 Pulsar 客户端
client, err := pulsar.NewClient(pulsar.ClientOptions{
URL: pulsarURL,
})
if err != nil {
log.Fatalf("❌ Failed to create Pulsar client: %v", err)
}
defer client.Close()
fmt.Println("✅ Connected to Pulsar")
// 创建消费者(使用唯一的 subscription
subName := fmt.Sprintf("verify-sub-%d", time.Now().Unix())
consumer, err := client.Subscribe(pulsar.ConsumerOptions{
Topic: topic,
SubscriptionName: subName,
Type: pulsar.Shared,
// 从最早的未确认消息开始读取
SubscriptionInitialPosition: pulsar.SubscriptionPositionEarliest,
})
if err != nil {
log.Fatalf("❌ Failed to create consumer: %v", err)
}
defer consumer.Close()
fmt.Printf("✅ Consumer created: %s\n\n", subName)
// 接收消息
fmt.Println("📩 Listening for messages (timeout: 10s)...")
fmt.Println("----------------------------------------")
ctx, cancel := context.WithTimeout(context.Background(), timeout)
defer cancel()
messageCount := 0
for {
msg, err := consumer.Receive(ctx)
if err != nil {
if ctx.Err() == context.DeadlineExceeded {
break
}
log.Printf("⚠️ Error receiving message: %v", err)
continue
}
messageCount++
fmt.Printf("\n📨 Message #%d:\n", messageCount)
fmt.Printf(" Key: %s\n", msg.Key())
fmt.Printf(" Payload Size: %d bytes\n", len(msg.Payload()))
fmt.Printf(" Publish Time: %v\n", msg.PublishTime())
fmt.Printf(" Topic: %s\n", msg.Topic())
fmt.Printf(" Message ID: %v\n", msg.ID())
// 确认消息
consumer.Ack(msg)
// 最多显示 10 条消息
if messageCount >= 10 {
fmt.Println("\n⚠ Reached 10 messages limit, stopping...")
break
}
}
fmt.Println("\n========================================")
if messageCount == 0 {
fmt.Println("❌ No messages found in Pulsar")
fmt.Println("\nPossible reasons:")
fmt.Println(" 1. No operations have been published yet")
fmt.Println(" 2. All messages have been consumed by other consumers")
fmt.Println(" 3. Wrong topic name")
fmt.Println("\nTo test, run the E2E test:")
fmt.Println(" go test ./api/persistence -v -run TestE2E_DBAndTrustlog_WithPulsarConsumer")
} else {
fmt.Printf("✅ Found %d messages in Pulsar\n", messageCount)
}
fmt.Println("========================================")
}