-
Book
- Host this somewhere
-
Remove unused crates.
-
Move TODO list to Issues
-
Task
- async handler/filter
- Task shutdown
- Task message de-serialization
-
RedisStreamSource
- Move to key
-
Handle Actix Errors
- TopologyService
- TopologySession
- TopologyActor
- SourceActor
- PipelineActor
- TaskService
- TaskActor
-
Health checks and backoffs aren't well defined
-
TopologyActor Mailbox capacity is unlimited (should it be?)
- Topology needs a max_pending count for tracking inflight counts
- Topology can just adjust the source.poll if this value is reached
- Topology needs a max_pending count for tracking inflight counts
-
Define what it means to be unhealthy and how to deal with it.
source.healthy()
should return a boolean- N number of unheatlhy responses should shutdown the Topology
-
-
Pipeline inflight sweeper We might need a periodic sweeper to evict stale messages For example: if a task requests a message and it dies before returning it, that message will be stuck inflight and will eventually lead to memory leaks
- Metrics Backend: Graphite (skip for now)
- Deadletter Option: This is just a different "SourceBuilder" that does a push instead of a poll?
- Cleanup all TODO's
- Cleanup all shit code
- Add more examples
- Add RedisListSource
- Aggregate metrics tmp file configuration
- Kafka Source
- AMQP Source
- Task workers
- Define what this means and how we start them
- Task connection retries/back off
- Unit tests
- More code coverage
- List available source crates
- Create project/topology
-
PipelineActor TaskRequest should route through TopologyActor and then into PipelineActor. This change will start to centralize a place where we can record stats -> TopologySession -> TopologyActor -> PipelineActor
-
Refactor mega topology into sensible modules
-
Example topology so we can run multiple tasks as thread pools for testing
-
Source acking - [x] Batch msgs - [x] Individual msgs
-
SourceRedisStream acking: - [x] Batch msgs - [x] Individual msgs
-
Need to define a TaskError as being what we return from TaskResult
-
Rework source polling to use run_once w/ backoff vs using run_interval w/ backoff + time checks
-
Tempest Project: https://github.com/grippy/tempest_project
- skeleton
- build.rs
- Topology.toml
-
Tempest Project: https://github.com/grippy/tempest_project
- skeleton
- build.rs
- Topology.toml
-
Create git repo: https://github.com/grippy/tempest
-
Standalone server which spawns threads for each TaskService and TopologyService
-
Source
- Ack interval
-
Package Cli
- Task
- Topology
- Standalone
- Config from Topology.toml
- merges config options for topology, source, and task name
-
Logging facilities
-
Metrics Add metrics for all io and data moving through the system. Ideally, we'd have some type of uber actor responsible for aggregating stats sent to it from each backend target
- [x] MetricsBackendActor (uber actor) - [x] Topology.toml configuration - [x] TopologyOption configuration - [x] Backend - [x] Flush/probe interval - [x] Timer & Histogram - [x] Statsd - [x] File
-
Pipeline
- Pipeline edge shouldn't allow the same task name as left and right
- prevent task cycles
- check for root task name
- check for task name exists for edges
-
Replace metric::ROOT lazy_static! w/ thread_local!
-
TopologyFailurePolicy
- None,
- BestEffort
- Retry(count)
- TopologyRetry mechanism (crude)
-
Topology Timeouts & Errors (for each TopologyFailurePolicy)
- PipelineMsg::Timeout
- PipelineMsg::Error
-
Runtime: Test - [x] MetricAggregatorActor - [x] TestRun builder - [x] Write/read AggregatedMetrics to tmp/ - [x] Implement shutdown - [x] SIGTERM: Graceful + delay - [x] SIGINT: Ctrl+C
-
Tasks
- Where do outflow messages end up if there are no more tasks?
- We drop them
- Task filter
- Task metrics
- Add flush_metrics so tasks can use Metrics
- Where do outflow messages end up if there are no more tasks?
-
Circle CI configuration
-
Docker container for running tests?
- Rust
- Redis
-
Multi-threaded cargo tests
- Add suffix to /tmp/aggregate-metrics to avoid it being overwritten
-
RedisStreamSource
- Pending handlers:
- Ack
- Claim
- Delete
- Configure prime test messages
- Pending handlers:
-
Tests: Topology Errors
- BestEffort
- Retry
- None
-
Remove these statements
- #![allow(dead_code)]
- #![allow(unused_imports)]
- #![allow(unused_variables)]
-
Only make things pub where absolutely necessary
- determine what should be pub, pub(crate), private
-
Publish
redis-streams-rs
on crates.io -
Publish
tempest
on crates.io -
Publish
tempest-source-mock
on crates.io -
Publish
tempest-source-redis
on crates.io -
Source trait should be moved to it's own package. Currently, source implementations must have tempest as a dependency (which pulls in a lot of dependencies).
-
Documentation
- All code
- Book rough draft
- Build script and replace TEMPEST_VERSION & TEMPEST_SOURCE_VERSION
- Move metrics to two packages:
Can't do this since both packages reference each other
metric/mod.rs pulls the backend actor in the flush command
- tempest-metrics: metrics/mod.rs
- tempest-metrics-backend: All actix + backend code