[ https://issues.apache.org/jira/browse/TEPHRA-223?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15877028#comment-15877028 ]
ASF GitHub Bot commented on TEPHRA-223: --------------------------------------- Github user poornachandra commented on a diff in the pull request: https://github.com/apache/incubator-tephra/pull/37#discussion_r102348853 --- Diff: tephra-core/src/main/java/org/apache/tephra/TransactionManager.java --- @@ -1123,15 +1112,14 @@ private boolean doTruncateInvalidTxBefore(long time) throws InvalidTruncateTimeE } // Find all invalid transactions earlier than truncateWp - Set<Long> toTruncate = Sets.newHashSet(); - for (long wp : invalid) { - // invalid list is sorted, hence can stop as soon as we reach a wp >= truncateWp - if (wp >= truncateWp) { - break; + LongSet toTruncate = new LongArraySet(); + for (long wp : invalidTxList.toRawList()) { --- End diff -- Good point > Transactions started after a snapshot restore can have incorrect invalid > transaction list > ----------------------------------------------------------------------------------------- > > Key: TEPHRA-223 > URL: https://issues.apache.org/jira/browse/TEPHRA-223 > Project: Tephra > Issue Type: Bug > Components: core > Affects Versions: 0.5.0, 0.6.5, 0.7.0, 0.8.0-incubating, 0.9.0-incubating, > 0.10.0-incubating > Reporter: Poorna Chandra > Assignee: Poorna Chandra > Fix For: 0.12.0-incubating > > > Transaction Manager uses two datastructures to manage the invalid list - a > {{List}} and an {{array}}. All updates to invalid list happen to the > {{List}}, and the list is then sorted and copied over to the {{array}}. This > is an optimization done so as to not sort the invalid list every time a new > transaction is created. > However during a snapshot restore after the Transaction Manager starts up, > the invalid list gets correctly restored to the {{List}} but does not get > copied over to the {{array}}. This will lead to transactions started right > after a snapshot restore to have empty invalid list. This will make invalid > data to become visible to those transactions. > Since the {{List}} still contains the right invalid list, any update to the > invalid list - like invalidating a transaction, will restore the {{array}} > back to a good state. > Also compactions will still remove invalid data as expected since new > snapshots are searialized using the {{List}} -- This message was sent by Atlassian JIRA (v6.3.15#6346)