Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 7 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,13 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0

### ⚠️ Operational migrations

- **The default provider is now Iggy.** The default feature set is
`iggy, encryption, cloudevents, routing`; NATS becomes opt-in via the
`nats` feature. Consumers that relied on the default providing NATS must
add `features = ["nats"]`. Note the known upstream Iggy restart issue
(apache/iggy#4361) before choosing Iggy for production restart-heavy
deployments.

- **NATS durable consumer names are now sanitized.** `EventBus` used to build
consumer names as `{subscriber}-{subject with '.'→'-'}`; subjects also
contain `*` and `>`, which JetStream rejects outright (`error 10103`). The
Expand Down
2 changes: 1 addition & 1 deletion Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ name = "a3s_event"
path = "src/lib.rs"

[features]
default = ["nats", "encryption", "cloudevents", "routing"]
default = ["iggy", "encryption", "cloudevents", "routing"]
nats = ["dep:async-nats", "dep:time", "dep:futures-util"]
iggy = ["dep:iggy", "dep:bytes"]
encryption = ["dep:aes-gcm", "dep:base64"]
Expand Down
8 changes: 4 additions & 4 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -60,8 +60,8 @@ All optional modules are behind feature gates. The minimal core (types, memory p

| Feature | Default | Description |
|---------|---------|-------------|
| `nats` | ✅ | NATS JetStream provider (`async-nats`, `futures-util`, `time`) |
| `iggy` | — | Apache Iggy provider (`iggy`, `bytes`) |
| `iggy` | ✅ | Apache Iggy provider (`iggy`, `bytes`) — the default backend |
| `nats` | — | NATS JetStream provider (`async-nats`, `futures-util`, `time`) |
| `encryption` | ✅ | AES-256-GCM payload encryption (`aes-gcm`, `base64`) |
| `cloudevents` | ✅ | CloudEvents v1.0 conversion (`chrono`) |
| `routing` | ✅ | Broker/Trigger event routing + Sink DLQ |
Expand All @@ -83,8 +83,8 @@ a3s-event = { version = "0.3", default-features = false, features = ["nats", "en
| Provider | Use Case | Persistence | Distribution |
|----------|----------|-------------|--------------|
| `MemoryProvider` | Testing, development, single-process | In-process only | Single process |
| `NatsProvider` | Production, multi-service | JetStream (file/memory) | Distributed |
| `IggyProvider` | Production, multi-service, Rust-native broker | Iggy stream (per-topic log) | Distributed |
| `IggyProvider` | **Default.** Production, multi-service, Rust-native broker | Iggy stream (per-topic log) | Distributed |
| `NatsProvider` | Opt-in (`nats` feature). Production, multi-service | JetStream (file/memory) | Distributed |

### Memory Provider

Expand Down
4 changes: 2 additions & 2 deletions src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -35,8 +35,8 @@
//! ## Providers
//!
//! - **memory** — In-memory provider for testing and single-process use
//! - **nats** — NATS JetStream for distributed, persistent event streaming
//! - **iggy** — Apache Iggy for persistent, distributed event streaming
//! - **iggy** — Apache Iggy (DEFAULT) for persistent, distributed event streaming
//! - **nats** — NATS JetStream, opt-in via the `nats` feature
//!
//! ## Architecture
//!
Expand Down
8 changes: 6 additions & 2 deletions tests/e2e_chaos_resilience.rs
Original file line number Diff line number Diff line change
Expand Up @@ -250,8 +250,12 @@ async fn iggy_personal_access_token_login_flows_end_to_end() {
.with_server_address("127.0.0.1:5102".to_string())
.build()
.unwrap();
if let Err(e) = admin.login_user("iggy", "iggy").await {
eprintln!("Iggy unavailable ({e}), skipping PAT test");
// The raw SDK dial has no built-in bound (the provider wraps its own
// connect in a timeout) — bound it here so a dead server skips instead
// of hanging the default-feature test run.
let login = tokio::time::timeout(Duration::from_secs(5), admin.login_user("iggy", "iggy"));
if let Err(_) | Ok(Err(_)) = login.await {
eprintln!("Iggy unavailable, skipping PAT test");
return;
}
let pat = match admin
Expand Down
Loading