用于scriptDB写入的锁定服务技术

时间:2013-01-24 14:28:16

标签: javascript google-apps-script

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

我无法直观地看到在这种情况下如何使用Lock Services,因为目前没有任何代码块重叠。在执行db.save()之前,我是否应该使用一个中心keyMaster()函数来检查所有现有函数?

1 个答案:

答案 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";
        }  
      }