59 lines
1.5 KiB
Transact-SQL
59 lines
1.5 KiB
Transact-SQL
SET ANSI_NULLS ON;
|
|
GO
|
|
SET QUOTED_IDENTIFIER ON;
|
|
GO
|
|
|
|
CREATE OR ALTER PROCEDURE dbo.CharacterEnrichmentRun_ClaimNext
|
|
@LeaseMinutes int = 90
|
|
AS
|
|
BEGIN
|
|
SET NOCOUNT ON;
|
|
SET XACT_ABORT ON;
|
|
|
|
DECLARE @RunID int;
|
|
|
|
BEGIN TRANSACTION;
|
|
|
|
SELECT TOP (1) @RunID = CharacterEnrichmentRunID
|
|
FROM dbo.CharacterEnrichmentRuns WITH (UPDLOCK, HOLDLOCK)
|
|
WHERE IsCurrent = 1
|
|
AND (
|
|
Status = N'Queued'
|
|
OR (Status = N'Running' AND StartedUtc < DATEADD(minute, -ABS(@LeaseMinutes), SYSUTCDATETIME()))
|
|
)
|
|
ORDER BY QueuedUtc, CharacterEnrichmentRunID;
|
|
|
|
IF @RunID IS NULL
|
|
BEGIN
|
|
COMMIT TRANSACTION;
|
|
SELECT TOP (0) * FROM dbo.CharacterEnrichmentRuns;
|
|
RETURN;
|
|
END;
|
|
|
|
UPDATE dbo.CharacterEnrichmentRuns
|
|
SET Status = N'Running',
|
|
StartedUtc = SYSUTCDATETIME(),
|
|
AttemptCount = AttemptCount + 1,
|
|
CurrentStage = N'Preparing character analysis',
|
|
CurrentMessage = N'Preparing character analysis...',
|
|
UpdatedUtc = SYSUTCDATETIME()
|
|
WHERE CharacterEnrichmentRunID = @RunID
|
|
AND IsCurrent = 1
|
|
AND (
|
|
Status = N'Queued'
|
|
OR (Status = N'Running' AND StartedUtc < DATEADD(minute, -ABS(@LeaseMinutes), SYSUTCDATETIME()))
|
|
);
|
|
|
|
IF @@ROWCOUNT = 0
|
|
BEGIN
|
|
COMMIT TRANSACTION;
|
|
SELECT TOP (0) * FROM dbo.CharacterEnrichmentRuns;
|
|
RETURN;
|
|
END;
|
|
|
|
SELECT * FROM dbo.CharacterEnrichmentRuns WHERE CharacterEnrichmentRunID = @RunID;
|
|
|
|
COMMIT TRANSACTION;
|
|
END;
|
|
GO
|