Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

eqxFc: Location with Long Running Inventory #40

Open
wants to merge 51 commits into
base: master
Choose a base branch
from
Open

Conversation

bartelink
Copy link
Collaborator

@bartelink bartelink commented Nov 29, 2019

The eqxfc template hosts aggregates based on some patterns relevant to Fulfilment Centers. The goal is more to illustrate techniques of unit, integration testing and decoupling than necessarily to represent the exact business logic one might need.

This PR (originally developed in jet/equinox#181) illustrates an approach to deal with long-lived streams without having them actually be infinite, which involves:

  1. a LocationEpoch that maintains a rolling balance
  • each successor deterministically has the balance carried forward written as the first event of the stream
  • there's a Closed event, after which no writers are permitted to write
  1. a LocationSeries aggregate which holds a pointer to verified active epoch (competing readers/writers read this optimistically on a cached basis; in the event that they're behind, they'll compete to log the successful commencement of a new epoch, which cannot happen before the CarriedForward event for the successor epoch has been committed)
  2. an Inventory.Transaction aggregate that fulfills two purposes
  • holds state pertaining to in-flight work
  • the events mark staging points in the flow
  1. a set of coordinated streams: a) InventorySeries b) InventoryEpoch, which are used to (idempotently) record the conclusion of each transfer/adjustment on a global summary stream
  2. an Inventory.Process.Service which is a Process Manager that orchestrates the work involved in the transactions

7. a Watchdog service that listens for stalled transactions, using the Inventory.Process.Service to drive a given flow to a conclusion if it has been determined to be stalled (open for 10s but not completed) /equinox-shipping bears a more complete version than that which existed here; the Drive member will remain here as a placeholder, but there's plenty interesting stuff in here without throwing yet another concept into the mix

See #50 for a simplified edition which removes the LocationSeries and CarriedForward concepts in order to make it easier to inspect the mechanism

@bartelink bartelink force-pushed the master branch 2 times, most recently from fe578fe to d1bd9da Compare December 7, 2019 09:20
@bartelink bartelink force-pushed the add-fc branch 2 times, most recently from 7c606dd to 5d69f03 Compare December 7, 2019 09:25
@bartelink bartelink force-pushed the add-fc branch 2 times, most recently from 32e2cdd to 6b328de Compare December 7, 2019 12:31
@bartelink bartelink force-pushed the add-fc branch 2 times, most recently from b1913ed to 2bb7ee3 Compare January 28, 2020 11:07
@bartelink bartelink changed the title Add Fulfilment Center template Add Inventory management template Jan 28, 2020
@@ -9,6 +9,8 @@ These templates focus solely on Consistent Processing using Equinox Stores:
- [`eqxweb`](equinox-web/README.md) - Boilerplate for an ASP .NET Core 2 Web App, with an associated storage-independent Domain project using [Equinox](https://github.com/jet/equinox).
- [`eqxwebcs`](equinox-web-csharp/README.md) - Boilerplate for an ASP .NET Core 2 Web App, with an associated storage-independent Domain project using [Equinox](https://github.com/jet/equinox), _ported to C#_.
- [`eqxtestbed`](equinox-testbed/README.md) - Host that allows running back-to-back benchmarks when prototyping models using [Equinox](https://github.com/jet/equinox), using different stores and/or store configuration parameters.
<a name="eqxFc"></a>
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Is this HTML anchor tag a side effect from an IDE or something?

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

nope, just so I can link to a section within the readme, i.e. github.com/jet/equinox#eqxfc - changelog.md uses it also to provide an alias thats better than default generated ones

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants