public break()

in src/blob/lease/LeaseLeasedState.ts [131:220]


  public break(breakPeriod?: number): ILeaseState {
    if (this.lease.leaseDurationType === LeaseDurationType.Infinite) {
      if (breakPeriod === 0 || breakPeriod === undefined) {
        return new LeaseBrokenState(
          {
            leaseId: this.lease.leaseId,
            leaseState: LeaseStateType.Broken,
            leaseStatus: LeaseStatusType.Unlocked,
            leaseDurationType: undefined,
            leaseDurationSeconds: undefined,
            leaseExpireTime: undefined,
            leaseBreakTime: undefined
          },
          this.context
        );
      } else {
        return new LeaseBreakingState(
          {
            leaseId: this.lease.leaseId,
            leaseState: LeaseStateType.Breaking,
            leaseStatus: LeaseStatusType.Locked,
            leaseDurationType: undefined,
            leaseDurationSeconds: undefined,
            leaseExpireTime: undefined,
            leaseBreakTime: new Date(
              this.context.startTime!.getTime() + breakPeriod * 1000
            )
          },
          this.context
        );
      }
    }

    // Following only cares about this.lease.leaseDurationType === LeaseDurationType.Fixed

    if (breakPeriod === 0) {
      return new LeaseBrokenState(
        {
          leaseId: this.lease.leaseId,
          leaseState: LeaseStateType.Broken,
          leaseStatus: LeaseStatusType.Unlocked,
          leaseDurationType: undefined,
          leaseDurationSeconds: undefined,
          leaseExpireTime: undefined,
          leaseBreakTime: undefined
        },
        this.context
      );
    }

    if (breakPeriod === undefined) {
      return new LeaseBreakingState(
        {
          leaseId: this.lease.leaseId,
          leaseState: LeaseStateType.Breaking,
          leaseStatus: LeaseStatusType.Locked,
          leaseDurationType: undefined,
          leaseDurationSeconds: undefined,
          leaseExpireTime: undefined,
          leaseBreakTime: this.lease.leaseExpireTime
        },
        this.context
      );
    }

    if (breakPeriod < 0 || breakPeriod > 60) {
      throw StorageErrorFactory.getInvalidLeaseBreakPeriod(
        this.context.contextId
      );
    }

    // Following only cares about breakPeriod between (0, 60]

    const breakTime = new Date(
      this.context.startTime!.getTime() + breakPeriod * 1000
    );

    return new LeaseBreakingState(
      {
        leaseId: this.lease.leaseId,
        leaseState: LeaseStateType.Breaking,
        leaseStatus: LeaseStatusType.Locked,
        leaseDurationType: undefined,
        leaseDurationSeconds: undefined,
        leaseExpireTime: undefined,
        leaseBreakTime: minDate(this.lease.leaseExpireTime!, breakTime)
      },
      this.context
    );
  }