New Case Study:See how Anthropic automated 95% of dependency reviews with Socket.Learn More
Socket
Sign inDemoInstall
Socket

distributed-locks-postgresql

Package Overview
Dependencies
Maintainers
1
Versions
2
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

distributed-locks-postgresql

The postgresql package for the storage layer for distributed locks

  • 1.0.3
  • latest
  • Source
  • npm
  • Socket score

Version published
Weekly downloads
1
Maintainers
1
Weekly downloads
 
Created
Source

Postgresql Algorithm for lock guarantees

Start

We create a table for locks if it doesn't exist, table name is customizable

CREATE TABLE IF NOT EXISTS table } (
    key varchar(50),
    value varchar(100) NOT NULL,
    ttl integer NOT NULL,
    obtained_at timestamp DEFAULT current_timestamp,
    CONSTRAINT pk_index PRIMARY KEY (key)
);

Acquiring Lock

We start a transaction with isolation level repeatable read and it only has one SQL statement that inserts the row representing the lock

INSERT INTO table (key, value, ttl, obtained_at)
VALUES ('key', 'lock-value', 10, current_timestamp)
ON CONFLICT ON CONSTRAINT pk_index
DO
    UPDATE SET value = 'lock-value', ttl = 10
    WHERE locks.obtained_at + interval '1' second * locks.ttl  < current_timestamp
returning *

Using the key that represents the critical section as primary key, we try to insert a record with it and the value represents our lock, if there is a conflict on the primary key constraint (someone else was able to acquire the lock) we can still update that row only if the previous lock expired (it's ttl + obtained at < current time stamp>).

If the upsert operation was successful we return a truthy value

Releasing Lock

Same as acquiring a lock we use a transaction with isolation level repeatable read. Simply delete the row with key equal to the critical section value, and the value equal to the lock value

DELETE FROM table
where key = 'key' AND value = 'lock-value';

FAQs

Package last updated on 15 Mar 2023

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc