Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

...

...

...

...

Max backoff / Next Poll interval / Next Step

  • None: no downstream polling will happen

  • Time: add time period to now to calculate “Check Due Time” (not called that in code) when the next check should happen

...

Config: Polling interval : how often to check generally, and then only check those things that have passed a Check Due Time

Table of Contents
minLevel1
maxLevel6
outlinefalse
typelist
separatorbrackets
printabletrue

Overview

When a patron places a Direct Consortial Borrowing request it goes through some initial [[preflight checks]] to make sure there isn’t anything immediately fatal that will prevent the request from being fulfillled.

If those checks are passed, the request is not accepted by DCB and the patron’s requesting system is notified so that the patron can be informed.

Once those checks are received, the request is stored with DCB and then goes through a largely deterministic sequence:

  1. Preliminary States - ensure we have good data to propagate requests in downstream systems

    1. SUBMITTED_TO_DCB

    2. PATRON_VERIFIED

    3. RESOLVED

  2. Circulation Tracking - to track and synchronise downstream systems

    1. REQUEST_PLACED_AT_SUPPLYING_AGENCY

    2. CONFIRMED

    3. REQUEST_PLACED_AT_BORROWING_AGENCY

    4. PICKUP_TRANSIT

    5. RECEIVED_AT_PICKUP

    6. READY_FOR_PICKUP

    7. LOANED

    8. RETURN_TRANSIT

  3. Finishing States - to terminate and clean up traces of finished requests where possible

    1. Preliminary Finishing

      1. NOT_SUPPLIED_CURRENT_SUPPLIER

      2. NO_ITEMS_AVAILABLE_AT_ANY_AGENCY → NO_ITEMS_SELECTABLE_AT_ANY_AGENCY

    2. Circulation Finishing

      1. CANCELLED

    3. Happy Path Finishing

      1. COMPLETED

      2. FINALISED

    4. Unexpected Termination

      1. ERROR

Preliminary States

The initial sequence of states that a request goes through to verify a patron’s identity and resolve to an selectable item.

  • Until it completes this deterministic sequence, the request only exists in DCB and not in downstream systems.

  • There is no polling in these states.

DCB STATE

Max backoff / Next Poll interval / Next Step

DEV / TEST

Max backoff / Next Poll interval / Next Step

LIVE

What tracking for next step in 2l process

What tracking for next step in 3l process

SUBMITTED_TO_DCB

None

None

Auto Triggers ValidatePatronTransition

Moves us to PATRON_VERIFIED

PATRON_VERIFIED

None

None

Auto Triggers PatronRequestResolutionStateTransition

Moves us to RESOLVED

RESOLVED

None

None

Auto Triggers PlacePatronRequestAtSupplyingAgencyStateTransition

Moves us to REQUEST_PLACED_AT_SUPPLYING_AGENCY

NOT_SUPPLIED_CURRENT_SUPPLIER

NA

NA

Re-Request Scenario

NO_ITEMS_AVAILABLE_AT_ANY_AGENCY

None

None

TERMINAL STATE (For now)

Circulation States

When a request has gone through preliminary verification and resolution states DCB attempts to place, update and track its progress in downstream systems.

  • Once the initial circulation state is entered, polling is triggered to handle state transitions based on the criteria defined

  • A request is expected to transition through each state in the given circulation sequence

    • this is the “happy path”

  • In rare scenarios, DCB may not always pick up all state transitions, depending on downstream system processing and polling intervals

    • in this case the request is flagged as out of sequence

    • this is not always fatal for a request - and they are often picked up again when they are in RETURN TRANSIT, the loan to patron having been skipped by DCB

DCB STATE

Max backoff / Next Poll interval / Next Step

DEV / TEST

Max backoff / Next Poll interval / Next Step

LIVE

What tracking for next step in 2l process

What tracking for next step in 3l process

REQUEST_PLACED_AT_SUPPLYING_AGENCY

10ms

10ms

wait for SupplierRequest= CONFIRMED | TRANSIT → HandleSupplierRequestConfirmed

Moves us into the CONFIRMED state

CONFIRMED

None

10m

None

10m

Auto Triggers

PlacePatronRequestAtBorrowingAgencyStateTransition

Moves us to REQUEST_PLACED_AT_BORROWING_AGENCY

REQUEST_PLACED_AT_BORROWING_AGENCY

10m

1h

wait for SupplyingItem State = TRANSIT ->

HandleSupplierInTransit

