Skip to content

Commit

Permalink
fix 2i updates with indentical values and timestamps
Browse files Browse the repository at this point in the history
patch by Sam Tunnicliffe; reviewed by jbellis for CASSANDRA-5540
  • Loading branch information
jbellis committed May 9, 2013
1 parent 6db71b2 commit 95cf9a5
Show file tree
Hide file tree
Showing 4 changed files with 9 additions and 3 deletions.
1 change: 1 addition & 0 deletions CHANGES.txt
@@ -1,4 +1,5 @@
1.2.5 1.2.5
* fix 2i updates with indentical values and timestamps (CASSANDRA-5540)
* fix compaction throttling bursty-ness (CASSANDRA-4316) * fix compaction throttling bursty-ness (CASSANDRA-4316)
* reduce memory consumption of IndexSummary (CASSANDRA-5506) * reduce memory consumption of IndexSummary (CASSANDRA-5506)
* remove per-row column name bloom filters (CASSANDRA-5492) * remove per-row column name bloom filters (CASSANDRA-5492)
Expand Down
Expand Up @@ -256,7 +256,7 @@ public void reduce(OnDiskAtom current)
container.addColumn(column); container.addColumn(column);
if (indexer != SecondaryIndexManager.nullUpdater if (indexer != SecondaryIndexManager.nullUpdater
&& !column.isMarkedForDelete() && !column.isMarkedForDelete()
&& container.getColumn(column.name()) != column) && !container.getColumn(column.name()).equals(column))
{ {
indexer.remove(column); indexer.remove(column);
} }
Expand Down
Expand Up @@ -141,7 +141,7 @@ public void reduce(IColumn column)
container.addColumn(column); container.addColumn(column);
if (indexer != SecondaryIndexManager.nullUpdater if (indexer != SecondaryIndexManager.nullUpdater
&& !column.isMarkedForDelete() && !column.isMarkedForDelete()
&& container.getColumn(column.name()) != column) && !container.getColumn(column.name()).equals(column))
{ {
indexer.remove(column); indexer.remove(column);
} }
Expand Down
Expand Up @@ -616,15 +616,20 @@ public void insert(IColumn column)


public void update(IColumn oldColumn, IColumn column) public void update(IColumn oldColumn, IColumn column)
{ {
if (oldColumn.equals(column))
return;

SecondaryIndex index = indexFor(column.name()); SecondaryIndex index = indexFor(column.name());
if (index == null) if (index == null)
return; return;


if (index instanceof PerColumnSecondaryIndex) if (index instanceof PerColumnSecondaryIndex)
{ {
((PerColumnSecondaryIndex) index).delete(key.key, oldColumn); // insert the new value before removing the old one, so we never have a period
// where the row is invisible to both queries (the opposite seems preferable); see CASSANDRA-5540
if (!column.isMarkedForDelete()) if (!column.isMarkedForDelete())
((PerColumnSecondaryIndex) index).insert(key.key, column); ((PerColumnSecondaryIndex) index).insert(key.key, column);
((PerColumnSecondaryIndex) index).delete(key.key, oldColumn);
} }
} }


Expand Down

0 comments on commit 95cf9a5

Please sign in to comment.