Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 10 additions & 0 deletions backend/modules/observability/domain/component/config/config.go
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ package config

import (
"context"
"slices"

"github.com/coze-dev/coze-loop/backend/modules/observability/domain/trace/entity/loop_span"
"github.com/coze-dev/coze-loop/backend/pkg/conf"
Expand Down Expand Up @@ -249,6 +250,8 @@ type TrajectoryMetadataConfig struct {
// Spaces 按 workspace_id 配置允许写入的 metadata key 规则列表
Spaces map[int64][]loop_span.MetaKeyRule `mapstructure:"spaces" json:"spaces"`
EnableSingleQuery bool `mapstructure:"enable_single_query" json:"enable_single_query"`
// EnableDoubleQuerySpaces 白名单:命中的 workspace_id 强制走双查询,即使全局开启了单查询
EnableDoubleQuerySpaces []int64 `mapstructure:"enable_double_query_spaces" json:"enable_double_query_spaces"`
}

func (c *TrajectoryMetadataConfig) IsSingleQueryEnabled() bool {
Expand All @@ -258,6 +261,13 @@ func (c *TrajectoryMetadataConfig) IsSingleQueryEnabled() bool {
return c.EnableSingleQuery
}

func (c *TrajectoryMetadataConfig) IsDoubleQueryEnabled(workspaceID int64) bool {
if c == nil {
return false
}
return slices.Contains(c.EnableDoubleQuerySpaces, workspaceID)
}

//go:generate mockgen -destination=mocks/config.go -package=mocks . ITraceConfig
type ITraceConfig interface {
GetSystemViews(ctx context.Context) ([]*SystemView, error)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2594,7 +2594,7 @@ func (r *TraceServiceImpl) GetTrajectories(ctx context.Context, workspaceID int6
maxBytes = backfillCfg.GetTrajectoryMaxBytes(workspaceID)
}

if metaCfg.IsSingleQueryEnabled() {
if metaCfg.IsSingleQueryEnabled() && !metaCfg.IsDoubleQueryEnabled(workspaceID) {
return r.getTrajectoriesSingleQuery(ctx, workspaceID, tenant, traceIDs, startTime, endTime, platformType, trajectoryConfig, metaRules, maxBytes)
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -206,6 +206,18 @@ func TestTrajectoryMetadataConfig_IsSingleQueryEnabled(t *testing.T) {
assert.True(t, (&config.TrajectoryMetadataConfig{EnableSingleQuery: true}).IsSingleQueryEnabled())
}

func TestTrajectoryMetadataConfig_IsDoubleQueryEnabled(t *testing.T) {
var nilCfg *config.TrajectoryMetadataConfig
assert.False(t, nilCfg.IsDoubleQueryEnabled(123))

assert.False(t, (&config.TrajectoryMetadataConfig{}).IsDoubleQueryEnabled(123))

cfg := &config.TrajectoryMetadataConfig{EnableDoubleQuerySpaces: []int64{123, 456}}
assert.True(t, cfg.IsDoubleQueryEnabled(123))
assert.True(t, cfg.IsDoubleQueryEnabled(456))
assert.False(t, cfg.IsDoubleQueryEnabled(789))
}

func TestTraceServiceImpl_GetTrajectories_SingleQuery_MaxBytesExceeded(t *testing.T) {
ctrl := gomock.NewController(t)
defer ctrl.Finish()
Expand Down
Loading