Moves us to PICKUP_TRANSIT

PICKUP_TRANSIT

10m

1h

wait for BorrowingItem = RECEIVED | LOANED | ON_HOLD_SHELF Then

HandleBorrowerItemReceived moves us to RECEIVED_AT_PICKUP

RECEIVED_AT_PICKUP

10m

1h

wait for BorrowingItem = ON_HOLD_SHELF | LOANED

Then

HandleBorrowerItemOnHoldShelf moves us to READY_FOR_PICKUP

READY_FOR_PICKUP

10m

1h

wait for BorrowingItem = LOANED Then

HandleBorrowerItemLoaned moves us to LOANED

LOANED

10m

6h

wait for BorrowingItem = AVAILABLE | TRANSIT OR SupplierItem=AVAILABLE | SupplierRequest=CLOSED Then

HandleBorrowerRequestReturnTransit moves us to RETURN_TRANSIT

N.b. CLOSED==FOLIO Specific

N.b. Additional check needed here - item loaned other

RETURN_TRANSIT

10m

1h

SupplierItem = AVAILABLE | SupplierRequest=CLOSED Then

HandleSupplierItemAvailable moves us to COMPLETED

N.b. CLOSED==FOLIO Specific

N.b. Additional check needed here - item loaned other

Finishing States

When a request completes its cycle, or if it terminates prematurely, it enters a finishing state.

  • In most cases this indicates the end of the request, resulting in a finishing sequence

    • in the future, NOT_SUPPLIED_CURRENT_SUPPLIER will trigger a re-request

  • The finishing sequence may or may not involve clean up of virtual records, depending on whether the request

DCB STATE

Max backoff / Next Poll interval / Next Step

DEV / TEST

Max backoff / Next Poll interval / Next Step

LIVE

What tracking for next step in 2l process

What tracking for next step in 3l process

Preliminary Finishing (follows a preliminary state before a request enters tracked circulation)

NOT_SUPPLIED_CURRENT_SUPPLIER

None

None

DCB-1230:

Auto Triggers: ResolveNextSupplierTransition

Moves us to NO_ITEMS_SELECTABLE_AT_ANY_AGENCY

NO_ITEMS_SELECTABLE_AT_ANY_AGENCY

None

None

TERMINAL STATE (For now)

Circulation Finishing (interrupts tracked circulation, and is typically manually instigated)

CANCELLED

None

None

DCB-1289:

Auto Triggers: FinaliseRequestTransition

moves us to FINALISED

Happy Path Finishing (follows directly after the end of tracked circulation)

COMPLETED

None

None

Auto Triggers: FinaliseCompletedRequestTransitionFinaliseRequestTransition

moves us to FINALISED

FINALISED

None

None

TERMINAL STATE

TERMINAL STATE

Unexpected Termination (can happen at any stage)

ERROR

None

None

TERMINAL STATE

TERMINAL STATE

Explanatory Notes

  • Max backoff / Next Poll interval / Next Step (see table below)

    • None: no downstream polling will happen

    • Time: add time period to now to calculate “Check Due Time” (not called that in code) when the next check should happen

  • Polling interval : (configured at an environment level in dcb-service config):

    • indicates how often to trigger a polling cycle generally, and then within each cycle, only check those items with states that have passed a Check Due Time

  • Force check update: check now regardless of Check Due Time

Changes

  • https://github.com/openlibraryenvironment/dcb-service/commit/fd9aa6e3a2016afec703820559c5220aa46c39b2

    • Reduced from 60s to 10ms rather than as 0s appears to be treated as effectively terminating.

  • Jira Legacy
    serverSystem Jira
    serverIda6f93653-ee50-3e81-88ad-29eb84ada35c
    keyDCB-1243

  • DCB-1289 Generalise transition to FINALISE and apply to CANCELLED to extend cleanup

  • Jira Legacy
    serverSystem Jira
    serverIda6f93653-ee50-3e81-88ad-29eb84ada35c
    keyDCB-1230

  • Default to production interval timings

  • Roll back

    Jira Legacy
    serverSystem Jira
    serverIda6f93653-ee50-3e81-88ad-29eb84ada35c
    keyDCB-1517

  • DCB-1102 Rename NO_ITEMS_AVAILABLE_AT_ANY_AGENCY to NO_ITEMS_SELECTABLE_AT_ANY_AGENCY

  • Status
    colourPurple
    titleDATE TBC
    DCB-1786 Add supplier renewal