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

Reply via email to