bookkeeper.git
21 hours ago[STATS] [DOC] Add @StatsDoc annotation for ledger cache stats master
Sijie Guo [Mon, 17 Dec 2018 13:18:49 +0000 (21:18 +0800)] 
[STATS] [DOC] Add @StatsDoc annotation for ledger cache stats

Descriptions of the changes in this PR:

*Motivation*

As part of [BP-36](https://github.com/apache/bookkeeper/issues/1785), this PR is to document the ledger cache stats.

*Changes*

- convert ledger cache stats to use StatsDoc for documenting metrics

Master Issue: #1785

Reviewers: Enrico Olivelli <eolivelli@gmail.com>, Jia Zhai <None>

This closes #1872 from sijie/ledgercache_stats

2 days ago[STATS] [DOC] Add @StatsDoc annotation for garbage collector stats
Sijie Guo [Sun, 16 Dec 2018 08:20:35 +0000 (16:20 +0800)] 
[STATS] [DOC] Add @StatsDoc annotation for garbage collector stats

Descriptions of the changes in this PR:

*Motivation*

As part of [BP-36](https://github.com/apache/bookkeeper/issues/1785), this PR is to document gc stats.

*Changes*

- convert gc stats to use StatsDoc for documenting metrics

Master Issue: #1785

Reviewers: Jia Zhai <None>, Enrico Olivelli <eolivelli@gmail.com>

This closes #1875 from sijie/gc_stats

4 days agoIssue #1884: (@W-5697664@) dir_*_usage stats are reported as 0 ...
Pasha Kuznetsov [Fri, 14 Dec 2018 01:45:11 +0000 (17:45 -0800)] 
Issue #1884: (@W-5697664@) dir_*_usage stats are reported as 0 ...

for read-only bookies after a restart

### Motivation

Fixing the Issue #1884:

When a read-only bookie is restarted it keeps reporting `dir_*_usage`
stats as `0` until it becomes writable again.

This is caused by the `LedgerDirsMonitor.check` only updating
`diskUsages` if there are any writable dirs, or if the total usage
goes below the low water mark, otherwise relying on previously filled
values which are `0` after a bookie is restarted.

### Changes

* Change the `LedgerDirsMonitor.check` to update `diskUsages`
  even when there are no writable dirs.
* Add new `testLedgerDirsMonitorStartReadOnly` testing this scenario.
* Simplify previous tests checking read-only since `diskUsages`
  are now updated regardless if a bookie is in read-only mode.

jvrao reddycharan

Reviewers: Sijie Guo <sijie@apache.org>, Charan Reddy Guttapalem <reddycharan18@gmail.com>

This closes #1885 from pasha-kuznetsov/issue-1884-dir-usage-ro-restart, closes #1884

4 days agoBP-37: Improve configuration management for better documentation
Sijie Guo [Fri, 14 Dec 2018 01:43:33 +0000 (09:43 +0800)] 
BP-37: Improve configuration management for better documentation

Descriptions of the changes in this PR:

*Motivation*

One common task in developing bookkeeper is to make sure all the configuration
settings are well documented, and the configuration file we ship in each release
is in-sync with the code itself.

However maintaining things in-sync is non-trivial. This proposal is exploring
a new way to manage configuration settings for better documentation.

Master Issue: #1867

Reviewers: Matteo Merli <mmerli@apache.org>, Enrico Olivelli <eolivelli@gmail.com>, Jia Zhai <None>

This closes #1868 from sijie/bp37_conf_documentation

4 days ago[STATS] [DOC] Add @StatsDoc annotation for journal stats
Sijie Guo [Fri, 14 Dec 2018 01:28:26 +0000 (09:28 +0800)] 
[STATS] [DOC] Add @StatsDoc annotation for journal stats

Descriptions of the changes in this PR:

*Motivation*

As part of [BP-36](https://github.com/apache/bookkeeper/issues/1785),
this PR is to document the journal stats.

*Changes*

- convert journal stats to use StatsDoc for documenting metrics

Master Issue: #1785

Reviewers: Jia Zhai <None>, Enrico Olivelli <eolivelli@gmail.com>

This closes #1870 from sijie/statsdoc_journal

4 days ago[STATS] [DOC] Add @StatsDoc annotation for bookkeeper autorecovery stats
Sijie Guo [Thu, 13 Dec 2018 14:50:44 +0000 (22:50 +0800)] 
[STATS] [DOC] Add @StatsDoc annotation for bookkeeper autorecovery stats

Descriptions of the changes in this PR:

*Motivation*

As part of [BP-36](https://github.com/apache/bookkeeper/issues/1785), this PR is to document bookkeeper autorecovery stats.

*Changes*

- convert bookkeeper autorecovery stats to use StatsDoc for documenting metrics

Master Issue: #1785

Reviewers: Jia Zhai <None>

This closes #1879 from sijie/replication_stats

4 days ago[STATS] [DOC] Add @StatsDoc annotation for db ledger storage stats
Sijie Guo [Thu, 13 Dec 2018 14:49:02 +0000 (22:49 +0800)] 
[STATS] [DOC] Add @StatsDoc annotation for db ledger storage stats

Descriptions of the changes in this PR:

*Motivation*

As part of [BP-36](https://github.com/apache/bookkeeper/issues/1785), this PR is to document the db ledger storage stats.

*Changes*

- convert db ledger storage stats to use StatsDoc for documenting metrics

Master Issue: #1785

Reviewers: Jia Zhai <None>, Enrico Olivelli <eolivelli@gmail.com>

This closes #1874 from sijie/ldb_stats

4 days agoAdd get method for rest endpoint gc
Jia Zhai [Thu, 13 Dec 2018 14:45:09 +0000 (22:45 +0800)] 
Add get method for rest endpoint gc

Descriptions of the changes in this PR:

Add get method for rest endpoint gc to get force triggered GC running status on Bookie.
true -- force triggered GC is running on Bookie. false -- not running.

### Motivation

This is base on PR #1838, and in the review comments sijie is suggested to add get methods.

### Changes

Add get method for rest endpoint gc and unit test.

Reviewers: Sijie Guo <sijie@apache.org>

This closes #1840 from jiazhai/rest_gc_get

4 days ago[STATS] [DOC] Add @StatsDoc annotation for memtable stats
Sijie Guo [Thu, 13 Dec 2018 14:41:34 +0000 (22:41 +0800)] 
[STATS] [DOC] Add @StatsDoc annotation for memtable stats

Descriptions of the changes in this PR:

*Motivation*

As part of [BP-36](https://github.com/apache/bookkeeper/issues/1785), this PR is to document the memtable stats.

*Changes*

- convert memtable stats to use StatsDoc for documenting metrics

Master Issue: #1785

Reviewers: Jia Zhai <None>, Enrico Olivelli <eolivelli@gmail.com>

This closes #1873 from sijie/memtable_stats

6 days ago[STATS] [DOC] Add @StatsDoc annotation for bookkeeper client stats
Sijie Guo [Wed, 12 Dec 2018 01:23:07 +0000 (09:23 +0800)] 
[STATS] [DOC] Add @StatsDoc annotation for bookkeeper client stats

Descriptions of the changes in this PR:

*Motivation*

As part of [BP-36](https://github.com/apache/bookkeeper/issues/1785), this PR is to document bookkeeper client stats.

*Changes*

- convert bookkeeper client stats to use StatsDoc for documenting metrics

Master Issue: #1785

Reviewers: Enrico Olivelli <eolivelli@gmail.com>

This closes #1878 from sijie/client_stats

6 days ago[STATS] [DOC] Add @StatsDoc annotation for interleaved ledger storage stats
Sijie Guo [Wed, 12 Dec 2018 01:20:52 +0000 (09:20 +0800)] 
[STATS] [DOC] Add @StatsDoc annotation for interleaved ledger storage stats

Descriptions of the changes in this PR:

*Motivation*

As part of [BP-36](https://github.com/apache/bookkeeper/issues/1785), this PR is to document interleaved ledger storage stats.

*Changes*

- convert interleaved ledger storage stats to use StatsDoc for documenting metrics

Master Issue: #1785

Reviewers: Enrico Olivelli <eolivelli@gmail.com>

This closes #1877 from sijie/interleaved_stats

6 days ago[STATS] [DOC] Add @StatsDoc annotation for bookie state manager stats
Sijie Guo [Wed, 12 Dec 2018 01:19:29 +0000 (09:19 +0800)] 
[STATS] [DOC] Add @StatsDoc annotation for bookie state manager stats

Descriptions of the changes in this PR:

*Motivation*

As part of [BP-36](https://github.com/apache/bookkeeper/issues/1785), this PR is to document bookie state manager stats.

*Changes*

- convert bookie state manager stats to use StatsDoc for documenting metrics

Master Issue: #1785

Reviewers: Enrico Olivelli <eolivelli@gmail.com>

This closes #1876 from sijie/bookie_state_stats

6 days ago[STATS] [DOC] Add @StatsDoc annotation for entrylogger stats
Sijie Guo [Wed, 12 Dec 2018 01:14:54 +0000 (09:14 +0800)] 
[STATS] [DOC] Add @StatsDoc annotation for entrylogger stats

Descriptions of the changes in this PR:

*Motivation*

As part of [BP-36](https://github.com/apache/bookkeeper/issues/1785),
this PR is to document the entrylogger stats.

*Changes*

- convert entrylogger stats to use StatsDoc for documenting metrics

Master Issue: #1785

Reviewers: Enrico Olivelli <eolivelli@gmail.com>, Jia Zhai <None>

This closes #1871 from sijie/document_ledgerstorage_stats

6 days ago[CI] Update precommit job captions with trigger phrase
Sijie Guo [Wed, 12 Dec 2018 01:13:19 +0000 (09:13 +0800)] 
[CI] Update precommit job captions with trigger phrase

Descriptions of the changes in this PR:

*Motivation*

Sometime people don't know how to retrigger a bookkeeper precommit job.

*Changes*

This PR is adding the trigger phrase to the job caption. so people will know
how to retrigger the jobs in the PR itself.

Reviewers: Enrico Olivelli <eolivelli@gmail.com>

This closes #1881 from sijie/update_jenkins_for_self_instructions

6 days agoISSUE #1770: Add local checker for Sorted/InterleavedLedgerStorage
Samuel Just [Tue, 11 Dec 2018 20:43:25 +0000 (12:43 -0800)] 
ISSUE #1770: Add local checker for Sorted/InterleavedLedgerStorage

The main goal of this patch is the ScrubberService LifecycleComponent
which runs in the background periodically verifying the internal
consistency of the LedgerStorage. To get that to work:

- LedgerStorage now has a localConsistencyCheck call with
implementations in Interleaved and Sorted.

- In service of that implementation, LedgerCache gains an interface for
iterating safely over the entries of a ledger with a way of handling
concurrently modified or deleted ledgers with corresponding
modifications to LedgerEntryPage for detecting deletion.

- EntryLogger has been refactored to permit checking the correctness
(and throwing a descriptive exception in case of a problem) of an entry
without actually reading it for use within localConsistencyCheck.

- The two mechanisms for iterating over a ledger's entries in
BookieShell have both been replaced with the new single implementation
(InterleavedLedgerStorageTest now has a test checking the output of the
affected command.)

- Misc changes to *LogCompactor to support tests in
InterleavedLedgerStorageTest.

Because the consistency check needs to run in the background and hold
LEP instances potentially for a relatively long time, a delete may
overlap with the scan of an LEP page. As part of this patch,
IndexInMemPageMgr and LedgerEntryPage now permit an LEP to be marked
deleted and not added back to the set of free pages until released.

This patch also adds an option to run the checker on startup (defaults
to false).

(bug W-5188823)
(bug W-5153309)
(rev cguttapalem)
Signed-off-by: Samuel Just <sjustsalesforce.com>
Reviewers: Enrico Olivelli <eolivelli@gmail.com>, Sijie Guo <sijie@apache.org>

This closes #1819 from athanatos/forupstream/wip-1770, closes #1770

11 days agoLedger manager factories initialized with max metadata version
Ivan Kelly [Thu, 6 Dec 2018 20:02:41 +0000 (21:02 +0100)] 
Ledger manager factories initialized with max metadata version

In dce4fd4 the max metadata format version was put in the
configuration which was then used to create ledger managers. This is
not safe though, as it there are multiple paths which through which
ledger manager factories are created and some may not see this
configuration modification. For example, on a new cluster where there
is no preexisting layout, the layout isn't written until after the
ledger manager factory has been created.

This patch changes LedgerManagerFactory#initialize to explicitly
require that the max ledger metadata format is specified in the call.

Master issue: #723

Reviewers: Enrico Olivelli <eolivelli@gmail.com>

This closes #1865 from ivankelly/explicit-max

11 days agochangingEnsemble should be negated before calling unset success
Ivan Kelly [Thu, 6 Dec 2018 13:20:22 +0000 (14:20 +0100)] 
changingEnsemble should be negated before calling unset success

If the first pending add op is completed, but does not have the
replaced bookie in its write set, callbacks are triggered straight
away.

Previously this would then hang forever, as the changingEnsemble would
be true. This patch sets changingEnsemble to false before calling
unsetSuccessAndSendWriteRequest so that if callbacks are triggered
straight away, they can actually complete. It also moves the call to
unsetSuccessAndSendWriteRequest outside of the metadataLock so that
the callbacks don't run inside the lock.

Reviewers: Sijie Guo <sijie@apache.org>

This closes #1857 from ivankelly/block-order

11 days agoFix selectFromNetworkLocation in RackawareEnsemblePlacementPolicyImpl
Charan Reddy Guttapalem [Thu, 6 Dec 2018 13:16:50 +0000 (05:16 -0800)] 
Fix selectFromNetworkLocation in RackawareEnsemblePlacementPolicyImpl

Descriptions of the changes in this PR:

Since beginning, selectFromNetworkLocation(excludeRacks, excludeBookies,..)
method kind of ignores predicate/ensemble passed to that method
https://github.com/apache/bookkeeper/blob/branch-4.7/bookkeeper-server/src/main/java/org/apache/bookkeeper/client/RackawareEnsemblePlacementPolicyImpl.java#L694.

This was kind of ok, because so far effectively this method is called from only
one place - https://github.com/apache/bookkeeper/blob/master/bookkeeper-server/src/main/java/org/apache/bookkeeper/client/RackawareEnsemblePlacementPolicyImpl.java#L612,
which passes TruePredicate.INSTANCE and EnsembleForReplacementWithNoConstraints.INSTANCE.

But it is not ideal to ignore those parameters in selectFromNetworkLocation(excludeRacks, excludeBookies,..),
from future usage perspective. So passing the received predicate and ensemble to the underlying calls.

Reviewers: Sijie Guo <sijie@apache.org>, Samuel Just <sjust@salesforce.com>

This closes #1862 from reddycharan/fixrackaware

12 days ago[RELEASE] [WEBSITE] Add documentation for release 4.7.3
Sijie Guo [Wed, 5 Dec 2018 20:35:18 +0000 (12:35 -0800)] 
[RELEASE] [WEBSITE] Add documentation for release 4.7.3

*Motivation*

Add documentation for release 4.7.3

Descriptions of the changes in this PR:

Reviewers: Matteo Merli <mmerli@apache.org>

This closes #1859 from sijie/website_473

13 days agoUpdate BookKeeper version in Docker file for 4.8.1 release
Enrico Olivelli [Tue, 4 Dec 2018 19:28:53 +0000 (20:28 +0100)] 
Update BookKeeper version in Docker file for 4.8.1 release

Descriptions of the changes in this PR:
Change version from 4.8.0 in 4.8.1 on Dockerfile in branch-4.8

### Motivation

Distribute new Docker images for 4.8.1 release

Reviewers: Sijie Guo <sijieapache.org>

This closes #1851 from eolivelli/fix/docker-4.8.1

Reviewers: Sijie Guo <sijie@apache.org>

This closes #1854 from eolivelli/fix/pick-481-docker

13 days ago[RELEASE NOTES] Release Notes for 4.7.3
Sijie Guo [Tue, 4 Dec 2018 18:55:15 +0000 (10:55 -0800)] 
[RELEASE NOTES] Release Notes for 4.7.3

Reviewers: Enrico Olivelli <eolivelli@gmail.com>

This closes #1850 from sijie/release_notes_473

13 days agoremove misleading comment
Sijie Guo [Tue, 4 Dec 2018 18:53:41 +0000 (10:53 -0800)] 
remove misleading comment

Descriptions of the changes in this PR:

*Motivation*

ParallelRead is actually used internally at ledger recovery. It is used at production.

*Changes*

Removed misleading comment.

Reviewers: Enrico Olivelli <eolivelli@gmail.com>, Jia Zhai <None>

This closes #1671 from sijie/remove_misleading_comment

13 days agoAdd max ledger metadata format version to layout
Ivan Kelly [Tue, 4 Dec 2018 11:03:14 +0000 (12:03 +0100)] 
Add max ledger metadata format version to layout

The max ledger metadata format version is the maximum format version
that will be used to write ledger metadata. By setting it in the
ledger layout it becomes a cluster-wide configuration which is
initialized along with the cluster. Any cluster initialized with the
current code will end up with version 2. For this cluster serde will
only ever serialize with up to version 2 of the ledger metadata
format, so all clients that understand version 2 will continue to
work, even as the software version increases and new metadata formats
become available (such as the binary metadata format coming soon).

Currently there is no handling in LedgerMetadataSerDe, because we
don't have a new version, but when there is, it will use
```
Math.min(maxLedgerMetadataFormatVersion,
         metadata.getMetadataFormatVersion())
```
to decide which serialization method to use.

Reviewers: Enrico Olivelli <eolivelli@gmail.com>, Sijie Guo <sijie@apache.org>

This closes #1858 from ivankelly/format-version

2 weeks ago[TABLE SERVICE] remove extra code
snow4young [Mon, 3 Dec 2018 19:41:01 +0000 (03:41 +0800)] 
[TABLE SERVICE] remove extra code

Descriptions of the changes in this PR:
review code and found extra code.

### Motivation
clean code

### Changes

clean extra code

Master Issue: #<master-issue-number>

Reviewers: Sijie Guo <sijie@apache.org>, Enrico Olivelli <eolivelli@gmail.com>

This closes #1856 from xujianhai/master

2 weeks agoMark 4.8.1 as latest release
Enrico Olivelli [Mon, 3 Dec 2018 15:07:16 +0000 (16:07 +0100)] 
Mark 4.8.1 as latest release

Descriptions of the changes in this PR:

Change website configuration so that the downloads make suggest 4.8.1 and 4.8.0

Reviewers: Sijie Guo <sijie@apache.org>

This closes #1855 from eolivelli/fix/mark-481-latest

2 weeks agoUsers of LedgerMetadata should use the api interface
Ivan Kelly [Mon, 3 Dec 2018 12:37:03 +0000 (13:37 +0100)] 
Users of LedgerMetadata should use the api interface

All users to LedgerMetadata should use api.LedgerMetadata rather than
client.LedgerMetadata.

Some methods have been promoted to the interface to allow this.

Other methods have been moved out to a utility class that acts purely
on api.LedgerMetadata.

client.LedgerMetadata has been renamed to LedgerMetadataImpl.

Master issue: #723

Reviewers: Enrico Olivelli <eolivelli@gmail.com>, Sijie Guo <sijie@apache.org>

This closes #1852 from ivankelly/kill-store-ctime

2 weeks agoLedgerMetadata should require digest and password together
Ivan Kelly [Sat, 1 Dec 2018 00:29:53 +0000 (01:29 +0100)] 
LedgerMetadata should require digest and password together

There's never a case when setting the digest and password where you
only have one, but not the other.

The patch adds validation in LedgerMetadata that if you provide one, you
provide the other. The only case where you don't provide these is when
using pre-4.1.0 (i think) metadata.

Master issue: #281

Reviewers: Sijie Guo <sijie@apache.org>, Enrico Olivelli <eolivelli@gmail.com>

This closes #1836 from ivankelly/builder-pw

2 weeks ago[TABLE SERVICE] add a bookie registration based grpc name resolver
Sijie Guo [Sat, 1 Dec 2018 00:29:01 +0000 (16:29 -0800)] 
[TABLE SERVICE] add a bookie registration based grpc name resolver

Descriptions of the changes in this PR:

*Motivation*

Table service is using grpc name resolver to figure out the alive servers serving table service.
Currently it is using default dns name resolver. In the context of Pulsar, since brokers talk
to bookies via zookeeper service discovery, it is making sense for brokers talk to table service
via zookeeper service discovery. So this PR is to add a bookie registration based grpc name resolver.

*Changes*

Implement a bookie-registration library based grpc name resolver.

Reviewers: Jia Zhai <None>

This closes #1842 from sijie/add_zookeeper_resolver

2 weeks agoLet OS choose port for vertx test
Ivan Kelly [Sat, 1 Dec 2018 00:06:29 +0000 (01:06 +0100)] 
Let OS choose port for vertx test

The previous implementation was searching for a open port by
repeatedly trying to startServer on ports starting at 8080. However,
after the first attempt fails, the Vertx instance in VertxHttpServer
is broken and the test hangs. 8080 is a very common port to have stuff
running on, so these hangs have happened to be repeatedly.

This fix is to allow the OS to choose the port, by specifying 0 as the
listening port and querying afterwards.

Issue: #1821

Reviewers: Sijie Guo <sijie@apache.org>, Enrico Olivelli <eolivelli@gmail.com>

This closes #1853 from ivankelly/vertx-8080

2 weeks agoMove serialization code out of LedgerMetadata
Ivan Kelly [Fri, 30 Nov 2018 10:25:40 +0000 (11:25 +0100)] 
Move serialization code out of LedgerMetadata

This PR moves the serialization code out of LedgerMetadata so that it
can later be adapted to run different serialization code depending on
the environment.

Notable non-refactor changes:
- LedgerMetadata#toString no longer uses #serialize because it's no
  longer available. Instead it uses the ToString helper from guava.
  byte[] fields are now base64 encoded.
- There's a new state enum and getter in api.LedgerMetadata. This is
  so that LedgerMetadataFormat can be removed from
  client.LedgerMetadata.

Master issue: #723

Reviewers: Sijie Guo <sijie@apache.org>

This closes #1848 from ivankelly/refactor-md-serde

2 weeks agoSet default sizes of DbLedgerStorage read and write cache to be proportional to JVM...
Matteo Merli [Fri, 30 Nov 2018 08:27:23 +0000 (00:27 -0800)] 
Set default sizes of DbLedgerStorage read and write cache to be proportional to JVM direct memory

### Motivation

To simplify Bookie configuration when using `DbLedgerStorage`, set the memory size defaults for WriteCache, ReadCache and RocksDB block cache to be pegged to the available direct memory configured in the JVM.

User can always configure specific values and override this behavior.

Reviewers: Enrico Olivelli <eolivelli@gmail.com>, Sijie Guo <sijie@apache.org>

This closes #1813 from merlimat/auto-conf-db-storage-mem

2 weeks ago[CI] increase timeout of website build to 120 mins
Sijie Guo [Fri, 30 Nov 2018 06:51:05 +0000 (22:51 -0800)] 
[CI] increase timeout of website build to 120 mins

Descriptions of the changes in this PR:

*Motivation*

Since we have more releases, the build time for website is increasing to beyond 30 min.
Increase it to 120 mins for now

Reviewers: Enrico Olivelli <eolivelli@gmail.com>, Jia Zhai <None>

This closes #1844 from sijie/change_website_buildtime

2 weeks agoRename LedgerMetadataBuilder#closingAt to parameter order (#1835)
Ivan Kelly [Thu, 29 Nov 2018 09:07:00 +0000 (10:07 +0100)] 
Rename LedgerMetadataBuilder#closingAt to  parameter order (#1835)

* Rename LedgerMetadataBuilder#closingAt to clarify parameter order

The two parameters are long, which can be confusing.

Master issue: #281

2 weeks ago[STATS] Add @StatsDoc annotation for bookie server request stats
Sijie Guo [Thu, 29 Nov 2018 02:41:34 +0000 (18:41 -0800)] 
[STATS] Add @StatsDoc annotation for bookie server request stats

Descriptions of the changes in this PR:

*Motivation*

As part of [BP-36](https://github.com/apache/bookkeeper/issues/1785), this PR is to document the request stats
for bookkeeper server.

*Changes*

- add `parent` and `happensAfter` in StatsDoc
- convert bookie request stats to use StatsDoc for documenting metrics

Master Issue: #1785

Reviewers: Jia Zhai <None>

This closes #1839 from sijie/bp36_add_parent_and_happensafter

2 weeks ago[RELEASE] fix docker mount volume issue
Sijie Guo [Thu, 29 Nov 2018 02:10:38 +0000 (18:10 -0800)] 
[RELEASE] fix docker mount volume issue

Descriptions of the changes in this PR:

* Motivation

 #1674 introduced a regression for running release scripts on mac.
 the destination should be "/home/${USER}" rather than ${LOCAL_HOME}.
 because the docker os is linux. Otherwise the gpg keys can not propagated
 correctly from host machine to docker.

* Changes

 Use `/home/${USER}` as the destination path

Reviewers: Jia Zhai <None>

This closes #1845 from sijie/fix_release_scripts

2 weeks ago[LEDGER STORAGE] DbLedgerStorage should do periodical flush
Sijie Guo [Wed, 28 Nov 2018 20:07:29 +0000 (12:07 -0800)] 
[LEDGER STORAGE] DbLedgerStorage should do periodical flush

Descriptions of the changes in this PR:

*Motivation*

DbLedgerStorage doesn't drive checkpoint itself. so currently DbLedgerStorage flush only
happens either when write-cache is full or entry log file rotated. The correctness is still
maintained. However the behavior is different from original yahoo behavior.

*Changes*

Revert the behavior back to original periodical flush

Reviewers: Matteo Merli <mmerli@apache.org>, Jia Zhai <None>

This closes #1843 from sijie/dbledgerstorage_sync

2 weeks agoOnly publish suspect ledgers if they have missing fragments
Ivan Kelly [Wed, 28 Nov 2018 15:31:13 +0000 (16:31 +0100)] 
Only publish suspect ledgers if they have missing fragments

This is a fix for a flake in
AuditorPeriodicCheckTest#testIndexCorruption. Auditor#checkAllLedgers()
runs a check on all ledgers, passing ProcessLostFragmentsCb as a
callback to LedgerChecker#checkLedger for each one.

LedgerChecker#checkLedger triggers the callback on completion,
regardless of whether there are fragments missing on not. Previously,
ProcessLostFragments was not checking if there were lost fragments
before publishing the ledger as suspected in zookeeper.

The flake triggered as there were always two ledgers that existed when
the check occurred, both would be reported as suspected, and it was
random which would be returned while polling for underreplicated
ledgers.

The fix is to check that something is actually underreplicated before
publishing.

Reviewers: Sijie Guo <sijie@apache.org>

This closes #1834 from ivankelly/auditor-periodic-flake

2 weeks agoUse ${sha1} instead of ${ghprbActualCommit} for Pre-commit Jobs
Enrico Olivelli [Wed, 28 Nov 2018 08:19:52 +0000 (09:19 +0100)] 
Use ${sha1} instead of ${ghprbActualCommit} for Pre-commit Jobs

Descriptions of the changes in this PR:

### Motivation

According to  the documentation of the GitHub Pull Request plugin:
- ${sha1} means a commit which is the result of merging the PR branch with the target branch
- ${ghprbActualCommit} is directly the PR branch

So currently we are not testing the PR branch against the target branch, but only the branch "as it is"

see:
https://www.google.com/url?sa=t&rct=j&q=&esrc=s&source=web&cd=4&ved=2ahUKEwje0PjpnuDeAhUF2SwKHXN4BgYQFjADegQIAxAB&url=https%3A%2F%2Fwiki.jenkins.io%2Fdisplay%2FJENKINS%2FGitHub%2Bpull%2Brequest%2Bbuilder%2Bplugin&usg=AOvVaw2XvPL5ynRYnqVEWqpe9cs1

### Changes

Use ${sha1} instead of ${ghprbActualCommit} for Pre-commit Jobs

Reviewers: Ivan Kelly <ivank@apache.org>, Sijie Guo

This closes #1818 from eolivelli/fix/jenskin-use-sha1

2 weeks ago[UTILS] Move ReflectionUtils to bookkeeper-common module
Sijie Guo [Wed, 28 Nov 2018 06:58:12 +0000 (22:58 -0800)] 
[UTILS] Move ReflectionUtils to bookkeeper-common module

Descriptions of the changes in this PR:

*Motivation*

RefelectionUtils contains helpers for loading classes from relections.
It is useful across the project. However the class is in `bookkeeper-server` module only.

*Changes*

Move this class to `bookkeeper-common` module

Reviewers: Jia Zhai <None>

This closes #1841 from sijie/move_reflection_utils

3 weeks agoAdd rest endpoint trigger_gc to trigger GC on Bookie
Jia Zhai [Tue, 27 Nov 2018 10:16:19 +0000 (18:16 +0800)] 
Add rest endpoint trigger_gc to trigger GC on Bookie

Descriptions of the changes in this PR:

Add rest endpoint trigger_gc to trigger GC on Bookie

### Motivation

Some times user would like to trigger GC manually instead of waiting to the timeout or disk full.

Reviewers: Enrico Olivelli <eolivelli@gmail.com>, Sijie Guo <sijie@apache.org>

This closes #1838 from jiazhai/rest_force_gc

3 weeks agoRelease notes for 4.8.1
Enrico Olivelli [Mon, 26 Nov 2018 08:51:38 +0000 (09:51 +0100)] 
Release notes for 4.8.1

Release notes for 4.8.1

The commit to review is d09296c589b8a188937833ca51a4b24ea337a901

Reviewers: Jia Zhai <None>, Matteo Merli <mmerli@apache.org>, Sijie Guo <sijie@apache.org>

This closes #1795 from eolivelli/fix/481-release-notes

3 weeks agoRemove MathUtils.now()
Sijie Guo [Sun, 25 Nov 2018 05:29:12 +0000 (21:29 -0800)] 
Remove MathUtils.now()

Descriptions of the changes in this PR:

*Motivation*

`MathUtils.now()` using System.nanoTime doesn't provide accurate time. It is used
for measuring pupose. However since `nanoTime` can have numeric overflow, so when
it is used for converting into milliseconds, it is misleading and error-prone. A
lot of places using `MathUtis.now` can all replaced with `System.currentTimeMillis()`.

It leads to unknown behavior on compactions. examples is shown in the following figure.

<img width="1157" alt="wechatimg180" src="https://user-images.githubusercontent.com/1217863/48965961-d860b600-ef7c-11e8-9394-1d51cef5c68c.png">

example: this graph shows the major_compaction_count. major compaction is supposed to run every day. but in the graph, there is no major compaction occuring in 4 days.

*Changes*

Remove `MathUtils.now()` and replace it with `System.currentTimeMillis()`.

Reviewers: Jia Zhai <None>, Enrico Olivelli <eolivelli@gmail.com>

This closes #1837 from sijie/remove_mathutils_now

3 weeks agoMake custom metadata final
Ivan Kelly [Fri, 23 Nov 2018 18:50:47 +0000 (18:50 +0000)] 
Make custom metadata final

Master issue: #281

Reviewers: Enrico Olivelli <eolivelli@gmail.com>

This closes #1833 from ivankelly/immut-cust

3 weeks agoRemove LedgerMetadata copy constructor
Ivan Kelly [Fri, 23 Nov 2018 16:44:35 +0000 (16:44 +0000)] 
Remove LedgerMetadata copy constructor

A copy constructor makes no sense when it's not possible to mutate the object.

Master issue: #281

Reviewers: Enrico Olivelli <eolivelli@gmail.com>

This closes #1832 from ivankelly/kill-copy

3 weeks agoPrepare website structure for 4.8.1 release
Enrico Olivelli [Fri, 23 Nov 2018 14:57:35 +0000 (15:57 +0100)] 
Prepare website structure for 4.8.1 release

Signed-off-by: eolivelli <eolivelliapache.org>
Descriptions of the changes in this PR:

### Motivation

Prepare the wesite for 4.8.1 release

### Changes

Create the structure for docs for 4.8.1

Reviewers: Sijie Guo <sijie@apache.org>

This closes #1790 from eolivelli/fix/site-481-structure

3 weeks agoMake LedgerMetadata fields for closing immutable
Ivan Kelly [Fri, 23 Nov 2018 14:32:31 +0000 (14:32 +0000)] 
Make LedgerMetadata fields for closing immutable

Master issue: #281

Reviewers: Enrico Olivelli <eolivelli@gmail.com>, Sijie Guo <sijie@apache.org>

This closes #1831 from ivankelly/close-immut

3 weeks agoRemove LedgerMetadata methods modifying ensembles
Ivan Kelly [Fri, 23 Nov 2018 00:04:44 +0000 (00:04 +0000)] 
Remove LedgerMetadata methods modifying ensembles

Remove any methods in LedgerMetadata that modify the ensemble. With
this change the ensembles are 100% immutable.

Master issue: #281

Reviewers: Enrico Olivelli <eolivelli@gmail.com>, Sijie Guo <sijie@apache.org>

This closes #1830 from ivankelly/no-mod-ensemble

3 weeks ago[SCRIPTS] improve bookkeeper script to better handle standalone command
Sijie Guo [Fri, 23 Nov 2018 00:03:15 +0000 (16:03 -0800)] 
[SCRIPTS] improve bookkeeper script to better handle standalone command

Descriptions of the changes in this PR:

*Motivation*

`bin/bookkeeper standalone` is broken when a release package is built without including `stream` profile.

*Changes*

`standalone` is a service component including everything. so fail the command if it can't locate corresponding components.

Related Issues: #1822

Reviewers: Ivan Kelly <ivank@apache.org>, Enrico Olivelli <eolivelli@gmail.com>

This closes #1823 from sijie/refactor_bookkeeper_scripts

3 weeks agoMove utility method from LedgerMetadata to test
Ivan Kelly [Thu, 22 Nov 2018 19:20:42 +0000 (19:20 +0000)] 
Move utility method from LedgerMetadata to test

The method is only used in the test, so it should live there.

Master issue: #281

Reviewers: Sijie Guo <sijie@apache.org>, Enrico Olivelli <eolivelli@gmail.com>

This closes #1829 from ivankelly/move-junk

3 weeks agoRemove duplication logic for 'minNumRacksPerWriteQuorum' handling in RackawareEnsembl...
Charan Reddy Guttapalem [Thu, 22 Nov 2018 19:18:42 +0000 (11:18 -0800)] 
Remove duplication logic for 'minNumRacksPerWriteQuorum' handling in RackawareEnsemblePlacementPolicyImpl

Descriptions of the changes in this PR:

With this change
https://github.com/apache/bookkeeper/commit/9ba4c4e0d8be770e03110a958fb8b75a65ae0f59
we introduced 'minNumRacksPerWriteQuorum' config option. To handle that, logic is added in
RackawareEnsemblePlacementPolicyImpl.newEnsembleInternal and RackQuorumCoverageSet. But in
retrospect, this is kind of duplicate logic and changes made in RackawareEnsemblePlacementPolicyImpl.newEnsembleInternal
is not really needed, because anyhow 'apply' of predicate (RRTopologyAwareCoverageEnsemble) is called, which calls
'apply' method on all the concerned RackQuorumCoverageSet.

Reviewers: Sijie Guo <sijie@apache.org>

This closes #1810 from reddycharan/revertrackawarechanges

3 weeks agoMake most LedgerMetadata fields final
Ivan Kelly [Thu, 22 Nov 2018 17:45:48 +0000 (17:45 +0000)] 
Make most LedgerMetadata fields final

Make most fields in LedgerMetadata final. The ones which I have not
changed in this patch require a more involved change, so they'll come
in separate PRs.

Master issue: #281

Reviewers: Enrico Olivelli <eolivelli@gmail.com>

This closes #1828 from ivankelly/mostly-final

3 weeks agoRemove LedgerMetadata constructors except one for builder
Ivan Kelly [Thu, 22 Nov 2018 15:23:30 +0000 (15:23 +0000)] 
Remove LedgerMetadata constructors except one for builder

LedgerMetadata shouldn't generally be created outside the client,
except for testing. In the case where it is, the builder should be
used to construct it.

I've left the copy constructor for now, as I don't feel comfortable
removing it until all fields are final, which will occur soon.

Master issue: #281

Reviewers: Enrico Olivelli <eolivelli@gmail.com>

This closes #1827 from ivankelly/kill-constructors

3 weeks agoFix flake in AuditorPeriodicBookieCheckTest
Ivan Kelly [Thu, 22 Nov 2018 11:15:35 +0000 (11:15 +0000)] 
Fix flake in AuditorPeriodicBookieCheckTest

The flake was occurring because the bookie checker was trying to
connect to a TCP endpoint that didn't respond (1.1.1.1) and was
waiting for the whole tcp connect timeout (10sec), while the test was
waiting 10 seconds for the success condition to occur. The success
condition often occurred just after the test fails.

The solution was to bring the connect timeout for the client down to
500ms, giving the auditor plenty of time to register the
underreplicated ledger.

I guess this used to pass in the past because maybe 1.1.1.1 was
actually rejecting packets instead of dropping them, and these changed
when cloudflare took over the address. I changed the endpoint to
192.0.2.0/24 range (TEST-NET) to avoid a similar scenario in the
future.

Reviewers: Enrico Olivelli <eolivelli@gmail.com>, Sijie Guo <sijie@apache.org>

This closes #1826 from ivankelly/auditor-bookie-flake

3 weeks agoLedgerMetadata#parseConfig uses Metadata Builder
Ivan Kelly [Thu, 22 Nov 2018 01:42:45 +0000 (02:42 +0100)] 
LedgerMetadata#parseConfig uses Metadata Builder

parseConfig is one of the main places that mutates member fields of
LedgerMetadata. This change removes these mutates to make it use
LedgerMetadataBuilder instead.

Master issue: #281

Reviewers: Sijie Guo <sijie@apache.org>

This closes #1825 from ivankelly/parse-builder

3 weeks agoAbstractZkLedgerManager should catch all exceptions from parseConfig
Ivan Kelly [Wed, 21 Nov 2018 17:24:59 +0000 (18:24 +0100)] 
AbstractZkLedgerManager should catch all exceptions from parseConfig

And always complete the request if an exception does occur, rather
than throwing it out to the higher level, and hanging the request
forever.

Reviewers: Enrico Olivelli <eolivelli@gmail.com>

This closes #1824 from ivankelly/catch-all-exception-zk

4 weeks agoChange LedgerManager to use CompletableFuture
Ivan Kelly [Mon, 19 Nov 2018 14:23:36 +0000 (15:23 +0100)] 
Change LedgerManager to use CompletableFuture

All new uses of LedgerManager are creating GenericCallbackFutures to
pass in as the callback. This patch cuts out the middleman, and makes
LedgerManager return CompletableFutures itself.

The patch only touches the CRUD operations, and not
LedgerManager#asyncProcessLedgers, which I may tackle in a later PR.

Master issue: #281

Reviewers: Sijie Guo <sijie@apache.org>

This closes #1809 from ivankelly/metastore-futures

4 weeks agoRollback snakeyaml version (Fixes IT tests)
Ivan Kelly [Mon, 19 Nov 2018 10:26:39 +0000 (11:26 +0100)] 
Rollback snakeyaml version (Fixes IT tests)

The stats gen (#1787) change introduced a version of snakeyaml which
is incompatible with arquillian-cube (between 1.19 and 1.23 they
remove some methods).

This was picked up by the integration tests, but overriden to submit.

This change pins the snakeyaml version at 1.19, thereby allowing the
integration tests to run again.

Reviewers: Enrico Olivelli <eolivelli@gmail.com>

This closes #1817 from ivankelly/fix-it

4 weeks agoIntroduce condensed encoding format for availabilityOfEntriesOfLedger
Charan Reddy Guttapalem [Sat, 17 Nov 2018 17:11:31 +0000 (09:11 -0800)] 
Introduce condensed encoding format for availabilityOfEntriesOfLedger

Descriptions of the changes in this PR:

- this condensed encoding format will take fewer bytes than initially
proposed bit vector.

Reviewers: Sijie Guo <sijie@apache.org>, Enrico Olivelli <eolivelli@gmail.com>

This closes #1814 from reddycharan/updatebpdoc

4 weeks ago[BOOKIE] Fix sorted ledger storage rotating entry log files too frequent
Sijie Guo [Fri, 16 Nov 2018 22:10:26 +0000 (14:10 -0800)] 
[BOOKIE] Fix sorted ledger storage rotating entry log files too frequent

Descriptions of the changes in this PR:

*Motivation*

A strong behavior was observed when using sorted ledger storage with single entry log manager on production:

"the entry log files are rotated very frequently and small entry log files are produced".

The problem was introduced due to #1410.

At current entry logger, when a new entry log file is created, EntryLogger will notify its listeners
that a new entry log file is rotated via [`onRotateEntryLog`](https://github.com/apache/bookkeeper/blob/master/bookkeeper-server/src/main/java/org/apache/bookkeeper/bookie/EntryLogManagerBase.java#L152).

Before the change in #1410, `SortedLedgerStorage` inherits from `InterleavedLedgerStorage`.
So when a new entry log file is rotated, `SortedLedgerStorage` is notified.

However after the change in #1410, `SortedLedgerStorage` doesn't inherits `InterleavedLedgerStorage` anymore.
Instead, the relationship is changed to composition. `SortedLedgerStorage` is composed using an interleaved ledger
storage. So the entrylog listener contract was broken. `SortedLedgerStorage` will not receive any `onRotateEntryLog`
notification any more.

*Changes*

When `SortedLedgerStorage` initializes, it passes its own entry log listener down to the interleaved ledger storage.
So entry logger can notify the right person for entry log rotations.

*Tests*

Existing tests should cover most of the case. Looking for how to add new test cases.

Reviewers: Enrico Olivelli <eolivelli@gmail.com>, Charan Reddy Guttapalem <reddycharan18@gmail.com>, Andrey Yegorov <None>

This closes #1807 from sijie/fix_rotation_behavior

4 weeks agoFix cpu-affinity module build on jdk10+
Enrico Olivelli [Fri, 16 Nov 2018 22:09:31 +0000 (23:09 +0100)] 
Fix cpu-affinity module build on jdk10+

Port tricks from circe-checksum to cpu-affinity module in order to make the build pass on JDK11

Reviewers: Sijie Guo <sijie@apache.org>, Matteo Merli <mmerli@apache.org>

This closes #1816 from eolivelli/fix/jdk11-cpu-affinity-build

4 weeks agoAdded BlockingQueue implementation based on JCtools
Matteo Merli [Wed, 14 Nov 2018 23:12:57 +0000 (15:12 -0800)] 
Added BlockingQueue implementation based on JCtools

### Motivation

Add a `BlockingQueue` implementation that is suitable for low latency and low contention.

Key points:
 * Optimized for multiple producers and single consumer
 * When waiting for entries, the thread is blocked with busy wait to avoid context switch.

(This will be used in subsequent PRs to optionally enable it)

Reviewers: Enrico Olivelli <eolivelli@gmail.com>, Sijie Guo <sijie@apache.org>

This closes #1682 from merlimat/blocking-queue

4 weeks agoAdded module to enable CPU affinity
Matteo Merli [Tue, 13 Nov 2018 18:35:24 +0000 (10:35 -0800)] 
Added module to enable CPU affinity

### Motivation

This is part of a set of changes aimed at reducing latency in BK at the expense of other aspects (eg: max throughput). While not intended to be used as default settings, they might be good to have whenever the latency becomes critical.

Pinning a thread to a particular CPU will ensure no other process will execute on that CPU reducing all scheduler induced context switches that will cause latency jittery.

A given thread that wants to get pinned to a CPU just needs to call:

```java
CpuAffinity.acquireCore();
```

It's called `acquireCore()` because it will also disable hyper-threading on the pinned cpu.

Subsequent PRs will use this module to have the option to pin critical threads to available CPUs.

### Changes
 * Added JNI module to call `sched_setaffinity()` to pin a thread to a particular CPU
 * Automatically discover available isolated CPUs
 * Acquire file-based locks to allow multiple processes on same machine to acquire CPUs independently.

Reviewers: Ivan Kelly <ivank@apache.org>, Enrico Olivelli <eolivelli@gmail.com>, Sijie Guo <sijie@apache.org>

This closes #1641 from merlimat/cpu-affinity

5 weeks ago[STATS] introduce `StatsDoc` annotation for better documenting metrics exposed by...
Sijie Guo [Tue, 13 Nov 2018 08:54:56 +0000 (00:54 -0800)] 
[STATS] introduce `StatsDoc` annotation for better documenting metrics exposed by bookkeeper

Descriptions of the changes in this PR:

### Motivation

A common ask from people using bookkeeper is how they can monitor bookies and bookkeeper clients, what kind of metrics that bookkeeper exposes
and what are the important metrics. Currently bookkeeper doesn't provide any metrics page for guiding people on monitoring bookkeeper services.

In order to help people on this, we need to provide a few documentation pages about metrics. However if we just write such pages, those pages
can quickly get out-of-dated when code is changed.

### Changes

- Introduce an annotation `StatsDoc` for annotating the counters/gauges/opstats in the source code.
- Provide a tool to generate the stats and their documentation into a yaml file.

The yaml file will be used by the website for rendering a metrics reference page.

### Results

```
"server":
  "bookie_BOOKIE_READ_ENTRY_BYTES":
    "description": |-
      bytes stats of ReadEntry on a bookie
    "type": |-
      OPSTATS
  "bookie_WRITE_BYTES":
    "description": |-
      total bytes written to a bookie
    "type": |-
      COUNTER
  "bookie_BOOKIE_ADD_ENTRY":
    "description": |-
      operations stats of AddEntry on a bookie
    "type": |-
      OPSTATS
  "bookie_BOOKIE_RECOVERY_ADD_ENTRY":
    "description": |-
      operation stats of RecoveryAddEntry on a bookie
    "type": |-
      OPSTATS
  "bookie_BOOKIE_ADD_ENTRY_BYTES":
    "description": |-
      bytes stats of AddEntry on a bookie
    "type": |-
      OPSTATS
  "bookie_BOOKIE_FORCE_LEDGER":
    "description": |-
      total force operations occurred on a bookie
    "type": |-
      COUNTER
  "bookie_READ_BYTES":
    "description": |-
      total bytes read from a bookie
    "type": |-
      COUNTER
  "bookie_BOOKIE_READ_ENTRY":
    "description": |-
      operation stats of ReadEntry on a bookie
    "type": |-
      OPSTATS
```

Master Issue: #1786

Reviewers: Ivan Kelly <ivank@apache.org>, Jia Zhai <None>

This closes #1787 from sijie/stats_generator

5 weeks agoBP-36: Stats documentation annotation
Sijie Guo [Tue, 13 Nov 2018 08:53:33 +0000 (00:53 -0800)] 
BP-36: Stats documentation annotation

Descriptions of the changes in this PR:

*Motivation*

A common ask from people using bookkeeper is how they can monitor bookies and bookkeeper clients, what kind of metrics that bookkeeper exposes
and what are the important metrics. Currently bookkeeper doesn't provide any metrics page for guiding people on monitoring bookkeeper services.

In order to help people on this, we need to provide a few documentation pages about metrics. However if we just write such pages, those pages
can quickly get out-of-dated when code is changed. The proposal here is to seek a programming way for generating metrics related pages.

Master Issue: #1785

Reviewers: Sijie Guo <sijie@apache.org>, Jia Zhai <None>, Enrico Olivelli <eolivelli@gmail.com>, Andrey Yegorov <None>

This closes #1786 from sijie/bp_stats_generator

5 weeks agoMove version out of LedgerMetadata
Ivan Kelly [Mon, 12 Nov 2018 20:11:59 +0000 (21:11 +0100)] 
Move version out of LedgerMetadata

The version is a property of the metadata store and not of the
LedgerMetadata object itself. Putting it in the LedgerMetadata forces
that LedgerMetadata to be mutable, as it needs to be updated before
being sent to the LedgerManager.

This change moves version out of LedgerMetadata and modifies the
LedgerManager to use Versioned<LedgerMetadata>.

This is a large change, but almost purely mechanical.

TestHttpService has been modified to remove a preexisting flake in a
test which had to be modified for this change.

Master issue: #281

Reviewers: Enrico Olivelli <eolivelli@gmail.com>, Sijie Guo <sijie@apache.org>

This closes #1797 from ivankelly/kill-set-version

5 weeks ago[tools] package bookkeeper tools into a separated distribution
Sijie Guo [Mon, 12 Nov 2018 12:54:34 +0000 (04:54 -0800)] 
[tools] package bookkeeper tools into a separated distribution

Descriptions of the changes in this PR:

*Motivation*

Server distribution contains a lot of stuffs that doesn’t need to run bkctl and bookkeeper shell, such as stats providers, http servers and many other dependencies.

At many environments, you want to deliver a set of tools to your customers to interact with or operate bookkeeper clusters. They don’t care about server side stuffs and ask them to use a server package to run a tool makes things confused.

*changes*

Create a new ‘bkctl’ package that only contains bookkeeper shell and new cli.

Reviewers: Charan Reddy Guttapalem <reddycharan18@gmail.com>, Enrico Olivelli <eolivelli@gmail.com>, Matteo Merli <mmerli@apache.org>

This closes #1798 from sijie/package_bookkeeper_tool

5 weeks agoISSUE #1799: bkctl is broken with default build options
Sijie Guo [Mon, 12 Nov 2018 12:42:59 +0000 (04:42 -0800)] 
ISSUE #1799: bkctl is broken with default build options

Descriptions of the changes in this PR:

*Motivation*

`bkctl` is designed in a modularized way for extensibility.
it loads command groups via ServiceLoader. However current build
profile doesn't leverage this extensibility. Instead it hardcodes
all the commands in one service load file. So if `bkctl` is built
without `-Dstream`, it will broke.

*Changes*

- move `ledger` related commands to `tools/ledger`
- generate the service load file by concating `commands` files from each module's resources directory.

*Results*

bkctl works for all build profiles.

- without `-Dstream`

```
$ bin/bkctl

bkctl interacts and operates Apache BookKeeper clusters

Usage:  bkctl [flags] [command group] [commands]

Commands:

    bookie      Commands on operating a single bookie
    bookies     Commands on operating a cluster of bookies
    cookie      Commands on operating cookies
    ledger      Commands on interacting with ledgers

    help        Display help information about it

Flags:

    -c, --conf
        Configuration file

    -n, --namespace
        Namespace scope to run commands (only valid for table service for now)

    -u, --service-uri
        Service Uri

    -h, --help
        Display help information

Use "bkctl [command] --help" or "bkctl help [command]" for more information
about a command
```

- with `-Dstream`

```
$ bin/bkctl

bkctl interacts and operates Apache BookKeeper clusters

Usage:  bkctl [flags] [command group] [commands]

Commands:

    bookie          Commands on operating a single bookie
    bookies         Commands on operating a cluster of bookies
    cluster         Commands on administrating bookkeeper clusters
    cookie          Commands on operating cookies
    ledger          Commands on interacting with ledgers
    namespace       Commands on operating namespaces
    table           Commands on interacting with tables
    tables          Commands on operating tables

    help            Display help information about it

Flags:

    -c, --conf
        Configuration file

    -n, --namespace
        Namespace scope to run commands (only valid for table service for now)

    -u, --service-uri
        Service Uri

    -h, --help
        Display help information

Use "bkctl [command] --help" or "bkctl help [command]" for more information
about a command
```

Master Issue: #1799

Reviewers: Ivan Kelly <ivank@apache.org>, Enrico Olivelli <eolivelli@gmail.com>

This closes #1800 from sijie/refactor_bkctl, closes #1799

5 weeks agoFix bugs in DefaultEnsemblePlacementPolicy
Charan Reddy Guttapalem [Sun, 11 Nov 2018 21:30:15 +0000 (13:30 -0800)] 
Fix bugs in DefaultEnsemblePlacementPolicy

Descriptions of the changes in this PR:

- bookieInfoMap is not initialized and newEnsemble will throws BKNotEnoughBookiesException if
diskWeightBasedPlacement is enabled
- add test coverage for DefaultEnsemblePlacementPolicy with diskWeightBasedPlacement enabled

Reviewers: Sijie Guo <sijie@apache.org>, Andrey Yegorov <None>

This closes #1788 from reddycharan/defaultplacementfix

5 weeks agoFix indentation in BP-34 doc
Charan Reddy Guttapalem [Sun, 11 Nov 2018 21:28:58 +0000 (13:28 -0800)] 
Fix indentation in BP-34 doc

Descriptions of the changes in this PR:

- just indentation fix

Reviewers: Enrico Olivelli <eolivelli@gmail.com>, Sijie Guo <sijie@apache.org>

This closes #1803 from reddycharan/bp34fix

5 weeks agoFixed Auth with v2 protocol
Matteo Merli [Sun, 11 Nov 2018 18:42:32 +0000 (10:42 -0800)] 
Fixed Auth with v2 protocol

### Motivation

BK auth framework is currently broken when using v2 protocol.

### Changes

 * Fixed auth when using V2 protocol
 * Made sure a client with authentication enabled can talk to a bookie without authentication. This is required in any case when enabling/disabling authentication on a live cluster.
 * Run all auth tests against both v2 and v3 protocol.

This should be included in 4.7.2 to give a path to upgrade.

cc/ rdhabalia

Reviewers: Enrico Olivelli <eolivelli@gmail.com>, Sijie Guo <sijie@apache.org>

This closes #1805 from merlimat/fix-v2-auth

5 weeks ago[BUILD] Ignore `versionsBackup` file generated by `mvn versions:set`
Sijie Guo [Sat, 10 Nov 2018 09:34:57 +0000 (01:34 -0800)] 
[BUILD] Ignore `versionsBackup` file generated by `mvn versions:set`

Descriptions of the changes in this PR:

*Motivation*

`mvn versions:set` will generate files suffixed with `.versionsBackup`

Reviewers: Enrico Olivelli <eolivelli@gmail.com>, Matteo Merli <mmerli@apache.org>

This closes #1801 from sijie/exclude_versionsbackup

5 weeks ago[TOOLS] improve bkctl help message
Sijie Guo [Sat, 10 Nov 2018 00:32:37 +0000 (16:32 -0800)] 
[TOOLS] improve bkctl help message

Descriptions of the changes in this PR:

*Motivation*

Currently `bin/bktcl help` will output all command groups all together.
It is a bit hard to tell what command groups to use, especially some
commands are used for table service.

*Changes*

Introduce `category` in the cli spec to define which category that a
command group belongs to. So when it prints out the help message, it
can use that information to categorize the command groups together
to provide better user experience.

*Results*

```
$ bin/bkctl help
bkctl interacts and operates Apache BookKeeper clusters

Usage:  bkctl [flags] [command group] [commands]

Infrastructure commands :

    bookie          Commands on operating a single bookie
    bookies         Commands on operating a cluster of bookies
    cluster         Commands on administrating bookkeeper clusters

Ledger service commands :

    ledger          Commands on interacting with ledgers

Table service commands :

    namespace       Commands on operating namespaces
    table           Commands on interacting with tables
    tables          Commands on operating tables

Other commands :

    help            Display help information about it
```

Reviewers: Enrico Olivelli <eolivelli@gmail.com>, Matteo Merli <mmerli@apache.org>

This closes #1793 from sijie/add_groups

5 weeks ago[TOOLS] add cookie related commands
Sijie Guo [Fri, 9 Nov 2018 05:47:12 +0000 (21:47 -0800)] 
[TOOLS] add cookie related commands

Descriptions of the changes in this PR:

*Motivation*

In some use cases, you need cookie related tools to create/delete/update/get cookie when handling production issues.
Currently bookkeeper doesn't provide such commands.

*Changes*

Add cookie related commands

- create
- delete
- get
- update
- generate

Reviewers: Enrico Olivelli <eolivelli@gmail.com>, Jia Zhai <None>, Matteo Merli <mmerli@apache.org>

This closes #1794 from sijie/add_cookie_commands

5 weeks agoIssue #1791: Read Submission should bypass OSE Threads
Nicolas Michael [Thu, 8 Nov 2018 16:51:10 +0000 (08:51 -0800)] 
Issue #1791: Read Submission should bypass OSE Threads

### Motivation

Profiling of our Bookkeeper Client code for read requests shows that client threads spend half of their time in dispatching requests to OrderedExecutors (just the dispatch itself, not the execution inside OSE): 54% of their CPU time is spent in OrderedExecutor.executeOrdered() (called by LedgerHandle.readEntriesInternalAsync()). The high time spend in request submission to OSE is largely caused by Linux scheduling cost, that is the cost of dispatching the OSE thread to CPU: 42% of total time (3/4th of executeOrdered() time), threads spend in Unsafe.unpark(), which is essentially Linux scheduling/dispatching of another thread.

### Changes

This change executes read submissions (PendingReadOp) on read-only ledger handles directly inside the client thread instead of submitting them to Ordered Executors.

Tests with a prototype have shown significant improvements in both overall CPU consumption as well as read latency. The additional work client threads have to do (the dispatch of the read requests to netty) is roughly the same as the (saved) dispatch cost to OSE, so the change turns out to be neutral for CPU consumption of client threads. In some experiments, the savings even exceed the additional work, and client threads consume less cpu even though they "do more". It also frees up lots of resources in OSE threads. Since it eliminates one context-switch in read submission and also avoids serialization of reads to the same ledger (or ledgers hashing to the same OSE), it also reduces read latency. For a mixed read-write workload (14,000 reads/sec on read-only ledgers, 4,000 writes/sec on another set of ledgers), this change has reduced CPU consumption of OSE threads by 25%, kept CPU consumption of client (and Netty) threads the same, and yielded a 6% improvement of read latency (as measured by BK Client).

Master Issue: #1791: Read Submission should bypass OSE Threads

Reviewers: Enrico Olivelli <eolivelli@gmail.com>, Andrey Yegorov <None>, Sijie Guo <sijie@apache.org>, Matteo Merli <mmerli@apache.org>

This closes #1792 from nicmichael/DirectRead, closes #1791

5 weeks agoCache InetSocketAddress if hostname is IPAddress
Charan Reddy Guttapalem [Thu, 8 Nov 2018 16:49:32 +0000 (08:49 -0800)] 
Cache InetSocketAddress if hostname is IPAddress

Descriptions of the changes in this PR:

- in BookieSocketAddress if IPAddress is hostname then it is okay
to cache InetSocketAddress, since the canonicalhostname of the node
dont change.

Reviewers: Sijie Guo <sijie@apache.org>, Enrico Olivelli <eolivelli@gmail.com>, Matteo Merli <mmerli@apache.org>, Andrey Yegorov <None>

This closes #1789 from reddycharan/bookieaddressonlywhenhostname

5 weeks agoUpgrade to Netty 4.1.31 and use individual dependencies
Matteo Merli [Tue, 6 Nov 2018 20:22:23 +0000 (12:22 -0800)] 
Upgrade to Netty 4.1.31 and use individual dependencies

### Motivation

 * Upgrade to latest Netty version which brings in perf improvements and some new features (eg: https://github.com/netty/netty/pull/8267)

 * Broke down the dependencies from `netty-all` into individual components, as discussed at https://github.com/apache/bookkeeper/pull/1755#discussion_r228449352

Reviewers: Ivan Kelly <ivank@apache.org>, Enrico Olivelli <eolivelli@gmail.com>, Sijie Guo <sijie@apache.org>

This closes #1784 from merlimat/netty-4.1.31

6 weeks agoUse default metric registry in Prometheus exporter
Matteo Merli [Sat, 3 Nov 2018 17:42:49 +0000 (10:42 -0700)] 
Use default metric registry in Prometheus exporter

### Motivation

Currently the Prometheus exporter is using a private metrics register. This doesn't work well for BK client where we want to expose in the same registry of application, or when we want to interact with other tools that use the default static registry (eg: log4j, jetty integrations for prometheus).

Reviewers: Enrico Olivelli <eolivelli@gmail.com>, Sijie Guo <sijie@apache.org>

This closes #1765 from merlimat/prometheus

6 weeks agoISSUE #1767: security vulnerabilities in 3rd party dependencies
Manjiri Tapaswi [Sat, 3 Nov 2018 17:41:19 +0000 (10:41 -0700)] 
ISSUE #1767: security vulnerabilities in 3rd party dependencies

Descriptions of the changes in this PR:

Upgraded jline and jackson to remove security vulnerabilities mentioned in #1767

### Motivation

Remove security vulnerabilities mentioned in #1767

### Changes

Upgraded jline and jackson 3rd party dependencies

Master Issue: #1767

Reviewers: Enrico Olivelli <eolivelli@gmail.com>

This closes #1777 from mptap/fix-1767-remove-vulnerabilities, closes #1767

6 weeks ago[TABLE SERVICE] [PYTHON] add default port to service hosts
Sijie Guo [Sat, 3 Nov 2018 00:47:37 +0000 (17:47 -0700)] 
[TABLE SERVICE] [PYTHON] add default port to service hosts

Descriptions of the changes in this PR:

*Motivation*

Similar as #1778, add default port to service hosts if port is missing.

*Changes*

add default port to service hosts if they miss ports

Related Issue: #1778

Reviewers: Jia Zhai <None>

This closes #1780 from sijie/fix_python_service_uri

6 weeks ago[TABLE SERVICE] add default port to service hosts
Sijie Guo [Fri, 2 Nov 2018 21:41:09 +0000 (14:41 -0700)] 
[TABLE SERVICE] add default port to service hosts

Descriptions of the changes in this PR:

*Motivation*

Currently we have to add `4181` in the service uri in order to make it work.
Ideally it would be great that the system can fill the default port if port is missing.

*Changes*

add default port when parsing `ServiceURI`

Reviewers: Enrico Olivelli <eolivelli@gmail.com>

This closes #1778 from sijie/add_default_port

6 weeks ago[TESTS] Issue #1752: disable etcd tests in normal builds
Sijie Guo [Fri, 2 Nov 2018 16:59:38 +0000 (09:59 -0700)] 
[TESTS] Issue #1752: disable etcd tests in normal builds

Descriptions of the changes in this PR:

*Motivation*

apache/bookkeeper#1766 attempts to disable etcd tests in normal builds.
however it only added the `integrationTests` profile but didn't disable tests
in normal builds.

*Changes*

Disable etcd tests in normal builds

Master Issue: #1752

Reviewers: Enrico Olivelli <eolivelli@gmail.com>

This closes #1779 from sijie/run_etcd_tests_on_integrationtests, closes #1752

6 weeks agoReduce stack traces in logs for common cases
Matteo Merli [Wed, 31 Oct 2018 08:18:57 +0000 (01:18 -0700)] 
Reduce stack traces in logs for common cases

### Motivation

For common "error" conditions the exception message is the only important bit while the stack traces are just adding clutter the logs files.

Reviewers: Andrey Yegorov <None>, Sijie Guo <sijie@apache.org>

This closes #1776 from merlimat/master

6 weeks ago[TABLE SERVICE] Fix python client can't read keys written by java clients
Sijie Guo [Tue, 30 Oct 2018 18:47:54 +0000 (11:47 -0700)] 
[TABLE SERVICE] Fix python client can't read keys written by java clients

Descriptions of the changes in this PR:

*Motivation*

Python client is a thin table service client. So it relies on storage container
intercepting the requests to attach routing header. It attaches the routing header
if the requests are needed to route to remote containers; however for the local containers
it doesn't attach the right routing header.

*Changes*

Fix `StorageContainerImpl` to use proxy routing interceptor to intercept requests to attach routing header.

*Tests*

Add integration tests in python client & add test for python clients reading key/value pairs written by java clients.

Reviewers: Jia Zhai <None>

This closes #1771 from sijie/remove_python23_incompatible_changes

6 weeks ago[TESTS] Fix integration test TestCompatUpgradeYahooCustom.testUpgradeYahooCustom
Sijie Guo [Tue, 30 Oct 2018 18:46:31 +0000 (11:46 -0700)] 
[TESTS] Fix integration test TestCompatUpgradeYahooCustom.testUpgradeYahooCustom

Descriptions of the changes in this PR:

*Motivation*

apache/bookkeeper#1749 fixes bash script issue but it introduced `set -e` which
will fail `bin/bookkeeper` if grepping configuration file failed.

*Changes*

`set -e` is useful to fail fast if anything fails in the bash script. This change
is to mask exit code of `grep` operation, since the bash script already handle
the grep result.

*Tests*

Manually verified the change works. And the existing TestCompatUpgradeYahooCustom.testUpgradeYahooCustom
integration tests would also verify if the change fixes the problem or not.

Reviewers: Enrico Olivelli <eolivelli@gmail.com>, Ivan Kelly <ivank@apache.org>

This closes #1772 from sijie/fix_common_scripts

6 weeks agoISSUE #1757: prevent race between flush and delete from recreating index
Samuel Just [Tue, 30 Oct 2018 18:26:50 +0000 (11:26 -0700)] 
ISSUE #1757: prevent race between flush and delete from recreating index

IndexPersistencManager.flushLedgerHandle can race with delete by
obtaining a FileInfo just prior to delete and then proceeding to rewrite
the file info resurrecting it.  FileInfo provides a convenient point of
synchronization for avoinding this race.  FileInfo.moveLedgerIndexFile,
FileInfo.flushHeader, and FileInfo.delete() are synchronized already, so
this patch simply adds a deleted flag to the FileInfo object to indicate
that the FileInfo has become invalid.  checkOpen is called in every
method and will now throw FileInfoDeleted if delete has been called.
IndexPersistenceManager can catch it and deal with it appropriately in
flush (which generally means moving onto the next ledger).

This patch also eliminates ledgersToFlush and ledgersFlushing.  Their
purpose appears to be to allow delete to avoid flushing a ledger which
has been selected for flushing but not flushed yet avoiding the above
race.  It's not sufficient, however, because IndexInMemPageMgr calls
IndexPersistenceManager.flushLedgerHeader, which can obtain a FileInfo
for the ledger prior to the deletion and then call
relocateIndexFileAndFlushHeader afterwards.

Also, if the purpose was to avoid concurrent calls into
flushSpecificLedger on the same ledger, it's wrong because of the
following sequence:

t0: thread 0 calls flushOneOrMoreLedgers
t1: thread 0 place ledger 10 into ledgersFlushing and completes
flushSpecificLedger
t2: thread 2 performs a write to ledger 10
t3: thread 1 calls flushOneOrMoreLedgers skipping ledger 10
t4: thread 0 releases ledger 10 from ledgersFlushing
t5: thread 1 completes flushOneOrMoreLedgers

Although thread 1 begins to flush after the write to ledger 10, it won't
capture the write rendering the flush incorrect.  I don't think it's
actually worth avoiding overlapping flushes here because both FileInfo
and LedgerEntryPage track dirty state.  As such, it seems simpler to
just get rid of them.

This patch also adds a more agressive version of testFlushDeleteRace to
test the new behavior.  Testing with multiple flushers turned up a bug
with LedgerEntryPage.getPageToWrite where didn't return a buffer with
independent read pointers, so this patch addresses that as well.

(bug W-5549455)
(rev cguttapalem)
Signed-off-by: Samuel Just <sjustsalesforce.com>
(cherry picked from commit 7b5ac3d5e76ac4df618764cafe80aef2994703ec)

Author:

Reviewers: Enrico Olivelli <eolivelli@gmail.com>, Sijie Guo <sijie@apache.org>

This closes #1769 from athanatos/forupstream/wip-1757, closes #1757

7 weeks agoIssue #1752: Etcd docker based tests are running on wrong jobs on CI
Qi Wang [Tue, 30 Oct 2018 01:53:19 +0000 (09:53 +0800)] 
Issue #1752: Etcd docker based tests are running on wrong jobs on CI

Descriptions of the changes in this PR:

*Motivation*

Fixes #1752

Etcd metadata driver is using testcontainer to run Etcd in containers for integration tests.
However this job is running as part normal build, which can cause container image being deleted
due to concurrent builds.

*Changes*

Move etcd metadata driver tests to be as part of `integrationTests`

Master Issue: #1752

Reviewers: Enrico Olivelli <eolivelli@gmail.com>, Sijie Guo <sijie@apache.org>

This closes #1766 from codingwangqi/move_etcd_to_integration_tests, closes #1752

7 weeks ago[WEBSITE] Fix broken link to ledger-api#example-application
Matteo Merli [Sun, 28 Oct 2018 13:30:23 +0000 (06:30 -0700)] 
[WEBSITE] Fix broken link to ledger-api#example-application

Link should be to a section in same page

Reviewers: Enrico Olivelli <eolivelli@gmail.com>, Sijie Guo <sijie@apache.org>

This closes #1764 from merlimat/fix-docs-link

7 weeks agoKill LedgerMetadata#isConflictWith
Ivan Kelly [Sun, 28 Oct 2018 13:06:18 +0000 (14:06 +0100)] 
Kill LedgerMetadata#isConflictWith

It doesn't make sense anymore, as local copies of the metadata are
never modified, only updated with the latest version from the metadata
store.

In effect, this logic has been broken out to the places where we try
to update the metadata store copy. Each time we try to update the
metadata store, we ensure that the update we are applying still makes
sense with regard to the copy of the metadata we are updating.

Master issue: #281

Reviewers: Sijie Guo <sijie@apache.org>, Enrico Olivelli <eolivelli@gmail.com>

This closes #1760 from ivankelly/kill-is-conflict-with

7 weeks ago[MERGE SCRIPT] remove authors section
Sijie Guo [Sun, 28 Oct 2018 13:05:28 +0000 (21:05 +0800)] 
[MERGE SCRIPT] remove authors section

Descriptions of the changes in this PR:

*Motivation*

We are using github api to merge pull requests now.
So the authors section is not correct, remove that section and rely on github merge api.

*Changes*

remove authors section in the commit log.

Reviewers: Enrico Olivelli <eolivelli@gmail.com>

This closes #1758 from sijie/fix_merge_scripts

7 weeks agoDon't cache Bookie hostname DNS resolution forever
Matteo Merli [Sun, 28 Oct 2018 12:56:47 +0000 (05:56 -0700)] 
Don't cache Bookie hostname DNS resolution forever

### Motivation

`BookieSocketAddress` is resolving the bookie DNS name in its constructor and then using the already resolved `InetSocketAddress` instance.

If the IP of a bookie changes, the BK client will continue to use the old IP address.

### Changes

Construct a new `InetSocketAddress` each time `getSocketAddress()` gets called (eg: each time we attempt to make a new connection) so that we're making sure to get the right IP.

I cannot think of a good way to add unit test for this at this point, suggestions are welcome.

I think this should be included in a patch release as well 4.7.3 or 4.8.1

Reviewers: Andrey Yegorov <None>, Enrico Olivelli <eolivelli@gmail.com>, Sijie Guo <sijie@apache.org>, Ivan Kelly <ivank@apache.org>

This closes #1762 from merlimat/fix-dns

7 weeks agoRemove LedgerMetadata#getEnsembles in favour of #getAllEnsembles
Ivan Kelly [Sun, 28 Oct 2018 12:54:53 +0000 (13:54 +0100)] 
Remove LedgerMetadata#getEnsembles in favour of #getAllEnsembles

They do the same thing except that #getEnsembles returns a TreeMap
while #getAllEnsembles returns a NavigableMap.

LedgerMetadata#getAllEnsembles is part of the api interface.

Master issue: #281

Reviewers: Enrico Olivelli <eolivelli@gmail.com>, Sijie Guo <sijie@apache.org>

This closes #1759 from ivankelly/remove-get-ensembles

7 weeks agoUse immutable metadata in LedgerHandle
Ivan Kelly [Thu, 25 Oct 2018 12:28:57 +0000 (14:28 +0200)] 
Use immutable metadata in LedgerHandle

Which means that for the two LedgerHandle operations that mutate the
metadata, ensemble change and closing, ensure that metadata is written
to the metadata store before the client ever uses it.

Master issue: #281

Author: Ivan Kelly <ivank@apache.org>
Author: Sijie Guo <guosijie@gmail.com>
Author: Charan Reddy Guttapalem <reddycharan18@gmail.com>
Author: Andrey Yegorov <dlg99@users.noreply.github.com>
Author: Samuel Just <sjust@salesforce.com>

Reviewers: Sijie Guo <sijie@apache.org>, Venkateswararao Jujjuri (JV) <None>, Samuel Just <sjust@salesforce.com>

This closes #1646 from ivankelly/immutable-handle-failures

7 weeks agoModules dependencies do not need to be included in checksum Jar
Matteo Merli [Thu, 25 Oct 2018 12:15:18 +0000 (05:15 -0700)] 
Modules dependencies do not need to be included in checksum Jar

The current assembly configuration is including the jars of the modules dependency inside its own jar.

These jars are completely ignored, but they take up non trivial space.

With this change the size of `circe-checksum.jar` goes from 2.8 MB to 62 KB.

Author: Matteo Merli <mmerli@apache.org>

Reviewers: Sijie Guo <sijie@apache.org>, Enrico Olivelli <eolivelli@gmail.com>

This closes #1751 from merlimat/master

7 weeks agoAdding multi-node ZKCluster test util class
Charan Reddy Guttapalem [Thu, 25 Oct 2018 12:12:27 +0000 (05:12 -0700)] 
Adding multi-node ZKCluster test util class

Descriptions of the changes in this PR:

- adding multi-node ZKCluster util class
- adding new interface for ZKCluster util and having separate implementaions for
single node ZKCluster and multi-node ZKCluster

### Motivation

This helps in adding more test coverage to Zookeeper aspects.

Author: Sijie Guo <guosijie@gmail.com>
Author: Charan Reddy Guttapalem <reddycharan18@gmail.com>
Author: cguttapalem <cguttapalem@salesforce.com>
Author: Andrey Yegorov <dlg99@users.noreply.github.com>
Author: Samuel Just <sjust@salesforce.com>

Reviewers: Sijie Guo <sijie@apache.org>, Enrico Olivelli <eolivelli@gmail.com>

This closes #1753 from reddycharan/multinodezkcluster

7 weeks agoNetty allocator wrapper
Matteo Merli [Thu, 25 Oct 2018 12:06:58 +0000 (05:06 -0700)] 
Netty allocator wrapper

### Motivation

Configuring the correct JVM memory settings and cache sizes for a BookKeeper cluster should be simplified.

There are currently many knobs in Netty or JVM flags for different components and while with a good setup the systems is very stable, it's easy to setup non-optimal configurations which might result in OutOfMemory errors under load.

Ideally, there should be very minimal configuration required to bring up a BookKeeper cluster that can work under a wide set of traffic loads. In any case, we should prefer to automatically fallback to slower alternatives, when possible, instead of throwing OOM exceptions.

 * Provide a wrapper to have a single unified configuration point for Netty allocator configuration.
 * Provide fallback policy when dealing with direct memory OOM errors

### Changes

 * This is the first PR. It only contains the allocator wrapper implementation. Subsequent PR will add the changes to use it.
 * Added `bookkeeper-common-allocator` module to have a no-dependencues module that can be used directly from Pulsar client library too (which doesn't depend on BK).

Author: Sijie Guo <guosijie@gmail.com>
Author: Charan Reddy Guttapalem <reddycharan18@gmail.com>
Author: Matteo Merli <mmerli@apache.org>
Author: Andrey Yegorov <dlg99@users.noreply.github.com>
Author: Samuel Just <sjust@salesforce.com>

Reviewers: Qi Wang <None>, Sijie Guo <sijie@apache.org>, Ivan Kelly <ivank@apache.org>, Enrico Olivelli <eolivelli@gmail.com>

This closes #1754 from merlimat/allocator

8 weeks ago[BUILD] Fix build & bash script error when not using `stream` profile
Sijie Guo [Fri, 19 Oct 2018 00:33:30 +0000 (08:33 +0800)] 
[BUILD] Fix build & bash script error when not using `stream` profile

Descriptions of the changes in this PR:

*Motivation*

There are two issues in current master when building without stream

- build `bkperf` failed
- bin/bookkeeper is using the wrong module

*Changes*

- build `bkperf` module as part of `stream` profile
- fix the problem in `bin/bookkeeper` locating the right module
- add two tests in travis to test builds without `stream` profile

Author: Sijie Guo <guosijie@gmail.com>
Author: Sijie Guo <sijie@apache.org>
Author: Charan Reddy Guttapalem <reddycharan18@gmail.com>
Author: Andrey Yegorov <dlg99@users.noreply.github.com>
Author: Samuel Just <sjust@salesforce.com>

Reviewers: Enrico Olivelli <eolivelli@gmail.com>, Charan Reddy Guttapalem <reddycharan18@gmail.com>

This closes #1749 from sijie/fix_build_without_stream_profile

2 months agoSet ConnectionExpired Listener to MetadataClientDriver in AR
Charan Reddy Guttapalem [Wed, 17 Oct 2018 10:56:41 +0000 (03:56 -0700)] 
Set ConnectionExpired Listener to MetadataClientDriver in AR

Descriptions of the changes in this PR:

- add setConnectionExpiredListener method to MetadataClientDriver interface.
- add listener to shutdown AR in the case of metadata connection expiry

### Motivation

This commit - 4f0d2a195bd9be3788876b47813cee1440cf005c, has removed the shutdown logic in AutoRecoveryMain incase of ZK client session expiry, with the following reason "which doesn't make any sense for current retryable zookeeper". But if the ZK session has expired then it is not completely correct to let AutoRecoveryMain to continue to run in that state.

Author: Sijie Guo <guosijie@gmail.com>
Author: Andrey Yegorov <dlg99@users.noreply.github.com>
Author: cguttapalem <cguttapalem@salesforce.com>
Author: Charan Reddy Guttapalem <reddycharan18@gmail.com>
Author: Samuel Just <sjust@salesforce.com>

Reviewers: Sijie Guo <sijie@apache.org>, Enrico Olivelli <eolivelli@gmail.com>

This closes #1747 from reddycharan/conexpirylisten

2 months ago[TABLE SERVICE] [CLIENT] storage client can open tables on a different namespace
Sijie Guo [Tue, 9 Oct 2018 01:02:35 +0000 (18:02 -0700)] 
[TABLE SERVICE] [CLIENT] storage client can open tables on a different namespace

Descriptions of the changes in this PR:

*Motivation*

In some cases, we are using same storage client for opening tables under different namespaces.
It would be good that a client instance can do that.

*Changes*

- Add methods to `StorageClient` to open tables under different namespaces
- Add `asClient` to `StorageAdminClient` to convert admin client to storage client

Author: Sijie Guo <sijie@apache.org>

Reviewers: Enrico Olivelli <eolivelli@gmail.com>, Jia Zhai <None>

This closes #1733 from sijie/improve_client_interface

2 months agoReadEntryCallback in ReadLedgerEntriesCmd shouldn't release buffer.
Charan Reddy Guttapalem [Tue, 9 Oct 2018 00:54:30 +0000 (17:54 -0700)] 
ReadEntryCallback in ReadLedgerEntriesCmd shouldn't release buffer.

Descriptions of the changes in this PR:

- ReadEntryCallback in ReadLedgerEntriesCmd shouldn't release buffer,
which is not owned by the callback.

### Motivation

with the following change, Per channel bookie clients owns the buffer for read responses. So it is not correct for ReadEntryCallback in ReadLedgerEntriesCmd to release buffer
https://github.com/apache/bookkeeper/commit/8d048abce486c63d428041f77ee9a506756f4d1e#diff-e50ee2c1aec1539ea185a94605b0e550R1611

because of this issue I'm seeing following error with ReadLedgerEntriesCmd
```
/Workspace/SFStorage/bookkeeper/bookkeeper-server/bin$ ./bookkeeper shell -localbookie readledger -bookie ****  -ledgerid 00000000-0000-0000-0000-000000000003 -firstentryid 1 -lastentryid 3
JAVA_HOME not set, using java from PATH. (/usr/bin/java)

--------- Lid=00000000-0000-0000-0000-000000000003, Eid=1 ---------
18:32:03,724 ERROR Unexpected throwable caught
io.netty.util.IllegalReferenceCountException: refCnt: 0, increment: 1
at io.netty.buffer.AbstractReferenceCountedByteBuf.release0(AbstractReferenceCountedByteBuf.java:100) ~[netty-all-4.1.22.Final.jar:4.1.22.Final]
at io.netty.buffer.AbstractReferenceCountedByteBuf.release(AbstractReferenceCountedByteBuf.java:84) ~[netty-all-4.1.22.Final.jar:4.1.22.Final]
at org.apache.bookkeeper.proto.PerChannelBookieClient$ReadCompletion.handleV3Response(PerChannelBookieClient.java:1699) ~[bookkeeper-server-4.7.0-SNAPSHOT.jar:4.7.0-SNAPSHOT]
at org.apache.bookkeeper.proto.PerChannelBookieClient$3.safeRun(PerChannelBookieClient.java:1286) ~[bookkeeper-server-4.7.0-SNAPSHOT.jar:4.7.0-SNAPSHOT]
at org.apache.bookkeeper.common.util.SafeRunnable.run(SafeRunnable.java:36) [bookkeeper-common-4.7.0-SNAPSHOT.jar:4.7.0-SNAPSHOT]
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) [?:1.8.0_172]
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) [?:1.8.0_172]
at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30) [netty-all-4.1.22.Final.jar:4.1.22.Final]
at java.lang.Thread.run(Thread.java:748) [?:1.8.0_172]

--------- Lid=00000000-0000-0000-0000-000000000003, Eid=2 ---------

18:32:03,733 ERROR Unexpected throwable caught
io.netty.util.IllegalReferenceCountException: refCnt: 0, increment: 1
at io.netty.buffer.AbstractReferenceCountedByteBuf.release0(AbstractReferenceCountedByteBuf.java:100) ~[netty-all-4.1.22.Final.jar:4.1.22.Final]
at io.netty.buffer.AbstractReferenceCountedByteBuf.release(AbstractReferenceCountedByteBuf.java:84) ~[netty-all-4.1.22.Final.jar:4.1.22.Final]
at org.apache.bookkeeper.proto.PerChannelBookieClient$ReadCompletion.handleV3Response(PerChannelBookieClient.java:1699) ~[bookkeeper-server-4.7.0-SNAPSHOT.jar:4.7.0-SNAPSHOT]
at org.apache.bookkeeper.proto.PerChannelBookieClient$3.safeRun(PerChannelBookieClient.java:1286) ~[bookkeeper-server-4.7.0-SNAPSHOT.jar:4.7.0-SNAPSHOT]
at org.apache.bookkeeper.common.util.SafeRunnable.run(SafeRunnable.java:36) [bookkeeper-common-4.7.0-SNAPSHOT.jar:4.7.0-SNAPSHOT]
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) [?:1.8.0_172]
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) [?:1.8.0_172]
at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30) [netty-all-4.1.22.Final.jar:4.1.22.Final]
at java.lang.Thread.run(Thread.java:748) [?:1.8.0_172]
```

Author: cguttapalem <cguttapalem@salesforce.com>

Reviewers: Sijie Guo <sijie@apache.org>, Enrico Olivelli <eolivelli@gmail.com>, Andrey Yegorov <None>

This closes #1736 from reddycharan/readledgerfix

2 months agoISSUE #1737: EntryMemTable.newEntry: always make a copy
Samuel Just [Mon, 8 Oct 2018 17:35:25 +0000 (10:35 -0700)] 
ISSUE #1737: EntryMemTable.newEntry: always make a copy

Retaining a reference to that array assumes that the caller
won't reuse the array for something else -- an assumption
violated by Journal.scanJournal and probably other callers.

(bug W-5499346)
(rev cguttapalem)
Signed-off-by: Samuel Just <sjustsalesforce.com>
Author:

Reviewers: Enrico Olivelli <eolivelli@gmail.com>, Matteo Merli <mmerli@apache.org>, Sijie Guo <sijie@apache.org>

This closes #1744 from athanatos/forupstream/wip-1737, closes #1737