Exceeded attempts to lock the resource error in redlock nodejs
I practice on redis and redlock and I write some function to handle a basic transaction of a bank for example. I have 2 Account and I want to transfer money between these 2 account. to solve synchronism problem I use redlock module. this is my code but i get an error that says:
UnhandledPromiseRejectionWarning: LockError: Exceeded 10 attempts to lock the resource "bahrami".
and this is my code :
const redis = require('./redis')
const readline = require('readline')
var Redlock = require('redlock');
var redlock = new Redlock(
// you should have one client for each independent redis node
// or cluster
[redis],
{
// the expected clock drift; for more details
// see http://redis.io/topics/distlock
driftFactor: 0.01, // time in ms
// the max number of times Redlock will attempt
// to lock a resource before erroring
retryCount: 10,
// the time in ms between attempts
retryDelay: 200, // time in ms
// the max time in ms randomly added to retries
// to improve performance under high contention
// see https://www.awsarchitectureblog.com/2015/03/backoff.html
retryJitter: 200 // time in ms
}
);
const ttl = 1000;
const transferMoney = async () => {
const sourceAccount = await getInput('enter sourceAccount');
const destinationAccount = await getInput('enter destinationAccount');
const money = await getInput ('enter amount of money ')
const sourceLock = await redlock.lock(sourceAccount, ttl)
const sourceAccountAmount = await redis.get(sourceAccount)
const destLock = await redlock.lock(destinationAccount, ttl)
const destinationAccountAmount = await redis.get(destinationAccount)
if (sourceAccountAmount >= money){
await redis.set(sourceAccount, sourceAccountAmount - money)
const sum = parseInt(destinationAccountAmount) + parseInt(money)
await redis.set(destinationAccount, sum)
}
else{
console.log('your money does not enough!')
}
const tr = await redis.lpush(`transaction:s:${sourceAccount}:d:${destinationAccount}`, JSON.stringify({Amount}))
console.log(tr)
await sourceLock.unlock()
await destLock.unlock()
}
node.js ioredis redlock.net
add a comment |
I practice on redis and redlock and I write some function to handle a basic transaction of a bank for example. I have 2 Account and I want to transfer money between these 2 account. to solve synchronism problem I use redlock module. this is my code but i get an error that says:
UnhandledPromiseRejectionWarning: LockError: Exceeded 10 attempts to lock the resource "bahrami".
and this is my code :
const redis = require('./redis')
const readline = require('readline')
var Redlock = require('redlock');
var redlock = new Redlock(
// you should have one client for each independent redis node
// or cluster
[redis],
{
// the expected clock drift; for more details
// see http://redis.io/topics/distlock
driftFactor: 0.01, // time in ms
// the max number of times Redlock will attempt
// to lock a resource before erroring
retryCount: 10,
// the time in ms between attempts
retryDelay: 200, // time in ms
// the max time in ms randomly added to retries
// to improve performance under high contention
// see https://www.awsarchitectureblog.com/2015/03/backoff.html
retryJitter: 200 // time in ms
}
);
const ttl = 1000;
const transferMoney = async () => {
const sourceAccount = await getInput('enter sourceAccount');
const destinationAccount = await getInput('enter destinationAccount');
const money = await getInput ('enter amount of money ')
const sourceLock = await redlock.lock(sourceAccount, ttl)
const sourceAccountAmount = await redis.get(sourceAccount)
const destLock = await redlock.lock(destinationAccount, ttl)
const destinationAccountAmount = await redis.get(destinationAccount)
if (sourceAccountAmount >= money){
await redis.set(sourceAccount, sourceAccountAmount - money)
const sum = parseInt(destinationAccountAmount) + parseInt(money)
await redis.set(destinationAccount, sum)
}
else{
console.log('your money does not enough!')
}
const tr = await redis.lpush(`transaction:s:${sourceAccount}:d:${destinationAccount}`, JSON.stringify({Amount}))
console.log(tr)
await sourceLock.unlock()
await destLock.unlock()
}
node.js ioredis redlock.net
how many calls to transferMoney are you doing simultaneously?
– adrhc
Nov 21 '18 at 19:42
add a comment |
I practice on redis and redlock and I write some function to handle a basic transaction of a bank for example. I have 2 Account and I want to transfer money between these 2 account. to solve synchronism problem I use redlock module. this is my code but i get an error that says:
UnhandledPromiseRejectionWarning: LockError: Exceeded 10 attempts to lock the resource "bahrami".
and this is my code :
const redis = require('./redis')
const readline = require('readline')
var Redlock = require('redlock');
var redlock = new Redlock(
// you should have one client for each independent redis node
// or cluster
[redis],
{
// the expected clock drift; for more details
// see http://redis.io/topics/distlock
driftFactor: 0.01, // time in ms
// the max number of times Redlock will attempt
// to lock a resource before erroring
retryCount: 10,
// the time in ms between attempts
retryDelay: 200, // time in ms
// the max time in ms randomly added to retries
// to improve performance under high contention
// see https://www.awsarchitectureblog.com/2015/03/backoff.html
retryJitter: 200 // time in ms
}
);
const ttl = 1000;
const transferMoney = async () => {
const sourceAccount = await getInput('enter sourceAccount');
const destinationAccount = await getInput('enter destinationAccount');
const money = await getInput ('enter amount of money ')
const sourceLock = await redlock.lock(sourceAccount, ttl)
const sourceAccountAmount = await redis.get(sourceAccount)
const destLock = await redlock.lock(destinationAccount, ttl)
const destinationAccountAmount = await redis.get(destinationAccount)
if (sourceAccountAmount >= money){
await redis.set(sourceAccount, sourceAccountAmount - money)
const sum = parseInt(destinationAccountAmount) + parseInt(money)
await redis.set(destinationAccount, sum)
}
else{
console.log('your money does not enough!')
}
const tr = await redis.lpush(`transaction:s:${sourceAccount}:d:${destinationAccount}`, JSON.stringify({Amount}))
console.log(tr)
await sourceLock.unlock()
await destLock.unlock()
}
node.js ioredis redlock.net
I practice on redis and redlock and I write some function to handle a basic transaction of a bank for example. I have 2 Account and I want to transfer money between these 2 account. to solve synchronism problem I use redlock module. this is my code but i get an error that says:
UnhandledPromiseRejectionWarning: LockError: Exceeded 10 attempts to lock the resource "bahrami".
and this is my code :
const redis = require('./redis')
const readline = require('readline')
var Redlock = require('redlock');
var redlock = new Redlock(
// you should have one client for each independent redis node
// or cluster
[redis],
{
// the expected clock drift; for more details
// see http://redis.io/topics/distlock
driftFactor: 0.01, // time in ms
// the max number of times Redlock will attempt
// to lock a resource before erroring
retryCount: 10,
// the time in ms between attempts
retryDelay: 200, // time in ms
// the max time in ms randomly added to retries
// to improve performance under high contention
// see https://www.awsarchitectureblog.com/2015/03/backoff.html
retryJitter: 200 // time in ms
}
);
const ttl = 1000;
const transferMoney = async () => {
const sourceAccount = await getInput('enter sourceAccount');
const destinationAccount = await getInput('enter destinationAccount');
const money = await getInput ('enter amount of money ')
const sourceLock = await redlock.lock(sourceAccount, ttl)
const sourceAccountAmount = await redis.get(sourceAccount)
const destLock = await redlock.lock(destinationAccount, ttl)
const destinationAccountAmount = await redis.get(destinationAccount)
if (sourceAccountAmount >= money){
await redis.set(sourceAccount, sourceAccountAmount - money)
const sum = parseInt(destinationAccountAmount) + parseInt(money)
await redis.set(destinationAccount, sum)
}
else{
console.log('your money does not enough!')
}
const tr = await redis.lpush(`transaction:s:${sourceAccount}:d:${destinationAccount}`, JSON.stringify({Amount}))
console.log(tr)
await sourceLock.unlock()
await destLock.unlock()
}
node.js ioredis redlock.net
node.js ioredis redlock.net
asked Nov 15 '18 at 12:20
FahomFahom
275
275
how many calls to transferMoney are you doing simultaneously?
– adrhc
Nov 21 '18 at 19:42
add a comment |
how many calls to transferMoney are you doing simultaneously?
– adrhc
Nov 21 '18 at 19:42
how many calls to transferMoney are you doing simultaneously?
– adrhc
Nov 21 '18 at 19:42
how many calls to transferMoney are you doing simultaneously?
– adrhc
Nov 21 '18 at 19:42
add a comment |
0
active
oldest
votes
Your Answer
StackExchange.ifUsing("editor", function () {
StackExchange.using("externalEditor", function () {
StackExchange.using("snippets", function () {
StackExchange.snippets.init();
});
});
}, "code-snippets");
StackExchange.ready(function() {
var channelOptions = {
tags: "".split(" "),
id: "1"
};
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function() {
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled) {
StackExchange.using("snippets", function() {
createEditor();
});
}
else {
createEditor();
}
});
function createEditor() {
StackExchange.prepareEditor({
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader: {
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
},
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
});
}
});
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53319413%2fexceeded-attempts-to-lock-the-resource-error-in-redlock-nodejs%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
0
active
oldest
votes
0
active
oldest
votes
active
oldest
votes
active
oldest
votes
Thanks for contributing an answer to Stack Overflow!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53319413%2fexceeded-attempts-to-lock-the-resource-error-in-redlock-nodejs%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
how many calls to transferMoney are you doing simultaneously?
– adrhc
Nov 21 '18 at 19:42