我希望在我的脚本上实现锁定服务以防止数据库冲突,但所有示例似乎都针对同一代码块的多个触发器。我的触发器都是针对对 ScriptDB 进行不同写入的不同函数,但写入的信息有时会发生冲突。
我无法想象在这种情况下如何使用锁定服务,因为目前正在执行的代码块都没有重叠。在执行 db.save() 之前,我是否应该有一个中央 keyMaster() 函数来检查所有现有函数?
我希望在我的脚本上实现锁定服务以防止数据库冲突,但所有示例似乎都针对同一代码块的多个触发器。我的触发器都是针对对 ScriptDB 进行不同写入的不同函数,但写入的信息有时会发生冲突。
我无法想象在这种情况下如何使用锁定服务,因为目前正在执行的代码块都没有重叠。在执行 db.save() 之前,我是否应该有一个中央 keyMaster() 函数来检查所有现有函数?
这是我组装的系统。这个简单的测试按预期工作,但在我不知道的边缘情况可能不存在的情况下,在我的完整脚本中测试更难。
对此有何评论?
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";
}
}