async checkRestoreStatus()

in source/ingest/lib/s3restore/index.js [42:84]


  async checkRestoreStatus() {
    const src = (this.stateData.input || {}).src || {};
    if (!src.bucket || !src.key) {
      throw new RestoreError('mising src.bucket or key');
    }

    const response = await CommonUtils.headObject(src.bucket, src.key);
    const restoreData = S3Restore.parseKeyValuePair(response.Restore);

    /* "Restore": "ongoing-request=\"true\"" */
    const expiredAt = restoreData[S3Restore.Constants.Key.ExpiryDate]
      ? new Date(restoreData[S3Restore.Constants.Key.ExpiryDate]).getTime()
      : undefined;

    const storageClass = response.StorageClass;

    const startTime
      = ((this.stateData.input || {}).restore || {}).startTime || new Date().getTime();

    if (storageClass !== 'GLACIER' && storageClass !== 'DEEP_ARCHIVE') {
      this.stateData.setCompleted();
    } else if (restoreData[S3Restore.Constants.Key.OngoingRequest] === 'false') {
      this.stateData.setCompleted();
    } else if (!response.Restore) {
      await this.startRestore();
      this.stateData.setStarted();
    } else {
      this.stateData.setProgress(this.computeRetrivalProgress(startTime, storageClass));
    }

    const endTime = (this.stateData.status === StateData.Statuses.Completed)
      ? new Date().getTime()
      : undefined;

    this.stateData.setData('restore', {
      storageClass,
      expiredAt,
      startTime,
      endTime,
    });

    return this.stateData.toJSON();
  }