zookeeper.git
33 hours agoZOOKEEPER-3098: Add additional server metrics master
Joseph Blomstedt [Mon, 17 Sep 2018 23:00:15 +0000 (16:00 -0700)] 
ZOOKEEPER-3098: Add additional server metrics

This patch adds several new server-side metrics as well as makes it easier to add new metrics in the future. This patch also includes a handful of other minor metrics-related changes.

Here's a high-level summary of the changes.

1. This patch extends the request latency tracked in `ServerStats` to
   track `read` and `update` latency separately. Updates are any request
   that must be voted on and can change data, reads are all requests that
   can be handled locally and don't change data.

2. This patch adds the `ServerMetrics` logic and the related `AvgMinMaxCounter`
   and `SimpleCounter` classes. This code is designed to make it incredibly easy to
   add new metrics. To add a new metric you just add one line to `ServerMetrics` and
   then directly reference that new metric anywhere in the code base. The `ServerMetrics`
   logic handles creating the metric, properly adding the metric to the JSON output of
   the `/monitor` admin command, and properly resetting the metric when necessary.

   The motivation behind `ServerMetrics` is to make things easy enough that it encourages
   new metrics to be added liberally. Lack of in-depth metrics/visibility is a long-standing
   ZooKeeper weakness. At Facebook, most of our internal changes build on `ServerMetrics` and
   we have nearly 100 internal metrics at this time -- all of which we'll be upstreaming
   in the coming months as we publish more internal patches.

3. This patch adds 20 new metrics, 14 which are handled by `ServerMetrics`.

4. This patch replaces some uses of `synchronized` in `ServerStats` with atomic operations.

Here's a list of new metrics added in this patch:

- `uptime`: time that a peer has been in a stable leading/following/observing state
- `leader_uptime`: uptime for peer in leading state
- `global_sessions`: count of global sessions
- `local_sessions`: count of local sessions
- `quorum_size`: configured ensemble size
- `synced_observers`: similar to existing `synced_followers` but for observers
- `fsynctime`: time to fsync transaction log (avg/min/max)
- `snapshottime`: time to write a snapshot (avg/min/max)
- `dbinittime`: time to reload database -- read snapshot + apply transactions (avg/min/max)
- `readlatency`: read request latency (avg/min/max)
- `updatelatency`: update request latency (avg/min/max)
- `propagation_latency`: end-to-end latency for updates, from proposal on leader to committed-to-datatree on a given host (avg/min/max)
- `follower_sync_time`: time for follower to sync with leader (avg/min/max)
- `election_time`: time between entering and leaving election (avg/min/max)
- `looking_count`: number of transitions into looking state
- `diff_count`: number of diff syncs performed
- `snap_count`: number of snap syncs performed
- `commit_count`: number of commits performed on leader
- `connection_request_count`: number of incoming client connection requests
- `bytes_received_count`: similar to existing `packets_received` but tracks bytes

Author: Joseph Blomstedt <jdb@fb.com>

Reviewers: Allan Lyu <fangmin@apache.org>, Andor Molnár <andor@apache.org>, Enrico Olivelli <eolivelli@gmail.com>, Michael Han <hanm@apache.org>

Closes #580 from jtuple/ZOOKEEPER-3098

4 days agoZOOKEEPER-3142: Extend SnapshotFormatter to dump data in json format
Brian Nixon [Fri, 14 Sep 2018 23:09:36 +0000 (16:09 -0700)] 
ZOOKEEPER-3142: Extend SnapshotFormatter to dump data in json format

Author: Brian Nixon <nixon@fb.com>

Reviewers: Michael Han <hanm@apache.org>

Closes #619 from enixon/extend-sf

4 days agoZOOKEEPER-3144: Fix potential ephemeral nodes inconsistent due to global session...
Fangmin Lyu [Fri, 14 Sep 2018 22:08:19 +0000 (15:08 -0700)] 
ZOOKEEPER-3144: Fix potential ephemeral nodes inconsistent due to global session inconsistent with fuzzy snapshot

There is a race condition between update the lastProcessedZxid and the actual session change in DataTree, which could cause global session inconsistent, which then could cause ephemeral inconsistent.

For more details, please check the description in JIRA ZOOKEEPER-3144.

Author: Fangmin Lyu <allenlyu@fb.com>

Reviewers: Michael Han <hanm@apache.org>

Closes #621 from lvfangmin/ZOOKEEPER-3144

4 days agoZOOKEEPER-3137: add a utility to truncate logs to a zxid
Brian Nixon [Fri, 14 Sep 2018 22:03:48 +0000 (15:03 -0700)] 
ZOOKEEPER-3137: add a utility to truncate logs to a zxid

Author: Brian Nixon <nixon@fb.com>

Reviewers: Michael Han <hanm@apache.org>, Andor Molnár <andor@apache.org>

Closes #615 from enixon/add-chop

6 days agoZOOKEEPER-1823: zkTxnLogToolkit -dump should support printing transaction data as...
maoling [Wed, 12 Sep 2018 11:32:07 +0000 (13:32 +0200)] 
ZOOKEEPER-1823: zkTxnLogToolkit -dump should support printing transaction data as a string

- It would be a useful addition for debuggling to show transaction data as strings with a option `-s `
- update the usage string to `USAGE: LogFormatter [-s] log_file` and add a short description for the `-s `
    option

