Skip to content
Open
Show file tree
Hide file tree
Changes from 11 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
3 changes: 1 addition & 2 deletions chasm/field_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -68,8 +68,7 @@ func (s *fieldSuite) initAssertions() {
}

func (s *fieldSuite) TestInternalFieldName() {
f := Field[any]{}
fT := reflect.TypeOf(f)
fT := reflect.TypeFor[Field[any]]()

_, ok := fT.FieldByName(internalFieldName)
s.True(ok, "expected field %s not found", internalFieldName)
Expand Down
10 changes: 5 additions & 5 deletions chasm/fields_iterator.go
Original file line number Diff line number Diff line change
Expand Up @@ -106,8 +106,8 @@ func unmanagedFieldsOf(valueT reflect.Type) iter.Seq[fieldInfo] {
if valueT.Kind() == reflect.Pointer {
valueT = valueT.Elem()
}
for i := range valueT.NumField() {
fieldT := valueT.Field(i).Type
for field := range valueT.Fields() {
fieldT := field.Type
if fieldT == UnimplementedComponentT {
continue
}
Expand All @@ -117,7 +117,7 @@ func unmanagedFieldsOf(valueT reflect.Type) iter.Seq[fieldInfo] {
continue
}

fieldN := fieldName(valueT.Field(i))
fieldN := fieldName(field)
prefix := genericTypePrefix(fieldT)
switch prefix {
case chasmFieldTypePrefix,
Expand Down Expand Up @@ -167,8 +167,8 @@ func hasVisibilityField(componentT reflect.Type) bool {
if componentT.Kind() != reflect.Struct {
return false
}
for i := range componentT.NumField() {
fieldT := componentT.Field(i).Type
for field := range componentT.Fields() {
fieldT := field.Type
if fieldT == visibilityFieldT {
return true
}
Expand Down
8 changes: 3 additions & 5 deletions chasm/fields_iterator_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -78,14 +78,12 @@ func (s *fieldsIteratorSuite) TestGenericTypePrefix() {
}

func (s *fieldsIteratorSuite) TestChasmFieldTypePrefix() {
f := Field[any]{}
fT := reflect.TypeOf(f)
fT := reflect.TypeFor[Field[any]]()
s.True(strings.HasPrefix(fT.String(), chasmFieldTypePrefix))
}

func (s *fieldsIteratorSuite) TestChasmMapTypePrefix() {
c := Map[string, any]{}
cT := reflect.TypeOf(c)
cT := reflect.TypeFor[Map[string, any]]()
s.True(strings.HasPrefix(cT.String(), chasmMapTypePrefix))
}

Expand Down Expand Up @@ -211,7 +209,7 @@ func (s *fieldsIteratorSuite) TestUnmanagedFieldsOf() {
for r := range unmanagedFieldsOf(reflect.TypeFor[unmanagedFields]()) {
result = append(result, r.name)
}
s.Equal(2, len(result))
s.Len(result, 2)
s.ElementsMatch([]string{"unmanaged", "anotherPtr"}, result)
}

Expand Down
5 changes: 2 additions & 3 deletions chasm/registrable_component.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ package chasm

import (
"fmt"
"maps"
"reflect"

"github.com/dgryski/go-farm"
Expand Down Expand Up @@ -173,9 +174,7 @@ func WithContextValues(
if rc.contextValues == nil {
rc.contextValues = make(map[any]any, len(keyVals))
}
for k, v := range keyVals {
rc.contextValues[k] = v
}
maps.Copy(rc.contextValues, keyVals)
}
}

Expand Down
8 changes: 4 additions & 4 deletions chasm/registry.go
Original file line number Diff line number Diff line change
Expand Up @@ -269,7 +269,7 @@ func (r *Registry) registerComponent(
// rc.goType implements Component interface; therefore, it must be a struct.
// This check to protect against the interface itself being registered.
if !(rc.goType.Kind() == reflect.Struct ||
(rc.goType.Kind() == reflect.Ptr && rc.goType.Elem().Kind() == reflect.Struct)) {
(rc.goType.Kind() == reflect.Pointer && rc.goType.Elem().Kind() == reflect.Struct)) {
return fmt.Errorf("component type %s must be struct or pointer to struct", rc.goType.String())
}
if _, ok := r.rcByGoType[rc.goType]; ok {
Expand Down Expand Up @@ -312,16 +312,16 @@ func (r *Registry) registerTask(
}

if !(rt.goType.Kind() == reflect.Struct ||
(rt.goType.Kind() == reflect.Ptr && rt.goType.Elem().Kind() == reflect.Struct)) {
(rt.goType.Kind() == reflect.Pointer && rt.goType.Elem().Kind() == reflect.Struct)) {
return fmt.Errorf("task type %s must be struct or pointer to struct", rt.goType.String())
}
if _, ok := r.rtByGoType[rt.goType]; ok {
return fmt.Errorf("task type %s is already registered", rt.goType.String())
}
if !(rt.componentGoType.Kind() == reflect.Interface ||
(rt.componentGoType.Kind() == reflect.Struct ||
(rt.componentGoType.Kind() == reflect.Ptr && rt.componentGoType.Elem().Kind() == reflect.Struct)) &&
rt.componentGoType.AssignableTo(reflect.TypeOf((*Component)(nil)).Elem())) {
(rt.componentGoType.Kind() == reflect.Pointer && rt.componentGoType.Elem().Kind() == reflect.Struct)) &&
rt.componentGoType.AssignableTo(reflect.TypeFor[Component]())) {
return fmt.Errorf("component type %s must be and interface or struct that implements Component interface", rt.componentGoType.String())
}

Expand Down
4 changes: 2 additions & 2 deletions chasm/registry_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -72,7 +72,7 @@ func (s *RegistryTestSuite) TestRegistry_RegisterComponents_Success() {
require.True(s.T(), ok)
require.Equal(s.T(), "TestLibrary.Component1", rc2.FqType())

rc2, ok = r.ComponentOf(reflect.TypeOf(cInstance1))
rc2, ok = r.ComponentOf(reflect.TypeFor[*chasm.MockComponent]())
require.True(s.T(), ok)
require.Equal(s.T(), "TestLibrary.Component1", rc2.FqType())

Expand Down Expand Up @@ -146,7 +146,7 @@ func (s *RegistryTestSuite) TestRegistry_RegisterTasks_Success() {
require.Equal(s.T(), "TestLibrary.Task2", rt2.FqType())
s.Require().Equal(rt2.FqType(), rt2.TaskGroup())

rt2, ok = r.TaskOf(reflect.TypeOf(tInstance1))
rt2, ok = r.TaskOf(reflect.TypeFor[testTask2]())
require.True(s.T(), ok)
require.Equal(s.T(), "TestLibrary.Task2", rt2.FqType())

Expand Down
6 changes: 3 additions & 3 deletions chasm/test_component_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -374,7 +374,7 @@ func renderProtoPointer(v reflect.Value) string {
// Handle oneof-style interface fields
if field.Type.Kind() == reflect.Interface && !fieldValue.IsNil() {
oneofVal := fieldValue.Elem()
if oneofVal.Kind() == reflect.Ptr {
if oneofVal.Kind() == reflect.Pointer {
oneofVal = oneofVal.Elem()
}

Expand All @@ -387,7 +387,7 @@ func renderProtoPointer(v reflect.Value) string {
oneofFieldValue := oneofVal.Field(j)

// Handle nested proto inside oneof
if oneofFieldValue.Kind() == reflect.Ptr && oneofFieldValue.Elem().Kind() == reflect.Struct {
if oneofFieldValue.Kind() == reflect.Pointer && oneofFieldValue.Elem().Kind() == reflect.Struct {
result += fmt.Sprintf("\t\t\t%s: %s,\n", oneofField.Name, renderProtoPointer(oneofFieldValue))
} else {
result += fmt.Sprintf("\t\t\t%s: %#v,\n", oneofField.Name, oneofFieldValue.Interface())
Expand All @@ -398,7 +398,7 @@ func renderProtoPointer(v reflect.Value) string {
}

// Recursively handle nested proto messages (pointer to struct)
if field.Type.Kind() == reflect.Ptr && fieldValue.Kind() == reflect.Ptr && fieldValue.Elem().Kind() == reflect.Struct {
if field.Type.Kind() == reflect.Pointer && fieldValue.Kind() == reflect.Pointer && fieldValue.Elem().Kind() == reflect.Struct {
result += fmt.Sprintf("\t\t%s: %s,\n", field.Name, renderProtoPointer(fieldValue))
continue
}
Expand Down
8 changes: 4 additions & 4 deletions chasm/tree.go
Original file line number Diff line number Diff line change
Expand Up @@ -704,7 +704,7 @@ func assertStructPointer(t reflect.Type) error {
return nil
}

if t.Kind() != reflect.Ptr || t.Elem().Kind() != reflect.Struct {
if t.Kind() != reflect.Pointer || t.Elem().Kind() != reflect.Struct {
return serviceerror.NewInternalf("only pointer to struct is supported for tree node value: got %s", t.String())
}
return nil
Expand Down Expand Up @@ -1619,7 +1619,7 @@ func (n *Node) AddTask(
return
}

n.nodeBase.newTasks[component] = append(n.nodeBase.newTasks[component], taskWithAttributes{
n.newTasks[component] = append(n.newTasks[component], taskWithAttributes{
task: task,
attributes: taskAttributes,
})
Expand Down Expand Up @@ -3138,7 +3138,7 @@ func deserializeTask(
}

taskGoType := registrableTask.goType
if taskGoType.Kind() == reflect.Ptr {
if taskGoType.Kind() == reflect.Pointer {
taskGoType = taskGoType.Elem()
}
taskValue = reflect.New(taskGoType)
Expand Down Expand Up @@ -3194,7 +3194,7 @@ func serializeTask(
taskGoType := registrableTask.goType

// Handle pointer to struct.
if taskGoType.Kind() == reflect.Ptr {
if taskGoType.Kind() == reflect.Pointer {
taskGoType = taskGoType.Elem()
taskValue = taskValue.Elem()
}
Expand Down
2 changes: 1 addition & 1 deletion chasm/tree_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -752,7 +752,7 @@ func (s *nodeSuite) TestDeserializeNode_ComponentAttributes() {
s.IsType(&TestComponent{}, node.value)
tc := node.value.(*TestComponent)
s.Equal(tc.SubComponent1.Internal.node, node.children["SubComponent1"])
s.Equal(tc.ComponentData.CreateRequestId, "component-data")
s.Equal("component-data", tc.ComponentData.CreateRequestId)
s.Equal(valueStateSynced, node.valueState)

s.Nil(tc.SubComponent1.Internal.value())
Expand Down
2 changes: 1 addition & 1 deletion chasm/visibility_value_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,7 @@ func TestVisibilityValue(t *testing.T) {
var out bool
err := payload.Decode(p, &out)
require.NoError(t, err)
require.Equal(t, true, out)
require.True(t, out)

require.True(t, v.Equal(VisibilityValueBool(true)))
require.False(t, v.Equal(VisibilityValueBool(false)))
Expand Down
6 changes: 3 additions & 3 deletions common/archiver/filestore/query_parser.go
Original file line number Diff line number Diff line change
Expand Up @@ -122,7 +122,7 @@ func (p *queryParser) convertComparisonExpr(compExpr *sqlparser.ComparisonExpr,
parsedQuery.emptyResult = true
return nil
}
parsedQuery.workflowID = util.Ptr(val)
parsedQuery.workflowID = new(val)
case RunID:
val, err := sqlquery.ExtractStringValue(valStr)
if err != nil {
Expand All @@ -135,7 +135,7 @@ func (p *queryParser) convertComparisonExpr(compExpr *sqlparser.ComparisonExpr,
parsedQuery.emptyResult = true
return nil
}
parsedQuery.runID = util.Ptr(val)
parsedQuery.runID = new(val)
case WorkflowType:
val, err := sqlquery.ExtractStringValue(valStr)
if err != nil {
Expand All @@ -148,7 +148,7 @@ func (p *queryParser) convertComparisonExpr(compExpr *sqlparser.ComparisonExpr,
parsedQuery.emptyResult = true
return nil
}
parsedQuery.workflowTypeName = util.Ptr(val)
parsedQuery.workflowTypeName = new(val)
case ExecutionStatus:
val, err := sqlquery.ExtractStringValue(valStr)
if err != nil {
Expand Down
41 changes: 20 additions & 21 deletions common/archiver/filestore/query_parser_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,6 @@ import (
"github.com/stretchr/testify/require"
"github.com/stretchr/testify/suite"
enumspb "go.temporal.io/api/enums/v1"
"go.temporal.io/server/common/util"
)

type queryParserSuite struct {
Expand Down Expand Up @@ -36,35 +35,35 @@ func (s *queryParserSuite) TestParseWorkflowID_RunID_WorkflowType() {
query: "WorkflowId = \"random workflowID\"",
expectErr: false,
parsedQuery: &parsedQuery{
workflowID: util.Ptr("random workflowID"),
workflowID: new("random workflowID"),
},
},
{
query: "WorkflowId = \"random workflowID\" and WorkflowId = \"random workflowID\"",
expectErr: false,
parsedQuery: &parsedQuery{
workflowID: util.Ptr("random workflowID"),
workflowID: new("random workflowID"),
},
},
{
query: "RunId = \"random runID\"",
expectErr: false,
parsedQuery: &parsedQuery{
runID: util.Ptr("random runID"),
runID: new("random runID"),
},
},
{
query: "WorkflowType = \"random typeName\"",
expectErr: false,
parsedQuery: &parsedQuery{
workflowTypeName: util.Ptr("random typeName"),
workflowTypeName: new("random typeName"),
},
},
{
query: "WorkflowId = 'random workflowID'",
expectErr: false,
parsedQuery: &parsedQuery{
workflowID: util.Ptr("random workflowID"),
workflowID: new("random workflowID"),
},
},
{
Expand All @@ -78,9 +77,9 @@ func (s *queryParserSuite) TestParseWorkflowID_RunID_WorkflowType() {
query: "WorkflowType = 'random typeName' and (WorkflowId = \"random workflowID\" and RunId='random runID')",
expectErr: false,
parsedQuery: &parsedQuery{
workflowID: util.Ptr("random workflowID"),
runID: util.Ptr("random runID"),
workflowTypeName: util.Ptr("random typeName"),
workflowID: new("random workflowID"),
runID: new("random runID"),
workflowTypeName: new("random typeName"),
},
},
{
Expand Down Expand Up @@ -131,49 +130,49 @@ func (s *queryParserSuite) TestParseCloseStatus() {
query: "ExecutionStatus = \"Completed\"",
expectErr: false,
parsedQuery: &parsedQuery{
status: toWorkflowExecutionStatusPtr(enumspb.WORKFLOW_EXECUTION_STATUS_COMPLETED),
status: new(enumspb.WORKFLOW_EXECUTION_STATUS_COMPLETED),
},
},
{
query: "ExecutionStatus = \"failed\"",
expectErr: false,
parsedQuery: &parsedQuery{
status: toWorkflowExecutionStatusPtr(enumspb.WORKFLOW_EXECUTION_STATUS_FAILED),
status: new(enumspb.WORKFLOW_EXECUTION_STATUS_FAILED),
},
},
{
query: "ExecutionStatus = \"canceled\"",
expectErr: false,
parsedQuery: &parsedQuery{
status: toWorkflowExecutionStatusPtr(enumspb.WORKFLOW_EXECUTION_STATUS_CANCELED),
status: new(enumspb.WORKFLOW_EXECUTION_STATUS_CANCELED),
},
},
{
query: "ExecutionStatus = \"terminated\"",
expectErr: false,
parsedQuery: &parsedQuery{
status: toWorkflowExecutionStatusPtr(enumspb.WORKFLOW_EXECUTION_STATUS_TERMINATED),
status: new(enumspb.WORKFLOW_EXECUTION_STATUS_TERMINATED),
},
},
{
query: "ExecutionStatus = 'continuedasnew'",
expectErr: false,
parsedQuery: &parsedQuery{
status: toWorkflowExecutionStatusPtr(enumspb.WORKFLOW_EXECUTION_STATUS_CONTINUED_AS_NEW),
status: new(enumspb.WORKFLOW_EXECUTION_STATUS_CONTINUED_AS_NEW),
},
},
{
query: "ExecutionStatus = 'TIMED_OUT'",
expectErr: false,
parsedQuery: &parsedQuery{
status: toWorkflowExecutionStatusPtr(enumspb.WORKFLOW_EXECUTION_STATUS_TIMED_OUT),
status: new(enumspb.WORKFLOW_EXECUTION_STATUS_TIMED_OUT),
},
},
{
query: "ExecutionStatus = 'Failed' and ExecutionStatus = \"Failed\"",
expectErr: false,
parsedQuery: &parsedQuery{
status: toWorkflowExecutionStatusPtr(enumspb.WORKFLOW_EXECUTION_STATUS_FAILED),
status: new(enumspb.WORKFLOW_EXECUTION_STATUS_FAILED),
},
},
{
Expand Down Expand Up @@ -203,7 +202,7 @@ func (s *queryParserSuite) TestParseCloseStatus() {
query: "ExecutionStatus = 3",
expectErr: false,
parsedQuery: &parsedQuery{
status: toWorkflowExecutionStatusPtr(enumspb.WORKFLOW_EXECUTION_STATUS_FAILED),
status: new(enumspb.WORKFLOW_EXECUTION_STATUS_FAILED),
},
},
{
Expand All @@ -221,7 +220,7 @@ func (s *queryParserSuite) TestParseCloseStatus() {
s.NoError(err)
s.Equal(tc.parsedQuery.emptyResult, parsedQuery.emptyResult)
if !tc.parsedQuery.emptyResult {
s.EqualValues(tc.parsedQuery.status, parsedQuery.status)
s.Equal(tc.parsedQuery.status, parsedQuery.status)
}
}
}
Expand Down Expand Up @@ -305,7 +304,7 @@ func (s *queryParserSuite) TestParse() {
parsedQuery: &parsedQuery{
earliestCloseTime: time.Time{},
latestCloseTime: time.Date(2019, 01, 01, 11, 11, 11, 0, time.UTC),
workflowID: util.Ptr("random workflowID"),
workflowID: new("random workflowID"),
},
},
{
Expand All @@ -314,8 +313,8 @@ func (s *queryParserSuite) TestParse() {
parsedQuery: &parsedQuery{
earliestCloseTime: time.Unix(0, 2000).UTC(),
latestCloseTime: time.Unix(0, 9999).UTC(),
runID: util.Ptr("random runID"),
status: toWorkflowExecutionStatusPtr(enumspb.WORKFLOW_EXECUTION_STATUS_FAILED),
runID: new("random runID"),
status: new(enumspb.WORKFLOW_EXECUTION_STATUS_FAILED),
},
},
{
Expand Down
Loading
Loading