This is an automated email from the ASF dual-hosted git repository.
kezhuw pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/zookeeper.git
The following commit(s) were added to refs/heads/master by this push:
new bbcdbab10 ZOOKEEPER-842: Generate jute method `copyFrom` to decouple
`ZooKeeper` from `DataTree`
bbcdbab10 is described below
commit bbcdbab1065fd02f2516a19387b28c07dd31b4bd
Author: Kezhu Wang <[email protected]>
AuthorDate: Sat Aug 23 13:59:20 2025 +0800
ZOOKEEPER-842: Generate jute method `copyFrom` to decouple `ZooKeeper` from
`DataTree`
ZOOKEEPER-842: Generate jute method `copyFrom` to decouple `ZooKeeper` from
`DataTree`
Currently, `ZooKeeper` uses `DataTree::copyStat` to copy `Stat` from one
to another. This couples client side `ZooKeeper` to server side
`DataTree`.
By using generated `copyFrom`, we decouple `ZooKeeper` from server side
codes.
This is a small step towards ZOOKEEPER-233.
Refs: ZOOKEEPER-233, ZOOKEEPER-835, ZOOKEEPER-1275 and ZOOKEEPER-842.
Reviewers: tisonkun
Author: kezhuw
Closes #2305 from kezhuw/ZOOKEEPER-842-drop-client-dependency-on-DataTree
---
.../java/org/apache/jute/compiler/JRecord.java | 10 ++++++++
.../main/java/org/apache/zookeeper/ZooKeeper.java | 11 ++++-----
.../org/apache/zookeeper/admin/ZooKeeperAdmin.java | 3 +--
.../java/org/apache/zookeeper/server/DataTree.java | 28 +---------------------
.../apache/zookeeper/server/ZooKeeperServer.java | 2 +-
5 files changed, 18 insertions(+), 36 deletions(-)
diff --git a/zookeeper-jute/src/main/java/org/apache/jute/compiler/JRecord.java
b/zookeeper-jute/src/main/java/org/apache/jute/compiler/JRecord.java
index 76ebc1731..1fb90d55a 100644
--- a/zookeeper-jute/src/main/java/org/apache/jute/compiler/JRecord.java
+++ b/zookeeper-jute/src/main/java/org/apache/jute/compiler/JRecord.java
@@ -491,6 +491,16 @@ public void genJavaCode(File outputDirectory) throws
IOException {
JField jf = i.next();
jj.write(jf.genJavaGetSet(fIdx));
}
+
+ jj.write("\n");
+ jj.write(" public void copyFrom(" + getName() + " from) {\n");
+ fIdx = 0;
+ for (Iterator<JField> i = mFields.iterator(); i.hasNext(); fIdx++)
{
+ JField jf = i.next();
+ jj.write(" " + jf.getName() + " = from." + jf.getName() +
";\n");
+ }
+ jj.write(" }\n");
+
jj.write(" public void serialize(OutputArchive a_, String tag)
throws java.io.IOException {\n");
jj.write(" a_.startRecord(this,tag);\n");
fIdx = 0;
diff --git a/zookeeper-server/src/main/java/org/apache/zookeeper/ZooKeeper.java
b/zookeeper-server/src/main/java/org/apache/zookeeper/ZooKeeper.java
index 216e497ad..8831c0622 100644
--- a/zookeeper-server/src/main/java/org/apache/zookeeper/ZooKeeper.java
+++ b/zookeeper-server/src/main/java/org/apache/zookeeper/ZooKeeper.java
@@ -86,7 +86,6 @@
import org.apache.zookeeper.proto.SyncRequest;
import org.apache.zookeeper.proto.SyncResponse;
import org.apache.zookeeper.proto.WhoAmIResponse;
-import org.apache.zookeeper.server.DataTree;
import org.apache.zookeeper.server.EphemeralType;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -1539,7 +1538,7 @@ public String create(
throw KeeperException.create(KeeperException.Code.get(r.getErr()),
clientPath);
}
if (stat != null) {
- DataTree.copyStat(response.getStat(), stat);
+ stat.copyFrom(response.getStat());
}
return chroot.strip(response.getPath());
}
@@ -2056,7 +2055,7 @@ public byte[] getData(final String path, Watcher watcher,
Stat stat) throws Keep
throw KeeperException.create(KeeperException.Code.get(r.getErr()),
clientPath);
}
if (stat != null) {
- DataTree.copyStat(response.getStat(), stat);
+ stat.copyFrom(response.getStat());
}
return response.getData();
}
@@ -2157,7 +2156,7 @@ public byte[] getConfig(Watcher watcher, Stat stat)
throws KeeperException, Inte
throw KeeperException.create(KeeperException.Code.get(r.getErr()),
configZnode);
}
if (stat != null) {
- DataTree.copyStat(response.getStat(), stat);
+ stat.copyFrom(response.getStat());
}
return response.getData();
}
@@ -2319,7 +2318,7 @@ public List<ACL> getACL(final String path, Stat stat)
throws KeeperException, In
throw KeeperException.create(KeeperException.Code.get(r.getErr()),
clientPath);
}
if (stat != null) {
- DataTree.copyStat(response.getStat(), stat);
+ stat.copyFrom(response.getStat());
}
return response.getAcl();
}
@@ -2563,7 +2562,7 @@ public List<String> getChildren(
throw KeeperException.create(KeeperException.Code.get(r.getErr()),
clientPath);
}
if (stat != null) {
- DataTree.copyStat(response.getStat(), stat);
+ stat.copyFrom(response.getStat());
}
return response.getChildren();
}
diff --git
a/zookeeper-server/src/main/java/org/apache/zookeeper/admin/ZooKeeperAdmin.java
b/zookeeper-server/src/main/java/org/apache/zookeeper/admin/ZooKeeperAdmin.java
index 4d5dc6fd2..75d088d4d 100644
---
a/zookeeper-server/src/main/java/org/apache/zookeeper/admin/ZooKeeperAdmin.java
+++
b/zookeeper-server/src/main/java/org/apache/zookeeper/admin/ZooKeeperAdmin.java
@@ -34,7 +34,6 @@
import org.apache.zookeeper.proto.ReconfigRequest;
import org.apache.zookeeper.proto.ReplyHeader;
import org.apache.zookeeper.proto.RequestHeader;
-import org.apache.zookeeper.server.DataTree;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -252,7 +251,7 @@ public byte[] reconfigure(
throw KeeperException.create(KeeperException.Code.get(r.getErr()),
"");
}
if (stat != null) {
- DataTree.copyStat(response.getStat(), stat);
+ stat.copyFrom(response.getStat());
}
return response.getData();
}
diff --git
a/zookeeper-server/src/main/java/org/apache/zookeeper/server/DataTree.java
b/zookeeper-server/src/main/java/org/apache/zookeeper/server/DataTree.java
index d017427a4..b682ec64f 100644
--- a/zookeeper-server/src/main/java/org/apache/zookeeper/server/DataTree.java
+++ b/zookeeper-server/src/main/java/org/apache/zookeeper/server/DataTree.java
@@ -342,32 +342,6 @@ boolean isSpecialPath(String path) {
|| configZookeeper.equals(path);
}
- public static void copyStatPersisted(StatPersisted from, StatPersisted to)
{
- to.setAversion(from.getAversion());
- to.setCtime(from.getCtime());
- to.setCversion(from.getCversion());
- to.setCzxid(from.getCzxid());
- to.setMtime(from.getMtime());
- to.setMzxid(from.getMzxid());
- to.setPzxid(from.getPzxid());
- to.setVersion(from.getVersion());
- to.setEphemeralOwner(from.getEphemeralOwner());
- }
-
- public static void copyStat(Stat from, Stat to) {
- to.setAversion(from.getAversion());
- to.setCtime(from.getCtime());
- to.setCversion(from.getCversion());
- to.setCzxid(from.getCzxid());
- to.setMtime(from.getMtime());
- to.setMzxid(from.getMzxid());
- to.setPzxid(from.getPzxid());
- to.setVersion(from.getVersion());
- to.setEphemeralOwner(from.getEphemeralOwner());
- to.setDataLength(from.getDataLength());
- to.setNumChildren(from.getNumChildren());
- }
-
/**
* update the count/bytes of this stat data node
*
@@ -1305,7 +1279,7 @@ void serializeNode(OutputArchive oa, StringBuilder path)
throws IOException {
DataNode nodeCopy;
synchronized (node) {
StatPersisted statCopy = new StatPersisted();
- copyStatPersisted(node.stat, statCopy);
+ statCopy.copyFrom(node.stat);
//we do not need to make a copy of node.data because the contents
//are never changed
nodeCopy = new DataNode(node.data, node.acl, statCopy);
diff --git
a/zookeeper-server/src/main/java/org/apache/zookeeper/server/ZooKeeperServer.java
b/zookeeper-server/src/main/java/org/apache/zookeeper/server/ZooKeeperServer.java
index 11ec1fb74..080f4f863 100644
---
a/zookeeper-server/src/main/java/org/apache/zookeeper/server/ZooKeeperServer.java
+++
b/zookeeper-server/src/main/java/org/apache/zookeeper/server/ZooKeeperServer.java
@@ -1064,7 +1064,7 @@ static class ChangeRecord {
ChangeRecord duplicate(long zxid) {
StatPersisted stat = new StatPersisted();
if (this.stat != null) {
- DataTree.copyStatPersisted(this.stat, stat);
+ stat.copyFrom(this.stat);
}
ChangeRecord changeRecord = new ChangeRecord(zxid, path, stat,
childCount,
acl == null ? new ArrayList<>() : new ArrayList<>(acl));