Fetching contributors…
Cannot retrieve contributors at this time
320 lines (277 sloc) 20.5 KB
Changes by version:
0.7.0 stands for cassandra's 0.7.0 version.
-22 stands for hector's version
Versions above 0.7.0-17 work well with cassandra's 0.7.* (after 0.7.0-beta2)
See object-mapper/CHANGELOG for HOM specifics
Remove ExhaustedPolicy as it doesn't seem to be used anymore. This will probably break some folks' configuration - watch out for spring config!
Made Composite Serializable
Added Composite to TypeInferringSerializer
Add start key to KeyIterator #419
Fix losing a host during Retry Down host service #439
Additional utility methods on ComparatorType. Thanks to ash2k for the patch.
Remove libthrift dependency reference directly in favor of transitive reference from Apache Cassandra libs. Thanks to #jfarrell for the patch (#349)
Fix bytebuffer munge on SuperCfResultWrapper (#381)
Bunch of package and code cleanups from @normanmaurer
Add additional convinience methods to ColumnFamilyResult. Thanks to @amrik for the patch.
Don't check for ring membership if no hosts are alive. Thanks to Nick Bailey for the patch.
Fix NPE on NodeAutoDiscoveryService. Thanks to Matt Abrams for the patch (
Expose keyspace and columnFamilyName in SimpleCassandraDao (#395)
Support RangeSubSlicesCounterQuery and SubSliceCounterQuery. Thanks to @nlalevee for the code.
Operations effecting schema (OperationType#META_WRITE) no longer retry on timeout. Thanks to Chris Herron for the fix.
Change test instance gossip port to 7001 to not conflict with Cassandra defaults (#342)
Updated CassandraClusterTest to show correctly setting index_name field. Thanks to @quorg for pointing this out (#405)
Add TopolyAware AutoDiscoveryService (#311)
Add Kerberos support (Experimental) (#296)
Remove unused fields in CassandraHostConfigurator - maxIdle, minEvictableIdleTimeMillis, timeBetweenEvictionRunsMillis (#244)
ColumnFamilyTemplate now supports indexed slices! Thanks to @jancona.
Support getSubColumnsByName in HSuperColumn (#325)
Store authentication state on the ThriftClient. Thanks to @mahone.
Improve performance of ColumnSliceImpl instantiation and HColumnImpl getName()/getValue() (#332)
Add relevant serializers to SerializerTypeInferer (#341)
Remove from main/resources (#343)
Fix for NSEE being thrown on ColumnFamilyTemplate#queryColumns becuase hasNext was not being called before nexts
Fix multiple bytebuffer reading bug on SuperCfResult. Thanks to @sherman for the patch (#345)
Don't set replication_factor into strategyOptiosn for ThriftKsDef. (#358)
Clean up consistency level management in MutatorImpl. (#354)
EmbeddedServerHelper now picks up custom configuration file. Thanks to @thrykol.
Column iterators now track their row count internally. Thanks to @shane.
Added newest features for Column family defitions to meta data API. Thanks to @ghinkle for the patch. (#359)
Efficiency tweaks for ColumnSliceIterator and IndexedSliceIterator. Thanks to @thrykol. For details, see:
Better support for Composite keys. Thanks to @chiappone. For details, see:
Fix issue-376 where HFactory#createCluster was not adding the created cluster to the internal map of clusters. (#376)
Add durable_writes support. #293
Make sleep time when waiting for schema agreement customizable #302
Fix MutatorResult wrong result time. #273
Remove node from Retry Service that do not participate in the ring anymore #216
Note!!! fix for issue #294 renamed PoolExhaustedException for HPoolExhaustedException and created
a new base exception for pool related exceptions called: HPoolRecoverableException.
Fix race condition in connection pool.
Reduce default size of ByteBufferOutputStream to 256 from 8196 bytes,
ObjectSerializer can take a custom ClassLoader,
Move EmbeddedSchemaLoader and EmbeddedServerHelper into the hector-test module,
- hector-core depends only on cassandra-thrift, not cassandra-all
- Remove dependencies on avro, high-scale-lib
Threads started by hector are daemon threads,
Fixed speed4j setup - modified hector so it only uses to configure logging. the logger
name must be of the form "hector-<cluster-name>". Updating wiki page as well.
Fix issue
Fix issue with non-rentrant mutators on ColumnFamilyTemplate hierarchy. See
Close client on HInvalidRequestException and on HCassandraInternalException (issue-299)
Synchronize on RR balancing policy counter
Added key_validation_class support on CfDef wrappers
Fixed issue with using correct timestamp on execution result which could manifest as order of magnitude differences in op timing in some cases
Added remove method to retry service, ensures that HConnectionManager.removeHost correctly pulls hosts from CassandraHostRetryService if configured. Addresses GH issue 216
Expose setters in ColumnFamilyDefinition iface
Added option to wait for schema agreements on cluster operations
Check for null on keys in a list. Addresses issue 221
Addressing issue 226 on gh where attempts to release on suspended pools will leak clients
Fixed issue with using BB serializer for BA serializer as pointed out by @bhuvan.rajt on ML
Wrapper api for op timers (makes current speed4j implementation plugable). The default logger is no a nulllogger, so op timing is off by default (sbridges)
Tweaks to retry down host logic including: immediate check when triggered, and retrying all downed hosts. See issue 238 for details (sbridges)
Fix potential race condition in numBlocked if an exception was thrown creating a thrift client (sbridges)
CQL queries available via CqlQuery
Removed openjpa and JPA 2.0 targeted code; still using JPA influenced annotations.
Reset to the results of adding the pool to the connection manager. This could cause a pretty ugly issue where the host would just disappear if there was a failure adding it back after the successful test.
Fixed retry logic in the case of fail after one more try configuration. Also modifies some long standing (and I believe incorrect) behaviour of trying until successful on a timeout exception.
Adding recommended default configuration string for dynamic comparator
First cut of CqlQuery, loosened OrderedRowsImpl to hornshoe in results
CfDef.key_validation_class support (michaelsembwever)
Expose memtable throughput, operations, flush and key cache save period (Greg Hinkle)
Counter super slice support (Greg Hinkle)
Multiget Counter Slice and super slice (Greg Hinkle)
Support replicate_on_write setting for column families (Greg Hinkle)
Expose setters in ColumnFamilyDefinition iface
Added remove method to retry service, ensures that HConnectionManager.removeHost correctly pulls hosts from CassandraHostRetryService if configured. Addresses GH issue 216
Optionally block on schema agreement for cluster operations
Fix issue 224 with RR balancing policy (merge from master)
Addressing issue 226 on gh where attempts to release on suspended pools will leak clients
CassandraHostRetryService should retry all downed hosts when checking, not just the first host (sbridges)
Moved check for transport exception to where it will actually do something. Thanks to Jim Ancona for changes.
Added option for setting keepalive on the underlying socket. Defaults to false.
Updated logger level to more appropriate warn in HConnectionManager.
Slight changes to use Cluster class and definitions already defined to check for new nodes. Originally causing a problem when Cassandra security it turned on. Thanks to nneuberger1 for the patch.
Add ability to return a timestamp based on UUID.
Added HColumn timestamp signature changes from master. Thanks to Oleg Tsvinev for the patch.
Reset to the results of adding the pool to the connection manager. This could cause a pretty ugly issue where the host would just disappear if there was a failure adding it back after the successful test.
Fixed retry logic in the case of fail after one more try configuration. Also modifies some long standing (and I believe incorrect) behaviour of trying until successful on a timeout exception.
Huge contrib of template-method design pattern approach by David Cox. See m.p.c.service.template packageand testing coverage for such. Fans of SpringFramework's JdbcTemplate should give this a look (still work in progress though).
PHI accrural algorithm load balancing policy available. Thanks to Vijay for the patch.
Removed redundant shutdownHook registration in pooling services. Thanks to sbridges for the patient explanation.
Added setKeys/setColumnNames overloading with Collection type arguments in MultigetSuperSliceQuery/MultigetSubSliceQuery. Thanks to user rstml for the patch.
Fix potential bug with RR balancing policy on small clusters (
Added KeyIterator and StringKeyIterator utility classes (thanks to tkoop for the patch)
Support for consistency levels "TWO" and "THREE"
Added key_cache_save_period_in_seconds to column family creation (
Fix of result time for SC slice query (thanks to user tamalex for the patch)Additional serializers for primitive types, BigInteger and ASCII
Additional modifications to Mutator for working with super columns
Added describe_schema_version to Cluster interface
Dynamic composite comparators (see and for some background). Thanks to Ed Anuff and Todd Nine for a ton of work and testing
Rethrow on HUnavailableException since we cannot satisfy the requested CL and never will be able to (hence futility of retrying)
ExceptionTranslator did not correctly handle poolExhausted exceptionCleanup of NonBlockingHashMap semantics and extraneous string creation after profiling sessio
Added the jul-to-slf4j bridge for catching dumb jmx logger leak
Initial cut of HColumnFamily wrapper added. Comments welcome.
First pass at HostTimeoutTracker: when configured, if a node throws a TimeoutException N times within X interval, suspend connections to the host for Y seconds (all configurable via CassandraHostConfigurator). This feature has not b
een heavily tested and is here to gather feedback. Use at your own risk.
Cleanup of some logging level stuff to generate less-scary (or no) log messages under standard operating procedure.
HSlicePredicate exposes some additional convinience methods for easier use
Added JAXB serializers thanks to GH user shuzang
Cleanup of OrderedSuperRows thanks to GH user alexism
Removed unmutability constraint on slice and orderedRow implementations. Thanks to GH user alexism
HColumnImpl now loosely wraps the underlying Thrift Column. Most applications should see a substantial reduction in GC overhead due to this
Execution time is now actually in micro seconds. Thanks to several folks for pointing this out.
Added IO stream mutators. Thanks to Norman Maurer for the pull request.
Added method to HFactory for safe shutdown of cluster
Added suspend/unsuspend operations to HConnectionManager, operations for suh in JMX
Cleanup of numActive counter on ConcurrentHClientPool. Could cause negative results under some high-load situations. Thanks to Yang Yang for the tip.
fix NPE with poolExhaustedException. Thanks to Yang Yang for the tip
Fixed issue with ttl not being set on result columns. Thanks to ML user Kallin for the heads up.
Fix issue with NPE in ThriftColumnDef when a column name was declared with no index type (thanks to Steve Willcox for the heads up)
Mutator has easier row level deletion methods
Fix potential race condition in ConcurrentHClientPool with large number of threads. (Thanks to @masseyke for the test case)
LeastActive policy updated to shuffle before selection. This spreads load out better among pools in low to moderate traffic environments (ie. when ConcurrentHClientPool#getNumActive are all equal).
Fix NPE in checking that cassandraHostRetryService is turned when host is being marked down (thanks to ML poster Shimi for bug report)
A CassandraClientMonitor instance is now created per cluster to make JMX integration with multi-cluster setups much easier. (
Fix potential underflow issue with IntegerSerializer and small ints comming back from Cassandra in two bytes
Fix issue with RR Load balancing policy that cause ArrayOutOfBounds.. in some situations
Fixed issue with null keyspaces and credentials in HConnectionManager (via Michael Moores)
Added class-level default for failoverPolicy
Rudimentary (very much so) JPA 2.0 support for save and load via openjpa
Ligthweight ORM for JPA 1.0 annotations (additional improvements to BTodd's hector-object-mapper merged in)
Some cleanup of bytebuffer handling in serializers
Initial cut at virtual keyspaces (aka client-level multi-tenancy), see
CassandraHostConfigurator and related are now all correctly serializable (patch by Thor Carpenter)
Added add/remove CassandraHost capability to CassandraClientMonitor (thanks to David Boxenhorn for poiting out it was missing)
CassandraHostRetryService default queue size now defaults unbounded
Initial import of BToddB's hector-object-mapper as object-mapper module
Object mapper ported over to JPA annotations and EntityManager (very redimentary support)
Fix issue with createKeyspace requiring additional column info
Massive changes to pom structure courtesy of Stephen Connolly to facilitate inclusion into maven central repository.
Small tweaks to HConnectionManager courtesy of Benoit Perroud
Collection conversions in AbstractSerializer use the size of the provided collection for initialization. Patch courtesy of Benoit Perroud.
Treat HUnavailableException the same as HTimeoutException
Fix issue with LeastActiveBalancingPolicy that favoured same host repeatedly
Define ClockResolution as an Interface to allow client to define their own implementations
Added TimeUUID support (me.prettyprint.cassandra.utils.TimeUUIDUtils)
Added updateColumnFamily to Cluster
Shorterm fix for catching InvalidRequestException and handling it correctly for a bootstraping node
CassandraHostConfigurator is now serializable
Split the project to hector-core
Added removeCassandraHost on HConnectionManager for graceful shutdown of a pool
Configuration of load balancing policy is now done on CassandraHostConfigurator
KnownHosts and per-pool stats are once again available via JMX
Minor logging tweaks to make logging levels more appropriate
Added overloaded version of createColumn (contributed by Michael Moores)
Added authentication support (contributed by Jim Ancona)
Cleaner abstraction for schema modifications (contributed by Peter Harrison)
- ddl package added
- wrapper classes and interfaces for abstracting protocol
RangeSlicesQuery now supports setRowCount for limiting results to a number of rows
Fix issue with fix suggested by Patricio Echague
CassandraHostRetry service will retry downed hosts in a background thread at the interval specified on CassandraHostConfigurator (on by default at 30sec interval)
Refactoring of the connection pooling innards to fix epic race condition on failover. This includes but is not limited to:
- Removal of classes effectively matching the pattern CassandraClient* from the service package
- Command is gone. It was no longer needed and was more confusing than anything else
- Pooling logic has been stress tested by a neutral third party (no, really!)
Upgrade to thrift 0.5 to match Cassandra (it caught us by surprise as well).
The system_rename_* methods were removed matching removal of such in Thrift API
Microsecond level granularity is now the default
NodeAutoDiscoverService will periodically look for new hosts on the ring and add them (off by default)
Add CountQuery, SuperCountQuery and SubCountQuery
Move all the API stuff to me.prettyprint.hector.api.*. Extract interfaces and prepare the ground for more avro good.
- Move all the queries and extract their interfaces
- Rename KeyspaceOperator and extract a Keyspace interface from it
Rename a few exceptions to begin with HSomething so they are hard to unintentionally mix with their thrift doubles.
Bug fixes:
CassandraClientPoolByHostImpl can throw NoSuchElementException
KeyspaceImpl.toString returns super.toString()
API V2 has no means of getting all columns from a row.
KeyspaceOperator throws NPE that masks real exceptions
Timestamp (and Clock in 0.7.0) are not set on HColumn in the constructor
Friendlier API and spring integration
Error in failover - incorrect operation when borrowClient throws an
batchMutate doesn't work with null predicate in deletion. Cannot batch-delete rows.
getSuperColumn() does not return null
KeyspaceImpl.getSuperColumn() should use cassandra.get() and not cassandra.get_slice()
Add a few more public settings to pass over to GenericObjectPool: lifo, minEvictableIdleTimeMillis and timeBetweenEvictionRunsMillis (contributed by B. Todd Burruss)
Remove some unused meta calls from CassandraClient, such as getConfigFile and getStringProperty
Make the calls of other meta API go through CassandraCluster and by that use an improved version of them in thrift and failover ( and and
Add an exception hierarchy to wrap transport and general cassandra API exceptions
Make HectorException extend RuntimeException
Add the port number to be part of the cassandra host identifier so that many cassandra instances can be connected from a single hector client,
Fix bogus doubly locked initialization in CassandraClientPoolFactory
Fix KeyspaceImpl.getSuperColumn() should use cassandra.get() and not cassandra.get_slice()
Allow CassandraClientPool to provide settings from CassandraHostConfigurator to new hosts if it was configured from such.
Fix getSuperColumn() does not return null
New and fancy API. We call this API v2 beta b/c we want to collect feedback from the commumnity before finalizing it
Add getRangeSuperSlices
Add Command.execute that accepts a configurable FailoverPolicy
Improve maven build file
Fix duplicate host entries and two connection pools to the same host
Make loading hectorLog4j.xml optional, controlled by system property com.prettyprint.cassandra.load_hector_log4j
Fix - JMX counter NumActive isn't reporting a correct num
Chagne the name of the perf4 logger to be me.prettyprint.hector.TimingLogger
Fix duplicate releases of clients when failing over to next host and connection leaking (no bug, was introduced by recent refactors)
Improve failover - if the current host isn't in the list of known hosts, just failover to any random known host, don't give up
Fix perf4j logger name so perf stats will actually work
added overloaded remove for user specified timestamps
Add @deprecated to getRangeSlice
Add CassandraClientPool.getMbean
Make Keyspace.createTimestamp public
Change default DEFAULT_MAX_IDLE to -1
Timestampes are currently in milliseconds, should be microseconds
getPackage() MAY return a null at JmxMonitor constructor.
Change default consistency level to QUORUM from DCQUOROM