Features
--------
- Parse Virtual Keyspace Metadata
Bug Fixes
---------
- Tokenmap.get_replicas returns the wrong value if token coincides
with the end of the range
- Python Driver fails with "more than 255 arguments" python exception
when > 255 columns specified in query response
- Hang in
integration.standard.test_cluster.ClusterTests.test_set_keyspace_twice
- Asyncore reactors should use a global variable instead of a class
variable for the event loop
Other
-----
- Use global variable for libev loops so it can be subclassed
- Update SchemaParser for V4
- Bump Cython dependency version to 0.28
3.14.0
======
Features
--------
- Add one() function to the ResultSet API
- Create an utility function to fetch concurrently many keys from the
same replica
- Allow filter queries with fields that have an index managed outside
of cqlengine
- Twisted SSL Support
- Support IS NOT NULL operator in cqlengine
Other
-----
- Fix Broken Links in Docs
- Reevaluate MONKEY_PATCH_LOOP in test codebase
- Remove CASS_SERVER_VERSION and replace it for CASSANDRA_VERSION in
tests
- Refactor CASSANDRA_VERSION to a some kind of version object
- Log warning when driver configures an authenticator, but server does
not request authentication
- Warn users when using the deprecated
Session.default_consistency_level
- Add DSE smoke test to OSS driver tests
- Document long compilation times and workarounds
- Improve error for batch WriteTimeouts
- Deprecate ResultSet indexing
3.13.0
======
Features
--------
- cqlengine: LIKE filter operator
- Support cassandra.query.BatchType with cqlengine BatchQuery
Bug Fixes
---------
- AttributeError: 'NoneType' object has no attribute 'add_timer'
- Support retry_policy in PreparedStatement
- __del__ method in Session is throwing an exception
- LZ4 import issue with recent versions
- ResponseFuture._connection can be None when returning request_id
- ResultSet.was_applied doesn't support batch with LWT statements
Other
-----
- cqlengine: avoid warning when unregistering connection on shutdown
- Fix DeprecationWarning of log.warn
- Fix example_mapper.py for python3
- Possible deadlock on cassandra.concurrent.execute_concurrent
- Add some known deprecated warnings for 4.x
- Remove copyright dates from copyright notices
- Remove "Experimental" tag from execution profiles documentation
- request_timer metrics descriptions are slightly incorrect
- Remove "Experimental" tag from cqlengine connections documentation
- Set in documentation default consistency for operations is LOCAL_ONE
Features
- Send keyspace in QUERY, PREPARE, and BATCH messages
- Add IPv4Address/IPv6Address support for inet types
- WriteType.CDC and VIEW missing
- Warn on Cluster init if contact points are specified but LBP isn't
- Include hash of result set metadata in prepared stmt id
- Add NO_COMPACT startup option
- Add new exception type for CDC
Bug Fixes
- Both _set_final_exception/result called for the same ResponseFuture
- Use of DCAwareRoundRobinPolicy raises NoHostAvailable exception
- Not create two sessions by default in CQLEngine
- Bug when subclassing AyncoreConnection
- Error at cleanup when closing the asyncore connections
- Fix sites where sessions can change during iteration
- cqlengine: allow min_length=0 for Ascii and Text column types
- Rare exception when "sys.exit(0)" after query timeouts
- Dont set the session keyspace when preparing statements
- Use of DCAwareRoundRobinPolicy raises NoHostAvailable exception
Other
- Remove DeprecationWarning when using WhiteListRoundRobinPolicy
- Bump Cython dependency version to 0.27
Features
--------
- Add idle_heartbeat_timeout cluster option to tune how long to wait
for heartbeat responses.
- Add HostFilterPolicy
Bug Fixes
---------
- is_idempotent flag is not propagated from PreparedStatement to
BoundStatement
- Fix asyncore hang on exit
- Driver takes several minutes to remove a bad host from session
- Installation doesn't always fall back to no cython in Windows
- Avoid to replace a connection that is supposed to shutdown
- request_ids may not be returned to the pool
- Fix murmur3 on big-endian systems
- Ensure unused connections are closed if a Session is deleted by the
GC
- Fix .values_list by using db names internally (cqlengine)
Other
-----
- Bump Cython dependency version to 0.25.2
- Fix DeprecationWarning when using lz4
- Deprecate WhiteListRoundRobinPolicy
- Improve upgrade guide for materializing pages
- Documentation for time/date specifies timestamp inupt as
microseconds
- Point to DSA Slack, not IRC, in docs index
Features
- Add Duration type to cqlengine
- Community PR review: Raise error on primary key update only if its
value changed
- get_query_trace() contract is ambiguous
Bug Fixes
- Queries using speculative execution policy timeout prematurely
- Fix map where results are not consumed
- Driver fails to encode Duration's with large values
- UDT values are not updated correctly in CQLEngine
- UDT types are not validated in CQLEngine
- to_python is not implemented for types columns.Type and columns.Date
in CQLEngine
- Clients spin infinitely trying to connect to a host that is drained
- Resulset.get_query_trace returns empty trace sometimes
- Memory grows and doesn't get removed
- Fix RuntimeError caused by change dict size during iteration
- fix ExponentialReconnectionPolicy may throw OverflowError problem
- Avoid using nonexistent prepared statement in ResponseFuture
Other
- Update README
- Test python versions 3.5 and 3.6
- Docs Warning About Prepare "select *"
- Increase Coverage in CqlEngine Test Suite
- Example SSL connection code does not verify server certificates
3.9.0
Features
- cqlengine: remove elements by key from a map
Bug Fixes
- improve error handling when connecting to non-existent keyspace
- Sockets associated with sessions not getting cleaned up on
session.shutdown()
- rare flake on
integration.standard.test_cluster.ClusterTests.test_clone_shared_lbp
- MontonicTimestampGenerator.__init__ ignores class defaults
- race where callback or errback for request may not be called
- cqlengine: model.update() should not update columns with a default
value that hasn't changed
- cqlengine: field value manager's explicit flag is True when queried
back from cassandra
Other
- Connection not closed in example_mapper
- Remove mention of pre-2.0 C* versions from OSS 3.0+ docs
3.8.1
Bug Fixes
- implement __le__/__ge__/__ne__ on some custom types
- Fix bug in eventlet and gevent reactors that could cause hangs
- Fix DecimalType regression
Features
- Quote index names in metadata CQL generation (PYTHON-616)
- On column deserialization failure, keep error message consistent
between python and cython (PYTHON-631)
- TokenAwarePolicy always sends requests to the same replica for a given
key (PYTHON-643)
- Added cql types to result set (PYTHON-648)
- Add __len__ to BatchStatement (PYTHON-650)
- Duration Type for Cassandra (PYTHON-655)
- Send flags with PREPARE message in v5 (PYTHON-684)
Bug Fixes
- Potential Timing issue if application exits prior to session pool
initialization (PYTHON-636)
- "Host X.X.X.X has been marked down" without any exceptions
(PYTHON-640)
- NoHostAvailable or OperationTimedOut when using execute_concurrent
with a generator that inserts into more than one table (PYTHON-642)
- ResponseFuture creates Timers and don't cancel them even when result
is received which leads to memory leaks (PYTHON-644)
- Driver cannot connect to Cassandra version > 3 (PYTHON-646)
- Unable to import model using UserType without setuping connection
since 3.7 (PYTHON-649)
- Don't prepare queries on ignored hosts on_up (PYTHON-669)
- Sockets associated with sessions not getting cleaned up on
session.shutdown() (PYTHON-673)
- Make client timestamps strictly monotonic (PYTHON-676)
- cassandra.cqlengine.connection.register_connection broken when
hosts=None (PYTHON-692)
Other
- Create a cqlengine doc section explaining None semantics (PYTHON-623)
- Resolve warnings in documentation generation (PYTHON-645)
- Cython dependency (PYTHON-686)
- Drop Support for Python 2.6 (PYTHON-690)
Features
- Add v5 protocol failure map
- Don't return from initial connect on first error
- Indicate failed column when deserialization fails
- Let Cluster.refresh_nodes force a token map rebuild
- Refresh UDTs after "keyspace updated" event with v1/v2 protocol
- EC2 Address Resolver
- Speculative query retries
- Expose paging state in API
- Don't mark host down while one connection is active
- Query request size information
- Avoid quadratic ring processing with invalid replication factors
- Improve Connection/Pool creation concurrency on startup
- Add beta version native protocol flag
- cqlengine: Connections: support of multiple keyspaces and
sessions
Bug Fixes
- Race when adding a pool while setting keyspace
- Update results_metadata when prepared statement is reprepared
- CQL Export for Thrift Tables
- cqlengine: default value not applied to UserDefinedType
- cqlengine: columns are no longer hashable
- cqlengine: remove clustering keys from where clause when
deleting only static columns
Features
- Handle null values in NumpyProtocolHandler (PYTHON-553)
- Collect greplin scales stats per cluster (PYTHON-561)
- Update mock unit test dependency requirement (PYTHON-591)
- Handle Missing CompositeType metadata following C* upgrade
(PYTHON-562)
- Improve Host.is_up state for HostDistance.IGNORED hosts
(PYTHON-551)
- Utilize v2 protocol's ability to skip result set metadata for
prepared statement execution (PYTHON-71)
- Return from Cluster.connect() when first contact point
connection(pool) is opened (PYTHON-105)
- cqlengine: Add ContextQuery to allow cqlengine models to switch
the keyspace context easily (PYTHON-598)
- Standardize Validation between Ascii and Text types in Cqlengine
(PYTHON-609)
Bug Fixes
- Fix geventreactor with SSL support (PYTHON-600)
- Don't downgrade protocol version if explicitly set (PYTHON-537)
- Nonexistent contact point tries to connect indefinitely
(PYTHON-549)
- Execute_concurrent can exceed max recursion depth in failure
mode (PYTHON-585)
- Libev loop shutdown race (PYTHON-578)
- Include aliases in DCT type string (PYTHON-579)
- cqlengine: Comparison operators for Columns (PYTHON-595)
- cqlengine: disentangle default_time_to_live table option from
model query default TTL (PYTHON-538)
- cqlengine: pk__token column name issue with the equality
operator (PYTHON-584)
- cqlengine: Fix "__in" filtering operator converts True to string
"True" automatically (PYTHON-596)
- cqlengine: Avoid LWTExceptions when updating columns that are
part of the condition (PYTHON-580)
- cqlengine: Cannot execute a query when the filter contains all
columns (PYTHON-599)
- cqlengine: routing key computation issue when a primary key
column is overriden by model inheritance (PYTHON-576)
Features
- Optional Execution Profiles for the core driver (PYTHON-569)
- API to get the host metadata associated with the control
connection node (PYTHON-583)
- Expose CDC option in table metadata CQL (PYTHON-593)
Bug Fixes
- Clean up Asyncore socket map when fork is detected (PYTHON-577)
- cqlengine: QuerySet only() is not respected when there are
deferred fields (PYTHON-560)
3.4.1
Bug Fixes
- Gevent connection closes on IO timeout
- "dictionary changed size during iteration" with Python 3
3.4.0
Features
- Include DSE version and workload in Host data
- Add a context manager to Cluster and Session
- Better Error Message for Unsupported Protocol Version
- Make the error message explicitly state when an error comes from
the server
- Short Circuit meta refresh on topo change if NEW_NODE already
exists
- Show warning when the wrong config is passed to SimpleStatement
- Return namedtuple result pairs from execute_concurrent
- BatchStatement should enforce batch size limit in a better way
- Validate min/max request thresholds for connection pool scaling
- Handle or warn about multiple hosts with the same rpc_address
- Write docs around working with datetime and timezones
Bug Fixes
- High CPU utilization when using asyncore event loop
- Fix CQL Export for non-ASCII Identifiers
- Make stress scripts Python 2.6 compatible
- UnicodeDecodeError when unicode characters in key in BOP
- WhiteListRoundRobinPolicy should resolve hosts
- Cluster and Session do not GC after leaving scope
- Don't wait for schema agreement on ignored nodes
- Reprepare on_up with many clients causes node overload
- None inserted into host map when control connection node is
decommissioned
- weakref.ref does not accept keyword arguments
Features
- Add an AddressTranslator interface
- New Retry Policy Decision - try next host
- Don't mark host down on timeout
- SSL hostname verification
- Add C* version to metadata or cluster objects
- Options to Disable Schema, Token Metadata Processing
- Expose listen_address of node we get ring information from
- Use A-record with multiple IPs for contact points
- Custom consistency level for populating query traces
- Normalize Server Exception Types
- Propagate exception message when DDL schema agreement fails
- Specialized exceptions for metadata refresh methods failure
Bug Fixes
- Resolve contact point hostnames to avoid duplicate hosts
- GeventConnection stalls requests when read is a multiple of the
input buffer size
- named_tuple_factory breaks with duplicate "cleaned" col names
- Connection leak if Cluster.shutdown() happens during
reconnection
- HostConnection.borrow_connection does not block when all request
ids are used
- Empty field not being handled by the NumpyProtocolHandler
Features
- cqlengine: Warn on sync_schema type mismatch
- cqlengine: Automatically defer fields with the '=' operator
(and immutable values) in select queries
- cqlengine: support non-equal conditions for LWT
- cqlengine: sync_table should validate the primary key composition
- cqlengine: token-aware routing for mapper statements
Bug Fixes
- Deleting a column in a lightweight transaction raises
a SyntaxException
- cqlengine: make Token function works with named tables/columns
- comparing models with datetime fields fail #79
- cython date deserializer integer math should be aligned
with CPython
- db_field is not always respected with UpdateStatement
- Sync_table fails on column.Set with secondary index
Features
- Pass name of server auth class to AuthProvider
- Surface schema agreed flag for DDL statements
- Automatically convert float and int to Decimal on serialization
- Eventlet Reactor IO improvement
- Make pure Python ProtocolHandler available even when Cython is
present
- Optional Cython deserializer for bytes as bytearray
- Add Session.default_serial_consistency_level
- cqlengine: Expose prior state information via cqlengine
LWTException
- cqlengine: Collection datatype "contains" operators support
(Cassandra 2.1)
- cqlengine: Add DISTINCT query operator
- cqlengine: Tuple cqlengine api
- cqlengine: Add support for UPDATE/DELETE ... IF EXISTS statements
- cqlengine: Allow nested container types
- cqlengine: Add ability to set query's fetch_size and limit
- cqlengine: Internalize default keyspace from successive set_session
- cqlengine: Warn when Model.create() on Counters
Bug Fixes
- Bus error (alignment issues) when running cython on some ARM
platforms
- Overflow when decoding large collections (cython)
- Timer heap comparison issue with Python 3
- Cython deserializer date overflow at 2^31 - 1
- Decode error encountered when cython deserializing large map
results
- Don't require Cython for build if compiler or Python header
not present
- Unorderable types in task scheduling with Python 3
- cqlengine: Fix crash when updating a UDT column with a None value
- cqlengine: Race condition in ..connection.execute with lazy_connect
- cqlengine: doesn't support case sensitive column family names
- cqlengine: UserDefinedType mandatory in create or update
- cqlengine: db_field breaks UserType
- cqlengine: UDT badly quoted
- cqlengine: Use of db_field on primary key prevents querying except
while tracing.
- cqlengine: DateType.deserialize being called with one argument
vs two
- cqlengine: Querying without setting up connection now throws
AttributeError and not CQLEngineException
- cqlengine: BatchQuery multiple time executing execute statements.
- cqlengine: Better error for management functions when no connection
set
- cqlengine: Handle None values for UDT attributes in cqlengine
- cqlengine: Fix inserting None for model save
- cqlengine: EQ doesn't map to a QueryOperator (setup race condition)
- cqlengine: class.MultipleObjectsReturned has DoesNotExist as base
class
- cqlengine: Typo in cqlengine UserType __len__ breaks attribute
assignment
Other
- cqlengine: a major improvement on queryset has been introduced.
It is a lot more efficient to iterate large datasets: the rows
are now fetched on demand using the driver pagination.
- cqlengine: the queryset len() and count() behaviors have changed.
It now executes a "SELECT COUNT(*)" of the query rather than
returning the size of the internal result_cache (loaded rows).
On large queryset, you might want to avoid using them due to
the performance cost. Note that trying to access objects using
list index/slicing with negative indices also requires a count
to be executed.
3.0.0
Features
- Support datetime.date objects as a DateType
- Add Cluster.update_view_metadata
- QueryTrace option to populate partial trace sessions
- Attach column names to ResultSet
- Change default consistency level to LOCAL_ONE
Bug Fixes
- Properly SerDes nested collections when protocol_version < 3
- Evict UDTs from UserType cache on change
- Make sure query strings are always encoded UTF-8
- Track previous value of columns at instantiation in CQLengine
- UDT CQL encoding does not work for unicode values
- NetworkTopologyStrategy#make_token_replica_map does not account
for multiple racks in a DC
- Cython integer overflow on decimal type deserialization
- Query trace: if session hasn't been logged, query trace can
throw exception
3.0.0rc1
Features
- Process Modernized Schema Tables for Cassandra 3.0
- Remove deprecated features
- Don't assign trace data to Statements
- Normalize results return
- Process Materialized View Metadata/Events
- Remove blist as soft dependency
- Change default consistency level to LOCAL_QUORUM
- Normalize CQL query/export in metadata model
Bug Fixes
- Implementation of named arguments bind is non-pythonic
- CQL encoding is incorrect for NaN and Infinity floats
- Protocol downgrade issue with C* 2.0.x, 2.1.x, and python3,
with non-default logging
- ValueError when accessing usertype with non-alphanumeric
field names
- NumpyProtocolHandler does not play well with PagedResult
2.7.2
Bug Fixes
- Resolve CQL export error for UDF with zero parameters
- Remove futures dep. for Python 3
Problems found with existing distfiles:
distfiles/D6.data.ros.gz
distfiles/cstore0.2.tar.gz
distfiles/data4.tar.gz
distfiles/sphinx-2.2.7-release.tar.gz
No changes made to the cstore or mariadb55-client distinfo files.
Otherwise, existing SHA1 digests verified and found to be the same on
the machine holding the existing distfiles (morden). All existing
SHA1 digests retained for now as an audit trail.
2.7.1
Bug Fixes
- Explicitly include extension source files in Manifest
2.7.0
Cython is introduced, providing compiled extensions for core modules,
and extensions for optimized results deserialization.
Features
- General Performance Improvements for Throughput
- Improve synchronous request performance with Timers
- Enable C Extensions for PyPy Runtime
- Refactor SerDes functionality for pluggable interface
- Cython SerDes Extension
- Accept iterators/generators for execute_concurrent()
- cythonize existing modules
- Pure Python murmur3 implementation
- Make driver tolerant of inconsistent metadata
Bug Fixes
- Drop Events out-of-order Cause KeyError on Processing
- DowngradingConsistencyRetryPolicy doesn't check response count on write
timeouts
- Blocking connect does not use connect_timeout
- Properly protect partition key in CQL export
- Trigger error callbacks on timeout
2.6.0
Bug Fixes
- Output proper CQL for compact tables with no clustering columns
2.6.0c2
Features
- Automatic Protocol Version Downgrade
- cqlengine Python 2.6 compatibility
- Double-dollar string quote UDF body
- Set models.DEFAULT_KEYSPACE when calling set_session
Bug Fixes
- Avoid stall while connecting to mixed version cluster
- Make SSL work with AsyncoreConnection in python 2.6.9
- Fix Murmur3Token.from_key() on Windows
- Fix cqlengine TimeUUID rounding error for Windows
- Avoid invalid compaction options in CQL export for non-SizeTiered
2.6.0c1
This release adds support for Cassandra 2.2 features, including
version 4 of the native protocol.
Features
- Default load balancing policy to TokenAware(DCAware)
- Configuration option for connection timeout
- Support User Defined Function and Aggregate metadata in C* 2.2
- Surface request client in QueryTrace for C* 2.2+
- Implement new request failure messages in protocol v4+
- Metadata model now maps index meta by index name
- Support new types in C* 2.2: date, time, smallint, tinyint
- cqle: add Double column type and remove Float overload
- Use partition key column information in prepared response for protocol v4+
- Support message custom payloads in protocol v4+
- Deprecate refresh_schema and replace with functions for specific entities
- Save trace id even when trace complete times out
- Warn when registering client UDT class for protocol < v3
- Support client warnings returned with messages in protocol v4+
- Ability to distinguish between NULL and UNSET values in protocol v4+
- Expose CQL keywords in API
Bug Fixes
- IPv6 address support on Windows
- Convert exceptions during automatic re-preparation to nice exceptions
- cqle: Quote keywords properly in table management functions
- Don't default to GeventConnection when gevent is loaded, but
not monkey-patched
- Pass dynamic host from SaslAuthProvider to SaslAuthenticator
- Make protocol read_inet work for Windows
- cqle: Correct encoding for nested types
- Update list of CQL keywords used quoting identifiers
- Make ConstantReconnectionPolicy work with infinite retries
- Accept UUIDs with uppercase hex as valid in cqlengine
2.5.0
- Integrated cqlengine object mapping package
- Utility functions for converting timeuuids and datetime (PYTHON-99)
- Schema metadata fetch window randomized, config options added (PYTHON-202)
- Support for new Date and Time Cassandra types (PYTHON-190)
- Fix index target for collection indexes (full(), keys()) (PYTHON-222)
- Thread exception during GIL cleanup (PYTHON-229)
- Workaround for rounding anomaly in datetime.utcfromtime (Python 3.4)
(PYTHON-230)
- Normalize text serialization for lookup in OrderedMap (PYTHON-231)
- Support reading CompositeType data (PYTHON-234)
- Preserve float precision in CQL encoding (PYTHON-243)
2.1.4
- SaslAuthenticator for Kerberos support (PYTHON-109)
- Heartbeat for network device keepalive and detecting failures on idle
connections (PYTHON-197)
- Support nested, frozen collections for Cassandra 2.1.3+ (PYTHON-186)
- Schema agreement wait bypass config, new call for synchronous schema
refresh (PYTHON-205)
- Add eventlet connection support (PYTHON-194)
- Schema meta fix for complex thrift tables (PYTHON-191)
- Support for 'unknown' replica placement strategies in schema meta
(PYTHON-192)
- Resolve stream ID leak on set_keyspace (PYTHON-195)
- Remove implicit timestamp scaling on serialization of numeric
timestamps (PYTHON-204)
- Resolve stream id collision when using SASL auth (PYTHON-210)
- Correct unhexlify usage for user defined type meta in Python3 (PYTHON-208)
Python client driver for Apache Cassandra. This driver works exclusively
with the Cassandra Query Language v3 (CQL3) and Cassandra's native protocol.
Cassandra versions 1.2 through 2.1 are supported.