You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@zookeeper.apache.org by ke...@apache.org on 2025/09/30 14:38:44 UTC
(zookeeper) branch branch-3.9 updated (ae4933b0e -> 9a4d61e12)
This is an automated email from the ASF dual-hosted git repository.
kezhuw pushed a change to branch branch-3.9
in repository https://gitbox.apache.org/repos/asf/zookeeper.git
from ae4933b0e ZOOKEEPER-4962: Export bound client port for ZooKeeperServerEmbedded
new 650752a2e ZOOKEEPER-842: Generate jute method `copyFrom` to decouple `ZooKeeper` from `DataTree`
new 9a4d61e12 ZOOKEEPER-842: [ADDENDUM] Keep `DataTree::copyStat` for compatibility with Apache Curator
The 2 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails. The revisions
listed as "add" were already present in the repository and have only
been added to this reference.
Summary of changes:
.../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 | 36 +++++++++-------------
.../apache/zookeeper/server/ZooKeeperServer.java | 2 +-
5 files changed, 32 insertions(+), 30 deletions(-)
(zookeeper) 01/02: ZOOKEEPER-842: Generate jute method `copyFrom` to decouple `ZooKeeper` from `DataTree`
Posted by ke...@apache.org.
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 <ke...@apache.org>
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));
(zookeeper) 02/02: ZOOKEEPER-842: [ADDENDUM] Keep `DataTree::copyStat` for compatibility with Apache Curator
Posted by ke...@apache.org.
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 9a4d61e12a85d9d1c7f415c7dd46252a301d7163
Author: Kezhu Wang <ke...@apache.org>
AuthorDate: Wed Aug 27 11:46:16 2025 +0800
ZOOKEEPER-842: [ADDENDUM] Keep `DataTree::copyStat` for compatibility with Apache Curator
`DataTree` is apparently internal to zookeeper. But we don't export
public alternatives to `copyStat` and `copyStatPersisted` until now.
So, let's keep them for some releases to let downstream libraries to
migrate to `Stat::copyFrom`.
Refs: ZOOKEEPER-842, #2305.
Reviewers: tisonkun
Author: kezhuw
Closes #2310 from kezhuw/ZOOKEEPER-842-addendum-keep-DataTree_copyStat-for-compatibility
(cherry picked from commit b4443e82c61f98356079eb9b53ff85f62fbd30a1)
---
.../java/org/apache/zookeeper/server/DataTree.java | 20 ++++++++++++++++++++
1 file changed, 20 insertions(+)
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 57510ddad..3c1b5ebbd 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,6 +342,26 @@ boolean isSpecialPath(String path) {
|| configZookeeper.equals(path);
}
+ /**
+ * Use {@link StatPersisted#copyFrom(StatPersisted)} instead.
+ *
+ * <p>Apache Curator uses it, let's keep it for now to let them and their clients to react.
+ */
+ @Deprecated
+ public static void copyStatPersisted(StatPersisted from, StatPersisted to) {
+ to.copyFrom(from);
+ }
+
+ /**
+ * Use {@link Stat#copyFrom(Stat)} instead.
+ *
+ * <p> Apache Curator uses it, let's keep it for now to let them and their clients to react.
+ */
+ @Deprecated
+ public static void copyStat(Stat from, Stat to) {
+ to.copyFrom(from);
+ }
+
/**
* update the count/bytes of this stat data node
*