CommunitySolidServer/docs/classes/RedisLocker.html

70 lines
48 KiB
HTML

<!DOCTYPE html><html class="default"><head><meta charSet="utf-8"/><meta http-equiv="x-ua-compatible" content="IE=edge"/><title>RedisLocker | Community Solid Server - v5.0.0-alpha.0</title><meta name="description" content="Documentation for Community Solid Server - v5.0.0-alpha.0"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="stylesheet" href="../assets/style.css"/><link rel="stylesheet" href="../assets/highlight.css"/><script async src="../assets/search.js" id="search-script"></script></head><body><script>document.body.classList.add(localStorage.getItem("tsd-theme") || "os")</script><header><div class="tsd-page-toolbar"><div class="container"><div class="table-wrap"><div class="table-cell" id="tsd-search" data-base=".."><div class="field"><label for="tsd-search-field" class="tsd-widget search no-caption">Search</label><input type="text" id="tsd-search-field"/></div><ul class="results"><li class="state loading">Preparing search index...</li><li class="state failure">The search index is not available</li></ul><a href="../index.html" class="title">Community Solid Server - v5.0.0-alpha.0</a></div><div class="table-cell" id="tsd-widgets"><div id="tsd-filter"><a href="#" class="tsd-widget options no-caption" data-toggle="options">Options</a><div class="tsd-filter-group"><div class="tsd-select" id="tsd-filter-visibility"><span class="tsd-select-label">All</span><ul class="tsd-select-list"><li data-value="public">Public</li><li data-value="protected">Public/Protected</li><li data-value="private" class="selected">All</li></ul></div> <input type="checkbox" id="tsd-filter-inherited" checked/><label class="tsd-widget" for="tsd-filter-inherited">Inherited</label><input type="checkbox" id="tsd-filter-externals" checked/><label class="tsd-widget" for="tsd-filter-externals">Externals</label></div></div><a href="#" class="tsd-widget menu no-caption" data-toggle="menu">Menu</a></div></div></div></div><div class="tsd-page-title"><div class="container"><ul class="tsd-breadcrumb"><li><a href="../modules.html">Community Solid Server - v5.0.0-alpha.0</a></li><li><a href="RedisLocker.html">RedisLocker</a></li></ul><h1>Class RedisLocker</h1></div></div></header><div class="container container-main"><div class="row"><div class="col-8 col-content"><section class="tsd-panel tsd-comment"><div class="tsd-comment tsd-typography"><div class="lead">
<p>A Redis Locker that can be used as both:</p>
<ul>
<li>a Read Write Locker that uses a (single) Redis server to store the locks and counts.</li>
<li>a Resource Locker that uses a (single) Redis server to store the lock.
This solution should be process-safe. The only references to locks are string keys
derived from identifier paths.</li>
</ul>
</div><div><p>The Read Write algorithm roughly goes as follows:</p>
<ul>
<li>Acquire a read lock: allowed as long as there is no write lock. On acquiring the read counter goes up.</li>
<li>Acquire a write lock: allowed as long as there is no other write lock AND the read counter is 0.</li>
<li>Release a read lock: decreases the read counter with 1</li>
<li>Release a write lock: unlocks the write lock</li>
</ul>
<p>The Resource locking algorithm uses a single mutex/lock.</p>
<p>All operations, such as checking for a write lock AND read count, are executed in a single Lua script.
These scripts are used by Redis as a single new command.
Redis executes its operations in a single thread, as such, each such operation can be considered atomic.</p>
<p>The operation to (un)lock will always resolve with either 1/OK/true if succeeded or 0/false if not succeeded.
Rejection with errors will be happen on actual failures. Retrying the (un)lock operations will be done by making
use of the LockUtils&#39; {@link retryFunctionUntil} function.</p>
<ul>
<li>@see <a href="https://redis.io/commands/">Redis Commands documentation</a></li>
<li>@see <a href="https://redis.io/docs/manual/programmability/">Redis Lua scripting documentation</a></li>
<li>@see <a href="https://github.com/luin/ioredis#lua-scripting">ioredis Lua scripting API</a></li>
</ul>
</div></div></section><section class="tsd-panel tsd-hierarchy"><h3>Hierarchy</h3><ul class="tsd-hierarchy"><li><span class="target">RedisLocker</span></li></ul></section><section class="tsd-panel"><h3>Implements</h3><ul class="tsd-hierarchy"><li><a href="../interfaces/ReadWriteLocker.html" class="tsd-signature-type" data-tsd-kind="Interface">ReadWriteLocker</a></li><li><a href="../interfaces/ResourceLocker.html" class="tsd-signature-type" data-tsd-kind="Interface">ResourceLocker</a></li><li><a href="../interfaces/Finalizable.html" class="tsd-signature-type" data-tsd-kind="Interface">Finalizable</a></li></ul></section><section class="tsd-panel-group tsd-index-group"><h2>Index</h2><section class="tsd-panel tsd-index-panel"><div class="tsd-index-content"><section class="tsd-index-section "><h3>Constructors</h3><ul class="tsd-index-list"><li class="tsd-kind-constructor tsd-parent-kind-class"><a href="RedisLocker.html#constructor" class="tsd-kind-icon">constructor</a></li></ul></section><section class="tsd-index-section tsd-is-private-protected"><h3>Properties</h3><ul class="tsd-index-list"><li class="tsd-kind-property tsd-parent-kind-class tsd-is-private"><a href="RedisLocker.html#attemptSettings" class="tsd-kind-icon">attempt<wbr/>Settings</a></li><li class="tsd-kind-property tsd-parent-kind-class tsd-is-protected"><a href="RedisLocker.html#logger" class="tsd-kind-icon">logger</a></li><li class="tsd-kind-property tsd-parent-kind-class tsd-is-private"><a href="RedisLocker.html#redis" class="tsd-kind-icon">redis</a></li><li class="tsd-kind-property tsd-parent-kind-class tsd-is-private"><a href="RedisLocker.html#redisLock" class="tsd-kind-icon">redis<wbr/>Lock</a></li><li class="tsd-kind-property tsd-parent-kind-class tsd-is-private"><a href="RedisLocker.html#redisRw" class="tsd-kind-icon">redis<wbr/>Rw</a></li></ul></section><section class="tsd-index-section "><h3>Methods</h3><ul class="tsd-index-list"><li class="tsd-kind-method tsd-parent-kind-class"><a href="RedisLocker.html#acquire" class="tsd-kind-icon">acquire</a></li><li class="tsd-kind-method tsd-parent-kind-class tsd-is-private"><a href="RedisLocker.html#createRedisClient" class="tsd-kind-icon">create<wbr/>Redis<wbr/>Client</a></li><li class="tsd-kind-method tsd-parent-kind-class"><a href="RedisLocker.html#finalize" class="tsd-kind-icon">finalize</a></li><li class="tsd-kind-method tsd-parent-kind-class tsd-is-private"><a href="RedisLocker.html#getReadWriteKey" class="tsd-kind-icon">get<wbr/>Read<wbr/>Write<wbr/>Key</a></li><li class="tsd-kind-method tsd-parent-kind-class tsd-is-private"><a href="RedisLocker.html#getResourceKey" class="tsd-kind-icon">get<wbr/>Resource<wbr/>Key</a></li><li class="tsd-kind-method tsd-parent-kind-class"><a href="RedisLocker.html#release" class="tsd-kind-icon">release</a></li><li class="tsd-kind-method tsd-parent-kind-class tsd-is-private"><a href="RedisLocker.html#swallowFalse" class="tsd-kind-icon">swallow<wbr/>False</a></li><li class="tsd-kind-method tsd-parent-kind-class tsd-has-type-parameter"><a href="RedisLocker.html#withReadLock" class="tsd-kind-icon">with<wbr/>Read<wbr/>Lock</a></li><li class="tsd-kind-method tsd-parent-kind-class tsd-has-type-parameter"><a href="RedisLocker.html#withWriteLock" class="tsd-kind-icon">with<wbr/>Write<wbr/>Lock</a></li></ul></section></div></section></section><section class="tsd-panel-group tsd-member-group "><h2>Constructors</h2><section class="tsd-panel tsd-member tsd-kind-constructor tsd-parent-kind-class"><a id="constructor" class="tsd-anchor"></a><h3 class="tsd-anchor-link">constructor<a href="#constructor" aria-label="Permalink" class="tsd-anchor-icon"><svg xmlns="http://www.w3.org/2000/svg" class="icon icon-tabler icon-tabler-link" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><path stroke="none" d="M0 0h24v24H0z" fill="none"></path><path d="M10 14a3.5 3.5 0 0 0 5 0l4 -4a3.5 3.5 0 0 0 -5 -5l-.5 .5"></path><path d="M14 10a3.5 3.5 0 0 0 -5 0l-4 4a3.5 3.5 0 0 0 5 5l.5 -.5"></path></svg></a></h3><ul class="tsd-signatures tsd-kind-constructor tsd-parent-kind-class"><li class="tsd-signature tsd-kind-icon">new <wbr/>Redis<wbr/>Locker<span class="tsd-signature-symbol">(</span>redisClient<span class="tsd-signature-symbol">?: </span><span class="tsd-signature-type">string</span>, attemptSettings<span class="tsd-signature-symbol">?: </span><span class="tsd-signature-type">AttemptSettings</span><span class="tsd-signature-symbol">)</span><span class="tsd-signature-symbol">: </span><a href="RedisLocker.html" class="tsd-signature-type" data-tsd-kind="Class">RedisLocker</a></li></ul><ul class="tsd-descriptions"><li class="tsd-description"><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/CommunitySolidServer/CommunitySolidServer/blob/f0f900e/src/util/locking/RedisLocker.ts#L53">src/util/locking/RedisLocker.ts:53</a></li></ul></aside><h4 class="tsd-parameters-title">Parameters</h4><ul class="tsd-parameters"><li><h5>redisClient: <span class="tsd-signature-type">string</span><span class="tsd-signature-symbol"> = &#39;127.0.0.1:6379&#39;</span></h5></li><li><h5>attemptSettings: <span class="tsd-signature-type">AttemptSettings</span><span class="tsd-signature-symbol"> = {}</span></h5></li></ul><h4 class="tsd-returns-title">Returns <a href="RedisLocker.html" class="tsd-signature-type" data-tsd-kind="Class">RedisLocker</a></h4></li></ul></section></section><section class="tsd-panel-group tsd-member-group tsd-is-private-protected"><h2>Properties</h2><section class="tsd-panel tsd-member tsd-kind-property tsd-parent-kind-class tsd-is-private"><a id="attemptSettings" class="tsd-anchor"></a><h3 class="tsd-anchor-link"><span class="tsd-flag ts-flagPrivate">Private</span> <span class="tsd-flag ts-flagReadonly">Readonly</span> attempt<wbr/>Settings<a href="#attemptSettings" aria-label="Permalink" class="tsd-anchor-icon"><svg xmlns="http://www.w3.org/2000/svg" class="icon icon-tabler icon-tabler-link" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><path stroke="none" d="M0 0h24v24H0z" fill="none"></path><path d="M10 14a3.5 3.5 0 0 0 5 0l4 -4a3.5 3.5 0 0 0 -5 -5l-.5 .5"></path><path d="M14 10a3.5 3.5 0 0 0 -5 0l-4 4a3.5 3.5 0 0 0 5 5l.5 -.5"></path></svg></a></h3><div class="tsd-signature tsd-kind-icon">attempt<wbr/>Settings<span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">Required</span><span class="tsd-signature-symbol">&lt;</span><span class="tsd-signature-type">AttemptSettings</span><span class="tsd-signature-symbol">&gt;</span></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/CommunitySolidServer/CommunitySolidServer/blob/f0f900e/src/util/locking/RedisLocker.ts#L51">src/util/locking/RedisLocker.ts:51</a></li></ul></aside></section><section class="tsd-panel tsd-member tsd-kind-property tsd-parent-kind-class tsd-is-protected"><a id="logger" class="tsd-anchor"></a><h3 class="tsd-anchor-link"><span class="tsd-flag ts-flagProtected">Protected</span> <span class="tsd-flag ts-flagReadonly">Readonly</span> logger<a href="#logger" aria-label="Permalink" class="tsd-anchor-icon"><svg xmlns="http://www.w3.org/2000/svg" class="icon icon-tabler icon-tabler-link" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><path stroke="none" d="M0 0h24v24H0z" fill="none"></path><path d="M10 14a3.5 3.5 0 0 0 5 0l4 -4a3.5 3.5 0 0 0 -5 -5l-.5 .5"></path><path d="M14 10a3.5 3.5 0 0 0 -5 0l-4 4a3.5 3.5 0 0 0 5 5l.5 -.5"></path></svg></a></h3><div class="tsd-signature tsd-kind-icon">logger<span class="tsd-signature-symbol">:</span> <a href="../interfaces/Logger.html" class="tsd-signature-type" data-tsd-kind="Interface">Logger</a><span class="tsd-signature-symbol"> = ...</span></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/CommunitySolidServer/CommunitySolidServer/blob/f0f900e/src/util/locking/RedisLocker.ts#L46">src/util/locking/RedisLocker.ts:46</a></li></ul></aside></section><section class="tsd-panel tsd-member tsd-kind-property tsd-parent-kind-class tsd-is-private"><a id="redis" class="tsd-anchor"></a><h3 class="tsd-anchor-link"><span class="tsd-flag ts-flagPrivate">Private</span> <span class="tsd-flag ts-flagReadonly">Readonly</span> redis<a href="#redis" aria-label="Permalink" class="tsd-anchor-icon"><svg xmlns="http://www.w3.org/2000/svg" class="icon icon-tabler icon-tabler-link" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><path stroke="none" d="M0 0h24v24H0z" fill="none"></path><path d="M10 14a3.5 3.5 0 0 0 5 0l4 -4a3.5 3.5 0 0 0 -5 -5l-.5 .5"></path><path d="M14 10a3.5 3.5 0 0 0 -5 0l-4 4a3.5 3.5 0 0 0 5 5l.5 -.5"></path></svg></a></h3><div class="tsd-signature tsd-kind-icon">redis<span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">Redis</span></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/CommunitySolidServer/CommunitySolidServer/blob/f0f900e/src/util/locking/RedisLocker.ts#L48">src/util/locking/RedisLocker.ts:48</a></li></ul></aside></section><section class="tsd-panel tsd-member tsd-kind-property tsd-parent-kind-class tsd-is-private"><a id="redisLock" class="tsd-anchor"></a><h3 class="tsd-anchor-link"><span class="tsd-flag ts-flagPrivate">Private</span> <span class="tsd-flag ts-flagReadonly">Readonly</span> redis<wbr/>Lock<a href="#redisLock" aria-label="Permalink" class="tsd-anchor-icon"><svg xmlns="http://www.w3.org/2000/svg" class="icon icon-tabler icon-tabler-link" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><path stroke="none" d="M0 0h24v24H0z" fill="none"></path><path d="M10 14a3.5 3.5 0 0 0 5 0l4 -4a3.5 3.5 0 0 0 -5 -5l-.5 .5"></path><path d="M14 10a3.5 3.5 0 0 0 -5 0l-4 4a3.5 3.5 0 0 0 5 5l.5 -.5"></path></svg></a></h3><div class="tsd-signature tsd-kind-icon">redis<wbr/>Lock<span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">RedisResourceLock</span></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/CommunitySolidServer/CommunitySolidServer/blob/f0f900e/src/util/locking/RedisLocker.ts#L50">src/util/locking/RedisLocker.ts:50</a></li></ul></aside></section><section class="tsd-panel tsd-member tsd-kind-property tsd-parent-kind-class tsd-is-private"><a id="redisRw" class="tsd-anchor"></a><h3 class="tsd-anchor-link"><span class="tsd-flag ts-flagPrivate">Private</span> <span class="tsd-flag ts-flagReadonly">Readonly</span> redis<wbr/>Rw<a href="#redisRw" aria-label="Permalink" class="tsd-anchor-icon"><svg xmlns="http://www.w3.org/2000/svg" class="icon icon-tabler icon-tabler-link" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><path stroke="none" d="M0 0h24v24H0z" fill="none"></path><path d="M10 14a3.5 3.5 0 0 0 5 0l4 -4a3.5 3.5 0 0 0 -5 -5l-.5 .5"></path><path d="M14 10a3.5 3.5 0 0 0 -5 0l-4 4a3.5 3.5 0 0 0 5 5l.5 -.5"></path></svg></a></h3><div class="tsd-signature tsd-kind-icon">redis<wbr/>Rw<span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">RedisReadWriteLock</span></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/CommunitySolidServer/CommunitySolidServer/blob/f0f900e/src/util/locking/RedisLocker.ts#L49">src/util/locking/RedisLocker.ts:49</a></li></ul></aside></section></section><section class="tsd-panel-group tsd-member-group "><h2>Methods</h2><section class="tsd-panel tsd-member tsd-kind-method tsd-parent-kind-class"><a id="acquire" class="tsd-anchor"></a><h3 class="tsd-anchor-link">acquire<a href="#acquire" aria-label="Permalink" class="tsd-anchor-icon"><svg xmlns="http://www.w3.org/2000/svg" class="icon icon-tabler icon-tabler-link" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><path stroke="none" d="M0 0h24v24H0z" fill="none"></path><path d="M10 14a3.5 3.5 0 0 0 5 0l4 -4a3.5 3.5 0 0 0 -5 -5l-.5 .5"></path><path d="M14 10a3.5 3.5 0 0 0 -5 0l-4 4a3.5 3.5 0 0 0 5 5l.5 -.5"></path></svg></a></h3><ul class="tsd-signatures tsd-kind-method tsd-parent-kind-class"><li class="tsd-signature tsd-kind-icon">acquire<span class="tsd-signature-symbol">(</span>identifier<span class="tsd-signature-symbol">: </span><a href="../interfaces/ResourceIdentifier.html" class="tsd-signature-type" data-tsd-kind="Interface">ResourceIdentifier</a><span class="tsd-signature-symbol">)</span><span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">Promise</span><span class="tsd-signature-symbol">&lt;</span><span class="tsd-signature-type">void</span><span class="tsd-signature-symbol">&gt;</span></li></ul><ul class="tsd-descriptions"><li class="tsd-description"><aside class="tsd-sources"><p>Implementation of <a href="../interfaces/ResourceLocker.html">ResourceLocker</a>.<a href="../interfaces/ResourceLocker.html#acquire">acquire</a></p><ul><li>Defined in <a href="https://github.com/CommunitySolidServer/CommunitySolidServer/blob/f0f900e/src/util/locking/RedisLocker.ts#L159">src/util/locking/RedisLocker.ts:159</a></li></ul></aside><div class="tsd-comment tsd-typography"><div class="lead">
<p>Acquires a lock on the requested identifier.
The promise will resolve when the lock has been acquired.</p>
</div></div><h4 class="tsd-parameters-title">Parameters</h4><ul class="tsd-parameters"><li><h5>identifier: <a href="../interfaces/ResourceIdentifier.html" class="tsd-signature-type" data-tsd-kind="Interface">ResourceIdentifier</a></h5></li></ul><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">Promise</span><span class="tsd-signature-symbol">&lt;</span><span class="tsd-signature-type">void</span><span class="tsd-signature-symbol">&gt;</span></h4></li></ul></section><section class="tsd-panel tsd-member tsd-kind-method tsd-parent-kind-class tsd-is-private"><a id="createRedisClient" class="tsd-anchor"></a><h3 class="tsd-anchor-link"><span class="tsd-flag ts-flagPrivate">Private</span> create<wbr/>Redis<wbr/>Client<a href="#createRedisClient" aria-label="Permalink" class="tsd-anchor-icon"><svg xmlns="http://www.w3.org/2000/svg" class="icon icon-tabler icon-tabler-link" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><path stroke="none" d="M0 0h24v24H0z" fill="none"></path><path d="M10 14a3.5 3.5 0 0 0 5 0l4 -4a3.5 3.5 0 0 0 -5 -5l-.5 .5"></path><path d="M14 10a3.5 3.5 0 0 0 -5 0l-4 4a3.5 3.5 0 0 0 5 5l.5 -.5"></path></svg></a></h3><ul class="tsd-signatures tsd-kind-method tsd-parent-kind-class tsd-is-private"><li class="tsd-signature tsd-kind-icon">create<wbr/>Redis<wbr/>Client<span class="tsd-signature-symbol">(</span>redisClientString<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">string</span><span class="tsd-signature-symbol">)</span><span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">Redis</span></li></ul><ul class="tsd-descriptions"><li class="tsd-description"><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/CommunitySolidServer/CommunitySolidServer/blob/f0f900e/src/util/locking/RedisLocker.ts#L71">src/util/locking/RedisLocker.ts:71</a></li></ul></aside><div class="tsd-comment tsd-typography"><div class="lead">
<p>Generate and return a RedisClient based on the provided string</p>
</div></div><h4 class="tsd-parameters-title">Parameters</h4><ul class="tsd-parameters"><li><h5>redisClientString: <span class="tsd-signature-type">string</span></h5><div class="tsd-comment tsd-typography"><div class="lead">
<p>A string that contains either a host address and a
port number like &#39;127.0.0.1:6379&#39; or just a port number like &#39;6379&#39;.</p>
</div></div></li></ul><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">Redis</span></h4></li></ul></section><section class="tsd-panel tsd-member tsd-kind-method tsd-parent-kind-class"><a id="finalize" class="tsd-anchor"></a><h3 class="tsd-anchor-link">finalize<a href="#finalize" aria-label="Permalink" class="tsd-anchor-icon"><svg xmlns="http://www.w3.org/2000/svg" class="icon icon-tabler icon-tabler-link" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><path stroke="none" d="M0 0h24v24H0z" fill="none"></path><path d="M10 14a3.5 3.5 0 0 0 5 0l4 -4a3.5 3.5 0 0 0 -5 -5l-.5 .5"></path><path d="M14 10a3.5 3.5 0 0 0 -5 0l-4 4a3.5 3.5 0 0 0 5 5l.5 -.5"></path></svg></a></h3><ul class="tsd-signatures tsd-kind-method tsd-parent-kind-class"><li class="tsd-signature tsd-kind-icon">finalize<span class="tsd-signature-symbol">(</span><span class="tsd-signature-symbol">)</span><span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">Promise</span><span class="tsd-signature-symbol">&lt;</span><span class="tsd-signature-type">void</span><span class="tsd-signature-symbol">&gt;</span></li></ul><ul class="tsd-descriptions"><li class="tsd-description"><aside class="tsd-sources"><p>Implementation of <a href="../interfaces/Finalizable.html">Finalizable</a>.<a href="../interfaces/Finalizable.html#finalize">finalize</a></p><ul><li>Defined in <a href="https://github.com/CommunitySolidServer/CommunitySolidServer/blob/f0f900e/src/util/locking/RedisLocker.ts#L177">src/util/locking/RedisLocker.ts:177</a></li></ul></aside><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">Promise</span><span class="tsd-signature-symbol">&lt;</span><span class="tsd-signature-type">void</span><span class="tsd-signature-symbol">&gt;</span></h4></li></ul></section><section class="tsd-panel tsd-member tsd-kind-method tsd-parent-kind-class tsd-is-private"><a id="getReadWriteKey" class="tsd-anchor"></a><h3 class="tsd-anchor-link"><span class="tsd-flag ts-flagPrivate">Private</span> get<wbr/>Read<wbr/>Write<wbr/>Key<a href="#getReadWriteKey" aria-label="Permalink" class="tsd-anchor-icon"><svg xmlns="http://www.w3.org/2000/svg" class="icon icon-tabler icon-tabler-link" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><path stroke="none" d="M0 0h24v24H0z" fill="none"></path><path d="M10 14a3.5 3.5 0 0 0 5 0l4 -4a3.5 3.5 0 0 0 -5 -5l-.5 .5"></path><path d="M14 10a3.5 3.5 0 0 0 -5 0l-4 4a3.5 3.5 0 0 0 5 5l.5 -.5"></path></svg></a></h3><ul class="tsd-signatures tsd-kind-method tsd-parent-kind-class tsd-is-private"><li class="tsd-signature tsd-kind-icon">get<wbr/>Read<wbr/>Write<wbr/>Key<span class="tsd-signature-symbol">(</span>identifier<span class="tsd-signature-symbol">: </span><a href="../interfaces/ResourceIdentifier.html" class="tsd-signature-type" data-tsd-kind="Interface">ResourceIdentifier</a><span class="tsd-signature-symbol">)</span><span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">string</span></li></ul><ul class="tsd-descriptions"><li class="tsd-description"><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/CommunitySolidServer/CommunitySolidServer/blob/f0f900e/src/util/locking/RedisLocker.ts#L94">src/util/locking/RedisLocker.ts:94</a></li></ul></aside><div class="tsd-comment tsd-typography"><div class="lead">
<p>Create a scoped Redis key for Read-Write locking.</p>
</div></div><h4 class="tsd-parameters-title">Parameters</h4><ul class="tsd-parameters"><li><h5>identifier: <a href="../interfaces/ResourceIdentifier.html" class="tsd-signature-type" data-tsd-kind="Interface">ResourceIdentifier</a></h5><div class="tsd-comment tsd-typography"><div class="lead">
<p>The identifier object to create a Redis key for</p>
</div></div></li></ul><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">string</span></h4><div><p>A scoped Redis key that allows cleanup afterwards without affecting other keys.</p>
</div></li></ul></section><section class="tsd-panel tsd-member tsd-kind-method tsd-parent-kind-class tsd-is-private"><a id="getResourceKey" class="tsd-anchor"></a><h3 class="tsd-anchor-link"><span class="tsd-flag ts-flagPrivate">Private</span> get<wbr/>Resource<wbr/>Key<a href="#getResourceKey" aria-label="Permalink" class="tsd-anchor-icon"><svg xmlns="http://www.w3.org/2000/svg" class="icon icon-tabler icon-tabler-link" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><path stroke="none" d="M0 0h24v24H0z" fill="none"></path><path d="M10 14a3.5 3.5 0 0 0 5 0l4 -4a3.5 3.5 0 0 0 -5 -5l-.5 .5"></path><path d="M14 10a3.5 3.5 0 0 0 -5 0l-4 4a3.5 3.5 0 0 0 5 5l.5 -.5"></path></svg></a></h3><ul class="tsd-signatures tsd-kind-method tsd-parent-kind-class tsd-is-private"><li class="tsd-signature tsd-kind-icon">get<wbr/>Resource<wbr/>Key<span class="tsd-signature-symbol">(</span>identifier<span class="tsd-signature-symbol">: </span><a href="../interfaces/ResourceIdentifier.html" class="tsd-signature-type" data-tsd-kind="Interface">ResourceIdentifier</a><span class="tsd-signature-symbol">)</span><span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">string</span></li></ul><ul class="tsd-descriptions"><li class="tsd-description"><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/CommunitySolidServer/CommunitySolidServer/blob/f0f900e/src/util/locking/RedisLocker.ts#L103">src/util/locking/RedisLocker.ts:103</a></li></ul></aside><div class="tsd-comment tsd-typography"><div class="lead">
<p>Create a scoped Redis key for Resource locking.</p>
</div></div><h4 class="tsd-parameters-title">Parameters</h4><ul class="tsd-parameters"><li><h5>identifier: <a href="../interfaces/ResourceIdentifier.html" class="tsd-signature-type" data-tsd-kind="Interface">ResourceIdentifier</a></h5><div class="tsd-comment tsd-typography"><div class="lead">
<p>The identifier object to create a Redis key for</p>
</div></div></li></ul><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">string</span></h4><div><p>A scoped Redis key that allows cleanup afterwards without affecting other keys.</p>
</div></li></ul></section><section class="tsd-panel tsd-member tsd-kind-method tsd-parent-kind-class"><a id="release" class="tsd-anchor"></a><h3 class="tsd-anchor-link">release<a href="#release" aria-label="Permalink" class="tsd-anchor-icon"><svg xmlns="http://www.w3.org/2000/svg" class="icon icon-tabler icon-tabler-link" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><path stroke="none" d="M0 0h24v24H0z" fill="none"></path><path d="M10 14a3.5 3.5 0 0 0 5 0l4 -4a3.5 3.5 0 0 0 -5 -5l-.5 .5"></path><path d="M14 10a3.5 3.5 0 0 0 -5 0l-4 4a3.5 3.5 0 0 0 5 5l.5 -.5"></path></svg></a></h3><ul class="tsd-signatures tsd-kind-method tsd-parent-kind-class"><li class="tsd-signature tsd-kind-icon">release<span class="tsd-signature-symbol">(</span>identifier<span class="tsd-signature-symbol">: </span><a href="../interfaces/ResourceIdentifier.html" class="tsd-signature-type" data-tsd-kind="Interface">ResourceIdentifier</a><span class="tsd-signature-symbol">)</span><span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">Promise</span><span class="tsd-signature-symbol">&lt;</span><span class="tsd-signature-type">void</span><span class="tsd-signature-symbol">&gt;</span></li></ul><ul class="tsd-descriptions"><li class="tsd-description"><aside class="tsd-sources"><p>Implementation of <a href="../interfaces/ResourceLocker.html">ResourceLocker</a>.<a href="../interfaces/ResourceLocker.html#release">release</a></p><ul><li>Defined in <a href="https://github.com/CommunitySolidServer/CommunitySolidServer/blob/f0f900e/src/util/locking/RedisLocker.ts#L167">src/util/locking/RedisLocker.ts:167</a></li></ul></aside><div class="tsd-comment tsd-typography"><div class="lead">
<p>Releases a lock on the requested identifier.
The promise will resolve when the lock has been released.
In case there is no lock on the resource an error should be thrown.</p>
</div></div><h4 class="tsd-parameters-title">Parameters</h4><ul class="tsd-parameters"><li><h5>identifier: <a href="../interfaces/ResourceIdentifier.html" class="tsd-signature-type" data-tsd-kind="Interface">ResourceIdentifier</a></h5></li></ul><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">Promise</span><span class="tsd-signature-symbol">&lt;</span><span class="tsd-signature-type">void</span><span class="tsd-signature-symbol">&gt;</span></h4></li></ul></section><section class="tsd-panel tsd-member tsd-kind-method tsd-parent-kind-class tsd-is-private"><a id="swallowFalse" class="tsd-anchor"></a><h3 class="tsd-anchor-link"><span class="tsd-flag ts-flagPrivate">Private</span> swallow<wbr/>False<a href="#swallowFalse" aria-label="Permalink" class="tsd-anchor-icon"><svg xmlns="http://www.w3.org/2000/svg" class="icon icon-tabler icon-tabler-link" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><path stroke="none" d="M0 0h24v24H0z" fill="none"></path><path d="M10 14a3.5 3.5 0 0 0 5 0l4 -4a3.5 3.5 0 0 0 -5 -5l-.5 .5"></path><path d="M14 10a3.5 3.5 0 0 0 -5 0l-4 4a3.5 3.5 0 0 0 5 5l.5 -.5"></path></svg></a></h3><ul class="tsd-signatures tsd-kind-method tsd-parent-kind-class tsd-is-private"><li class="tsd-signature tsd-kind-icon">swallow<wbr/>False<span class="tsd-signature-symbol">(</span>fn<span class="tsd-signature-symbol">: </span><span class="tsd-signature-symbol">(</span><span class="tsd-signature-symbol">)</span><span class="tsd-signature-symbol"> =&gt; </span><span class="tsd-signature-type">Promise</span><span class="tsd-signature-symbol">&lt;</span><span class="tsd-signature-type">RedisAnswer</span><span class="tsd-signature-symbol">&gt;</span><span class="tsd-signature-symbol">)</span><span class="tsd-signature-symbol">: </span><span class="tsd-signature-symbol">(</span><span class="tsd-signature-symbol">)</span><span class="tsd-signature-symbol"> =&gt; </span><span class="tsd-signature-type">Promise</span><span class="tsd-signature-symbol">&lt;</span><span class="tsd-signature-type">unknown</span><span class="tsd-signature-symbol">&gt;</span></li></ul><ul class="tsd-descriptions"><li class="tsd-description"><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/CommunitySolidServer/CommunitySolidServer/blob/f0f900e/src/util/locking/RedisLocker.ts#L115">src/util/locking/RedisLocker.ts:115</a></li></ul></aside><div class="tsd-comment tsd-typography"><div class="lead">
<p>Wrapper function for all (un)lock operations. If the <code>fn()</code> resolves to false (after applying
{@link fromResp2ToBool}, the result will be swallowed. When <code>fn()</code> resolves to true, this wrapper
will return true. Any error coming from <code>fn()</code> will be thrown.</p>
</div></div><h4 class="tsd-parameters-title">Parameters</h4><ul class="tsd-parameters"><li><h5>fn: <span class="tsd-signature-symbol">(</span><span class="tsd-signature-symbol">)</span><span class="tsd-signature-symbol"> =&gt; </span><span class="tsd-signature-type">Promise</span><span class="tsd-signature-symbol">&lt;</span><span class="tsd-signature-type">RedisAnswer</span><span class="tsd-signature-symbol">&gt;</span></h5><div class="tsd-comment tsd-typography"><div class="lead">
<p>The function reference to swallow false from.</p>
</div></div><ul class="tsd-parameters"><li class="tsd-parameter-signature"><ul class="tsd-signatures tsd-kind-type-literal"><li class="tsd-signature tsd-kind-icon"><span class="tsd-signature-symbol">(</span><span class="tsd-signature-symbol">)</span><span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">Promise</span><span class="tsd-signature-symbol">&lt;</span><span class="tsd-signature-type">RedisAnswer</span><span class="tsd-signature-symbol">&gt;</span></li></ul><ul class="tsd-descriptions"><li class="tsd-description"><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">Promise</span><span class="tsd-signature-symbol">&lt;</span><span class="tsd-signature-type">RedisAnswer</span><span class="tsd-signature-symbol">&gt;</span></h4></li></ul></li></ul></li></ul><h4 class="tsd-returns-title">Returns <span class="tsd-signature-symbol">(</span><span class="tsd-signature-symbol">)</span><span class="tsd-signature-symbol"> =&gt; </span><span class="tsd-signature-type">Promise</span><span class="tsd-signature-symbol">&lt;</span><span class="tsd-signature-type">unknown</span><span class="tsd-signature-symbol">&gt;</span></h4><ul class="tsd-parameters"><li class="tsd-parameter-signature"><ul class="tsd-signatures tsd-kind-type-literal"><li class="tsd-signature tsd-kind-icon"><span class="tsd-signature-symbol">(</span><span class="tsd-signature-symbol">)</span><span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">Promise</span><span class="tsd-signature-symbol">&lt;</span><span class="tsd-signature-type">unknown</span><span class="tsd-signature-symbol">&gt;</span></li></ul><ul class="tsd-descriptions"><li class="tsd-description"><div class="tsd-comment tsd-typography"><div class="lead">
<p>Wrapper function for all (un)lock operations. If the <code>fn()</code> resolves to false (after applying
{@link fromResp2ToBool}, the result will be swallowed. When <code>fn()</code> resolves to true, this wrapper
will return true. Any error coming from <code>fn()</code> will be thrown.</p>
</div></div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">Promise</span><span class="tsd-signature-symbol">&lt;</span><span class="tsd-signature-type">unknown</span><span class="tsd-signature-symbol">&gt;</span></h4></li></ul></li></ul></li></ul></section><section class="tsd-panel tsd-member tsd-kind-method tsd-parent-kind-class tsd-has-type-parameter"><a id="withReadLock" class="tsd-anchor"></a><h3 class="tsd-anchor-link">with<wbr/>Read<wbr/>Lock<a href="#withReadLock" aria-label="Permalink" class="tsd-anchor-icon"><svg xmlns="http://www.w3.org/2000/svg" class="icon icon-tabler icon-tabler-link" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><path stroke="none" d="M0 0h24v24H0z" fill="none"></path><path d="M10 14a3.5 3.5 0 0 0 5 0l4 -4a3.5 3.5 0 0 0 -5 -5l-.5 .5"></path><path d="M14 10a3.5 3.5 0 0 0 -5 0l-4 4a3.5 3.5 0 0 0 5 5l.5 -.5"></path></svg></a></h3><ul class="tsd-signatures tsd-kind-method tsd-parent-kind-class tsd-has-type-parameter"><li class="tsd-signature tsd-kind-icon">with<wbr/>Read<wbr/>Lock<span class="tsd-signature-symbol">&lt;</span><span class="tsd-signature-type" data-tsd-kind="Type parameter">T</span><span class="tsd-signature-symbol">&gt;</span><span class="tsd-signature-symbol">(</span>identifier<span class="tsd-signature-symbol">: </span><a href="../interfaces/ResourceIdentifier.html" class="tsd-signature-type" data-tsd-kind="Interface">ResourceIdentifier</a>, whileLocked<span class="tsd-signature-symbol">: </span><span class="tsd-signature-symbol">(</span><span class="tsd-signature-symbol">)</span><span class="tsd-signature-symbol"> =&gt; </span><span class="tsd-signature-type" data-tsd-kind="Type parameter">T</span><span class="tsd-signature-symbol"> | </span><span class="tsd-signature-type">Promise</span><span class="tsd-signature-symbol">&lt;</span><span class="tsd-signature-type" data-tsd-kind="Type parameter">T</span><span class="tsd-signature-symbol">&gt;</span><span class="tsd-signature-symbol">)</span><span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">Promise</span><span class="tsd-signature-symbol">&lt;</span><span class="tsd-signature-type" data-tsd-kind="Type parameter">T</span><span class="tsd-signature-symbol">&gt;</span></li></ul><ul class="tsd-descriptions"><li class="tsd-description"><aside class="tsd-sources"><p>Implementation of <a href="../interfaces/ReadWriteLocker.html">ReadWriteLocker</a>.<a href="../interfaces/ReadWriteLocker.html#withReadLock">withReadLock</a></p><ul><li>Defined in <a href="https://github.com/CommunitySolidServer/CommunitySolidServer/blob/f0f900e/src/util/locking/RedisLocker.ts#L125">src/util/locking/RedisLocker.ts:125</a></li></ul></aside><div class="tsd-comment tsd-typography"><div class="lead">
<p>Run the given function while the resource is locked.
The lock will be released when the (async) input function resolves.
This function should be used for operations that only require reading the resource.</p>
</div></div><h4 class="tsd-type-parameters-title">Type parameters</h4><ul class="tsd-type-parameters"><li><h4>T</h4></li></ul><h4 class="tsd-parameters-title">Parameters</h4><ul class="tsd-parameters"><li><h5>identifier: <a href="../interfaces/ResourceIdentifier.html" class="tsd-signature-type" data-tsd-kind="Interface">ResourceIdentifier</a></h5></li><li><h5>whileLocked: <span class="tsd-signature-symbol">(</span><span class="tsd-signature-symbol">)</span><span class="tsd-signature-symbol"> =&gt; </span><span class="tsd-signature-type" data-tsd-kind="Type parameter">T</span><span class="tsd-signature-symbol"> | </span><span class="tsd-signature-type">Promise</span><span class="tsd-signature-symbol">&lt;</span><span class="tsd-signature-type" data-tsd-kind="Type parameter">T</span><span class="tsd-signature-symbol">&gt;</span></h5><ul class="tsd-parameters"><li class="tsd-parameter-signature"><ul class="tsd-signatures tsd-kind-type-literal"><li class="tsd-signature tsd-kind-icon"><span class="tsd-signature-symbol">(</span><span class="tsd-signature-symbol">)</span><span class="tsd-signature-symbol">: </span><span class="tsd-signature-type" data-tsd-kind="Type parameter">T</span><span class="tsd-signature-symbol"> | </span><span class="tsd-signature-type">Promise</span><span class="tsd-signature-symbol">&lt;</span><span class="tsd-signature-type" data-tsd-kind="Type parameter">T</span><span class="tsd-signature-symbol">&gt;</span></li></ul><ul class="tsd-descriptions"><li class="tsd-description"><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type" data-tsd-kind="Type parameter">T</span><span class="tsd-signature-symbol"> | </span><span class="tsd-signature-type">Promise</span><span class="tsd-signature-symbol">&lt;</span><span class="tsd-signature-type" data-tsd-kind="Type parameter">T</span><span class="tsd-signature-symbol">&gt;</span></h4></li></ul></li></ul></li></ul><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">Promise</span><span class="tsd-signature-symbol">&lt;</span><span class="tsd-signature-type" data-tsd-kind="Type parameter">T</span><span class="tsd-signature-symbol">&gt;</span></h4><div><p>A promise resolving when the lock is released.</p>
</div></li></ul></section><section class="tsd-panel tsd-member tsd-kind-method tsd-parent-kind-class tsd-has-type-parameter"><a id="withWriteLock" class="tsd-anchor"></a><h3 class="tsd-anchor-link">with<wbr/>Write<wbr/>Lock<a href="#withWriteLock" aria-label="Permalink" class="tsd-anchor-icon"><svg xmlns="http://www.w3.org/2000/svg" class="icon icon-tabler icon-tabler-link" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><path stroke="none" d="M0 0h24v24H0z" fill="none"></path><path d="M10 14a3.5 3.5 0 0 0 5 0l4 -4a3.5 3.5 0 0 0 -5 -5l-.5 .5"></path><path d="M14 10a3.5 3.5 0 0 0 -5 0l-4 4a3.5 3.5 0 0 0 5 5l.5 -.5"></path></svg></a></h3><ul class="tsd-signatures tsd-kind-method tsd-parent-kind-class tsd-has-type-parameter"><li class="tsd-signature tsd-kind-icon">with<wbr/>Write<wbr/>Lock<span class="tsd-signature-symbol">&lt;</span><span class="tsd-signature-type" data-tsd-kind="Type parameter">T</span><span class="tsd-signature-symbol">&gt;</span><span class="tsd-signature-symbol">(</span>identifier<span class="tsd-signature-symbol">: </span><a href="../interfaces/ResourceIdentifier.html" class="tsd-signature-type" data-tsd-kind="Interface">ResourceIdentifier</a>, whileLocked<span class="tsd-signature-symbol">: </span><span class="tsd-signature-symbol">(</span><span class="tsd-signature-symbol">)</span><span class="tsd-signature-symbol"> =&gt; </span><span class="tsd-signature-type" data-tsd-kind="Type parameter">T</span><span class="tsd-signature-symbol"> | </span><span class="tsd-signature-type">Promise</span><span class="tsd-signature-symbol">&lt;</span><span class="tsd-signature-type" data-tsd-kind="Type parameter">T</span><span class="tsd-signature-symbol">&gt;</span><span class="tsd-signature-symbol">)</span><span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">Promise</span><span class="tsd-signature-symbol">&lt;</span><span class="tsd-signature-type" data-tsd-kind="Type parameter">T</span><span class="tsd-signature-symbol">&gt;</span></li></ul><ul class="tsd-descriptions"><li class="tsd-description"><aside class="tsd-sources"><p>Implementation of <a href="../interfaces/ReadWriteLocker.html">ReadWriteLocker</a>.<a href="../interfaces/ReadWriteLocker.html#withWriteLock">withWriteLock</a></p><ul><li>Defined in <a href="https://github.com/CommunitySolidServer/CommunitySolidServer/blob/f0f900e/src/util/locking/RedisLocker.ts#L141">src/util/locking/RedisLocker.ts:141</a></li></ul></aside><div class="tsd-comment tsd-typography"><div class="lead">
<p>Run the given function while the resource is locked.
The lock will be released when the (async) input function resolves.
This function should be used for operations that could modify the resource.</p>
</div></div><h4 class="tsd-type-parameters-title">Type parameters</h4><ul class="tsd-type-parameters"><li><h4>T</h4></li></ul><h4 class="tsd-parameters-title">Parameters</h4><ul class="tsd-parameters"><li><h5>identifier: <a href="../interfaces/ResourceIdentifier.html" class="tsd-signature-type" data-tsd-kind="Interface">ResourceIdentifier</a></h5></li><li><h5>whileLocked: <span class="tsd-signature-symbol">(</span><span class="tsd-signature-symbol">)</span><span class="tsd-signature-symbol"> =&gt; </span><span class="tsd-signature-type" data-tsd-kind="Type parameter">T</span><span class="tsd-signature-symbol"> | </span><span class="tsd-signature-type">Promise</span><span class="tsd-signature-symbol">&lt;</span><span class="tsd-signature-type" data-tsd-kind="Type parameter">T</span><span class="tsd-signature-symbol">&gt;</span></h5><ul class="tsd-parameters"><li class="tsd-parameter-signature"><ul class="tsd-signatures tsd-kind-type-literal"><li class="tsd-signature tsd-kind-icon"><span class="tsd-signature-symbol">(</span><span class="tsd-signature-symbol">)</span><span class="tsd-signature-symbol">: </span><span class="tsd-signature-type" data-tsd-kind="Type parameter">T</span><span class="tsd-signature-symbol"> | </span><span class="tsd-signature-type">Promise</span><span class="tsd-signature-symbol">&lt;</span><span class="tsd-signature-type" data-tsd-kind="Type parameter">T</span><span class="tsd-signature-symbol">&gt;</span></li></ul><ul class="tsd-descriptions"><li class="tsd-description"><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type" data-tsd-kind="Type parameter">T</span><span class="tsd-signature-symbol"> | </span><span class="tsd-signature-type">Promise</span><span class="tsd-signature-symbol">&lt;</span><span class="tsd-signature-type" data-tsd-kind="Type parameter">T</span><span class="tsd-signature-symbol">&gt;</span></h4></li></ul></li></ul></li></ul><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">Promise</span><span class="tsd-signature-symbol">&lt;</span><span class="tsd-signature-type" data-tsd-kind="Type parameter">T</span><span class="tsd-signature-symbol">&gt;</span></h4><div><p>A promise resolving when the lock is released.</p>
</div></li></ul></section></section></div><div class="col-4 col-menu menu-sticky-wrap menu-highlight"><nav class="tsd-navigation primary"><ul><li class=""><a href="../modules.html">Exports</a></li></ul></nav><nav class="tsd-navigation secondary menu-sticky"><ul><li class="current tsd-kind-class"><a href="RedisLocker.html" class="tsd-kind-icon">Redis<wbr/>Locker</a><ul><li class="tsd-kind-constructor tsd-parent-kind-class"><a href="RedisLocker.html#constructor" class="tsd-kind-icon">constructor</a></li><li class="tsd-kind-property tsd-parent-kind-class tsd-is-private"><a href="RedisLocker.html#attemptSettings" class="tsd-kind-icon">attempt<wbr/>Settings</a></li><li class="tsd-kind-property tsd-parent-kind-class tsd-is-protected"><a href="RedisLocker.html#logger" class="tsd-kind-icon">logger</a></li><li class="tsd-kind-property tsd-parent-kind-class tsd-is-private"><a href="RedisLocker.html#redis" class="tsd-kind-icon">redis</a></li><li class="tsd-kind-property tsd-parent-kind-class tsd-is-private"><a href="RedisLocker.html#redisLock" class="tsd-kind-icon">redis<wbr/>Lock</a></li><li class="tsd-kind-property tsd-parent-kind-class tsd-is-private"><a href="RedisLocker.html#redisRw" class="tsd-kind-icon">redis<wbr/>Rw</a></li><li class="tsd-kind-method tsd-parent-kind-class"><a href="RedisLocker.html#acquire" class="tsd-kind-icon">acquire</a></li><li class="tsd-kind-method tsd-parent-kind-class tsd-is-private"><a href="RedisLocker.html#createRedisClient" class="tsd-kind-icon">create<wbr/>Redis<wbr/>Client</a></li><li class="tsd-kind-method tsd-parent-kind-class"><a href="RedisLocker.html#finalize" class="tsd-kind-icon">finalize</a></li><li class="tsd-kind-method tsd-parent-kind-class tsd-is-private"><a href="RedisLocker.html#getReadWriteKey" class="tsd-kind-icon">get<wbr/>Read<wbr/>Write<wbr/>Key</a></li><li class="tsd-kind-method tsd-parent-kind-class tsd-is-private"><a href="RedisLocker.html#getResourceKey" class="tsd-kind-icon">get<wbr/>Resource<wbr/>Key</a></li><li class="tsd-kind-method tsd-parent-kind-class"><a href="RedisLocker.html#release" class="tsd-kind-icon">release</a></li><li class="tsd-kind-method tsd-parent-kind-class tsd-is-private"><a href="RedisLocker.html#swallowFalse" class="tsd-kind-icon">swallow<wbr/>False</a></li><li class="tsd-kind-method tsd-parent-kind-class tsd-has-type-parameter"><a href="RedisLocker.html#withReadLock" class="tsd-kind-icon">with<wbr/>Read<wbr/>Lock</a></li><li class="tsd-kind-method tsd-parent-kind-class tsd-has-type-parameter"><a href="RedisLocker.html#withWriteLock" class="tsd-kind-icon">with<wbr/>Write<wbr/>Lock</a></li></ul></li></ul></nav></div></div></div><footer class=""><div class="container"><h2>Legend</h2><div class="tsd-legend-group"><ul class="tsd-legend"><li class="tsd-kind-constructor tsd-parent-kind-class"><span class="tsd-kind-icon">Constructor</span></li><li class="tsd-kind-property tsd-parent-kind-class"><span class="tsd-kind-icon">Property</span></li><li class="tsd-kind-method tsd-parent-kind-class"><span class="tsd-kind-icon">Method</span></li><li class="tsd-kind-accessor tsd-parent-kind-class"><span class="tsd-kind-icon">Accessor</span></li></ul><ul class="tsd-legend"><li class="tsd-kind-constructor tsd-parent-kind-interface"><span class="tsd-kind-icon">Constructor</span></li><li class="tsd-kind-property tsd-parent-kind-interface"><span class="tsd-kind-icon">Property</span></li><li class="tsd-kind-method tsd-parent-kind-interface"><span class="tsd-kind-icon">Method</span></li></ul><ul class="tsd-legend"><li class="tsd-kind-constructor tsd-parent-kind-class tsd-is-inherited"><span class="tsd-kind-icon">Inherited constructor</span></li><li class="tsd-kind-property tsd-parent-kind-class tsd-is-inherited"><span class="tsd-kind-icon">Inherited property</span></li><li class="tsd-kind-method tsd-parent-kind-class tsd-is-inherited"><span class="tsd-kind-icon">Inherited method</span></li></ul><ul class="tsd-legend"><li class="tsd-kind-property tsd-parent-kind-class tsd-is-protected"><span class="tsd-kind-icon">Protected property</span></li><li class="tsd-kind-method tsd-parent-kind-class tsd-is-protected"><span class="tsd-kind-icon">Protected method</span></li></ul><ul class="tsd-legend"><li class="tsd-kind-property tsd-parent-kind-class tsd-is-private"><span class="tsd-kind-icon">Private property</span></li><li class="tsd-kind-method tsd-parent-kind-class tsd-is-private"><span class="tsd-kind-icon">Private method</span></li></ul><ul class="tsd-legend"><li class="tsd-kind-method tsd-parent-kind-class tsd-is-static"><span class="tsd-kind-icon">Static method</span></li></ul></div><h2>Settings</h2><p>Theme <select id="theme"><option value="os">OS</option><option value="light">Light</option><option value="dark">Dark</option></select></p></div></footer><div class="overlay"></div><script src="../assets/main.js"></script></body></html>