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

Pavel Yaskevich updated CASSANDRA-3143:
---------------------------------------

    Attachment: 0006-row-key-cache-improvements-according-to-Sylvain-s-co.patch
                0005-cleanup-of-the-CFMetaData-and-thrift-avro-CfDef-and-.patch
                0004-key-row-cache-tests-and-tweaks.patch
                0003-CacheServiceMBean-and-correct-key-cache-loading.patch
                0002-global-row-cache-and-ASC.readSaved-changed-to-abstra.patch
                0001-global-key-cache.patch

bq. Preceding point apart, we would at least need a way to deactivate row 
caching on a per-cf basis. We may also want that for key cache, though this 
seems less critical. My initial idea would be to either have a boolean flag if 
we only want to allow disabling row cache, or some multi-value caches option 
that could be "none", "key_only", "row_only" or "all".

This is going to be moved to the separate task.

bq. For the Row cache key, we should really use the cfId instead of table and 
cfname.

Secondary index cfs do not register with Schema.load so they don't have a cfId.

bq. I think it would be worth factoring what can be of readSaved. In 
particular, we could create a KeyCacheKey (like RowCacheKey and that would 
really just be the usual pair of (Descriptor, DecoratedKey), have it share an 
interface with RowCacheKey (serialize and deserialize basically) and use that.

Done.

bq. Putting the clone of the key into the constructor of RowCacheKey is 
inefficient, we don't care about cloning when we invalidate or query the cache 
(nor when we deserialize RowCacheKeys).

Fixed.

bq. nit: not fond of declaration like public abstract Set<?> readSaved(), 
making it harder to know what the method returns just to save a few characters.

Changed to Set<? extends CacheKey> as both key and row cache key now share the 
same interface - CacheKey.

bq. I believe the CacheService.instance will load the CacheService that will 
trigger an exception if there is a problem, not set the instance to null. So in 
particular, this message will never be written. That code is moved by the 4th 
patch but the problem remains I think (note that we do want to make sure 
CacheService get loaded quickly to throw an exception if we have an 
initialization problem, it's just not the right way I believe).

This is the same as done in the StorageService constructor to make sure that 
StreamingService.instance is available when needed, because static fields are 
initialized on the first demand.

bq. I'm not super fond of that key cache preloading. If the key cache save is 
outdated, we'll have a bunch of uselessly preloaded stuff (not a huge deal 
but...). Maybe we could keep doing as before and just save the set of keys for 
each column family instead. That would needs buffering of the keys during the 
cache save though, but not sure it's such a huge deal and it would reduce the 
size of the saved cache quite a bit.

The idea was to rely on cache LRU policy and save an actual global state of the 
cache to minimize cache's specific configuration per cf...

bq. In CacheService, setRowCacheSavePeriodInSecond directly schedule the saving 
to the new value, but the get method grabs the value from DatabaseDescriptor, 
so it will always return the initially set value, which is not what we want. I 
think we should keep the Integer that were previously in CFS (but I'm fine 
moving them to CacheService).

Fixed.

bq. Why does the getRowCacheKeysToSave() option disappeared?

Because we don't control that anymore, rely on cache LRU policy instead.

bq. The patch does the following change: " + int newCapacity = (int) 
(DatabaseDescriptor.getReduceCacheCapacityTo() * getCapacity());" ....

This was unclear at first but fixed to use "weightedSize()" instead of 
"getCapacity()" now.

bq. I really think that making DecoratedKey equals method deal with RowCacheKey 
is asking for trouble. Not sure why it would be useful either?

Fixed.


Rebased with the latest trunk (last commit 
f76e9aeaed3e73bcfaf6bccd62f9f02f31b09960)
                
> Global caches (key/row)
> -----------------------
>
>                 Key: CASSANDRA-3143
>                 URL: https://issues.apache.org/jira/browse/CASSANDRA-3143
>             Project: Cassandra
>          Issue Type: Improvement
>            Reporter: Pavel Yaskevich
>            Assignee: Pavel Yaskevich
>            Priority: Minor
>              Labels: Core
>             Fix For: 1.1
>
>         Attachments: 0001-global-key-cache.patch, 
> 0002-global-row-cache-and-ASC.readSaved-changed-to-abstra.patch, 
> 0003-CacheServiceMBean-and-correct-key-cache-loading.patch, 
> 0004-key-row-cache-tests-and-tweaks.patch, 
> 0005-cleanup-of-the-CFMetaData-and-thrift-avro-CfDef-and-.patch, 
> 0006-row-key-cache-improvements-according-to-Sylvain-s-co.patch
>
>
> Caches are difficult to configure well as ColumnFamilies are added, similar 
> to how memtables were difficult pre-CASSANDRA-2006.

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators: 
https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira

        

Reply via email to