Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Skip locked may not be working correctly #1

Open
saward opened this issue Jul 22, 2022 · 0 comments
Open

Skip locked may not be working correctly #1

saward opened this issue Jul 22, 2022 · 0 comments

Comments

@saward
Copy link

saward commented Jul 22, 2022

For a separate project, using a similar query, it appeared that a second process trying to pull tasks off would sometimes get none back, instead of the next unlocked one. The following query, similar to queue's query, did not work well (the returning

WITH u AS (
  SELECT
    repository_id AS target_repository_id,
    format(full_path, path) AS final_path
  FROM site.repository
  JOIN site.provider p ON p.provider_id = provider_id_provider
  WHERE last_checked IS NULL or last_checked < Now() - INTERVAL '1 hour'
  ORDER BY last_checked asc
  FOR UPDATE SKIP LOCKED
  LIMIT 1
)
UPDATE site.repository
SET last_checked = Now()
FROM u
WHERE repository_id = target_repository_id
RETURNING repository_id, final_path

Whereas this one worked as expected:

with selected AS (
  UPDATE site.repository
  SET last_checked = Now()
  WHERE repository_id = (
    SELECT
      repository_id
    FROM site.repository
    WHERE last_checked IS NULL or last_checked < Now() - INTERVAL '1 hour'
    ORDER BY last_checked, repository_id asc
    FOR UPDATE SKIP LOCKED
    LIMIT 1
  )
  RETURNING repository_id
)
SELECT
  repository_id AS target_repository_id,
  format(full_path, path) AS final_path
FROM site.repository
JOIN site.provider p ON p.provider_id = provider_id_provider
WHERE repository_id = (select repository_id from selected)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant