From 376cc5d36b0b7b189262aa5a8a8c59ca3a3443b3 Mon Sep 17 00:00:00 2001
From: qixinzhang2601 <420444843@qq.com>
Date: Wed, 22 Jul 2026 16:42:52 +0800
Subject: [PATCH 1/4] docs: align MorphStream with DataSys
---
.github/workflows/maven.yml | 5 +++--
README.md | 38 ++++++++++++++++++++++++++++++++-----
2 files changed, 36 insertions(+), 7 deletions(-)
diff --git a/.github/workflows/maven.yml b/.github/workflows/maven.yml
index 8faf66c1f..28068a954 100644
--- a/.github/workflows/maven.yml
+++ b/.github/workflows/maven.yml
@@ -4,10 +4,11 @@
name: Java CI with Maven
on:
+ workflow_dispatch:
push:
- branches: [ master ]
+ branches: [ main ]
pull_request:
- branches: [ master ]
+ branches: [ main ]
jobs:
build:
diff --git a/README.md b/README.md
index 30ad60036..73b8c8707 100644
--- a/README.md
+++ b/README.md
@@ -2,7 +2,7 @@
# MorphStream
-
+[](https://github.com/DataSysResearch/MorphStream/actions/workflows/maven.yml)
- This project aims at building a scalable transactional stream processing engine on modern hardware. It allows ACID
transactions to be run directly on streaming data. It shares similar project vision with
@@ -11,9 +11,37 @@
processors.
- MorphStream is built based on our previous work of TStream (ICDE'20) but with significant changes: the codebase are
exclusive.
-- The code is still under active development and more features will be introduced. We are also actively maintaining the
- project [wiki](https://github.com/intellistream/MorphStream/wiki). Please checkout it for more detailed desciptions.
-- We welcome your contributions, if you are interested to contribute to the project, please fork and submit a PR.
+- The code is still under active development and more features will be introduced. See the project
+ [wiki](https://github.com/DataSysResearch/MorphStream/wiki) for more detailed descriptions.
+- We welcome contributions through [issues](https://github.com/DataSysResearch/MorphStream/issues) and pull requests.
+
+## Project status
+
+MorphStream is an active research system maintained in the
+[DataSys](https://github.com/DataSysResearch) organization. The automated build uses Maven with JDK 11.
+
+## Quick start
+
+```bash
+git clone https://github.com/DataSysResearch/MorphStream.git
+cd MorphStream
+mvn -B package --file pom.xml
+```
+
+For experiment-specific instructions and design documentation, see the project
+[wiki](https://github.com/DataSysResearch/MorphStream/wiki) and the tagged releases.
+
+## Ecosystem and ownership
+
+MorphStream graduated from [IntelliStream](https://github.com/intellistream) and is maintained by DataSys as a
+framework-neutral transactional stream-processing engine. It can provide data-system capabilities to application and
+workflow systems such as SAGE, while model execution and hardware acceleration remain in the vLLM-HUST layer.
+
+## Contributing and license
+
+Maintainer access is managed by the DataSys organization. Please use GitHub issues for proposals and bug reports, and
+submit code changes through pull requests. MorphStream is licensed under the
+[Apache License 2.0](LICENSE).
## How to Cite MorphStream
@@ -71,7 +99,7 @@ If you use MorphStream in your paper, please cite our work.
bibtex_show = {true},
selected = {true},
pdf = {papers/MorphStream.pdf},
- code = {https://github.com/intellistream/MorphStream},
+ code = {https://github.com/DataSysResearch/MorphStream},
tag = {full paper}
}
@inproceedings{zhang2020towards,
From e098c0cbe321a29bf2b086a603a4faea3ea508ab Mon Sep 17 00:00:00 2001
From: qixinzhang2601 <420444843@qq.com>
Date: Wed, 22 Jul 2026 17:04:44 +0800
Subject: [PATCH 2/4] build: remove duplicate MorphStream module
---
pom.xml | 1 -
1 file changed, 1 deletion(-)
diff --git a/pom.xml b/pom.xml
index 7d12de301..5f06bd17e 100644
--- a/pom.xml
+++ b/pom.xml
@@ -12,7 +12,6 @@
morph-clients
morph-web
morph-common
- morph-common
From bc31d099714953f9d8b205c8b39fda7a0811b59c Mon Sep 17 00:00:00 2001
From: qixinzhang2601 <420444843@qq.com>
Date: Thu, 23 Jul 2026 00:42:01 +0800
Subject: [PATCH 3/4] build: replace JavaFX Pair in RDMA code
---
.../io/Rdma/Msg/RdmaAnnounceRdmaShuffleManagersRpcMsg.java | 2 +-
.../morphstream/common/io/Rdma/Msg/RdmaRpcMsg.java | 5 ++---
.../common/io/Rdma/Msg/RdmaShuffleManagerHelloRpcMsg.java | 2 +-
.../io/Rdma/Shuffle/RW/Read/RdmaShuffleFetcherIterator.java | 4 ++--
.../morphstream/common/io/Rdma/Shuffle/RW/ShuffleWriter.java | 2 +-
.../io/Rdma/Shuffle/RW/Write/RdmaWrapperShuffleWriter.java | 2 +-
6 files changed, 8 insertions(+), 9 deletions(-)
diff --git a/morph-core/src/main/java/intellistream/morphstream/common/io/Rdma/Msg/RdmaAnnounceRdmaShuffleManagersRpcMsg.java b/morph-core/src/main/java/intellistream/morphstream/common/io/Rdma/Msg/RdmaAnnounceRdmaShuffleManagersRpcMsg.java
index baefb4f1f..abc98bed5 100644
--- a/morph-core/src/main/java/intellistream/morphstream/common/io/Rdma/Msg/RdmaAnnounceRdmaShuffleManagersRpcMsg.java
+++ b/morph-core/src/main/java/intellistream/morphstream/common/io/Rdma/Msg/RdmaAnnounceRdmaShuffleManagersRpcMsg.java
@@ -1,7 +1,7 @@
package intellistream.morphstream.common.io.Rdma.Msg;
import intellistream.morphstream.common.io.Rdma.RdmaUtils.Block.RdmaShuffleManagerId;
-import javafx.util.Pair;
+import org.apache.commons.lang3.tuple.Pair;
import java.io.DataInputStream;
import java.io.DataOutputStream;
diff --git a/morph-core/src/main/java/intellistream/morphstream/common/io/Rdma/Msg/RdmaRpcMsg.java b/morph-core/src/main/java/intellistream/morphstream/common/io/Rdma/Msg/RdmaRpcMsg.java
index c0b535723..0ffc29cd7 100644
--- a/morph-core/src/main/java/intellistream/morphstream/common/io/Rdma/Msg/RdmaRpcMsg.java
+++ b/morph-core/src/main/java/intellistream/morphstream/common/io/Rdma/Msg/RdmaRpcMsg.java
@@ -2,7 +2,7 @@
import intellistream.morphstream.common.io.Rdma.ByteBufferBackedInputStream;
import intellistream.morphstream.common.io.Rdma.RdmaByteBufferManagedBuffer;
-import javafx.util.Pair;
+import org.apache.commons.lang3.tuple.Pair;
import java.io.DataInputStream;
import java.io.DataOutputStream;
@@ -38,7 +38,7 @@ default RdmaByteBufferManagedBuffer[] toRdmaByteBufferManagedBuffers(IntFunction
} catch (IOException e) {
// 处理异常
}
- outsList.add(new Pair<>(out, arrSegmentLengths[bufferIndex]));
+ outsList.add(Pair.of(out, arrSegmentLengths[bufferIndex]));
}
Iterator> outs = outsList.iterator();
@@ -66,4 +66,3 @@ enum RdmaRpcMsgType {
}
-
diff --git a/morph-core/src/main/java/intellistream/morphstream/common/io/Rdma/Msg/RdmaShuffleManagerHelloRpcMsg.java b/morph-core/src/main/java/intellistream/morphstream/common/io/Rdma/Msg/RdmaShuffleManagerHelloRpcMsg.java
index ab7ba67af..226ff7926 100644
--- a/morph-core/src/main/java/intellistream/morphstream/common/io/Rdma/Msg/RdmaShuffleManagerHelloRpcMsg.java
+++ b/morph-core/src/main/java/intellistream/morphstream/common/io/Rdma/Msg/RdmaShuffleManagerHelloRpcMsg.java
@@ -1,7 +1,7 @@
package intellistream.morphstream.common.io.Rdma.Msg;
import intellistream.morphstream.common.io.Rdma.RdmaUtils.Block.RdmaShuffleManagerId;
-import javafx.util.Pair;
+import org.apache.commons.lang3.tuple.Pair;
import java.io.DataInputStream;
import java.io.DataOutputStream;
diff --git a/morph-core/src/main/java/intellistream/morphstream/common/io/Rdma/Shuffle/RW/Read/RdmaShuffleFetcherIterator.java b/morph-core/src/main/java/intellistream/morphstream/common/io/Rdma/Shuffle/RW/Read/RdmaShuffleFetcherIterator.java
index b1c3fa8e0..8462a73da 100644
--- a/morph-core/src/main/java/intellistream/morphstream/common/io/Rdma/Shuffle/RW/Read/RdmaShuffleFetcherIterator.java
+++ b/morph-core/src/main/java/intellistream/morphstream/common/io/Rdma/Shuffle/RW/Read/RdmaShuffleFetcherIterator.java
@@ -8,7 +8,7 @@
import intellistream.morphstream.common.io.Rdma.RdmaUtils.Block.RdmaShuffleManagerId;
import intellistream.morphstream.common.io.Rdma.RdmaUtils.Stats.RdmaShuffleReaderStats;
import intellistream.morphstream.common.io.Rdma.Shuffle.RW.Read.Result.FetchResult;
-import javafx.util.Pair;
+import org.apache.commons.lang3.tuple.Pair;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -149,7 +149,7 @@ private void startAsyncRemoteFetches() throws InterruptedException, IOException
}
if (!filteredList.isEmpty()) {
totalRemainingLocations.addAndGet(filteredList.size());
- groupedBlocksByAddress.add(new Pair<>(pair.getKey(), filteredList));
+ groupedBlocksByAddress.add(Pair.of(pair.getKey(), filteredList));
}
}
}
diff --git a/morph-core/src/main/java/intellistream/morphstream/common/io/Rdma/Shuffle/RW/ShuffleWriter.java b/morph-core/src/main/java/intellistream/morphstream/common/io/Rdma/Shuffle/RW/ShuffleWriter.java
index cea351056..cd6aa1369 100644
--- a/morph-core/src/main/java/intellistream/morphstream/common/io/Rdma/Shuffle/RW/ShuffleWriter.java
+++ b/morph-core/src/main/java/intellistream/morphstream/common/io/Rdma/Shuffle/RW/ShuffleWriter.java
@@ -1,6 +1,6 @@
package intellistream.morphstream.common.io.Rdma.Shuffle.RW;
-import javafx.util.Pair;
+import org.apache.commons.lang3.tuple.Pair;
import java.util.Iterator;
diff --git a/morph-core/src/main/java/intellistream/morphstream/common/io/Rdma/Shuffle/RW/Write/RdmaWrapperShuffleWriter.java b/morph-core/src/main/java/intellistream/morphstream/common/io/Rdma/Shuffle/RW/Write/RdmaWrapperShuffleWriter.java
index e55a282bd..f455317d2 100644
--- a/morph-core/src/main/java/intellistream/morphstream/common/io/Rdma/Shuffle/RW/Write/RdmaWrapperShuffleWriter.java
+++ b/morph-core/src/main/java/intellistream/morphstream/common/io/Rdma/Shuffle/RW/Write/RdmaWrapperShuffleWriter.java
@@ -7,7 +7,7 @@
import intellistream.morphstream.common.io.Rdma.Shuffle.Handle.ShuffleDependency;
import intellistream.morphstream.common.io.Rdma.Shuffle.Handle.ShuffleHandle;
import intellistream.morphstream.common.io.Rdma.Shuffle.RW.ShuffleWriter;
-import javafx.util.Pair;
+import org.apache.commons.lang3.tuple.Pair;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
From 4e575bf2d86911bd932839c3ee3bc02505c78260 Mon Sep 17 00:00:00 2001
From: qixinzhang2601 <420444843@qq.com>
Date: Thu, 23 Jul 2026 00:51:28 +0800
Subject: [PATCH 4/4] test: remove machine-specific input paths
---
.../api/input/FileDataGeneratorTest.java | 27 ++++++++++++++++---
.../api/input/InputSourceTest.java | 22 ++++++++++-----
2 files changed, 39 insertions(+), 10 deletions(-)
diff --git a/morph-core/src/test/java/intellistream/morphstream/api/input/FileDataGeneratorTest.java b/morph-core/src/test/java/intellistream/morphstream/api/input/FileDataGeneratorTest.java
index 20721fb6b..d51a86f50 100644
--- a/morph-core/src/test/java/intellistream/morphstream/api/input/FileDataGeneratorTest.java
+++ b/morph-core/src/test/java/intellistream/morphstream/api/input/FileDataGeneratorTest.java
@@ -1,18 +1,37 @@
package intellistream.morphstream.api.input;
import intellistream.morphstream.api.launcher.MorphStreamEnv;
+import intellistream.morphstream.configuration.Configuration;
import junit.framework.TestCase;
import java.io.IOException;
+import java.nio.file.Files;
+import java.nio.file.Path;
public class FileDataGeneratorTest extends TestCase {
public FileDataGeneratorTest() {
super("FileDataGenerator");
}
public void testApp() throws IOException {
- assertTrue(true);
- MorphStreamEnv.get().databaseInitializer().configure_db();
- FileDataGenerator fileDataGenerator = new FileDataGenerator();
- fileDataGenerator.prepareInputData(false);
+ Path temporaryDirectory = Files.createTempDirectory("morphstream-generator-test");
+ Path inputFile = temporaryDirectory.resolve("events.txt");
+ try {
+ Configuration configuration = MorphStreamEnv.get().configuration();
+ configuration.put("rootPath", temporaryDirectory.toString());
+ configuration.put("inputFilePath", inputFile.toString());
+ configuration.put("tthread", 1);
+ configuration.put("checkpoint", 1);
+ configuration.put("totalEvents", 1);
+ configuration.put("table1_num_items", 10);
+ configuration.put("table2_num_items", 10);
+
+ MorphStreamEnv.get().databaseInitializer().configure_db();
+ FileDataGenerator fileDataGenerator = new FileDataGenerator();
+ assertEquals(inputFile.toString(), fileDataGenerator.prepareInputData(false));
+ assertTrue(Files.size(inputFile) > 0);
+ } finally {
+ Files.deleteIfExists(inputFile);
+ Files.deleteIfExists(temporaryDirectory);
+ }
}
}
diff --git a/morph-core/src/test/java/intellistream/morphstream/api/input/InputSourceTest.java b/morph-core/src/test/java/intellistream/morphstream/api/input/InputSourceTest.java
index d24229c6d..07c105226 100644
--- a/morph-core/src/test/java/intellistream/morphstream/api/input/InputSourceTest.java
+++ b/morph-core/src/test/java/intellistream/morphstream/api/input/InputSourceTest.java
@@ -5,8 +5,10 @@
import junit.framework.TestSuite;
import java.io.IOException;
-
-import static org.junit.Assert.assertTrue;
+import java.nio.charset.StandardCharsets;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.util.Collections;
public class InputSourceTest extends TestCase {
public InputSourceTest(String testName) {
@@ -17,10 +19,18 @@ public static Test suite()
return new TestSuite( InputSourceTest.class );
}
public void testApp() throws IOException {
- assertTrue(true);
- InputSource inputSource = new InputSource();
- inputSource.initialize("/Users/curryzjj/hair-loss/MorphStream/Benchmark/inputs/events.txt", InputSource.InputSourceType.FILE_STRING, 4);
- for (int i = 0; i < 100; i++) {
+ Path inputFile = Files.createTempFile("morphstream-input-test", ".txt");
+ try {
+ Files.write(inputFile,
+ Collections.singletonList("table1:1;value:10;value:int;event1;false"),
+ StandardCharsets.UTF_8);
+
+ InputSource inputSource = new InputSource();
+ inputSource.initialize(inputFile.toString(), InputSource.InputSourceType.FILE_STRING, 4);
+ assertEquals(1, inputSource.getInputQueue(0).size());
+ assertEquals("event1", inputSource.getInputQueue(0).peek().getFlag());
+ } finally {
+ Files.deleteIfExists(inputFile);
}
}
}