diff --git a/common/jsonTaskTokenSerializer.go b/common/json_task_token_serializer.go similarity index 100% rename from common/jsonTaskTokenSerializer.go rename to common/json_task_token_serializer.go diff --git a/common/json_task_token_serializer_test.go b/common/json_task_token_serializer_test.go new file mode 100644 index 00000000000..dbfba812090 --- /dev/null +++ b/common/json_task_token_serializer_test.go @@ -0,0 +1,67 @@ +// The MIT License (MIT) + +// Copyright (c) 2017-2020 Uber Technologies Inc. + +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in all +// copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +// SOFTWARE. + +package common + +import ( + "testing" + + "github.com/stretchr/testify/require" +) + +func TestJsonTaskTokenSerializer_Token_RoundTrip(t *testing.T) { + token := TaskToken{ + DomainID: "test-domain", + WorkflowID: "test-workflow-id", + WorkflowType: "test-workflow-type", + RunID: "test-run-id", + ScheduleID: 1, + ScheduleAttempt: 1, + ActivityID: "test-activity-id", + ActivityType: "test-activity-type", + } + + serializer := NewJSONTaskTokenSerializer() + + serialized, err := serializer.Serialize(&token) + require.NoError(t, err) + deserializedToken, err := serializer.Deserialize(serialized) + require.NoError(t, err) + require.Equal(t, token, *deserializedToken) +} + +func TestNewJSONTaskTokenSerializer_QueryToken_Roundtrip(t *testing.T) { + token := QueryTaskToken{ + DomainID: "test-domain", + WorkflowID: "test-workflow-id", + RunID: "test-run-id", + TaskList: "test-task-list", + TaskID: "test-task-id", + } + serializer := NewJSONTaskTokenSerializer() + + serialized, err := serializer.SerializeQueryTaskToken(&token) + require.NoError(t, err) + deserializedToken, err := serializer.DeserializeQueryTaskToken(serialized) + require.NoError(t, err) + require.Equal(t, token, *deserializedToken) +} diff --git a/common/taskTokenSerializerInterfaces.go b/common/taskTokenSerializerInterfaces.go index eb96f58aef5..f26b570a7fb 100644 --- a/common/taskTokenSerializerInterfaces.go +++ b/common/taskTokenSerializerInterfaces.go @@ -45,9 +45,11 @@ type ( // QueryTaskToken identifies a query task QueryTaskToken struct { - DomainID string `json:"domainId"` - TaskList string `json:"taskList"` - TaskID string `json:"taskId"` + DomainID string `json:"domainId"` + WorkflowID string `json:"workflowId"` + RunID string `json:"runId"` + TaskList string `json:"taskList"` + TaskID string `json:"taskId"` } ) diff --git a/service/frontend/api/handler.go b/service/frontend/api/handler.go index da045827b35..1cb4fc85938 100644 --- a/service/frontend/api/handler.go +++ b/service/frontend/api/handler.go @@ -1722,8 +1722,8 @@ func (wh *WorkflowHandler) RespondQueryTaskCompleted( sizeLimitError, queryTaskToken.DomainID, domainName, - "", - "", + queryTaskToken.WorkflowID, + queryTaskToken.RunID, scope, wh.GetLogger(), tag.BlobSizeViolationOperation("RespondQueryTaskCompleted"), diff --git a/service/matching/handler/engine.go b/service/matching/handler/engine.go index 7ff1e724b1c..a3a1b0b18c5 100644 --- a/service/matching/handler/engine.go +++ b/service/matching/handler/engine.go @@ -1036,10 +1036,13 @@ func (e *matchingEngineImpl) createPollForDecisionTaskResponse( if task.IsQuery() { // for a query task queryRequest := task.Query.Request + execution := task.WorkflowExecution() taskToken := &common.QueryTaskToken{ - DomainID: queryRequest.DomainUUID, - TaskList: queryRequest.TaskList.Name, - TaskID: task.Query.TaskID, + DomainID: queryRequest.DomainUUID, + WorkflowID: execution.WorkflowID, + RunID: execution.RunID, + TaskList: queryRequest.TaskList.Name, + TaskID: task.Query.TaskID, } token, _ = e.tokenSerializer.SerializeQueryTaskToken(taskToken) } else {