Skip to content

Commit c2b5256

Browse files
JorgeCandeiasReubenBond
authored andcommitted
Refactored
1 parent 489345a commit c2b5256

File tree

1 file changed

+130
-202
lines changed

1 file changed

+130
-202
lines changed

src/AdoNet/Orleans.GrainDirectory.AdoNet/MySQL-GrainDirectory.sql

Lines changed: 130 additions & 202 deletions
Original file line numberDiff line numberDiff line change
@@ -56,60 +56,16 @@ ON OrleansGrainDirectory
5656

5757
DELIMITER $$
5858

59-
/* Registers a new grain activation */
60-
CREATE PROCEDURE RegisterGrainActivation
59+
INSERT INTO OrleansQuery
6160
(
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
6863
)
69-
BEGIN
70-
71-
DECLARE _Now DATETIME(3) DEFAULT UTC_TIMESTAMP(3);
72-
73-
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;
74-
START TRANSACTION;
75-
7664
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;
11369
11470
SELECT
11571
ClusterId,
@@ -120,116 +76,80 @@ IF FOUND_ROWS() = 0 THEN
12076
FROM
12177
OrleansGrainDirectory
12278
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+
'
144124
;
145125

146126
DELIMITER $$
147127

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-
191128
INSERT INTO OrleansQuery
192129
(
193130
QueryKey,
194131
QueryText
195132
)
196133
SELECT
197134
'UnregisterGrainActivationKey',
198-
'CALL UnregisterGrainActivation (@ClusterId, @ProviderId, @GrainIdHash, @GrainId, @ActivationId)'
199-
;
200-
201-
DELIMITER $$
135+
'
136+
SET AUTOCOMMIT = 0;
137+
LOCK TABLES OrleansGrainDirectory WRITE;
202138
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;
212146
213-
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;
214-
START TRANSACTION;
147+
SELECT ROW_COUNT();
215148
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+
;
233153

234154
DELIMITER $$
235155

@@ -240,61 +160,28 @@ INSERT INTO OrleansQuery
240160
)
241161
SELECT
242162
'LookupGrainActivationKey',
243-
'CALL LookupGrainActivation(@ClusterId, @ProviderId, @GrainIdHash, @GrainId)'
244-
;
245-
246-
DELIMITER $$
163+
'
164+
SET AUTOCOMMIT = 0;
165+
LOCK TABLES OrleansGrainDirectory WRITE;
247166
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+
;
298185

299186
DELIMITER $$
300187

@@ -305,5 +192,46 @@ INSERT INTO OrleansQuery
305192
)
306193
SELECT
307194
'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+
'
309237
;

0 commit comments

Comments
 (0)