Skip to content

Commit c17c25e

Browse files
authored
Object Store use over leaf-hub domain (#1160)
1 parent cb123c8 commit c17c25e

File tree

3 files changed

+70
-10
lines changed

3 files changed

+70
-10
lines changed

src/main/java/io/nats/client/impl/NatsObjectStore.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -232,8 +232,7 @@ public ObjectInfo get(String objectName, OutputStream out) throws IOException, J
232232
out.write(data);
233233
}
234234
else {
235-
236-
JetStreamSubscription sub = js.subscribe(pubSubChunkSubject(oi.getNuid()),
235+
JetStreamSubscription sub = js.subscribe(rawChunkSubject(oi.getNuid()),
237236
PushSubscribeOptions.builder().stream(streamName).ordered(true).build());
238237

239238
Message m = sub.nextMessage(Duration.ofSeconds(1));

src/test/java/io/nats/client/impl/ObjectStoreTests.java

Lines changed: 56 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -225,7 +225,7 @@ private ObjectInfo validateObjectInfo(ObjectInfo oi, String bucket, String objec
225225
}
226226

227227
@SuppressWarnings("SameParameterValue")
228-
private static Object[] getInput(int size) throws IOException {
228+
private static Object[] getInput(int size) {
229229
File found = null;
230230
long foundLen = Long.MAX_VALUE;
231231
final String classPath = System.getProperty("java.class.path", ".");
@@ -618,4 +618,59 @@ private void validateWatcher(Object[] expecteds, TestObjectStoreWatcher watcher)
618618
}
619619
}
620620
}
621+
622+
@Test
623+
public void testObjectStoreDomains() throws Exception {
624+
runInJsHubLeaf((hubNc, leafNc) -> {
625+
ObjectStoreManagement hubOsm = hubNc.objectStoreManagement();
626+
627+
// Create main OS on HUB
628+
String hubBucket = bucket();
629+
ObjectStoreStatus hubStatus = hubOsm.create(ObjectStoreConfiguration.builder()
630+
.name(hubBucket)
631+
.storageType(StorageType.Memory)
632+
.replicas(1)
633+
.build());
634+
assertEquals(0, hubStatus.getSize());
635+
assertEquals(1, hubStatus.getReplicas());
636+
637+
ObjectStore hubOs = hubNc.objectStore(hubBucket);
638+
ObjectStore leafOs = leafNc.objectStore(hubBucket, ObjectStoreOptions.builder().jsDomain(HUB_DOMAIN).build());
639+
640+
String objectName = name();
641+
ObjectMeta meta = ObjectMeta.builder(objectName)
642+
.chunkSize(8 * 1024)
643+
.build();
644+
645+
Object[] input = getInput(4 * 8 * 1024);
646+
File file = (File)input[1];
647+
InputStream in = Files.newInputStream(file.toPath());
648+
hubOs.put(meta, in);
649+
650+
hubStatus = hubOs.getStatus();
651+
assertTrue(hubStatus.getSize() > 0);
652+
653+
ObjectStoreStatus leafStatus = leafOs.getStatus();
654+
655+
assertEquals(hubStatus.getBucketName(), leafStatus.getBucketName());
656+
assertEquals(hubStatus.getSize(), leafStatus.getSize());
657+
658+
ObjectInfo hubInfo = hubOs.getInfo(objectName);
659+
ObjectInfo leafInfo = leafOs.getInfo(objectName);
660+
661+
assertEquals(hubInfo.getNuid(), leafInfo.getNuid());
662+
assertEquals(hubInfo.getSize(), leafInfo.getSize());
663+
assertEquals(hubInfo.getObjectMeta().getObjectName(), leafInfo.getObjectMeta().getObjectName());
664+
665+
ByteArrayOutputStream hubOut = new ByteArrayOutputStream();
666+
ByteArrayOutputStream leafOut = new ByteArrayOutputStream();
667+
hubOs.get(objectName, hubOut);
668+
leafOs.get(objectName, leafOut);
669+
670+
byte[] hubBytes = hubOut.toByteArray();
671+
byte[] leafBytes = leafOut.toByteArray();
672+
673+
assertArrayEquals(hubBytes, leafBytes);
674+
});
675+
}
621676
}

src/test/java/io/nats/client/utils/TestBase.java

Lines changed: 13 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -290,19 +290,21 @@ public static void runInJsHubLeaf(TwoServerTest twoServerTest) throws Exception
290290
int leafPort = NatsTestServer.nextPort();
291291

292292
String[] hubInserts = new String[] {
293-
"server_name: HUB",
293+
"server_name: " + HUB_DOMAIN,
294294
"jetstream {",
295-
" domain: HUB",
295+
" store_dir: " + tempJsStoreDir(),
296+
" domain: " + HUB_DOMAIN,
296297
"}",
297298
"leafnodes {",
298299
" listen = 127.0.0.1:" + hubLeafPort,
299300
"}"
300301
};
301302

302303
String[] leafInserts = new String[] {
303-
"server_name: LEAF",
304+
"server_name: " + LEAF_DOMAIN,
304305
"jetstream {",
305-
" domain: LEAF",
306+
" store_dir: " + tempJsStoreDir(),
307+
" domain: " + LEAF_DOMAIN,
306308
"}",
307309
"leafnodes {",
308310
" remotes = [ { url: \"leaf://127.0.0.1:" + hubLeafPort + "\" } ]",
@@ -331,9 +333,9 @@ public static void runInJsCluster(ThreeServerTest threeServerTest) throws Except
331333
int listen1 = NatsTestServer.nextPort();
332334
int listen2 = NatsTestServer.nextPort();
333335
int listen3 = NatsTestServer.nextPort();
334-
String path1 = Files.createTempDirectory(variant()).toString().replace("\\", "\\\\");
335-
String path2 = Files.createTempDirectory(variant()).toString().replace("\\", "\\\\");
336-
String path3 = Files.createTempDirectory(variant()).toString().replace("\\", "\\\\");
336+
String path1 = tempJsStoreDir();
337+
String path2 = tempJsStoreDir();
338+
String path3 = tempJsStoreDir();
337339
String cluster = variant();
338340
String serverPrefix = variant();
339341

@@ -398,6 +400,10 @@ public static void runInJsCluster(ThreeServerTest threeServerTest) throws Except
398400
}
399401
}
400402

403+
private static String tempJsStoreDir() throws IOException {
404+
return Files.createTempDirectory(variant()).toString().replace("\\", "\\\\"); // when on windows this is necessary. unix doesn't have backslash
405+
}
406+
401407
private static void cleanupJs(Connection c)
402408
{
403409
try {

0 commit comments

Comments
 (0)