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

WT-2708 split child-update race with reconciliation/eviction #2835

Merged
merged 2 commits into from
Jun 27, 2016

Conversation

keithbostic
Copy link
Contributor

@michaelcahill, this one is probably yours for review.

When splitting the root page and updating the child's WT_REF.addr,
reconciliation/eviction can race with us, updating WT_REF.addr after our
read and before our update. The update is necessary because the child's
address points into the page being split: if the address changes, then
it can no longer point into the page being split and the update is no
longer necessary.
@keithbostic keithbostic self-assigned this Jun 26, 2016
@michaelcahill
Copy link
Contributor

Thanks, @keithbostic -- this lgtm. I've reviewed the other places where ref->addr is updated and don't see any where a race looks possible. In particular, this is the only place I found that updates a shared ref->addr without setting ref->state to WT_REF_LOCKED. I'll merge.

@michaelcahill michaelcahill merged commit 521270d into develop Jun 27, 2016
@michaelcahill michaelcahill deleted the wt-2708-split-addr-race branch June 27, 2016 02:45
agorrod pushed a commit that referenced this pull request Jun 28, 2016
(cherry picked from commit 521270d)

When splitting the root page and updating the child's WT_REF.addr, reconciliation/eviction can race with us, updating WT_REF.addr after our read and before our update. The update is necessary because the child's
address points into the page being split: if the address changes, then it can no longer point into the page being split and the update is no longer necessary.
agorrod pushed a commit that referenced this pull request Jun 28, 2016
(cherry picked from commit 521270d)

When splitting the root page and updating the child's WT_REF.addr, reconciliation/eviction can race with us, updating WT_REF.addr after our read and before our update. The update is necessary because the child's
address points into the page being split: if the address changes, then it can no longer point into the page being split and the update is no longer necessary.
keithbostic added a commit that referenced this pull request Jul 1, 2016
When splitting the root page and updating the child's WT_REF.addr, reconciliation/eviction can race with us, updating WT_REF.addr after our read and before our update. The update is necessary because the child's
address points into the page being split: if the address changes, then it can no longer point into the page being split and the update is no longer necessary.
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.

2 participants