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));

Reply via email to