@@ -56,60 +56,16 @@ ON OrleansGrainDirectory
56
56
57
57
DELIMITER $$
58
58
59
- /* Registers a new grain activation */
60
- CREATE PROCEDURE RegisterGrainActivation
59
+ INSERT INTO OrleansQuery
61
60
(
62
- IN _ClusterId NVARCHAR(150 ),
63
- IN _ProviderId NVARCHAR(150 ),
64
- IN _GrainIdHash INT ,
65
- IN _GrainId TEXT ,
66
- IN _SiloAddress NVARCHAR(100 ),
67
- IN _ActivationId NVARCHAR(100 )
61
+ QueryKey,
62
+ QueryText
68
63
)
69
- BEGIN
70
-
71
- DECLARE _Now DATETIME(3 ) DEFAULT UTC_TIMESTAMP(3 );
72
-
73
- SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;
74
- START TRANSACTION ;
75
-
76
64
SELECT
77
- ClusterId,
78
- ProviderId,
79
- GrainId,
80
- SiloAddress,
81
- ActivationId
82
- FROM
83
- OrleansGrainDirectory
84
- WHERE
85
- ClusterId = _ClusterId
86
- AND ProviderId = _ProviderId
87
- AND GrainIdHash = _GrainIdHash
88
- AND GrainId = _GrainId
89
- FOR UPDATE ;
90
-
91
- IF FOUND_ROWS() = 0 THEN
92
-
93
- INSERT INTO OrleansGrainDirectory
94
- (
95
- ClusterId,
96
- ProviderId,
97
- GrainIdHash,
98
- GrainId,
99
- SiloAddress,
100
- ActivationId,
101
- CreatedOn
102
- )
103
- VALUES
104
- (
105
- _ClusterId,
106
- _ProviderId,
107
- _GrainIdHash,
108
- _GrainId,
109
- _SiloAddress,
110
- _ActivationId,
111
- _Now
112
- );
65
+ ' RegisterGrainActivationKey' ,
66
+ '
67
+ SET AUTOCOMMIT = 0;
68
+ LOCK TABLES OrleansGrainDirectory WRITE;
113
69
114
70
SELECT
115
71
ClusterId,
@@ -120,116 +76,80 @@ IF FOUND_ROWS() = 0 THEN
120
76
FROM
121
77
OrleansGrainDirectory
122
78
WHERE
123
- ClusterId = _ClusterId
124
- AND ProviderId = _ProviderId
125
- AND GrainIdHash = _GrainIdHash
126
- AND GrainId = _GrainId;
127
-
128
- END IF;
129
-
130
- COMMIT ;
131
-
132
- END;
133
-
134
- DELIMITER $$
135
-
136
- INSERT INTO OrleansQuery
137
- (
138
- QueryKey,
139
- QueryText
140
- )
141
- SELECT
142
- ' RegisterGrainActivationKey' ,
143
- ' CALL RegisterGrainActivation (@ClusterId, @ProviderId, @GrainIdHash, @GrainId, @SiloAddress, @ActivationId)'
79
+ ClusterId = @ClusterId
80
+ AND ProviderId = @ProviderId
81
+ AND GrainIdHash = @GrainIdHash
82
+ AND GrainId = @GrainId;
83
+
84
+ IF FOUND_ROWS() = 0 THEN
85
+
86
+ INSERT INTO OrleansGrainDirectory
87
+ (
88
+ ClusterId,
89
+ ProviderId,
90
+ GrainIdHash,
91
+ GrainId,
92
+ SiloAddress,
93
+ ActivationId,
94
+ CreatedOn
95
+ )
96
+ SELECT
97
+ @ClusterId,
98
+ @ProviderId,
99
+ @GrainIdHash,
100
+ @GrainId,
101
+ @SiloAddress,
102
+ @ActivationId,
103
+ UTC_TIMESTAMP(3);
104
+
105
+ SELECT
106
+ ClusterId,
107
+ ProviderId,
108
+ GrainId,
109
+ SiloAddress,
110
+ ActivationId
111
+ FROM
112
+ OrleansGrainDirectory
113
+ WHERE
114
+ ClusterId = @ClusterId
115
+ AND ProviderId = @ProviderId
116
+ AND GrainIdHash = @GrainIdHash
117
+ AND GrainId = @GrainId;
118
+
119
+ END IF;
120
+
121
+ COMMIT;
122
+ UNLOCK TABLES;
123
+ '
144
124
;
145
125
146
126
DELIMITER $$
147
127
148
- /* Unregisters an existing grain activation */
149
- CREATE PROCEDURE UnregisterGrainActivation
150
- (
151
- IN _ClusterId NVARCHAR(150 ),
152
- IN _ProviderId NVARCHAR(150 ),
153
- IN _GrainIdHash INT ,
154
- IN _GrainId TEXT ,
155
- IN _ActivationId NVARCHAR(100 )
156
- )
157
- BEGIN
158
-
159
- SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;
160
- START TRANSACTION ;
161
-
162
- CREATE TEMPORARY TABLE _Batch AS
163
- SELECT
164
- *
165
- FROM
166
- OrleansGrainDirectory
167
- WHERE
168
- ClusterId = _ClusterId
169
- AND ProviderId = _ProviderId
170
- AND GrainIdHash = _GrainIdHash
171
- AND GrainId = _GrainId
172
- FOR UPDATE ;
173
-
174
- DELETE FROM OrleansGrainDirectory
175
- WHERE ClusterId = _ClusterId
176
- AND ProviderId = _ProviderId
177
- AND GrainIdHash = _GrainIdHash
178
- AND GrainId = _GrainId
179
- AND ActivationId = _ActivationId;
180
-
181
- SELECT ROW_COUNT();
182
-
183
- DROP TEMPORARY TABLE _Batch;
184
-
185
- COMMIT ;
186
-
187
- END;
188
-
189
- DELIMITER $$
190
-
191
128
INSERT INTO OrleansQuery
192
129
(
193
130
QueryKey,
194
131
QueryText
195
132
)
196
133
SELECT
197
134
' UnregisterGrainActivationKey' ,
198
- ' CALL UnregisterGrainActivation (@ClusterId, @ProviderId, @GrainIdHash, @GrainId, @ActivationId)'
199
- ;
200
-
201
- DELIMITER $$
135
+ '
136
+ SET AUTOCOMMIT = 0;
137
+ LOCK TABLES OrleansGrainDirectory WRITE;
202
138
203
- /* Looks up an existing grain activation */
204
- CREATE PROCEDURE LookupGrainActivation
205
- (
206
- IN _ClusterId NVARCHAR(150 ),
207
- IN _ProviderId NVARCHAR(150 ),
208
- IN _GrainIdHash INT ,
209
- IN _GrainId TEXT
210
- )
211
- BEGIN
139
+ DELETE FROM OrleansGrainDirectory
140
+ WHERE
141
+ ClusterId = @ClusterId
142
+ AND ProviderId = @ProviderId
143
+ AND GrainIdHash = @GrainIdHash
144
+ AND GrainId = @GrainId
145
+ AND ActivationId = @ActivationId;
212
146
213
- SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;
214
- START TRANSACTION ;
147
+ SELECT ROW_COUNT();
215
148
216
- SELECT
217
- ClusterId,
218
- ProviderId,
219
- GrainId,
220
- SiloAddress,
221
- ActivationId
222
- FROM
223
- OrleansGrainDirectory
224
- WHERE
225
- ClusterId = _ClusterId
226
- AND ProviderId = _ProviderId
227
- AND GrainIdHash = _GrainIdHash
228
- AND GrainId = _GrainId;
229
-
230
- COMMIT ;
231
-
232
- END;
149
+ COMMIT;
150
+ UNLOCK TABLES;
151
+ '
152
+ ;
233
153
234
154
DELIMITER $$
235
155
@@ -240,61 +160,28 @@ INSERT INTO OrleansQuery
240
160
)
241
161
SELECT
242
162
' LookupGrainActivationKey' ,
243
- ' CALL LookupGrainActivation(@ClusterId, @ProviderId, @GrainIdHash, @GrainId)'
244
- ;
245
-
246
- DELIMITER $$
163
+ '
164
+ SET AUTOCOMMIT = 0;
165
+ LOCK TABLES OrleansGrainDirectory WRITE;
247
166
248
- /* Unregisters all grain activations in the specified silos */
249
- CREATE PROCEDURE UnregisterGrainActivations
250
- (
251
- IN _ClusterId NVARCHAR(150 ),
252
- IN _ProviderId NVARCHAR(150 ),
253
- IN _SiloAddresses TEXT
254
- )
255
- BEGIN
256
-
257
- CREATE TEMPORARY TABLE TempSiloAddresses
258
- (
259
- SiloAddress NVARCHAR(100 ) NOT NULL ,
260
- Level INT NOT NULL
261
- );
262
-
263
- INSERT INTO TempSiloAddresses
264
- (
265
- SiloAddress,
266
- Level
267
- )
268
- WITH RECURSIVE SiloAddressesCTE AS
269
- (
270
- SELECT
271
- SUBSTRING_INDEX(_SiloAddresses, ' |' , 1 ) AS Value,
272
- SUBSTRING (_SiloAddresses, CHAR_LENGTH(SUBSTRING_INDEX(_SiloAddresses, ' |' , 1 )) + 2 , CHAR_LENGTH(_SiloAddresses)) AS Others,
273
- 1 AS Level
274
- UNION ALL
275
- SELECT
276
- SUBSTRING_INDEX(Others, ' |' , 1 ) AS Value,
277
- SUBSTRING (Others, CHAR_LENGTH(SUBSTRING_INDEX(Others, ' |' , 1 )) + 2 , CHAR_LENGTH(Others)) AS Others,
278
- Level + 1
279
- FROM SiloAddressesCTE
280
- WHERE Others != ' '
281
- )
282
- SELECT Value, Level FROM SiloAddressesCTE;
283
-
284
- SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;
285
- START TRANSACTION ;
286
-
287
- DELETE FROM OrleansGrainDirectory
288
- WHERE
289
- ClusterId = _ClusterId
290
- AND ProviderId = _ProviderId
291
- AND SiloAddress IN (SELECT SiloAddress FROM TempSiloAddresses);
292
-
293
- SELECT ROW_COUNT();
294
-
295
- COMMIT ;
296
-
297
- END;
167
+ SELECT
168
+ ClusterId,
169
+ ProviderId,
170
+ GrainId,
171
+ SiloAddress,
172
+ ActivationId
173
+ FROM
174
+ OrleansGrainDirectory
175
+ WHERE
176
+ ClusterId = @ClusterId
177
+ AND ProviderId = @ProviderId
178
+ AND GrainIdHash = @GrainIdHash
179
+ AND GrainId = @GrainId;
180
+
181
+ COMMIT;
182
+ UNLOCK TABLES;
183
+ '
184
+ ;
298
185
299
186
DELIMITER $$
300
187
@@ -305,5 +192,46 @@ INSERT INTO OrleansQuery
305
192
)
306
193
SELECT
307
194
' UnregisterGrainActivationsKey' ,
308
- ' CALL UnregisterGrainActivations (@ClusterId, @ProviderId, @SiloAddresses)'
195
+ '
196
+ CREATE TEMPORARY TABLE TempSiloAddresses
197
+ (
198
+ SiloAddress NVARCHAR(100) NOT NULL,
199
+ Level INT NOT NULL
200
+ );
201
+
202
+ INSERT INTO TempSiloAddresses
203
+ (
204
+ SiloAddress,
205
+ Level
206
+ )
207
+ WITH RECURSIVE SiloAddressesCTE AS
208
+ (
209
+ SELECT
210
+ SUBSTRING_INDEX(@SiloAddresses, ' ' |' ' , 1) AS Value,
211
+ SUBSTRING(@SiloAddresses, CHAR_LENGTH(SUBSTRING_INDEX(@SiloAddresses, ' ' |' ' , 1)) + 2, CHAR_LENGTH(@SiloAddresses)) AS Others,
212
+ 1 AS Level
213
+ UNION ALL
214
+ SELECT
215
+ SUBSTRING_INDEX(Others, ' ' |' ' , 1) AS Value,
216
+ SUBSTRING(Others, CHAR_LENGTH(SUBSTRING_INDEX(Others, ' ' |' ' , 1)) + 2, CHAR_LENGTH(Others)) AS Others,
217
+ Level + 1
218
+ FROM SiloAddressesCTE
219
+ WHERE Others != ' ' ' '
220
+ )
221
+ SELECT Value, Level FROM SiloAddressesCTE;
222
+
223
+ SET AUTOCOMMIT = 0;
224
+ LOCK TABLE OrleansGrainDirectory WRITE;
225
+
226
+ DELETE FROM OrleansGrainDirectory
227
+ WHERE
228
+ ClusterId = @ClusterId
229
+ AND ProviderId = @ProviderId
230
+ AND SiloAddress IN (SELECT SiloAddress FROM TempSiloAddresses);
231
+
232
+ SELECT ROW_COUNT();
233
+
234
+ COMMIT;
235
+ UNLOCK TABLES;
236
+ '
309
237
;
0 commit comments