Erro de disparo: desculpe, ocorreu um erro de servidor durante a leitura do armazenamento. Código de erro PERMISSION_DENIED

Dec 03 2020

Meu script Gapps chamado do gatilho baseado em tempo está registrando muitos erros "Lamentamos, ocorreu um erro no servidor ao ler o armazenamento. Código de erro PERMISSION_DENIED". Presumo que haja usuários que instalaram o aplicativo e o gatilho, mas posteriormente removeram as permissões para a execução do script. O que, obviamente, pode causar esse problema. Ainda estou tentando e falhando em evitá-lo ...

É assim que o gatilho é instalado:

var triggerFunction = "processRecurrentLists";  //trigger callback function name

//---------------------------------------------
function createTriggers(tmz) {
  // Trigger running at 1am depending on timezone specified in settings
  // If no timezone specified, script timezone is used (GMT)
  ScriptApp.newTrigger(triggerFunction)
      .timeBased()
      .everyDays(1)
      .inTimezone(tmz)
      .atHour(1)
      .create();
      
}

Esta é a função acionada:

function processRecurrentLists() {
  // Check if the actions of the trigger requires authorization that has not
  // been granted yet; if not, then end - nothing to do.
  if (!isScriptAuthorized()) {
    console.warn("RecGTasks script is not authorized to run. Please, authorize first.");
    return;
  }

  // ... more code here
}

E autorização de teste de função:

function isScriptAuthorized() {
  try {
    var authInfo = ScriptApp.getAuthorizationInfo(ScriptApp.AuthMode.FULL);
    return (authInfo.getAuthorizationStatus() == ScriptApp.AuthorizationStatus.NOT_REQUIRED);
  } catch (e) {
    console.warn("Script not authorized. err=%s",e.message);
    return false;
  }
}

Minha suposição é que a função isScriptAuthorized retorna falso se o script não está autorizado e o script termina normalmente, mas parece não ser o caso ...

Alguma ideia sobre isso?

Atualização 1 Tornei o script acessível para todos os usuários como uma solução alternativa parahttps://issuetracker.google.com/issues/175139769e no mesmo dia a mensagem mudou para "É necessária autorização para executar essa ação.", portanto, não há mais PERMISSION_DENIED. Investigando mais.

Atualização 2 Sim, como @ziganotschka apontou, está relacionado ao V8. Usei o seguinte script para testá-lo completamente:

function doGet() {
  // if trigger not installed
  if (ScriptApp
      .getProjectTriggers()
      .filter(function(t){return t.getHandlerFunction() === "myFunction"})
      .length == 0
     ){
    // create trigger firing every 1min
    ScriptApp.newTrigger("myFunction")
    .timeBased()
    .everyMinutes(1)
    .create();      
  }
  return HtmlService.createHtmlOutput('<h1>Trigger test installed</h1>');
}

function myFunction() { 
  Logger.log("Hello from triggered function");
  return ("Hello from server");
}

Respostas

2 ziganotschka Dec 03 2020 at 18:10

Parece ser um bug relacionado ao tempo de execução v8

Dê uma olhada aqui e aqui .

Este problema parece ocorrer quando os usuários estão conectados com várias contas ao mesmo tempo.

Enquanto o Google está corrigindo o bug, sugiro que você desative temporariamente o runtime da v8 para evitar o problema.