How to check if somebody else editing same entity
Lets say in admin panel one user editing any entity lets say product is there a way if another user who also if try to edit the same entity/product info would able to get a notification or something that "somebody else already editing the same so ask him to wait etc".
mysql concurrency
add a comment |
Lets say in admin panel one user editing any entity lets say product is there a way if another user who also if try to edit the same entity/product info would able to get a notification or something that "somebody else already editing the same so ask him to wait etc".
mysql concurrency
If you use InnoDB you can use SELECT ... FOR UPDATE
– Raymond Nijland
Nov 25 '18 at 16:37
add a comment |
Lets say in admin panel one user editing any entity lets say product is there a way if another user who also if try to edit the same entity/product info would able to get a notification or something that "somebody else already editing the same so ask him to wait etc".
mysql concurrency
Lets say in admin panel one user editing any entity lets say product is there a way if another user who also if try to edit the same entity/product info would able to get a notification or something that "somebody else already editing the same so ask him to wait etc".
mysql concurrency
mysql concurrency
asked Nov 25 '18 at 14:55
nirmeshnirmesh
536
536
If you use InnoDB you can use SELECT ... FOR UPDATE
– Raymond Nijland
Nov 25 '18 at 16:37
add a comment |
If you use InnoDB you can use SELECT ... FOR UPDATE
– Raymond Nijland
Nov 25 '18 at 16:37
If you use InnoDB you can use SELECT ... FOR UPDATE
– Raymond Nijland
Nov 25 '18 at 16:37
If you use InnoDB you can use SELECT ... FOR UPDATE
– Raymond Nijland
Nov 25 '18 at 16:37
add a comment |
1 Answer
1
active
oldest
votes
You need a way to mark the entity as busy.
A good way: add two columns to the entity's table.
busy_user INT either a user id or zero
busy_until TIMESTAMP the time when the busy setting expires, in case the user goes away
Then when a user tries to edit an item you do this:
- if
busy_useris nonzero and not the current user, andbusy_until > NOW()reject the request to edit; the item is busy. - Set
busy_userto the current user's id. Set busy_until toNOW() + INTERVAL 5 MINUTE
- Do the edit as needed.
When a user finishes editing, set busy_user to zero.
In thoery race conditations can still happen with this method
– Raymond Nijland
Nov 25 '18 at 16:28
add a comment |
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%2f53468731%2fhow-to-check-if-somebody-else-editing-same-entity%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
1 Answer
1
active
oldest
votes
1 Answer
1
active
oldest
votes
active
oldest
votes
active
oldest
votes
You need a way to mark the entity as busy.
A good way: add two columns to the entity's table.
busy_user INT either a user id or zero
busy_until TIMESTAMP the time when the busy setting expires, in case the user goes away
Then when a user tries to edit an item you do this:
- if
busy_useris nonzero and not the current user, andbusy_until > NOW()reject the request to edit; the item is busy. - Set
busy_userto the current user's id. Set busy_until toNOW() + INTERVAL 5 MINUTE
- Do the edit as needed.
When a user finishes editing, set busy_user to zero.
In thoery race conditations can still happen with this method
– Raymond Nijland
Nov 25 '18 at 16:28
add a comment |
You need a way to mark the entity as busy.
A good way: add two columns to the entity's table.
busy_user INT either a user id or zero
busy_until TIMESTAMP the time when the busy setting expires, in case the user goes away
Then when a user tries to edit an item you do this:
- if
busy_useris nonzero and not the current user, andbusy_until > NOW()reject the request to edit; the item is busy. - Set
busy_userto the current user's id. Set busy_until toNOW() + INTERVAL 5 MINUTE
- Do the edit as needed.
When a user finishes editing, set busy_user to zero.
In thoery race conditations can still happen with this method
– Raymond Nijland
Nov 25 '18 at 16:28
add a comment |
You need a way to mark the entity as busy.
A good way: add two columns to the entity's table.
busy_user INT either a user id or zero
busy_until TIMESTAMP the time when the busy setting expires, in case the user goes away
Then when a user tries to edit an item you do this:
- if
busy_useris nonzero and not the current user, andbusy_until > NOW()reject the request to edit; the item is busy. - Set
busy_userto the current user's id. Set busy_until toNOW() + INTERVAL 5 MINUTE
- Do the edit as needed.
When a user finishes editing, set busy_user to zero.
You need a way to mark the entity as busy.
A good way: add two columns to the entity's table.
busy_user INT either a user id or zero
busy_until TIMESTAMP the time when the busy setting expires, in case the user goes away
Then when a user tries to edit an item you do this:
- if
busy_useris nonzero and not the current user, andbusy_until > NOW()reject the request to edit; the item is busy. - Set
busy_userto the current user's id. Set busy_until toNOW() + INTERVAL 5 MINUTE
- Do the edit as needed.
When a user finishes editing, set busy_user to zero.
answered Nov 25 '18 at 15:14
O. JonesO. Jones
59.5k974106
59.5k974106
In thoery race conditations can still happen with this method
– Raymond Nijland
Nov 25 '18 at 16:28
add a comment |
In thoery race conditations can still happen with this method
– Raymond Nijland
Nov 25 '18 at 16:28
In thoery race conditations can still happen with this method
– Raymond Nijland
Nov 25 '18 at 16:28
In thoery race conditations can still happen with this method
– Raymond Nijland
Nov 25 '18 at 16:28
add a comment |
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%2f53468731%2fhow-to-check-if-somebody-else-editing-same-entity%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
If you use InnoDB you can use SELECT ... FOR UPDATE
– Raymond Nijland
Nov 25 '18 at 16:37