go.temporal.io/server@v1.23.0/common/persistence/sql/execution_state_non_map.go (about) 1 // The MIT License 2 // 3 // Copyright (c) 2020 Temporal Technologies Inc. All rights reserved. 4 // 5 // Copyright (c) 2020 Uber Technologies, Inc. 6 // 7 // Permission is hereby granted, free of charge, to any person obtaining a copy 8 // of this software and associated documentation files (the "Software"), to deal 9 // in the Software without restriction, including without limitation the rights 10 // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 11 // copies of the Software, and to permit persons to whom the Software is 12 // furnished to do so, subject to the following conditions: 13 // 14 // The above copyright notice and this permission notice shall be included in 15 // all copies or substantial portions of the Software. 16 // 17 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 18 // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 19 // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 20 // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 21 // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 22 // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 23 // THE SOFTWARE. 24 25 package sql 26 27 import ( 28 "context" 29 "database/sql" 30 "fmt" 31 32 commonpb "go.temporal.io/api/common/v1" 33 "go.temporal.io/api/serviceerror" 34 35 "go.temporal.io/server/common/convert" 36 p "go.temporal.io/server/common/persistence" 37 "go.temporal.io/server/common/persistence/sql/sqlplugin" 38 "go.temporal.io/server/common/primitives" 39 ) 40 41 func updateSignalsRequested( 42 ctx context.Context, 43 tx sqlplugin.Tx, 44 signalRequestedIDs map[string]struct{}, 45 deleteIDs map[string]struct{}, 46 shardID int32, 47 namespaceID primitives.UUID, 48 workflowID string, 49 runID primitives.UUID, 50 ) error { 51 52 if len(signalRequestedIDs) > 0 { 53 rows := make([]sqlplugin.SignalsRequestedSetsRow, 0, len(signalRequestedIDs)) 54 for signalRequestedID := range signalRequestedIDs { 55 rows = append(rows, sqlplugin.SignalsRequestedSetsRow{ 56 ShardID: shardID, 57 NamespaceID: namespaceID, 58 WorkflowID: workflowID, 59 RunID: runID, 60 SignalID: signalRequestedID, 61 }) 62 } 63 if _, err := tx.ReplaceIntoSignalsRequestedSets(ctx, rows); err != nil { 64 return serviceerror.NewUnavailable(fmt.Sprintf("Failed to update signals requested. Failed to execute update query. Error: %v", err)) 65 } 66 } 67 68 if len(deleteIDs) > 0 { 69 if _, err := tx.DeleteFromSignalsRequestedSets(ctx, sqlplugin.SignalsRequestedSetsFilter{ 70 ShardID: shardID, 71 NamespaceID: namespaceID, 72 WorkflowID: workflowID, 73 RunID: runID, 74 SignalIDs: convert.StringSetToSlice(deleteIDs), 75 }); err != nil { 76 return serviceerror.NewUnavailable(fmt.Sprintf("Failed to update signals requested. Failed to execute delete query. Error: %v", err)) 77 } 78 } 79 return nil 80 } 81 82 func getSignalsRequested( 83 ctx context.Context, 84 db sqlplugin.DB, 85 shardID int32, 86 namespaceID primitives.UUID, 87 workflowID string, 88 runID primitives.UUID, 89 ) ([]string, error) { 90 91 rows, err := db.SelectAllFromSignalsRequestedSets(ctx, sqlplugin.SignalsRequestedSetsAllFilter{ 92 ShardID: shardID, 93 NamespaceID: namespaceID, 94 WorkflowID: workflowID, 95 RunID: runID, 96 }) 97 if err != nil && err != sql.ErrNoRows { 98 return nil, serviceerror.NewUnavailable(fmt.Sprintf("Failed to get signals requested. Error: %v", err)) 99 } 100 var ret = make([]string, len(rows)) 101 for i, s := range rows { 102 ret[i] = s.SignalID 103 } 104 return ret, nil 105 } 106 107 func deleteSignalsRequestedSet( 108 ctx context.Context, 109 tx sqlplugin.Tx, 110 shardID int32, 111 namespaceID primitives.UUID, 112 workflowID string, 113 runID primitives.UUID, 114 ) error { 115 116 if _, err := tx.DeleteAllFromSignalsRequestedSets(ctx, sqlplugin.SignalsRequestedSetsAllFilter{ 117 ShardID: shardID, 118 NamespaceID: namespaceID, 119 WorkflowID: workflowID, 120 RunID: runID, 121 }); err != nil { 122 return serviceerror.NewUnavailable(fmt.Sprintf("Failed to delete signals requested set. Error: %v", err)) 123 } 124 return nil 125 } 126 127 func updateBufferedEvents( 128 ctx context.Context, 129 tx sqlplugin.Tx, 130 batch *commonpb.DataBlob, 131 shardID int32, 132 namespaceID primitives.UUID, 133 workflowID string, 134 runID primitives.UUID, 135 ) error { 136 137 if batch == nil { 138 return nil 139 } 140 row := sqlplugin.BufferedEventsRow{ 141 ShardID: shardID, 142 NamespaceID: namespaceID, 143 WorkflowID: workflowID, 144 RunID: runID, 145 Data: batch.Data, 146 DataEncoding: batch.EncodingType.String(), 147 } 148 149 if _, err := tx.InsertIntoBufferedEvents(ctx, []sqlplugin.BufferedEventsRow{row}); err != nil { 150 return serviceerror.NewUnavailable(fmt.Sprintf("updateBufferedEvents operation failed. Error: %v", err)) 151 } 152 return nil 153 } 154 155 func getBufferedEvents( 156 ctx context.Context, 157 db sqlplugin.DB, 158 shardID int32, 159 namespaceID primitives.UUID, 160 workflowID string, 161 runID primitives.UUID, 162 ) ([]*commonpb.DataBlob, error) { 163 164 rows, err := db.SelectFromBufferedEvents(ctx, sqlplugin.BufferedEventsFilter{ 165 ShardID: shardID, 166 NamespaceID: namespaceID, 167 WorkflowID: workflowID, 168 RunID: runID, 169 }) 170 if err != nil && err != sql.ErrNoRows { 171 return nil, serviceerror.NewUnavailable(fmt.Sprintf("getBufferedEvents operation failed. Select failed: %v", err)) 172 } 173 var result []*commonpb.DataBlob 174 for _, row := range rows { 175 result = append(result, p.NewDataBlob(row.Data, row.DataEncoding)) 176 } 177 return result, nil 178 } 179 180 func deleteBufferedEvents( 181 ctx context.Context, 182 tx sqlplugin.Tx, 183 shardID int32, 184 namespaceID primitives.UUID, 185 workflowID string, 186 runID primitives.UUID, 187 ) error { 188 189 if _, err := tx.DeleteFromBufferedEvents(ctx, sqlplugin.BufferedEventsFilter{ 190 ShardID: shardID, 191 NamespaceID: namespaceID, 192 WorkflowID: workflowID, 193 RunID: runID, 194 }); err != nil { 195 return serviceerror.NewUnavailable(fmt.Sprintf("updateBufferedEvents delete operation failed. Error: %v", err)) 196 } 197 return nil 198 }