- for the issue [michim](https://issues.apache.org/jira/secure/ViewProfile.jspa?name=michim) mentioned has been resolved,the test evidence has been included in the jira(Notice:we cannot `split(",")[1]` to replace the node data,because the node path can be like this `"/mao,ling"`)
- more details in [ZOOKEEPER-1823](https://issues.apache.org/jira/browse/ZOOKEEPER-1823).Thanks [rgs](https://issues.apache.org/jira/secure/ViewProfile.jspa?name=rgs) for the origin work

Author: maoling <maoling199210191@sina.com>

Reviewers: andor@apache.org

Closes #613 from maoling/ZOOKEEPER-1823 and squashes the following commits:

82c375b0 [maoling] change the desc of -d option in the code
ba3ee65a [maoling] transport this improment to TxnLogToolkit
96939873 [maoling] Revert "ZOOKEEPER-1823:LogFormatter should support printing transaction data as a string"
298428ea [maoling] ZOOKEEPER-1823:LogFormatter should support printing transaction data as a string

6 days agoZOOKEEPER-3125: Fixing pzxid consistent issue when replaying a txn for a deleted...
Fangmin Lyu [Wed, 12 Sep 2018 11:29:13 +0000 (13:29 +0200)] 
ZOOKEEPER-3125: Fixing pzxid consistent issue when replaying a txn for a deleted node

Author: Fangmin Lyu <allenlyu@fb.com>

Reviewers: breed@apache.org, andor@apache.org

Closes #605 from lvfangmin/ZOOKEEPER-3125

7 days agoZOOKEEPER-3123: MetricsProvider Lifecycle in ZooKeeper Server
Enrico Olivelli [Tue, 11 Sep 2018 13:23:32 +0000 (15:23 +0200)] 
ZOOKEEPER-3123: MetricsProvider Lifecycle in ZooKeeper Server

Manage the lifecycle of a MetricsProvider inside a ZooKeeper server.
- handle configuration
- start and configure the MetricsProvider
- notify shutdown to the MetricsProvider

This is an early preview, because there are some points to discuss:
- We have to throw an IOException in case of failure (in order not to change the current signature of main methods used to start the server)
- The patch only provides the lifecycle, it introduces some dead fields (root metrics context), this is expected as the real instrumentation will be done in a further step, is it okay ?
- Test cases cover only standalone mode, do we need to add a new suite for testing configuration and boot errors on QuorumPeer mode ? (the answer should be YES)
- MetricsProvider configuration is not subject to dynamic 'reconfig'

Configuration to the MetricsProvider is not yet handled, the idea is to let the user configure properties like
metricsProvider.className=o.a.z.metrics.prometheus.PrometheusMetricsProvider
metricsProvider.customParam1=value1
metricsProvider.customParam2=value2

in this case the MetricsProvider will receive {customParam1=value1, customParam2=value2} as parameter in configure()

is it okay ?

Author: Enrico Olivelli <eolivelli@apache.org>

Reviewers: fangmin@apache.org, andor@apache.org

Closes #601 from eolivelli/fix/boot-provider and squashes the following commits:

8964ed17 [Enrico Olivelli] Fix tests, use getters in order to support Mock QuorumPeerConfig
93749f6a [Enrico Olivelli] fix imports
7ad552db [Enrico Olivelli] Add testcases around QuorumPeerMain
22f79eb8 [Enrico Olivelli] clean up
c92450e4 [Enrico Olivelli] implement MetricsProvider configuration, fix some review comments
f4f66ecb [Enrico Olivelli] ZOOKEEPER-3123 MetricsProvider Lifecycle in ZooKeeper Server

8 days agoZOOKEEPER-2261: When only secureClientPort is configured connections, configuration...
Andor Molnar [Mon, 10 Sep 2018 22:17:45 +0000 (15:17 -0700)] 
ZOOKEEPER-2261: When only secureClientPort is configured connections, configuration, connection_stat_reset, and stats admin commands throw NullPointerException

Root cause of the issue is that property getter returns the non-secure ServerCnxnFactory instance always. When Quorum SSL is enabled, we set a separate field which is the secure instance.

Property getter should detect the scenario and return the proper instance.

First commit contains some refactoring: shuffling the existing ZooKeeperServer tests to relevant places.
Second commit is the actual fix + new unit tests.

Sorry about indentation changes, but `FileTxnLogTest.java` was indented by 2 spaces instead of 4.

Author: Andor Molnar <andor@apache.org>
Author: Andor Molnar <andor@cloudera.com>

Reviewers: breed, hanm, nkalmar

Closes #545 from anmolnar/ZOOKEEPER-2261

8 days agoZOOKEEPER-1990: fix Random instances
Norbert Kalmar [Mon, 10 Sep 2018 09:44:50 +0000 (11:44 +0200)] 
ZOOKEEPER-1990: fix Random instances

See the jira for more info.

Basically we have multiple ways of creating Random instances in ZooKeeper. Since java 1.7, the default constructor is good enough even in multi-threaded environment, we get a good seed.
But in some places, we just create a random instance, where System.nanotime is the seed, which is not a good practice in multi-threaded environments.

I only replaced those, and I also left the tests as is, because in some cases it is intentional in them.

I created the PR to bring more attention to the ticket, please feel free to share your ideas on the topic!

Author: Norbert Kalmar <nkalmar@yahoo.com>

Reviewers: fangmin@apache.org, andor@apache.org

Closes #617 from nkalmar/ZOOKEEPER-1990

12 days agoZOOKEEPER-3136: Reduce log in ClientBase in case of ConnectException
Enrico Olivelli [Fri, 7 Sep 2018 00:49:10 +0000 (17:49 -0700)] 
ZOOKEEPER-3136: Reduce log in ClientBase in case of ConnectException

Do not log stacktraces of a very common error during the execution of tests, that is while waiting for a server to start.

Author: Enrico Olivelli <eolivelli@apache.org>

Reviewers: hanm, maoling

Closes #614 from eolivelli/fix/ZOOKEEPER-3136-noisy-log

12 days agoZOOKEEPER-3131: Remove watcher when session closed in NettyServerCnxn
Fangmin Lyu [Fri, 7 Sep 2018 00:34:55 +0000 (17:34 -0700)] 
ZOOKEEPER-3131: Remove watcher when session closed in NettyServerCnxn

Currently, it doesn't remove itself from ZK server when the cnxn is closed, which
will leak watchers, close it to make it align with NIO implementation.

Author: Fangmin Lyu <allenlyu@fb.com>

Reviewers: hanm, anmolnar, nkalmar

Closes #612 from lvfangmin/ZOOKEEPER-3131

13 days agoZOOKEEPER-3090: continue can be replaced with break
zhangbo [Wed, 5 Sep 2018 23:11:01 +0000 (16:11 -0700)] 
ZOOKEEPER-3090: continue can be replaced with break

change continue  to break

Author: zhangbo <zhangbo01@dafy.com>

Reviewers: hanm, nkalmar, maoling

Closes #573 from a470577391/master

13 days agoZOOKEEPER-3127: Fixing potential data inconsistency due to update last processed...
Fangmin Lyu [Wed, 5 Sep 2018 20:35:38 +0000 (13:35 -0700)] 
ZOOKEEPER-3127: Fixing potential data inconsistency due to update last processed zxid with partial multi-op txn

Author: Fangmin Lyu <allenlyu@fb.com>

Reviewers: Benjamin Reed <breed@apache.org>, Michael Han <hanm@apache.org>

Closes #606 from lvfangmin/ZOOKEEPER-3127

13 days agoZOOKEEPER-2913: testEphemeralNodeDeletion is flaky
maoling [Wed, 5 Sep 2018 14:15:58 +0000 (16:15 +0200)] 
ZOOKEEPER-2913: testEphemeralNodeDeletion is flaky

- The test code is assuming the follower is up to date, which without a `sync` call.when regression,the follower could not catch up with the leader,so the `/e1` patch still exists
- this issue is not very easy to reproduce,but we can change the codes in the `FollowerZooKeeperServer.commit() ` ,just like this:

```
       Request request = pendingTxns.remove();
        if (request.getHdr().getType() == -11) {
         try {
     Thread.sleep(200);
     } catch (InterruptedException e) {

     }
        }
        commitProcessor.commit(request);
```
to slow down the commit to simulate the flaky test,then we can check the correctness of this patch
- ----------------------------------------**appendix: zk.sync() doc:**------------------------------------------

> ZooKeeper does not guarantee that at every instance in time, two different clients will have identical views of ZooKeeper data. Due to factors like network delays, one client may perform an update before another client gets notified of the change. Consider the scenario of two clients, A and B. If client A sets the value of a znode /a from 0 to 1, then tells client B to read /a, client B may read the old value of 0, depending on which server it is connected to. If it is important that Client A and Client B read the same value, Client B should should call the sync() method from the ZooKeeper API method before it performs its read.

- more detais in [ZOOKEEPER-2913](https://issues.apache.org/jira/browse/ZOOKEEPER-2913)

Author: maoling <maoling199210191@sina.com>

Reviewers: andor@apache.org

Closes #608 from maoling/ZOOKEEPER-2913

2 weeks agoZOOKEEPER-3116: Make the DataTree.approximateDataSize more efficient
Fangmin Lyu [Tue, 4 Sep 2018 09:54:23 +0000 (11:54 +0200)] 
ZOOKEEPER-3116: Make the DataTree.approximateDataSize more efficient

Cache the approximate data tree size, and update it when txns applied to data tree, this could make this query not that expensive.

Author: Fangmin Lyu <allenlyu@fb.com>

Reviewers: andor@apache.org

Closes #594 from lvfangmin/ZOOKEEPER-3116 and squashes the following commits:

ad2ce216 [Fangmin Lyu] move to synchronize when visiting node.data
2e0cbb17 [Fangmin Lyu] add test case to test cached approximate data tree size
21243f5e [Fangmin Lyu] cache the approximate data size in DataTree

2 weeks agoZOOKEEPER-3080: MAVEN MIGRATION - Step 1.5 - move jute dir
Norbert Kalmar [Mon, 3 Sep 2018 09:57:50 +0000 (11:57 +0200)] 
ZOOKEEPER-3080: MAVEN MIGRATION - Step 1.5 - move jute dir

Author: Norbert Kalmar <nkalmar@yahoo.com>

Reviewers: andor@apache.org

Closes #609 from nkalmar/ZOOKEEPER-3080

3 weeks agoZOOKEEPER-3109: Avoid long unavailable time due to voter changed mind during leader...
Fangmin Lyu [Wed, 29 Aug 2018 04:26:58 +0000 (21:26 -0700)] 
ZOOKEEPER-3109: Avoid long unavailable time due to voter changed mind during leader election

For more details, please check descriptions in https://issues.apache.org/jira/browse/ZOOKEEPER-3109

Author: Fangmin Lyu <allenlyu@fb.com>

Reviewers: breed, hanm

Closes #588 from lvfangmin/ZOOKEEPER-3109

4 weeks agoZOOKEEPER-3031: MAVEN MIGRATION - Step 1.4 - move client dir
Norbert Kalmar [Tue, 21 Aug 2018 05:30:53 +0000 (07:30 +0200)] 
ZOOKEEPER-3031: MAVEN MIGRATION - Step 1.4 - move client dir

Author: Norbert Kalmar <nkalmar@yahoo.com>

Reviewers: andor@apache.org

Closes #597 from nkalmar/ZOOKEEPER-3031

4 weeks agoZOOKEEPER-3117: Correct the LeaderBean.followerInfo to only return the followers...
Fangmin Lyu [Fri, 17 Aug 2018 12:40:02 +0000 (14:40 +0200)] 
ZOOKEEPER-3117: Correct the LeaderBean.followerInfo to only return the followers list

Author: Fangmin Lyu <allenlyu@fb.com>

Reviewers: andor@apache.org

Closes #595 from lvfangmin/ZOOKEEPER-3117

4 weeks agoZOOKEEPER-3033: MAVEN MIGRATION - fix directory structure
Norbert Kalmar [Fri, 17 Aug 2018 09:56:09 +0000 (11:56 +0200)] 
ZOOKEEPER-3033: MAVEN MIGRATION - fix directory structure

I reopened step 1.2 to fix the directory structure of the recipes, as it is better to do every directory change at once. (As it has been done in step 1.3 already - first step, docs is irrelevant in this manner).

Author: Norbert Kalmar <nkalmar@yahoo.com>

Reviewers: andor@apache.org

Closes #599 from nkalmar/ZOOKEEPER-3033_fix

4 weeks agoZOOKEEPER-3120: add NetBeans nbproject directory to .gitignore
Enrico Olivelli [Fri, 17 Aug 2018 08:34:02 +0000 (10:34 +0200)] 
ZOOKEEPER-3120: add NetBeans nbproject directory to .gitignore

Author: Enrico Olivelli <eolivelli@apache.org>

Reviewers: fangmin@apache.org, andor@apache.org

Closes #598 from eolivelli/fix/netbeans-nbproject

5 weeks agoZOOKEEPER-3103: Pluggable metrics system for ZooKeeper - MetricsProvider API definition
Enrico Olivelli - Diennea [Tue, 14 Aug 2018 12:33:45 +0000 (14:33 +0200)] 
ZOOKEEPER-3103: Pluggable metrics system for ZooKeeper - MetricsProvider API definition

Define the API which must be implemented by a Metrics Provider.

a MetricsProvider is a pluggable component which is able to gather metrics about the system and publish them to an external application for analysis.

Author: Enrico Olivelli - Diennea <eolivelli@apache.org>
Author: Enrico Olivelli <eolivelli@apache.org>

Reviewers: fangmin@apache.org, andor@apache.org

Closes #582 from eolivelli/fix/metrics and squashes the following commits:

16412653 [Enrico Olivelli] better javadocs
c3fc95e9 [Enrico Olivelli - Diennea] Address review comments, clean up API and docs, add 'boolean' return value to registerGauge
f57e2f33 [Enrico Olivelli - Diennea] Address review comments, clean up API and docs, add 'boolean' return value to registerGauge
08ca334f [Enrico Olivelli - Diennea] Address review comments, clean up API and docs, add 'boolean' return value to registerGauge
0640293b [Enrico Olivelli - Diennea] ZOOKEEPER-3103 Pluggable metrics system for ZooKeeper - MetricsProvider API definition

6 weeks agoZOOKEEPER-3110: Improve the closeSession throughput in PrepRequestProcessor
Fangmin Lyu [Wed, 8 Aug 2018 04:29:16 +0000 (21:29 -0700)] 
ZOOKEEPER-3110: Improve the closeSession throughput in PrepRequestProcessor

Author: Fangmin Lyu <allenlyu@fb.com>

Reviewers: hanm@apache.org

Closes #591 from lvfangmin/ZOOKEEPER-3110

6 weeks agoZOOKEEPER-2926: Fix potential data consistency issue due to the session management bug
Fangmin Lyu [Wed, 8 Aug 2018 04:21:37 +0000 (21:21 -0700)] 
ZOOKEEPER-2926: Fix potential data consistency issue due to the session management bug

Author: Fangmin Lyu <allenlyu@fb.com>

Reviewers: Michael Han <hanm@apache.org>, Andor Molnar <andor@cloudera.com>

Closes #447 from lvfangmin/ZOOKEEPER-2926

6 weeks agoZOOKEEPER-3030: MAVEN MIGRATION - Step 1.3 - move contrib directories
Norbert Kalmar [Mon, 6 Aug 2018 12:13:17 +0000 (14:13 +0200)] 
ZOOKEEPER-3030: MAVEN MIGRATION - Step 1.3 - move contrib directories

Move the contrib projects according to new directory structure.
In the PR src/contrib/zkperl/build/check_zk_version.c and .h looks like I removed the file. but everything looks good on my local (I just moved them, did not modify anything). Will investigate further.

DO-NOT-MERGE-YET: Checking if creating the maven structure of directories now will break anything other then the already different directory structure in build/zookeeper-[version]/src/ (I will write an e-mail about this on dev list)

Author: Norbert Kalmar <nkalmar@yahoo.com>

Reviewers: andor@apache.org

Closes #574 from nkalmar/ZOOKEEPER-3030 and squashes the following commits:

49b7519b [Norbert Kalmar] ZOOKEEPER-3030 create maven dir structure
9f19ab06 [Norbert Kalmar] ZOOKEEPER-3030 fix releaseaudit license missing exclusions
59d9d17d [Norbert Kalmar] ZOOKEEPER-3030 add missing files in dist.dir
165d4dc5 [Norbert Kalmar] ZOOKEEPER-3030 - MAVEN MIGRATION - move contrib directories

6 weeks agoZOOKEEPER-3085: define exit codes in enum
Norbert Kalmar [Mon, 6 Aug 2018 12:11:08 +0000 (14:11 +0200)] 
ZOOKEEPER-3085: define exit codes in enum

Define the used exit codes in one enum. contrib projects are excluded, as they can have seperate exit codes (and they do use it differently then in core ZK).
Some exit codes overlap, but refactoring the exit code used is not backward compatible.

Author: Norbert Kalmar <nkalmar@yahoo.com>

Reviewers: lvfangmin@apache.org, breed@apache.org, andor@apache.org

Closes #572 from nkalmar/ZOOKEEPER-3085 and squashes the following commits:

dbc18a62 [Norbert Kalmar] ZOOKEEPER-3085 change comments to javadoc comment in enum code defs
908c171e [Norbert Kalmar] ZOOKEEPER-3085 add missing enum usage and some renames
c49dcef9 [Norbert Kalmar] ZOOKEEPER-3085 use the enum value in ZooKeeperMain.exitCode as well
611aa4ed [Norbert Kalmar] ZOOKEEPER-3085 define exit codes in enum

6 weeks agoZOOKEEPER-3057: Fix build by adding missing licence header
Andor Molnar [Mon, 6 Aug 2018 08:47:35 +0000 (10:47 +0200)] 
ZOOKEEPER-3057: Fix build by adding missing licence header

6 weeks agoZOOKEEPER-3104: Fix data inconsistency due to NEWLEADER being sent too early
Fangmin Lyu [Fri, 3 Aug 2018 16:52:08 +0000 (09:52 -0700)] 
ZOOKEEPER-3104: Fix data inconsistency due to NEWLEADER being sent too early

Author: Fangmin Lyu <allenlyu@fb.com>

Reviewers: Benjamin Reed <breed@apache.org>, Norbert Kalmar <nkalmar@yahoo.com>

Closes #583 from lvfangmin/ZOOKEEPER-3104

6 weeks agoZOOKEEPER-3062: mention fsync.warningthresholdms in FileTxnLog LOG.warn message
Christine Poerschke [Wed, 1 Aug 2018 19:19:34 +0000 (12:19 -0700)] 
ZOOKEEPER-3062: mention fsync.warningthresholdms in FileTxnLog LOG.warn message

https://issues.apache.org/jira/browse/ZOOKEEPER-3062

Author: Christine Poerschke <cpoerschke@bloomberg.net>

Reviewers: phunt@apache.org

Closes #566 from cpoerschke/master-ZOOKEEPER-3062 and squashes the following commits:

2bcccf62d [Christine Poerschke] Action code review feedback.
a2dc484d4 [Christine Poerschke] ZOOKEEPER-3062: mention fsync.warningthresholdms in FileTxnLog LOG.warn message

Change-Id: Id675e61a9ef0b247d65eaa36bb88c8569d177c49

7 weeks agoZOOKEEPER-3082: Fix server snapshot behavior when out of disk space
Brian Nixon [Mon, 30 Jul 2018 04:22:23 +0000 (21:22 -0700)] 
ZOOKEEPER-3082: Fix server snapshot behavior when out of disk space

Author: Brian Nixon <nixon@fb.com>

Reviewers: Benjamin Reed <breed@apache.org>, Michale Han <hanm@apache.org>

Closes #560 from enixon/ZOOKEEPER-3082

7 weeks agoZOOKEEPER-3095: Connect string fix for non-existent hosts
Jeelani Mohamed Abdul Khader [Sat, 28 Jul 2018 02:46:31 +0000 (19:46 -0700)] 
ZOOKEEPER-3095: Connect string fix for non-existent hosts

ZKPatch: eda58d9970c76831046ddc45251c9b110856836e (extract)

Author: Jeelani Mohamed Abdul Khader <mjeelani@devvm3360.prn2.facebook.com>

Reviewers: Benjamin Reed <breed@apache.org>

Closes #579 from mjeelanimsft/connect-string-fix-for-non-existent-hosts

7 weeks agoZOOKEEPER-3072: Throttle race condition fix
Botond Hejj [Sat, 28 Jul 2018 02:37:08 +0000 (19:37 -0700)] 
ZOOKEEPER-3072: Throttle race condition fix

Making the throttle check before passing over the request to the next thread will prevent the possibility of throttling code running after unthrottle

Added an additional async hammer thread which is pretty reliably reproduces the race condition. The globalOutstandingLimit is decreased so throttling code is executed.

Author: Botond Hejj <botond.hejj@gmail.com>

Reviewers: Andor Molnár <andor@apache.org>, Norbert Kalmar <nkalmar@yahoo.com>, Benjamin Reed <breed@apache.org>

Closes #563 from bothejjms/ZOOKEEPER-3072

7 weeks agoZOOKEEPER-3061: add more details to 'Unhandled scenario for peer' log.warn message
Christine Poerschke [Sat, 28 Jul 2018 02:30:06 +0000 (19:30 -0700)] 
ZOOKEEPER-3061: add more details to 'Unhandled scenario for peer' log.warn message

Author: Christine Poerschke <cpoerschke@bloomberg.net>
Author: Christine Poerschke <cpoerschke@apache.org>

Reviewers: Allan Lyu <fangmin@apache.org>, Benjamin Reed <breed@apache.org>, Norbert Kalmar <nkalmar@yahoo.com>

Closes #555 from cpoerschke/master-ZOOKEEPER-3061 and squashes the following commits:

139968228 [Christine Poerschke] Merge remote-tracking branch 'origin/master' into master-ZOOKEEPER-3061
1840c2bb6 [Christine Poerschke] Merge remote-tracking branch 'origin/master' into master-ZOOKEEPER-3061
1d3e7bc0b [Christine Poerschke] ZOOKEEPER-3061: add more details to 'Unhandled scenario for peer' log.warn message

7 weeks agoZOOKEEPER-3067: Optionally disable client environment logging.
James Peach [Fri, 27 Jul 2018 10:40:33 +0000 (12:40 +0200)] 
ZOOKEEPER-3067: Optionally disable client environment logging.

Although logging the client environment at initialization can be
helpful for filing bug reports, it tends not to be that helpful
for internal applications. It also introduces a dependency on UID
lookups (via getlogin) that application otherwise may not desire.

Author: James Peach <jpeach@apache.org>

Reviewers: breed@apache.org, andor@apache.org

Closes #565 from jpeach/ZOOKEEPER-3067

7 weeks agoZOOKEEPER-3057: Fix IPv6 literal usage
Mohamed Jeelani [Fri, 27 Jul 2018 10:32:45 +0000 (12:32 +0200)] 
ZOOKEEPER-3057: Fix IPv6 literal usage

This patch contains fixes for IPv6 literal usage and corresponding unit test changes.

As per discussion in ZOOKEEPER-3057 - The issue/problem is the same as ZOOKEEPER-2989, but we changed the code to pass IPv6 literal [%s]:%s, also we changed the logging and the LocalPeerBean to show this IPv6 literal as well, which makes it easier to check when using Ipv6 and we added detailed tests for this change, sending out for review to see if it's better or not.

ZKPatch: 88e94e6f3665353446bf70a042c8f0cd50834f7c (extract)

Author: Mohamed Jeelani <mjeelani@fb.com>
Author: Jeelani Mohamed Abdul Khader <mjeelani@devvm3360.prn2.facebook.com>

Reviewers: breed@apache.org, andor@apache.org

Closes #548 from mjeelanimsft/fix-ipv6-literal and squashes the following commits:

69c60b74 [Mohamed Jeelani] Fix method rename from splitServerConfig(s) to getHostAndPort(s)
47f7a854 [Mohamed Jeelani] Incorporating review feedback from @maoling
ff470498 [Mohamed Jeelani] Incorporating Review Feedback - Adding Unit Tests
f932e16e [Mohamed Jeelani] Added Unit Test and JavaDoc for splitServerConfig()
43e19e93 [Mohamed Jeelani] Incorporating code review comments
33f695f2 [Jeelani Mohamed Abdul Khader] Fix IPv6 literal usage

7 weeks agoZOOKEEPER-3094: Make BufferSizeTest reliable
Jeelani Mohamed Abdul Khader [Fri, 27 Jul 2018 03:28:37 +0000 (20:28 -0700)] 
ZOOKEEPER-3094: Make BufferSizeTest reliable

ZKPatch: d8b825d6533e9848565beff09e9a018136ca32bd (extract)

Changes made to the testStartupFailure test to remember the old directory and switch back to it after the test has completed.

Author: Jeelani Mohamed Abdul Khader <mjeelani@devvm3360.prn2.facebook.com>

Reviewers: Michael Han <hanm@apache.org>, Norbert Kalmar

Closes #577 from mjeelanimsft/make-buffersizetest-reliable

7 weeks agoZOOKEEPER-2251: Add Client side packet response timeout to avoid infinite wait.
Mohammad Arshad [Fri, 27 Jul 2018 03:16:04 +0000 (20:16 -0700)] 
ZOOKEEPER-2251: Add Client side packet response timeout to avoid infinite wait.

Add Client side packet response timeout to avoid infinite wait.

Author: Mohammad Arshad <arshad@apache.org>

Reviewers: Michael Han <hanm@apache.org>, nrico Olivelli <eolivelli@gmail.com>

Closes #119 from arshadmohammad/ZOOKEEPER-2251

7 weeks agoZOOKEEPER-3097: Using Runnable instead of thread work items to improve the throughput...
Fangmin Lyu [Fri, 27 Jul 2018 03:13:22 +0000 (20:13 -0700)] 
ZOOKEEPER-3097: Using Runnable instead of thread work items to improve the throughput of CommitProcessor

Author: Fangmin Lyu <allenlyu@fb.com>

Reviewers: Michael Han <hanm@apache.org>

Closes #578 from lvfangmin/ZOOKEEPER-3097

8 weeks agoZOOKEEPER-3068: Improve C client logging of IPv6 hosts
Brian Nixon [Fri, 20 Jul 2018 15:40:42 +0000 (17:40 +0200)] 
ZOOKEEPER-3068: Improve C client logging of IPv6 hosts

Author: Brian Nixon <nixon@fb.com>
Author: enixon <brian.nixon.cs@gmail.com>

Reviewers: andor@apache.org

Closes #547 from enixon/ZOOKEEPER-3068 and squashes the following commits:

63eb18ef [enixon] Merge branch 'master' into ZOOKEEPER-3068
e3cf7f83 [Brian Nixon] change boolean from int to char
cd404534 [Brian Nixon] ZOOKEEPER-3068: Improve C client logging of IPv6 hosts

2 months agoZOOKEEPER-3093: sync zerror with ZOO_ERRORS
Kent R. Spillner [Thu, 19 Jul 2018 17:28:38 +0000 (10:28 -0700)] 
ZOOKEEPER-3093: sync zerror with ZOO_ERRORS

I noticed that zerror(ZNOWATCHER) returns "unknown error" and when I went to investigate why I realized that actually three new values were added to ZOO_ERRORS enum without corresponding cases in zerror.  While here, also take the opportunity to shuffle the ordering of cases in zerror to match ZOO_ERRORS in order to make it easier to visually compare the two in the future to see if any values are missing cases (e.g. the fact that ZNEWCONFIGNOQUORUM and ZRECONFIGINPROGRESS were added to the bottom of the switch made it harder to see which all cases were missing).

Author: Kent R. Spillner <kspillner@acm.org>

Reviewers: phunt@apache.org

Closes #575 from sl4mmy/zookeeper-3093

Change-Id: I52eaaad1487aa25c2ffd101d4e8f7a365e59a3ae

2 months agoZOOKEEPER-3077: build outside of source directory
Kent R. Spillner [Thu, 19 Jul 2018 17:14:59 +0000 (10:14 -0700)] 
ZOOKEEPER-3077: build outside of source directory

Allow building native C library outside of source directory by explicitly
looking for jute generated header and source files inside source directory.

Signed-off-by: Kent R. Spillner <kspillneracm.org>
Author: Kent R. Spillner <kspillner@acm.org>

Reviewers: phunt@apache.org

Closes #557 from sl4mmy/zookeeper-3077

Change-Id: I7dafcaed6367362f3d8df283e7d0ef5804774ddc

2 months agoZOOKEEPER-3046: increased test timeout
Bogdan Kanivets [Thu, 19 Jul 2018 16:58:12 +0000 (09:58 -0700)] 
ZOOKEEPER-3046: increased test timeout

- bump up timeout to avoid too many build failures

Author: Bogdan Kanivets <bkanivets@gmail.com>

Reviewers: phunt@apache.org

Closes #576 from lavacat/test-timeouts-3.5

Change-Id: If0b4b45c33e1909120ad15454f1c2f3f242237b6
(cherry picked from commit b78e83b1d7101b9fe76dd0b1ed8e7af37f8a587e)
Signed-off-by: Patrick Hunt <phunt@apache.org>
2 months agoZOOKEEPER-3083: Remove some redundant and noisy log lines
Brian Nixon [Thu, 19 Jul 2018 03:59:14 +0000 (20:59 -0700)] 
ZOOKEEPER-3083: Remove some redundant and noisy log lines

Author: Brian Nixon <nixon@fb.com>

Reviewers: Benjamin Reed <breed@apache.org>, Michael Han <hanm@apache.org>, Andor Molnar <andor@cloudera.com>, 毛蛤丝 <maoling199210191@sina.com>

Closes #561 from enixon/ZOOKEEPER-3083

2 months agoZOOKEEPER-3074: Flaky test:org.apache.zookeeper.server.ServerStatsTest.testLatencyMetrics
maoling [Wed, 18 Jul 2018 13:49:21 +0000 (15:49 +0200)] 
ZOOKEEPER-3074: Flaky test:org.apache.zookeeper.server.ServerStatsTest.testLatencyMetrics

more details in [ZOOKEEPER-3074](https://issues.apache.org/jira/browse/ZOOKEEPER-3074)

Author: maoling <maoling199210191@sina.com>

Reviewers: hanm@apache.org, andor@apache.org, nkalmar@cloudera.com

Closes #556 from maoling/ZOOKEEPER-3074

2 months agoZOOKEEPER-3042: testFailedTxnAsPartOfQuorumLoss is flaky
Bogdan Kanivets [Tue, 17 Jul 2018 08:41:24 +0000 (10:41 +0200)] 
ZOOKEEPER-3042: testFailedTxnAsPartOfQuorumLoss is flaky

- relaxed check of outstanding proposals queue
- close clients after restart
- restart client after old leader restart

Author: Bogdan Kanivets <bkanivets@gmail.com>

Reviewers: andor@apache.org

Closes #571 from lavacat/testFailedTxnAsPartOfQuorumLoss-fix-master

2 months agoZOOKEEPER-2184: Zookeeper Client should re-resolve hosts when connection attempts...
Andor Molnar [Mon, 16 Jul 2018 03:45:45 +0000 (20:45 -0700)] 
ZOOKEEPER-2184: Zookeeper Client should re-resolve hosts when connection attempts fail

This is the master/3.5 port of #451

Author: Andor Molnar <andor@cloudera.com>
Author: Andor Molnar <andor@apache.org>

Reviewers: Michael Han <hanm@apache.org>, Flavio Junqueira <fpj@apache.org>, Edward Ribeiro <edward.ribeiro@gmail.com>, Mark Fenes <mfenes@cloudera.com>, Abraham Fine <afine@apache.org>

Closes #534 from anmolnar/ZOOKEEPER-2184_master

2 months agoZOOKEEPER-3033: MAVEN MIGRATION - Step 1.2 - create zk-recipes maven structure
Norbert Kalmar [Fri, 13 Jul 2018 12:58:03 +0000 (14:58 +0200)] 
ZOOKEEPER-3033: MAVEN MIGRATION - Step 1.2 - create zk-recipes maven structure

Create the zk-recipes maven structure for the maven migration.
Tested the recipes build with the new directory structure.

Author: Norbert Kalmar <nkalmar@yahoo.com>

Reviewers: andor@apache.org

Closes #564 from nkalmar/ZOOKEEPER-3033 and squashes the following commits:

c8c2e986 [Norbert Kalmar] ZOOKEEPER-3033 rename sub directories as well
d2b7f18d [Norbert Kalmar] ZOOKEEPER-3033 create zk-recipes maven structure

2 months agoZOOKEEPER-3087: Fix findbug warning introduced by ZOOKEEPER-3084.
Michael Han [Fri, 13 Jul 2018 10:47:39 +0000 (12:47 +0200)] 
ZOOKEEPER-3087: Fix findbug warning introduced by ZOOKEEPER-3084.

Author: Michael Han <hanm@apache.org>

Reviewers: andor@apache.org

Closes #568 from hanm/ZOOKEEPER-3087

2 months agoZOOKEEPER-2940: Deal with maxbuffer as it relates to large requests from clients
Andor Molnar [Wed, 11 Jul 2018 23:33:51 +0000 (16:33 -0700)] 
ZOOKEEPER-2940: Deal with maxbuffer as it relates to large requests from clients

https://issues.apache.org/jira/browse/ZOOKEEPER-2940

This PR covers the other part of Jute buffer monitoring which relates to client response sizes.

`jute.maxbuffer` is often set too small or the default (4MB) value is not enough to receive large responses from the server which causes the client unable to operate. e.g. `getChildren()` on a node which has lots of children or execution of a large multi.

These new metrics lets operators to monitor the size of generated responses to get an idea on how to properly set client's `jute.maxbuffer`.

The other part of monitoring which relates to proposal size has already been merged https://github.com/apache/zookeeper/pull/415

Author: Andor Molnar <andor@cloudera.com>

Reviewers: phunt@apache.org

Closes #466 from anmolnar/ZOOKEEPER-2940 and squashes the following commits:

29224d021 [Andor Molnar] ZOOKEEPER-2940. Test fixes
486d4961d [Andor Molnar] ZOOKEEPER-2940. Removed support of 4lw commands, because master is targeted
60916e09e [Andor Molnar] ZOOKEEPER-2940. Code review fixes
b39c4c815 [Andor Molnar] ZOOKEEPER-2940. Code review: variable names renamed to proposalStats
87e72ff31 [Andor Molnar] ZOOKEEPER-2940. Some code review cleanups
6f0adb124 [Andor Molnar] ZOOKEEPER-2940. Code review fixes: stats class renamed, added comments to unit test asserts, updated docs
bcb6d4ca5 [Andor Molnar] ZOOKEEPER-2940. Added new metrics to python files
77a5f0aa8 [Andor Molnar] ZOOKEEPER-2940. Fixed failing unit tests
2def61c30 [Andor Molnar] ZOOKEEPER-2940. Track size of client responses

Change-Id: I68df371097cc355b1f41b8dbb0168da4fa5dee43

2 months agoZOOKEEPER-3084: Exit when ZooKeeper cannot bind to the leader election port
Fangmin Lyu [Wed, 11 Jul 2018 04:04:17 +0000 (21:04 -0700)] 
ZOOKEEPER-3084: Exit when ZooKeeper cannot bind to the leader election port

Author: Fangmin Lyu <allenlyu@fb.com>

Reviewers: Andor Molnár <andor@apache.org>, Benjamin Reed <breed@apache.org>, Norbert Kalmar <nkalmar@cloudera.com>, Michael Han <hanm@apache.org>

Closes #562 from lvfangmin/ZOOKEEPER-3084

2 months agoZOOKEEPER-3073: fix couple of typos
Christine Poerschke [Tue, 10 Jul 2018 11:29:20 +0000 (04:29 -0700)] 
ZOOKEEPER-3073: fix couple of typos

Author: Christine Poerschke <cpoerschke@bloomberg.net>

Reviewers: Norbert Kalmar <nkalmar@cloudera.com>, 毛蛤丝 <maoling199210191@sina.com>, Benjamin Reed <breed@apache.org>

Closes #554 from cpoerschke/master-ZOOKEEPER-3073

2 months agoZOOKEEPER-3078: remove print_completion_queue
Kent R. Spillner [Tue, 10 Jul 2018 10:58:32 +0000 (03:58 -0700)] 
ZOOKEEPER-3078: remove print_completion_queue

The fprintf(LOGSTREAM, ...) calls cause compiler errors when building
with GCC 8: "error: null argument where non-null required".  This is
because since ZOOKEEPER-1400 (2013-05-19 commit 37973fab: Allow logging
via callback instead of raw FILE pointer) LOGSTREAM is defined as NULL.
However, the last use of print_completion_queue was removed 2008-01-10
in commit ffc4b0d4 (Changed zoo_get() signature, changed the watcher
callback signature, fixed zookeeper_close() resource leaks and race
conditions, fixed the race condition causing xid mismatch).  So we can
avoid the compiler errors by just removing print_completion_queue.

Signed-off-by: Kent R. Spillner <kspillneracm.org>
Author: Kent R. Spillner <kspillner@acm.org>

Reviewers: Norbert Kalmar <nkalmar@cloudera.com>, Andor Molnár <andor@apache.org>, Benjamin Reed <breed@apache.org>

Closes #558 from sl4mmy/zookeeper-3078

2 months agoZOOKEEPER-3079: avoid unsafe use of sprintf(3)
Kent R. Spillner [Tue, 10 Jul 2018 10:50:07 +0000 (03:50 -0700)] 
ZOOKEEPER-3079: avoid unsafe use of sprintf(3)

The function format_endpoint_info declares both addrstr and buf as 128
element char arrays, however on non-Windows platforms it calls
sprintf(3) to write into buf the value of addrstr followed by ':'
followed by the the port number.  This causes a compiler error when
building with GCC 8 because this could potentially overflow buf if the
value of addrstr was ever 127 characters long (or a little less
depending on how many digits are in port).  Of course, this couldn't
actually happen because addrstr is initialized by inet_ntop(3) which
won't write more than INET6_ADDRSTRLEN bytes (defined in <netinet/in.h>
on POSIX-compliant systems).  Of course, GCC doesn't know that, so let's
just declare addrstr as a char array of only size INET6_ADDRSTRLEN
instead of 128.

Signed-off-by: Kent R. Spillner <kspillneracm.org>
Author: Kent R. Spillner <kspillner@acm.org>

Reviewers: Benjamin Reed <breed@apache.org>

Closes #559 from sl4mmy/zookeeper-3079

2 months agoZOOKEEPER-2886: Permanent session moved error in multi-op only conne…
Fangmin Lyu [Tue, 10 Jul 2018 10:46:36 +0000 (03:46 -0700)] 
ZOOKEEPER-2886: Permanent session moved error in multi-op only conne…

…ctions

Author: Fangmin Lyu <allenlyu@fb.com>

Reviewers: Andor Molnár <andor@apache.org>, Benjamin Reed <breed@apache.org>

Closes #353 from lvfangmin/ZOOKEEPER-2886

2 months agoZOOKEEPER-2873: abort startup on invalid ports
Norbert Kalmar [Wed, 4 Jul 2018 15:11:39 +0000 (17:11 +0200)] 
ZOOKEEPER-2873: abort startup on invalid ports

This change will check each server.x config if the client and election port are the same. Currently, ZK will startup and a race for the ports will take place. There will be an error, but ZK will keep running (without the ability to elect a leader). Now, ZK will fail on startup.

Author: Norbert Kalmar <nkalmar@yahoo.com>

Reviewers: Andor Molnar <andor@apache.org>

Closes #549 from nkalmar/ZOOKEEPER-2873 and squashes the following commits:

022c8b70 [Norbert Kalmar] ZOOKEEPER-2873 modify test case to expect exception
60b8128d [Norbert Kalmar] ZOOKEEPER-2873 fix old test - ReconfigTest.testUnspecifiedClientAddress
3d747c08 [Norbert Kalmar] ZOOKEEPER-2873 abort startup on invalid ports

2 months agoZOOKEEPER-3022: MAVEN MIGRATION - Iteration 1 - docs, it
Norbert Kalmar [Wed, 4 Jul 2018 11:02:19 +0000 (13:02 +0200)] 
ZOOKEEPER-3022: MAVEN MIGRATION - Iteration 1 - docs, it

First iteration of the directory changes in maven migration.
This time, the empty zookeeper-it for future integration tests were created, and the docs source were moved to zookeeper-docs.
Tested with forest v0.9, documents generations were successful with ant.

Author: Norbert Kalmar <nkalmar@yahoo.com>

Reviewers: Andor Molnar <andor@apache.org>

Closes #550 from nkalmar/ZOOKEEPER-3022-1

2 months agoZOOKEEPER-3066: Expose on JMX of Followers the id of the current leader
Enrico Olivelli [Tue, 26 Jun 2018 09:18:38 +0000 (11:18 +0200)] 
ZOOKEEPER-3066: Expose on JMX of Followers the id of the current leader

Expose a new JMX attribute "isLeader" in RemotePeerBean and LocalPeerBean

Author: Enrico Olivelli <eolivelli@apache.org>

Reviewers: Andor Molnar <andor@apache.org>

Closes #546 from eolivelli/fix/ZOOKEEPER-3066-leader-jmx and squashes the following commits:

bf09e37d [Enrico Olivelli] clean up spaces
ded4ce20 [Enrico Olivelli] reorder imports
81d7bb1c [Enrico Olivelli] split tests into LocalPeerBeanTest and QuorumPeerTest
a1984ef1 [Enrico Olivelli] fix typo
eb8d1bea [Enrico Olivelli] split tests
86b116b0 [Enrico Olivelli] enhance tests
b5000efc [Enrico Olivelli] clean up test
43782fe5 [Enrico Olivelli] introduce mockito tests
2778e742 [Enrico Olivelli] revert "ZOOKEEPER-3066 add servers restart to test case"
5f120631 [Enrico Olivelli] ZOOKEEPER-3066 add servers restart to test case
067aed9e [Enrico Olivelli] ZOOKEEPER-3066 Expose on JMX of Followers the id of the current leader Enhance RemotePeerMXBean and LocalPeerMXBean by adding information about leadership

2 months agoZOOKEEPER-3059: EventThread leak in case of Sasl AuthFailed
Abhishek Singh Chouhan [Mon, 25 Jun 2018 10:30:19 +0000 (12:30 +0200)] 
ZOOKEEPER-3059: EventThread leak in case of Sasl AuthFailed

Since authFailed is similar to session expired and is considered a fatal event, we should clean up after ourselves once we get a AuthFailed, other wise this results in an unavoidable and un-cleanable thread leak  of EventThread since the close operation is also a no-op (we return after checking for isAlive).

Author: Abhishek Singh Chouhan <abhishekchouhan121@gmail.com>

Reviewers: Andor Molnar <andor@apache.org>

Closes #541 from abhishek-chouhan/master and squashes the following commits:

c54a83a4 [Abhishek Singh Chouhan] ZOOKEEPER-3059 EventThread leak in case of Sasl AuthFailed. Adding testcase for the scenario
c1d9d7af [Abhishek Singh Chouhan] ZOOKEEPER-3059 EventThread leak in case of Sasl AuthFailed

2 months ago[ZOOKEEPER-2368] Send a watch event is when a client is closed
Tim Ward [Wed, 20 Jun 2018 13:22:07 +0000 (15:22 +0200)] 
[ZOOKEEPER-2368] Send a watch event is when a client is closed

Currently, if the client is closed (rather than being remotely disconnected) there is no notification to the watcher. This means that asynchronous clients can end up waiting indefinitely for events that will never come. Watchers need to be aware that the client is closed for good.

Signed-off-by: Tim Ward <timothyjwardapache.org>
Note that this is a variation on a patch I produced some time ago, which was broadly accepted as a good idea, and didn't cause any problems for Curator, but was deemed by some to be too risky because it reused an existing KeeperState. This patch is therefore updated to use a new `Closed` KeeperState. Fixing this would allow me to avoid maintaining a separate fork of Zookeeper just to support this one feature!

Author: Tim Ward <timothyjward@apache.org>

Reviewers: Andor Molnar <andor@apache.org>

Closes #529 from timothyjward/ZOOKEEPER-2368 and squashes the following commits:

d7196d19 [Tim Ward] Review comments from @anmolnar
088056b4 [Tim Ward] Review comments from @enixon
7fad1d36 [Tim Ward] [ZOOKEEPER-2368] Send a watch event is when a client is closed

(cherry picked from commit 6748a0e3f58f2a398dec4c6988bc70ea4363b807)
Signed-off-by: Andor Molnar <andor@cloudera.com>
3 months agoZOOKEEPER-3009: Potential NPE in NIOServerCnxnFactory
LJ1043041006 [Fri, 15 Jun 2018 06:02:41 +0000 (23:02 -0700)] 
ZOOKEEPER-3009: Potential NPE in NIOServerCnxnFactory

We have developed a static analysis tool [NPEDetector](https://github.com/lujiefsi/NPEDetector) to find some potential NPE. Our analysis shows that NPE reason can be simple:some callees may return null directly in corner case(e.g. node crash , IO exception), some of their callers have  !=null check but some do not have.
### Bug:
Callee getSocketAddress can return null, may caused by node crash, network exception....
<pre>
    public InetAddress getSocketAddress() {
        if (sock.isOpen() == false) {
            return null;
        }
        return sock.socket().getInetAddress();
    }
</pre>
getSocketAddress has two callers:  removeCnxn and removeCnxn

caller removeCnxn has null check
<pre>
 public boolean removeCnxn(NIOServerCnxn cnxn) {
        //other code
        InetAddress addr = cnxn.getSocketAddress();
        if (addr != null) {
            Set<NIOServerCnxn> set = ipMap.get(addr);
            //other code
        }
     //other code
    }
</pre>

but caller addCnxn has the similar code, but don't have the null check:
<pre>
     private void addCnxn(NIOServerCnxn cnxn) {
         InetAddress addr = cnxn.getSocketAddress();
         Set<NIOServerCnxn> set = ipMap.get(addr);
        //other code
      }
</pre>
I commit a patch to fix it: adding an null checker in addCnxn, and throws a semantics IOException rather than the ugly NPE.  I think the IOException  is ok, because the caller of addCnxn has the handler code:
<pre>
  private void processAcceptedConnections() {
               //other code
               try {
                    addCnxn(cnxn);
               } catch (IOException e) {
                    // register, createConnection
                    cleanupSelectionKey(key);
                    fastCloseSock(accepted);
               }
             }
</pre>
Maybe i am wrong, please point out my error.

Author: LJ1043041006 <1239497420@qq.com>

Reviewers: Patrick Hunt <phunt@apache.org>, Allan Lyu <fangmin@apache.org>, Michael Han <hanm@apache.org>

Closes #525 from lujiefsi/ZOOKEEPER-3009

3 months agoZOOKEEPER-3063: Track outstanding changes with ArrayDeque
Yisong Yue [Fri, 15 Jun 2018 05:41:07 +0000 (22:41 -0700)] 
ZOOKEEPER-3063: Track outstanding changes with ArrayDeque

Changed outstandingChanges from ArrayList to ArrayDeque.

Author: Yisong Yue <yisongyue@fb.com>

Reviewers: Michael Han <hanm@apache.org>

Closes #543 from yisong-yue/ZOOKEEPER-3063

3 months agoZOOKEEPER-3019: add metric for slow fsyncs count
Norbert Kalmar [Fri, 8 Jun 2018 14:52:58 +0000 (16:52 +0200)] 
ZOOKEEPER-3019: add metric for slow fsyncs count

Added metric to count fsyncWarningThresholdMS exceed in FileTxnLog.commit(). Both jmx bean and Command can be used to get the stat.

Also updated the python standalone client and documentation.

Tested the py script, i.e.:
src/contrib/monitoring/check_zookeeper.py -o cacti -s "localhost:2181" -k zk_num_alive_connections
localhost_2181:1

rc/contrib/monitoring/check_zookeeper.py -o cacti -s "localhost:2181" -k zk_fsync_threshold_exceed_count
localhost_2181:0

mntr command now returns:
zk_version 3.6.0-SNAPSHOT-13c9f899ff62be6a2eacb28e522d06703f1dab08, built on 04/04/2018 12:09 GMT
zk_avg_latency 0
zk_max_latency 0
zk_min_latency 0
zk_packets_received 7
zk_packets_sent 6
zk_num_alive_connections 1
zk_outstanding_requests 0
zk_server_state standalone
zk_znode_count 5
zk_watch_count 0
zk_ephemerals_count 0
zk_approximate_data_size 44
zk_open_file_descriptor_count 61
zk_max_file_descriptor_count 10240
zk_fsync_threshold_exceed_count 0

Author: Norbert Kalmar <nkalmar@yahoo.com>

Reviewers: Andor Molnar <andor@apache.org>

Closes #501 from nkalmar/ZOOKEEPER-3019 and squashes the following commits:

067edf6a [Norbert Kalmar] ZOOKEEPER-3019 remove redundant log
7430dbce [Norbert Kalmar] ZOOKEEPER-3019 remove metric from 4ltr command as no longer supported
1916a418 [Norbert Kalmar] ZOOKEEPER-3019 add extra warning log
761450f9 [Norbert Kalmar] ZOOKEEPER-3019 remove fsync from py script stat check
3b22bb7b [Norbert Kalmar] ZOOKEEPER-3019 remove fsyncEsceed from stats
0be003a8 [Norbert Kalmar] ZOOKEEPER-3019 exclude serverStats IS chec from findbugs
b48d2958 [Norbert Kalmar] ZOOKEEPER-3019 add unit test and fix PR comments
fb4c7a31 [Norbert Kalmar] ZOOKEEPER-3019 add metric to track slow fsyncs count + update py script and docs

3 months agoZOOKEEPER-2968: Add C client code coverage tests
Mark Fenes [Thu, 31 May 2018 19:57:21 +0000 (12:57 -0700)] 
ZOOKEEPER-2968: Add C client code coverage tests

ZOOKEEPER-2968: Add C client code coverage tests

This PR adds a new ant target 'c_coverage_report' which generates coverage report for the ZK C client.
The report is generated to build/c_coverage/report in html format.
As a requirement, lcov has to be installed prior to running target 'c_coverage_report'.

An additional check was added to 'check-cppunit-makefile' to ensure that the Makefile gets deleted and regenerated without the coverage compiler flags when running targets without --enable-gcov.

Author: Mark Fenes <mfenes@cloudera.com>

Reviewers: phunt@apache.org

Closes #467 from mfenes/ZOOKEEPER-2968 and squashes the following commits:

d8757821a [Mark Fenes] ZOOKEEPER-2968: Add C client code coverage tests
3c9022622 [Mark Fenes] ZOOKEEPER-2968: Add C client code coverage tests

Change-Id: Id4bd05afbff2447c593427eff5f133c3d88048d3

3 months agoZOOKEEPER-2920: Upgrade OWASP Dependency Check to 3.2.1
Patrick Hunt [Thu, 31 May 2018 03:54:52 +0000 (20:54 -0700)] 
ZOOKEEPER-2920: Upgrade OWASP Dependency Check to 3.2.1

Updated and verified on all the active branches.

Change-Id: I750d7e576e8c731aab4cef26f6863eac6b1b8dc2

Author: Patrick Hunt <phunt@apache.org>

Reviewers: Michael Han <hanm@apache.org>

Closes #536 from phunt/ZOOKEEPER-2920

3 months agoZOOKEEPER-2317: Ensure that OSGi versions are valid
Tim Ward [Wed, 30 May 2018 00:23:11 +0000 (17:23 -0700)] 
ZOOKEEPER-2317: Ensure that OSGi versions are valid

Signed-off-by: Tim Ward <timothyjwardapache.org>
Author: Tim Ward <timothyjward@apache.org>

Reviewers: phunt@apache.org

Closes #531 from timothyjward/ZOOKEEPER-2317

Change-Id: I072db1e9de3bc1ad66e23be40bdea642866f6883
(cherry picked from commit 1c2c6849f0ebc6d56a1e987d3a637c0c050f7a53)
Signed-off-by: Patrick Hunt <phunt@apache.org>
3 months agoZOOKEEPER-3043: QuorumKerberosHostBasedAuthTest fails on Linux box: Unable to parse...
Enrico Olivelli [Wed, 30 May 2018 00:02:56 +0000 (17:02 -0700)] 
ZOOKEEPER-3043: QuorumKerberosHostBasedAuthTest fails on Linux box: Unable to parse:includedir /etc/krb5.conf.d/

Fixes QuorumKerberosHostBasedAuthTest, see ZOOKEEPER-3043

 - upgrade Kerby to 1.0.0
 - upgrade commons-io to 2.5, needed by Kerby
 - fix test dir in KerberosTestUtils

This should be also cherry-picked to 3.5 branch

Author: Enrico Olivelli <eolivelli@apache.org>

Reviewers: phunt@apache.org

Closes #524 from eolivelli/fix/ZOOKEEPER-3043 and squashes the following commits:

b4f31ad67 [Enrico Olivelli] upgrade libs
e224e823e [Enrico Olivelli] QuorumKerberosHostBasedAuthTest fails on Linux box: Unable to parse:includedir /etc/krb5.conf.d/  - upgrade Kerby to 1.0.0  - upgrade commons-io to 2.5, needed by Kerby  - fix test dir in KerberosTestUtils

Change-Id: Idaa0c05d1212c936b60fa2aa5ccb9dee114cce49

3 months agoZOOKEEPER-1919 Update the C implementation of removeWatches to have it match ZOOKEEPE...
Andor Molnar [Tue, 29 May 2018 23:27:43 +0000 (16:27 -0700)] 
ZOOKEEPER-1919 Update the C implementation of removeWatches to have it match ZOOKEEPER-1910

Existing patch on Jira has been rebased and applied to master.

Replaces #511

Author: Andor Molnar <andor@cloudera.com>

Reviewers: phunt@apache.org

Closes #522 from anmolnar/ZOOKEEPER-1919 and squashes the following commits:

f81a7608a [Andor Molnar] ZOOKEEPER-1919. Fixed indentation
d6455b062 [Andor Molnar] ZOOKEEPER-1919. Test fixes
769677693 [Andor Molnar] ZOOKEEPER-1919. Changes in C code

Change-Id: I2597854e4b28196a5dc5dc89553ced41537663eb

3 months agoZOOKEEPER-2993: Removed 'generated' line from .gitignore
asutosh936 [Wed, 23 May 2018 03:42:47 +0000 (20:42 -0700)] 
ZOOKEEPER-2993: Removed 'generated' line from .gitignore

Author: asutosh936 <asutosh.pandya@hotmail.com>

Reviewers: Abraham Fine <afine@apache.org>, Andor Molnár <andor@cloudera.com>, Michael Han <hanm@apache.org>

Closes #488 from asutosh936/ZOOKEEPER-2993

3 months agoZOOKEEPER-3051: Updated jackson to the latest version
Patrick Hunt [Wed, 23 May 2018 03:34:19 +0000 (20:34 -0700)] 
ZOOKEEPER-3051: Updated jackson to the latest version

Change-Id: Iec76a7df76f8e1928828fd716c4c25f48e887ba1

Author: Patrick Hunt <phunt@apache.org>

Reviewers: Michael Han <hanm@apache.org>

Closes #527 from phunt/ZOOKEEPER-3051

3 months agoZOOKEEPER-3050: update to the newest version of Jetty
Patrick Hunt [Tue, 22 May 2018 04:37:04 +0000 (21:37 -0700)] 
ZOOKEEPER-3050: update to the newest version of Jetty

Change-Id: I1f63c471e59a1ed9d1cf58e721fedf47452acc6b

Author: Patrick Hunt <phunt@apache.org>

Reviewers: Michael Han <hanm@apache.org>

Closes #526 from phunt/ZOOKEEPER-3050

3 months agoZOOKEEPER-3046: added junit timeout to precede 'ant' timeout
Bogdan Kanivets [Mon, 21 May 2018 18:11:40 +0000 (11:11 -0700)] 
ZOOKEEPER-3046: added junit timeout to precede 'ant' timeout

When 'ant' timeout triggers, output of the test isn't captured.
Related issue ZOOKEEPER-2916

Author: Bogdan Kanivets <bkanivets@gmail.com>

Reviewers: phunt@apache.org

Closes #523 from lavacat/test-timeouts

Change-Id: I4941451395bd4f35342582e9f4852d73104da138
(cherry picked from commit 831bfebaec2500c5672fd665020b517282d9a8a9)
Signed-off-by: Patrick Hunt <phunt@apache.org>
4 months agoZOOKEEPER-3041: Typo in error message, affects log analysis; charater --> character
Hugh O'Brien [Wed, 16 May 2018 17:30:31 +0000 (10:30 -0700)] 
ZOOKEEPER-3041: Typo in error message, affects log analysis; charater --> character

Author: Hugh O'Brien <hugh.obrien@jet.com>

Reviewers: phunt@apache.org

Closes #498 from hughobrienjet/master

Change-Id: I3f4145c5c3eb4052cd7f0859053bb3711dfdd64c

4 months agoZOOKEEPER-3039: TxnLogToolkit uses Scanner badly
Andor Molnar [Thu, 10 May 2018 20:14:24 +0000 (13:14 -0700)] 
ZOOKEEPER-3039: TxnLogToolkit uses Scanner badly

Fixed by creating a single Scanner for all queries in the main() method.

Author: Andor Molnar <andor@cloudera.com>

Reviewers: phunt@apache.org

Closes #517 from anmolnar/ZOOKEEPER-3039 and squashes the following commits:

a35e2e280 [Andor Molnar] ZOOKEEPER-3039. Optimize imports
a196443cb [Andor Molnar] ZOOKEEPER-3039. Use the same Scanner for all queries

Change-Id: Icf66888d4e6ad902615ed8ffde58a5a8fdd41237

4 months agoZOOKEEPER-3038: Cleanup some nitpicks in TTL implementation
Andor Molnar [Thu, 10 May 2018 04:13:16 +0000 (21:13 -0700)] 
ZOOKEEPER-3038: Cleanup some nitpicks in TTL implementation

A few nitpicks which needs to be cleaned up:

1. Rename OldEphemeralType --> EphemeralTypeEmulate353
2. Remove unused method: getTTL()
3. Remove unused import from QuorumPeer

Author: Andor Molnar <andor@cloudera.com>

Reviewers: phunt@apache.org

Closes #516 from anmolnar/ZOOKEEPER-3038

Change-Id: Iec537706a35863d53daa593da2b01f6e523ef466

4 months agoZOOKEEPER-2959: ignore accepted epoch and LEADERINFO ack from observers
Alexander Shraer [Thu, 10 May 2018 04:00:15 +0000 (21:00 -0700)] 
ZOOKEEPER-2959: ignore accepted epoch and LEADERINFO ack from observers

4 months agoZOOKEEPER-3012: Fix unit test: testDataDirAndDataLogDir should not use hardcode test...
Andor Molnar [Wed, 9 May 2018 22:14:18 +0000 (15:14 -0700)] 
ZOOKEEPER-3012: Fix unit test: testDataDirAndDataLogDir should not use hardcode test folders

A little bit more than just fixing the hardcoded folder names. Because the original issue was only on the 3.4 branch, the unit test has also been added to that branch only.

In this PR I add the fixed version of test to the master branch. Should be committed to 3.5 as well and I'll create a separate PR for 3.4

https://issues.apache.org/jira/browse/ZOOKEEPER-3012

Author: Andor Molnar <andor@cloudera.com>

Reviewers: phunt@apache.org

Closes #514 from anmolnar/ZOOKEEPER-3012

Change-Id: Iabba2630008158580a121a007a5c45b43a301315

4 months agoZOOKEEPER-2901: TTL Nodes don't work with Server IDs > 127
randgalt [Wed, 9 May 2018 21:57:41 +0000 (14:57 -0700)] 
ZOOKEEPER-2901: TTL Nodes don't work with Server IDs > 127

There was a major oversight when TTL nodes were implemented. The session ID generator for each server is seeded with the configured Server ID in the high byte. TTL Nodes were using the highest bit to denote a TTL node when used in the ephemeral owner. This meant that Server IDs > 127 that created ephemeral nodes would have those nodes always considered TTL nodes (with the TTL being essentially a random number).

This PR fixes the issue by disabling TTL Nodes by default. They must now be enabled in zoo.cfg. When TTL Nodes are enabled, the max Server ID changes from 255 to 254. This allows the high byte of a session ID stored in the ephemeral owner to use 0xFF to denote a TTL node.

About this change:

- The doc has been updated to note that TTL nodes are disabled by default and must be enabled via config. Also, the docs explains that when TTL nodes are enabled the max Server ID becomes 254
- The TTL implementation has been updated to use 0xFF in the high byte of the ephemeralOwner to denote a TTL node. This decreases the max TTL by an insignificant amount
- PrepRequestProcessor now throws `KeeperException.UnimplementedException` when an attempt to create a TTL node is made but the server has not been configured to enable TTL Nodes.
- QuorumPeer throws a `RuntimeException` if TTL Nodes are enabled but the Server ID > 254
- Tests have been added to validate all of this

IMPORTANT NOTE: TTL Nodes created in 3.5.3 will revert to EPHEMERAL with this change. We need to discuss the impact of this and consider workarounds, etc.

Author: randgalt <jordan@jordanzimmerman.com>
Author: Abraham Fine <afine@apache.org>

Reviewers: phunt@apache.org

Closes #377 from Randgalt/ZOOKEEPER-2901

Change-Id: I6923a22ecf847710d4e7151daf8c044734873f6b

4 months agoZOOKEEPER-2982: Re-try DNS hostname -> IP resolution if node connection fails
Eron Wright [Tue, 8 May 2018 22:54:02 +0000 (00:54 +0200)] 
ZOOKEEPER-2982: Re-try DNS hostname -> IP resolution if node connection fails

This PR ports a fix from the 3.4 to the master branch, that was originally made in ZOOKEEPER-1506.

Closes ZOOKEEPER-2982.

Author: Eron Wright <eron.wright@gmail.com>

Reviewers: Andor Molnar <andor@cloudera.com>, Abraham Fine <afine@apache.org>, Flavio Junqueira <fpj@apache.org>

Closes #513 from EronWright/ZOOKEEPER-2982-master

4 months agoZOOKEEPER-2988: NPE triggered if server receives a vote for a server …
Brian Nixon [Mon, 30 Apr 2018 04:34:57 +0000 (21:34 -0700)] 
ZOOKEEPER-2988: NPE triggered if server receives a vote for a server …

…id not in their voting view

Author: Brian Nixon <nixon@fb.com>

Reviewers: Abraham Fine <afine@apache.org>, Michael Han <hanm@apache.org>, Edward Ribeiro <edward.ribeiro@gmail.com>

Closes #476 from enixon/ZOOKEEPER-2988

4 months agoZOOKEEPER-3027: Accidently removed public API of FileTxnLog.setPreallocSize()
Andor Molnar [Fri, 27 Apr 2018 18:28:15 +0000 (11:28 -0700)] 
ZOOKEEPER-3027: Accidently removed public API of FileTxnLog.setPreallocSize()

In my latest commit regarding TxnLogToolkit there's a refactor to outsource file padding logic from FileTxnLog to a separate class:

https://github.com/apache/zookeeper/commit/126fb0f22d701cad58bf3123bf7d8f2219e60387#diff-89717124564925d61d29dd817bcdd915L147

Unfortunately public static method setPreallocSize(int) has also been moved to the new class, but it's being actively used by hadoop-common project too:

https://github.com/apache/hadoop/blob/trunk/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/ha/ClientBaseWithFixes.java#L384

I'd like to submit a patch to revert the deleted method which is going to call the new one, but will keep backward compatibility with Hadoop.

Author: Andor Molnar <andor@cloudera.com>

Reviewers: phunt@apache.org

Closes #509 from anmolnar/ZOOKEEPER-3027

Change-Id: I7333b5e24c2a78d10a5c5a74c181633050bd225d

4 months agoZOOKEEPER-3007: Potential NPE in ReferenceCountedACLCache#deserialize
gongleigl.gong [Thu, 26 Apr 2018 22:21:06 +0000 (15:21 -0700)] 
ZOOKEEPER-3007: Potential NPE in ReferenceCountedACLCache#deserialize

LJ1043041006 found a potential NPE in ZK

Author: gongleigl.gong <gongleigl.gong@qunar.com>
Author: brettkk <1099446733@qq.com>

Reviewers: phunt@apache.org

Closes #495 from brettKK/master and squashes the following commits:

7eb9e1c9b [gongleigl.gong] fix RTE message in ReferenceCountedACLCache class
0b858826d [gongleigl.gong] del logger error and fix error message
a12b13ff7 [brettkk] fix format
f7da9b9fa [brettkk] change ZOOK3007 to compare with apache master
cf9fb5f9a [brettkk] recover code
c4db5e25d [brettkk] recover zookeeper master same with apache:master
700dfb7f4 [gongleigl.gong] fix NPE bug
7d8d5230c [gongleigl.gong] d

Change-Id: I012c242e8566fcd54c1ebde1a30ec785b6aa31b0

4 months agoZOOKEEPER-2955: Enable Clover code coverage report
Mark Fenes [Wed, 25 Apr 2018 22:17:09 +0000 (15:17 -0700)] 
ZOOKEEPER-2955: Enable Clover code coverage report

ZOOKEEPER-2955: Enable Clover code coverage report

This PR configures OpenClover to generate Java code coverage reports.

To generate Java code coverage report run:
ant test-coverage-clover-java

For quick testing of this PR run:
ant -Dtestcase=test_file_name test-coverage-clover-java

Clover can also be run step-by-step:
ant -Drun.clover=true test-core-java
ant clover-report

Note: run.clover must not be set when building ZK for production use.

The reports will be placed under the build/test/clover/reports directory in HTML and XML formats.

Author: Mark Fenes <mfenes@cloudera.com>

Reviewers: phunt@apache.org

Closes #443 from mfenes/ZOOKEEPER-2955 and squashes the following commits:

321fc0152 [Mark Fenes] ZOOKEEPER-2955: Enable Clover code coverage report
ca68181b2 [Mark Fenes] ZOOKEEPER-2955: Enable Clover code coverage report
4cd1a3170 [Mark Fenes] Trigger notification
09872a66b [Mark Fenes] ZOOKEEPER-2955: Enable Clover code coverage report
3e0f2543c [Mark Fenes] Trigger notification
0cdb44442 [Mark Fenes] ZOOKEEPER-2955: Enable Clover code coverage report
270c12efc [Mark Fenes] ZOOKEEPER-2955: Enable Clover code coverage report
f59dcf8ad [Mark Fenes] ZOOKEEPER-2955: Enable Clover code coverage report

Change-Id: I089ca39224fa6012a299a46e4a35333ecc87ef35

4 months agoZOOKEEPER-2415: SessionTest is using Thread deprecated API
Andor Molnar [Tue, 24 Apr 2018 23:41:54 +0000 (16:41 -0700)] 
ZOOKEEPER-2415: SessionTest is using Thread deprecated API

Refactored `SessionTest` class.

`testSessionTimeout()` has been extracted to a separate class and split into multiple test methods to validate the different behaviours in a more readable way.

Removed deprecated Thread API `suspend()` and reduced the server ticktime / session timeout for better performance.

Hopefully this will help on test's flakyness too.

Author: Andor Molnar <andor@cloudera.com>

Reviewers: phunt@apache.org

Closes #497 from anmolnar/ZOOKEEPER-2415 and squashes the following commits:

5f9f76c67 [Andor Molnar] ZOOKEEPER-2415. Reverted even more changes, because we don't need custom tickTime either anymore
8ed14e511 [Andor Molnar] ZOOKEEPER-2415. Moved session expiration test from ZooKeeperTestableTest class because it's redundant and more reliable
cfd18b64b [Andor Molnar] ZOOKEEPER-2415. Reset changes which are unrelated to this patch
76520025c [Andor Molnar] ZOOKEEPER-2415. Revert changes related to DisconnectableZooKeeper, because we don't need it for the new tests
6b5d26d0d [Andor Molnar] ZOOKEEPER-2415. Use ClientBase base class for the refactored unit tests
6026c591b [Andor Molnar] ZOOKEEPER-2415. Refactor testSessionTimeout() to live in separate class and not to use deprecated API. Also improved performance.

Change-Id: I33906f43de52a06e95ba3f19f8087033cd5857e2

4 months agoZOOKEEPER-3025: cmake broken on windows - make `hashtable` search `include`
Andrew Schwartzmeyer [Tue, 24 Apr 2018 00:25:44 +0000 (17:25 -0700)] 
ZOOKEEPER-3025: cmake broken on windows - make `hashtable` search `include`

When ZOOKEEPER-2999 removed the directory side-effect of
`include_directories(include)`, and added it as a target-level include
to the `zookeeper` library, this broke the Windows build. It worked on
Linux (where the patch was tested) because `winconfig.h` and is not
included, but on Windows, the `hashtable` library included
`winconfig.h` (found in `include`) but no longer knew where to find
it. The fix is to add `include` to the `hashtable` library's list of
include directories.

Author: Andrew Schwartzmeyer <andrew@schwartzmeyer.com>

Reviewers: phunt@apache.org

Closes #505 from andschwa/ZOOKEEPER-3025

Change-Id: I657f8e234082068fb7adf56dad2d68cbb4bc1d31

4 months agoZOOKEEPER-2994: Tool required to recover log and snapshot entries with CRC errors
Andor Molnar [Mon, 23 Apr 2018 22:20:26 +0000 (15:20 -0700)] 
ZOOKEEPER-2994: Tool required to recover log and snapshot entries with CRC errors

https://issues.apache.org/jira/browse/ZOOKEEPER-2994

In the event  of ZooKeeper transaction log becomes corrupted and fail CRC checks (preventing startup) we should have a mechanism to get the cluster running again.

Previously we achieved this by loading the broken transaction log with a modified version of ZK with disabled CRC check and forced it to write new txn log files.

It has proven that once you end up with the corrupt txn log there is no way to recover except manually modifying the crc check. That's basically why the tool is needed.

It's called TxnLogToolkit, a new console application similar to LogFormatter and SnapshotFormatter, but it's intentionally separated to keep backward compatibility in the existing tools.

This PR contains TXN log tool only.

You probably also notice a refactoring to extract file padding logic from FileTxnLog to reuse in the new tool. Related code changes can be reviewed alone in a separate commit if preferred.

Author: Andor Molnar <andor@cloudera.com>

Reviewers: phunt@apache.org

Closes #487 from anmolnar/ZOOKEEPER-2994 and squashes the following commits:

221760ccc [Andor Molnar] ZOOKEEPER-2994. Added documentation and startup scripts
a69d7297b [Andor Molnar] ZOOKEEPER-2994. Fix findbugs warning
0b95efefd [Andor Molnar] ZOOKEEPER-2994. Fix for unit test
15fa45c68 [Andor Molnar] ZOOKEEPER-2994. Added padding, tool renamed to TxnLogToolkit, interactive mode, etc.
6a1ad0ec4 [Andor Molnar] ZOOKEEPER-2994. Refactor FileTxnLog's padding logic to separate class for reusability
0d089ccdd [Andor Molnar] ZOOKEEPER-2994. Added new tool TxnLogTool for txn log file recovery

Change-Id: I7560362633a7bc919ae6d3ca7e3588e196a1919c

5 months agoZOOKEEPER-3002: upgrade to jdk 8
Norbert Kalmar [Tue, 17 Apr 2018 04:57:24 +0000 (21:57 -0700)] 
ZOOKEEPER-3002: upgrade to jdk 8

Set minimum requirement to java 1.8
The code successfully compiled with 8.0.161-oracle and 8.0.163-zulu.

Checking the generated class file it reports 1.8 as version:
javap -verbose build/classes/org/apache/zookeeper/server/ServerStats.class | grep version
minor version: 0
major version: 52

Author: Norbert Kalmar <nkalmar@yahoo.com>

Reviewers: Andor Molnár <andor@cloudera.com>, Michael Han <hanm@apache.org>

Closes #502 from nkalmar/ZOOKEEPER-3002_java1.8

5 months agoZOOKEEPER-2999: CMake build should use target-level commands
proller [Mon, 16 Apr 2018 04:29:43 +0000 (21:29 -0700)] 
ZOOKEEPER-2999: CMake build should use target-level commands

CMake is using `include_directories`, which has global side effects,
instead of the more explicit `target_include_directories`, to include
directories per target (and with private or public scoping).

Furthermore, CMake should also use `CMAKE_CURRENT_SOURCE_DIR` over
`CMAKE_SOURCE_DIR` in order to allow inclusion in other projects via
`add_subdirectory()`, and we can reduce the minimally required CMake
version to 3.5 from 3.6.

Author: proller <proller@github.com>

Reviewers: Michael Han <hanm@apache.org>

Closes #486 from andschwa/ZOOKEEPER-2999

5 months agoZOOKEEPER-3017: Link libm in CMake on FreeBSD.
David Forsythe [Mon, 16 Apr 2018 04:22:25 +0000 (21:22 -0700)] 
ZOOKEEPER-3017: Link libm in CMake on FreeBSD.

andschwa

Per your suggestion here: https://reviews.apache.org/r/66384/

Author: David Forsythe <dforsyth@freebsd.org>

Reviewers: Andrew Schwartzmeyer <andrew@schwartzmeyer.com>, Andor Molnár <andor@cloudera.com>, Michael Han <hanm@apache.org>

Closes #499 from dforsyth/ZOOKEEPER-3017

5 months agoZOOKEEPER-3006: Potential NPE in ZKDatabase#calculateTxnLogSizeLimit
Edward Ribeiro [Fri, 6 Apr 2018 04:04:07 +0000 (21:04 -0700)] 
ZOOKEEPER-3006: Potential NPE in ZKDatabase#calculateTxnLogSizeLimit

LJ1043041006 found a potential NPE in ZKDatabase#calculateTxnLogSizeLimit: https://issues.apache.org/jira/browse/ZOOKEEPER-3006

```
//ZKDatabase
public long calculateTxnLogSizeLimit() {
    long snapSize = 0;
    try {
        snapSize = snapLog.findMostRecentSnapshot().length();
     } catch (IOException e) {
        LOG.error("Unable to get size of most recent snapshot");
    }
    return (long) (snapSize * snapshotSizeFactor);
}
```

 in FileTxnSnapLog#findMostRecentSnapshot(), it will return the result of  FileSnap#findMostRecentSnapshot:

```
// called by FileTxnSnapLog#findMostRecentSnapshot()
public File findMostRecentSnapshot() throws IOException {
        List<File> files = findNValidSnapshots(1);
        if (files.size() == 0) {
            return null;
        }
        return files.get(0);
}
```

So it will return null when the files sizes is 0, but ZKDatabase#calculateTxnLogSizeLimit has no null checker.

Author: Edward Ribeiro <edward.ribeiro@gmail.com>

Reviewers: Andor Molnár <andor@cloudera.com>, Michael Han <hanm@apache.org>, maoling <maoling199210191@sina.com>

Closes #493 from edwardoliveira/zk-3006-potential-npe

5 months agoZOOKEEPER-2997: CMake should not force static CRT linking
Andrew Schwartzmeyer [Mon, 26 Mar 2018 02:19:01 +0000 (19:19 -0700)] 
ZOOKEEPER-2997: CMake should not force static CRT linking

By removing this code, CMake will use its own defaults for the CRT
flags (e.g., `/MDd` for debug configurations). With it removed, the
user can override this behavior by setting the `CMAKE_CXX_FLAGS`
manually when configuring ZooKeeper.

Author: Andrew Schwartzmeyer <andrew@schwartzmeyer.com>

Reviewers: Michael Han <hanm@apache.org>

Closes #485 from andschwa/ZOOKEEPER-2997

5 months agoZOOKEEPER-2998: CMake declares incorrect ZooKeeper version
Andrew Schwartzmeyer [Mon, 26 Mar 2018 02:16:35 +0000 (19:16 -0700)] 
ZOOKEEPER-2998: CMake declares incorrect ZooKeeper version

This was not updated for the current development branch; it should be
3.6.0.

Author: Andrew Schwartzmeyer <andrew@schwartzmeyer.com>

Reviewers: Michael Han <hanm@apache.org>

Closes #484 from andschwa/ZOOKEEPER-2998

5 months agoZOOKEEPER-3001: Incorrect log message when try to delete container node
sel-fish [Mon, 26 Mar 2018 01:49:14 +0000 (18:49 -0700)] 
ZOOKEEPER-3001: Incorrect log message when try to delete container node

Missing `String.format`.

Author: sel-fish <fqlgy@hotmail.com>

Reviewers: Edward Ribeiro <edward.ribeiro@gmail.com>, Andor Molnár <andor@cloudera.com>, Michael Han <hanm@apache.org>, maoling <maoling199210191@sina.com>

Closes #492 from sel-fish/ZOOKEEPER-3001

6 months agoZOOKEEPER-2992: The eclipse build target fails due to protocol redirection: http...
Shawn Heisey [Mon, 5 Mar 2018 02:51:25 +0000 (18:51 -0800)] 
ZOOKEEPER-2992: The eclipse build target fails due to protocol redirection: http->https

ZOOKEEPER-2992 is the Jira issue.

Author: Shawn Heisey <elyograg@apache.org>

Reviewers: Edward Ribeiro <edward.ribeiro@gmail.com>, Andor Molnár <andor@cloudera.com>, Michael Han <hanm@apache.org>

Closes #479 from elyograg/master

6 months agoZOOKEEPER-2936: Removed duplicate code
asutosh936 [Fri, 2 Mar 2018 22:12:17 +0000 (14:12 -0800)] 
ZOOKEEPER-2936: Removed duplicate code

Author: asutosh936 <asutosh.pandya@hotmail.com>

Reviewers: Andor Molnár <andor@cloudera.com>, Abraham Fine <afine@apache.org>

Closes #473 from asutosh936/master and squashes the following commits:

6a17613be [asutosh936] ZOOKEEPER-2936 - Deleted duplicate code
a02ef3db8 [asutosh936] ZOOKEEPER-2936 - Removed duplicate code

6 months agoZOOKEEPER-2845: Apply commit log when restarting server.
Robert Evans [Fri, 23 Feb 2018 22:49:00 +0000 (14:49 -0800)] 
ZOOKEEPER-2845: Apply commit log when restarting server.

I will be creating a patch/pull request for 3.4 and 3.5 too, but I wanted to get a pull request up for others to look at ASAP.

I have a version of this based off of #310 at https://github.com/revans2/zookeeper/tree/ZOOKEEPER-2845-orig-test-patch but the test itself is flaky.  Frequently leader election does not go as planned on the test and it ends up failing but not because it ended up in an inconsistent state.

I am happy to answer any questions anyone has about the patch.

Author: Robert Evans <evans@yahoo-inc.com>

Reviewers: Abraham Fine <afine@apache.org>, Mark Fenes <mfenes@cloudera.com>, Andor Molnár <andor@cloudera.com>, Kishor Patil <kpatil@yahoo-inc.com>

Closes #453 from revans2/ZOOKEEPER-2845-master and squashes the following commits:

28c074a26 [Robert Evans] Addressed review comments
583e34435 [Robert Evans] Using framework APIs for test
f26a21ad6 [Robert Evans] Addressed review comments
93168d716 [Robert Evans] Added in a modified version of the test
3d042f981 [Robert Evans] ZOOKEEPER-2845: Apply commit log when restarting server.

6 months agoZOOKEEPER-2978: fix potential null pointer exception when deleting node
achimbab [Tue, 20 Feb 2018 22:38:00 +0000 (14:38 -0800)] 
ZOOKEEPER-2978: fix potential null pointer exception when deleting node

At line 518, 'existWatches.remove(clientPath)' is null because watches for clientPath is already removed.

Author: 07c00h <07c00h@gmail.com>

Reviewers: Abraham Fine <afine@apache.org>

Closes #461 from achimbab/master

7 months agoZOOKEEPER-2967: Add check to validate dataDir and dataLogDir parameters at startup
Mark Fenes [Wed, 14 Feb 2018 20:23:30 +0000 (12:23 -0800)] 
ZOOKEEPER-2967: Add check to validate dataDir and dataLogDir parameters at startup

ZOOKEEPER-2967: Add check to validate dataDir and dataLogDir parameters at startup

This PR adds a check to protect ZK against configuring dataDir and dataLogDir opposingly.

When FileTxnSnapLog is created, it checks if transaction log directory contains snapshot files or vice versa, snapshot directory contains transaction log files. If so, the check throws LogdirContentCheckException or SnapdirContentCheckException, respectively, which translates to DatadirException at ZK startup in QuorumPeerMain and ZooKeeperServerMain.

If the two directories are the same, then no check is done.

For testing, I've added 4 new unit tests which cover the following cases:

1. transaction log and snapshot directories are different and they are used correctly (no Exception)
2. transaction log and snapshot directories are the same (in this case no check is done)
3. transaction log and snapshot directories are different and transaction log directory contains snapshot files (LogdirContentCheckException -> ZK quits)
4. transaction log and snapshot directories are different and snapshot directory contains transaction log files (SnapdirContentCheckException -> ZK quits)

Author: Mark Fenes <mfenes@cloudera.com>

Reviewers: Andor Molnár <andor@cloudera.com>, Abraham Fine <afine@apache.org>

Closes #450 from mfenes/ZOOKEEPER-2967 and squashes the following commits:

3f2ce609a [Mark Fenes] Re-run checks
3dba7f14a [Mark Fenes] ZOOKEEPER-2967: Add check to validate dataDir and dataLogDir parameters at startup
50e7150b3 [Mark Fenes] Trigger notification
5f8ada87f [Mark Fenes] ZOOKEEPER-2967: Add check to validate dataDir and dataLogDir parameters at startup
36fc5bd46 [Mark Fenes] ZOOKEEPER-2967: Add check to validate dataDir and dataLogDir parameters at startup
eb76730cb [Mark Fenes] ZOOKEEPER-2967: Add check to validate dataDir and dataLogDir parameters at startup
81c026fe8 [Mark Fenes] ZOOKEEPER-2967: Add check to validate dataDir and dataLogDir parameters at startup

7 months agoZOOKEEPER-2939: Added last/min/max proposal size JMX beans
Andor Molnár [Wed, 7 Feb 2018 00:05:18 +0000 (16:05 -0800)] 
ZOOKEEPER-2939: Added last/min/max proposal size JMX beans

https://issues.apache.org/jira/browse/ZOOKEEPER-2939
- Refactor proposal serialization logic to a common place (SerializeUtils),
- Add JMX metric to monitor jute.maxbuffer setting
- Add JMX metric to monitor min/max/last size of generated proposals
- Add proposal stats info to 'stat' 4lw command
- Add proposal stats resetting to 'srst' 4lw command
- Unit tests

Author: Andor Molnár <andor@cloudera.com>
Author: Andor Molnar <andor@cloudera.com>

Reviewers: Patrick Hunt <phunt@apache.org>, Abraham Fine <afine@apache.org>

Closes #415 from anmolnar/ZOOKEEPER-2933 and squashes the following commits:

cf6ea5ecb [Andor Molnar] ZOOKEEPER-2933. Added proposal size statistics to 'mntr' command
cb28df6d6 [Andor Molnár] ZOOKEEPER-2939. Fixed findbugs issue: newline in format string
8e6b65f9f [Andor Molnár] ZOOKEEPER-2939: Added last/min/max proposal size JMX beans

7 months agoZOOKEEPER-2824: `FileChannel#size` info should be added to `FileTxnLog#commit` to...
Benedict Jin [Thu, 1 Feb 2018 23:26:58 +0000 (15:26 -0800)] 
ZOOKEEPER-2824: `FileChannel#size` info should be added to `FileTxnLog#commit` to solve the confuse that reason is too large log or too busy disk I/O

`FileChannel#size` info should be added to `FileTxnLog#commit` to solve the confuse that reason is too large log or too busy disk I/O

------
Example from jenkins [log](https://builds.apache.org/job/PreCommit-ZOOKEEPER-github-pr-build/830/console):
```java
2017-06-28 10:25:16,645 [myid:] - WARN  [SyncThread:0:FileTxnLog341] - fsync-ing the write ahead log (1945616 bytes) in SyncThread:0 took 2240ms which will adversely effect operation latency. See the ZooKeeper troubleshooting guide
```

Author: asdf2014 <benedictjin2016@gmail.com>
Author: asdf2014 <1571805553@qq.com>

Reviewers: Patrick Hunt <phunt@apache.org>, Andor Molnár <andor@cloudera.com>, Abraham Fine <afine@apache.org>

Closes #296 from asdf2014/ZOOKEEPER-2824 and squashes the following commits:

7cf4b6848 [asdf2014] Improve latency log description
dd2268f2f [asdf2014] ZOOKEEPER-2824: `FileChannel#size` info should be added to `FileTxnLog#commit` to solve the confuse that reason is too large log or too busy disk I/O

7 months agoZOOKEEPER-2949: using hostname and port to create SSLEngine
Feng Shaobao [Tue, 30 Jan 2018 20:56:37 +0000 (12:56 -0800)] 
ZOOKEEPER-2949: using hostname and port to create SSLEngine

If the server has more than one host name, and serve each host name with different certificates. then the ssl client must provide the server name in the ssl Hello packet, to tell the server which certificate to use.
This is especially important when the client connect to a load balancer with different backend services.

https://en.wikipedia.org/wiki/Server_Name_Indication

Author: f00231050 <shaobao.feng@huawei.com>

Reviewers: Andor Molnár <andor@cloudera.com>, Abraham Fine <afine@apache.org>

Closes #423 from abel-von/ZOOKEEPER-2949