This is an automated email from the ASF dual-hosted git repository. kezhuw pushed a commit to branch branch-3.9 in repository https://gitbox.apache.org/repos/asf/zookeeper.git
commit 650752a2ef941fde6b872c4f4424550413faaeb5 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` 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 (cherry picked from commit bbcdbab1065fd02f2516a19387b28c07dd31b4bd) --- .../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 c26e24910..467e53577 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 @@ -465,6 +465,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 551e4602d..07a4a12fa 100644 --- a/zookeeper-server/src/main/java/org/apache/zookeeper/ZooKeeper.java +++ b/zookeeper-server/src/main/java/org/apache/zookeeper/ZooKeeper.java @@ -82,7 +82,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; @@ -1450,7 +1449,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()); } if (cnxn.chrootPath == null) { return response.getPath(); @@ -1972,7 +1971,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(); } @@ -2074,7 +2073,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(); } @@ -2236,7 +2235,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(); } @@ -2480,7 +2479,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 8240526a5..f60529aa2 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 @@ -33,7 +33,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; @@ -246,7 +245,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 af937f834..57510ddad 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 * @@ -1307,7 +1281,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 114e7afc2..c6d4a1975 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));
