Skip to content

Commit bbcdbab

Browse files
authored
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
1 parent d4f555f commit bbcdbab

File tree

5 files changed

+18
-36
lines changed

5 files changed

+18
-36
lines changed

zookeeper-jute/src/main/java/org/apache/jute/compiler/JRecord.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -491,6 +491,16 @@ public void genJavaCode(File outputDirectory) throws IOException {
491491
JField jf = i.next();
492492
jj.write(jf.genJavaGetSet(fIdx));
493493
}
494+
495+
jj.write("\n");
496+
jj.write(" public void copyFrom(" + getName() + " from) {\n");
497+
fIdx = 0;
498+
for (Iterator<JField> i = mFields.iterator(); i.hasNext(); fIdx++) {
499+
JField jf = i.next();
500+
jj.write(" " + jf.getName() + " = from." + jf.getName() + ";\n");
501+
}
502+
jj.write(" }\n");
503+
494504
jj.write(" public void serialize(OutputArchive a_, String tag) throws java.io.IOException {\n");
495505
jj.write(" a_.startRecord(this,tag);\n");
496506
fIdx = 0;

zookeeper-server/src/main/java/org/apache/zookeeper/ZooKeeper.java

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -86,7 +86,6 @@
8686
import org.apache.zookeeper.proto.SyncRequest;
8787
import org.apache.zookeeper.proto.SyncResponse;
8888
import org.apache.zookeeper.proto.WhoAmIResponse;
89-
import org.apache.zookeeper.server.DataTree;
9089
import org.apache.zookeeper.server.EphemeralType;
9190
import org.slf4j.Logger;
9291
import org.slf4j.LoggerFactory;
@@ -1539,7 +1538,7 @@ public String create(
15391538
throw KeeperException.create(KeeperException.Code.get(r.getErr()), clientPath);
15401539
}
15411540
if (stat != null) {
1542-
DataTree.copyStat(response.getStat(), stat);
1541+
stat.copyFrom(response.getStat());
15431542
}
15441543
return chroot.strip(response.getPath());
15451544
}
@@ -2056,7 +2055,7 @@ public byte[] getData(final String path, Watcher watcher, Stat stat) throws Keep
20562055
throw KeeperException.create(KeeperException.Code.get(r.getErr()), clientPath);
20572056
}
20582057
if (stat != null) {
2059-
DataTree.copyStat(response.getStat(), stat);
2058+
stat.copyFrom(response.getStat());
20602059
}
20612060
return response.getData();
20622061
}
@@ -2157,7 +2156,7 @@ public byte[] getConfig(Watcher watcher, Stat stat) throws KeeperException, Inte
21572156
throw KeeperException.create(KeeperException.Code.get(r.getErr()), configZnode);
21582157
}
21592158
if (stat != null) {
2160-
DataTree.copyStat(response.getStat(), stat);
2159+
stat.copyFrom(response.getStat());
21612160
}
21622161
return response.getData();
21632162
}
@@ -2319,7 +2318,7 @@ public List<ACL> getACL(final String path, Stat stat) throws KeeperException, In
23192318
throw KeeperException.create(KeeperException.Code.get(r.getErr()), clientPath);
23202319
}
23212320
if (stat != null) {
2322-
DataTree.copyStat(response.getStat(), stat);
2321+
stat.copyFrom(response.getStat());
23232322
}
23242323
return response.getAcl();
23252324
}
@@ -2563,7 +2562,7 @@ public List<String> getChildren(
25632562
throw KeeperException.create(KeeperException.Code.get(r.getErr()), clientPath);
25642563
}
25652564
if (stat != null) {
2566-
DataTree.copyStat(response.getStat(), stat);
2565+
stat.copyFrom(response.getStat());
25672566
}
25682567
return response.getChildren();
25692568
}

zookeeper-server/src/main/java/org/apache/zookeeper/admin/ZooKeeperAdmin.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,6 @@
3434
import org.apache.zookeeper.proto.ReconfigRequest;
3535
import org.apache.zookeeper.proto.ReplyHeader;
3636
import org.apache.zookeeper.proto.RequestHeader;
37-
import org.apache.zookeeper.server.DataTree;
3837
import org.slf4j.Logger;
3938
import org.slf4j.LoggerFactory;
4039

@@ -252,7 +251,7 @@ public byte[] reconfigure(
252251
throw KeeperException.create(KeeperException.Code.get(r.getErr()), "");
253252
}
254253
if (stat != null) {
255-
DataTree.copyStat(response.getStat(), stat);
254+
stat.copyFrom(response.getStat());
256255
}
257256
return response.getData();
258257
}

zookeeper-server/src/main/java/org/apache/zookeeper/server/DataTree.java

Lines changed: 1 addition & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -342,32 +342,6 @@ boolean isSpecialPath(String path) {
342342
|| configZookeeper.equals(path);
343343
}
344344

345-
public static void copyStatPersisted(StatPersisted from, StatPersisted to) {
346-
to.setAversion(from.getAversion());
347-
to.setCtime(from.getCtime());
348-
to.setCversion(from.getCversion());
349-
to.setCzxid(from.getCzxid());
350-
to.setMtime(from.getMtime());
351-
to.setMzxid(from.getMzxid());
352-
to.setPzxid(from.getPzxid());
353-
to.setVersion(from.getVersion());
354-
to.setEphemeralOwner(from.getEphemeralOwner());
355-
}
356-
357-
public static void copyStat(Stat from, Stat to) {
358-
to.setAversion(from.getAversion());
359-
to.setCtime(from.getCtime());
360-
to.setCversion(from.getCversion());
361-
to.setCzxid(from.getCzxid());
362-
to.setMtime(from.getMtime());
363-
to.setMzxid(from.getMzxid());
364-
to.setPzxid(from.getPzxid());
365-
to.setVersion(from.getVersion());
366-
to.setEphemeralOwner(from.getEphemeralOwner());
367-
to.setDataLength(from.getDataLength());
368-
to.setNumChildren(from.getNumChildren());
369-
}
370-
371345
/**
372346
* update the count/bytes of this stat data node
373347
*
@@ -1305,7 +1279,7 @@ void serializeNode(OutputArchive oa, StringBuilder path) throws IOException {
13051279
DataNode nodeCopy;
13061280
synchronized (node) {
13071281
StatPersisted statCopy = new StatPersisted();
1308-
copyStatPersisted(node.stat, statCopy);
1282+
statCopy.copyFrom(node.stat);
13091283
//we do not need to make a copy of node.data because the contents
13101284
//are never changed
13111285
nodeCopy = new DataNode(node.data, node.acl, statCopy);

zookeeper-server/src/main/java/org/apache/zookeeper/server/ZooKeeperServer.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1064,7 +1064,7 @@ static class ChangeRecord {
10641064
ChangeRecord duplicate(long zxid) {
10651065
StatPersisted stat = new StatPersisted();
10661066
if (this.stat != null) {
1067-
DataTree.copyStatPersisted(this.stat, stat);
1067+
stat.copyFrom(this.stat);
10681068
}
10691069
ChangeRecord changeRecord = new ChangeRecord(zxid, path, stat, childCount,
10701070
acl == null ? new ArrayList<>() : new ArrayList<>(acl));

0 commit comments

Comments
 (0)