Skip to content

[lerna-util-sequence] リセット時に 1 つ多く採番値が予約される #66

@negokaz

Description

@negokaz

きっかけになった議論#57 (comment)

採番値をいくつ確保するのかは SequenceStore.ResetReserveSequencereservationAmount で指定されますが、現行の実装ではリセット時に 1 つ多く採番値が予約されてしまいます。

例えば、初項(firstValue)が 1 で、公差(incrementStep)が 1 の場合、reservationAmount10 のときは maxReservedValue10 で予約される必要がありますが(1~10を採番できるように)、現行の実装では maxReservedValue11 になります。firstValue そのものも採番できる値であるという考慮が不足していたのではないかと予想します。

  private[this] def reset(
      firstValue: BigInt,
      reservationAmount: BigInt,
      sequenceSubId: Option[String],
  )(implicit sessionContext: SessionContext): Future[SequenceReset] = {
    reserve(maxReservedValue = firstValue, reservationAmount, sequenceSubId)
      .map(r => SequenceReset(r.maxReservedValue))
  }

lerna-app-library/SequenceStore.scala at v2.0.0 · lerna-stack/lerna-app-library

  private[this] def reserve(
      maxReservedValue: BigInt,
      reservationAmount: BigInt,
      sequenceSubId: Option[String],
  )(implicit sessionContext: SessionContext): Future[SequenceReserved] = {
    writeReservation(
      newMaxReservedValue = maxReservedValue + (incrementStep * reservationAmount),
      sequenceSubId = sequenceSubId,
    )
  }

lerna-app-library/SequenceStore.scala at v2.0.0 · lerna-stack/lerna-app-library

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Type

    No type

    Projects

    No projects

    Milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions