GitHub user dhutchis opened a pull request:
https://github.com/apache/accumulo/pull/97
ACCUMULO-4229 BatchWriter Locator cache out-of-sync when shared with tserver
This version targets master. Will commit shortly.
You can merge this pull request into a Git repository by running:
$ git pull https://github.com/dhutchis/accumulo ACCUMULO-4229
Alternatively you can review and apply these changes as the patch at:
https://github.com/apache/accumulo/pull/97.patch
To close this pull request, make a commit to your master/trunk branch
with (at least) the following in the commit message:
This closes #97
----
commit 618ec9251d868ce08a3c43c0edf36296d37d8091
Author: Dylan Hutchison <[email protected]>
Date: 2016-04-23T08:02:01Z
ACCUMULO-4229 Add breaking test to reproduce sync problem
Add two tests in BatchWriterInTabletServerIT.
The first passes and establishes a baseline.
The second fails, proving the issue.
I added an extra iterator and a utility class for the IT.
These are in the test package, so they do not get packaged into normal
builds.
commit ebfa4bba15d054f554f5040e7dc6c6b668b58a9b
Author: Dylan Hutchison <[email protected]>
Date: 2016-04-23T08:33:24Z
ACCUMULO-4229 SyncingTabletLocator ensures caching clients align with
tserver
The previously failing test case now passes.
A boolean indicator variable in TabletLocator
is set to false when the static TabletLocator cache is cleared.
Client writers and readers should check the indicator
before using a locally cached Locator.
A SyncingTabletLocator automatically fetches the current TabletLocator
when the cached TabletLocator becomes outdated (when isValid flips false).
Clients now stay in sync with the static TabletLocator cache
through the use of SyncingTabletLocator, which
TimeoutTabletLocator now extends.
Variables assumed invariant for SyncingTabletLocator are now final.
This does not affect semantics.
The new design allows for TabletServerBatchWriter to use its local Locator
cache
more aggressively than it used to.
The invalidateCache() methods of SyncingTabletLocator defensively sync,
guarding against goofy code that might use more than one TabletLocator.
It may be possible to replace the static locators collection with a Guava
class.
This is not done here for simplicity.
Closes apache/accumulo#96
----
---
If your project is set up for it, you can reply to this email and have your
reply appear on GitHub as well. If your project does not have this feature
enabled and wishes so, or if the feature is enabled but not working, please
contact infrastructure at [email protected] or file a JIRA ticket
with INFRA.
---