Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add read_before_last_manifest_write option to avoid sibling explosion #1011

Merged
merged 3 commits into from
Dec 3, 2014

Conversation

kellymclaughlin
Copy link
Contributor

Add read_before_last_manifest_write option to help avoid sibling
explosion for use cases involving high churn and concurrency on a
fixed set of keys. When sibling explosion occurs the objects stored in
Riak can become very large and severely impair the functioning of the
system. The trade-off in enabling this option is latency penalty of
doing an extra read before the final write of an object's manifest to
Riak; however, for use cases matching the description the minor
latency penalty is preferable to the system to the consequences of
sibling explosion. This option is not needed for Riak CS installations
using a Riak version that is >= 2.0.0 with DVVs enabled.

Add read_before_last_manifest_write option to help avoid sibling
explosion for use cases involving high churn and concurrency on a
fixed set of keys. When sibling explosion occurs the objects stored in
Riak can become very large and severely impair the functioning of the
system. The trade-off in enabling this option is latency penalty of
doing an extra read before the final write of an object's manifest to
Riak; however, for use cases matching the description the minor
latency penalty is preferable to the system to the consequences of
sibling explosion. This option is not needed for Riak CS installations
using a Riak version that is >= 2.0.0 with DVVs enabled.
@bearcage
Copy link

Testing with this applied reduces sibling generation on moderate concurrency write loads significantly -- I went from sustaining 8-12 writers across a test cluster 4 up to 24 without unbounded upward sibling growth. GC seems to have a nontrivial impact on sibling counts under these conditions as well, although I'm not certain there's a great strategy available for addressing that.

@slfritchie
Copy link
Contributor

Are there any objections to amending the branch to default to true behavior before final review & merge?

@kellymclaughlin
Copy link
Contributor Author

Are there any objections to amending the branch to default to true behavior before final review & merge?

I am not opposed to this. I'll push a change to that effect shortly.

@kellymclaughlin
Copy link
Contributor Author

FYI, the CI failure is due to a dialyzer bug with Erlang R15B01. The test machine is still using that version and I will work with Paul to get that updated soon.

@bearcage
Copy link

Reviewed — looks good once the CI failure is resolved.

@kellymclaughlin
Copy link
Contributor Author

@borshop merge

borshop added a commit that referenced this pull request Dec 3, 2014
…-write

Add read_before_last_manifest_write option to avoid sibling explosion

Reviewed-by: kellymclaughlin
borshop added a commit that referenced this pull request Dec 3, 2014
…-write

Add read_before_last_manifest_write option to avoid sibling explosion

Reviewed-by: kellymclaughlin
@borshop borshop merged commit 357f3b5 into release/1.5 Dec 3, 2014
@kellymclaughlin kellymclaughlin deleted the feature/read-before-last-manifest-write branch December 3, 2014 20:56
@shino shino added this to the 1.5.3 milestone Dec 5, 2014
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

5 participants