Skip to content

Commit 54bc755

Browse files
committed
feat(jsapi): add PersistMode and type definitions for stream persistence options
- Introduced `PersistMode` enum with `Default` and `Async` options for configuring stream persistence. - Added `persist_mode` property to stream configurations for flexibility in persistence model settings. Signed-off-by: Alberto Ricart <[email protected]>
1 parent df5320b commit 54bc755

File tree

2 files changed

+45
-1
lines changed

2 files changed

+45
-1
lines changed

jetstream/src/internal_mod.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -179,6 +179,7 @@ export {
179179
AckPolicy,
180180
DeliverPolicy,
181181
DiscardPolicy,
182+
PersistMode,
182183
PubHeaders,
183184
ReplayPolicy,
184185
RetentionPolicy,

jetstream/tests/streams_test.ts

Lines changed: 44 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,12 @@ import {
1919
notCompatible,
2020
setup,
2121
} from "test_helpers";
22-
import { AckPolicy, jetstream, jetstreamManager } from "../src/mod.ts";
22+
import {
23+
AckPolicy,
24+
jetstream,
25+
jetstreamManager,
26+
PersistMode,
27+
} from "../src/mod.ts";
2328

2429
import { assertEquals, assertExists, assertRejects } from "@std/assert";
2530
import { initStream } from "./jstest_util.ts";
@@ -167,3 +172,41 @@ Deno.test("streams - first_seq fails if wrong server", async () => {
167172

168173
await cleanup(ns, nc);
169174
});
175+
176+
Deno.test("streams - persist mode", async () => {
177+
const { ns, nc } = await setup(jetstreamServerConf({}));
178+
if (await notCompatible(ns, nc, "2.12.0")) {
179+
return;
180+
}
181+
182+
const jsm = await jetstreamManager(nc);
183+
184+
let si = await jsm.streams.add({
185+
name: "A",
186+
subjects: ["a"],
187+
persist_mode: PersistMode.Default,
188+
});
189+
assertEquals(si.config.persist_mode, undefined);
190+
let md = si.config.metadata || {};
191+
assertEquals(md["_nats.req.level"], "0");
192+
193+
si = await jsm.streams.add({
194+
name: "B",
195+
subjects: ["b"],
196+
persist_mode: PersistMode.Async,
197+
});
198+
assertEquals(si.config.persist_mode, PersistMode.Async);
199+
md = si.config.metadata || {};
200+
assertEquals(md["_nats.req.level"], "2");
201+
202+
await assertRejects(
203+
() => {
204+
// @ts-expect-error: testing server rejection
205+
return jsm.streams.update("B", { persist_mode: PersistMode.Default });
206+
},
207+
Error,
208+
"can not change persist mode",
209+
);
210+
211+
await cleanup(ns, nc);
212+
});

0 commit comments

Comments
 (0)