[jira] [Comment Edited] (CASSANDRA-14085) Excessive update of ReadLatency metric in digest calculation

2017-12-11 Thread Andrew Whang (JIRA)

[ 
https://issues.apache.org/jira/browse/CASSANDRA-14085?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=16273593#comment-16273593
 ] 

Andrew Whang edited comment on CASSANDRA-14085 at 12/11/17 9:27 PM:


https://github.com/whangsf/cassandra/commit/d6ec955da577da614de0c093625ae175158362c3


was (Author: whangsf):
https://github.com/whangsf/cassandra/commit/2ae3589ce9eefd8699bbd4e29bf1c61a486d394e

> Excessive update of ReadLatency metric in digest calculation
> 
>
> Key: CASSANDRA-14085
> URL: https://issues.apache.org/jira/browse/CASSANDRA-14085
> Project: Cassandra
>  Issue Type: Bug
>  Components: Core, Metrics
>Reporter: Andrew Whang
>Assignee: Andrew Whang
>Priority: Minor
> Fix For: 3.0.x, 3.11.x, 4.x
>
>
> We noticed an increase in read latency after upgrading to 3.x, specifically 
> for requests with CL>ONE. It turns out the read latency metric is being 
> doubly updated for digest calculations. This code 
> (https://github.com/apache/cassandra/blob/trunk/src/java/org/apache/cassandra/db/partitions/UnfilteredPartitionIterators.java#L243)
>  makes an improper copy of an iterator that's wrapped by MetricRecording, 
> whose onClose() records the latency of the execution.



--
This message was sent by Atlassian JIRA
(v6.4.14#64029)

-
To unsubscribe, e-mail: commits-unsubscr...@cassandra.apache.org
For additional commands, e-mail: commits-h...@cassandra.apache.org



[jira] [Updated] (CASSANDRA-14085) Excessive update of ReadLatency metric in digest calculation

2017-11-30 Thread Andrew Whang (JIRA)

 [ 
https://issues.apache.org/jira/browse/CASSANDRA-14085?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Andrew Whang updated CASSANDRA-14085:
-
Fix Version/s: 4.0
   3.0.16
   Status: Patch Available  (was: Open)

https://github.com/whangsf/cassandra/commit/2ae3589ce9eefd8699bbd4e29bf1c61a486d394e

> Excessive update of ReadLatency metric in digest calculation
> 
>
> Key: CASSANDRA-14085
> URL: https://issues.apache.org/jira/browse/CASSANDRA-14085
> Project: Cassandra
>  Issue Type: Bug
>  Components: Metrics
>Reporter: Andrew Whang
>Priority: Minor
> Fix For: 3.0.16, 4.0
>
>
> We noticed an increase in read latency after upgrading to 3.x, specifically 
> for requests with CL>ONE. It turns out the read latency metric is being 
> doubly updated for digest calculations. This code 
> (https://github.com/apache/cassandra/blob/trunk/src/java/org/apache/cassandra/db/partitions/UnfilteredPartitionIterators.java#L243)
>  makes an improper copy of an iterator that's wrapped by MetricRecording, 
> whose onClose() records the latency of the execution.



--
This message was sent by Atlassian JIRA
(v6.4.14#64029)

-
To unsubscribe, e-mail: commits-unsubscr...@cassandra.apache.org
For additional commands, e-mail: commits-h...@cassandra.apache.org



[jira] [Created] (CASSANDRA-14085) Excessive update of ReadLatency metric in digest calculation

2017-11-30 Thread Andrew Whang (JIRA)
Andrew Whang created CASSANDRA-14085:


 Summary: Excessive update of ReadLatency metric in digest 
calculation
 Key: CASSANDRA-14085
 URL: https://issues.apache.org/jira/browse/CASSANDRA-14085
 Project: Cassandra
  Issue Type: Bug
  Components: Metrics
Reporter: Andrew Whang
Priority: Minor


We noticed an increase in read latency after upgrading to 3.x, specifically for 
requests with CL>ONE. It turns out the read latency metric is being doubly 
updated for digest calculations. This code 
(https://github.com/apache/cassandra/blob/trunk/src/java/org/apache/cassandra/db/partitions/UnfilteredPartitionIterators.java#L243)
 makes an improper copy of an iterator that's wrapped by MetricRecording, whose 
onClose() records the latency of the execution.



--
This message was sent by Atlassian JIRA
(v6.4.14#64029)

-
To unsubscribe, e-mail: commits-unsubscr...@cassandra.apache.org
For additional commands, e-mail: commits-h...@cassandra.apache.org



[jira] [Updated] (CASSANDRA-13561) Purge TTL on expiration

2017-11-10 Thread Andrew Whang (JIRA)

 [ 
https://issues.apache.org/jira/browse/CASSANDRA-13561?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Andrew Whang updated CASSANDRA-13561:
-
Resolution: Duplicate
Status: Resolved  (was: Patch Available)

> Purge TTL on expiration
> ---
>
> Key: CASSANDRA-13561
> URL: https://issues.apache.org/jira/browse/CASSANDRA-13561
> Project: Cassandra
>  Issue Type: New Feature
>Reporter: Andrew Whang
>Assignee: Andrew Whang
>Priority: Minor
> Fix For: 4.0
>
>
> Tables with mostly TTL columns tend to suffer from high droppable tombstone 
> ratio, which results in higher read latency, cpu utilization, and disk usage. 
> Expired TTL data become tombstones, and the nature of purging tombstones 
> during compaction (due to checking for overlapping SSTables) make them 
> susceptible to surviving much longer than expected. A table option to purge 
> TTL on expiration would address this issue, by preventing them from becoming 
> tombstones. A boolean purge_ttl_on_expiration table setting would allow users 
> to easily turn the feature on or off. 
> Being more aggressive with gc_grace could also address the problem of long 
> lasting tombstones, but that would affect tombstones from deletes as well. 
> Even if a purged [expired] cell is revived via repair from a node that hasn't 
> yet compacted away the cell, it would be revived as an expiring cell with the 
> same localDeletionTime, so reads should properly handle them. As well, it 
> would be purged in the next compaction. 



--
This message was sent by Atlassian JIRA
(v6.4.14#64029)

-
To unsubscribe, e-mail: commits-unsubscr...@cassandra.apache.org
For additional commands, e-mail: commits-h...@cassandra.apache.org



[jira] [Comment Edited] (CASSANDRA-13561) Purge TTL on expiration

2017-11-09 Thread Andrew Whang (JIRA)

[ 
https://issues.apache.org/jira/browse/CASSANDRA-13561?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=16246911#comment-16246911
 ] 

Andrew Whang edited comment on CASSANDRA-13561 at 11/10/17 2:16 AM:


CASSANDRA-13643 seems to do something similar, but safer. I think we can close 
this out.


was (Author: whangsf):
CASSANDRA-13643 seems to do something similar, but safer. Closing this out.

> Purge TTL on expiration
> ---
>
> Key: CASSANDRA-13561
> URL: https://issues.apache.org/jira/browse/CASSANDRA-13561
> Project: Cassandra
>  Issue Type: New Feature
>Reporter: Andrew Whang
>Assignee: Andrew Whang
>Priority: Minor
> Fix For: 4.0
>
>
> Tables with mostly TTL columns tend to suffer from high droppable tombstone 
> ratio, which results in higher read latency, cpu utilization, and disk usage. 
> Expired TTL data become tombstones, and the nature of purging tombstones 
> during compaction (due to checking for overlapping SSTables) make them 
> susceptible to surviving much longer than expected. A table option to purge 
> TTL on expiration would address this issue, by preventing them from becoming 
> tombstones. A boolean purge_ttl_on_expiration table setting would allow users 
> to easily turn the feature on or off. 
> Being more aggressive with gc_grace could also address the problem of long 
> lasting tombstones, but that would affect tombstones from deletes as well. 
> Even if a purged [expired] cell is revived via repair from a node that hasn't 
> yet compacted away the cell, it would be revived as an expiring cell with the 
> same localDeletionTime, so reads should properly handle them. As well, it 
> would be purged in the next compaction. 



--
This message was sent by Atlassian JIRA
(v6.4.14#64029)

-
To unsubscribe, e-mail: commits-unsubscr...@cassandra.apache.org
For additional commands, e-mail: commits-h...@cassandra.apache.org



[jira] [Commented] (CASSANDRA-13561) Purge TTL on expiration

2017-11-09 Thread Andrew Whang (JIRA)

[ 
https://issues.apache.org/jira/browse/CASSANDRA-13561?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=16246911#comment-16246911
 ] 

Andrew Whang commented on CASSANDRA-13561:
--

CASSANDRA-13643 seems to do something similar, but safer. Closing this out.

> Purge TTL on expiration
> ---
>
> Key: CASSANDRA-13561
> URL: https://issues.apache.org/jira/browse/CASSANDRA-13561
> Project: Cassandra
>  Issue Type: New Feature
>Reporter: Andrew Whang
>Assignee: Andrew Whang
>Priority: Minor
> Fix For: 4.0
>
>
> Tables with mostly TTL columns tend to suffer from high droppable tombstone 
> ratio, which results in higher read latency, cpu utilization, and disk usage. 
> Expired TTL data become tombstones, and the nature of purging tombstones 
> during compaction (due to checking for overlapping SSTables) make them 
> susceptible to surviving much longer than expected. A table option to purge 
> TTL on expiration would address this issue, by preventing them from becoming 
> tombstones. A boolean purge_ttl_on_expiration table setting would allow users 
> to easily turn the feature on or off. 
> Being more aggressive with gc_grace could also address the problem of long 
> lasting tombstones, but that would affect tombstones from deletes as well. 
> Even if a purged [expired] cell is revived via repair from a node that hasn't 
> yet compacted away the cell, it would be revived as an expiring cell with the 
> same localDeletionTime, so reads should properly handle them. As well, it 
> would be purged in the next compaction. 



--
This message was sent by Atlassian JIRA
(v6.4.14#64029)

-
To unsubscribe, e-mail: commits-unsubscr...@cassandra.apache.org
For additional commands, e-mail: commits-h...@cassandra.apache.org



[jira] [Commented] (CASSANDRA-13967) Hints for hosts no longer part of the ring remain in the hints directory

2017-10-18 Thread Andrew Whang (JIRA)

[ 
https://issues.apache.org/jira/browse/CASSANDRA-13967?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=16210081#comment-16210081
 ] 

Andrew Whang commented on CASSANDRA-13967:
--

It seems nodetool removenode and assassinate both successfully removes the 
hints for the node being removed. I do see accumulated hints for invalid hosts, 
just not sure how to reproduce it. Will close this ticket if unable to repro.

> Hints for hosts no longer part of the ring remain in the hints directory
> 
>
> Key: CASSANDRA-13967
> URL: https://issues.apache.org/jira/browse/CASSANDRA-13967
> Project: Cassandra
>  Issue Type: Bug
>  Components: Coordination
>Reporter: Andrew Whang
>Priority: Minor
>
> I find the hints directory grows over time as hosts are decommissioned 
> because the hints for the old hosts remain undelivered/unremoved.



--
This message was sent by Atlassian JIRA
(v6.4.14#64029)

-
To unsubscribe, e-mail: commits-unsubscr...@cassandra.apache.org
For additional commands, e-mail: commits-h...@cassandra.apache.org



[jira] [Commented] (CASSANDRA-13967) Hints for hosts no longer part of the ring remain in the hints directory

2017-10-18 Thread Andrew Whang (JIRA)

[ 
https://issues.apache.org/jira/browse/CASSANDRA-13967?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=16209873#comment-16209873
 ] 

Andrew Whang commented on CASSANDRA-13967:
--

nodetool truncatehints is one way to remove these stale hints, but it would be 
nice for the system to automatically detect and remove stale hints (for target 
hosts no longer part of the ring).

> Hints for hosts no longer part of the ring remain in the hints directory
> 
>
> Key: CASSANDRA-13967
> URL: https://issues.apache.org/jira/browse/CASSANDRA-13967
> Project: Cassandra
>  Issue Type: Bug
>  Components: Coordination
>Reporter: Andrew Whang
>Priority: Minor
>
> I find the hints directory grows over time as hosts are decommissioned 
> because the hints for the old hosts remain undelivered/unremoved.



--
This message was sent by Atlassian JIRA
(v6.4.14#64029)

-
To unsubscribe, e-mail: commits-unsubscr...@cassandra.apache.org
For additional commands, e-mail: commits-h...@cassandra.apache.org



[jira] [Created] (CASSANDRA-13967) Hints for hosts no longer part of the ring remain in the hints directory

2017-10-18 Thread Andrew Whang (JIRA)
Andrew Whang created CASSANDRA-13967:


 Summary: Hints for hosts no longer part of the ring remain in the 
hints directory
 Key: CASSANDRA-13967
 URL: https://issues.apache.org/jira/browse/CASSANDRA-13967
 Project: Cassandra
  Issue Type: Bug
  Components: Coordination
Reporter: Andrew Whang
Priority: Minor


I find the hints directory grows over time as hosts are decommissioned because 
the hints for the old hosts remain undelivered/unremoved.



--
This message was sent by Atlassian JIRA
(v6.4.14#64029)

-
To unsubscribe, e-mail: commits-unsubscr...@cassandra.apache.org
For additional commands, e-mail: commits-h...@cassandra.apache.org



[jira] [Commented] (CASSANDRA-13632) Digest mismatch if row is empty

2017-09-18 Thread Andrew Whang (JIRA)

[ 
https://issues.apache.org/jira/browse/CASSANDRA-13632?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=16170271#comment-16170271
 ] 

Andrew Whang commented on CASSANDRA-13632:
--

[~jasobrown] We're using old-school thrift via pycassa. I can repro in our 
shadow environment, but unable to in my dev using ccm + pycassa. Will let you 
know once I can get this error reproducible. 

> Digest mismatch if row is empty
> ---
>
> Key: CASSANDRA-13632
> URL: https://issues.apache.org/jira/browse/CASSANDRA-13632
> Project: Cassandra
>  Issue Type: Bug
>  Components: Local Write-Read Paths
>Reporter: Andrew Whang
>Assignee: Andrew Whang
> Fix For: 3.0.x
>
>
> This issue is similar to CASSANDRA-12090. Quorum read queries that include a 
> column selector (non-wildcard) result in digest mismatch when the row is 
> empty (key does not exist). It seems the data serialization path checks if 
> rowIterator.isEmpty() and if so ignores column names (by setting IS_EMPTY 
> flag). However, the digest serialization path does not perform this check and 
> includes column names. The digest comparison results in a mismatch. The 
> mismatch does not end up issuing a read repair mutation since the underlying 
> data is the same.
> The mismatch on the read path ends up doubling our p99 read latency. We 
> discovered this issue while testing a 2.2.5 to 3.0.13 upgrade.
> One thing to note is that we're using thrift, which ends up handling the 
> ColumnFilter differently than the CQL path. 
> As with CASSANDRA-12090, fixing the digest seems sensible.



--
This message was sent by Atlassian JIRA
(v6.4.14#64029)

-
To unsubscribe, e-mail: commits-unsubscr...@cassandra.apache.org
For additional commands, e-mail: commits-h...@cassandra.apache.org



[jira] [Commented] (CASSANDRA-13752) Corrupted SSTables created in 3.11

2017-08-23 Thread Andrew Whang (JIRA)

[ 
https://issues.apache.org/jira/browse/CASSANDRA-13752?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=16138959#comment-16138959
 ] 

Andrew Whang commented on CASSANDRA-13752:
--

Can we get this patched to 3.0 as well?

> Corrupted SSTables created in 3.11
> --
>
> Key: CASSANDRA-13752
> URL: https://issues.apache.org/jira/browse/CASSANDRA-13752
> Project: Cassandra
>  Issue Type: Bug
>Reporter: Hannu Kröger
>Priority: Blocker
>
> We have discovered issues with corrupted SSTables. 
> {code}
> ERROR [SSTableBatchOpen:22] 2017-08-03 20:19:53,195 SSTableReader.java:577 - 
> Cannot read sstable 
> /cassandra/data/mykeyspace/mytable-7a4992800d5611e7b782cb90016f2d17/mc-35556-big=[Data.db,
>  Statistics.db, Summary.db, Digest.crc32, CompressionInfo.db, TOC.txt, 
> Index.db, Filter.db]; other IO error, skipping table
> java.io.EOFException: EOF after 1898 bytes out of 21093
> at 
> org.apache.cassandra.io.util.RebufferingInputStream.readFully(RebufferingInputStream.java:68)
>  ~[apache-cassandra-3.11.0.jar:3.11.0]
> at 
> org.apache.cassandra.io.util.RebufferingInputStream.readFully(RebufferingInputStream.java:60)
>  ~[apache-cassandra-3.11.0.jar:3.11.0]
> at 
> org.apache.cassandra.utils.ByteBufferUtil.read(ByteBufferUtil.java:402) 
> ~[apache-cassandra-3.11.0.jar:3.11.0]
> at 
> org.apache.cassandra.utils.ByteBufferUtil.readWithShortLength(ByteBufferUtil.java:377)
>  ~[apache-cassandra-3.11.0.jar:3.11.0]
> at 
> org.apache.cassandra.io.sstable.metadata.StatsMetadata$StatsMetadataSerializer.deserialize(StatsMetadata.java:325)
>  ~[apache-cassandra-3.11.0.jar:3.11.0]
> at 
> org.apache.cassandra.io.sstable.metadata.StatsMetadata$StatsMetadataSerializer.deserialize(StatsMetadata.java:231)
>  ~[apache-cassandra-3.11.0.jar:3.11.0]
> at 
> org.apache.cassandra.io.sstable.metadata.MetadataSerializer.deserialize(MetadataSerializer.java:122)
>  ~[apache-cassandra-3.11.0.jar:3.11.0]
> at 
> org.apache.cassandra.io.sstable.metadata.MetadataSerializer.deserialize(MetadataSerializer.java:93)
>  ~[apache-cassandra-3.11.0.jar:3.11.0]
> at 
> org.apache.cassandra.io.sstable.format.SSTableReader.open(SSTableReader.java:488)
>  ~[apache-cassandra-3.11.0.jar:3.11.0]
> at 
> org.apache.cassandra.io.sstable.format.SSTableReader.open(SSTableReader.java:396)
>  ~[apache-cassandra-3.11.0.jar:3.11.0]
> at 
> org.apache.cassandra.io.sstable.format.SSTableReader$5.run(SSTableReader.java:561)
>  ~[apache-cassandra-3.11.0.jar:3.11.0]
> at 
> java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) 
> [na:1.8.0_111]
> at java.util.concurrent.FutureTask.run(FutureTask.java:266) 
> [na:1.8.0_111]
> at 
> java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
>  [na:1.8.0_111]
> at 
> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
>  [na:1.8.0_111]
> at 
> org.apache.cassandra.concurrent.NamedThreadFactory.lambda$threadLocalDeallocator$0(NamedThreadFactory.java:81)
>  [apache-cassandra-3.11.0.jar:3.11.0]
> {code}
> Files look like this:
> {code}
> -rw-r--r--. 1 cassandra cassandra 3899251 Aug  7 08:37 
> mc-6166-big-CompressionInfo.db
> -rw-r--r--. 1 cassandra cassandra 16874421686 Aug  7 08:37 mc-6166-big-Data.db
> -rw-r--r--. 1 cassandra cassandra  10 Aug  7 08:37 
> mc-6166-big-Digest.crc32
> -rw-r--r--. 1 cassandra cassandra 2930904 Aug  7 08:37 
> mc-6166-big-Filter.db
> -rw-r--r--. 1 cassandra cassandra   75880 Aug  7 08:37 
> mc-6166-big-Index.db
> -rw-r--r--. 1 cassandra cassandra   13762 Aug  7 08:37 
> mc-6166-big-Statistics.db
> -rw-r--r--. 1 cassandra cassandra  882008 Aug  7 08:37 
> mc-6166-big-Summary.db
> -rw-r--r--. 1 cassandra cassandra  92 Aug  7 08:37 mc-6166-big-TOC.txt
> {code}



--
This message was sent by Atlassian JIRA
(v6.4.14#64029)

-
To unsubscribe, e-mail: commits-unsubscr...@cassandra.apache.org
For additional commands, e-mail: commits-h...@cassandra.apache.org



[jira] [Commented] (CASSANDRA-13561) Purge TTL on expiration

2017-07-19 Thread Andrew Whang (JIRA)

[ 
https://issues.apache.org/jira/browse/CASSANDRA-13561?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=16093343#comment-16093343
 ] 

Andrew Whang commented on CASSANDRA-13561:
--

Correct, this implementation would still require a compaction to purge the 
expired cells.

Also correct, in the scenario you described there is a risk of the expired cell 
returning from the dead. The scenario does disregard HH. If hints are properly 
delivered, the risk is mitigated. To be clear, the scenario is similar to 
setting GCGS=0. The user has to understand the risk of using these settings. 

The risk is also mitigated in use cases where there is a default TTL on the 
table or client mutations use a default TTL. These are the scenarios for which 
we use this feature in our environment. In these use cases, we noticed the 
table suffered from high droppable tombstone ratio and high read latency. Using 
this feature to purge TTL as they expired addressed both droppable tombstone 
ratio and read latency. 

> Purge TTL on expiration
> ---
>
> Key: CASSANDRA-13561
> URL: https://issues.apache.org/jira/browse/CASSANDRA-13561
> Project: Cassandra
>  Issue Type: New Feature
>Reporter: Andrew Whang
>Assignee: Andrew Whang
>Priority: Minor
> Fix For: 4.0
>
>
> Tables with mostly TTL columns tend to suffer from high droppable tombstone 
> ratio, which results in higher read latency, cpu utilization, and disk usage. 
> Expired TTL data become tombstones, and the nature of purging tombstones 
> during compaction (due to checking for overlapping SSTables) make them 
> susceptible to surviving much longer than expected. A table option to purge 
> TTL on expiration would address this issue, by preventing them from becoming 
> tombstones. A boolean purge_ttl_on_expiration table setting would allow users 
> to easily turn the feature on or off. 
> Being more aggressive with gc_grace could also address the problem of long 
> lasting tombstones, but that would affect tombstones from deletes as well. 
> Even if a purged [expired] cell is revived via repair from a node that hasn't 
> yet compacted away the cell, it would be revived as an expiring cell with the 
> same localDeletionTime, so reads should properly handle them. As well, it 
> would be purged in the next compaction. 



--
This message was sent by Atlassian JIRA
(v6.4.14#64029)

-
To unsubscribe, e-mail: commits-unsubscr...@cassandra.apache.org
For additional commands, e-mail: commits-h...@cassandra.apache.org



[jira] [Commented] (CASSANDRA-13561) Purge TTL on expiration

2017-07-06 Thread Andrew Whang (JIRA)

[ 
https://issues.apache.org/jira/browse/CASSANDRA-13561?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=16077291#comment-16077291
 ] 

Andrew Whang commented on CASSANDRA-13561:
--

Correct me if I'm wrong, but the limitations I see with CASSANDRA-13418 are:
1. It's tied to a compaction strategy, and currently only supported in TWCS.
2. It helps cleanup sstables, but only when all items in the sstable have 
expired. 

The approach I'm proposing would support dropping individual (expired) cells 
within the sstable, without having to wait for all other items  to expire.

> Purge TTL on expiration
> ---
>
> Key: CASSANDRA-13561
> URL: https://issues.apache.org/jira/browse/CASSANDRA-13561
> Project: Cassandra
>  Issue Type: New Feature
>Reporter: Andrew Whang
>Assignee: Andrew Whang
>Priority: Minor
> Fix For: 4.0
>
>
> Tables with mostly TTL columns tend to suffer from high droppable tombstone 
> ratio, which results in higher read latency, cpu utilization, and disk usage. 
> Expired TTL data become tombstones, and the nature of purging tombstones 
> during compaction (due to checking for overlapping SSTables) make them 
> susceptible to surviving much longer than expected. A table option to purge 
> TTL on expiration would address this issue, by preventing them from becoming 
> tombstones. A boolean purge_ttl_on_expiration table setting would allow users 
> to easily turn the feature on or off. 
> Being more aggressive with gc_grace could also address the problem of long 
> lasting tombstones, but that would affect tombstones from deletes as well. 
> Even if a purged [expired] cell is revived via repair from a node that hasn't 
> yet compacted away the cell, it would be revived as an expiring cell with the 
> same localDeletionTime, so reads should properly handle them. As well, it 
> would be purged in the next compaction. 



--
This message was sent by Atlassian JIRA
(v6.4.14#64029)

-
To unsubscribe, e-mail: commits-unsubscr...@cassandra.apache.org
For additional commands, e-mail: commits-h...@cassandra.apache.org



[jira] [Updated] (CASSANDRA-13632) Digest mismatch if row is empty

2017-06-23 Thread Andrew Whang (JIRA)

 [ 
https://issues.apache.org/jira/browse/CASSANDRA-13632?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Andrew Whang updated CASSANDRA-13632:
-
Summary: Digest mismatch if row is empty  (was: Digest mismatch if 
(non-static) column is null)

> Digest mismatch if row is empty
> ---
>
> Key: CASSANDRA-13632
> URL: https://issues.apache.org/jira/browse/CASSANDRA-13632
> Project: Cassandra
>  Issue Type: Bug
>  Components: Local Write-Read Paths
>Reporter: Andrew Whang
> Fix For: 3.0.14
>
>
> This issue is similar to CASSANDRA-12090. Quorum read queries that include a 
> column selector (non-wildcard) result in digest mismatch when the row is 
> empty (key does not exist). It seems the data serialization path checks if 
> rowIterator.isEmpty() and if so ignores column names (by setting IS_EMPTY 
> flag). However, the digest serialization path does not perform this check and 
> includes column names. The digest comparison results in a mismatch. The 
> mismatch does not end up issuing a read repair mutation since the underlying 
> data is the same.
> The mismatch on the read path ends up doubling our p99 read latency. We 
> discovered this issue while testing a 2.2.5 to 3.0.13 upgrade.
> One thing to note is that we're using thrift, which ends up handling the 
> ColumnFilter differently than the CQL path. 
> As with CASSANDRA-12090, fixing the digest seems sensible.



--
This message was sent by Atlassian JIRA
(v6.4.14#64029)

-
To unsubscribe, e-mail: commits-unsubscr...@cassandra.apache.org
For additional commands, e-mail: commits-h...@cassandra.apache.org



[jira] [Updated] (CASSANDRA-13632) Digest mismatch if (non-static) column is null

2017-06-23 Thread Andrew Whang (JIRA)

 [ 
https://issues.apache.org/jira/browse/CASSANDRA-13632?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Andrew Whang updated CASSANDRA-13632:
-
Description: 
This issue is similar to CASSANDRA-12090. Quorum read queries that include a 
column selector (non-wildcard) result in digest mismatch when the row is empty 
(key does not exist). It seems the data serialization path checks if 
rowIterator.isEmpty() and if so ignores column names (by setting IS_EMPTY 
flag). However, the digest serialization path does not perform this check and 
includes column names. The digest comparison results in a mismatch. The 
mismatch does not end up issuing a read repair mutation since the underlying 
data is the same.

The mismatch on the read path ends up doubling our p99 read latency. We 
discovered this issue while testing a 2.2.5 to 3.0.13 upgrade.

One thing to note is that we're using thrift, which ends up handling the 
ColumnFilter differently than the CQL path. 

As with CASSANDRA-12090, fixing the digest seems sensible.

  was:
This issue is similar to CASSANDRA-12090. Quorum read queries that include a 
column selector (non-wildcard) result in digest mismatch when the column value 
is null. It seems the data serialization path checks if rowIterator.isEmpty() 
and if so ignores column names (by setting IS_EMPTY flag). However, the digest 
serialization path does not perform this check and includes column names. The 
digest comparison results in a mismatch. The mismatch does not end up issuing a 
read repair mutation since the underlying data is the same.

Our use case involves frequent deletion of partition columns, so the mismatch 
on the read path ends up doubling our p99 read latency. We discovered this 
issue while testing a 2.2.5 to 3.0.13 upgrade.

One thing to note is that we're using thrift, which ends up handling the 
ColumnFilter differently than the CQL path. 

As with CASSANDRA-12090, fixing the digest seems sensible.


> Digest mismatch if (non-static) column is null
> --
>
> Key: CASSANDRA-13632
> URL: https://issues.apache.org/jira/browse/CASSANDRA-13632
> Project: Cassandra
>  Issue Type: Bug
>  Components: Local Write-Read Paths
>Reporter: Andrew Whang
> Fix For: 3.0.14
>
>
> This issue is similar to CASSANDRA-12090. Quorum read queries that include a 
> column selector (non-wildcard) result in digest mismatch when the row is 
> empty (key does not exist). It seems the data serialization path checks if 
> rowIterator.isEmpty() and if so ignores column names (by setting IS_EMPTY 
> flag). However, the digest serialization path does not perform this check and 
> includes column names. The digest comparison results in a mismatch. The 
> mismatch does not end up issuing a read repair mutation since the underlying 
> data is the same.
> The mismatch on the read path ends up doubling our p99 read latency. We 
> discovered this issue while testing a 2.2.5 to 3.0.13 upgrade.
> One thing to note is that we're using thrift, which ends up handling the 
> ColumnFilter differently than the CQL path. 
> As with CASSANDRA-12090, fixing the digest seems sensible.



--
This message was sent by Atlassian JIRA
(v6.4.14#64029)

-
To unsubscribe, e-mail: commits-unsubscr...@cassandra.apache.org
For additional commands, e-mail: commits-h...@cassandra.apache.org



[jira] [Updated] (CASSANDRA-13632) Digest mismatch if (non-static) column is null

2017-06-22 Thread Andrew Whang (JIRA)

 [ 
https://issues.apache.org/jira/browse/CASSANDRA-13632?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Andrew Whang updated CASSANDRA-13632:
-
Fix Version/s: 3.0.14
   Status: Patch Available  (was: Open)

https://github.com/whangsf/cassandra/commit/0efb32db3eaf76229c53451f2fc3ab85693a76bd

> Digest mismatch if (non-static) column is null
> --
>
> Key: CASSANDRA-13632
> URL: https://issues.apache.org/jira/browse/CASSANDRA-13632
> Project: Cassandra
>  Issue Type: Bug
>  Components: Local Write-Read Paths
>Reporter: Andrew Whang
> Fix For: 3.0.14
>
>
> This issue is similar to CASSANDRA-12090. Quorum read queries that include a 
> column selector (non-wildcard) result in digest mismatch when the column 
> value is null. It seems the data serialization path checks if 
> rowIterator.isEmpty() and if so ignores column names (by setting IS_EMPTY 
> flag). However, the digest serialization path does not perform this check and 
> includes column names. The digest comparison results in a mismatch. The 
> mismatch does not end up issuing a read repair mutation since the underlying 
> data is the same.
> Our use case involves frequent deletion of partition columns, so the mismatch 
> on the read path ends up doubling our p99 read latency. We discovered this 
> issue while testing a 2.2.5 to 3.0.13 upgrade.
> One thing to note is that we're using thrift, which ends up handling the 
> ColumnFilter differently than the CQL path. 
> As with CASSANDRA-12090, fixing the digest seems sensible.



--
This message was sent by Atlassian JIRA
(v6.4.14#64029)

-
To unsubscribe, e-mail: commits-unsubscr...@cassandra.apache.org
For additional commands, e-mail: commits-h...@cassandra.apache.org



[jira] [Updated] (CASSANDRA-13632) Digest mismatch if (non-static) column is null

2017-06-22 Thread Andrew Whang (JIRA)

 [ 
https://issues.apache.org/jira/browse/CASSANDRA-13632?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Andrew Whang updated CASSANDRA-13632:
-
Description: 
This issue is similar to CASSANDRA-12090. Quorum read queries that include a 
column selector (non-wildcard) result in digest mismatch when the column value 
is null. It seems the data serialization path checks if rowIterator.isEmpty() 
and if so ignores column names (by setting IS_EMPTY flag). However, the digest 
serialization path does not perform this check and includes column names. The 
digest comparison results in a mismatch. The mismatch does not end up issuing a 
read repair mutation since the underlying data is the same.

Our use case involves frequent deletion of partition columns, so the mismatch 
on the read path ends up doubling our p99 read latency. We discovered this 
issue while testing a 2.2.5 to 3.0.13 upgrade.

One thing to note is that we're using thrift, which ends up handling the 
ColumnFilter differently than the CQL path. 

As with CASSANDRA-12090, fixing the digest seems sensible.

  was:
This issue is similar to CASSANDRA-12090. Quorum read queries that include a 
column selector (non-wildcard) result in digest mismatch when the column value 
is null. It seems the data serialization path checks if rowIterator.isEmpty() 
and if so ignores column names (by setting IS_EMPTY flag). However, the digest 
serialization path does not perform this check and includes column names. The 
digest comparison results in a mismatch. The mismatch does not end up issuing a 
read repair mutation since the underlying data is the same.

Our use case involves frequent deletion of partition columns, so the mismatch 
on the read path ends up doubling our p99 read latency. We discovered this 
issue while testing a 2.2.5 to 3.0.13 upgrade.

As with CASSANDRA-12090, fixing the digest seems sensible.


> Digest mismatch if (non-static) column is null
> --
>
> Key: CASSANDRA-13632
> URL: https://issues.apache.org/jira/browse/CASSANDRA-13632
> Project: Cassandra
>  Issue Type: Bug
>  Components: Local Write-Read Paths
>Reporter: Andrew Whang
>
> This issue is similar to CASSANDRA-12090. Quorum read queries that include a 
> column selector (non-wildcard) result in digest mismatch when the column 
> value is null. It seems the data serialization path checks if 
> rowIterator.isEmpty() and if so ignores column names (by setting IS_EMPTY 
> flag). However, the digest serialization path does not perform this check and 
> includes column names. The digest comparison results in a mismatch. The 
> mismatch does not end up issuing a read repair mutation since the underlying 
> data is the same.
> Our use case involves frequent deletion of partition columns, so the mismatch 
> on the read path ends up doubling our p99 read latency. We discovered this 
> issue while testing a 2.2.5 to 3.0.13 upgrade.
> One thing to note is that we're using thrift, which ends up handling the 
> ColumnFilter differently than the CQL path. 
> As with CASSANDRA-12090, fixing the digest seems sensible.



--
This message was sent by Atlassian JIRA
(v6.4.14#64029)

-
To unsubscribe, e-mail: commits-unsubscr...@cassandra.apache.org
For additional commands, e-mail: commits-h...@cassandra.apache.org



[jira] [Created] (CASSANDRA-13632) Digest mismatch if (non-static) column is null

2017-06-22 Thread Andrew Whang (JIRA)
Andrew Whang created CASSANDRA-13632:


 Summary: Digest mismatch if (non-static) column is null
 Key: CASSANDRA-13632
 URL: https://issues.apache.org/jira/browse/CASSANDRA-13632
 Project: Cassandra
  Issue Type: Bug
  Components: Local Write-Read Paths
Reporter: Andrew Whang


This issue is similar to CASSANDRA-12090. Quorum read queries that include a 
column selector (non-wildcard) result in digest mismatch when the column value 
is null. It seems the data serialization path checks if rowIterator.isEmpty() 
and if so ignores column names (by setting IS_EMPTY flag). However, the digest 
serialization path does not perform this check and includes column names. The 
digest comparison results in a mismatch. The mismatch does not end up issuing a 
read repair mutation since the underlying data is the same.

Our use case involves frequent deletion of partition columns, so the mismatch 
on the read path ends up doubling our p99 read latency. We discovered this 
issue while testing a 2.2.5 to 3.0.13 upgrade.

As with CASSANDRA-12090, fixing the digest seems sensible.



--
This message was sent by Atlassian JIRA
(v6.4.14#64029)

-
To unsubscribe, e-mail: commits-unsubscr...@cassandra.apache.org
For additional commands, e-mail: commits-h...@cassandra.apache.org



[jira] [Updated] (CASSANDRA-13561) Purge TTL on expiration

2017-06-04 Thread Andrew Whang (JIRA)

 [ 
https://issues.apache.org/jira/browse/CASSANDRA-13561?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Andrew Whang updated CASSANDRA-13561:
-
Fix Version/s: 4.0
   Status: Patch Available  (was: Open)

Patch here 
https://github.com/whangsf/cassandra/commit/6f46e18988122f80608b1f5ba4a3d5c5dbbe1c61

> Purge TTL on expiration
> ---
>
> Key: CASSANDRA-13561
> URL: https://issues.apache.org/jira/browse/CASSANDRA-13561
> Project: Cassandra
>  Issue Type: New Feature
>Reporter: Andrew Whang
>Priority: Minor
> Fix For: 4.0
>
>
> Tables with mostly TTL columns tend to suffer from high droppable tombstone 
> ratio, which results in higher read latency, cpu utilization, and disk usage. 
> Expired TTL data become tombstones, and the nature of purging tombstones 
> during compaction (due to checking for overlapping SSTables) make them 
> susceptible to surviving much longer than expected. A table option to purge 
> TTL on expiration would address this issue, by preventing them from becoming 
> tombstones. A boolean purge_ttl_on_expiration table setting would allow users 
> to easily turn the feature on or off. 
> Being more aggressive with gc_grace could also address the problem of long 
> lasting tombstones, but that would affect tombstones from deletes as well. 
> Even if a purged [expired] cell is revived via repair from a node that hasn't 
> yet compacted away the cell, it would be revived as an expiring cell with the 
> same localDeletionTime, so reads should properly handle them. As well, it 
> would be purged in the next compaction. 



--
This message was sent by Atlassian JIRA
(v6.3.15#6346)

-
To unsubscribe, e-mail: commits-unsubscr...@cassandra.apache.org
For additional commands, e-mail: commits-h...@cassandra.apache.org



[jira] [Created] (CASSANDRA-13561) Purge TTL on expiration

2017-05-29 Thread Andrew Whang (JIRA)
Andrew Whang created CASSANDRA-13561:


 Summary: Purge TTL on expiration
 Key: CASSANDRA-13561
 URL: https://issues.apache.org/jira/browse/CASSANDRA-13561
 Project: Cassandra
  Issue Type: New Feature
Reporter: Andrew Whang
Priority: Minor


Tables with mostly TTL columns tend to suffer from high droppable tombstone 
ratio, which results in higher read latency, cpu utilization, and disk usage. 
Expired TTL data become tombstones, and the nature of purging tombstones during 
compaction (due to checking for overlapping SSTables) make them susceptible to 
surviving much longer than expected. A table option to purge TTL on expiration 
would address this issue, by preventing them from becoming tombstones. A 
boolean purge_ttl_on_expiration table setting would allow users to easily turn 
the feature on or off. 

Being more aggressive with gc_grace could also address the problem of long 
lasting tombstones, but that would affect tombstones from deletes as well. 

Even if a purged [expired] cell is revived via repair from a node that hasn't 
yet compacted away the cell, it would be revived as an expiring cell with the 
same localDeletionTime, so reads should properly handle them. As well, it would 
be purged in the next compaction. 



--
This message was sent by Atlassian JIRA
(v6.3.15#6346)

-
To unsubscribe, e-mail: commits-unsubscr...@cassandra.apache.org
For additional commands, e-mail: commits-h...@cassandra.apache.org