cassandra-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Jonathan Ellis (JIRA)" <j...@apache.org>
Subject [jira] [Updated] (CASSANDRA-10433) Reduce contention in CompositeType instance interning
Date Thu, 21 Jul 2016 15:21:20 GMT

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

Jonathan Ellis updated CASSANDRA-10433:
---------------------------------------
    Fix Version/s:     (was: 2.1.16)

I've pulled this out of 2.1.16 after a dev list discussion on taking a more rigorous line
on our policy of critical fixes only for 2.1.x.

> Reduce contention in CompositeType instance interning
> -----------------------------------------------------
>
>                 Key: CASSANDRA-10433
>                 URL: https://issues.apache.org/jira/browse/CASSANDRA-10433
>             Project: Cassandra
>          Issue Type: Improvement
>         Environment: Cassandra 2.2.1 running on 6 AWS c3.4xlarge nodes, CentOS 6.6
>            Reporter: David Schlosnagle
>            Assignee: David Schlosnagle
>            Priority: Minor
>             Fix For: 2.2.4
>
>         Attachments: 0001-Avoid-contention-in-CompositeType-instance-interning.patch
>
>
> While running some workload tests on Cassandra 2.2.1 and profiling with flight recorder
in a test environment, we have noticed significant contention on the static synchronized org.apache.cassandra.db.marshal.CompositeType.getInstance(List)
method.
> We are seeing threads blocked for 22.828 seconds from a 60 second snapshot while under
a mix of reads and writes from a Thrift based client.
> I would propose to reduce contention in org.apache.cassandra.db.marshal.CompositeType.getInstance(List)
by using a ConcurrentHashMap for the instances cache.
> {code}
> Contention Back Trace
> org.apache.cassandra.db.marshal.CompositeType.getInstance(List)
>   org.apache.cassandra.db.composites.AbstractCompoundCellNameType.asAbstractType()
>     org.apache.cassandra.db.SuperColumns.getComparatorFor(CFMetaData, boolean)
>       org.apache.cassandra.db.SuperColumns.getComparatorFor(CFMetaData, ByteBuffer)
>         org.apache.cassandra.thrift.ThriftValidation.validateColumnNames(CFMetaData,
ByteBuffer, Iterable)
>           org.apache.cassandra.thrift.ThriftValidation.validateColumnPath(CFMetaData,
ColumnPath)
>             org.apache.cassandra.thrift.ThriftValidation.validateColumnOrSuperColumn(CFMetaData,
ByteBuffer, ColumnOrSuperColumn)
>               org.apache.cassandra.thrift.ThriftValidation.validateMutation(CFMetaData,
ByteBuffer, Mutation)
>                 org.apache.cassandra.thrift.CassandraServer.createMutationList(ConsistencyLevel,
Map, boolean)
>                   org.apache.cassandra.thrift.CassandraServer.batch_mutate(Map, ConsistencyLevel)
>                     org.apache.cassandra.thrift.Cassandra$Processor$batch_mutate.getResult(Cassandra$Iface,
Cassandra$batch_mutate_args)
>         org.apache.cassandra.thrift.ThriftValidation.validateRange(CFMetaData, ColumnParent,
SliceRange)
>           org.apache.cassandra.thrift.ThriftValidation.validatePredicate(CFMetaData,
ColumnParent, SlicePredicate)
>             org.apache.cassandra.thrift.CassandraServer.get_range_slices(ColumnParent,
SlicePredicate, KeyRange, ConsistencyLevel)
>               org.apache.cassandra.thrift.Cassandra$Processor$get_range_slices.getResult(Cassandra$Iface,
Cassandra$get_range_slices_args)
>                 org.apache.cassandra.thrift.Cassandra$Processor$get_range_slices.getResult(Object,
TBase)
>                   org.apache.thrift.ProcessFunction.process(int, TProtocol, TProtocol,
Object)
>                     org.apache.thrift.TBaseProcessor.process(TProtocol, TProtocol)
>                       org.apache.cassandra.thrift.CustomTThreadPoolServer$WorkerProcess.run()
>                         java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor$Worker)
>                           java.util.concurrent.ThreadPoolExecutor$Worker.run()
>             org.apache.cassandra.thrift.CassandraServer.multigetSliceInternal(String,
List, ColumnParent, long, SlicePredicate, ConsistencyLevel, ClientState)
>               org.apache.cassandra.thrift.CassandraServer.multiget_slice(List, ColumnParent,
SlicePredicate, ConsistencyLevel)
>                 org.apache.cassandra.thrift.Cassandra$Processor$multiget_slice.getResult(Cassandra$Iface,
Cassandra$multiget_slice_args)
>                   org.apache.cassandra.thrift.Cassandra$Processor$multiget_slice.getResult(Object,
TBase)
> {code}



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Mime
View raw message