This is an automated email from the ASF dual-hosted git repository. hanm 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 1f12116 ZOOKEEPER-3491: Specify commitLogCount value using a system property 1f12116 is described below commit 1f1211653589c98e259d043affc00c90a4c54eb7 Author: Vladimir Ivić <vladimir.i...@me.com> AuthorDate: Mon Sep 9 15:27:26 2019 -0700 ZOOKEEPER-3491: Specify commitLogCount value using a system property Currently the commit log count value is set to 500. This can cause busy servers to snapshot transactions too often. Override default commitLogCount=500 through the system property zookeeper.commitLogCount. Author: Vladimir Ivić <vladimir.i...@me.com> Author: Vladimir Ivic <vi...@fb.com> Author: Brian Nixon <ni...@fb.com> Reviewers: Michael Han <h...@apachge.org>, Enrico Olivelli <eolive...@gmail.com> Closes #1034 from vladimirivic/ZOOKEEPER-3491-commitLogCount-system-property --- .../src/main/resources/markdown/zookeeperAdmin.md | 7 ++++++ .../org/apache/zookeeper/server/ZKDatabase.java | 25 ++++++++++++++++++++-- 2 files changed, 30 insertions(+), 2 deletions(-) diff --git a/zookeeper-docs/src/main/resources/markdown/zookeeperAdmin.md b/zookeeper-docs/src/main/resources/markdown/zookeeperAdmin.md index 5113eaa..7c37a53 100644 --- a/zookeeper-docs/src/main/resources/markdown/zookeeperAdmin.md +++ b/zookeeper-docs/src/main/resources/markdown/zookeeperAdmin.md @@ -626,6 +626,13 @@ property, when available, is noted below. reaches a runtime generated random value in the \[snapCount/2+1, snapCount] range.The default snapCount is 100,000. +* *commitLogCount* * : + (Java system property: **zookeeper.commitLogCount**) + Zookeeper maintains an in-memory list of last committed requests for fast synchronization with + followers when the followers are not too behind. This improves sync performance in case when your + snapshots are large (>100,000). + The default commitLogCount value is 500. + * *snapSizeLimitInKb* : (Java system property: **zookeeper.snapSizeLimitInKb**) ZooKeeper records its transactions using snapshots and diff --git a/zookeeper-server/src/main/java/org/apache/zookeeper/server/ZKDatabase.java b/zookeeper-server/src/main/java/org/apache/zookeeper/server/ZKDatabase.java index c04f8b2..5d292a9 100644 --- a/zookeeper-server/src/main/java/org/apache/zookeeper/server/ZKDatabase.java +++ b/zookeeper-server/src/main/java/org/apache/zookeeper/server/ZKDatabase.java @@ -85,7 +85,9 @@ public class ZKDatabase { public static final double DEFAULT_SNAPSHOT_SIZE_FACTOR = 0.33; private double snapshotSizeFactor; - public static final int commitLogCount = 500; + public static final String COMMIT_LOG_COUNT = "zookeeper.commitLogCount"; + public static final int DEFAULT_COMMIT_LOG_COUNT = 500; + public int commitLogCount; protected static int commitLogBuffer = 700; protected Queue<Proposal> committedLog = new ArrayDeque<>(); protected ReentrantReadWriteLock logLock = new ReentrantReadWriteLock(); @@ -108,7 +110,9 @@ public class ZKDatabase { this.snapLog = snapLog; try { - snapshotSizeFactor = Double.parseDouble(System.getProperty(SNAPSHOT_SIZE_FACTOR, Double.toString(DEFAULT_SNAPSHOT_SIZE_FACTOR))); + snapshotSizeFactor = Double.parseDouble( + System.getProperty(SNAPSHOT_SIZE_FACTOR, + Double.toString(DEFAULT_SNAPSHOT_SIZE_FACTOR))); if (snapshotSizeFactor > 1) { snapshotSizeFactor = DEFAULT_SNAPSHOT_SIZE_FACTOR; LOG.warn("The configured {} is invalid, going to use the default {}", @@ -120,6 +124,23 @@ public class ZKDatabase { snapshotSizeFactor = DEFAULT_SNAPSHOT_SIZE_FACTOR; } LOG.info("{} = {}", SNAPSHOT_SIZE_FACTOR, snapshotSizeFactor); + + try { + commitLogCount = Integer.parseInt( + System.getProperty(COMMIT_LOG_COUNT, + Integer.toString(DEFAULT_COMMIT_LOG_COUNT))); + if (commitLogCount < DEFAULT_COMMIT_LOG_COUNT) { + commitLogCount = DEFAULT_COMMIT_LOG_COUNT; + LOG.warn("The configured commitLogCount {} is less than the recommended {}" + + ", going to use the recommended one", + COMMIT_LOG_COUNT, DEFAULT_COMMIT_LOG_COUNT); + } + } catch (NumberFormatException e) { + LOG.error("Error parsing {} - use default value {}", + COMMIT_LOG_COUNT, DEFAULT_COMMIT_LOG_COUNT); + commitLogCount = DEFAULT_COMMIT_LOG_COUNT; + } + LOG.info("{}={}", COMMIT_LOG_COUNT, commitLogCount); } /**