async function createCDNLogsPartition()

in lambda-functions/add-partition-function/index.js [74:108]


async function createCDNLogsPartition(year, month, day, hour) {

  let {
    QueryExecutionId
  } = await runQuery({
    QueryString: `ALTER TABLE ${CDN_LOGS_TABLE}
    ADD IF NOT EXISTS PARTITION (year=${year},month=${month},day=${day},hour=${hour})
    location 's3://${PLAYER_LOGS_BUCKET}/cdn_logs/${year}/${month}/${day}/${hour}'`,
    UniqueRequestId: `add-cdnlogs-partitioning-${year}-${month}-${day}-${hour}-${new Date()}`,
  });
  for (let attempt = 0; attempt < 10; attempt++) {
    let result = await getQueryExecution(QueryExecutionId);
    let state = result.QueryExecution.Status.State;
    console.log("CDNLogs.Execution status ",state);
    switch (state) {
      case 'RUNNING':
      case 'QUEUED':
        console.log(
          'query is queued or running, retrying in ',
          Math.pow(2, attempt + 1) * 100,
          'ms',
        );
        await delay(Math.pow(2, attempt + 1) * 100);
        break;
      case 'SUCCEEDED':
        return true;
      case 'FAILED':
        console.log('query failed');
        throw new Error(result.QueryExecution.Status.StateChangeReason);
      case 'CANCELLED':
        console.log('query is cancelled');
        return;
    }
  }
}