Exceeded attempts to lock the resource error in redlock nodejs












0















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()
}









share|improve this question























  • how many calls to transferMoney are you doing simultaneously?

    – adrhc
    Nov 21 '18 at 19:42
















0















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()
}









share|improve this question























  • how many calls to transferMoney are you doing simultaneously?

    – adrhc
    Nov 21 '18 at 19:42














0












0








0








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()
}









share|improve this question














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






share|improve this question













share|improve this question











share|improve this question




share|improve this question










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



















  • 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












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
});


}
});














draft saved

draft discarded


















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
















draft saved

draft discarded




















































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.




draft saved


draft discarded














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





















































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







Popular posts from this blog

Florida Star v. B. J. F.

Danny Elfman

Lugert, Oklahoma