[ https://issues.apache.org/jira/browse/CASSANDRA-7000?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Benedict updated CASSANDRA-7000: -------------------------------- Attachment: 7000.supplement.txt Not sure if we want to tack this onto the same ticket, but the same basic problem seems to occur elsewhere as well: some referrers of sstablereader do not acquire a reference prior to accessing resources that will be closed when ref count hits zero. I found specifically CFS.estimatedKeysForRange, CFS.keySamples, couldn't see any others. This latter is the cause of the currently failing unit test for 2.1 > Assertion in SSTableReader during repair. > ----------------------------------------- > > Key: CASSANDRA-7000 > URL: https://issues.apache.org/jira/browse/CASSANDRA-7000 > Project: Cassandra > Issue Type: Bug > Reporter: Ben Chan > Assignee: Ben Chan > Attachments: 7000-2.1-v2.txt, 7000.supplement.txt, > sstablereader-assertion-bisect-helper, > sstablereader-assertion-bisect-helper-v2, sstablereader-assertion.patch > > > I ran a {{git bisect run}} using the attached bisect script. Repro code: > {noformat} > # 5dfe241: trunk as of my git bisect run > # 345772d: empirically determined "good" commit. > git bisect start 5dfe241 345772d > git bisect run ./sstablereader-assertion-bisect-helper-v2 > {noformat} > The first failing commit is 5ebadc1 (first parent of {{refs/bisect/bad}}). > Prior to 5ebadc1, SSTableReader#close() never checked reference count. After > 5ebadc1, there was an assertion for {{references.get() == 0}}. However, since > the reference count is initialized to 1, a SSTableReader#close() was always > guaranteed to either throw an AssertionError or to be a second call to > SSTableReader#tidy() on the same SSTableReader. > The attached patch chooses an in-between behavior. It requires the reference > count to match the initialization value of 1 for SSTableReader#close(), and > the same behavior as 5ebadc1 otherwise. > This allows repair to finish successfully, but I'm not 100% certain what the > desired behavior is for SSTableReader#close(). Should it close without regard > to reference count, as it did pre-5ebadc1? > Edit: accidentally uploaded a flawed version of > {{sstablereader-assertion-bisect-helper}} (doesn't work out-of-the-box with > {{git bisect}}). -- This message was sent by Atlassian JIRA (v6.2#6252)