Files
Jacob BarzeeandGitHub 06171037f0 Import alignment (#6426)
## What changed?
Make import formatting a part of the build, and test validity with
"ensure-no-changes" target

## Why?
So we never discuss import order again (hopefully)

## How did you test it?
its a build change, so the build will test it!

## Potential risks
As long as build works, the only thing I risk is the ire of coworker who
want imports to be different ;)

## Documentation
N/A

## Is hotfix candidate?
No
2024-08-23 14:48:10 -06:00

1125 lines
23 KiB
Go

// The MIT License
//
// Copyright (c) 2020 Temporal Technologies Inc. All rights reserved.
//
// Copyright (c) 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 cassandra
import (
commonpb "go.temporal.io/api/common/v1"
enumspb "go.temporal.io/api/enums/v1"
persistencespb "go.temporal.io/server/api/persistence/v1"
"go.temporal.io/server/common/convert"
p "go.temporal.io/server/common/persistence"
"go.temporal.io/server/common/persistence/nosql/nosqlplugin/cassandra/gocql"
"go.temporal.io/server/service/history/tasks"
)
func applyWorkflowMutationBatch(
batch *gocql.Batch,
shardID int32,
workflowMutation *p.InternalWorkflowMutation,
) error {
// TODO update all call sites to update LastUpdatetime
// cqlNowTimestampMillis := p.UnixMilliseconds(time.Now().UTC())
namespaceID := workflowMutation.NamespaceID
workflowID := workflowMutation.WorkflowID
runID := workflowMutation.RunID
if err := updateExecution(
batch,
shardID,
namespaceID,
workflowID,
runID,
workflowMutation.ExecutionInfoBlob,
workflowMutation.ExecutionState,
workflowMutation.ExecutionStateBlob,
workflowMutation.NextEventID,
workflowMutation.Condition,
workflowMutation.DBRecordVersion,
workflowMutation.Checksum,
); err != nil {
return err
}
if err := updateActivityInfos(
batch,
workflowMutation.UpsertActivityInfos,
workflowMutation.DeleteActivityInfos,
shardID,
namespaceID,
workflowID,
runID,
); err != nil {
return err
}
if err := updateTimerInfos(
batch,
workflowMutation.UpsertTimerInfos,
workflowMutation.DeleteTimerInfos,
shardID,
namespaceID,
workflowID,
runID,
); err != nil {
return err
}
if err := updateChildExecutionInfos(
batch,
workflowMutation.UpsertChildExecutionInfos,
workflowMutation.DeleteChildExecutionInfos,
shardID,
namespaceID,
workflowID,
runID,
); err != nil {
return err
}
if err := updateRequestCancelInfos(
batch,
workflowMutation.UpsertRequestCancelInfos,
workflowMutation.DeleteRequestCancelInfos,
shardID,
namespaceID,
workflowID,
runID,
); err != nil {
return err
}
if err := updateSignalInfos(
batch,
workflowMutation.UpsertSignalInfos,
workflowMutation.DeleteSignalInfos,
shardID,
namespaceID,
workflowID,
runID,
); err != nil {
return err
}
updateSignalsRequested(
batch,
workflowMutation.UpsertSignalRequestedIDs,
workflowMutation.DeleteSignalRequestedIDs,
shardID,
namespaceID,
workflowID,
runID,
)
updateBufferedEvents(
batch,
workflowMutation.NewBufferedEvents,
workflowMutation.ClearBufferedEvents,
shardID,
namespaceID,
workflowID,
runID,
)
// transfer / replication / timer tasks
return applyTasks(
batch,
shardID,
workflowMutation.Tasks,
)
}
func applyWorkflowSnapshotBatchAsReset(
batch *gocql.Batch,
shardID int32,
workflowSnapshot *p.InternalWorkflowSnapshot,
) error {
// TODO: update call site
// cqlNowTimestampMillis := p.UnixMilliseconds(time.Now().UTC())
namespaceID := workflowSnapshot.NamespaceID
workflowID := workflowSnapshot.WorkflowID
runID := workflowSnapshot.RunID
if err := updateExecution(
batch,
shardID,
namespaceID,
workflowID,
runID,
workflowSnapshot.ExecutionInfoBlob,
workflowSnapshot.ExecutionState,
workflowSnapshot.ExecutionStateBlob,
workflowSnapshot.NextEventID,
workflowSnapshot.Condition,
workflowSnapshot.DBRecordVersion,
workflowSnapshot.Checksum,
); err != nil {
return err
}
if err := resetActivityInfos(
batch,
workflowSnapshot.ActivityInfos,
shardID,
namespaceID,
workflowID,
runID,
); err != nil {
return err
}
if err := resetTimerInfos(
batch,
workflowSnapshot.TimerInfos,
shardID,
namespaceID,
workflowID,
runID,
); err != nil {
return err
}
if err := resetChildExecutionInfos(
batch,
workflowSnapshot.ChildExecutionInfos,
shardID,
namespaceID,
workflowID,
runID,
); err != nil {
return err
}
if err := resetRequestCancelInfos(
batch,
workflowSnapshot.RequestCancelInfos,
shardID,
namespaceID,
workflowID,
runID,
); err != nil {
return err
}
if err := resetSignalInfos(
batch,
workflowSnapshot.SignalInfos,
shardID,
namespaceID,
workflowID,
runID,
); err != nil {
return err
}
resetSignalRequested(
batch,
workflowSnapshot.SignalRequestedIDs,
shardID,
namespaceID,
workflowID,
runID,
)
deleteBufferedEvents(
batch,
shardID,
namespaceID,
workflowID,
runID,
)
// transfer / replication / timer tasks
return applyTasks(
batch,
shardID,
workflowSnapshot.Tasks,
)
}
func applyWorkflowSnapshotBatchAsNew(
batch *gocql.Batch,
shardID int32,
workflowSnapshot *p.InternalWorkflowSnapshot,
) error {
namespaceID := workflowSnapshot.NamespaceID
workflowID := workflowSnapshot.WorkflowID
runID := workflowSnapshot.RunID
if err := createExecution(
batch,
shardID,
workflowSnapshot,
); err != nil {
return err
}
if err := updateActivityInfos(
batch,
workflowSnapshot.ActivityInfos,
nil,
shardID,
namespaceID,
workflowID,
runID,
); err != nil {
return err
}
if err := updateTimerInfos(
batch,
workflowSnapshot.TimerInfos,
nil,
shardID,
namespaceID,
workflowID,
runID,
); err != nil {
return err
}
if err := updateChildExecutionInfos(
batch,
workflowSnapshot.ChildExecutionInfos,
nil,
shardID,
namespaceID,
workflowID,
runID,
); err != nil {
return err
}
if err := updateRequestCancelInfos(
batch,
workflowSnapshot.RequestCancelInfos,
nil,
shardID,
namespaceID,
workflowID,
runID,
); err != nil {
return err
}
if err := updateSignalInfos(
batch,
workflowSnapshot.SignalInfos,
nil,
shardID,
namespaceID,
workflowID,
runID,
); err != nil {
return err
}
updateSignalsRequested(
batch,
workflowSnapshot.SignalRequestedIDs,
nil,
shardID,
namespaceID,
workflowID,
runID,
)
// transfer / replication / timer tasks
return applyTasks(
batch,
shardID,
workflowSnapshot.Tasks,
)
}
func createExecution(
batch *gocql.Batch,
shardID int32,
snapshot *p.InternalWorkflowSnapshot,
) error {
// validate workflow state & close status
if err := p.ValidateCreateWorkflowStateStatus(
snapshot.ExecutionState.State,
snapshot.ExecutionState.Status); err != nil {
return err
}
// TODO also need to set the start / current / last write version
batch.Query(templateCreateWorkflowExecutionQuery,
shardID,
snapshot.NamespaceID,
snapshot.WorkflowID,
snapshot.RunID,
rowTypeExecution,
snapshot.ExecutionInfoBlob.Data,
snapshot.ExecutionInfoBlob.EncodingType.String(),
snapshot.ExecutionStateBlob.Data,
snapshot.ExecutionStateBlob.EncodingType.String(),
snapshot.NextEventID,
snapshot.DBRecordVersion,
defaultVisibilityTimestamp,
rowTypeExecutionTaskID,
snapshot.Checksum.Data,
snapshot.Checksum.EncodingType.String(),
)
return nil
}
func updateExecution(
batch *gocql.Batch,
shardID int32,
namespaceID string,
workflowID string,
runID string,
executionInfoBlob *commonpb.DataBlob,
executionState *persistencespb.WorkflowExecutionState,
executionStateBlob *commonpb.DataBlob,
nextEventID int64,
condition int64,
dbRecordVersion int64,
checksumBlob *commonpb.DataBlob,
) error {
// validate workflow state & close status
if err := p.ValidateUpdateWorkflowStateStatus(
executionState.State,
executionState.Status); err != nil {
return err
}
if dbRecordVersion == 0 {
batch.Query(templateUpdateWorkflowExecutionQueryDeprecated,
executionInfoBlob.Data,
executionInfoBlob.EncodingType.String(),
executionStateBlob.Data,
executionStateBlob.EncodingType.String(),
nextEventID,
dbRecordVersion,
checksumBlob.Data,
checksumBlob.EncodingType.String(),
shardID,
rowTypeExecution,
namespaceID,
workflowID,
runID,
defaultVisibilityTimestamp,
rowTypeExecutionTaskID,
condition,
)
} else {
batch.Query(templateUpdateWorkflowExecutionQuery,
executionInfoBlob.Data,
executionInfoBlob.EncodingType.String(),
executionStateBlob.Data,
executionStateBlob.EncodingType.String(),
nextEventID,
dbRecordVersion,
checksumBlob.Data,
checksumBlob.EncodingType.String(),
shardID,
rowTypeExecution,
namespaceID,
workflowID,
runID,
defaultVisibilityTimestamp,
rowTypeExecutionTaskID,
dbRecordVersion-1,
)
}
return nil
}
func applyTasks(
batch *gocql.Batch,
shardID int32,
insertTasks map[tasks.Category][]p.InternalHistoryTask,
) error {
var err error
for category, tasksByCategory := range insertTasks {
switch category.ID() {
case tasks.CategoryIDTransfer:
err = createTransferTasks(batch, tasksByCategory, shardID)
case tasks.CategoryIDTimer:
err = createTimerTasks(batch, tasksByCategory, shardID)
case tasks.CategoryIDVisibility:
err = createVisibilityTasks(batch, tasksByCategory, shardID)
case tasks.CategoryIDReplication:
err = createReplicationTasks(batch, tasksByCategory, shardID)
default:
err = createHistoryTasks(batch, category, tasksByCategory, shardID)
}
if err != nil {
return err
}
}
return nil
}
func createTransferTasks(
batch *gocql.Batch,
transferTasks []p.InternalHistoryTask,
shardID int32,
) error {
for _, task := range transferTasks {
batch.Query(templateCreateTransferTaskQuery,
shardID,
rowTypeTransferTask,
rowTypeTransferNamespaceID,
rowTypeTransferWorkflowID,
rowTypeTransferRunID,
task.Blob.Data,
task.Blob.EncodingType.String(),
defaultVisibilityTimestamp,
task.Key.TaskID,
)
}
return nil
}
func createTimerTasks(
batch *gocql.Batch,
timerTasks []p.InternalHistoryTask,
shardID int32,
) error {
for _, task := range timerTasks {
batch.Query(templateCreateTimerTaskQuery,
shardID,
rowTypeTimerTask,
rowTypeTimerNamespaceID,
rowTypeTimerWorkflowID,
rowTypeTimerRunID,
task.Blob.Data,
task.Blob.EncodingType.String(),
p.UnixMilliseconds(task.Key.FireTime),
task.Key.TaskID,
)
}
return nil
}
func createReplicationTasks(
batch *gocql.Batch,
replicationTasks []p.InternalHistoryTask,
shardID int32,
) error {
for _, task := range replicationTasks {
batch.Query(templateCreateReplicationTaskQuery,
shardID,
rowTypeReplicationTask,
rowTypeReplicationNamespaceID,
rowTypeReplicationWorkflowID,
rowTypeReplicationRunID,
task.Blob.Data,
task.Blob.EncodingType.String(),
defaultVisibilityTimestamp,
task.Key.TaskID,
)
}
return nil
}
func createVisibilityTasks(
batch *gocql.Batch,
visibilityTasks []p.InternalHistoryTask,
shardID int32,
) error {
for _, task := range visibilityTasks {
batch.Query(templateCreateVisibilityTaskQuery,
shardID,
rowTypeVisibilityTask,
rowTypeVisibilityTaskNamespaceID,
rowTypeVisibilityTaskWorkflowID,
rowTypeVisibilityTaskRunID,
task.Blob.Data,
task.Blob.EncodingType.String(),
defaultVisibilityTimestamp,
task.Key.TaskID,
)
}
return nil
}
func createHistoryTasks(
batch *gocql.Batch,
category tasks.Category,
historyTasks []p.InternalHistoryTask,
shardID int32,
) error {
isScheduledTask := category.Type() == tasks.CategoryTypeScheduled
for _, task := range historyTasks {
visibilityTimestamp := defaultVisibilityTimestamp
if isScheduledTask {
visibilityTimestamp = p.UnixMilliseconds(task.Key.FireTime)
}
batch.Query(templateCreateHistoryTaskQuery,
shardID,
category.ID(),
rowTypeHistoryTaskNamespaceID,
rowTypeHistoryTaskWorkflowID,
rowTypeHistoryTaskRunID,
task.Blob.Data,
task.Blob.EncodingType.String(),
visibilityTimestamp,
task.Key.TaskID,
)
}
return nil
}
func updateActivityInfos(
batch *gocql.Batch,
activityInfos map[int64]*commonpb.DataBlob,
deleteIDs map[int64]struct{},
shardID int32,
namespaceID string,
workflowID string,
runID string,
) error {
for scheduledEventID, blob := range activityInfos {
batch.Query(templateUpdateActivityInfoQuery,
scheduledEventID,
blob.Data,
blob.EncodingType.String(),
shardID,
rowTypeExecution,
namespaceID,
workflowID,
runID,
defaultVisibilityTimestamp,
rowTypeExecutionTaskID)
}
for deleteID := range deleteIDs {
batch.Query(templateDeleteActivityInfoQuery,
deleteID,
shardID,
rowTypeExecution,
namespaceID,
workflowID,
runID,
defaultVisibilityTimestamp,
rowTypeExecutionTaskID)
}
return nil
}
func deleteBufferedEvents(
batch *gocql.Batch,
shardID int32,
namespaceID string,
workflowID string,
runID string,
) {
batch.Query(templateDeleteBufferedEventsQuery,
shardID,
rowTypeExecution,
namespaceID,
workflowID,
runID,
defaultVisibilityTimestamp,
rowTypeExecutionTaskID,
)
}
func resetActivityInfos(
batch *gocql.Batch,
activityInfos map[int64]*commonpb.DataBlob,
shardID int32,
namespaceID string,
workflowID string,
runID string,
) error {
infoMap, encoding, err := resetActivityInfoMap(activityInfos)
if err != nil {
return err
}
batch.Query(templateResetActivityInfoQuery,
infoMap,
encoding.String(),
shardID,
rowTypeExecution,
namespaceID,
workflowID,
runID,
defaultVisibilityTimestamp,
rowTypeExecutionTaskID)
return nil
}
func updateTimerInfos(
batch *gocql.Batch,
timerInfos map[string]*commonpb.DataBlob,
deleteInfos map[string]struct{},
shardID int32,
namespaceID string,
workflowID string,
runID string,
) error {
for timerID, blob := range timerInfos {
batch.Query(templateUpdateTimerInfoQuery,
timerID,
blob.Data,
blob.EncodingType.String(),
shardID,
rowTypeExecution,
namespaceID,
workflowID,
runID,
defaultVisibilityTimestamp,
rowTypeExecutionTaskID)
}
for deleteInfoID := range deleteInfos {
batch.Query(templateDeleteTimerInfoQuery,
deleteInfoID,
shardID,
rowTypeExecution,
namespaceID,
workflowID,
runID,
defaultVisibilityTimestamp,
rowTypeExecutionTaskID)
}
return nil
}
func resetTimerInfos(
batch *gocql.Batch,
timerInfos map[string]*commonpb.DataBlob,
shardID int32,
namespaceID string,
workflowID string,
runID string,
) error {
timerMap, timerMapEncoding, err := resetTimerInfoMap(timerInfos)
if err != nil {
return err
}
batch.Query(templateResetTimerInfoQuery,
timerMap,
timerMapEncoding.String(),
shardID,
rowTypeExecution,
namespaceID,
workflowID,
runID,
defaultVisibilityTimestamp,
rowTypeExecutionTaskID)
return nil
}
func updateChildExecutionInfos(
batch *gocql.Batch,
childExecutionInfos map[int64]*commonpb.DataBlob,
deleteIDs map[int64]struct{},
shardID int32,
namespaceID string,
workflowID string,
runID string,
) error {
for initiatedId, blob := range childExecutionInfos {
batch.Query(templateUpdateChildExecutionInfoQuery,
initiatedId,
blob.Data,
blob.EncodingType.String(),
shardID,
rowTypeExecution,
namespaceID,
workflowID,
runID,
defaultVisibilityTimestamp,
rowTypeExecutionTaskID)
}
for deleteID := range deleteIDs {
batch.Query(templateDeleteChildExecutionInfoQuery,
deleteID,
shardID,
rowTypeExecution,
namespaceID,
workflowID,
runID,
defaultVisibilityTimestamp,
rowTypeExecutionTaskID)
}
return nil
}
func resetChildExecutionInfos(
batch *gocql.Batch,
childExecutionInfos map[int64]*commonpb.DataBlob,
shardID int32,
namespaceID string,
workflowID string,
runID string,
) error {
infoMap, encoding, err := resetChildExecutionInfoMap(childExecutionInfos)
if err != nil {
return err
}
batch.Query(templateResetChildExecutionInfoQuery,
infoMap,
encoding.String(),
shardID,
rowTypeExecution,
namespaceID,
workflowID,
runID,
defaultVisibilityTimestamp,
rowTypeExecutionTaskID)
return nil
}
func updateRequestCancelInfos(
batch *gocql.Batch,
requestCancelInfos map[int64]*commonpb.DataBlob,
deleteIDs map[int64]struct{},
shardID int32,
namespaceID string,
workflowID string,
runID string,
) error {
for initiatedId, blob := range requestCancelInfos {
batch.Query(templateUpdateRequestCancelInfoQuery,
initiatedId,
blob.Data,
blob.EncodingType.String(),
shardID,
rowTypeExecution,
namespaceID,
workflowID,
runID,
defaultVisibilityTimestamp,
rowTypeExecutionTaskID)
}
for deleteID := range deleteIDs {
batch.Query(templateDeleteRequestCancelInfoQuery,
deleteID,
shardID,
rowTypeExecution,
namespaceID,
workflowID,
runID,
defaultVisibilityTimestamp,
rowTypeExecutionTaskID)
}
return nil
}
func resetRequestCancelInfos(
batch *gocql.Batch,
requestCancelInfos map[int64]*commonpb.DataBlob,
shardID int32,
namespaceID string,
workflowID string,
runID string,
) error {
rciMap, rciMapEncoding, err := resetRequestCancelInfoMap(requestCancelInfos)
if err != nil {
return err
}
batch.Query(templateResetRequestCancelInfoQuery,
rciMap,
rciMapEncoding.String(),
shardID,
rowTypeExecution,
namespaceID,
workflowID,
runID,
defaultVisibilityTimestamp,
rowTypeExecutionTaskID)
return nil
}
func updateSignalInfos(
batch *gocql.Batch,
signalInfos map[int64]*commonpb.DataBlob,
deleteIDs map[int64]struct{},
shardID int32,
namespaceID string,
workflowID string,
runID string,
) error {
for initiatedId, blob := range signalInfos {
batch.Query(templateUpdateSignalInfoQuery,
initiatedId,
blob.Data,
blob.EncodingType.String(),
shardID,
rowTypeExecution,
namespaceID,
workflowID,
runID,
defaultVisibilityTimestamp,
rowTypeExecutionTaskID)
}
for deleteID := range deleteIDs {
batch.Query(templateDeleteSignalInfoQuery,
deleteID,
shardID,
rowTypeExecution,
namespaceID,
workflowID,
runID,
defaultVisibilityTimestamp,
rowTypeExecutionTaskID)
}
return nil
}
func resetSignalInfos(
batch *gocql.Batch,
signalInfos map[int64]*commonpb.DataBlob,
shardID int32,
namespaceID string,
workflowID string,
runID string,
) error {
sMap, sMapEncoding, err := resetSignalInfoMap(signalInfos)
if err != nil {
return err
}
batch.Query(templateResetSignalInfoQuery,
sMap,
sMapEncoding.String(),
shardID,
rowTypeExecution,
namespaceID,
workflowID,
runID,
defaultVisibilityTimestamp,
rowTypeExecutionTaskID)
return nil
}
func updateSignalsRequested(
batch *gocql.Batch,
signalReqIDs map[string]struct{},
deleteSignalReqIDs map[string]struct{},
shardID int32,
namespaceID string,
workflowID string,
runID string,
) {
if len(signalReqIDs) > 0 {
batch.Query(templateUpdateSignalRequestedQuery,
convert.StringSetToSlice(signalReqIDs),
shardID,
rowTypeExecution,
namespaceID,
workflowID,
runID,
defaultVisibilityTimestamp,
rowTypeExecutionTaskID)
}
if len(deleteSignalReqIDs) > 0 {
batch.Query(templateDeleteWorkflowExecutionSignalRequestedQuery,
convert.StringSetToSlice(deleteSignalReqIDs),
shardID,
rowTypeExecution,
namespaceID,
workflowID,
runID,
defaultVisibilityTimestamp,
rowTypeExecutionTaskID)
}
}
func resetSignalRequested(
batch *gocql.Batch,
signalRequested map[string]struct{},
shardID int32,
namespaceID string,
workflowID string,
runID string,
) {
batch.Query(templateResetSignalRequestedQuery,
convert.StringSetToSlice(signalRequested),
shardID,
rowTypeExecution,
namespaceID,
workflowID,
runID,
defaultVisibilityTimestamp,
rowTypeExecutionTaskID)
}
func updateBufferedEvents(
batch *gocql.Batch,
newBufferedEvents *commonpb.DataBlob,
clearBufferedEvents bool,
shardID int32,
namespaceID string,
workflowID string,
runID string,
) {
if clearBufferedEvents {
batch.Query(templateDeleteBufferedEventsQuery,
shardID,
rowTypeExecution,
namespaceID,
workflowID,
runID,
defaultVisibilityTimestamp,
rowTypeExecutionTaskID)
} else if newBufferedEvents != nil {
values := make(map[string]interface{})
values["encoding_type"] = newBufferedEvents.EncodingType.String()
values["version"] = int64(0)
values["data"] = newBufferedEvents.Data
newEventValues := []map[string]interface{}{values}
batch.Query(templateAppendBufferedEventsQuery,
newEventValues,
shardID,
rowTypeExecution,
namespaceID,
workflowID,
runID,
defaultVisibilityTimestamp,
rowTypeExecutionTaskID)
}
}
func resetActivityInfoMap(
activityInfos map[int64]*commonpb.DataBlob,
) (map[int64][]byte, enumspb.EncodingType, error) {
encoding := enumspb.ENCODING_TYPE_UNSPECIFIED
aMap := make(map[int64][]byte)
for scheduledEventID, blob := range activityInfos {
aMap[scheduledEventID] = blob.Data
encoding = blob.EncodingType
}
return aMap, encoding, nil
}
func resetTimerInfoMap(
timerInfos map[string]*commonpb.DataBlob,
) (map[string][]byte, enumspb.EncodingType, error) {
tMap := make(map[string][]byte)
var encoding enumspb.EncodingType
for timerID, blob := range timerInfos {
encoding = blob.EncodingType
tMap[timerID] = blob.Data
}
return tMap, encoding, nil
}
func resetChildExecutionInfoMap(
childExecutionInfos map[int64]*commonpb.DataBlob,
) (map[int64][]byte, enumspb.EncodingType, error) {
cMap := make(map[int64][]byte)
encoding := enumspb.ENCODING_TYPE_UNSPECIFIED
for initiatedID, blob := range childExecutionInfos {
cMap[initiatedID] = blob.Data
encoding = blob.EncodingType
}
return cMap, encoding, nil
}
func resetRequestCancelInfoMap(
requestCancelInfos map[int64]*commonpb.DataBlob,
) (map[int64][]byte, enumspb.EncodingType, error) {
rcMap := make(map[int64][]byte)
var encoding enumspb.EncodingType
for initiatedID, blob := range requestCancelInfos {
encoding = blob.EncodingType
rcMap[initiatedID] = blob.Data
}
return rcMap, encoding, nil
}
func resetSignalInfoMap(
signalInfos map[int64]*commonpb.DataBlob,
) (map[int64][]byte, enumspb.EncodingType, error) {
sMap := make(map[int64][]byte)
var encoding enumspb.EncodingType
for initiatedID, blob := range signalInfos {
encoding = blob.EncodingType
sMap[initiatedID] = blob.Data
}
return sMap, encoding, nil
}
func createHistoryEventBatchBlob(
result map[string]interface{},
) *commonpb.DataBlob {
eventBatch := &commonpb.DataBlob{EncodingType: enumspb.ENCODING_TYPE_UNSPECIFIED}
for k, v := range result {
switch k {
case "encoding_type":
encodingStr := v.(string)
if encoding, err := enumspb.EncodingTypeFromString(encodingStr); err == nil {
eventBatch.EncodingType = enumspb.EncodingType(encoding)
}
case "data":
eventBatch.Data = v.([]byte)
}
}
return eventBatch
}