我希望在我的脚本上实现锁定服务以防止数据库冲突,但所有示例似乎都适用于同一代码块的多个触发器。我的触发器都是针对不同的函数执行的,这些函数对ScriptDB执行不同的写操作,但写入的信息有时会发生冲突。
我无法直观地看到在这种情况下如何使用Lock Services,因为目前没有任何代码块重叠。在执行db.save()之前,我是否应该使用一个中心keyMaster()函数来检查所有现有函数?
答案 0 :(得分:0)
这是我整合的系统。这个简单的测试按预期工作,但是在我的完整脚本中更难以测试我不知道的边缘情况可能不存在。
对此有何评论?
function keyMaster(type, myLock) {
//call with following to create a lock
//var lock = keyMaster("lock"); // Check that response is not null
//Call with the following to release
//lock = keyMaster("unlock", lock);
if (type === "lock") {
try {
var lock = LockService.getPublicLock();
lock.waitLock(45000);
return lock;
}
catch(e) {
Logger.log ("Keymaster error\n" + e.message);
return null;
}
}
else {
myLock.releaseLock();
return myLock;
}
}
function block1() {
var lock = keyMaster("lock");
if (lock) {
Utilities.sleep(10000);
lock = keyMaster("unlock", lock);
}
}
function block2() {
var lock = keyMaster("lock");
if (lock) {
Utilities.sleep(0);
lock = keyMaster("unlock", lock);
return "block2 locked and unlocked";
}
else {
return "block2 could not get lock";
}
}