0

我希望在我的脚本上实现锁定服务以防止数据库冲突,但所有示例似乎都针对同一代码块的多个触发器。我的触发器都是针对对 ScriptDB 进行不同写入的不同函数,但写入的信息有时会发生冲突。

我无法想象在这种情况下如何使用锁定服务,因为目前正在执行的代码块都没有重叠。在执行 db.save() 之前,我是否应该有一个中央 keyMaster() 函数来检查所有现有函数?

4

1 回答 1

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";
        }  
      }
于 2013-01-24T20:10:42.440 回答