├── .gitignore ├── .nav ├── .rspec ├── .rubocop.yml ├── .rubocop_todo.yml ├── .simplecov ├── .travis.yml ├── .yardopts ├── CHANGELOG.md ├── CONTRIBUTING.md ├── Gemfile ├── Gemfile.lock ├── Jenkinsfile ├── LICENSE ├── README.md ├── Rakefile ├── benchmarking ├── async-prepared-insert-cql-rb.rb ├── async-prepared-insert-ruby-driver.rb ├── async-prepared-select-cql-rb.rb ├── async-prepared-select-ruby-driver.rb ├── async-unprepared-insert-cql-rb.rb ├── async-unprepared-insert-ruby-driver.rb ├── async-unprepared-select-cql-rb.rb ├── async-unprepared-select-ruby-driver.rb ├── benchmark.rb ├── create-cluster.sh ├── dirty-field-access.rb ├── prepared-insert-100k-queries │ ├── README.md │ ├── output-prepared-insert-cql-rb-01.log │ ├── output-prepared-insert-cql-rb-02.log │ ├── output-prepared-insert-cql-rb-03.log │ ├── output-prepared-insert-cql-rb-04.log │ ├── output-prepared-insert-cql-rb-05.log │ ├── output-prepared-insert-cql-rb-06.log │ ├── output-prepared-insert-cql-rb-07.log │ ├── output-prepared-insert-cql-rb-08.log │ ├── output-prepared-insert-cql-rb-09.log │ ├── output-prepared-insert-cql-rb-10.log │ ├── output-prepared-insert-ruby-driver-01.log │ ├── output-prepared-insert-ruby-driver-02.log │ ├── output-prepared-insert-ruby-driver-03.log │ ├── output-prepared-insert-ruby-driver-04.log │ ├── output-prepared-insert-ruby-driver-05.log │ ├── output-prepared-insert-ruby-driver-06.log │ ├── output-prepared-insert-ruby-driver-07.log │ ├── output-prepared-insert-ruby-driver-08.log │ ├── output-prepared-insert-ruby-driver-09.log │ ├── output-prepared-insert-ruby-driver-10.log │ ├── top-prepared-insert-cql-rb-01.log │ ├── top-prepared-insert-cql-rb-02.log │ ├── top-prepared-insert-cql-rb-03.log │ ├── top-prepared-insert-cql-rb-04.log │ ├── top-prepared-insert-cql-rb-05.log │ ├── top-prepared-insert-cql-rb-06.log │ ├── top-prepared-insert-cql-rb-07.log │ ├── top-prepared-insert-cql-rb-08.log │ ├── top-prepared-insert-cql-rb-09.log │ ├── top-prepared-insert-cql-rb-10.log │ ├── top-prepared-insert-ruby-driver-01.log │ ├── top-prepared-insert-ruby-driver-02.log │ ├── top-prepared-insert-ruby-driver-03.log │ ├── top-prepared-insert-ruby-driver-04.log │ ├── top-prepared-insert-ruby-driver-05.log │ ├── top-prepared-insert-ruby-driver-06.log │ ├── top-prepared-insert-ruby-driver-07.log │ ├── top-prepared-insert-ruby-driver-08.log │ ├── top-prepared-insert-ruby-driver-09.log │ └── top-prepared-insert-ruby-driver-10.log ├── prepared-select-100k-queries │ ├── README.md │ ├── output-prepared-select-cql-rb-01.log │ ├── output-prepared-select-cql-rb-02.log │ ├── output-prepared-select-cql-rb-03.log │ ├── output-prepared-select-cql-rb-04.log │ ├── output-prepared-select-cql-rb-05.log │ ├── output-prepared-select-cql-rb-06.log │ ├── output-prepared-select-cql-rb-07.log │ ├── output-prepared-select-cql-rb-08.log │ ├── output-prepared-select-cql-rb-09.log │ ├── output-prepared-select-cql-rb-10.log │ ├── output-prepared-select-ruby-driver-01.log │ ├── output-prepared-select-ruby-driver-02.log │ ├── output-prepared-select-ruby-driver-03.log │ ├── output-prepared-select-ruby-driver-04.log │ ├── output-prepared-select-ruby-driver-05.log │ ├── output-prepared-select-ruby-driver-06.log │ ├── output-prepared-select-ruby-driver-07.log │ ├── output-prepared-select-ruby-driver-08.log │ ├── output-prepared-select-ruby-driver-09.log │ ├── output-prepared-select-ruby-driver-10.log │ ├── top-prepared-select-cql-rb-01.log │ ├── top-prepared-select-cql-rb-02.log │ ├── top-prepared-select-cql-rb-03.log │ ├── top-prepared-select-cql-rb-04.log │ ├── top-prepared-select-cql-rb-05.log │ ├── top-prepared-select-cql-rb-06.log │ ├── top-prepared-select-cql-rb-07.log │ ├── top-prepared-select-cql-rb-08.log │ ├── top-prepared-select-cql-rb-09.log │ ├── top-prepared-select-cql-rb-10.log │ ├── top-prepared-select-ruby-driver-01.log │ ├── top-prepared-select-ruby-driver-02.log │ ├── top-prepared-select-ruby-driver-03.log │ ├── top-prepared-select-ruby-driver-04.log │ ├── top-prepared-select-ruby-driver-05.log │ ├── top-prepared-select-ruby-driver-06.log │ ├── top-prepared-select-ruby-driver-07.log │ ├── top-prepared-select-ruby-driver-08.log │ ├── top-prepared-select-ruby-driver-09.log │ └── top-prepared-select-ruby-driver-10.log ├── run-benchmark.sh ├── select-all-async-statements │ ├── output-async-prepared-select-cql-rb-01.log │ ├── output-async-prepared-select-cql-rb-02.log │ ├── output-async-prepared-select-cql-rb-03.log │ ├── output-async-prepared-select-cql-rb-04.log │ ├── output-async-prepared-select-cql-rb-05.log │ ├── output-async-prepared-select-cql-rb-06.log │ ├── output-async-prepared-select-cql-rb-07.log │ ├── output-async-prepared-select-ruby-driver-01.log │ ├── output-async-prepared-select-ruby-driver-02.log │ ├── output-async-prepared-select-ruby-driver-03.log │ ├── output-async-prepared-select-ruby-driver-04.log │ ├── output-async-prepared-select-ruby-driver-05.log │ ├── output-async-prepared-select-ruby-driver-06.log │ ├── output-async-prepared-select-ruby-driver-07.log │ ├── output-async-unprepared-select-cql-rb-01.log │ ├── output-async-unprepared-select-cql-rb-02.log │ ├── output-async-unprepared-select-cql-rb-03.log │ ├── output-async-unprepared-select-cql-rb-04.log │ ├── output-async-unprepared-select-cql-rb-05.log │ ├── output-async-unprepared-select-cql-rb-06.log │ ├── output-async-unprepared-select-cql-rb-07.log │ ├── output-async-unprepared-select-ruby-driver-01.log │ ├── output-async-unprepared-select-ruby-driver-02.log │ ├── output-async-unprepared-select-ruby-driver-03.log │ ├── output-async-unprepared-select-ruby-driver-04.log │ ├── output-async-unprepared-select-ruby-driver-05.log │ ├── output-async-unprepared-select-ruby-driver-06.log │ ├── top-async-prepared-select-cql-rb-01.log │ ├── top-async-prepared-select-cql-rb-02.log │ ├── top-async-prepared-select-cql-rb-03.log │ ├── top-async-prepared-select-cql-rb-04.log │ ├── top-async-prepared-select-cql-rb-05.log │ ├── top-async-prepared-select-cql-rb-06.log │ ├── top-async-prepared-select-cql-rb-07.log │ ├── top-async-prepared-select-ruby-driver-01.log │ ├── top-async-prepared-select-ruby-driver-02.log │ ├── top-async-prepared-select-ruby-driver-03.log │ ├── top-async-prepared-select-ruby-driver-04.log │ ├── top-async-prepared-select-ruby-driver-05.log │ ├── top-async-prepared-select-ruby-driver-06.log │ ├── top-async-prepared-select-ruby-driver-07.log │ ├── top-async-unprepared-select-cql-rb-01.log │ ├── top-async-unprepared-select-cql-rb-02.log │ ├── top-async-unprepared-select-cql-rb-03.log │ ├── top-async-unprepared-select-cql-rb-04.log │ ├── top-async-unprepared-select-cql-rb-05.log │ ├── top-async-unprepared-select-cql-rb-06.log │ ├── top-async-unprepared-select-cql-rb-07.log │ ├── top-async-unprepared-select-ruby-driver-01.log │ ├── top-async-unprepared-select-ruby-driver-02.log │ ├── top-async-unprepared-select-ruby-driver-03.log │ ├── top-async-unprepared-select-ruby-driver-04.log │ ├── top-async-unprepared-select-ruby-driver-05.log │ └── top-async-unprepared-select-ruby-driver-06.log ├── sync-prepared-insert-cql-rb.rb ├── sync-prepared-insert-ruby-driver.rb ├── sync-prepared-select-cql-rb.rb ├── sync-prepared-select-ruby-driver.rb ├── sync-unprepared-insert-cql-rb.rb ├── sync-unprepared-insert-ruby-driver.rb ├── sync-unprepared-select-cql-rb.rb ├── sync-unprepared-select-ruby-driver.rb ├── unprepared-insert-100k-queries │ ├── README.md │ ├── output-unprepared-insert-cql-rb-01.log │ ├── output-unprepared-insert-cql-rb-02.log │ ├── output-unprepared-insert-cql-rb-03.log │ ├── output-unprepared-insert-cql-rb-04.log │ ├── output-unprepared-insert-cql-rb-05.log │ ├── output-unprepared-insert-cql-rb-06.log │ ├── output-unprepared-insert-cql-rb-07.log │ ├── output-unprepared-insert-cql-rb-08.log │ ├── output-unprepared-insert-cql-rb-09.log │ ├── output-unprepared-insert-cql-rb-10.log │ ├── output-unprepared-insert-ruby-driver-01.log │ ├── output-unprepared-insert-ruby-driver-02.log │ ├── output-unprepared-insert-ruby-driver-03.log │ ├── output-unprepared-insert-ruby-driver-04.log │ ├── output-unprepared-insert-ruby-driver-05.log │ ├── output-unprepared-insert-ruby-driver-06.log │ ├── output-unprepared-insert-ruby-driver-07.log │ ├── output-unprepared-insert-ruby-driver-08.log │ ├── output-unprepared-insert-ruby-driver-09.log │ ├── output-unprepared-insert-ruby-driver-10.log │ ├── top-unprepared-insert-cql-rb-01.log │ ├── top-unprepared-insert-cql-rb-02.log │ ├── top-unprepared-insert-cql-rb-03.log │ ├── top-unprepared-insert-cql-rb-04.log │ ├── top-unprepared-insert-cql-rb-05.log │ ├── top-unprepared-insert-cql-rb-06.log │ ├── top-unprepared-insert-cql-rb-07.log │ ├── top-unprepared-insert-cql-rb-08.log │ ├── top-unprepared-insert-cql-rb-09.log │ ├── top-unprepared-insert-cql-rb-10.log │ ├── top-unprepared-insert-ruby-driver-01.log │ ├── top-unprepared-insert-ruby-driver-02.log │ ├── top-unprepared-insert-ruby-driver-03.log │ ├── top-unprepared-insert-ruby-driver-04.log │ ├── top-unprepared-insert-ruby-driver-05.log │ ├── top-unprepared-insert-ruby-driver-06.log │ ├── top-unprepared-insert-ruby-driver-07.log │ ├── top-unprepared-insert-ruby-driver-08.log │ ├── top-unprepared-insert-ruby-driver-09.log │ └── top-unprepared-insert-ruby-driver-10.log └── unprepared-select-100k-queries │ ├── README.md │ ├── output-unprepared-select-cql-rb-01.log │ ├── output-unprepared-select-cql-rb-02.log │ ├── output-unprepared-select-cql-rb-03.log │ ├── output-unprepared-select-cql-rb-04.log │ ├── output-unprepared-select-cql-rb-05.log │ ├── output-unprepared-select-cql-rb-06.log │ ├── output-unprepared-select-cql-rb-07.log │ ├── output-unprepared-select-cql-rb-08.log │ ├── output-unprepared-select-cql-rb-09.log │ ├── output-unprepared-select-cql-rb-10.log │ ├── output-unprepared-select-ruby-driver-01.log │ ├── output-unprepared-select-ruby-driver-02.log │ ├── output-unprepared-select-ruby-driver-03.log │ ├── output-unprepared-select-ruby-driver-04.log │ ├── output-unprepared-select-ruby-driver-05.log │ ├── output-unprepared-select-ruby-driver-06.log │ ├── output-unprepared-select-ruby-driver-07.log │ ├── output-unprepared-select-ruby-driver-08.log │ ├── output-unprepared-select-ruby-driver-09.log │ ├── output-unprepared-select-ruby-driver-10.log │ ├── top-unprepared-select-cql-rb-01.log │ ├── top-unprepared-select-cql-rb-02.log │ ├── top-unprepared-select-cql-rb-03.log │ ├── top-unprepared-select-cql-rb-04.log │ ├── top-unprepared-select-cql-rb-05.log │ ├── top-unprepared-select-cql-rb-06.log │ ├── top-unprepared-select-cql-rb-07.log │ ├── top-unprepared-select-cql-rb-08.log │ ├── top-unprepared-select-cql-rb-09.log │ ├── top-unprepared-select-cql-rb-10.log │ ├── top-unprepared-select-ruby-driver-01.log │ ├── top-unprepared-select-ruby-driver-02.log │ ├── top-unprepared-select-ruby-driver-03.log │ ├── top-unprepared-select-ruby-driver-04.log │ ├── top-unprepared-select-ruby-driver-05.log │ ├── top-unprepared-select-ruby-driver-06.log │ ├── top-unprepared-select-ruby-driver-07.log │ ├── top-unprepared-select-ruby-driver-08.log │ ├── top-unprepared-select-ruby-driver-09.log │ └── top-unprepared-select-ruby-driver-10.log ├── build.yaml.bak ├── cassandra-driver.gemspec ├── cucumber.yml ├── docs.yaml ├── examples └── cql-rb-wrapper.rb ├── ext └── cassandra_murmur3 │ ├── CassandraMurmur3Service.java │ ├── cassandra_murmur3.c │ └── extconf.rb ├── features ├── .nav ├── README.md ├── address_resolution │ ├── README.md │ └── custom_address_resolution.feature ├── asynchronous_io │ ├── README.md │ ├── executing_queries.feature │ └── preparing_statements.feature ├── basics │ ├── .nav │ ├── README.md │ ├── batch_statements.feature │ ├── client_side_timestamps.feature │ ├── custom_payloads.feature │ ├── datatypes.feature │ ├── execution_profiles.feature │ ├── namespace_conflicts.feature │ ├── prepared_statements.feature │ ├── result_paging.feature │ ├── schema_metadata.feature │ └── user_defined_types.feature ├── debugging │ ├── README.md │ ├── execution_info.feature │ ├── logging.feature │ └── request_tracing.feature ├── error_handling │ ├── .nav │ ├── README.md │ ├── connection_heartbeat.feature │ └── request_execution.feature ├── load_balancing │ ├── .nav │ ├── README.md │ ├── datacenter_aware.feature │ ├── default_policy.feature │ ├── implementing_a_policy.feature │ ├── round_robin.feature │ ├── token_aware.feature │ └── whitelist.feature ├── reconnection │ ├── README.md │ └── automatic_reconnection.feature ├── retry_policies │ ├── README.md │ ├── downgrading_consistency.feature │ └── fallthrough.feature ├── security │ ├── .nav │ ├── README.md │ ├── ssl_encryption.feature │ └── standard_authentication.feature ├── state_listeners │ ├── README.md │ ├── membership_changes.feature │ └── schema_changes.feature └── support │ ├── env.rb │ └── step_definitions │ ├── authentication_steps.rb │ ├── cassandra_steps.rb │ └── interactive_steps.rb ├── integration ├── client_error_test.rb ├── client_warnings_test.rb ├── control_connection_test.rb ├── custom_payload_test.rb ├── datatype_utils.rb ├── functions │ ├── user_defined_aggregate_test.rb │ └── user_defined_function_test.rb ├── idempotency_test.rb ├── indexes │ ├── indexes_test.rb │ └── materialized_view_test.rb ├── integration_test_case.rb ├── load_balancing │ ├── round_robin_test.rb │ ├── token_aware_test.rb │ └── try_next_host_retry_policy.rb ├── metadata_test.rb ├── schema_change_listener.rb ├── security │ ├── authentication_test.rb │ ├── ssl_authenticated_encryption_test.rb │ └── ssl_encryption_test.rb ├── serial_consistency_test.rb ├── session_test.rb ├── stress_tests │ ├── cluster_stress_test.rb │ └── stress_helper.rb └── types │ ├── datatype_test.rb │ ├── duration_test.rb │ └── user_defined_type_test.rb ├── lib ├── cassandra.rb ├── cassandra │ ├── address_resolution.rb │ ├── address_resolution │ │ ├── policies.rb │ │ └── policies │ │ │ ├── ec2_multi_region.rb │ │ │ └── none.rb │ ├── aggregate.rb │ ├── argument.rb │ ├── attr_boolean.rb │ ├── auth.rb │ ├── auth │ │ ├── providers.rb │ │ └── providers │ │ │ └── password.rb │ ├── cassandra_logger.rb │ ├── cluster.rb │ ├── cluster │ │ ├── client.rb │ │ ├── connection_pool.rb │ │ ├── connector.rb │ │ ├── control_connection.rb │ │ ├── failed_connection.rb │ │ ├── metadata.rb │ │ ├── options.rb │ │ ├── registry.rb │ │ ├── schema.rb │ │ └── schema │ │ │ ├── cql_type_parser.rb │ │ │ ├── fetchers.rb │ │ │ ├── fqcn_type_parser.rb │ │ │ ├── partitioners.rb │ │ │ ├── partitioners │ │ │ ├── murmur3.rb │ │ │ ├── ordered.rb │ │ │ └── random.rb │ │ │ ├── replication_strategies.rb │ │ │ └── replication_strategies │ │ │ ├── network_topology.rb │ │ │ ├── none.rb │ │ │ └── simple.rb │ ├── column.rb │ ├── column_container.rb │ ├── compression.rb │ ├── compression │ │ └── compressors │ │ │ ├── lz4.rb │ │ │ └── snappy.rb │ ├── custom_data.rb │ ├── driver.rb │ ├── duration.rb │ ├── errors.rb │ ├── execution │ │ ├── info.rb │ │ ├── options.rb │ │ ├── profile.rb │ │ ├── profile_manager.rb │ │ └── trace.rb │ ├── executors.rb │ ├── function.rb │ ├── function_collection.rb │ ├── future.rb │ ├── host.rb │ ├── index.rb │ ├── keyspace.rb │ ├── listener.rb │ ├── load_balancing.rb │ ├── load_balancing │ │ ├── policies.rb │ │ └── policies │ │ │ ├── dc_aware_round_robin.rb │ │ │ ├── round_robin.rb │ │ │ ├── token_aware.rb │ │ │ └── white_list.rb │ ├── materialized_view.rb │ ├── null_logger.rb │ ├── protocol.rb │ ├── protocol │ │ ├── coder.rb │ │ ├── cql_byte_buffer.rb │ │ ├── cql_protocol_handler.rb │ │ ├── request.rb │ │ ├── requests │ │ │ ├── auth_response_request.rb │ │ │ ├── batch_request.rb │ │ │ ├── credentials_request.rb │ │ │ ├── execute_request.rb │ │ │ ├── options_request.rb │ │ │ ├── prepare_request.rb │ │ │ ├── query_request.rb │ │ │ ├── register_request.rb │ │ │ ├── startup_request.rb │ │ │ └── void_query_request.rb │ │ ├── response.rb │ │ ├── responses │ │ │ ├── already_exists_error_response.rb │ │ │ ├── auth_challenge_response.rb │ │ │ ├── auth_success_response.rb │ │ │ ├── authenticate_response.rb │ │ │ ├── error_response.rb │ │ │ ├── event_response.rb │ │ │ ├── function_failure_error_response.rb │ │ │ ├── prepared_result_response.rb │ │ │ ├── raw_rows_result_response.rb │ │ │ ├── read_failure_error_response.rb │ │ │ ├── read_timeout_error_response.rb │ │ │ ├── ready_response.rb │ │ │ ├── result_response.rb │ │ │ ├── rows_result_response.rb │ │ │ ├── schema_change_event_response.rb │ │ │ ├── schema_change_result_response.rb │ │ │ ├── set_keyspace_result_response.rb │ │ │ ├── status_change_event_response.rb │ │ │ ├── supported_response.rb │ │ │ ├── topology_change_event_response.rb │ │ │ ├── unavailable_error_response.rb │ │ │ ├── unprepared_error_response.rb │ │ │ ├── void_result_response.rb │ │ │ ├── write_failure_error_response.rb │ │ │ └── write_timeout_error_response.rb │ │ ├── v1.rb │ │ ├── v3.rb │ │ └── v4.rb │ ├── reconnection.rb │ ├── reconnection │ │ ├── policies.rb │ │ └── policies │ │ │ ├── constant.rb │ │ │ └── exponential.rb │ ├── result.rb │ ├── retry.rb │ ├── retry │ │ ├── policies.rb │ │ └── policies │ │ │ ├── default.rb │ │ │ ├── downgrading_consistency.rb │ │ │ └── fallthrough.rb │ ├── session.rb │ ├── statement.rb │ ├── statements.rb │ ├── statements │ │ ├── batch.rb │ │ ├── bound.rb │ │ ├── prepared.rb │ │ ├── simple.rb │ │ └── void.rb │ ├── table.rb │ ├── time.rb │ ├── time_uuid.rb │ ├── timestamp_generator.rb │ ├── timestamp_generator │ │ ├── simple.rb │ │ └── ticking_on_duplicate.rb │ ├── trigger.rb │ ├── tuple.rb │ ├── types.rb │ ├── udt.rb │ ├── util.rb │ ├── uuid.rb │ ├── uuid │ │ └── generator.rb │ └── version.rb └── datastax │ └── cassandra.rb ├── spec ├── bin │ └── chaos ├── cassandra │ ├── address_resolution │ │ └── policies │ │ │ └── ec2_multi_region_spec.rb │ ├── auth │ │ └── providers │ │ │ └── password_spec.rb │ ├── cluster │ │ ├── client_spec.rb │ │ ├── connection_pool_spec.rb │ │ ├── control_connection_spec.rb │ │ ├── metadata_spec.rb │ │ ├── options_spec.rb │ │ ├── registry_spec.rb │ │ ├── schema │ │ │ ├── fetchers │ │ │ │ ├── 1.2.19-data.json │ │ │ │ ├── 1.2.19-schema.cql │ │ │ │ ├── 2.0.16-data.json │ │ │ │ ├── 2.0.16-schema.cql │ │ │ │ ├── 2.1.9-data.json │ │ │ │ ├── 2.1.9-schema.cql │ │ │ │ ├── 2.2.1-data.json │ │ │ │ ├── 2.2.1-schema.cql │ │ │ │ ├── 3.0.0-data.json │ │ │ │ └── 3.0.0-schema.cql │ │ │ ├── fetchers_spec.rb │ │ │ ├── fqcn_type_parser_spec.rb │ │ │ ├── partitioners │ │ │ │ ├── murmur3_spec.rb │ │ │ │ └── random_spec.rb │ │ │ └── replication_strategies │ │ │ │ ├── network_topology_spec.rb │ │ │ │ ├── none_spec.rb │ │ │ │ └── simple_spec.rb │ │ └── schema_spec.rb │ ├── cluster_spec.rb │ ├── compression │ │ ├── common.rb │ │ └── compressors │ │ │ ├── lz4_spec.rb │ │ │ └── snappy_spec.rb │ ├── duration_spec.rb │ ├── execution │ │ ├── options_spec.rb │ │ ├── profile_manager_spec.rb │ │ ├── profile_spec.rb │ │ └── trace_spec.rb │ ├── executors │ │ ├── same_thread_spec.rb │ │ └── thread_pool_spec.rb │ ├── future │ │ ├── error_spec.rb │ │ └── value_spec.rb │ ├── future_spec.rb │ ├── index_spec.rb │ ├── keyspace_spec.rb │ ├── load_balancing │ │ └── policies │ │ │ ├── dc_aware_round_robin_spec.rb │ │ │ ├── round_robin_spec.rb │ │ │ ├── token_aware_spec.rb │ │ │ └── white_list_spec.rb │ ├── materialized_view_spec.rb │ ├── murmur3_spec.rb │ ├── promise │ │ └── signal_spec.rb │ ├── protocol │ │ ├── buffer.yml │ │ ├── coder_spec.rb │ │ ├── cols.yml │ │ ├── cql_byte_buffer_spec.rb │ │ ├── cql_protocol_handler_spec.rb │ │ ├── requests │ │ │ ├── auth_response_request_spec.rb │ │ │ ├── batch_request_spec.rb │ │ │ ├── credentials_request_spec.rb │ │ │ ├── execute_request_spec.rb │ │ │ ├── options_request_spec.rb │ │ │ ├── prepare_request_spec.rb │ │ │ ├── query_request_spec.rb │ │ │ ├── register_request_spec.rb │ │ │ └── startup_request_spec.rb │ │ ├── responses │ │ │ ├── auth_challenge_response_spec.rb │ │ │ ├── auth_success_response_spec.rb │ │ │ ├── authenticate_response_spec.rb │ │ │ ├── error_response_spec.rb │ │ │ ├── prepared_result_response_spec.rb │ │ │ ├── raw_rows_result_response_spec.rb │ │ │ ├── ready_response_spec.rb │ │ │ ├── rows_result_response_spec.rb │ │ │ ├── schema_change_event_response_spec.rb │ │ │ ├── schema_change_result_response_spec.rb │ │ │ ├── set_keyspace_result_response_spec.rb │ │ │ ├── status_change_event_response_spec.rb │ │ │ ├── supported_response_spec.rb │ │ │ ├── topology_change_event_response_spec.rb │ │ │ └── void_result_response_spec.rb │ │ ├── v1 │ │ │ └── decoder_spec.rb │ │ ├── v3 │ │ │ └── decoder_spec.rb │ │ └── v4 │ │ │ └── decoder_spec.rb │ ├── retry │ │ └── policies │ │ │ ├── default_spec.rb │ │ │ ├── downgrading_consistency_spec.rb │ │ │ └── fallthrough_spec.rb │ ├── session_spec.rb │ ├── table_spec.rb │ ├── time_uuid_spec.rb │ ├── util_spec.rb │ ├── uuid │ │ └── generator_spec.rb │ └── uuid_spec.rb ├── cassandra_spec.rb ├── regressions │ └── RUBY-189_spec.rb ├── spec_helper.rb └── support │ ├── await_helper.rb │ ├── bytes_helper.rb │ ├── fake_cluster_registry.rb │ ├── fake_io_reactor.rb │ └── stub_io_reactor.rb └── support ├── ccm.py ├── ccm.rb ├── retry.rb ├── ssl ├── .keystore ├── .truststore ├── README.md ├── cassandra.pem ├── driver.key ├── driver.pem └── regenerate-keys.sh └── triggers ├── AuditTrigger.properties └── trigger-example.jar /.gitignore: -------------------------------------------------------------------------------- 1 | /coverage 2 | /benchmark 3 | /tmp 4 | /doc 5 | /pkg 6 | /.yardoc 7 | /TODO.md 8 | /.ruby-version 9 | /.ruby-gemset 10 | /.rvmrc 11 | /docs 12 | /.sass-cache 13 | /venv 14 | /lib/cassandra_murmur3.* 15 | /node_modules 16 | /*.gem 17 | /.bundle/* 18 | /.idea/ 19 | -------------------------------------------------------------------------------- /.nav: -------------------------------------------------------------------------------- 1 | features 2 | api 3 | -------------------------------------------------------------------------------- /.rspec: -------------------------------------------------------------------------------- 1 | --tty 2 | --color 3 | --format documentation 4 | <% if ENV["FAIL_FAST"] == 'Y' %>--fail-fast<% end %> 5 | -------------------------------------------------------------------------------- /.simplecov: -------------------------------------------------------------------------------- 1 | SimpleCov.configure do 2 | load_profile 'root_filter' 3 | 4 | add_group 'Source', 'lib' 5 | add_group 'Unit tests', 'spec/cassandra' 6 | add_group 'End-to-end tests', 'features' 7 | 8 | use_merging 9 | merge_timeout 3600 10 | end 11 | -------------------------------------------------------------------------------- /.travis.yml: -------------------------------------------------------------------------------- 1 | language: ruby 2 | script: bundle exec rake rspec 3 | bundler_args: --without development docs 4 | rvm: 5 | - 2.2.4 6 | - 2.3.0 7 | - 2.4 8 | - 2.5 9 | - 2.6 10 | - 2.7 11 | - jruby-9.0.5.0 12 | jdk: 13 | - openjdk8 14 | env: 15 | global: 16 | - FAIL_FAST=no 17 | - COVERAGE=no 18 | matrix: 19 | fast_finish: true 20 | branches: 21 | only: 22 | - master 23 | before_install: | 24 | # Install bundler < 2.0, see https://docs.travis-ci.com/user/languages/ruby/ 25 | gem uninstall -v '>= 2' -i $(rvm gemdir)@global -ax bundler || true 26 | gem install bundler -v '< 2' 27 | if [[ k$TRAVIS_RUBY_VERSION = kjruby* ]] ; then 28 | # Hack the Gemfile.lock file to indicate we're a JRuby gem, to make bundler happy. 29 | sed -e 's/\(cassandra-driver [^)]*\)/\1-java/' -i"" Gemfile.lock 30 | fi 31 | -------------------------------------------------------------------------------- /.yardopts: -------------------------------------------------------------------------------- 1 | --no-private 2 | --markup markdown 3 | --type-tag expected_errors:"Expected Errors" 4 | --tag jira_ticket:"JIRA Ticket" 5 | --type-tag expected_result:"Expected Result" 6 | --tag test_assumptions:"Test Assumptions" 7 | --tag test_category:"Test Category" 8 | 9 | lib/**/*.rb 10 | integration/**/*.rb 11 | -- README 12 | 13 | load_plugins: true 14 | -------------------------------------------------------------------------------- /Gemfile: -------------------------------------------------------------------------------- 1 | source 'https://rubygems.org/' 2 | 3 | gemspec 4 | 5 | gem 'cliver', group: [:development, :test] 6 | gem 'lz4-ruby', group: [:development, :test] 7 | gem 'rake-compiler', group: [:development, :test] 8 | gem 'snappy', group: [:development, :test] 9 | 10 | group :development do 11 | platforms :mri_19 do 12 | gem 'perftools.rb' 13 | end 14 | gem 'rubocop', '~> 0.51', require: false 15 | end 16 | 17 | group :test do 18 | gem 'ansi' 19 | gem 'aruba' 20 | gem 'cucumber' 21 | gem 'delorean' 22 | gem 'minitest', '< 5.0.0' 23 | gem 'os' 24 | gem 'rspec' 25 | gem 'rspec-collection_matchers' 26 | gem 'rspec-wait' 27 | gem 'simplecov' 28 | end 29 | 30 | group :docs do 31 | gem 'yard' 32 | end 33 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | Copyright DataStax, Inc. 2 | 3 | Licensed under the Apache License, Version 2.0 (the "License"); 4 | you may not use this file except in compliance with the License. 5 | You may obtain a copy of the License at 6 | 7 | http://www.apache.org/licenses/LICENSE-2.0 8 | 9 | Unless required by applicable law or agreed to in writing, software 10 | distributed under the License is distributed on an "AS IS" BASIS, 11 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 | See the License for the specific language governing permissions and 13 | limitations under the License. 14 | -------------------------------------------------------------------------------- /benchmarking/create-cluster.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | create=false 4 | insert=false 5 | help=false 6 | 7 | 8 | 9 | while getopts "hci" opt; do 10 | case $opt in 11 | c) create=true ;; 12 | i) insert=true ;; 13 | :) echo "Option -$OPTARG requires an argument." >&2 ; help=true ;; 14 | *) help=true ;; # Wrong argument == print help 15 | esac 16 | done 17 | 18 | 19 | 20 | # Print help if asked 21 | if [ $help = true ] ; then 22 | echo "Usage: $0 [option...] 23 | Prepare a ccm cluster called 'test-cluster' for benchmarks. 24 | 25 | Options: 26 | -c Create the cluster 27 | -i Insert data in the cluster (including create keyspace)" \ 28 | >&2 29 | exit 30 | fi 31 | shift $((OPTIND-1)) 32 | 33 | 34 | 35 | if [ $create = true ] ; then 36 | ccm create -n 3 -v git:cassandra-2.0.9 -i 127.0.0. -s -b test-cluster 37 | else 38 | echo "# '-c' argument not used, skipping cluster creation." >&2 39 | fi 40 | 41 | 42 | 43 | if [ $insert = true ] ; then 44 | echo "CREATE KEYSPACE simplex WITH replication = {'class': 'SimpleStrategy', 'replication_factor': 3};" | cqlsh 45 | cqlsh -k simplex -f ../features/support/cql/schema/songs.cql 46 | cqlsh -k simplex -f ../features/support/cql/data/songs.cql 47 | else 48 | echo "# '-i' argument not used, skipping schema creation and content insertion." >&2 49 | fi 50 | 51 | -------------------------------------------------------------------------------- /benchmarking/dirty-field-access.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/ruby 2 | 3 | # This file is NOT a benchmark per-se. It is a test showing the possible 4 | # synchronization issues that will happen in jruby but not in ruby (MRI) when a 5 | # shared variable is not properly guarded by a mutex. 6 | # 7 | # When this file is executed with ruby, it terminates after 5~10 seconds. 8 | # 9 | # When this file is executed with jruby, it will never terminate because some 10 | # updates will be lost on "stopped_threads" variable, because of conflicting 11 | # writes. 12 | 13 | require 'thread' 14 | 15 | threads = Array.new 16 | should_start = false 17 | stopped_threads = 0 18 | 19 | 1000.times do 20 | threads.push(Thread.new { 21 | until should_start 22 | sleep(rand) 23 | end 24 | 100.times do 25 | sleep(rand / 10) 26 | end 27 | stopped_threads += 1 28 | }) 29 | end 30 | 31 | puts "Sleeping 1 second so that all threads are running..." 32 | sleep 1 33 | should_start = true 34 | 35 | puts "# Waiting for #{threads.size} threads to finish..." 36 | until stopped_threads == threads.size 37 | puts "# #{stopped_threads} have stopped..." 38 | sleep 1 39 | end 40 | 41 | -------------------------------------------------------------------------------- /benchmarking/prepared-insert-100k-queries/README.md: -------------------------------------------------------------------------------- 1 | # Results 2 | The tests were ran on an iMac 2013 (Intel Core i7 3.5 GHz, 16 GB RAM) on a 3 | Cassandra (2.0.9) cluster of 3 nodes created using CCM 4 | 5 | The test contained only prepared insert statements. 6 | 7 | -------------------------------------------------------------------------------- /benchmarking/prepared-insert-100k-queries/output-prepared-insert-cql-rb-01.log: -------------------------------------------------------------------------------- 1 | 3.0e-06 Connecting to cluster... 2 | 0.073881 Starting producing 100000 inserts... 3 | # Started watcher 4 | # 0 new queries answered (0/100000) 5 | # 0 new queries answered (0/100000) 6 | # 0 new queries answered (0/100000) 7 | # 0 new queries answered (0/100000) 8 | # 0 new queries answered (0/100000) 9 | # 0 new queries answered (0/100000) 10 | # 0 new queries answered (0/100000) 11 | # 0 new queries answered (0/100000) 12 | # 0 new queries answered (0/100000) 13 | 9.400772 Starting consuming inserts... 14 | # 8,947 new queries answered (8947/100000) 15 | # 4,958 new queries answered (13905/100000) 16 | # 6,455 new queries answered (20360/100000) 17 | # 8,832 new queries answered (29192/100000) 18 | # 6,501 new queries answered (35693/100000) 19 | # 4,300 new queries answered (39993/100000) 20 | # 4,937 new queries answered (44930/100000) 21 | # 10,298 new queries answered (55228/100000) 22 | # 8,797 new queries answered (64025/100000) 23 | # 7,323 new queries answered (71348/100000) 24 | # 8,461 new queries answered (79809/100000) 25 | # 9,902 new queries answered (89711/100000) 26 | # 9,126 new queries answered (98837/100000) 27 | 22.520604 Cleaning... 28 | # Success: 100000 29 | # Errors: 0 30 | 23.481932 Done. 31 | -------------------------------------------------------------------------------- /benchmarking/prepared-insert-100k-queries/output-prepared-insert-cql-rb-02.log: -------------------------------------------------------------------------------- 1 | 6.0e-06 Connecting to cluster... 2 | 1.693942 Starting producing 100000 inserts... 3 | # Started watcher 4 | # 0 new queries answered (0/100000) 5 | # 0 new queries answered (0/100000) 6 | # 0 new queries answered (0/100000) 7 | # 0 new queries answered (0/100000) 8 | # 0 new queries answered (0/100000) 9 | # 0 new queries answered (0/100000) 10 | # 0 new queries answered (0/100000) 11 | # 0 new queries answered (0/100000) 12 | 10.7153 Starting consuming inserts... 13 | # 2,538 new queries answered (2538/100000) 14 | # 7,231 new queries answered (9769/100000) 15 | # 8,590 new queries answered (18359/100000) 16 | # 8,499 new queries answered (26858/100000) 17 | # 9,447 new queries answered (36305/100000) 18 | # 8,572 new queries answered (44877/100000) 19 | # 8,117 new queries answered (52994/100000) 20 | # 10,337 new queries answered (63331/100000) 21 | # 7,766 new queries answered (71097/100000) 22 | # 8,383 new queries answered (79480/100000) 23 | # 7,588 new queries answered (87068/100000) 24 | # 11,153 new queries answered (98221/100000) 25 | 23.048108 Cleaning... 26 | # Success: 100000 27 | # Errors: 0 28 | 23.993225 Done. 29 | -------------------------------------------------------------------------------- /benchmarking/prepared-insert-100k-queries/output-prepared-insert-cql-rb-03.log: -------------------------------------------------------------------------------- 1 | 4.0e-06 Connecting to cluster... 2 | 1.580329 Starting producing 100000 inserts... 3 | # Started watcher 4 | # 0 new queries answered (0/100000) 5 | # 0 new queries answered (0/100000) 6 | # 0 new queries answered (0/100000) 7 | # 0 new queries answered (0/100000) 8 | # 0 new queries answered (0/100000) 9 | # 0 new queries answered (0/100000) 10 | # 0 new queries answered (0/100000) 11 | # 0 new queries answered (0/100000) 12 | # 0 new queries answered (0/100000) 13 | 10.752949 Starting consuming inserts... 14 | # 9,519 new queries answered (9519/100000) 15 | # 9,497 new queries answered (19016/100000) 16 | # 9,108 new queries answered (28124/100000) 17 | # 8,628 new queries answered (36752/100000) 18 | # 7,920 new queries answered (44672/100000) 19 | # 8,147 new queries answered (52819/100000) 20 | # 8,504 new queries answered (61323/100000) 21 | # 10,655 new queries answered (71978/100000) 22 | # 8,614 new queries answered (80592/100000) 23 | # 8,535 new queries answered (89127/100000) 24 | # 9,339 new queries answered (98466/100000) 25 | 22.69307 Cleaning... 26 | # Success: 100000 27 | # Errors: 0 28 | 23.646002 Done. 29 | -------------------------------------------------------------------------------- /benchmarking/prepared-insert-100k-queries/output-prepared-insert-cql-rb-04.log: -------------------------------------------------------------------------------- 1 | 4.0e-06 Connecting to cluster... 2 | 0.136021 Starting producing 100000 inserts... 3 | # Started watcher 4 | # 0 new queries answered (0/100000) 5 | # 0 new queries answered (0/100000) 6 | # 0 new queries answered (0/100000) 7 | # 0 new queries answered (0/100000) 8 | # 0 new queries answered (0/100000) 9 | # 0 new queries answered (0/100000) 10 | # 0 new queries answered (0/100000) 11 | # 0 new queries answered (0/100000) 12 | # 0 new queries answered (0/100000) 13 | 9.176294 Starting consuming inserts... 14 | # 8,571 new queries answered (8571/100000) 15 | # 7,604 new queries answered (16175/100000) 16 | # 6,914 new queries answered (23089/100000) 17 | # 7,042 new queries answered (30131/100000) 18 | # 8,880 new queries answered (39011/100000) 19 | # 8,625 new queries answered (47636/100000) 20 | # 8,045 new queries answered (55681/100000) 21 | # 8,458 new queries answered (64139/100000) 22 | # 9,003 new queries answered (73142/100000) 23 | # 9,667 new queries answered (82809/100000) 24 | # 10,219 new queries answered (93028/100000) 25 | 20.829878 Cleaning... 26 | # Success: 100000 27 | # Errors: 0 28 | 21.18403 Done. 29 | -------------------------------------------------------------------------------- /benchmarking/prepared-insert-100k-queries/output-prepared-insert-cql-rb-05.log: -------------------------------------------------------------------------------- 1 | 4.0e-06 Connecting to cluster... 2 | 0.20765 Starting producing 100000 inserts... 3 | # Started watcher 4 | # 0 new queries answered (0/100000) 5 | # 0 new queries answered (0/100000) 6 | # 0 new queries answered (0/100000) 7 | # 0 new queries answered (0/100000) 8 | # 0 new queries answered (0/100000) 9 | # 0 new queries answered (0/100000) 10 | # 0 new queries answered (0/100000) 11 | # 0 new queries answered (0/100000) 12 | 9.429134 Starting consuming inserts... 13 | # 2,908 new queries answered (2908/100000) 14 | # 6,426 new queries answered (9334/100000) 15 | # 7,799 new queries answered (17133/100000) 16 | # 7,895 new queries answered (25028/100000) 17 | # 7,255 new queries answered (32283/100000) 18 | # 8,563 new queries answered (40846/100000) 19 | # 9,377 new queries answered (50223/100000) 20 | # 8,855 new queries answered (59078/100000) 21 | # 8,279 new queries answered (67357/100000) 22 | # 8,599 new queries answered (75956/100000) 23 | # 10,974 new queries answered (86930/100000) 24 | # 8,148 new queries answered (95078/100000) 25 | 21.366133 Cleaning... 26 | # Success: 100000 27 | # Errors: 0 28 | 22.142862 Done. 29 | -------------------------------------------------------------------------------- /benchmarking/prepared-insert-100k-queries/output-prepared-insert-cql-rb-06.log: -------------------------------------------------------------------------------- 1 | 3.0e-06 Connecting to cluster... 2 | 1.500107 Starting producing 100000 inserts... 3 | # Started watcher 4 | # 0 new queries answered (0/100000) 5 | # 0 new queries answered (0/100000) 6 | # 0 new queries answered (0/100000) 7 | # 0 new queries answered (0/100000) 8 | # 0 new queries answered (0/100000) 9 | # 0 new queries answered (0/100000) 10 | # 0 new queries answered (0/100000) 11 | # 0 new queries answered (0/100000) 12 | 10.62889 Starting consuming inserts... 13 | # 4,199 new queries answered (4199/100000) 14 | # 6,404 new queries answered (10603/100000) 15 | # 9,353 new queries answered (19956/100000) 16 | # 8,224 new queries answered (28180/100000) 17 | # 8,737 new queries answered (36917/100000) 18 | # 6,028 new queries answered (42945/100000) 19 | # 7,969 new queries answered (50914/100000) 20 | # 10,150 new queries answered (61064/100000) 21 | # 7,757 new queries answered (68821/100000) 22 | # 7,569 new queries answered (76390/100000) 23 | # 7,413 new queries answered (83803/100000) 24 | # 9,357 new queries answered (93160/100000) 25 | 22.777188 Cleaning... 26 | # Success: 100000 27 | # Errors: 0 28 | 23.149326 Done. 29 | -------------------------------------------------------------------------------- /benchmarking/prepared-insert-100k-queries/output-prepared-insert-cql-rb-07.log: -------------------------------------------------------------------------------- 1 | 3.0e-06 Connecting to cluster... 2 | 1.583331 Starting producing 100000 inserts... 3 | # Started watcher 4 | # 0 new queries answered (0/100000) 5 | # 0 new queries answered (0/100000) 6 | # 0 new queries answered (0/100000) 7 | # 0 new queries answered (0/100000) 8 | # 0 new queries answered (0/100000) 9 | # 0 new queries answered (0/100000) 10 | # 0 new queries answered (0/100000) 11 | # 0 new queries answered (0/100000) 12 | 10.509218 Starting consuming inserts... 13 | # 4,613 new queries answered (4613/100000) 14 | # 8,455 new queries answered (13068/100000) 15 | # 9,565 new queries answered (22633/100000) 16 | # 7,514 new queries answered (30147/100000) 17 | # 8,568 new queries answered (38715/100000) 18 | # 10,050 new queries answered (48765/100000) 19 | # 9,166 new queries answered (57931/100000) 20 | # 8,587 new queries answered (66518/100000) 21 | # 9,949 new queries answered (76467/100000) 22 | # 8,188 new queries answered (84655/100000) 23 | # 9,192 new queries answered (93847/100000) 24 | 22.222161 Cleaning... 25 | # Success: 100000 26 | # Errors: 0 27 | 22.841099 Done. 28 | -------------------------------------------------------------------------------- /benchmarking/prepared-insert-100k-queries/output-prepared-insert-cql-rb-08.log: -------------------------------------------------------------------------------- 1 | 4.0e-06 Connecting to cluster... 2 | 0.196812 Starting producing 100000 inserts... 3 | # Started watcher 4 | # 0 new queries answered (0/100000) 5 | # 0 new queries answered (0/100000) 6 | # 0 new queries answered (0/100000) 7 | # 0 new queries answered (0/100000) 8 | # 0 new queries answered (0/100000) 9 | # 0 new queries answered (0/100000) 10 | # 0 new queries answered (0/100000) 11 | # 0 new queries answered (0/100000) 12 | 9.133746 Starting consuming inserts... 13 | # 3,928 new queries answered (3928/100000) 14 | # 8,283 new queries answered (12211/100000) 15 | # 7,505 new queries answered (19716/100000) 16 | # 8,485 new queries answered (28201/100000) 17 | # 8,355 new queries answered (36556/100000) 18 | # 8,416 new queries answered (44972/100000) 19 | # 7,713 new queries answered (52685/100000) 20 | # 9,183 new queries answered (61868/100000) 21 | # 8,816 new queries answered (70684/100000) 22 | # 8,321 new queries answered (79005/100000) 23 | # 8,714 new queries answered (87719/100000) 24 | # 11,101 new queries answered (98820/100000) 25 | 21.036702 Cleaning... 26 | # Success: 100000 27 | # Errors: 0 28 | 21.989961 Done. 29 | -------------------------------------------------------------------------------- /benchmarking/prepared-insert-100k-queries/output-prepared-insert-cql-rb-09.log: -------------------------------------------------------------------------------- 1 | 4.0e-06 Connecting to cluster... 2 | 1.841221 Starting producing 100000 inserts... 3 | # Started watcher 4 | # 0 new queries answered (0/100000) 5 | # 0 new queries answered (0/100000) 6 | # 0 new queries answered (0/100000) 7 | # 0 new queries answered (0/100000) 8 | # 0 new queries answered (0/100000) 9 | # 0 new queries answered (0/100000) 10 | # 0 new queries answered (0/100000) 11 | # 0 new queries answered (0/100000) 12 | # 0 new queries answered (0/100000) 13 | 11.029127 Starting consuming inserts... 14 | # 10,281 new queries answered (10281/100000) 15 | # 7,832 new queries answered (18113/100000) 16 | # 7,987 new queries answered (26100/100000) 17 | # 8,261 new queries answered (34361/100000) 18 | # 7,260 new queries answered (41621/100000) 19 | # 7,983 new queries answered (49604/100000) 20 | # 8,243 new queries answered (57847/100000) 21 | # 10,441 new queries answered (68288/100000) 22 | # 8,121 new queries answered (76409/100000) 23 | # 7,997 new queries answered (84406/100000) 24 | # 8,721 new queries answered (93127/100000) 25 | 23.143217 Cleaning... 26 | # Success: 100000 27 | # Errors: 0 28 | 23.702343 Done. 29 | -------------------------------------------------------------------------------- /benchmarking/prepared-insert-100k-queries/output-prepared-insert-cql-rb-10.log: -------------------------------------------------------------------------------- 1 | 4.0e-06 Connecting to cluster... 2 | 0.21483 Starting producing 100000 inserts... 3 | # Started watcher 4 | # 0 new queries answered (0/100000) 5 | # 0 new queries answered (0/100000) 6 | # 0 new queries answered (0/100000) 7 | # 0 new queries answered (0/100000) 8 | # 0 new queries answered (0/100000) 9 | # 0 new queries answered (0/100000) 10 | # 0 new queries answered (0/100000) 11 | # 0 new queries answered (0/100000) 12 | # 0 new queries answered (0/100000) 13 | 9.376905 Starting consuming inserts... 14 | # 10,462 new queries answered (10462/100000) 15 | # 7,157 new queries answered (17619/100000) 16 | # 8,606 new queries answered (26225/100000) 17 | # 8,785 new queries answered (35010/100000) 18 | # 10,256 new queries answered (45266/100000) 19 | # 7,500 new queries answered (52766/100000) 20 | # 8,082 new queries answered (60848/100000) 21 | # 7,965 new queries answered (68813/100000) 22 | # 9,091 new queries answered (77904/100000) 23 | # 10,909 new queries answered (88813/100000) 24 | 20.614069 Cleaning... 25 | # Success: 100000 26 | # Errors: 0 27 | 20.676929 Done. 28 | -------------------------------------------------------------------------------- /benchmarking/prepared-insert-100k-queries/output-prepared-insert-ruby-driver-01.log: -------------------------------------------------------------------------------- 1 | 3.0e-06 Connecting to cluster... 2 | 1.480447 Starting producing 100000 inserts... 3 | # Started watcher 4 | # 0 new queries answered (0/100000) 5 | # 0 new queries answered (0/100000) 6 | # 0 new queries answered (0/100000) 7 | # 0 new queries answered (0/100000) 8 | # 0 new queries answered (0/100000) 9 | # 0 new queries answered (0/100000) 10 | # 0 new queries answered (0/100000) 11 | # 0 new queries answered (0/100000) 12 | # 0 new queries answered (0/100000) 13 | # 0 new queries answered (0/100000) 14 | 11.509648 Starting consuming inserts... 15 | # 4,773 new queries answered (4773/100000) 16 | # 11,074 new queries answered (15847/100000) 17 | # 9,096 new queries answered (24943/100000) 18 | # 8,250 new queries answered (33193/100000) 19 | # 10,765 new queries answered (43958/100000) 20 | # 6,771 new queries answered (50729/100000) 21 | # 10,767 new queries answered (61496/100000) 22 | # 9,252 new queries answered (70748/100000) 23 | # 8,037 new queries answered (78785/100000) 24 | # 9,960 new queries answered (88745/100000) 25 | 23.066614 Cleaning... 26 | # Success: 100000 27 | # Errors: 0 28 | 23.233196 Done. 29 | -------------------------------------------------------------------------------- /benchmarking/prepared-insert-100k-queries/output-prepared-insert-ruby-driver-02.log: -------------------------------------------------------------------------------- 1 | 4.0e-06 Connecting to cluster... 2 | 1.467543 Starting producing 100000 inserts... 3 | # Started watcher 4 | # 0 new queries answered (0/100000) 5 | # 0 new queries answered (0/100000) 6 | # 0 new queries answered (0/100000) 7 | # 0 new queries answered (0/100000) 8 | # 0 new queries answered (0/100000) 9 | # 0 new queries answered (0/100000) 10 | # 0 new queries answered (0/100000) 11 | # 0 new queries answered (0/100000) 12 | # 0 new queries answered (0/100000) 13 | # 0 new queries answered (0/100000) 14 | 11.493992 Starting consuming inserts... 15 | # 11,734 new queries answered (11734/100000) 16 | # 8,403 new queries answered (20137/100000) 17 | # 10,113 new queries answered (30250/100000) 18 | # 9,309 new queries answered (39559/100000) 19 | # 8,747 new queries answered (48306/100000) 20 | # 8,388 new queries answered (56694/100000) 21 | # 8,851 new queries answered (65545/100000) 22 | # 9,024 new queries answered (74569/100000) 23 | # 9,824 new queries answered (84393/100000) 24 | # 9,628 new queries answered (94021/100000) 25 | 23.239546 Cleaning... 26 | # Success: 100000 27 | # Errors: 0 28 | 23.737794 Done. 29 | -------------------------------------------------------------------------------- /benchmarking/prepared-insert-100k-queries/output-prepared-insert-ruby-driver-03.log: -------------------------------------------------------------------------------- 1 | 3.0e-06 Connecting to cluster... 2 | 1.573316 Starting producing 100000 inserts... 3 | # Started watcher 4 | # 0 new queries answered (0/100000) 5 | # 0 new queries answered (0/100000) 6 | # 0 new queries answered (0/100000) 7 | # 0 new queries answered (0/100000) 8 | # 0 new queries answered (0/100000) 9 | # 0 new queries answered (0/100000) 10 | # 0 new queries answered (0/100000) 11 | # 0 new queries answered (0/100000) 12 | # 0 new queries answered (0/100000) 13 | 11.607666 Starting consuming inserts... 14 | # 479 new queries answered (479/100000) 15 | # 11,728 new queries answered (12207/100000) 16 | # 9,924 new queries answered (22131/100000) 17 | # 10,561 new queries answered (32692/100000) 18 | # 10,124 new queries answered (42816/100000) 19 | # 10,365 new queries answered (53181/100000) 20 | # 7,668 new queries answered (60849/100000) 21 | # 9,407 new queries answered (70256/100000) 22 | # 8,931 new queries answered (79187/100000) 23 | # 9,147 new queries answered (88334/100000) 24 | # 9,075 new queries answered (97409/100000) 25 | 23.25355 Cleaning... 26 | # Success: 100000 27 | # Errors: 0 28 | 24.19596 Done. 29 | -------------------------------------------------------------------------------- /benchmarking/prepared-insert-100k-queries/output-prepared-insert-ruby-driver-04.log: -------------------------------------------------------------------------------- 1 | 4.0e-06 Connecting to cluster... 2 | 1.500487 Starting producing 100000 inserts... 3 | # Started watcher 4 | # 0 new queries answered (0/100000) 5 | # 0 new queries answered (0/100000) 6 | # 0 new queries answered (0/100000) 7 | # 0 new queries answered (0/100000) 8 | # 0 new queries answered (0/100000) 9 | # 0 new queries answered (0/100000) 10 | # 0 new queries answered (0/100000) 11 | # 0 new queries answered (0/100000) 12 | # 0 new queries answered (0/100000) 13 | # 0 new queries answered (0/100000) 14 | 11.389597 Starting consuming inserts... 15 | # 14,263 new queries answered (14263/100000) 16 | # 9,594 new queries answered (23857/100000) 17 | # 10,938 new queries answered (34795/100000) 18 | # 10,025 new queries answered (44820/100000) 19 | # 11,109 new queries answered (55929/100000) 20 | # 10,875 new queries answered (66804/100000) 21 | # 9,255 new queries answered (76059/100000) 22 | # 6,246 new queries answered (82305/100000) 23 | # 9,662 new queries answered (91967/100000) 24 | 22.617728 Cleaning... 25 | # Success: 100000 26 | # Errors: 0 27 | 22.910763 Done. 28 | -------------------------------------------------------------------------------- /benchmarking/prepared-insert-100k-queries/output-prepared-insert-ruby-driver-05.log: -------------------------------------------------------------------------------- 1 | 4.0e-06 Connecting to cluster... 2 | 0.075239 Starting producing 100000 inserts... 3 | # Started watcher 4 | # 0 new queries answered (0/100000) 5 | # 0 new queries answered (0/100000) 6 | # 0 new queries answered (0/100000) 7 | # 0 new queries answered (0/100000) 8 | # 0 new queries answered (0/100000) 9 | # 0 new queries answered (0/100000) 10 | # 0 new queries answered (0/100000) 11 | # 0 new queries answered (0/100000) 12 | # 0 new queries answered (0/100000) 13 | 9.987136 Starting consuming inserts... 14 | # 4,102 new queries answered (4102/100000) 15 | # 13,188 new queries answered (17290/100000) 16 | # 7,470 new queries answered (24760/100000) 17 | # 9,177 new queries answered (33937/100000) 18 | # 8,553 new queries answered (42490/100000) 19 | # 8,670 new queries answered (51160/100000) 20 | # 10,824 new queries answered (61984/100000) 21 | # 9,696 new queries answered (71680/100000) 22 | # 10,615 new queries answered (82295/100000) 23 | # 8,141 new queries answered (90436/100000) 24 | # 9,550 new queries answered (99986/100000) 25 | 21.805882 Cleaning... 26 | # Success: 100000 27 | # Errors: 0 28 | 22.807027 Done. 29 | -------------------------------------------------------------------------------- /benchmarking/prepared-insert-100k-queries/output-prepared-insert-ruby-driver-06.log: -------------------------------------------------------------------------------- 1 | 3.0e-06 Connecting to cluster... 2 | 0.081003 Starting producing 100000 inserts... 3 | # Started watcher 4 | # 0 new queries answered (0/100000) 5 | # 0 new queries answered (0/100000) 6 | # 0 new queries answered (0/100000) 7 | # 0 new queries answered (0/100000) 8 | # 0 new queries answered (0/100000) 9 | # 0 new queries answered (0/100000) 10 | # 0 new queries answered (0/100000) 11 | # 0 new queries answered (0/100000) 12 | # 0 new queries answered (0/100000) 13 | 9.819987 Starting consuming inserts... 14 | # 6,349 new queries answered (6349/100000) 15 | # 8,703 new queries answered (15052/100000) 16 | # 5,391 new queries answered (20443/100000) 17 | # 11,451 new queries answered (31894/100000) 18 | # 10,164 new queries answered (42058/100000) 19 | # 5,514 new queries answered (47572/100000) 20 | # 9,207 new queries answered (56779/100000) 21 | # 8,454 new queries answered (65233/100000) 22 | # 10,602 new queries answered (75835/100000) 23 | # 8,451 new queries answered (84286/100000) 24 | # 9,315 new queries answered (93601/100000) 25 | 21.249037 Cleaning... 26 | # Success: 100000 27 | # Errors: 0 28 | 21.708942 Done. 29 | -------------------------------------------------------------------------------- /benchmarking/prepared-insert-100k-queries/output-prepared-insert-ruby-driver-07.log: -------------------------------------------------------------------------------- 1 | 3.0e-06 Connecting to cluster... 2 | 0.097279 Starting producing 100000 inserts... 3 | # Started watcher 4 | # 0 new queries answered (0/100000) 5 | # 0 new queries answered (0/100000) 6 | # 0 new queries answered (0/100000) 7 | # 0 new queries answered (0/100000) 8 | # 0 new queries answered (0/100000) 9 | # 0 new queries answered (0/100000) 10 | # 0 new queries answered (0/100000) 11 | # 0 new queries answered (0/100000) 12 | # 0 new queries answered (0/100000) 13 | # 0 new queries answered (0/100000) 14 | 10.078515 Starting consuming inserts... 15 | # 11,785 new queries answered (11785/100000) 16 | # 9,225 new queries answered (21010/100000) 17 | # 8,701 new queries answered (29711/100000) 18 | # 8,541 new queries answered (38252/100000) 19 | # 8,497 new queries answered (46749/100000) 20 | # 9,777 new queries answered (56526/100000) 21 | # 9,066 new queries answered (65592/100000) 22 | # 10,545 new queries answered (76137/100000) 23 | # 6,772 new queries answered (82909/100000) 24 | # 9,276 new queries answered (92185/100000) 25 | 21.754095 Cleaning... 26 | # Success: 100000 27 | # Errors: 0 28 | 21.888552 Done. 29 | -------------------------------------------------------------------------------- /benchmarking/prepared-insert-100k-queries/output-prepared-insert-ruby-driver-08.log: -------------------------------------------------------------------------------- 1 | 4.0e-06 Connecting to cluster... 2 | 1.514015 Starting producing 100000 inserts... 3 | # Started watcher 4 | # 0 new queries answered (0/100000) 5 | # 0 new queries answered (0/100000) 6 | # 0 new queries answered (0/100000) 7 | # 0 new queries answered (0/100000) 8 | # 0 new queries answered (0/100000) 9 | # 0 new queries answered (0/100000) 10 | # 0 new queries answered (0/100000) 11 | # 0 new queries answered (0/100000) 12 | # 0 new queries answered (0/100000) 13 | 11.047869 Starting consuming inserts... 14 | # 9,220 new queries answered (9220/100000) 15 | # 6,086 new queries answered (15306/100000) 16 | # 10,140 new queries answered (25446/100000) 17 | # 10,773 new queries answered (36219/100000) 18 | # 9,885 new queries answered (46104/100000) 19 | # 9,520 new queries answered (55624/100000) 20 | # 10,560 new queries answered (66184/100000) 21 | # 8,499 new queries answered (74683/100000) 22 | # 6,807 new queries answered (81490/100000) 23 | # 10,053 new queries answered (91543/100000) 24 | 22.360441 Cleaning... 25 | # Success: 100000 26 | # Errors: 0 27 | 22.908038 Done. 28 | -------------------------------------------------------------------------------- /benchmarking/prepared-insert-100k-queries/output-prepared-insert-ruby-driver-09.log: -------------------------------------------------------------------------------- 1 | 3.0e-06 Connecting to cluster... 2 | 0.144968 Starting producing 100000 inserts... 3 | # Started watcher 4 | # 0 new queries answered (0/100000) 5 | # 0 new queries answered (0/100000) 6 | # 0 new queries answered (0/100000) 7 | # 0 new queries answered (0/100000) 8 | # 0 new queries answered (0/100000) 9 | # 0 new queries answered (0/100000) 10 | # 0 new queries answered (0/100000) 11 | # 0 new queries answered (0/100000) 12 | # 0 new queries answered (0/100000) 13 | 10.063854 Starting consuming inserts... 14 | # 7,582 new queries answered (7582/100000) 15 | # 8,154 new queries answered (15736/100000) 16 | # 8,970 new queries answered (24706/100000) 17 | # 9,461 new queries answered (34167/100000) 18 | # 10,406 new queries answered (44573/100000) 19 | # 9,536 new queries answered (54109/100000) 20 | # 10,041 new queries answered (64150/100000) 21 | # 10,155 new queries answered (74305/100000) 22 | # 8,241 new queries answered (82546/100000) 23 | # 9,096 new queries answered (91642/100000) 24 | 21.528717 Cleaning... 25 | # Success: 100000 26 | # Errors: 0 27 | 21.999175 Done. 28 | -------------------------------------------------------------------------------- /benchmarking/prepared-insert-100k-queries/output-prepared-insert-ruby-driver-10.log: -------------------------------------------------------------------------------- 1 | 4.0e-06 Connecting to cluster... 2 | 0.070308 Starting producing 100000 inserts... 3 | # Started watcher 4 | # 0 new queries answered (0/100000) 5 | # 0 new queries answered (0/100000) 6 | # 0 new queries answered (0/100000) 7 | # 0 new queries answered (0/100000) 8 | # 0 new queries answered (0/100000) 9 | # 0 new queries answered (0/100000) 10 | # 0 new queries answered (0/100000) 11 | # 0 new queries answered (0/100000) 12 | # 0 new queries answered (0/100000) 13 | # 0 new queries answered (0/100000) 14 | 10.086913 Starting consuming inserts... 15 | # 9,919 new queries answered (9919/100000) 16 | # 6,824 new queries answered (16743/100000) 17 | # 8,871 new queries answered (25614/100000) 18 | # 7,954 new queries answered (33568/100000) 19 | # 9,848 new queries answered (43416/100000) 20 | # 9,884 new queries answered (53300/100000) 21 | # 9,914 new queries answered (63214/100000) 22 | # 8,412 new queries answered (71626/100000) 23 | # 9,111 new queries answered (80737/100000) 24 | # 8,316 new queries answered (89053/100000) 25 | 21.826428 Cleaning... 26 | # Success: 100000 27 | # Errors: 0 28 | 21.972588 Done. 29 | -------------------------------------------------------------------------------- /benchmarking/prepared-select-100k-queries/README.md: -------------------------------------------------------------------------------- 1 | # Results 2 | The tests were ran on an iMac 2013 (Intel Core i7 3.5 GHz, 16 GB RAM) on a 3 | Cassandra (2.0.7) cluster of 3 nodes created using CCM 4 | 5 | The test contained only prepared select statements. 6 | 7 | -------------------------------------------------------------------------------- /benchmarking/prepared-select-100k-queries/output-prepared-select-cql-rb-01.log: -------------------------------------------------------------------------------- 1 | 2.0e-06 Connecting to cluster... 2 | 0.026234 Starting producing 100000 selects... 3 | # Started watcher 4 | # 0 new queries answered (0/100000) 5 | # 0 new queries answered (0/100000) 6 | # 0 new queries answered (0/100000) 7 | # 0 new queries answered (0/100000) 8 | # 0 new queries answered (0/100000) 9 | 5.323713 Starting consuming selects... 10 | # 3,892 new queries answered (3892/100000) 11 | # 4,661 new queries answered (8553/100000) 12 | # 5,341 new queries answered (13894/100000) 13 | # 5,351 new queries answered (19245/100000) 14 | # 5,146 new queries answered (24391/100000) 15 | # 5,339 new queries answered (29730/100000) 16 | # 5,150 new queries answered (34880/100000) 17 | # 5,301 new queries answered (40181/100000) 18 | # 5,993 new queries answered (46174/100000) 19 | # 5,315 new queries answered (51489/100000) 20 | # 5,631 new queries answered (57120/100000) 21 | # 5,633 new queries answered (62753/100000) 22 | # 6,474 new queries answered (69227/100000) 23 | # 6,334 new queries answered (75561/100000) 24 | # 5,922 new queries answered (81483/100000) 25 | # 6,608 new queries answered (88091/100000) 26 | # 7,204 new queries answered (95295/100000) 27 | 22.304355 Cleaning... 28 | # Success: 100000 29 | # Errors: 0 30 | 22.777087 Done. 31 | -------------------------------------------------------------------------------- /benchmarking/prepared-select-100k-queries/output-prepared-select-cql-rb-02.log: -------------------------------------------------------------------------------- 1 | 2.0e-06 Connecting to cluster... 2 | 0.014732 Starting producing 100000 selects... 3 | # Started watcher 4 | # 0 new queries answered (0/100000) 5 | # 0 new queries answered (0/100000) 6 | # 0 new queries answered (0/100000) 7 | # 0 new queries answered (0/100000) 8 | # 0 new queries answered (0/100000) 9 | 5.472622 Starting consuming selects... 10 | # 4,854 new queries answered (4854/100000) 11 | # 5,157 new queries answered (10011/100000) 12 | # 4,789 new queries answered (14800/100000) 13 | # 5,512 new queries answered (20312/100000) 14 | # 5,443 new queries answered (25755/100000) 15 | # 5,370 new queries answered (31125/100000) 16 | # 5,495 new queries answered (36620/100000) 17 | # 5,812 new queries answered (42432/100000) 18 | # 5,595 new queries answered (48027/100000) 19 | # 5,073 new queries answered (53100/100000) 20 | # 5,979 new queries answered (59079/100000) 21 | # 6,102 new queries answered (65181/100000) 22 | # 6,100 new queries answered (71281/100000) 23 | # 6,281 new queries answered (77562/100000) 24 | # 6,330 new queries answered (83892/100000) 25 | # 6,309 new queries answered (90201/100000) 26 | # 7,295 new queries answered (97496/100000) 27 | 22.237962 Cleaning... 28 | # Success: 100000 29 | # Errors: 0 30 | 23.010636 Done. 31 | -------------------------------------------------------------------------------- /benchmarking/prepared-select-100k-queries/output-prepared-select-cql-rb-03.log: -------------------------------------------------------------------------------- 1 | 1.0e-06 Connecting to cluster... 2 | 0.014724 Starting producing 100000 selects... 3 | # Started watcher 4 | # 0 new queries answered (0/100000) 5 | # 0 new queries answered (0/100000) 6 | # 0 new queries answered (0/100000) 7 | # 0 new queries answered (0/100000) 8 | # 0 new queries answered (0/100000) 9 | 5.234855 Starting consuming selects... 10 | # 3,418 new queries answered (3418/100000) 11 | # 5,052 new queries answered (8470/100000) 12 | # 6,145 new queries answered (14615/100000) 13 | # 6,470 new queries answered (21085/100000) 14 | # 6,645 new queries answered (27730/100000) 15 | # 5,870 new queries answered (33600/100000) 16 | # 5,752 new queries answered (39352/100000) 17 | # 6,095 new queries answered (45447/100000) 18 | # 5,981 new queries answered (51428/100000) 19 | # 5,754 new queries answered (57182/100000) 20 | # 6,188 new queries answered (63370/100000) 21 | # 6,274 new queries answered (69644/100000) 22 | # 6,068 new queries answered (75712/100000) 23 | # 6,614 new queries answered (82326/100000) 24 | # 6,077 new queries answered (88403/100000) 25 | # 5,574 new queries answered (93977/100000) 26 | 21.776156 Cleaning... 27 | # Success: 100000 28 | # Errors: 0 29 | 22.017188 Done. 30 | -------------------------------------------------------------------------------- /benchmarking/prepared-select-100k-queries/output-prepared-select-cql-rb-04.log: -------------------------------------------------------------------------------- 1 | 2.0e-06 Connecting to cluster... 2 | 0.015042 Starting producing 100000 selects... 3 | # Started watcher 4 | # 0 new queries answered (0/100000) 5 | # 0 new queries answered (0/100000) 6 | # 0 new queries answered (0/100000) 7 | # 0 new queries answered (0/100000) 8 | # 0 new queries answered (0/100000) 9 | 5.25453 Starting consuming selects... 10 | # 4,174 new queries answered (4174/100000) 11 | # 5,509 new queries answered (9683/100000) 12 | # 5,111 new queries answered (14794/100000) 13 | # 6,036 new queries answered (20830/100000) 14 | # 5,146 new queries answered (25976/100000) 15 | # 5,474 new queries answered (31450/100000) 16 | # 5,232 new queries answered (36682/100000) 17 | # 5,697 new queries answered (42379/100000) 18 | # 5,495 new queries answered (47874/100000) 19 | # 6,221 new queries answered (54095/100000) 20 | # 6,286 new queries answered (60381/100000) 21 | # 6,152 new queries answered (66533/100000) 22 | # 6,608 new queries answered (73141/100000) 23 | # 6,314 new queries answered (79455/100000) 24 | # 6,532 new queries answered (85987/100000) 25 | # 6,005 new queries answered (91992/100000) 26 | # 6,519 new queries answered (98511/100000) 27 | 22.070272 Cleaning... 28 | # Success: 100000 29 | # Errors: 0 30 | 23.021818 Done. 31 | -------------------------------------------------------------------------------- /benchmarking/prepared-select-100k-queries/output-prepared-select-cql-rb-05.log: -------------------------------------------------------------------------------- 1 | 1.0e-06 Connecting to cluster... 2 | 0.014893 Starting producing 100000 selects... 3 | # Started watcher 4 | # 0 new queries answered (0/100000) 5 | # 0 new queries answered (0/100000) 6 | # 0 new queries answered (0/100000) 7 | # 0 new queries answered (0/100000) 8 | # 0 new queries answered (0/100000) 9 | 5.200009 Starting consuming selects... 10 | # 4,468 new queries answered (4468/100000) 11 | # 5,347 new queries answered (9815/100000) 12 | # 5,416 new queries answered (15231/100000) 13 | # 5,419 new queries answered (20650/100000) 14 | # 5,799 new queries answered (26449/100000) 15 | # 5,538 new queries answered (31987/100000) 16 | # 5,450 new queries answered (37437/100000) 17 | # 5,598 new queries answered (43035/100000) 18 | # 5,986 new queries answered (49021/100000) 19 | # 5,049 new queries answered (54070/100000) 20 | # 5,792 new queries answered (59862/100000) 21 | # 5,920 new queries answered (65782/100000) 22 | # 6,518 new queries answered (72300/100000) 23 | # 5,563 new queries answered (77863/100000) 24 | # 6,722 new queries answered (84585/100000) 25 | # 6,760 new queries answered (91345/100000) 26 | # 7,506 new queries answered (98851/100000) 27 | 21.915977 Cleaning... 28 | # Success: 100000 29 | # Errors: 0 30 | 22.867395 Done. 31 | -------------------------------------------------------------------------------- /benchmarking/prepared-select-100k-queries/output-prepared-select-cql-rb-06.log: -------------------------------------------------------------------------------- 1 | 2.0e-06 Connecting to cluster... 2 | 0.014405 Starting producing 100000 selects... 3 | # Started watcher 4 | # 0 new queries answered (0/100000) 5 | # 0 new queries answered (0/100000) 6 | # 0 new queries answered (0/100000) 7 | # 0 new queries answered (0/100000) 8 | # 0 new queries answered (0/100000) 9 | 5.224176 Starting consuming selects... 10 | # 3,828 new queries answered (3828/100000) 11 | # 5,661 new queries answered (9489/100000) 12 | # 5,370 new queries answered (14859/100000) 13 | # 5,662 new queries answered (20521/100000) 14 | # 5,359 new queries answered (25880/100000) 15 | # 5,391 new queries answered (31271/100000) 16 | # 5,547 new queries answered (36818/100000) 17 | # 6,003 new queries answered (42821/100000) 18 | # 5,578 new queries answered (48399/100000) 19 | # 5,795 new queries answered (54194/100000) 20 | # 6,195 new queries answered (60389/100000) 21 | # 5,999 new queries answered (66388/100000) 22 | # 5,429 new queries answered (71817/100000) 23 | # 5,935 new queries answered (77752/100000) 24 | # 6,423 new queries answered (84175/100000) 25 | # 6,669 new queries answered (90844/100000) 26 | # 6,498 new queries answered (97342/100000) 27 | 22.005497 Cleaning... 28 | # Success: 100000 29 | # Errors: 0 30 | 22.893077 Done. 31 | -------------------------------------------------------------------------------- /benchmarking/prepared-select-100k-queries/output-prepared-select-cql-rb-07.log: -------------------------------------------------------------------------------- 1 | 1.0e-06 Connecting to cluster... 2 | 0.014945 Starting producing 100000 selects... 3 | # Started watcher 4 | # 0 new queries answered (0/100000) 5 | # 0 new queries answered (0/100000) 6 | # 0 new queries answered (0/100000) 7 | # 0 new queries answered (0/100000) 8 | # 0 new queries answered (0/100000) 9 | 5.259773 Starting consuming selects... 10 | # 2,925 new queries answered (2925/100000) 11 | # 5,207 new queries answered (8132/100000) 12 | # 5,694 new queries answered (13826/100000) 13 | # 4,719 new queries answered (18545/100000) 14 | # 5,579 new queries answered (24124/100000) 15 | # 5,359 new queries answered (29483/100000) 16 | # 5,190 new queries answered (34673/100000) 17 | # 5,417 new queries answered (40090/100000) 18 | # 5,376 new queries answered (45466/100000) 19 | # 5,949 new queries answered (51415/100000) 20 | # 5,730 new queries answered (57145/100000) 21 | # 4,717 new queries answered (61862/100000) 22 | # 6,233 new queries answered (68095/100000) 23 | # 6,334 new queries answered (74429/100000) 24 | # 6,569 new queries answered (80998/100000) 25 | # 6,165 new queries answered (87163/100000) 26 | # 5,986 new queries answered (93149/100000) 27 | 22.67374 Cleaning... 28 | # Success: 100000 29 | # Errors: 0 30 | 22.927898 Done. 31 | -------------------------------------------------------------------------------- /benchmarking/prepared-select-100k-queries/output-prepared-select-cql-rb-08.log: -------------------------------------------------------------------------------- 1 | 2.0e-06 Connecting to cluster... 2 | 0.014715 Starting producing 100000 selects... 3 | # Started watcher 4 | # 0 new queries answered (0/100000) 5 | # 0 new queries answered (0/100000) 6 | # 0 new queries answered (0/100000) 7 | # 0 new queries answered (0/100000) 8 | # 0 new queries answered (0/100000) 9 | 5.441682 Starting consuming selects... 10 | # 4,459 new queries answered (4459/100000) 11 | # 5,281 new queries answered (9740/100000) 12 | # 4,788 new queries answered (14528/100000) 13 | # 5,856 new queries answered (20384/100000) 14 | # 5,247 new queries answered (25631/100000) 15 | # 4,317 new queries answered (29948/100000) 16 | # 5,745 new queries answered (35693/100000) 17 | # 5,966 new queries answered (41659/100000) 18 | # 5,450 new queries answered (47109/100000) 19 | # 6,198 new queries answered (53307/100000) 20 | # 6,369 new queries answered (59676/100000) 21 | # 6,097 new queries answered (65773/100000) 22 | # 6,400 new queries answered (72173/100000) 23 | # 6,360 new queries answered (78533/100000) 24 | # 6,365 new queries answered (84898/100000) 25 | # 6,909 new queries answered (91807/100000) 26 | # 7,431 new queries answered (99238/100000) 27 | 22.061745 Cleaning... 28 | # Success: 100000 29 | # Errors: 0 30 | 23.037486 Done. 31 | -------------------------------------------------------------------------------- /benchmarking/prepared-select-100k-queries/output-prepared-select-cql-rb-09.log: -------------------------------------------------------------------------------- 1 | 2.0e-06 Connecting to cluster... 2 | 0.018944 Starting producing 100000 selects... 3 | # Started watcher 4 | # 0 new queries answered (0/100000) 5 | # 0 new queries answered (0/100000) 6 | # 0 new queries answered (0/100000) 7 | # 0 new queries answered (0/100000) 8 | # 0 new queries answered (0/100000) 9 | 5.332769 Starting consuming selects... 10 | # 4,412 new queries answered (4412/100000) 11 | # 5,321 new queries answered (9733/100000) 12 | # 5,571 new queries answered (15304/100000) 13 | # 5,092 new queries answered (20396/100000) 14 | # 5,549 new queries answered (25945/100000) 15 | # 5,491 new queries answered (31436/100000) 16 | # 5,688 new queries answered (37124/100000) 17 | # 5,526 new queries answered (42650/100000) 18 | # 5,900 new queries answered (48550/100000) 19 | # 5,662 new queries answered (54212/100000) 20 | # 4,482 new queries answered (58694/100000) 21 | # 6,181 new queries answered (64875/100000) 22 | # 5,513 new queries answered (70388/100000) 23 | # 6,363 new queries answered (76751/100000) 24 | # 6,431 new queries answered (83182/100000) 25 | # 6,194 new queries answered (89376/100000) 26 | # 6,854 new queries answered (96230/100000) 27 | 22.180589 Cleaning... 28 | # Success: 100000 29 | # Errors: 0 30 | 22.864479 Done. 31 | -------------------------------------------------------------------------------- /benchmarking/prepared-select-100k-queries/output-prepared-select-cql-rb-10.log: -------------------------------------------------------------------------------- 1 | 2.0e-06 Connecting to cluster... 2 | 0.014602 Starting producing 100000 selects... 3 | # Started watcher 4 | # 0 new queries answered (0/100000) 5 | # 0 new queries answered (0/100000) 6 | # 0 new queries answered (0/100000) 7 | # 0 new queries answered (0/100000) 8 | # 0 new queries answered (0/100000) 9 | 5.236094 Starting consuming selects... 10 | # 3,217 new queries answered (3217/100000) 11 | # 5,318 new queries answered (8535/100000) 12 | # 5,508 new queries answered (14043/100000) 13 | # 5,134 new queries answered (19177/100000) 14 | # 5,390 new queries answered (24567/100000) 15 | # 5,807 new queries answered (30374/100000) 16 | # 5,598 new queries answered (35972/100000) 17 | # 5,420 new queries answered (41392/100000) 18 | # 5,344 new queries answered (46736/100000) 19 | # 5,698 new queries answered (52434/100000) 20 | # 6,522 new queries answered (58956/100000) 21 | # 5,732 new queries answered (64688/100000) 22 | # 6,477 new queries answered (71165/100000) 23 | # 6,413 new queries answered (77578/100000) 24 | # 5,776 new queries answered (83354/100000) 25 | # 6,439 new queries answered (89793/100000) 26 | # 5,950 new queries answered (95743/100000) 27 | 21.831146 Cleaning... 28 | # Success: 100000 29 | # Errors: 0 30 | 22.456968 Done. 31 | -------------------------------------------------------------------------------- /benchmarking/prepared-select-100k-queries/output-prepared-select-ruby-driver-01.log: -------------------------------------------------------------------------------- 1 | 1.0e-06 Connecting to cluster... 2 | 0.01741 Executing 100000 selects... 3 | # Started watcher 4 | # 0 new queries answered (0/100000) 5 | # 0 new queries answered (0/100000) 6 | # 0 new queries answered (0/100000) 7 | # 0 new queries answered (0/100000) 8 | # 0 new queries answered (0/100000) 9 | # 0 new queries answered (0/100000) 10 | 6.313237 Starting consuming selects... 11 | # 0 new queries answered (0/100000) 12 | # 5,463 new queries answered (5463/100000) 13 | # 11,004 new queries answered (16467/100000) 14 | # 8,509 new queries answered (24976/100000) 15 | # 12,623 new queries answered (37599/100000) 16 | # 7,044 new queries answered (44643/100000) 17 | # 20,454 new queries answered (65097/100000) 18 | # 9,508 new queries answered (74605/100000) 19 | # 12,342 new queries answered (86947/100000) 20 | # 12,168 new queries answered (99115/100000) 21 | 16.267103 Cleaning... 22 | # Success: 100000 23 | # Errors: 0 24 | 17.257052 Done. 25 | -------------------------------------------------------------------------------- /benchmarking/prepared-select-100k-queries/output-prepared-select-ruby-driver-02.log: -------------------------------------------------------------------------------- 1 | 1.0e-06 Connecting to cluster... 2 | 0.016659 Executing 100000 selects... 3 | # Started watcher 4 | # 0 new queries answered (0/100000) 5 | # 0 new queries answered (0/100000) 6 | # 0 new queries answered (0/100000) 7 | # 0 new queries answered (0/100000) 8 | # 0 new queries answered (0/100000) 9 | # 0 new queries answered (0/100000) 10 | 6.264953 Starting consuming selects... 11 | # 470 new queries answered (470/100000) 12 | # 8,679 new queries answered (9149/100000) 13 | # 12,208 new queries answered (21357/100000) 14 | # 9,141 new queries answered (30498/100000) 15 | # 8,967 new queries answered (39465/100000) 16 | # 13,373 new queries answered (52838/100000) 17 | # 10,499 new queries answered (63337/100000) 18 | # 8,985 new queries answered (72322/100000) 19 | # 11,673 new queries answered (83995/100000) 20 | # 12,042 new queries answered (96037/100000) 21 | 16.435642 Cleaning... 22 | # Success: 100000 23 | # Errors: 0 24 | 17.296741 Done. 25 | -------------------------------------------------------------------------------- /benchmarking/prepared-select-100k-queries/output-prepared-select-ruby-driver-03.log: -------------------------------------------------------------------------------- 1 | 2.0e-06 Connecting to cluster... 2 | 0.021407 Executing 100000 selects... 3 | # Started watcher 4 | # 0 new queries answered (0/100000) 5 | # 0 new queries answered (0/100000) 6 | # 0 new queries answered (0/100000) 7 | # 0 new queries answered (0/100000) 8 | # 0 new queries answered (0/100000) 9 | # 0 new queries answered (0/100000) 10 | 6.167518 Starting consuming selects... 11 | # 4,097 new queries answered (4097/100000) 12 | # 8,873 new queries answered (12970/100000) 13 | # 10,949 new queries answered (23919/100000) 14 | # 7,614 new queries answered (31533/100000) 15 | # 13,332 new queries answered (44865/100000) 16 | # 8,382 new queries answered (53247/100000) 17 | # 10,950 new queries answered (64197/100000) 18 | # 9,786 new queries answered (73983/100000) 19 | # 12,594 new queries answered (86577/100000) 20 | # 9,903 new queries answered (96480/100000) 21 | 16.413358 Cleaning... 22 | # Success: 100000 23 | # Errors: 0 24 | 17.223903 Done. 25 | -------------------------------------------------------------------------------- /benchmarking/prepared-select-100k-queries/output-prepared-select-ruby-driver-04.log: -------------------------------------------------------------------------------- 1 | 1.0e-06 Connecting to cluster... 2 | 0.018104 Executing 100000 selects... 3 | # Started watcher 4 | # 0 new queries answered (0/100000) 5 | # 0 new queries answered (0/100000) 6 | # 0 new queries answered (0/100000) 7 | # 0 new queries answered (0/100000) 8 | # 0 new queries answered (0/100000) 9 | # 0 new queries answered (0/100000) 10 | 6.266126 Starting consuming selects... 11 | # 493 new queries answered (493/100000) 12 | # 11,492 new queries answered (11985/100000) 13 | # 10,197 new queries answered (22182/100000) 14 | # 8,418 new queries answered (30600/100000) 15 | # 10,665 new queries answered (41265/100000) 16 | # 8,373 new queries answered (49638/100000) 17 | # 10,578 new queries answered (60216/100000) 18 | # 8,572 new queries answered (68788/100000) 19 | # 10,799 new queries answered (79587/100000) 20 | # 10,975 new queries answered (90562/100000) 21 | 16.562563 Cleaning... 22 | # Success: 100000 23 | # Errors: 0 24 | 16.870716 Done. 25 | -------------------------------------------------------------------------------- /benchmarking/prepared-select-100k-queries/output-prepared-select-ruby-driver-05.log: -------------------------------------------------------------------------------- 1 | 1.0e-06 Connecting to cluster... 2 | 0.016744 Executing 100000 selects... 3 | # Started watcher 4 | # 0 new queries answered (0/100000) 5 | # 0 new queries answered (0/100000) 6 | # 0 new queries answered (0/100000) 7 | # 0 new queries answered (0/100000) 8 | # 0 new queries answered (0/100000) 9 | # 0 new queries answered (0/100000) 10 | 6.203069 Starting consuming selects... 11 | # 2,127 new queries answered (2127/100000) 12 | # 9,867 new queries answered (11994/100000) 13 | # 7,080 new queries answered (19074/100000) 14 | # 7,722 new queries answered (26796/100000) 15 | # 14,016 new queries answered (40812/100000) 16 | # 10,491 new queries answered (51303/100000) 17 | # 9,768 new queries answered (61071/100000) 18 | # 11,727 new queries answered (72798/100000) 19 | # 9,873 new queries answered (82671/100000) 20 | # 12,348 new queries answered (95019/100000) 21 | 16.07974 Cleaning... 22 | # Success: 100000 23 | # Errors: 0 24 | 16.756764 Done. 25 | -------------------------------------------------------------------------------- /benchmarking/prepared-select-100k-queries/output-prepared-select-ruby-driver-06.log: -------------------------------------------------------------------------------- 1 | 1.0e-06 Connecting to cluster... 2 | 0.017549 Executing 100000 selects... 3 | # Started watcher 4 | # 0 new queries answered (0/100000) 5 | # 0 new queries answered (0/100000) 6 | # 0 new queries answered (0/100000) 7 | # 0 new queries answered (0/100000) 8 | # 0 new queries answered (0/100000) 9 | # 0 new queries answered (0/100000) 10 | 6.135845 Starting consuming selects... 11 | # 4,482 new queries answered (4482/100000) 12 | # 9,312 new queries answered (13794/100000) 13 | # 4,179 new queries answered (17973/100000) 14 | # 19,185 new queries answered (37158/100000) 15 | # 8,490 new queries answered (45648/100000) 16 | # 11,415 new queries answered (57063/100000) 17 | # 11,190 new queries answered (68253/100000) 18 | # 11,571 new queries answered (79824/100000) 19 | # 11,892 new queries answered (91716/100000) 20 | 16.109492 Cleaning... 21 | # Success: 100000 22 | # Errors: 0 23 | 16.474379 Done. 24 | -------------------------------------------------------------------------------- /benchmarking/prepared-select-100k-queries/output-prepared-select-ruby-driver-07.log: -------------------------------------------------------------------------------- 1 | 1.0e-06 Connecting to cluster... 2 | 0.017158 Executing 100000 selects... 3 | # Started watcher 4 | # 0 new queries answered (0/100000) 5 | # 0 new queries answered (0/100000) 6 | # 0 new queries answered (0/100000) 7 | # 0 new queries answered (0/100000) 8 | # 0 new queries answered (0/100000) 9 | # 0 new queries answered (0/100000) 10 | 6.206834 Starting consuming selects... 11 | # 601 new queries answered (601/100000) 12 | # 9,315 new queries answered (9916/100000) 13 | # 7,322 new queries answered (17238/100000) 14 | # 13,476 new queries answered (30714/100000) 15 | # 9,225 new queries answered (39939/100000) 16 | # 10,782 new queries answered (50721/100000) 17 | # 11,130 new queries answered (61851/100000) 18 | # 8,925 new queries answered (70776/100000) 19 | # 10,005 new queries answered (80781/100000) 20 | # 10,968 new queries answered (91749/100000) 21 | 16.426492 Cleaning... 22 | # Success: 100000 23 | # Errors: 0 24 | 16.988439 Done. 25 | -------------------------------------------------------------------------------- /benchmarking/prepared-select-100k-queries/output-prepared-select-ruby-driver-08.log: -------------------------------------------------------------------------------- 1 | 1.0e-06 Connecting to cluster... 2 | 0.017266 Executing 100000 selects... 3 | # Started watcher 4 | # 0 new queries answered (0/100000) 5 | # 0 new queries answered (0/100000) 6 | # 0 new queries answered (0/100000) 7 | # 0 new queries answered (0/100000) 8 | # 0 new queries answered (0/100000) 9 | # 0 new queries answered (0/100000) 10 | 6.153886 Starting consuming selects... 11 | # 5,072 new queries answered (5072/100000) 12 | # 12,613 new queries answered (17685/100000) 13 | # 9,435 new queries answered (27120/100000) 14 | # 10,074 new queries answered (37194/100000) 15 | # 8,163 new queries answered (45357/100000) 16 | # 11,172 new queries answered (56529/100000) 17 | # 10,539 new queries answered (67068/100000) 18 | # 11,373 new queries answered (78441/100000) 19 | # 10,896 new queries answered (89337/100000) 20 | 16.322572 Cleaning... 21 | # Success: 100000 22 | # Errors: 0 23 | 16.59575 Done. 24 | -------------------------------------------------------------------------------- /benchmarking/prepared-select-100k-queries/output-prepared-select-ruby-driver-09.log: -------------------------------------------------------------------------------- 1 | 1.0e-06 Connecting to cluster... 2 | 0.017407 Executing 100000 selects... 3 | # Started watcher 4 | # 0 new queries answered (0/100000) 5 | # 0 new queries answered (0/100000) 6 | # 0 new queries answered (0/100000) 7 | # 0 new queries answered (0/100000) 8 | # 0 new queries answered (0/100000) 9 | # 0 new queries answered (0/100000) 10 | 5.985896 Starting consuming selects... 11 | # 5,215 new queries answered (5215/100000) 12 | # 8,334 new queries answered (13549/100000) 13 | # 9,362 new queries answered (22911/100000) 14 | # 6,948 new queries answered (29859/100000) 15 | # 19,125 new queries answered (48984/100000) 16 | # 8,766 new queries answered (57750/100000) 17 | # 11,214 new queries answered (68964/100000) 18 | # 12,405 new queries answered (81369/100000) 19 | # 12,189 new queries answered (93558/100000) 20 | 16.115231 Cleaning... 21 | # Success: 100000 22 | # Errors: 0 23 | 16.702515 Done. 24 | -------------------------------------------------------------------------------- /benchmarking/prepared-select-100k-queries/output-prepared-select-ruby-driver-10.log: -------------------------------------------------------------------------------- 1 | 1.0e-06 Connecting to cluster... 2 | 0.01669 Executing 100000 selects... 3 | # Started watcher 4 | # 0 new queries answered (0/100000) 5 | # 0 new queries answered (0/100000) 6 | # 0 new queries answered (0/100000) 7 | # 0 new queries answered (0/100000) 8 | # 0 new queries answered (0/100000) 9 | # 0 new queries answered (0/100000) 10 | 6.167424 Starting consuming selects... 11 | # 4,491 new queries answered (4491/100000) 12 | # 8,637 new queries answered (13128/100000) 13 | # 7,986 new queries answered (21114/100000) 14 | # 7,032 new queries answered (28146/100000) 15 | # 14,844 new queries answered (42990/100000) 16 | # 8,361 new queries answered (51351/100000) 17 | # 11,373 new queries answered (62724/100000) 18 | # 8,557 new queries answered (71281/100000) 19 | # 10,712 new queries answered (81993/100000) 20 | # 10,788 new queries answered (92781/100000) 21 | 16.493248 Cleaning... 22 | # Success: 100000 23 | # Errors: 0 24 | 17.018334 Done. 25 | -------------------------------------------------------------------------------- /benchmarking/run-benchmark.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | # Script defaults : 10 measurements of 10k unprepared selects 4 | iterations=10 5 | queries=$((1000 * 10)) 6 | help=false 7 | 8 | while getopts "hln:" opt; do 9 | case $opt in 10 | l) queries=$((1000 * 100)) ;; 11 | n) queries=$OPTARG ;; 12 | :) echo "Option -$OPTARG requires an argument." >&2 ; help=true ;; 13 | *) help=true ;; # Wrong argument == print help 14 | esac 15 | done 16 | 17 | # Print help if asked 18 | if [ $help = true ] ; then 19 | echo "Usage: $0 [option...] file... 20 | Run 10 times one or more benchmark Ruby file(s). 21 | 22 | Options: 23 | -h Print this help 24 | -n Execute queries in each run (default 10.000) 25 | -l Equivalent to -n 100000 26 | 27 | Arguments: 28 | The list of files (ruby benchmarks) to execute" \ 29 | >&2 30 | exit 31 | fi 32 | shift $((OPTIND-1)) 33 | 34 | echo "# Will run $iterations times $queries queries from : $@" >&2 35 | 36 | output_dir=`dirname $0`/`date '+%Y-%m-%dT%H:%M'` 37 | mkdir $output_dir 38 | 39 | for iteration in `seq $iterations` 40 | do 41 | for file in $@ 42 | do 43 | test_name=${file%.*} 44 | n=`printf '%02d' $iteration` 45 | ruby -rbundler/setup $file $queries > $output_dir/output-$test_name-$n.log & 46 | ruby_pid=$! 47 | top -c d -stats command,pid,cpu,threads,csw -pid $ruby_pid -l 0 > $output_dir/top-$test_name-$n.log & 48 | top_pid=$! 49 | wait $ruby_pid 50 | kill $top_pid 51 | done 52 | done 53 | 54 | -------------------------------------------------------------------------------- /benchmarking/sync-prepared-select-ruby-driver.rb: -------------------------------------------------------------------------------- 1 | # encoding: utf-8 2 | 3 | #-- 4 | # Copyright DataStax, Inc. 5 | # 6 | # Licensed under the Apache License, Version 2.0 (the "License"); 7 | # you may not use this file except in compliance with the License. 8 | # You may obtain a copy of the License at 9 | # 10 | # http://www.apache.org/licenses/LICENSE-2.0 11 | # 12 | # Unless required by applicable law or agreed to in writing, software 13 | # distributed under the License is distributed on an "AS IS" BASIS, 14 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 15 | # See the License for the specific language governing permissions and 16 | # limitations under the License. 17 | #++ 18 | 19 | require_relative 'benchmark' 20 | require 'cassandra' 21 | 22 | class PreparedSelectRubyDriver < Benchmark 23 | def connect_to_cluster 24 | puts "#{Time.now - start} Connecting to cluster..." 25 | @cluster = Cassandra.cluster(hosts: ['127.0.0.1']) 26 | @session = @cluster.connect("simplex") 27 | @statement = @session.prepare('SELECT COUNT(*) FROM songs') 28 | end 29 | 30 | def target 31 | puts "#{Time.now - start} Executing #{@iterations} selects..." 32 | @iterations.times.map do 33 | begin 34 | @session.execute(@statement) 35 | increment_success 36 | rescue => e 37 | puts "#{e.class.name}: #{e.message}" 38 | increment_errors 39 | end 40 | end 41 | end 42 | end 43 | 44 | PreparedSelectRubyDriver.new.run ARGV[0] 45 | -------------------------------------------------------------------------------- /benchmarking/sync-unprepared-select-cql-rb.rb: -------------------------------------------------------------------------------- 1 | # encoding: utf-8 2 | 3 | #-- 4 | # Copyright DataStax, Inc. 5 | # 6 | # Licensed under the Apache License, Version 2.0 (the "License"); 7 | # you may not use this file except in compliance with the License. 8 | # You may obtain a copy of the License at 9 | # 10 | # http://www.apache.org/licenses/LICENSE-2.0 11 | # 12 | # Unless required by applicable law or agreed to in writing, software 13 | # distributed under the License is distributed on an "AS IS" BASIS, 14 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 15 | # See the License for the specific language governing permissions and 16 | # limitations under the License. 17 | #++ 18 | 19 | require_relative 'benchmark' 20 | require 'cassandra' 21 | 22 | class UnpreparedSelectCqlRb < Benchmark 23 | def connect_to_cluster 24 | puts "#{Time.now - start} Connecting to cluster..." 25 | @client = Cassandra::Client::SynchronousClient.new(Cassandra::Client::AsynchronousClient.new(hosts: ['127.0.0.1'])) 26 | @client.connect 27 | @client.use('simplex') 28 | at_exit { @client.close } 29 | end 30 | 31 | def target 32 | puts "#{Time.now - start} Executing #{@iterations} selects..." 33 | futures = @iterations.times.map do 34 | begin 35 | @client.execute("SELECT COUNT(*) FROM songs") 36 | increment_success 37 | rescue => e 38 | puts "#{e.class.name}: #{e.message}" 39 | increment_errors 40 | end 41 | end 42 | end 43 | end 44 | 45 | UnpreparedSelectCqlRb.new.run ARGV[0] 46 | -------------------------------------------------------------------------------- /benchmarking/sync-unprepared-select-ruby-driver.rb: -------------------------------------------------------------------------------- 1 | # encoding: utf-8 2 | 3 | #-- 4 | # Copyright DataStax, Inc. 5 | # 6 | # Licensed under the Apache License, Version 2.0 (the "License"); 7 | # you may not use this file except in compliance with the License. 8 | # You may obtain a copy of the License at 9 | # 10 | # http://www.apache.org/licenses/LICENSE-2.0 11 | # 12 | # Unless required by applicable law or agreed to in writing, software 13 | # distributed under the License is distributed on an "AS IS" BASIS, 14 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 15 | # See the License for the specific language governing permissions and 16 | # limitations under the License. 17 | #++ 18 | 19 | require_relative 'benchmark' 20 | require 'cassandra' 21 | 22 | class UnpreparedSelectRubyDriver < Benchmark 23 | def connect_to_cluster 24 | puts "#{Time.now - start} Connecting to cluster..." 25 | @cluster = Cassandra.cluster(hosts: ['127.0.0.1']) 26 | @session = @cluster.connect("simplex") 27 | end 28 | 29 | def target 30 | puts "#{Time.now - start} Executing #{@iterations} selects..." 31 | statement = Cassandra::Statements::Simple.new("SELECT COUNT(*) FROM songs") 32 | @iterations.times.map do 33 | begin 34 | @session.execute(statement) 35 | increment_success 36 | rescue => e 37 | puts "#{e.class.name}: #{e.message}" 38 | increment_errors 39 | end 40 | end 41 | end 42 | end 43 | 44 | UnpreparedSelectRubyDriver.new.run ARGV[0] 45 | -------------------------------------------------------------------------------- /benchmarking/unprepared-insert-100k-queries/README.md: -------------------------------------------------------------------------------- 1 | # Results 2 | The tests were ran on an iMac 2013 (Intel Core i7 3.5 GHz, 16 GB RAM) on a 3 | Cassandra (2.0.9) cluster of 3 nodes created using CCM 4 | 5 | The test contained only unprepared insert statements. 6 | 7 | -------------------------------------------------------------------------------- /benchmarking/unprepared-insert-100k-queries/output-unprepared-insert-cql-rb-01.log: -------------------------------------------------------------------------------- 1 | 3.0e-06 Connecting to cluster... 2 | 0.063568 Starting producing 100000 inserts... 3 | # Started watcher 4 | # 0 new queries answered (0/100000) 5 | # 0 new queries answered (0/100000) 6 | # 0 new queries answered (0/100000) 7 | # 0 new queries answered (0/100000) 8 | # 0 new queries answered (0/100000) 9 | # 0 new queries answered (0/100000) 10 | # 0 new queries answered (0/100000) 11 | # 0 new queries answered (0/100000) 12 | # 0 new queries answered (0/100000) 13 | # 0 new queries answered (0/100000) 14 | # 0 new queries answered (0/100000) 15 | # 0 new queries answered (0/100000) 16 | # 0 new queries answered (0/100000) 17 | 13.903598 Starting consuming inserts... 18 | # 7,849 new queries answered (7849/100000) 19 | # 5,188 new queries answered (13037/100000) 20 | # 7,815 new queries answered (20852/100000) 21 | # 7,965 new queries answered (28817/100000) 22 | # 6,372 new queries answered (35189/100000) 23 | # 6,855 new queries answered (42044/100000) 24 | # 6,932 new queries answered (48976/100000) 25 | # 7,695 new queries answered (56671/100000) 26 | # 7,272 new queries answered (63943/100000) 27 | # 8,547 new queries answered (72490/100000) 28 | # 7,440 new queries answered (79930/100000) 29 | # 7,628 new queries answered (87558/100000) 30 | # 10,697 new queries answered (98255/100000) 31 | 27.851773 Cleaning... 32 | # Success: 100000 33 | # Errors: 0 34 | 28.794962 Done. 35 | -------------------------------------------------------------------------------- /benchmarking/unprepared-insert-100k-queries/output-unprepared-insert-cql-rb-02.log: -------------------------------------------------------------------------------- 1 | 3.0e-06 Connecting to cluster... 2 | 0.109713 Starting producing 100000 inserts... 3 | # Started watcher 4 | # 0 new queries answered (0/100000) 5 | # 0 new queries answered (0/100000) 6 | # 0 new queries answered (0/100000) 7 | # 0 new queries answered (0/100000) 8 | # 0 new queries answered (0/100000) 9 | # 0 new queries answered (0/100000) 10 | # 0 new queries answered (0/100000) 11 | # 0 new queries answered (0/100000) 12 | # 0 new queries answered (0/100000) 13 | # 0 new queries answered (0/100000) 14 | # 0 new queries answered (0/100000) 15 | # 0 new queries answered (0/100000) 16 | 13.905425 Starting consuming inserts... 17 | # 4,672 new queries answered (4672/100000) 18 | # 7,758 new queries answered (12430/100000) 19 | # 7,591 new queries answered (20021/100000) 20 | # 6,995 new queries answered (27016/100000) 21 | # 7,496 new queries answered (34512/100000) 22 | # 8,687 new queries answered (43199/100000) 23 | # 8,057 new queries answered (51256/100000) 24 | # 8,542 new queries answered (59798/100000) 25 | # 8,293 new queries answered (68091/100000) 26 | # 7,510 new queries answered (75601/100000) 27 | # 8,007 new queries answered (83608/100000) 28 | # 8,957 new queries answered (92565/100000) 29 | 27.171601 Cleaning... 30 | # Success: 100000 31 | # Errors: 0 32 | 27.467035 Done. 33 | -------------------------------------------------------------------------------- /benchmarking/unprepared-insert-100k-queries/output-unprepared-insert-cql-rb-03.log: -------------------------------------------------------------------------------- 1 | 4.0e-06 Connecting to cluster... 2 | # Started watcher 3 | # 0 new queries answered (0/100000) 4 | 1.71093 Starting producing 100000 inserts... 5 | # 0 new queries answered (0/100000) 6 | # 0 new queries answered (0/100000) 7 | # 0 new queries answered (0/100000) 8 | # 0 new queries answered (0/100000) 9 | # 0 new queries answered (0/100000) 10 | # 0 new queries answered (0/100000) 11 | # 0 new queries answered (0/100000) 12 | # 0 new queries answered (0/100000) 13 | # 0 new queries answered (0/100000) 14 | # 0 new queries answered (0/100000) 15 | # 0 new queries answered (0/100000) 16 | 15.494354 Starting consuming inserts... 17 | # 8,348 new queries answered (8348/100000) 18 | # 7,029 new queries answered (15377/100000) 19 | # 6,936 new queries answered (22313/100000) 20 | # 7,590 new queries answered (29903/100000) 21 | # 7,694 new queries answered (37597/100000) 22 | # 3,059 new queries answered (40656/100000) 23 | # 7,657 new queries answered (48313/100000) 24 | # 7,578 new queries answered (55891/100000) 25 | # 7,727 new queries answered (63618/100000) 26 | # 7,364 new queries answered (70982/100000) 27 | # 6,411 new queries answered (77393/100000) 28 | # 6,784 new queries answered (84177/100000) 29 | # 9,892 new queries answered (94069/100000) 30 | 29.271085 Cleaning... 31 | # Success: 100000 32 | # Errors: 0 33 | 29.749512 Done. 34 | -------------------------------------------------------------------------------- /benchmarking/unprepared-insert-100k-queries/output-unprepared-insert-cql-rb-04.log: -------------------------------------------------------------------------------- 1 | 4.0e-06 Connecting to cluster... 2 | 1.507419 Starting producing 100000 inserts... 3 | # Started watcher 4 | # 0 new queries answered (0/100000) 5 | # 0 new queries answered (0/100000) 6 | # 0 new queries answered (0/100000) 7 | # 0 new queries answered (0/100000) 8 | # 0 new queries answered (0/100000) 9 | # 0 new queries answered (0/100000) 10 | # 0 new queries answered (0/100000) 11 | # 0 new queries answered (0/100000) 12 | # 0 new queries answered (0/100000) 13 | # 0 new queries answered (0/100000) 14 | # 0 new queries answered (0/100000) 15 | # 0 new queries answered (0/100000) 16 | # 0 new queries answered (0/100000) 17 | 15.291112 Starting consuming inserts... 18 | # 8,153 new queries answered (8153/100000) 19 | # 7,900 new queries answered (16053/100000) 20 | # 5,064 new queries answered (21117/100000) 21 | # 8,145 new queries answered (29262/100000) 22 | # 7,515 new queries answered (36777/100000) 23 | # 5,343 new queries answered (42120/100000) 24 | # 8,316 new queries answered (50436/100000) 25 | # 7,612 new queries answered (58048/100000) 26 | # 8,335 new queries answered (66383/100000) 27 | # 6,898 new queries answered (73281/100000) 28 | # 8,163 new queries answered (81444/100000) 29 | # 9,446 new queries answered (90890/100000) 30 | 29.878356 Cleaning... 31 | # Success: 100000 32 | # Errors: 0 33 | 30.140633 Done. 34 | -------------------------------------------------------------------------------- /benchmarking/unprepared-insert-100k-queries/output-unprepared-insert-cql-rb-05.log: -------------------------------------------------------------------------------- 1 | 4.0e-06 Connecting to cluster... 2 | 1.469779 Starting producing 100000 inserts... 3 | # Started watcher 4 | # 0 new queries answered (0/100000) 5 | # 0 new queries answered (0/100000) 6 | # 0 new queries answered (0/100000) 7 | # 0 new queries answered (0/100000) 8 | # 0 new queries answered (0/100000) 9 | # 0 new queries answered (0/100000) 10 | # 0 new queries answered (0/100000) 11 | # 0 new queries answered (0/100000) 12 | # 0 new queries answered (0/100000) 13 | # 0 new queries answered (0/100000) 14 | # 0 new queries answered (0/100000) 15 | # 0 new queries answered (0/100000) 16 | 15.14211 Starting consuming inserts... 17 | # 6,842 new queries answered (6842/100000) 18 | # 6,258 new queries answered (13100/100000) 19 | # 7,539 new queries answered (20639/100000) 20 | # 7,312 new queries answered (27951/100000) 21 | # 6,729 new queries answered (34680/100000) 22 | # 6,832 new queries answered (41512/100000) 23 | # 7,341 new queries answered (48853/100000) 24 | # 7,462 new queries answered (56315/100000) 25 | # 7,363 new queries answered (63678/100000) 26 | # 9,200 new queries answered (72878/100000) 27 | # 6,017 new queries answered (78895/100000) 28 | # 7,019 new queries answered (85914/100000) 29 | # 9,873 new queries answered (95787/100000) 30 | 29.024864 Cleaning... 31 | # Success: 100000 32 | # Errors: 0 33 | 29.784533 Done. 34 | -------------------------------------------------------------------------------- /benchmarking/unprepared-insert-100k-queries/output-unprepared-insert-cql-rb-06.log: -------------------------------------------------------------------------------- 1 | 5.0e-06 Connecting to cluster... 2 | 1.486626 Starting producing 100000 inserts... 3 | # Started watcher 4 | # 0 new queries answered (0/100000) 5 | # 0 new queries answered (0/100000) 6 | # 0 new queries answered (0/100000) 7 | # 0 new queries answered (0/100000) 8 | # 0 new queries answered (0/100000) 9 | # 0 new queries answered (0/100000) 10 | # 0 new queries answered (0/100000) 11 | # 0 new queries answered (0/100000) 12 | # 0 new queries answered (0/100000) 13 | # 0 new queries answered (0/100000) 14 | # 0 new queries answered (0/100000) 15 | # 0 new queries answered (0/100000) 16 | # 0 new queries answered (0/100000) 17 | 15.181035 Starting consuming inserts... 18 | # 8,689 new queries answered (8689/100000) 19 | # 5,205 new queries answered (13894/100000) 20 | # 7,712 new queries answered (21606/100000) 21 | # 4,713 new queries answered (26319/100000) 22 | # 8,668 new queries answered (34987/100000) 23 | # 6,322 new queries answered (41309/100000) 24 | # 8,520 new queries answered (49829/100000) 25 | # 7,781 new queries answered (57610/100000) 26 | # 8,058 new queries answered (65668/100000) 27 | # 6,523 new queries answered (72191/100000) 28 | # 9,295 new queries answered (81486/100000) 29 | # 7,489 new queries answered (88975/100000) 30 | # 8,702 new queries answered (97677/100000) 31 | 29.257799 Cleaning... 32 | # Success: 100000 33 | # Errors: 0 34 | 30.189513 Done. 35 | -------------------------------------------------------------------------------- /benchmarking/unprepared-insert-100k-queries/output-unprepared-insert-cql-rb-07.log: -------------------------------------------------------------------------------- 1 | 4.0e-06 Connecting to cluster... 2 | 0.093946 Starting producing 100000 inserts... 3 | # Started watcher 4 | # 0 new queries answered (0/100000) 5 | # 0 new queries answered (0/100000) 6 | # 0 new queries answered (0/100000) 7 | # 0 new queries answered (0/100000) 8 | # 0 new queries answered (0/100000) 9 | # 0 new queries answered (0/100000) 10 | # 0 new queries answered (0/100000) 11 | # 0 new queries answered (0/100000) 12 | # 0 new queries answered (0/100000) 13 | # 0 new queries answered (0/100000) 14 | # 0 new queries answered (0/100000) 15 | # 0 new queries answered (0/100000) 16 | 13.525983 Starting consuming inserts... 17 | # 8,262 new queries answered (8262/100000) 18 | # 2,862 new queries answered (11124/100000) 19 | # 6,872 new queries answered (17996/100000) 20 | # 7,912 new queries answered (25908/100000) 21 | # 6,562 new queries answered (32470/100000) 22 | # 7,203 new queries answered (39673/100000) 23 | # 7,447 new queries answered (47120/100000) 24 | # 7,614 new queries answered (54734/100000) 25 | # 8,459 new queries answered (63193/100000) 26 | # 6,662 new queries answered (69855/100000) 27 | # 7,916 new queries answered (77771/100000) 28 | # 7,424 new queries answered (85195/100000) 29 | # 10,487 new queries answered (95682/100000) 30 | 27.495904 Cleaning... 31 | # Success: 100000 32 | # Errors: 0 33 | 28.211617 Done. 34 | -------------------------------------------------------------------------------- /benchmarking/unprepared-insert-100k-queries/output-unprepared-insert-cql-rb-08.log: -------------------------------------------------------------------------------- 1 | 4.0e-06 Connecting to cluster... 2 | 0.178185 Starting producing 100000 inserts... 3 | # Started watcher 4 | # 0 new queries answered (0/100000) 5 | # 0 new queries answered (0/100000) 6 | # 0 new queries answered (0/100000) 7 | # 0 new queries answered (0/100000) 8 | # 0 new queries answered (0/100000) 9 | # 0 new queries answered (0/100000) 10 | # 0 new queries answered (0/100000) 11 | # 0 new queries answered (0/100000) 12 | # 0 new queries answered (0/100000) 13 | # 0 new queries answered (0/100000) 14 | # 0 new queries answered (0/100000) 15 | # 0 new queries answered (0/100000) 16 | # 0 new queries answered (0/100000) 17 | 14.133413 Starting consuming inserts... 18 | # 7,914 new queries answered (7914/100000) 19 | # 6,839 new queries answered (14753/100000) 20 | # 7,736 new queries answered (22489/100000) 21 | # 7,342 new queries answered (29831/100000) 22 | # 7,812 new queries answered (37643/100000) 23 | # 7,656 new queries answered (45299/100000) 24 | # 7,587 new queries answered (52886/100000) 25 | # 7,737 new queries answered (60623/100000) 26 | # 7,498 new queries answered (68121/100000) 27 | # 10,189 new queries answered (78310/100000) 28 | # 8,568 new queries answered (86878/100000) 29 | # 7,759 new queries answered (94637/100000) 30 | 27.500806 Cleaning... 31 | # Success: 100000 32 | # Errors: 0 33 | 27.807651 Done. 34 | -------------------------------------------------------------------------------- /benchmarking/unprepared-insert-100k-queries/output-unprepared-insert-cql-rb-09.log: -------------------------------------------------------------------------------- 1 | 4.0e-06 Connecting to cluster... 2 | 1.472311 Starting producing 100000 inserts... 3 | # Started watcher 4 | # 0 new queries answered (0/100000) 5 | # 0 new queries answered (0/100000) 6 | # 0 new queries answered (0/100000) 7 | # 0 new queries answered (0/100000) 8 | # 0 new queries answered (0/100000) 9 | # 0 new queries answered (0/100000) 10 | # 0 new queries answered (0/100000) 11 | # 0 new queries answered (0/100000) 12 | # 0 new queries answered (0/100000) 13 | # 0 new queries answered (0/100000) 14 | # 0 new queries answered (0/100000) 15 | 14.858981 Starting consuming inserts... 16 | # 4,530 new queries answered (4530/100000) 17 | # 7,891 new queries answered (12421/100000) 18 | # 8,232 new queries answered (20653/100000) 19 | # 8,436 new queries answered (29089/100000) 20 | # 7,177 new queries answered (36266/100000) 21 | # 7,650 new queries answered (43916/100000) 22 | # 8,326 new queries answered (52242/100000) 23 | # 7,329 new queries answered (59571/100000) 24 | # 8,905 new queries answered (68476/100000) 25 | # 7,343 new queries answered (75819/100000) 26 | # 9,130 new queries answered (84949/100000) 27 | # 8,795 new queries answered (93744/100000) 28 | 28.351417 Cleaning... 29 | # Success: 100000 30 | # Errors: 0 31 | 28.652357 Done. 32 | -------------------------------------------------------------------------------- /benchmarking/unprepared-insert-100k-queries/output-unprepared-insert-cql-rb-10.log: -------------------------------------------------------------------------------- 1 | 4.0e-06 Connecting to cluster... 2 | 0.13229 Starting producing 100000 inserts... 3 | # Started watcher 4 | # 0 new queries answered (0/100000) 5 | # 0 new queries answered (0/100000) 6 | # 0 new queries answered (0/100000) 7 | # 0 new queries answered (0/100000) 8 | # 0 new queries answered (0/100000) 9 | # 0 new queries answered (0/100000) 10 | # 0 new queries answered (0/100000) 11 | # 0 new queries answered (0/100000) 12 | # 0 new queries answered (0/100000) 13 | # 0 new queries answered (0/100000) 14 | # 0 new queries answered (0/100000) 15 | # 0 new queries answered (0/100000) 16 | 13.134408 Starting consuming inserts... 17 | # 6,846 new queries answered (6846/100000) 18 | # 8,742 new queries answered (15588/100000) 19 | # 8,365 new queries answered (23953/100000) 20 | # 7,952 new queries answered (31905/100000) 21 | # 8,575 new queries answered (40480/100000) 22 | # 4,896 new queries answered (45376/100000) 23 | # 8,737 new queries answered (54113/100000) 24 | # 8,309 new queries answered (62422/100000) 25 | # 8,729 new queries answered (71151/100000) 26 | # 7,746 new queries answered (78897/100000) 27 | # 8,059 new queries answered (86956/100000) 28 | # 11,677 new queries answered (98633/100000) 29 | 26.764472 Cleaning... 30 | # Success: 100000 31 | # Errors: 0 32 | 27.654789 Done. 33 | -------------------------------------------------------------------------------- /benchmarking/unprepared-insert-100k-queries/output-unprepared-insert-ruby-driver-01.log: -------------------------------------------------------------------------------- 1 | 3.0e-06 Connecting to cluster... 2 | 1.617758 Starting producing 100000 inserts... 3 | # Started watcher 4 | # 0 new queries answered (0/100000) 5 | # 0 new queries answered (0/100000) 6 | # 0 new queries answered (0/100000) 7 | # 0 new queries answered (0/100000) 8 | # 0 new queries answered (0/100000) 9 | # 0 new queries answered (0/100000) 10 | # 0 new queries answered (0/100000) 11 | # 0 new queries answered (0/100000) 12 | # 0 new queries answered (0/100000) 13 | 11.462351 Starting consuming inserts... 14 | # 344 new queries answered (344/100000) 15 | # 10,284 new queries answered (10628/100000) 16 | # 6,762 new queries answered (17390/100000) 17 | # 7,641 new queries answered (25031/100000) 18 | # 8,133 new queries answered (33164/100000) 19 | # 9,078 new queries answered (42242/100000) 20 | # 7,575 new queries answered (49817/100000) 21 | # 9,477 new queries answered (59294/100000) 22 | # 8,301 new queries answered (67595/100000) 23 | # 8,232 new queries answered (75827/100000) 24 | # 8,946 new queries answered (84773/100000) 25 | # 9,249 new queries answered (94022/100000) 26 | 24.096816 Cleaning... 27 | # Success: 100000 28 | # Errors: 0 29 | 24.892101 Done. 30 | -------------------------------------------------------------------------------- /benchmarking/unprepared-insert-100k-queries/output-unprepared-insert-ruby-driver-02.log: -------------------------------------------------------------------------------- 1 | 4.0e-06 Connecting to cluster... 2 | 1.510434 Starting producing 100000 inserts... 3 | # Started watcher 4 | # 0 new queries answered (0/100000) 5 | # 0 new queries answered (0/100000) 6 | # 0 new queries answered (0/100000) 7 | # 0 new queries answered (0/100000) 8 | # 0 new queries answered (0/100000) 9 | # 0 new queries answered (0/100000) 10 | # 0 new queries answered (0/100000) 11 | # 0 new queries answered (0/100000) 12 | # 0 new queries answered (0/100000) 13 | 11.483607 Starting consuming inserts... 14 | # 6,022 new queries answered (6022/100000) 15 | # 8,677 new queries answered (14699/100000) 16 | # 7,507 new queries answered (22206/100000) 17 | # 8,538 new queries answered (30744/100000) 18 | # 6,882 new queries answered (37626/100000) 19 | # 9,249 new queries answered (46875/100000) 20 | # 7,122 new queries answered (53997/100000) 21 | # 6,381 new queries answered (60378/100000) 22 | # 11,010 new queries answered (71388/100000) 23 | # 6,606 new queries answered (77994/100000) 24 | # 7,869 new queries answered (85863/100000) 25 | # 7,836 new queries answered (93699/100000) 26 | 24.004279 Cleaning... 27 | # Success: 100000 28 | # Errors: 0 29 | 24.863498 Done. 30 | -------------------------------------------------------------------------------- /benchmarking/unprepared-insert-100k-queries/output-unprepared-insert-ruby-driver-03.log: -------------------------------------------------------------------------------- 1 | 3.0e-06 Connecting to cluster... 2 | 1.497369 Starting producing 100000 inserts... 3 | # Started watcher 4 | # 0 new queries answered (0/100000) 5 | # 0 new queries answered (0/100000) 6 | # 0 new queries answered (0/100000) 7 | # 0 new queries answered (0/100000) 8 | # 0 new queries answered (0/100000) 9 | # 0 new queries answered (0/100000) 10 | # 0 new queries answered (0/100000) 11 | # 0 new queries answered (0/100000) 12 | # 0 new queries answered (0/100000) 13 | # 0 new queries answered (0/100000) 14 | 11.425562 Starting consuming inserts... 15 | # 11,208 new queries answered (11208/100000) 16 | # 7,497 new queries answered (18705/100000) 17 | # 6,597 new queries answered (25302/100000) 18 | # 8,451 new queries answered (33753/100000) 19 | # 10,023 new queries answered (43776/100000) 20 | # 7,539 new queries answered (51315/100000) 21 | # 7,809 new queries answered (59124/100000) 22 | # 9,951 new queries answered (69075/100000) 23 | # 9,168 new queries answered (78243/100000) 24 | # 9,063 new queries answered (87306/100000) 25 | # 9,759 new queries answered (97065/100000) 26 | 23.615106 Cleaning... 27 | # Success: 100000 28 | # Errors: 0 29 | 24.551639 Done. 30 | -------------------------------------------------------------------------------- /benchmarking/unprepared-insert-100k-queries/output-unprepared-insert-ruby-driver-04.log: -------------------------------------------------------------------------------- 1 | 4.0e-06 Connecting to cluster... 2 | 1.48777 Starting producing 100000 inserts... 3 | # Started watcher 4 | # 0 new queries answered (0/100000) 5 | # 0 new queries answered (0/100000) 6 | # 0 new queries answered (0/100000) 7 | # 0 new queries answered (0/100000) 8 | # 0 new queries answered (0/100000) 9 | # 0 new queries answered (0/100000) 10 | # 0 new queries answered (0/100000) 11 | # 0 new queries answered (0/100000) 12 | # 0 new queries answered (0/100000) 13 | # 0 new queries answered (0/100000) 14 | 11.705185 Starting consuming inserts... 15 | # 7,333 new queries answered (7333/100000) 16 | # 8,732 new queries answered (16065/100000) 17 | # 9,063 new queries answered (25128/100000) 18 | # 7,692 new queries answered (32820/100000) 19 | # 9,810 new queries answered (42630/100000) 20 | # 7,812 new queries answered (50442/100000) 21 | # 8,637 new queries answered (59079/100000) 22 | # 7,632 new queries answered (66711/100000) 23 | # 8,631 new queries answered (75342/100000) 24 | # 8,541 new queries answered (83883/100000) 25 | # 7,668 new queries answered (91551/100000) 26 | 24.041369 Cleaning... 27 | # Success: 100000 28 | # Errors: 0 29 | 24.420593 Done. 30 | -------------------------------------------------------------------------------- /benchmarking/unprepared-insert-100k-queries/output-unprepared-insert-ruby-driver-05.log: -------------------------------------------------------------------------------- 1 | 4.0e-06 Connecting to cluster... 2 | # Started watcher 3 | # 0 new queries answered (0/100000) 4 | 1.488292 Starting producing 100000 inserts... 5 | # 0 new queries answered (0/100000) 6 | # 0 new queries answered (0/100000) 7 | # 0 new queries answered (0/100000) 8 | # 0 new queries answered (0/100000) 9 | # 0 new queries answered (0/100000) 10 | # 0 new queries answered (0/100000) 11 | # 0 new queries answered (0/100000) 12 | # 0 new queries answered (0/100000) 13 | # 0 new queries answered (0/100000) 14 | 11.497177 Starting consuming inserts... 15 | # 6,468 new queries answered (6468/100000) 16 | # 12,831 new queries answered (19299/100000) 17 | # 9,870 new queries answered (29169/100000) 18 | # 9,921 new queries answered (39090/100000) 19 | # 8,630 new queries answered (47720/100000) 20 | # 5,460 new queries answered (53180/100000) 21 | # 10,110 new queries answered (63290/100000) 22 | # 8,475 new queries answered (71765/100000) 23 | # 8,976 new queries answered (80741/100000) 24 | # 9,357 new queries answered (90098/100000) 25 | 23.408528 Cleaning... 26 | # Success: 100000 27 | # Errors: 0 28 | 23.576402 Done. 29 | -------------------------------------------------------------------------------- /benchmarking/unprepared-insert-100k-queries/output-unprepared-insert-ruby-driver-06.log: -------------------------------------------------------------------------------- 1 | 4.0e-06 Connecting to cluster... 2 | 1.507006 Starting producing 100000 inserts... 3 | # Started watcher 4 | # 0 new queries answered (0/100000) 5 | # 0 new queries answered (0/100000) 6 | # 0 new queries answered (0/100000) 7 | # 0 new queries answered (0/100000) 8 | # 0 new queries answered (0/100000) 9 | # 0 new queries answered (0/100000) 10 | # 0 new queries answered (0/100000) 11 | # 0 new queries answered (0/100000) 12 | # 0 new queries answered (0/100000) 13 | 11.357734 Starting consuming inserts... 14 | # 3,717 new queries answered (3717/100000) 15 | # 10,128 new queries answered (13845/100000) 16 | # 8,193 new queries answered (22038/100000) 17 | # 7,531 new queries answered (29569/100000) 18 | # 9,308 new queries answered (38877/100000) 19 | # 6,777 new queries answered (45654/100000) 20 | # 8,521 new queries answered (54175/100000) 21 | # 7,580 new queries answered (61755/100000) 22 | # 8,403 new queries answered (70158/100000) 23 | # 6,906 new queries answered (77064/100000) 24 | # 10,473 new queries answered (87537/100000) 25 | # 9,327 new queries answered (96864/100000) 26 | 23.515566 Cleaning... 27 | # Success: 100000 28 | # Errors: 0 29 | 24.456975 Done. 30 | -------------------------------------------------------------------------------- /benchmarking/unprepared-insert-100k-queries/output-unprepared-insert-ruby-driver-07.log: -------------------------------------------------------------------------------- 1 | 3.0e-06 Connecting to cluster... 2 | 0.052469 Starting producing 100000 inserts... 3 | # Started watcher 4 | # 0 new queries answered (0/100000) 5 | # 0 new queries answered (0/100000) 6 | # 0 new queries answered (0/100000) 7 | # 0 new queries answered (0/100000) 8 | # 0 new queries answered (0/100000) 9 | # 0 new queries answered (0/100000) 10 | # 0 new queries answered (0/100000) 11 | # 0 new queries answered (0/100000) 12 | # 0 new queries answered (0/100000) 13 | 10.097699 Starting consuming inserts... 14 | # 8,707 new queries answered (8707/100000) 15 | # 7,074 new queries answered (15781/100000) 16 | # 6,660 new queries answered (22441/100000) 17 | # 7,661 new queries answered (30102/100000) 18 | # 7,404 new queries answered (37506/100000) 19 | # 5,289 new queries answered (42795/100000) 20 | # 8,526 new queries answered (51321/100000) 21 | # 8,970 new queries answered (60291/100000) 22 | # 7,953 new queries answered (68244/100000) 23 | # 6,471 new queries answered (74715/100000) 24 | # 8,817 new queries answered (83532/100000) 25 | # 7,086 new queries answered (90618/100000) 26 | 22.381377 Cleaning... 27 | # Success: 100000 28 | # Errors: 0 29 | 22.825405 Done. 30 | -------------------------------------------------------------------------------- /benchmarking/unprepared-insert-100k-queries/output-unprepared-insert-ruby-driver-08.log: -------------------------------------------------------------------------------- 1 | 3.0e-06 Connecting to cluster... 2 | 0.097181 Starting producing 100000 inserts... 3 | # Started watcher 4 | # 0 new queries answered (0/100000) 5 | # 0 new queries answered (0/100000) 6 | # 0 new queries answered (0/100000) 7 | # 0 new queries answered (0/100000) 8 | # 0 new queries answered (0/100000) 9 | # 0 new queries answered (0/100000) 10 | # 0 new queries answered (0/100000) 11 | # 0 new queries answered (0/100000) 12 | # 0 new queries answered (0/100000) 13 | # 0 new queries answered (0/100000) 14 | 9.985094 Starting consuming inserts... 15 | # 9,231 new queries answered (9231/100000) 16 | # 7,818 new queries answered (17049/100000) 17 | # 9,102 new queries answered (26151/100000) 18 | # 9,273 new queries answered (35424/100000) 19 | # 8,406 new queries answered (43830/100000) 20 | # 7,704 new queries answered (51534/100000) 21 | # 7,833 new queries answered (59367/100000) 22 | # 9,822 new queries answered (69189/100000) 23 | # 8,721 new queries answered (77910/100000) 24 | # 9,054 new queries answered (86964/100000) 25 | # 8,697 new queries answered (95661/100000) 26 | 22.233729 Cleaning... 27 | # Success: 100000 28 | # Errors: 0 29 | 22.941827 Done. 30 | -------------------------------------------------------------------------------- /benchmarking/unprepared-insert-100k-queries/output-unprepared-insert-ruby-driver-09.log: -------------------------------------------------------------------------------- 1 | 3.0e-06 Connecting to cluster... 2 | 0.131545 Starting producing 100000 inserts... 3 | # Started watcher 4 | # 0 new queries answered (0/100000) 5 | # 0 new queries answered (0/100000) 6 | # 0 new queries answered (0/100000) 7 | # 0 new queries answered (0/100000) 8 | # 0 new queries answered (0/100000) 9 | # 0 new queries answered (0/100000) 10 | # 0 new queries answered (0/100000) 11 | # 0 new queries answered (0/100000) 12 | # 0 new queries answered (0/100000) 13 | 9.863158 Starting consuming inserts... 14 | # 9,630 new queries answered (9630/100000) 15 | # 6,048 new queries answered (15678/100000) 16 | # 9,285 new queries answered (24963/100000) 17 | # 8,262 new queries answered (33225/100000) 18 | # 7,176 new queries answered (40401/100000) 19 | # 8,262 new queries answered (48663/100000) 20 | # 9,957 new queries answered (58620/100000) 21 | # 8,673 new queries answered (67293/100000) 22 | # 9,042 new queries answered (76335/100000) 23 | # 9,804 new queries answered (86139/100000) 24 | # 7,986 new queries answered (94125/100000) 25 | 21.921826 Cleaning... 26 | # Success: 100000 27 | # Errors: 0 28 | 22.780282 Done. 29 | -------------------------------------------------------------------------------- /benchmarking/unprepared-insert-100k-queries/output-unprepared-insert-ruby-driver-10.log: -------------------------------------------------------------------------------- 1 | 5.0e-06 Connecting to cluster... 2 | 1.713102 Starting producing 100000 inserts... 3 | # Started watcher 4 | # 0 new queries answered (0/100000) 5 | # 0 new queries answered (0/100000) 6 | # 0 new queries answered (0/100000) 7 | # 0 new queries answered (0/100000) 8 | # 0 new queries answered (0/100000) 9 | # 0 new queries answered (0/100000) 10 | # 0 new queries answered (0/100000) 11 | # 0 new queries answered (0/100000) 12 | # 0 new queries answered (0/100000) 13 | # 0 new queries answered (0/100000) 14 | 11.614712 Starting consuming inserts... 15 | # 11,225 new queries answered (11225/100000) 16 | # 7,490 new queries answered (18715/100000) 17 | # 9,885 new queries answered (28600/100000) 18 | # 9,891 new queries answered (38491/100000) 19 | # 8,894 new queries answered (47385/100000) 20 | # 6,117 new queries answered (53502/100000) 21 | # 8,442 new queries answered (61944/100000) 22 | # 8,613 new queries answered (70557/100000) 23 | # 8,733 new queries answered (79290/100000) 24 | # 9,171 new queries answered (88461/100000) 25 | 23.588484 Cleaning... 26 | # Success: 100000 27 | # Errors: 0 28 | 23.831485 Done. 29 | -------------------------------------------------------------------------------- /benchmarking/unprepared-select-100k-queries/README.md: -------------------------------------------------------------------------------- 1 | # Results 2 | The tests were ran on an iMac 2013 (Intel Core i7 3.5 GHz, 16 GB RAM) on a 3 | Cassandra (2.0.9) cluster of 3 nodes created using CCM 4 | 5 | The test contained only unprepared select statements. 6 | 7 | -------------------------------------------------------------------------------- /benchmarking/unprepared-select-100k-queries/output-unprepared-select-cql-rb-01.log: -------------------------------------------------------------------------------- 1 | 2.0e-06 Connecting to cluster... 2 | 0.017158 Starting producing 100000 selects... 3 | # Started watcher 4 | # 0 new queries answered (0/100000) 5 | # 0 new queries answered (0/100000) 6 | # 0 new queries answered (0/100000) 7 | # 0 new queries answered (0/100000) 8 | # 0 new queries answered (0/100000) 9 | # 0 new queries answered (0/100000) 10 | # 0 new queries answered (0/100000) 11 | # 0 new queries answered (0/100000) 12 | # 0 new queries answered (0/100000) 13 | 9.214282 Starting consuming selects... 14 | # 5,322 new queries answered (5322/100000) 15 | # 3,464 new queries answered (8786/100000) 16 | # 4,362 new queries answered (13148/100000) 17 | # 3,922 new queries answered (17070/100000) 18 | # 5,132 new queries answered (22202/100000) 19 | # 3,052 new queries answered (25254/100000) 20 | # 4,953 new queries answered (30207/100000) 21 | # 4,061 new queries answered (34268/100000) 22 | # 5,072 new queries answered (39340/100000) 23 | # 5,987 new queries answered (45327/100000) 24 | # 6,062 new queries answered (51389/100000) 25 | # 4,707 new queries answered (56096/100000) 26 | # 5,138 new queries answered (61234/100000) 27 | # 5,084 new queries answered (66318/100000) 28 | # 5,234 new queries answered (71552/100000) 29 | # 5,078 new queries answered (76630/100000) 30 | # 5,336 new queries answered (81966/100000) 31 | # 5,007 new queries answered (86973/100000) 32 | # 6,298 new queries answered (93271/100000) 33 | 29.673169 Cleaning... 34 | # Success: 100000 35 | # Errors: 0 36 | 29.685888 Done. 37 | -------------------------------------------------------------------------------- /benchmarking/unprepared-select-100k-queries/output-unprepared-select-cql-rb-02.log: -------------------------------------------------------------------------------- 1 | 2.0e-06 Connecting to cluster... 2 | 0.018676 Starting producing 100000 selects... 3 | # Started watcher 4 | # 0 new queries answered (0/100000) 5 | # 0 new queries answered (0/100000) 6 | # 0 new queries answered (0/100000) 7 | # 0 new queries answered (0/100000) 8 | # 0 new queries answered (0/100000) 9 | # 0 new queries answered (0/100000) 10 | # 0 new queries answered (0/100000) 11 | # 0 new queries answered (0/100000) 12 | 8.505484 Starting consuming selects... 13 | # 3,804 new queries answered (3804/100000) 14 | # 5,515 new queries answered (9319/100000) 15 | # 5,181 new queries answered (14500/100000) 16 | # 5,286 new queries answered (19786/100000) 17 | # 5,237 new queries answered (25023/100000) 18 | # 5,419 new queries answered (30442/100000) 19 | # 5,326 new queries answered (35768/100000) 20 | # 5,359 new queries answered (41127/100000) 21 | # 5,112 new queries answered (46239/100000) 22 | # 4,988 new queries answered (51227/100000) 23 | # 5,424 new queries answered (56651/100000) 24 | # 5,865 new queries answered (62516/100000) 25 | # 5,897 new queries answered (68413/100000) 26 | # 5,582 new queries answered (73995/100000) 27 | # 5,376 new queries answered (79371/100000) 28 | # 6,450 new queries answered (85821/100000) 29 | # 5,495 new queries answered (91316/100000) 30 | # 6,376 new queries answered (97692/100000) 31 | 27.707014 Cleaning... 32 | # Success: 100000 33 | # Errors: 0 34 | 28.57902 Done. 35 | -------------------------------------------------------------------------------- /benchmarking/unprepared-select-100k-queries/output-unprepared-select-cql-rb-03.log: -------------------------------------------------------------------------------- 1 | 3.0e-06 Connecting to cluster... 2 | 0.013449 Starting producing 100000 selects... 3 | # Started watcher 4 | # 0 new queries answered (0/100000) 5 | # 0 new queries answered (0/100000) 6 | # 0 new queries answered (0/100000) 7 | # 0 new queries answered (0/100000) 8 | # 0 new queries answered (0/100000) 9 | # 0 new queries answered (0/100000) 10 | # 0 new queries answered (0/100000) 11 | # 0 new queries answered (0/100000) 12 | 8.031876 Starting consuming selects... 13 | # 6,136 new queries answered (6136/100000) 14 | # 4,374 new queries answered (10510/100000) 15 | # 5,681 new queries answered (16191/100000) 16 | # 4,063 new queries answered (20254/100000) 17 | # 5,379 new queries answered (25633/100000) 18 | # 5,883 new queries answered (31516/100000) 19 | # 5,146 new queries answered (36662/100000) 20 | # 5,127 new queries answered (41789/100000) 21 | # 5,872 new queries answered (47661/100000) 22 | # 5,379 new queries answered (53040/100000) 23 | # 6,251 new queries answered (59291/100000) 24 | # 5,103 new queries answered (64394/100000) 25 | # 5,425 new queries answered (69819/100000) 26 | # 5,491 new queries answered (75310/100000) 27 | # 5,451 new queries answered (80761/100000) 28 | # 5,378 new queries answered (86139/100000) 29 | # 5,603 new queries answered (91742/100000) 30 | # 7,629 new queries answered (99371/100000) 31 | 27.573945 Cleaning... 32 | # Success: 100000 33 | # Errors: 0 34 | 28.548303 Done. 35 | -------------------------------------------------------------------------------- /benchmarking/unprepared-select-100k-queries/output-unprepared-select-cql-rb-04.log: -------------------------------------------------------------------------------- 1 | 2.0e-06 Connecting to cluster... 2 | 0.014009 Starting producing 100000 selects... 3 | # Started watcher 4 | # 0 new queries answered (0/100000) 5 | # 0 new queries answered (0/100000) 6 | # 0 new queries answered (0/100000) 7 | # 0 new queries answered (0/100000) 8 | # 0 new queries answered (0/100000) 9 | # 0 new queries answered (0/100000) 10 | # 0 new queries answered (0/100000) 11 | # 0 new queries answered (0/100000) 12 | 8.591442 Starting consuming selects... 13 | # 6,477 new queries answered (6477/100000) 14 | # 4,008 new queries answered (10485/100000) 15 | # 5,312 new queries answered (15797/100000) 16 | # 5,942 new queries answered (21739/100000) 17 | # 5,030 new queries answered (26769/100000) 18 | # 4,690 new queries answered (31459/100000) 19 | # 5,052 new queries answered (36511/100000) 20 | # 5,687 new queries answered (42198/100000) 21 | # 5,064 new queries answered (47262/100000) 22 | # 5,121 new queries answered (52383/100000) 23 | # 5,526 new queries answered (57909/100000) 24 | # 5,387 new queries answered (63296/100000) 25 | # 5,596 new queries answered (68892/100000) 26 | # 5,103 new queries answered (73995/100000) 27 | # 6,169 new queries answered (80164/100000) 28 | # 5,128 new queries answered (85292/100000) 29 | # 4,858 new queries answered (90150/100000) 30 | # 5,371 new queries answered (95521/100000) 31 | 28.932271 Cleaning... 32 | # Success: 100000 33 | # Errors: 0 34 | 29.446213 Done. 35 | -------------------------------------------------------------------------------- /benchmarking/unprepared-select-100k-queries/output-unprepared-select-cql-rb-05.log: -------------------------------------------------------------------------------- 1 | 2.0e-06 Connecting to cluster... 2 | 0.012199 Starting producing 100000 selects... 3 | # Started watcher 4 | # 0 new queries answered (0/100000) 5 | # 0 new queries answered (0/100000) 6 | # 0 new queries answered (0/100000) 7 | # 0 new queries answered (0/100000) 8 | # 0 new queries answered (0/100000) 9 | # 0 new queries answered (0/100000) 10 | # 0 new queries answered (0/100000) 11 | # 0 new queries answered (0/100000) 12 | 8.118423 Starting consuming selects... 13 | # 4,004 new queries answered (4004/100000) 14 | # 5,820 new queries answered (9824/100000) 15 | # 3,317 new queries answered (13141/100000) 16 | # 5,406 new queries answered (18547/100000) 17 | # 5,736 new queries answered (24283/100000) 18 | # 6,160 new queries answered (30443/100000) 19 | # 3,943 new queries answered (34386/100000) 20 | # 3,742 new queries answered (38128/100000) 21 | # 5,224 new queries answered (43352/100000) 22 | # 5,977 new queries answered (49329/100000) 23 | # 5,660 new queries answered (54989/100000) 24 | # 5,835 new queries answered (60824/100000) 25 | # 3,979 new queries answered (64803/100000) 26 | # 5,220 new queries answered (70023/100000) 27 | # 5,073 new queries answered (75096/100000) 28 | # 5,708 new queries answered (80804/100000) 29 | # 5,374 new queries answered (86178/100000) 30 | # 5,773 new queries answered (91951/100000) 31 | # 6,347 new queries answered (98298/100000) 32 | 28.631902 Cleaning... 33 | # Success: 100000 34 | # Errors: 0 35 | 29.544298 Done. 36 | -------------------------------------------------------------------------------- /benchmarking/unprepared-select-100k-queries/output-unprepared-select-cql-rb-06.log: -------------------------------------------------------------------------------- 1 | 2.0e-06 Connecting to cluster... 2 | 0.013264 Starting producing 100000 selects... 3 | # Started watcher 4 | # 0 new queries answered (0/100000) 5 | # 0 new queries answered (0/100000) 6 | # 0 new queries answered (0/100000) 7 | # 0 new queries answered (0/100000) 8 | # 0 new queries answered (0/100000) 9 | # 0 new queries answered (0/100000) 10 | # 0 new queries answered (0/100000) 11 | # 0 new queries answered (0/100000) 12 | 8.355947 Starting consuming selects... 13 | # 6,291 new queries answered (6291/100000) 14 | # 4,037 new queries answered (10328/100000) 15 | # 5,674 new queries answered (16002/100000) 16 | # 5,447 new queries answered (21449/100000) 17 | # 5,680 new queries answered (27129/100000) 18 | # 5,415 new queries answered (32544/100000) 19 | # 4,750 new queries answered (37294/100000) 20 | # 5,471 new queries answered (42765/100000) 21 | # 5,340 new queries answered (48105/100000) 22 | # 4,819 new queries answered (52924/100000) 23 | # 4,776 new queries answered (57700/100000) 24 | # 5,577 new queries answered (63277/100000) 25 | # 5,108 new queries answered (68385/100000) 26 | # 6,036 new queries answered (74421/100000) 27 | # 5,197 new queries answered (79618/100000) 28 | # 5,249 new queries answered (84867/100000) 29 | # 6,089 new queries answered (90956/100000) 30 | # 6,754 new queries answered (97710/100000) 31 | 27.505113 Cleaning... 32 | # Success: 100000 33 | # Errors: 0 34 | 28.244865 Done. 35 | -------------------------------------------------------------------------------- /benchmarking/unprepared-select-100k-queries/output-unprepared-select-cql-rb-07.log: -------------------------------------------------------------------------------- 1 | 1.0e-06 Connecting to cluster... 2 | 0.013325 Starting producing 100000 selects... 3 | # Started watcher 4 | # 0 new queries answered (0/100000) 5 | # 0 new queries answered (0/100000) 6 | # 0 new queries answered (0/100000) 7 | # 0 new queries answered (0/100000) 8 | # 0 new queries answered (0/100000) 9 | # 0 new queries answered (0/100000) 10 | # 0 new queries answered (0/100000) 11 | # 0 new queries answered (0/100000) 12 | 8.455202 Starting consuming selects... 13 | # 6,280 new queries answered (6280/100000) 14 | # 3,371 new queries answered (9651/100000) 15 | # 4,215 new queries answered (13866/100000) 16 | # 6,148 new queries answered (20014/100000) 17 | # 4,480 new queries answered (24494/100000) 18 | # 4,108 new queries answered (28602/100000) 19 | # 4,451 new queries answered (33053/100000) 20 | # 4,531 new queries answered (37584/100000) 21 | # 4,972 new queries answered (42556/100000) 22 | # 5,703 new queries answered (48259/100000) 23 | # 5,343 new queries answered (53602/100000) 24 | # 5,271 new queries answered (58873/100000) 25 | # 4,904 new queries answered (63777/100000) 26 | # 5,447 new queries answered (69224/100000) 27 | # 5,699 new queries answered (74923/100000) 28 | # 4,504 new queries answered (79427/100000) 29 | # 5,765 new queries answered (85192/100000) 30 | # 5,512 new queries answered (90704/100000) 31 | # 5,329 new queries answered (96033/100000) 32 | 27.786605 Cleaning... 33 | # Success: 100000 34 | # Errors: 0 35 | 28.601298 Done. 36 | -------------------------------------------------------------------------------- /benchmarking/unprepared-select-100k-queries/output-unprepared-select-cql-rb-08.log: -------------------------------------------------------------------------------- 1 | 2.0e-06 Connecting to cluster... 2 | 0.013303 Starting producing 100000 selects... 3 | # Started watcher 4 | # 0 new queries answered (0/100000) 5 | # 0 new queries answered (0/100000) 6 | # 0 new queries answered (0/100000) 7 | # 0 new queries answered (0/100000) 8 | # 0 new queries answered (0/100000) 9 | # 0 new queries answered (0/100000) 10 | # 0 new queries answered (0/100000) 11 | # 0 new queries answered (0/100000) 12 | 8.127324 Starting consuming selects... 13 | # 5,690 new queries answered (5690/100000) 14 | # 5,355 new queries answered (11045/100000) 15 | # 5,717 new queries answered (16762/100000) 16 | # 5,909 new queries answered (22671/100000) 17 | # 5,069 new queries answered (27740/100000) 18 | # 6,106 new queries answered (33846/100000) 19 | # 5,379 new queries answered (39225/100000) 20 | # 5,486 new queries answered (44711/100000) 21 | # 4,242 new queries answered (48953/100000) 22 | # 5,332 new queries answered (54285/100000) 23 | # 5,308 new queries answered (59593/100000) 24 | # 4,852 new queries answered (64445/100000) 25 | # 4,886 new queries answered (69331/100000) 26 | # 5,325 new queries answered (74656/100000) 27 | # 5,792 new queries answered (80448/100000) 28 | # 5,362 new queries answered (85810/100000) 29 | # 6,086 new queries answered (91896/100000) 30 | 27.498558 Cleaning... 31 | # Success: 100000 32 | # Errors: 0 33 | 27.543123 Done. 34 | -------------------------------------------------------------------------------- /benchmarking/unprepared-select-100k-queries/output-unprepared-select-cql-rb-09.log: -------------------------------------------------------------------------------- 1 | 1.0e-06 Connecting to cluster... 2 | 0.017792 Starting producing 100000 selects... 3 | # Started watcher 4 | # 0 new queries answered (0/100000) 5 | # 0 new queries answered (0/100000) 6 | # 0 new queries answered (0/100000) 7 | # 0 new queries answered (0/100000) 8 | # 0 new queries answered (0/100000) 9 | # 0 new queries answered (0/100000) 10 | # 0 new queries answered (0/100000) 11 | # 0 new queries answered (0/100000) 12 | 8.036162 Starting consuming selects... 13 | # 7,588 new queries answered (7588/100000) 14 | # 5,416 new queries answered (13004/100000) 15 | # 5,144 new queries answered (18148/100000) 16 | # 5,656 new queries answered (23804/100000) 17 | # 5,932 new queries answered (29736/100000) 18 | # 5,511 new queries answered (35247/100000) 19 | # 5,398 new queries answered (40645/100000) 20 | # 6,075 new queries answered (46720/100000) 21 | # 6,325 new queries answered (53045/100000) 22 | # 5,181 new queries answered (58226/100000) 23 | # 5,653 new queries answered (63879/100000) 24 | # 5,554 new queries answered (69433/100000) 25 | # 4,992 new queries answered (74425/100000) 26 | # 5,263 new queries answered (79688/100000) 27 | # 5,529 new queries answered (85217/100000) 28 | # 5,815 new queries answered (91032/100000) 29 | # 6,270 new queries answered (97302/100000) 30 | 26.957853 Cleaning... 31 | # Success: 100000 32 | # Errors: 0 33 | 27.675194 Done. 34 | -------------------------------------------------------------------------------- /benchmarking/unprepared-select-100k-queries/output-unprepared-select-cql-rb-10.log: -------------------------------------------------------------------------------- 1 | 2.0e-06 Connecting to cluster... 2 | 0.012939 Starting producing 100000 selects... 3 | # Started watcher 4 | # 0 new queries answered (0/100000) 5 | # 0 new queries answered (0/100000) 6 | # 0 new queries answered (0/100000) 7 | # 0 new queries answered (0/100000) 8 | # 0 new queries answered (0/100000) 9 | # 0 new queries answered (0/100000) 10 | # 0 new queries answered (0/100000) 11 | # 0 new queries answered (0/100000) 12 | 8.534628 Starting consuming selects... 13 | # 6,246 new queries answered (6246/100000) 14 | # 4,918 new queries answered (11164/100000) 15 | # 5,113 new queries answered (16277/100000) 16 | # 4,768 new queries answered (21045/100000) 17 | # 5,726 new queries answered (26771/100000) 18 | # 4,865 new queries answered (31636/100000) 19 | # 5,800 new queries answered (37436/100000) 20 | # 4,609 new queries answered (42045/100000) 21 | # 4,393 new queries answered (46438/100000) 22 | # 4,972 new queries answered (51410/100000) 23 | # 5,416 new queries answered (56826/100000) 24 | # 5,046 new queries answered (61872/100000) 25 | # 4,587 new queries answered (66459/100000) 26 | # 5,224 new queries answered (71683/100000) 27 | # 5,453 new queries answered (77136/100000) 28 | # 5,318 new queries answered (82454/100000) 29 | # 5,425 new queries answered (87879/100000) 30 | # 5,848 new queries answered (93727/100000) 31 | 27.886737 Cleaning... 32 | # Success: 100000 33 | # Errors: 0 34 | 28.239384 Done. 35 | -------------------------------------------------------------------------------- /benchmarking/unprepared-select-100k-queries/output-unprepared-select-ruby-driver-01.log: -------------------------------------------------------------------------------- 1 | 2.0e-06 Connecting to cluster... 2 | 0.016567 Starting producing 100000 selects... 3 | # Started watcher 4 | # 0 new queries answered (0/100000) 5 | # 0 new queries answered (0/100000) 6 | # 0 new queries answered (0/100000) 7 | # 0 new queries answered (0/100000) 8 | # 0 new queries answered (0/100000) 9 | # 0 new queries answered (0/100000) 10 | 5.550118 Starting consuming selects... 11 | # 5,926 new queries answered (5926/100000) 12 | # 8,571 new queries answered (14497/100000) 13 | # 9,768 new queries answered (24265/100000) 14 | # 14,438 new queries answered (38703/100000) 15 | # 10,045 new queries answered (48748/100000) 16 | # 10,809 new queries answered (59557/100000) 17 | # 9,587 new queries answered (69144/100000) 18 | # 11,481 new queries answered (80625/100000) 19 | # 10,626 new queries answered (91251/100000) 20 | 16.314463 Cleaning... 21 | # Success: 100000 22 | # Errors: 0 23 | 16.617768 Done. 24 | -------------------------------------------------------------------------------- /benchmarking/unprepared-select-100k-queries/output-unprepared-select-ruby-driver-02.log: -------------------------------------------------------------------------------- 1 | 1.0e-06 Connecting to cluster... 2 | 0.016689 Starting producing 100000 selects... 3 | # Started watcher 4 | # 0 new queries answered (0/100000) 5 | # 0 new queries answered (0/100000) 6 | # 0 new queries answered (0/100000) 7 | # 0 new queries answered (0/100000) 8 | # 0 new queries answered (0/100000) 9 | # 0 new queries answered (0/100000) 10 | 5.801413 Starting consuming selects... 11 | # 1,730 new queries answered (1730/100000) 12 | # 9,536 new queries answered (11266/100000) 13 | # 8,958 new queries answered (20224/100000) 14 | # 8,616 new queries answered (28840/100000) 15 | # 15,356 new queries answered (44196/100000) 16 | # 10,764 new queries answered (54960/100000) 17 | # 8,475 new queries answered (63435/100000) 18 | # 10,656 new queries answered (74091/100000) 19 | # 10,632 new queries answered (84723/100000) 20 | # 11,328 new queries answered (96051/100000) 21 | 16.349324 Cleaning... 22 | # Success: 100000 23 | # Errors: 0 24 | 17.177536 Done. 25 | -------------------------------------------------------------------------------- /benchmarking/unprepared-select-100k-queries/output-unprepared-select-ruby-driver-03.log: -------------------------------------------------------------------------------- 1 | 3.0e-06 Connecting to cluster... 2 | 0.014993 Starting producing 100000 selects... 3 | # Started watcher 4 | # 0 new queries answered (0/100000) 5 | # 0 new queries answered (0/100000) 6 | # 0 new queries answered (0/100000) 7 | # 0 new queries answered (0/100000) 8 | # 0 new queries answered (0/100000) 9 | # 0 new queries answered (0/100000) 10 | 5.599594 Starting consuming selects... 11 | # 5,336 new queries answered (5336/100000) 12 | # 8,193 new queries answered (13529/100000) 13 | # 7,019 new queries answered (20548/100000) 14 | # 8,850 new queries answered (29398/100000) 15 | # 15,276 new queries answered (44674/100000) 16 | # 9,477 new queries answered (54151/100000) 17 | # 9,879 new queries answered (64030/100000) 18 | # 7,461 new queries answered (71491/100000) 19 | # 11,511 new queries answered (83002/100000) 20 | # 10,914 new queries answered (93916/100000) 21 | 16.809627 Cleaning... 22 | # Success: 100000 23 | # Errors: 0 24 | 17.219796 Done. 25 | -------------------------------------------------------------------------------- /benchmarking/unprepared-select-100k-queries/output-unprepared-select-ruby-driver-04.log: -------------------------------------------------------------------------------- 1 | 2.0e-06 Connecting to cluster... 2 | 0.016323 Starting producing 100000 selects... 3 | # Started watcher 4 | # 0 new queries answered (0/100000) 5 | # 0 new queries answered (0/100000) 6 | # 0 new queries answered (0/100000) 7 | # 0 new queries answered (0/100000) 8 | # 0 new queries answered (0/100000) 9 | # 0 new queries answered (0/100000) 10 | 5.820815 Starting consuming selects... 11 | # 5,041 new queries answered (5041/100000) 12 | # 7,692 new queries answered (12733/100000) 13 | # 6,435 new queries answered (19168/100000) 14 | # 11,862 new queries answered (31030/100000) 15 | # 7,486 new queries answered (38516/100000) 16 | # 9,444 new queries answered (47960/100000) 17 | # 7,538 new queries answered (55498/100000) 18 | # 10,276 new queries answered (65774/100000) 19 | # 10,319 new queries answered (76093/100000) 20 | # 10,056 new queries answered (86149/100000) 21 | # 8,418 new queries answered (94567/100000) 22 | 17.643093 Cleaning... 23 | # Success: 100000 24 | # Errors: 0 25 | 18.200228 Done. 26 | -------------------------------------------------------------------------------- /benchmarking/unprepared-select-100k-queries/output-unprepared-select-ruby-driver-05.log: -------------------------------------------------------------------------------- 1 | 2.0e-06 Connecting to cluster... 2 | 0.016238 Starting producing 100000 selects... 3 | # Started watcher 4 | # 0 new queries answered (0/100000) 5 | # 0 new queries answered (0/100000) 6 | # 0 new queries answered (0/100000) 7 | # 0 new queries answered (0/100000) 8 | # 0 new queries answered (0/100000) 9 | 5.590327 Starting consuming selects... 10 | # 691 new queries answered (691/100000) 11 | # 8,114 new queries answered (8805/100000) 12 | # 10,180 new queries answered (18985/100000) 13 | # 5,439 new queries answered (24424/100000) 14 | # 16,046 new queries answered (40470/100000) 15 | # 6,928 new queries answered (47398/100000) 16 | # 10,730 new queries answered (58128/100000) 17 | # 10,464 new queries answered (68592/100000) 18 | # 11,047 new queries answered (79639/100000) 19 | # 11,057 new queries answered (90696/100000) 20 | 16.166376 Cleaning... 21 | # Success: 100000 22 | # Errors: 0 23 | 16.39853 Done. 24 | -------------------------------------------------------------------------------- /benchmarking/unprepared-select-100k-queries/output-unprepared-select-ruby-driver-06.log: -------------------------------------------------------------------------------- 1 | 1.0e-06 Connecting to cluster... 2 | 0.015417 Starting producing 100000 selects... 3 | # Started watcher 4 | # 0 new queries answered (0/100000) 5 | # 0 new queries answered (0/100000) 6 | # 0 new queries answered (0/100000) 7 | # 0 new queries answered (0/100000) 8 | # 0 new queries answered (0/100000) 9 | 5.328793 Starting consuming selects... 10 | # 346 new queries answered (346/100000) 11 | # 8,121 new queries answered (8467/100000) 12 | # 12,959 new queries answered (21426/100000) 13 | # 9,628 new queries answered (31054/100000) 14 | # 10,163 new queries answered (41217/100000) 15 | # 9,363 new queries answered (50580/100000) 16 | # 10,642 new queries answered (61222/100000) 17 | # 9,138 new queries answered (70360/100000) 18 | # 10,805 new queries answered (81165/100000) 19 | # 8,389 new queries answered (89554/100000) 20 | 15.787699 Cleaning... 21 | # Success: 100000 22 | # Errors: 0 23 | 15.902962 Done. 24 | -------------------------------------------------------------------------------- /benchmarking/unprepared-select-100k-queries/output-unprepared-select-ruby-driver-07.log: -------------------------------------------------------------------------------- 1 | 1.0e-06 Connecting to cluster... 2 | 0.015395 Starting producing 100000 selects... 3 | # Started watcher 4 | # 0 new queries answered (0/100000) 5 | # 0 new queries answered (0/100000) 6 | # 0 new queries answered (0/100000) 7 | # 0 new queries answered (0/100000) 8 | # 0 new queries answered (0/100000) 9 | # 0 new queries answered (0/100000) 10 | 5.50474 Starting consuming selects... 11 | # 8,867 new queries answered (8867/100000) 12 | # 8,453 new queries answered (17320/100000) 13 | # 11,433 new queries answered (28753/100000) 14 | # 10,674 new queries answered (39427/100000) 15 | # 7,466 new queries answered (46893/100000) 16 | # 10,692 new queries answered (57585/100000) 17 | # 8,562 new queries answered (66147/100000) 18 | # 10,567 new queries answered (76714/100000) 19 | # 10,937 new queries answered (87651/100000) 20 | # 11,080 new queries answered (98731/100000) 21 | 16.108531 Cleaning... 22 | # Success: 100000 23 | # Errors: 0 24 | 17.089518 Done. 25 | -------------------------------------------------------------------------------- /benchmarking/unprepared-select-100k-queries/output-unprepared-select-ruby-driver-08.log: -------------------------------------------------------------------------------- 1 | 1.0e-06 Connecting to cluster... 2 | 0.014702 Starting producing 100000 selects... 3 | # Started watcher 4 | # 0 new queries answered (0/100000) 5 | # 0 new queries answered (0/100000) 6 | # 0 new queries answered (0/100000) 7 | # 0 new queries answered (0/100000) 8 | # 0 new queries answered (0/100000) 9 | # 0 new queries answered (0/100000) 10 | 5.541006 Starting consuming selects... 11 | # 2,922 new queries answered (2922/100000) 12 | # 16,629 new queries answered (19551/100000) 13 | # 9,126 new queries answered (28677/100000) 14 | # 9,735 new queries answered (38412/100000) 15 | # 8,538 new queries answered (46950/100000) 16 | # 10,806 new queries answered (57756/100000) 17 | # 7,698 new queries answered (65454/100000) 18 | # 11,157 new queries answered (76611/100000) 19 | # 10,992 new queries answered (87603/100000) 20 | # 10,839 new queries answered (98442/100000) 21 | 16.364712 Cleaning... 22 | # Success: 100000 23 | # Errors: 0 24 | 17.333788 Done. 25 | -------------------------------------------------------------------------------- /benchmarking/unprepared-select-100k-queries/output-unprepared-select-ruby-driver-09.log: -------------------------------------------------------------------------------- 1 | 1.0e-06 Connecting to cluster... 2 | 0.015598 Starting producing 100000 selects... 3 | # Started watcher 4 | # 0 new queries answered (0/100000) 5 | # 0 new queries answered (0/100000) 6 | # 0 new queries answered (0/100000) 7 | # 0 new queries answered (0/100000) 8 | # 0 new queries answered (0/100000) 9 | # 0 new queries answered (0/100000) 10 | 5.480293 Starting consuming selects... 11 | # 8,976 new queries answered (8976/100000) 12 | # 8,557 new queries answered (17533/100000) 13 | # 11,621 new queries answered (29154/100000) 14 | # 9,753 new queries answered (38907/100000) 15 | # 8,298 new queries answered (47205/100000) 16 | # 10,535 new queries answered (57740/100000) 17 | # 8,194 new queries answered (65934/100000) 18 | # 10,880 new queries answered (76814/100000) 19 | # 9,103 new queries answered (85917/100000) 20 | # 9,632 new queries answered (95549/100000) 21 | 16.095456 Cleaning... 22 | # Success: 100000 23 | # Errors: 0 24 | 16.925377 Done. 25 | -------------------------------------------------------------------------------- /benchmarking/unprepared-select-100k-queries/output-unprepared-select-ruby-driver-10.log: -------------------------------------------------------------------------------- 1 | 1.0e-06 Connecting to cluster... 2 | 0.015695 Starting producing 100000 selects... 3 | # Started watcher 4 | # 0 new queries answered (0/100000) 5 | # 0 new queries answered (0/100000) 6 | # 0 new queries answered (0/100000) 7 | # 0 new queries answered (0/100000) 8 | # 0 new queries answered (0/100000) 9 | 5.367793 Starting consuming selects... 10 | # 2,547 new queries answered (2547/100000) 11 | # 9,295 new queries answered (11842/100000) 12 | # 7,296 new queries answered (19138/100000) 13 | # 12,144 new queries answered (31282/100000) 14 | # 8,789 new queries answered (40071/100000) 15 | # 9,810 new queries answered (49881/100000) 16 | # 10,695 new queries answered (60576/100000) 17 | # 8,364 new queries answered (68940/100000) 18 | # 11,271 new queries answered (80211/100000) 19 | # 11,334 new queries answered (91545/100000) 20 | 15.574104 Cleaning... 21 | # Success: 100000 22 | # Errors: 0 23 | 15.878751 Done. 24 | -------------------------------------------------------------------------------- /build.yaml.bak: -------------------------------------------------------------------------------- 1 | schedules: 2 | commit: 3 | schedule: per_commit 4 | matrix: 5 | exclude: 6 | - ruby: ['2.2'] 7 | - cassandra: ['2.2', '3.0'] 8 | nightly: 9 | schedule: nightly 10 | branches: 11 | include: [master] 12 | 13 | ruby: 14 | - 2.2 15 | - 2.3 16 | - 2.4 17 | - 2.7 18 | - jruby9.1 19 | 20 | cassandra: 21 | - '2.1' 22 | - '3.0' 23 | - '3.11' 24 | - '4.0' 25 | os: 26 | - ubuntu/bionic64/ruby-driver 27 | build: 28 | - script: | 29 | ruby_version=`ruby --version` 30 | if [[ `ruby --version` == jruby* ]]; then 31 | # Add '-java' to version as that is included in version name when using jruby 32 | sed -i -r 's/cassandra-driver \((.*)\)/cassandra-driver (\1-java)/' Gemfile.lock 33 | fi 34 | - script: | 35 | bundle update --bundler 36 | - type: bundler 37 | without: development docs 38 | - script: | 39 | # Set the Java paths (for CCM) 40 | export JAVA_HOME=$CCM_JAVA_HOME 41 | export PATH=$JAVA_HOME/bin:$PATH 42 | 43 | # Define Cassandra or DSE runtime 44 | if [ "$CCM_IS_DSE" == "true" ]; then 45 | export DSE_VERSION=$CCM_VERSION 46 | else 47 | export CASSANDRA_VERSION=$CCM_VERSION 48 | fi 49 | 50 | # Run the tests 51 | bundle exec rake test 52 | -------------------------------------------------------------------------------- /cassandra-driver.gemspec: -------------------------------------------------------------------------------- 1 | # encoding: utf-8 2 | 3 | $LOAD_PATH << File.expand_path('../lib', __FILE__) 4 | 5 | require 'cassandra/version' 6 | 7 | Gem::Specification.new do |s| 8 | s.name = 'cassandra-driver' 9 | s.version = Cassandra::VERSION.dup 10 | s.authors = ['Theo Hultberg', 'Bulat Shakirzyanov', 'Sandeep Tamhankar'] 11 | s.email = ['theo@iconara.net', 'bulat.shakirzyanov@datastax.com', 'sandeep.tamhankar@datastax.com'] 12 | s.homepage = 'http://datastax.github.io/ruby-driver' 13 | s.summary = 'Datastax Ruby Driver for Apache Cassandra' 14 | s.description = 'A pure Ruby driver for Apache Cassandra' 15 | s.license = 'Apache License 2.0' 16 | s.files = Dir['lib/**/*.rb', 'README.md', '.yardopts'] 17 | s.require_paths = %w[lib] 18 | 19 | s.extra_rdoc_files = ['README.md'] 20 | s.rdoc_options << '--title' << 'Datastax Ruby Driver' << '--main' << 'README.md' << '--line-numbers' 21 | 22 | s.required_ruby_version = '>= 2.2.0' 23 | 24 | if defined?(JRUBY_VERSION) 25 | s.platform = 'java' 26 | s.files << 'lib/cassandra_murmur3.jar' 27 | else 28 | s.platform = Gem::Platform::RUBY 29 | s.extensions = 'ext/cassandra_murmur3/extconf.rb' 30 | s.files << 'ext/cassandra_murmur3/cassandra_murmur3.c' 31 | end 32 | 33 | s.add_runtime_dependency 'ione', '~> 1.2' 34 | 35 | s.add_development_dependency 'bundler', '~> 1.6' 36 | s.add_development_dependency 'rake', '~> 13.0' 37 | end 38 | -------------------------------------------------------------------------------- /examples/cql-rb-wrapper.rb: -------------------------------------------------------------------------------- 1 | # encoding: utf-8 2 | 3 | require 'cassandra' 4 | require 'ione' 5 | 6 | class PreparedStatement 7 | attr_reader :statement 8 | 9 | def initialize(client, statement) 10 | @client = client 11 | @statement = statement 12 | end 13 | 14 | def execute(*args) 15 | @client.execute(@statement, *args) 16 | end 17 | end 18 | 19 | class BatchStatement 20 | def initialize(client, batch) 21 | @client = client 22 | @batch = batch 23 | end 24 | 25 | def execute(options = {}) 26 | @client.execute(@batch, options) 27 | end 28 | 29 | def add(*args) 30 | @batch.add(*args) 31 | self 32 | end 33 | end 34 | 35 | class Client 36 | def initialize(session) 37 | @session = session 38 | end 39 | 40 | def execute(*args) 41 | @session.execute(*args) 42 | end 43 | 44 | def prepare(statement, options = {}) 45 | s = @session.prepare(statement, options) 46 | PreparedStatement.new(self, s) 47 | end 48 | 49 | def batch(type = :logged, options = {}) 50 | batch = BatchStatement.new(self, @session.send(:"#{type}_batch")) 51 | if block_given? 52 | yield(batch) 53 | batch.execute(options) 54 | else 55 | batch 56 | end 57 | end 58 | 59 | def close 60 | @session.close 61 | end 62 | end 63 | 64 | cluster = Cassandra.cluster 65 | session = cluster.connect 66 | client = Client.new(session) 67 | -------------------------------------------------------------------------------- /ext/cassandra_murmur3/extconf.rb: -------------------------------------------------------------------------------- 1 | require 'mkmf' 2 | create_makefile('cassandra_murmur3') 3 | -------------------------------------------------------------------------------- /features/.nav: -------------------------------------------------------------------------------- 1 | basics 2 | asynchronous_io 3 | prepared_statements 4 | batch_statements 5 | security 6 | debugging 7 | load_balancing 8 | retry_policies 9 | state_listeners -------------------------------------------------------------------------------- /features/address_resolution/custom_address_resolution.feature: -------------------------------------------------------------------------------- 1 | Feature: Custom address resolution policy 2 | 3 | Ruby driver uses plug-able address-resolution policy to map Apache Cassandra 4 | node's ip address to another address value if necessary. 5 | 6 | Scenario: Using a custom address resolution strategy 7 | Given a running cassandra cluster in 2 datacenters with 2 nodes in each 8 | And a file named "custom_address_resolver.rb" with: 9 | """ruby 10 | class CustomAddressResolver 11 | def initialize(addresses) 12 | @addresses = addresses 13 | end 14 | 15 | def resolve(address) 16 | @addresses.fetch(address, address) 17 | end 18 | end 19 | """ 20 | And the following example: 21 | """ruby 22 | require 'cassandra' 23 | require 'custom_address_resolver' 24 | 25 | resolver = CustomAddressResolver.new({ 26 | IPAddr.new('127.0.0.3') => IPAddr.new('192.168.10.3'), 27 | IPAddr.new('127.0.0.4') => IPAddr.new('192.168.10.4') 28 | }) 29 | cluster = Cassandra.cluster(address_resolution_policy: resolver) 30 | 31 | puts cluster.each_host.map!(&:ip).sort! 32 | """ 33 | When it is executed 34 | Then its output should contain: 35 | """ 36 | 127.0.0.1 37 | 127.0.0.2 38 | 192.168.10.3 39 | 192.168.10.4 40 | """ 41 | -------------------------------------------------------------------------------- /features/basics/.nav: -------------------------------------------------------------------------------- 1 | datatypes 2 | prepared_statements 3 | result_paging 4 | batch_statements 5 | -------------------------------------------------------------------------------- /features/debugging/README.md: -------------------------------------------------------------------------------- 1 | # Debugging 2 | 3 | Execution info can be used to dig into details on how requests executed. If request tracing is enabled, the 4 | trace info will be available in the exection info. 5 | 6 | In addition, configuring the logger for the cluster object will result in extra debug output emitted that can help 7 | track down issues. 8 | -------------------------------------------------------------------------------- /features/debugging/logging.feature: -------------------------------------------------------------------------------- 1 | Feature: Logging 2 | 3 | Cluster object allows registering loggers. It then uses these to log the driver's 4 | actions. The library's `Cassandra::Logger` can be used to retrieve the timestamp, 5 | thread-id, severity, and message. 6 | 7 | Background: 8 | Given a running cassandra cluster 9 | 10 | Scenario: Logging is enabled using internal logger 11 | Given the following example: 12 | """ruby 13 | require 'cassandra' 14 | 15 | logger = Cassandra::Logger.new($stderr) 16 | cluster = Cassandra.cluster(logger: logger) 17 | session = cluster.connect 18 | """ 19 | When it is executed 20 | Then its output should contain: 21 | """ 22 | DEBUG: Host 127.0.0.1 is found and up 23 | """ 24 | And its output should contain: 25 | """ 26 | INFO: Schema refreshed 27 | """ 28 | And its output should contain: 29 | """ 30 | INFO: Session created 31 | """ -------------------------------------------------------------------------------- /features/error_handling/.nav: -------------------------------------------------------------------------------- 1 | request_execution 2 | connection_heartbeat 3 | -------------------------------------------------------------------------------- /features/load_balancing/.nav: -------------------------------------------------------------------------------- 1 | default_policy 2 | round_robin 3 | datacenter_aware 4 | token_aware 5 | whitelist 6 | implementing_a_policy -------------------------------------------------------------------------------- /features/reconnection/README.md: -------------------------------------------------------------------------------- 1 | # Reconnection 2 | 3 | Ruby driver will automatically reestablish failed connections to Cassandra nodes. It uses a reconnection policy to determine retry intervals for reconnection. -------------------------------------------------------------------------------- /features/retry_policies/fallthrough.feature: -------------------------------------------------------------------------------- 1 | Feature: Fallthrough Retry Policy 2 | 3 | The Fallthrough retry policy prevents the driver from retrying queries when they failed. 4 | 5 | This strategy should be used when the retry policy has to be implemented in business code. 6 | 7 | Scenario: Fallthrough policy is used explicitly 8 | Given a running cassandra cluster with schema: 9 | """cql 10 | CREATE KEYSPACE simplex WITH replication = {'class': 'SimpleStrategy', 'replication_factor': 3}; 11 | CREATE TABLE simplex.songs ( 12 | id uuid PRIMARY KEY, 13 | title text, 14 | album text, 15 | artist text, 16 | tags set, 17 | data blob 18 | ); 19 | """ 20 | And the following example: 21 | """ruby 22 | require 'cassandra' 23 | 24 | cluster = Cassandra.cluster(retry_policy: Cassandra::Retry::Policies::Fallthrough.new) 25 | session = cluster.connect('simplex') 26 | 27 | begin 28 | session.execute('SELECT * FROM songs', consistency: :all) 29 | puts "failed" 30 | rescue Cassandra::Errors::UnavailableError => e 31 | puts "success" 32 | end 33 | """ 34 | When node 3 stops 35 | And it is executed 36 | Then its output should contain: 37 | """ 38 | success 39 | """ 40 | -------------------------------------------------------------------------------- /features/security/.nav: -------------------------------------------------------------------------------- 1 | standard_authentication 2 | ssl_encryption -------------------------------------------------------------------------------- /features/security/standard_authentication.feature: -------------------------------------------------------------------------------- 1 | @auth 2 | Feature: Standard authentication 3 | 4 | A Cluster can be configured to use a given username/password for 5 | authentication to cassandra cluster. 6 | 7 | Background: 8 | Given a running cassandra cluster with authentication enabled 9 | And the following example: 10 | """ruby 11 | require 'cassandra' 12 | 13 | begin 14 | cluster = Cassandra.cluster( 15 | username: ENV['USERNAME'], 16 | password: ENV['PASSWORD'] 17 | ) 18 | puts "authentication successful" 19 | rescue Cassandra::Errors::AuthenticationError => e 20 | puts "#{e.class.name}: #{e.message}" 21 | puts "authentication failed" 22 | else 23 | cluster.close 24 | end 25 | """ 26 | 27 | Scenario: Authenticating with correct credentials 28 | When it is executed with a valid username and password in the environment 29 | Then its output should contain: 30 | """ 31 | authentication successful 32 | """ 33 | 34 | Scenario: Authenticating with incorrect credentials 35 | When it is executed with an invalid username and password in the environment 36 | Then its output should contain: 37 | """ 38 | authentication failed 39 | """ 40 | -------------------------------------------------------------------------------- /features/state_listeners/README.md: -------------------------------------------------------------------------------- 1 | # State Listeners 2 | 3 | You can define listeners for schema change events as well as cluster membership changes. 4 | -------------------------------------------------------------------------------- /features/support/step_definitions/authentication_steps.rb: -------------------------------------------------------------------------------- 1 | # encoding: utf-8 2 | 3 | When(/^it is executed with a valid username and password in the environment$/) do 4 | with_environment('USERNAME' => @username, 'PASSWORD' => @password) do 5 | step 'it is executed' 6 | end 7 | end 8 | 9 | When(/^it is executed with an invalid username and password in the environment$/) do 10 | with_environment('USERNAME' => 'invalidname', 'PASSWORD' => 'badpassword') do 11 | step 'it is executed' 12 | end 13 | end 14 | 15 | When(/^it is executed with a valid ca path in the environment$/) do 16 | with_environment('SERVER_CERT' => @server_cert) do 17 | step 'it is executed' 18 | end 19 | end 20 | 21 | When(/^it is executed with ca and cert path and key in the environment$/) do 22 | with_environment('SERVER_CERT' => @server_cert, 'CLIENT_CERT' => @client_cert, 23 | 'PRIVATE_KEY' => @private_key, 'PASSPHRASE' => @passphrase) do 24 | step 'it is executed' 25 | end 26 | end 27 | -------------------------------------------------------------------------------- /features/support/step_definitions/interactive_steps.rb: -------------------------------------------------------------------------------- 1 | Given(/^it is running interactively$/) do 2 | step 'I run `ruby -I. -rbundler/setup example.rb` interactively' 3 | end 4 | 5 | When(/^I type "(.*?)" (\d+) times$/) do |input, count| 6 | count.to_i.times do 7 | step "I type \"#{input}\"" 8 | end 9 | end 10 | -------------------------------------------------------------------------------- /integration/load_balancing/try_next_host_retry_policy.rb: -------------------------------------------------------------------------------- 1 | # encoding: utf-8 2 | 3 | #-- 4 | # Copyright DataStax, Inc. 5 | # 6 | # Licensed under the Apache License, Version 2.0 (the "License"); 7 | # you may not use this file except in compliance with the License. 8 | # You may obtain a copy of the License at 9 | # 10 | # http://www.apache.org/licenses/LICENSE-2.0 11 | # 12 | # Unless required by applicable law or agreed to in writing, software 13 | # distributed under the License is distributed on an "AS IS" BASIS, 14 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 15 | # See the License for the specific language governing permissions and 16 | # limitations under the License. 17 | #++ 18 | 19 | class TryNextHostRetryPolicy 20 | include Cassandra::Retry::Policy 21 | 22 | def read_timeout(statement, consistency_level, required_responses, received_responses, data_retrieved, retries) 23 | try_next_host 24 | end 25 | 26 | def write_timeout(statement, consistency_level, write_type, acks_required, acks_received, retries) 27 | try_next_host 28 | end 29 | 30 | def unavailable(statement, consistency_level, replicas_required, replicas_alive, retries) 31 | try_next_host 32 | end 33 | end 34 | -------------------------------------------------------------------------------- /lib/cassandra/address_resolution.rb: -------------------------------------------------------------------------------- 1 | # encoding: utf-8 2 | 3 | #-- 4 | # Copyright DataStax, Inc. 5 | # 6 | # Licensed under the Apache License, Version 2.0 (the "License"); 7 | # you may not use this file except in compliance with the License. 8 | # You may obtain a copy of the License at 9 | # 10 | # http://www.apache.org/licenses/LICENSE-2.0 11 | # 12 | # Unless required by applicable law or agreed to in writing, software 13 | # distributed under the License is distributed on an "AS IS" BASIS, 14 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 15 | # See the License for the specific language governing permissions and 16 | # limitations under the License. 17 | #++ 18 | 19 | module Cassandra 20 | # Address Resolution policy allows translating a node ip address from what is 21 | # recorded in Cassandra's system tables to an actual ip address for the driver 22 | # to use. It is very useful in various multi-region scenarios (e.g. on EC2). 23 | module AddressResolution 24 | class Policy 25 | # Resolves a node ip address. 26 | # 27 | # @param address [IPAddr] node ip address from Cassandra's system table 28 | # 29 | # @return [IPAddr] actual ip address of the node 30 | def resolve(address) 31 | end 32 | end 33 | end 34 | end 35 | 36 | require 'cassandra/address_resolution/policies' 37 | -------------------------------------------------------------------------------- /lib/cassandra/address_resolution/policies.rb: -------------------------------------------------------------------------------- 1 | require 'cassandra/address_resolution/policies/none' 2 | require 'cassandra/address_resolution/policies/ec2_multi_region' 3 | -------------------------------------------------------------------------------- /lib/cassandra/address_resolution/policies/none.rb: -------------------------------------------------------------------------------- 1 | # encoding: utf-8 2 | 3 | #-- 4 | # Copyright DataStax, Inc. 5 | # 6 | # Licensed under the Apache License, Version 2.0 (the "License"); 7 | # you may not use this file except in compliance with the License. 8 | # You may obtain a copy of the License at 9 | # 10 | # http://www.apache.org/licenses/LICENSE-2.0 11 | # 12 | # Unless required by applicable law or agreed to in writing, software 13 | # distributed under the License is distributed on an "AS IS" BASIS, 14 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 15 | # See the License for the specific language governing permissions and 16 | # limitations under the License. 17 | #++ 18 | 19 | module Cassandra 20 | module AddressResolution 21 | module Policies 22 | # The default address resolution policy. Always returns original address. 23 | class None 24 | # Returns original address. 25 | # 26 | # @param address [IPAddr] node ip address from Cassandra's system table 27 | # 28 | # @return [IPAddr] same as `address` 29 | def resolve(address) 30 | address 31 | end 32 | end 33 | end 34 | end 35 | end 36 | -------------------------------------------------------------------------------- /lib/cassandra/argument.rb: -------------------------------------------------------------------------------- 1 | # encoding: utf-8 2 | 3 | #-- 4 | # Copyright DataStax, Inc. 5 | # 6 | # Licensed under the Apache License, Version 2.0 (the "License"); 7 | # you may not use this file except in compliance with the License. 8 | # You may obtain a copy of the License at 9 | # 10 | # http://www.apache.org/licenses/LICENSE-2.0 11 | # 12 | # Unless required by applicable law or agreed to in writing, software 13 | # distributed under the License is distributed on an "AS IS" BASIS, 14 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 15 | # See the License for the specific language governing permissions and 16 | # limitations under the License. 17 | #++ 18 | 19 | module Cassandra 20 | # Represents a function argument 21 | class Argument 22 | # @return [String] column name 23 | attr_reader :name 24 | # @return [Cassandra::Type] column type 25 | attr_reader :type 26 | 27 | # @private 28 | def initialize(name, type) 29 | @name = name 30 | @type = type 31 | end 32 | 33 | # @private 34 | def eql?(other) 35 | other.is_a?(Argument) && \ 36 | @name == other.name && \ 37 | @type == other.type 38 | end 39 | alias == eql? 40 | 41 | # @private 42 | def hash 43 | @hash ||= begin 44 | h = 17 45 | h = 31 * h + @name.hash 46 | h = 31 * h + @type.hash 47 | h 48 | end 49 | end 50 | end 51 | end 52 | -------------------------------------------------------------------------------- /lib/cassandra/attr_boolean.rb: -------------------------------------------------------------------------------- 1 | # encoding: utf-8 2 | 3 | #-- 4 | # Copyright DataStax, Inc. 5 | # 6 | # Licensed under the Apache License, Version 2.0 (the "License"); 7 | # you may not use this file except in compliance with the License. 8 | # You may obtain a copy of the License at 9 | # 10 | # http://www.apache.org/licenses/LICENSE-2.0 11 | # 12 | # Unless required by applicable law or agreed to in writing, software 13 | # distributed under the License is distributed on an "AS IS" BASIS, 14 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 15 | # See the License for the specific language governing permissions and 16 | # limitations under the License. 17 | #++ 18 | 19 | # This file monkey-patches Module to have an attr_boolean method to make it easy 20 | # for classes to define boolean instance variables with "foo?" reader methods. 21 | # Inspired by http://stackoverflow.com/questions/4013591/attr-reader-with-question-mark-in-a-name 22 | module Cassandra 23 | module AttrBoolean 24 | def attr_boolean(*names) 25 | names.each do |name| 26 | define_method(:"#{name}?") do 27 | res = instance_variable_get(:"@#{name}") 28 | !res.nil? && res != false 29 | end 30 | end 31 | end 32 | end 33 | end 34 | -------------------------------------------------------------------------------- /lib/cassandra/auth/providers.rb: -------------------------------------------------------------------------------- 1 | #-- 2 | # Copyright DataStax, Inc. 3 | # 4 | # Licensed under the Apache License, Version 2.0 (the "License"); 5 | # you may not use this file except in compliance with the License. 6 | # You may obtain a copy of the License at 7 | # 8 | # http://www.apache.org/licenses/LICENSE-2.0 9 | # 10 | # Unless required by applicable law or agreed to in writing, software 11 | # distributed under the License is distributed on an "AS IS" BASIS, 12 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | # See the License for the specific language governing permissions and 14 | # limitations under the License. 15 | #++ 16 | 17 | require 'cassandra/auth/providers/password' 18 | -------------------------------------------------------------------------------- /lib/cassandra/cluster/failed_connection.rb: -------------------------------------------------------------------------------- 1 | # encoding: utf-8 2 | 3 | #-- 4 | # Copyright DataStax, Inc. 5 | # 6 | # Licensed under the Apache License, Version 2.0 (the "License"); 7 | # you may not use this file except in compliance with the License. 8 | # You may obtain a copy of the License at 9 | # 10 | # http://www.apache.org/licenses/LICENSE-2.0 11 | # 12 | # Unless required by applicable law or agreed to in writing, software 13 | # distributed under the License is distributed on an "AS IS" BASIS, 14 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 15 | # See the License for the specific language governing permissions and 16 | # limitations under the License. 17 | #++ 18 | 19 | module Cassandra 20 | class Cluster 21 | # @private 22 | class FailedConnection 23 | attr_reader :error, :host 24 | 25 | def initialize(error, host) 26 | @error = error 27 | @host = host 28 | end 29 | 30 | def connected? 31 | false 32 | end 33 | end 34 | end 35 | end 36 | -------------------------------------------------------------------------------- /lib/cassandra/cluster/schema/partitioners.rb: -------------------------------------------------------------------------------- 1 | # encoding: utf-8 2 | 3 | #-- 4 | # Copyright DataStax, Inc. 5 | # 6 | # Licensed under the Apache License, Version 2.0 (the "License"); 7 | # you may not use this file except in compliance with the License. 8 | # You may obtain a copy of the License at 9 | # 10 | # http://www.apache.org/licenses/LICENSE-2.0 11 | # 12 | # Unless required by applicable law or agreed to in writing, software 13 | # distributed under the License is distributed on an "AS IS" BASIS, 14 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 15 | # See the License for the specific language governing permissions and 16 | # limitations under the License. 17 | #++ 18 | 19 | require 'cassandra/cluster/schema/partitioners/ordered' 20 | require 'cassandra/cluster/schema/partitioners/random' 21 | require 'cassandra/cluster/schema/partitioners/murmur3' 22 | -------------------------------------------------------------------------------- /lib/cassandra/cluster/schema/partitioners/murmur3.rb: -------------------------------------------------------------------------------- 1 | # encoding: utf-8 2 | 3 | #-- 4 | # Copyright DataStax, Inc. 5 | # 6 | # Licensed under the Apache License, Version 2.0 (the "License"); 7 | # you may not use this file except in compliance with the License. 8 | # You may obtain a copy of the License at 9 | # 10 | # http://www.apache.org/licenses/LICENSE-2.0 11 | # 12 | # Unless required by applicable law or agreed to in writing, software 13 | # distributed under the License is distributed on an "AS IS" BASIS, 14 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 15 | # See the License for the specific language governing permissions and 16 | # limitations under the License. 17 | #++ 18 | 19 | module Cassandra 20 | class Cluster 21 | class Schema 22 | # @private 23 | module Partitioners 24 | # @private 25 | class Murmur3 26 | # @private 27 | LONG_MIN = -2**63 28 | # @private 29 | LONG_MAX = 2**63 - 1 30 | 31 | def create_token(partition_key) 32 | token = Cassandra::Murmur3.hash(partition_key) 33 | token = LONG_MAX if token == LONG_MIN 34 | 35 | token 36 | end 37 | 38 | def parse_token(token_string) 39 | token_string.to_i 40 | end 41 | end 42 | end 43 | end 44 | end 45 | end 46 | -------------------------------------------------------------------------------- /lib/cassandra/cluster/schema/partitioners/ordered.rb: -------------------------------------------------------------------------------- 1 | # encoding: utf-8 2 | 3 | #-- 4 | # Copyright DataStax, Inc. 5 | # 6 | # Licensed under the Apache License, Version 2.0 (the "License"); 7 | # you may not use this file except in compliance with the License. 8 | # You may obtain a copy of the License at 9 | # 10 | # http://www.apache.org/licenses/LICENSE-2.0 11 | # 12 | # Unless required by applicable law or agreed to in writing, software 13 | # distributed under the License is distributed on an "AS IS" BASIS, 14 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 15 | # See the License for the specific language governing permissions and 16 | # limitations under the License. 17 | #++ 18 | 19 | module Cassandra 20 | class Cluster 21 | class Schema 22 | # @private 23 | module Partitioners 24 | # @private 25 | class Ordered 26 | def create_token(partition_key) 27 | partition_key 28 | end 29 | 30 | def parse_token(token_string) 31 | token_string 32 | end 33 | end 34 | end 35 | end 36 | end 37 | end 38 | -------------------------------------------------------------------------------- /lib/cassandra/cluster/schema/partitioners/random.rb: -------------------------------------------------------------------------------- 1 | # encoding: utf-8 2 | 3 | #-- 4 | # Copyright DataStax, Inc. 5 | # 6 | # Licensed under the Apache License, Version 2.0 (the "License"); 7 | # you may not use this file except in compliance with the License. 8 | # You may obtain a copy of the License at 9 | # 10 | # http://www.apache.org/licenses/LICENSE-2.0 11 | # 12 | # Unless required by applicable law or agreed to in writing, software 13 | # distributed under the License is distributed on an "AS IS" BASIS, 14 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 15 | # See the License for the specific language governing permissions and 16 | # limitations under the License. 17 | #++ 18 | 19 | module Cassandra 20 | class Cluster 21 | class Schema 22 | # @private 23 | module Partitioners 24 | # @private 25 | class Random 26 | def create_token(partition_key) 27 | Digest::MD5.hexdigest(partition_key).to_i(16) 28 | end 29 | 30 | def parse_token(token_string) 31 | token_string.to_i 32 | end 33 | end 34 | end 35 | end 36 | end 37 | end 38 | -------------------------------------------------------------------------------- /lib/cassandra/cluster/schema/replication_strategies.rb: -------------------------------------------------------------------------------- 1 | # encoding: utf-8 2 | 3 | #-- 4 | # Copyright DataStax, Inc. 5 | # 6 | # Licensed under the Apache License, Version 2.0 (the "License"); 7 | # you may not use this file except in compliance with the License. 8 | # You may obtain a copy of the License at 9 | # 10 | # http://www.apache.org/licenses/LICENSE-2.0 11 | # 12 | # Unless required by applicable law or agreed to in writing, software 13 | # distributed under the License is distributed on an "AS IS" BASIS, 14 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 15 | # See the License for the specific language governing permissions and 16 | # limitations under the License. 17 | #++ 18 | 19 | require 'cassandra/cluster/schema/replication_strategies/simple' 20 | require 'cassandra/cluster/schema/replication_strategies/network_topology' 21 | require 'cassandra/cluster/schema/replication_strategies/none' 22 | -------------------------------------------------------------------------------- /lib/cassandra/cluster/schema/replication_strategies/none.rb: -------------------------------------------------------------------------------- 1 | # encoding: utf-8 2 | 3 | #-- 4 | # Copyright DataStax, Inc. 5 | # 6 | # Licensed under the Apache License, Version 2.0 (the "License"); 7 | # you may not use this file except in compliance with the License. 8 | # You may obtain a copy of the License at 9 | # 10 | # http://www.apache.org/licenses/LICENSE-2.0 11 | # 12 | # Unless required by applicable law or agreed to in writing, software 13 | # distributed under the License is distributed on an "AS IS" BASIS, 14 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 15 | # See the License for the specific language governing permissions and 16 | # limitations under the License. 17 | #++ 18 | 19 | module Cassandra 20 | class Cluster 21 | class Schema 22 | # @private 23 | module ReplicationStrategies 24 | # @private 25 | class None 26 | def replication_map(token_hosts, token_ring, replication_options) 27 | replication_map = ::Hash.new 28 | 29 | token_hosts.each do |token, host| 30 | replication_map[token] = [host].freeze 31 | end 32 | 33 | replication_map 34 | end 35 | end 36 | end 37 | end 38 | end 39 | end 40 | -------------------------------------------------------------------------------- /lib/cassandra/cluster/schema/replication_strategies/simple.rb: -------------------------------------------------------------------------------- 1 | # encoding: utf-8 2 | 3 | #-- 4 | # Copyright DataStax, Inc. 5 | # 6 | # Licensed under the Apache License, Version 2.0 (the "License"); 7 | # you may not use this file except in compliance with the License. 8 | # You may obtain a copy of the License at 9 | # 10 | # http://www.apache.org/licenses/LICENSE-2.0 11 | # 12 | # Unless required by applicable law or agreed to in writing, software 13 | # distributed under the License is distributed on an "AS IS" BASIS, 14 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 15 | # See the License for the specific language governing permissions and 16 | # limitations under the License. 17 | #++ 18 | 19 | module Cassandra 20 | class Cluster 21 | class Schema 22 | # @private 23 | module ReplicationStrategies 24 | # @private 25 | class Simple 26 | def replication_map(token_hosts, token_ring, replication_options) 27 | factor = Integer(replication_options['replication_factor']) 28 | size = token_ring.size 29 | factor = size if size < factor 30 | replication_map = ::Hash.new 31 | 32 | hosts_ring = token_ring.map { |t| token_hosts[t] } 33 | token_ring.each_with_index do |token, i| 34 | candidates = hosts_ring.cycle(2 * size).drop(i).take(size).uniq 35 | replication_map[token] = candidates.take(factor).freeze 36 | end 37 | 38 | replication_map 39 | end 40 | end 41 | end 42 | end 43 | end 44 | end 45 | -------------------------------------------------------------------------------- /lib/cassandra/load_balancing/policies.rb: -------------------------------------------------------------------------------- 1 | #-- 2 | # Copyright DataStax, Inc. 3 | # 4 | # Licensed under the Apache License, Version 2.0 (the "License"); 5 | # you may not use this file except in compliance with the License. 6 | # You may obtain a copy of the License at 7 | # 8 | # http://www.apache.org/licenses/LICENSE-2.0 9 | # 10 | # Unless required by applicable law or agreed to in writing, software 11 | # distributed under the License is distributed on an "AS IS" BASIS, 12 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | # See the License for the specific language governing permissions and 14 | # limitations under the License. 15 | #++ 16 | 17 | require 'cassandra/load_balancing/policies/dc_aware_round_robin' 18 | require 'cassandra/load_balancing/policies/round_robin' 19 | require 'cassandra/load_balancing/policies/token_aware' 20 | require 'cassandra/load_balancing/policies/white_list' 21 | -------------------------------------------------------------------------------- /lib/cassandra/null_logger.rb: -------------------------------------------------------------------------------- 1 | # encoding: utf-8 2 | 3 | #-- 4 | # Copyright DataStax, Inc. 5 | # 6 | # Licensed under the Apache License, Version 2.0 (the "License"); 7 | # you may not use this file except in compliance with the License. 8 | # You may obtain a copy of the License at 9 | # 10 | # http://www.apache.org/licenses/LICENSE-2.0 11 | # 12 | # Unless required by applicable law or agreed to in writing, software 13 | # distributed under the License is distributed on an "AS IS" BASIS, 14 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 15 | # See the License for the specific language governing permissions and 16 | # limitations under the License. 17 | #++ 18 | 19 | module Cassandra 20 | # @private 21 | class NullLogger 22 | def close(*); end 23 | 24 | def debug(*); end 25 | 26 | def debug? 27 | false 28 | end 29 | 30 | def error(*); end 31 | 32 | def error? 33 | false 34 | end 35 | 36 | def fatal(*); end 37 | 38 | def fatal? 39 | false 40 | end 41 | 42 | def info(*); end 43 | 44 | def info? 45 | false 46 | end 47 | 48 | def unknown(*); end 49 | 50 | def warn(*); end 51 | 52 | def warn? 53 | false 54 | end 55 | end 56 | end 57 | -------------------------------------------------------------------------------- /lib/cassandra/protocol/request.rb: -------------------------------------------------------------------------------- 1 | # encoding: utf-8 2 | 3 | #-- 4 | # Copyright DataStax, Inc. 5 | # 6 | # Licensed under the Apache License, Version 2.0 (the "License"); 7 | # you may not use this file except in compliance with the License. 8 | # You may obtain a copy of the License at 9 | # 10 | # http://www.apache.org/licenses/LICENSE-2.0 11 | # 12 | # Unless required by applicable law or agreed to in writing, software 13 | # distributed under the License is distributed on an "AS IS" BASIS, 14 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 15 | # See the License for the specific language governing permissions and 16 | # limitations under the License. 17 | #++ 18 | 19 | module Cassandra 20 | module Protocol 21 | class Request 22 | extend AttrBoolean 23 | 24 | attr_reader :opcode 25 | attr_boolean :trace 26 | 27 | def initialize(opcode, trace = false) 28 | @opcode = opcode 29 | @trace = trace 30 | end 31 | 32 | def compressable? 33 | true 34 | end 35 | 36 | def payload? 37 | false 38 | end 39 | end 40 | end 41 | end 42 | -------------------------------------------------------------------------------- /lib/cassandra/protocol/requests/auth_response_request.rb: -------------------------------------------------------------------------------- 1 | # encoding: utf-8 2 | 3 | #-- 4 | # Copyright DataStax, Inc. 5 | # 6 | # Licensed under the Apache License, Version 2.0 (the "License"); 7 | # you may not use this file except in compliance with the License. 8 | # You may obtain a copy of the License at 9 | # 10 | # http://www.apache.org/licenses/LICENSE-2.0 11 | # 12 | # Unless required by applicable law or agreed to in writing, software 13 | # distributed under the License is distributed on an "AS IS" BASIS, 14 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 15 | # See the License for the specific language governing permissions and 16 | # limitations under the License. 17 | #++ 18 | 19 | module Cassandra 20 | module Protocol 21 | class AuthResponseRequest < Request 22 | attr_reader :token 23 | 24 | def initialize(token) 25 | super(0x0f) 26 | @token = token 27 | end 28 | 29 | def write(buffer, protocol_version, encoder) 30 | buffer.append_bytes(@token) 31 | end 32 | 33 | def to_s 34 | %(AUTH_RESPONSE #{@token.bytesize}) 35 | end 36 | 37 | def eql?(other) 38 | token == other.token 39 | end 40 | alias == eql? 41 | 42 | def hash 43 | @h ||= begin 44 | h = 17 45 | h = 31 * h + @token.hash 46 | h 47 | end 48 | end 49 | end 50 | end 51 | end 52 | -------------------------------------------------------------------------------- /lib/cassandra/protocol/requests/credentials_request.rb: -------------------------------------------------------------------------------- 1 | # encoding: utf-8 2 | 3 | #-- 4 | # Copyright DataStax, Inc. 5 | # 6 | # Licensed under the Apache License, Version 2.0 (the "License"); 7 | # you may not use this file except in compliance with the License. 8 | # You may obtain a copy of the License at 9 | # 10 | # http://www.apache.org/licenses/LICENSE-2.0 11 | # 12 | # Unless required by applicable law or agreed to in writing, software 13 | # distributed under the License is distributed on an "AS IS" BASIS, 14 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 15 | # See the License for the specific language governing permissions and 16 | # limitations under the License. 17 | #++ 18 | 19 | module Cassandra 20 | module Protocol 21 | class CredentialsRequest < Request 22 | attr_reader :credentials 23 | 24 | def initialize(credentials) 25 | super(4) 26 | @credentials = credentials.dup.freeze 27 | end 28 | 29 | def write(buffer, protocol_version, encoder) 30 | buffer.append_string_map(@credentials) 31 | end 32 | 33 | def to_s 34 | %(CREDENTIALS #{@credentials}) 35 | end 36 | 37 | def eql?(rq) 38 | rq.is_a?(self.class) && rq.credentials.eql?(@credentials) 39 | end 40 | alias == eql? 41 | 42 | def hash 43 | @h ||= begin 44 | h = 17 45 | h = 31 * h + @credentials.hash 46 | h 47 | end 48 | end 49 | end 50 | end 51 | end 52 | -------------------------------------------------------------------------------- /lib/cassandra/protocol/requests/options_request.rb: -------------------------------------------------------------------------------- 1 | # encoding: utf-8 2 | 3 | #-- 4 | # Copyright DataStax, Inc. 5 | # 6 | # Licensed under the Apache License, Version 2.0 (the "License"); 7 | # you may not use this file except in compliance with the License. 8 | # You may obtain a copy of the License at 9 | # 10 | # http://www.apache.org/licenses/LICENSE-2.0 11 | # 12 | # Unless required by applicable law or agreed to in writing, software 13 | # distributed under the License is distributed on an "AS IS" BASIS, 14 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 15 | # See the License for the specific language governing permissions and 16 | # limitations under the License. 17 | #++ 18 | 19 | module Cassandra 20 | module Protocol 21 | class OptionsRequest < Request 22 | def initialize 23 | super(5) 24 | end 25 | 26 | def compressable? 27 | false 28 | end 29 | 30 | def write(buffer, protocol_version, encoder) 31 | buffer 32 | end 33 | 34 | def to_s 35 | %(OPTIONS) 36 | end 37 | end 38 | end 39 | end 40 | -------------------------------------------------------------------------------- /lib/cassandra/protocol/requests/register_request.rb: -------------------------------------------------------------------------------- 1 | # encoding: utf-8 2 | 3 | #-- 4 | # Copyright DataStax, Inc. 5 | # 6 | # Licensed under the Apache License, Version 2.0 (the "License"); 7 | # you may not use this file except in compliance with the License. 8 | # You may obtain a copy of the License at 9 | # 10 | # http://www.apache.org/licenses/LICENSE-2.0 11 | # 12 | # Unless required by applicable law or agreed to in writing, software 13 | # distributed under the License is distributed on an "AS IS" BASIS, 14 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 15 | # See the License for the specific language governing permissions and 16 | # limitations under the License. 17 | #++ 18 | 19 | module Cassandra 20 | module Protocol 21 | class RegisterRequest < Request 22 | attr_reader :events 23 | 24 | def initialize(*events) 25 | super(11) 26 | @events = events 27 | end 28 | 29 | def write(buffer, protocol_version, encoder) 30 | buffer.append_string_list(@events) 31 | end 32 | 33 | def to_s 34 | %(REGISTER #{@events}) 35 | end 36 | end 37 | end 38 | end 39 | -------------------------------------------------------------------------------- /lib/cassandra/protocol/requests/startup_request.rb: -------------------------------------------------------------------------------- 1 | # encoding: utf-8 2 | 3 | #-- 4 | # Copyright DataStax, Inc. 5 | # 6 | # Licensed under the Apache License, Version 2.0 (the "License"); 7 | # you may not use this file except in compliance with the License. 8 | # You may obtain a copy of the License at 9 | # 10 | # http://www.apache.org/licenses/LICENSE-2.0 11 | # 12 | # Unless required by applicable law or agreed to in writing, software 13 | # distributed under the License is distributed on an "AS IS" BASIS, 14 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 15 | # See the License for the specific language governing permissions and 16 | # limitations under the License. 17 | #++ 18 | 19 | module Cassandra 20 | module Protocol 21 | class StartupRequest < Request 22 | # @private 23 | CQL_VERSION = 'CQL_VERSION'.freeze 24 | # @private 25 | COMPRESSION = 'COMPRESSION'.freeze 26 | 27 | attr_reader :options 28 | 29 | def initialize(cql_version, compression = nil) 30 | super(1) 31 | raise ArgumentError, "Invalid CQL version: #{cql_version.inspect}" unless cql_version 32 | @options = {CQL_VERSION => cql_version} 33 | @options[COMPRESSION] = compression if compression 34 | end 35 | 36 | def compressable? 37 | false 38 | end 39 | 40 | def write(buffer, protocol_version, encoder) 41 | buffer.append_string_map(@options) 42 | end 43 | 44 | def to_s 45 | %(STARTUP #{@options}) 46 | end 47 | end 48 | end 49 | end 50 | -------------------------------------------------------------------------------- /lib/cassandra/protocol/requests/void_query_request.rb: -------------------------------------------------------------------------------- 1 | # encoding: utf-8 2 | 3 | #-- 4 | # Copyright DataStax, Inc. 5 | # 6 | # Licensed under the Apache License, Version 2.0 (the "License"); 7 | # you may not use this file except in compliance with the License. 8 | # You may obtain a copy of the License at 9 | # 10 | # http://www.apache.org/licenses/LICENSE-2.0 11 | # 12 | # Unless required by applicable law or agreed to in writing, software 13 | # distributed under the License is distributed on an "AS IS" BASIS, 14 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 15 | # See the License for the specific language governing permissions and 16 | # limitations under the License. 17 | #++ 18 | 19 | module Cassandra 20 | module Protocol 21 | class VoidQueryRequest 22 | end 23 | end 24 | end 25 | -------------------------------------------------------------------------------- /lib/cassandra/protocol/response.rb: -------------------------------------------------------------------------------- 1 | # encoding: utf-8 2 | 3 | #-- 4 | # Copyright DataStax, Inc. 5 | # 6 | # Licensed under the Apache License, Version 2.0 (the "License"); 7 | # you may not use this file except in compliance with the License. 8 | # You may obtain a copy of the License at 9 | # 10 | # http://www.apache.org/licenses/LICENSE-2.0 11 | # 12 | # Unless required by applicable law or agreed to in writing, software 13 | # distributed under the License is distributed on an "AS IS" BASIS, 14 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 15 | # See the License for the specific language governing permissions and 16 | # limitations under the License. 17 | #++ 18 | 19 | module Cassandra 20 | module Protocol 21 | class Response 22 | # @private 23 | RESPONSE_TYPES = [ 24 | # populated by subclasses 25 | ] 26 | end 27 | end 28 | end 29 | -------------------------------------------------------------------------------- /lib/cassandra/protocol/responses/auth_challenge_response.rb: -------------------------------------------------------------------------------- 1 | # encoding: utf-8 2 | 3 | #-- 4 | # Copyright DataStax, Inc. 5 | # 6 | # Licensed under the Apache License, Version 2.0 (the "License"); 7 | # you may not use this file except in compliance with the License. 8 | # You may obtain a copy of the License at 9 | # 10 | # http://www.apache.org/licenses/LICENSE-2.0 11 | # 12 | # Unless required by applicable law or agreed to in writing, software 13 | # distributed under the License is distributed on an "AS IS" BASIS, 14 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 15 | # See the License for the specific language governing permissions and 16 | # limitations under the License. 17 | #++ 18 | 19 | module Cassandra 20 | module Protocol 21 | class AuthChallengeResponse < Response 22 | # @private 23 | RESPONSE_TYPES[0x0e] = self 24 | 25 | attr_reader :token 26 | 27 | def initialize(token) 28 | @token = token 29 | end 30 | 31 | def to_s 32 | %(AUTH_CHALLENGE #{@token.bytesize}) 33 | end 34 | end 35 | end 36 | end 37 | -------------------------------------------------------------------------------- /lib/cassandra/protocol/responses/auth_success_response.rb: -------------------------------------------------------------------------------- 1 | # encoding: utf-8 2 | 3 | #-- 4 | # Copyright DataStax, Inc. 5 | # 6 | # Licensed under the Apache License, Version 2.0 (the "License"); 7 | # you may not use this file except in compliance with the License. 8 | # You may obtain a copy of the License at 9 | # 10 | # http://www.apache.org/licenses/LICENSE-2.0 11 | # 12 | # Unless required by applicable law or agreed to in writing, software 13 | # distributed under the License is distributed on an "AS IS" BASIS, 14 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 15 | # See the License for the specific language governing permissions and 16 | # limitations under the License. 17 | #++ 18 | 19 | module Cassandra 20 | module Protocol 21 | class AuthSuccessResponse < Response 22 | # @private 23 | RESPONSE_TYPES[0x10] = self 24 | 25 | attr_reader :token 26 | 27 | def initialize(token) 28 | @token = token 29 | end 30 | 31 | def to_s 32 | %(AUTH_SUCCESS #{@token && @token.bytesize}) 33 | end 34 | end 35 | end 36 | end 37 | -------------------------------------------------------------------------------- /lib/cassandra/protocol/responses/authenticate_response.rb: -------------------------------------------------------------------------------- 1 | # encoding: utf-8 2 | 3 | #-- 4 | # Copyright DataStax, Inc. 5 | # 6 | # Licensed under the Apache License, Version 2.0 (the "License"); 7 | # you may not use this file except in compliance with the License. 8 | # You may obtain a copy of the License at 9 | # 10 | # http://www.apache.org/licenses/LICENSE-2.0 11 | # 12 | # Unless required by applicable law or agreed to in writing, software 13 | # distributed under the License is distributed on an "AS IS" BASIS, 14 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 15 | # See the License for the specific language governing permissions and 16 | # limitations under the License. 17 | #++ 18 | 19 | module Cassandra 20 | module Protocol 21 | class AuthenticateResponse < Response 22 | # @private 23 | RESPONSE_TYPES[0x03] = self 24 | 25 | attr_reader :authentication_class 26 | 27 | def initialize(authentication_class) 28 | @authentication_class = authentication_class 29 | end 30 | 31 | def to_s 32 | %(AUTHENTICATE #{authentication_class}) 33 | end 34 | end 35 | end 36 | end 37 | -------------------------------------------------------------------------------- /lib/cassandra/protocol/responses/event_response.rb: -------------------------------------------------------------------------------- 1 | # encoding: utf-8 2 | 3 | #-- 4 | # Copyright DataStax, Inc. 5 | # 6 | # Licensed under the Apache License, Version 2.0 (the "License"); 7 | # you may not use this file except in compliance with the License. 8 | # You may obtain a copy of the License at 9 | # 10 | # http://www.apache.org/licenses/LICENSE-2.0 11 | # 12 | # Unless required by applicable law or agreed to in writing, software 13 | # distributed under the License is distributed on an "AS IS" BASIS, 14 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 15 | # See the License for the specific language governing permissions and 16 | # limitations under the License. 17 | #++ 18 | 19 | module Cassandra 20 | module Protocol 21 | class EventResponse < ResultResponse 22 | # @private 23 | RESPONSE_TYPES[0x0c] = self 24 | # @private 25 | EVENT_TYPES = { 26 | # populated by subclasses 27 | } 28 | end 29 | end 30 | end 31 | -------------------------------------------------------------------------------- /lib/cassandra/protocol/responses/ready_response.rb: -------------------------------------------------------------------------------- 1 | # encoding: utf-8 2 | 3 | #-- 4 | # Copyright DataStax, Inc. 5 | # 6 | # Licensed under the Apache License, Version 2.0 (the "License"); 7 | # you may not use this file except in compliance with the License. 8 | # You may obtain a copy of the License at 9 | # 10 | # http://www.apache.org/licenses/LICENSE-2.0 11 | # 12 | # Unless required by applicable law or agreed to in writing, software 13 | # distributed under the License is distributed on an "AS IS" BASIS, 14 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 15 | # See the License for the specific language governing permissions and 16 | # limitations under the License. 17 | #++ 18 | 19 | module Cassandra 20 | module Protocol 21 | class ReadyResponse < Response 22 | # @private 23 | RESPONSE_TYPES[0x02] = self 24 | 25 | def eql?(rs) 26 | rs.is_a?(self.class) 27 | end 28 | alias == eql? 29 | 30 | def hash 31 | @h ||= begin 32 | h = 17 33 | h = 31 * h + 'READY'.hash 34 | h 35 | end 36 | end 37 | 38 | def to_s 39 | 'READY' 40 | end 41 | end 42 | end 43 | end 44 | -------------------------------------------------------------------------------- /lib/cassandra/protocol/responses/result_response.rb: -------------------------------------------------------------------------------- 1 | # encoding: utf-8 2 | 3 | #-- 4 | # Copyright DataStax, Inc. 5 | # 6 | # Licensed under the Apache License, Version 2.0 (the "License"); 7 | # you may not use this file except in compliance with the License. 8 | # You may obtain a copy of the License at 9 | # 10 | # http://www.apache.org/licenses/LICENSE-2.0 11 | # 12 | # Unless required by applicable law or agreed to in writing, software 13 | # distributed under the License is distributed on an "AS IS" BASIS, 14 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 15 | # See the License for the specific language governing permissions and 16 | # limitations under the License. 17 | #++ 18 | 19 | module Cassandra 20 | module Protocol 21 | class ResultResponse < Response 22 | # @private 23 | RESPONSE_TYPES[0x08] = self 24 | # @private 25 | RESULT_TYPES = [ 26 | # populated by subclasses 27 | ] 28 | 29 | attr_reader :custom_payload, :warnings, :trace_id 30 | 31 | def initialize(custom_payload, warnings, trace_id) 32 | @custom_payload = custom_payload 33 | @warnings = warnings 34 | @trace_id = trace_id 35 | end 36 | 37 | def void? 38 | false 39 | end 40 | end 41 | end 42 | end 43 | -------------------------------------------------------------------------------- /lib/cassandra/protocol/responses/rows_result_response.rb: -------------------------------------------------------------------------------- 1 | # encoding: utf-8 2 | 3 | #-- 4 | # Copyright DataStax, Inc. 5 | # 6 | # Licensed under the Apache License, Version 2.0 (the "License"); 7 | # you may not use this file except in compliance with the License. 8 | # You may obtain a copy of the License at 9 | # 10 | # http://www.apache.org/licenses/LICENSE-2.0 11 | # 12 | # Unless required by applicable law or agreed to in writing, software 13 | # distributed under the License is distributed on an "AS IS" BASIS, 14 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 15 | # See the License for the specific language governing permissions and 16 | # limitations under the License. 17 | #++ 18 | 19 | module Cassandra 20 | module Protocol 21 | class RowsResultResponse < ResultResponse 22 | # @private 23 | RESULT_TYPES[0x02] = self 24 | 25 | attr_reader :rows, :metadata, :paging_state 26 | 27 | def initialize(custom_payload, warnings, rows, metadata, paging_state, trace_id) 28 | super(custom_payload, warnings, trace_id) 29 | @rows = rows 30 | @metadata = metadata 31 | @paging_state = paging_state 32 | end 33 | 34 | def to_s 35 | %(RESULT ROWS #{@metadata} #{@rows}) 36 | end 37 | end 38 | end 39 | end 40 | -------------------------------------------------------------------------------- /lib/cassandra/protocol/responses/set_keyspace_result_response.rb: -------------------------------------------------------------------------------- 1 | # encoding: utf-8 2 | 3 | #-- 4 | # Copyright DataStax, Inc. 5 | # 6 | # Licensed under the Apache License, Version 2.0 (the "License"); 7 | # you may not use this file except in compliance with the License. 8 | # You may obtain a copy of the License at 9 | # 10 | # http://www.apache.org/licenses/LICENSE-2.0 11 | # 12 | # Unless required by applicable law or agreed to in writing, software 13 | # distributed under the License is distributed on an "AS IS" BASIS, 14 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 15 | # See the License for the specific language governing permissions and 16 | # limitations under the License. 17 | #++ 18 | 19 | module Cassandra 20 | module Protocol 21 | class SetKeyspaceResultResponse < ResultResponse 22 | # @private 23 | RESULT_TYPES[0x03] = self 24 | 25 | attr_reader :keyspace 26 | 27 | def initialize(custom_payload, warnings, keyspace, trace_id) 28 | super(custom_payload, warnings, trace_id) 29 | @keyspace = keyspace 30 | end 31 | 32 | def to_s 33 | %(RESULT SET_KEYSPACE "#{@keyspace}") 34 | end 35 | end 36 | end 37 | end 38 | -------------------------------------------------------------------------------- /lib/cassandra/protocol/responses/status_change_event_response.rb: -------------------------------------------------------------------------------- 1 | # encoding: utf-8 2 | 3 | #-- 4 | # Copyright DataStax, Inc. 5 | # 6 | # Licensed under the Apache License, Version 2.0 (the "License"); 7 | # you may not use this file except in compliance with the License. 8 | # You may obtain a copy of the License at 9 | # 10 | # http://www.apache.org/licenses/LICENSE-2.0 11 | # 12 | # Unless required by applicable law or agreed to in writing, software 13 | # distributed under the License is distributed on an "AS IS" BASIS, 14 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 15 | # See the License for the specific language governing permissions and 16 | # limitations under the License. 17 | #++ 18 | 19 | module Cassandra 20 | module Protocol 21 | class StatusChangeEventResponse < EventResponse 22 | TYPE = 'STATUS_CHANGE'.freeze 23 | 24 | # @private 25 | EVENT_TYPES[TYPE] = self 26 | 27 | attr_reader :type, :change, :address, :port 28 | 29 | def initialize(*args) 30 | @change, @address, @port = args 31 | @type = TYPE 32 | end 33 | 34 | def to_s 35 | %(EVENT #{@type} #{@change} #{@address}:#{@port}) 36 | end 37 | end 38 | end 39 | end 40 | -------------------------------------------------------------------------------- /lib/cassandra/protocol/responses/supported_response.rb: -------------------------------------------------------------------------------- 1 | # encoding: utf-8 2 | 3 | #-- 4 | # Copyright DataStax, Inc. 5 | # 6 | # Licensed under the Apache License, Version 2.0 (the "License"); 7 | # you may not use this file except in compliance with the License. 8 | # You may obtain a copy of the License at 9 | # 10 | # http://www.apache.org/licenses/LICENSE-2.0 11 | # 12 | # Unless required by applicable law or agreed to in writing, software 13 | # distributed under the License is distributed on an "AS IS" BASIS, 14 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 15 | # See the License for the specific language governing permissions and 16 | # limitations under the License. 17 | #++ 18 | 19 | module Cassandra 20 | module Protocol 21 | class SupportedResponse < Response 22 | # @private 23 | RESPONSE_TYPES[0x06] = self 24 | 25 | attr_reader :options 26 | 27 | def initialize(options) 28 | @options = options 29 | end 30 | 31 | def to_s 32 | %(SUPPORTED #{options}) 33 | end 34 | end 35 | end 36 | end 37 | -------------------------------------------------------------------------------- /lib/cassandra/protocol/responses/topology_change_event_response.rb: -------------------------------------------------------------------------------- 1 | # encoding: utf-8 2 | 3 | #-- 4 | # Copyright DataStax, Inc. 5 | # 6 | # Licensed under the Apache License, Version 2.0 (the "License"); 7 | # you may not use this file except in compliance with the License. 8 | # You may obtain a copy of the License at 9 | # 10 | # http://www.apache.org/licenses/LICENSE-2.0 11 | # 12 | # Unless required by applicable law or agreed to in writing, software 13 | # distributed under the License is distributed on an "AS IS" BASIS, 14 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 15 | # See the License for the specific language governing permissions and 16 | # limitations under the License. 17 | #++ 18 | 19 | module Cassandra 20 | module Protocol 21 | class TopologyChangeEventResponse < StatusChangeEventResponse 22 | TYPE = 'TOPOLOGY_CHANGE'.freeze 23 | 24 | # @private 25 | EVENT_TYPES[TYPE] = self 26 | 27 | def initialize(*args) 28 | super 29 | @type = TYPE 30 | end 31 | end 32 | end 33 | end 34 | -------------------------------------------------------------------------------- /lib/cassandra/protocol/responses/void_result_response.rb: -------------------------------------------------------------------------------- 1 | # encoding: utf-8 2 | 3 | #-- 4 | # Copyright DataStax, Inc. 5 | # 6 | # Licensed under the Apache License, Version 2.0 (the "License"); 7 | # you may not use this file except in compliance with the License. 8 | # You may obtain a copy of the License at 9 | # 10 | # http://www.apache.org/licenses/LICENSE-2.0 11 | # 12 | # Unless required by applicable law or agreed to in writing, software 13 | # distributed under the License is distributed on an "AS IS" BASIS, 14 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 15 | # See the License for the specific language governing permissions and 16 | # limitations under the License. 17 | #++ 18 | 19 | module Cassandra 20 | module Protocol 21 | class VoidResultResponse < ResultResponse 22 | # @private 23 | RESULT_TYPES[0x01] = self 24 | 25 | def to_s 26 | %(RESULT VOID) 27 | end 28 | 29 | def void? 30 | true 31 | end 32 | end 33 | end 34 | end 35 | -------------------------------------------------------------------------------- /lib/cassandra/reconnection/policies.rb: -------------------------------------------------------------------------------- 1 | # encoding: utf-8 2 | 3 | #-- 4 | # Copyright DataStax, Inc. 5 | # 6 | # Licensed under the Apache License, Version 2.0 (the "License"); 7 | # you may not use this file except in compliance with the License. 8 | # You may obtain a copy of the License at 9 | # 10 | # http://www.apache.org/licenses/LICENSE-2.0 11 | # 12 | # Unless required by applicable law or agreed to in writing, software 13 | # distributed under the License is distributed on an "AS IS" BASIS, 14 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 15 | # See the License for the specific language governing permissions and 16 | # limitations under the License. 17 | #++ 18 | 19 | require 'cassandra/reconnection/policies/constant' 20 | require 'cassandra/reconnection/policies/exponential' 21 | -------------------------------------------------------------------------------- /lib/cassandra/reconnection/policies/constant.rb: -------------------------------------------------------------------------------- 1 | # encoding: utf-8 2 | 3 | #-- 4 | # Copyright DataStax, Inc. 5 | # 6 | # Licensed under the Apache License, Version 2.0 (the "License"); 7 | # you may not use this file except in compliance with the License. 8 | # You may obtain a copy of the License at 9 | # 10 | # http://www.apache.org/licenses/LICENSE-2.0 11 | # 12 | # Unless required by applicable law or agreed to in writing, software 13 | # distributed under the License is distributed on an "AS IS" BASIS, 14 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 15 | # See the License for the specific language governing permissions and 16 | # limitations under the License. 17 | #++ 18 | 19 | module Cassandra 20 | module Reconnection 21 | module Policies 22 | # A reconnection policy that returns a constant reconnection interval 23 | class Constant < Policy 24 | # @private 25 | class Schedule 26 | def initialize(interval) 27 | @interval = interval 28 | end 29 | 30 | def next 31 | @interval 32 | end 33 | end 34 | 35 | # @param interval [Numeric] reconnection interval (in seconds) 36 | def initialize(interval) 37 | @schedule = Schedule.new(Float(interval)) 38 | end 39 | 40 | # @return [Cassandra::Reconnection::Schedule] reconnection schedule 41 | # with constant interval 42 | attr_reader :schedule 43 | end 44 | end 45 | end 46 | end 47 | -------------------------------------------------------------------------------- /lib/cassandra/retry/policies.rb: -------------------------------------------------------------------------------- 1 | # encoding: utf-8 2 | 3 | #-- 4 | # Copyright DataStax, Inc. 5 | # 6 | # Licensed under the Apache License, Version 2.0 (the "License"); 7 | # you may not use this file except in compliance with the License. 8 | # You may obtain a copy of the License at 9 | # 10 | # http://www.apache.org/licenses/LICENSE-2.0 11 | # 12 | # Unless required by applicable law or agreed to in writing, software 13 | # distributed under the License is distributed on an "AS IS" BASIS, 14 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 15 | # See the License for the specific language governing permissions and 16 | # limitations under the License. 17 | #++ 18 | 19 | require 'cassandra/retry/policies/default' 20 | require 'cassandra/retry/policies/downgrading_consistency' 21 | require 'cassandra/retry/policies/fallthrough' 22 | -------------------------------------------------------------------------------- /lib/cassandra/retry/policies/fallthrough.rb: -------------------------------------------------------------------------------- 1 | # encoding: utf-8 2 | 3 | #-- 4 | # Copyright DataStax, Inc. 5 | # 6 | # Licensed under the Apache License, Version 2.0 (the "License"); 7 | # you may not use this file except in compliance with the License. 8 | # You may obtain a copy of the License at 9 | # 10 | # http://www.apache.org/licenses/LICENSE-2.0 11 | # 12 | # Unless required by applicable law or agreed to in writing, software 13 | # distributed under the License is distributed on an "AS IS" BASIS, 14 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 15 | # See the License for the specific language governing permissions and 16 | # limitations under the License. 17 | #++ 18 | 19 | module Cassandra 20 | module Retry 21 | module Policies 22 | class Fallthrough 23 | include Policy 24 | 25 | def read_timeout(statement, consistency, required, received, retrieved, retries) 26 | reraise 27 | end 28 | 29 | def write_timeout(statement, consistency, type, required, received, retries) 30 | reraise 31 | end 32 | 33 | def unavailable(statement, consistency, required, alive, retries) 34 | reraise 35 | end 36 | end 37 | end 38 | end 39 | end 40 | -------------------------------------------------------------------------------- /lib/cassandra/statement.rb: -------------------------------------------------------------------------------- 1 | # encoding: utf-8 2 | 3 | #-- 4 | # Copyright DataStax, Inc. 5 | # 6 | # Licensed under the Apache License, Version 2.0 (the "License"); 7 | # you may not use this file except in compliance with the License. 8 | # You may obtain a copy of the License at 9 | # 10 | # http://www.apache.org/licenses/LICENSE-2.0 11 | # 12 | # Unless required by applicable law or agreed to in writing, software 13 | # distributed under the License is distributed on an "AS IS" BASIS, 14 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 15 | # See the License for the specific language governing permissions and 16 | # limitations under the License. 17 | #++ 18 | 19 | module Cassandra 20 | module Statement 21 | # Determines whether or not the statement is safe to retry on timeout 22 | # @return [Boolean] whether the statement is safe to retry on timeout 23 | def idempotent? 24 | !!@idempotent 25 | end 26 | 27 | # @private 28 | def accept(client, options) 29 | raise NotImplementedError, "#{self.class} must implement :accept method" 30 | end 31 | end 32 | end 33 | -------------------------------------------------------------------------------- /lib/cassandra/statements.rb: -------------------------------------------------------------------------------- 1 | # encoding: utf-8 2 | 3 | #-- 4 | # Copyright DataStax, Inc. 5 | # 6 | # Licensed under the Apache License, Version 2.0 (the "License"); 7 | # you may not use this file except in compliance with the License. 8 | # You may obtain a copy of the License at 9 | # 10 | # http://www.apache.org/licenses/LICENSE-2.0 11 | # 12 | # Unless required by applicable law or agreed to in writing, software 13 | # distributed under the License is distributed on an "AS IS" BASIS, 14 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 15 | # See the License for the specific language governing permissions and 16 | # limitations under the License. 17 | #++ 18 | 19 | require 'cassandra/statements/batch' 20 | require 'cassandra/statements/bound' 21 | require 'cassandra/statements/prepared' 22 | require 'cassandra/statements/simple' 23 | require 'cassandra/statements/void' 24 | -------------------------------------------------------------------------------- /lib/cassandra/statements/void.rb: -------------------------------------------------------------------------------- 1 | # encoding: utf-8 2 | 3 | #-- 4 | # Copyright DataStax, Inc. 5 | # 6 | # Licensed under the Apache License, Version 2.0 (the "License"); 7 | # you may not use this file except in compliance with the License. 8 | # You may obtain a copy of the License at 9 | # 10 | # http://www.apache.org/licenses/LICENSE-2.0 11 | # 12 | # Unless required by applicable law or agreed to in writing, software 13 | # distributed under the License is distributed on an "AS IS" BASIS, 14 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 15 | # See the License for the specific language governing permissions and 16 | # limitations under the License. 17 | #++ 18 | 19 | module Cassandra 20 | module Statements 21 | # This statement is passed to {Cassandra::LoadBalancing::Policy#plan} when 22 | # establishing connections and preparing statements 23 | class Void 24 | include Statement 25 | 26 | # @private 27 | def accept(client, options) 28 | nil 29 | end 30 | 31 | # Returns nothing 32 | # @return [nil] there is no cql for the void statement 33 | def cql 34 | nil 35 | end 36 | end 37 | end 38 | end 39 | -------------------------------------------------------------------------------- /lib/cassandra/timestamp_generator/simple.rb: -------------------------------------------------------------------------------- 1 | # encoding: utf-8 2 | 3 | #-- 4 | # Copyright DataStax, Inc. 5 | # 6 | # Licensed under the Apache License, Version 2.0 (the "License"); 7 | # you may not use this file except in compliance with the License. 8 | # You may obtain a copy of the License at 9 | # 10 | # http://www.apache.org/licenses/LICENSE-2.0 11 | # 12 | # Unless required by applicable law or agreed to in writing, software 13 | # distributed under the License is distributed on an "AS IS" BASIS, 14 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 15 | # See the License for the specific language governing permissions and 16 | # limitations under the License. 17 | #++ 18 | 19 | module Cassandra 20 | module TimestampGenerator 21 | # Generate long integer timestamps from current time. This implementation relies on the {::Time} class to return 22 | # microsecond precision time. 23 | # @note It is not appropriate for use with JRuby because its {::Time#now} returns millisecond precision time. 24 | class Simple 25 | include TimestampGenerator 26 | 27 | # Create a new timestamp, as a 64-bit integer. This is just a wrapper around Time::now. 28 | # 29 | # @return [Integer] an integer representing a timestamp in microseconds. 30 | def next 31 | # Use Time.now, which has microsecond precision on MRI (and probably Rubinius) to make an int representing 32 | # client timestamp in protocol requests. 33 | timestamp = ::Time.now 34 | timestamp.tv_sec * 1000000 + timestamp.tv_usec 35 | end 36 | end 37 | end 38 | end 39 | -------------------------------------------------------------------------------- /lib/cassandra/version.rb: -------------------------------------------------------------------------------- 1 | # encoding: utf-8 2 | 3 | #-- 4 | # Copyright DataStax, Inc. 5 | # 6 | # Licensed under the Apache License, Version 2.0 (the "License"); 7 | # you may not use this file except in compliance with the License. 8 | # You may obtain a copy of the License at 9 | # 10 | # http://www.apache.org/licenses/LICENSE-2.0 11 | # 12 | # Unless required by applicable law or agreed to in writing, software 13 | # distributed under the License is distributed on an "AS IS" BASIS, 14 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 15 | # See the License for the specific language governing permissions and 16 | # limitations under the License. 17 | #++ 18 | 19 | module Cassandra 20 | VERSION = '3.2.5'.freeze 21 | end 22 | -------------------------------------------------------------------------------- /lib/datastax/cassandra.rb: -------------------------------------------------------------------------------- 1 | # encoding: utf-8 2 | 3 | #-- 4 | # Copyright DataStax, Inc. 5 | # 6 | # Licensed under the Apache License, Version 2.0 (the "License"); 7 | # you may not use this file except in compliance with the License. 8 | # You may obtain a copy of the License at 9 | # 10 | # http://www.apache.org/licenses/LICENSE-2.0 11 | # 12 | # Unless required by applicable law or agreed to in writing, software 13 | # distributed under the License is distributed on an "AS IS" BASIS, 14 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 15 | # See the License for the specific language governing permissions and 16 | # limitations under the License. 17 | #++ 18 | 19 | module DataStax 20 | @base = __FILE__ + '/../..' 21 | 22 | def self.require(path) 23 | if path.start_with?('cassandra/') 24 | include(path) 25 | else 26 | ::Kernel.require(path) 27 | end 28 | end 29 | 30 | def self.include(path) 31 | path = File.expand_path(path + '.rb', @base) 32 | class_eval(File.read(path), path, 1) 33 | end 34 | 35 | previous = nil 36 | murmur3 = nil 37 | if defined?(::Cassandra) 38 | previous = ::Cassandra 39 | murmur3 = ::Cassandra::Murmur3 40 | Object.send(:remove_const, :Cassandra) 41 | end 42 | include 'cassandra' 43 | murmur3 ||= ::Cassandra::Murmur3 44 | DataStax::Cassandra::Murmur3 = murmur3 45 | Object.send(:remove_const, :Cassandra) if defined?(::Cassandra) 46 | ::Cassandra = previous if previous 47 | end 48 | -------------------------------------------------------------------------------- /spec/cassandra/cluster/schema/replication_strategies/none_spec.rb: -------------------------------------------------------------------------------- 1 | # encoding: utf-8 2 | 3 | #-- 4 | # Copyright DataStax, Inc. 5 | # 6 | # Licensed under the Apache License, Version 2.0 (the "License"); 7 | # you may not use this file except in compliance with the License. 8 | # You may obtain a copy of the License at 9 | # 10 | # http://www.apache.org/licenses/LICENSE-2.0 11 | # 12 | # Unless required by applicable law or agreed to in writing, software 13 | # distributed under the License is distributed on an "AS IS" BASIS, 14 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 15 | # See the License for the specific language governing permissions and 16 | # limitations under the License. 17 | #++ 18 | 19 | require 'spec_helper' 20 | 21 | module Cassandra 22 | class Cluster 23 | class Schema 24 | module ReplicationStrategies 25 | describe(None) do 26 | subject { None.new } 27 | 28 | describe('#replication_map') do 29 | it 'maps tokens to primary replicas only' do 30 | token_hosts = { 31 | '123' => '127.0.0.1', 32 | 'qwe' => '127.0.0.2', 33 | 'asd' => '127.0.0.3', 34 | } 35 | token_ring = [] 36 | replication_options = {} 37 | 38 | expect(subject.replication_map(token_hosts, token_ring, replication_options)).to eq({ 39 | '123' => ['127.0.0.1'], 40 | 'qwe' => ['127.0.0.2'], 41 | 'asd' => ['127.0.0.3'] 42 | }) 43 | end 44 | end 45 | end 46 | end 47 | end 48 | end 49 | end 50 | -------------------------------------------------------------------------------- /spec/cassandra/cluster/schema_spec.rb: -------------------------------------------------------------------------------- 1 | # encoding: utf-8 2 | 3 | #-- 4 | # Copyright DataStax, Inc. 5 | # 6 | # Licensed under the Apache License, Version 2.0 (the "License"); 7 | # you may not use this file except in compliance with the License. 8 | # You may obtain a copy of the License at 9 | # 10 | # http://www.apache.org/licenses/LICENSE-2.0 11 | # 12 | # Unless required by applicable law or agreed to in writing, software 13 | # distributed under the License is distributed on an "AS IS" BASIS, 14 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 15 | # See the License for the specific language governing permissions and 16 | # limitations under the License. 17 | #++ 18 | 19 | require 'spec_helper' 20 | 21 | module Cassandra 22 | class Cluster 23 | describe(Schema) do 24 | subject { Schema.new } 25 | 26 | end 27 | end 28 | end 29 | -------------------------------------------------------------------------------- /spec/cassandra/compression/compressors/lz4_spec.rb: -------------------------------------------------------------------------------- 1 | # encoding: utf-8 2 | 3 | #-- 4 | # Copyright DataStax, Inc. 5 | # 6 | # Licensed under the Apache License, Version 2.0 (the "License"); 7 | # you may not use this file except in compliance with the License. 8 | # You may obtain a copy of the License at 9 | # 10 | # http://www.apache.org/licenses/LICENSE-2.0 11 | # 12 | # Unless required by applicable law or agreed to in writing, software 13 | # distributed under the License is distributed on an "AS IS" BASIS, 14 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 15 | # See the License for the specific language governing permissions and 16 | # limitations under the License. 17 | #++ 18 | 19 | require 'spec_helper' 20 | require 'cassandra/compression/common' 21 | 22 | 23 | module Cassandra 24 | module Compression 25 | module Compressors 26 | begin 27 | require 'cassandra/compression/compressors/lz4' 28 | 29 | describe Lz4 do 30 | include_examples 'compressor', 'lz4', "\x00\x00\x01\xF4[hello\x05\x00Phello" 31 | end 32 | rescue LoadError => e 33 | describe 'Lz4' do 34 | it 'supports LZ4' do 35 | pending e.message 36 | end 37 | end 38 | end 39 | end 40 | end 41 | end 42 | -------------------------------------------------------------------------------- /spec/cassandra/compression/compressors/snappy_spec.rb: -------------------------------------------------------------------------------- 1 | # encoding: utf-8 2 | 3 | #-- 4 | # Copyright DataStax, Inc. 5 | # 6 | # Licensed under the Apache License, Version 2.0 (the "License"); 7 | # you may not use this file except in compliance with the License. 8 | # You may obtain a copy of the License at 9 | # 10 | # http://www.apache.org/licenses/LICENSE-2.0 11 | # 12 | # Unless required by applicable law or agreed to in writing, software 13 | # distributed under the License is distributed on an "AS IS" BASIS, 14 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 15 | # See the License for the specific language governing permissions and 16 | # limitations under the License. 17 | #++ 18 | 19 | require 'spec_helper' 20 | require 'cassandra/compression/common' 21 | 22 | 23 | module Cassandra 24 | module Compression 25 | module Compressors 26 | begin 27 | require 'cassandra/compression/compressors/snappy' 28 | 29 | describe Snappy do 30 | include_examples 'compressor', 'snappy', "\x19\x10helloN\x05\x00" 31 | end 32 | rescue LoadError => e 33 | describe 'Snappy' do 34 | it 'supports Snappy' do 35 | pending e.message 36 | end 37 | end 38 | end 39 | end 40 | end 41 | end 42 | -------------------------------------------------------------------------------- /spec/cassandra/executors/same_thread_spec.rb: -------------------------------------------------------------------------------- 1 | # encoding: utf-8 2 | 3 | #-- 4 | # Copyright DataStax, Inc. 5 | # 6 | # Licensed under the Apache License, Version 2.0 (the "License"); 7 | # you may not use this file except in compliance with the License. 8 | # You may obtain a copy of the License at 9 | # 10 | # http://www.apache.org/licenses/LICENSE-2.0 11 | # 12 | # Unless required by applicable law or agreed to in writing, software 13 | # distributed under the License is distributed on an "AS IS" BASIS, 14 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 15 | # See the License for the specific language governing permissions and 16 | # limitations under the License. 17 | #++ 18 | 19 | require 'spec_helper' 20 | 21 | module Cassandra 22 | module Executors 23 | describe(SameThread) do 24 | let(:executor) { SameThread.new } 25 | 26 | describe('#execute') do 27 | it 'runs the task synchronously' do 28 | complete = false 29 | executor.execute { complete = true } 30 | 31 | expect(complete).to be(true) 32 | end 33 | 34 | it 'ignores errors' do 35 | expect { executor.execute { raise 'error' } }.to_not raise_error 36 | end 37 | end 38 | end 39 | end 40 | end 41 | -------------------------------------------------------------------------------- /spec/cassandra/protocol/cols.yml: -------------------------------------------------------------------------------- 1 | --- 2 | - - vital 3 | - devices 4 | - deviceid 5 | - &3 !ruby/object:Cassandra::Types::Simple 6 | kind: :uuid 7 | - - vital 8 | - devices 9 | - created 10 | - &2 !ruby/object:Cassandra::Types::Simple 11 | kind: :timestamp 12 | - - vital 13 | - devices 14 | - enable 15 | - &1 !ruby/object:Cassandra::Types::Simple 16 | kind: :text 17 | - - vital 18 | - devices 19 | - lastaction 20 | - *1 21 | - - vital 22 | - devices 23 | - modified 24 | - *2 25 | - - vital 26 | - devices 27 | - policyid 28 | - *3 29 | - - vital 30 | - devices 31 | - results 32 | - !ruby/object:Cassandra::Types::Map 33 | kind: :map 34 | key_type: *3 35 | value_type: *1 36 | - - vital 37 | - devices 38 | - risk 39 | - !ruby/object:Cassandra::Types::Simple 40 | kind: :int 41 | - - vital 42 | - devices 43 | - sso 44 | - *1 45 | - - vital 46 | - devices 47 | - validuntil 48 | - *2 49 | -------------------------------------------------------------------------------- /spec/cassandra/protocol/requests/options_request_spec.rb: -------------------------------------------------------------------------------- 1 | # encoding: ascii-8bit 2 | 3 | #-- 4 | # Copyright DataStax, Inc. 5 | # 6 | # Licensed under the Apache License, Version 2.0 (the "License"); 7 | # you may not use this file except in compliance with the License. 8 | # You may obtain a copy of the License at 9 | # 10 | # http://www.apache.org/licenses/LICENSE-2.0 11 | # 12 | # Unless required by applicable law or agreed to in writing, software 13 | # distributed under the License is distributed on an "AS IS" BASIS, 14 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 15 | # See the License for the specific language governing permissions and 16 | # limitations under the License. 17 | #++ 18 | 19 | require 'spec_helper' 20 | 21 | 22 | module Cassandra 23 | module Protocol 24 | describe OptionsRequest do 25 | describe '#compressable?' do 26 | it 'is not compressable' do 27 | described_class.new.should_not be_compressable 28 | end 29 | end 30 | 31 | describe '#write' do 32 | let(:encoder) { double('encoder') } 33 | 34 | it 'encodes an OPTIONS request frame (i.e. an empty body)' do 35 | bytes = OptionsRequest.new.write(CqlByteBuffer.new, 1, encoder) 36 | bytes.should be_empty 37 | end 38 | end 39 | 40 | describe '#to_s' do 41 | it 'returns a pretty string' do 42 | request = OptionsRequest.new 43 | request.to_s.should == 'OPTIONS' 44 | end 45 | end 46 | end 47 | end 48 | end 49 | -------------------------------------------------------------------------------- /spec/cassandra/protocol/requests/register_request_spec.rb: -------------------------------------------------------------------------------- 1 | # encoding: ascii-8bit 2 | 3 | #-- 4 | # Copyright DataStax, Inc. 5 | # 6 | # Licensed under the Apache License, Version 2.0 (the "License"); 7 | # you may not use this file except in compliance with the License. 8 | # You may obtain a copy of the License at 9 | # 10 | # http://www.apache.org/licenses/LICENSE-2.0 11 | # 12 | # Unless required by applicable law or agreed to in writing, software 13 | # distributed under the License is distributed on an "AS IS" BASIS, 14 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 15 | # See the License for the specific language governing permissions and 16 | # limitations under the License. 17 | #++ 18 | 19 | require 'spec_helper' 20 | 21 | 22 | module Cassandra 23 | module Protocol 24 | describe RegisterRequest do 25 | describe '#write' do 26 | let(:encoder) { double('encoder') } 27 | 28 | it 'encodes a REGISTER request frame' do 29 | bytes = RegisterRequest.new('TOPOLOGY_CHANGE', 'STATUS_CHANGE').write(CqlByteBuffer.new, 1, encoder) 30 | bytes.should eql_bytes("\x00\x02\x00\x0fTOPOLOGY_CHANGE\x00\x0dSTATUS_CHANGE") 31 | end 32 | end 33 | 34 | describe '#to_s' do 35 | it 'returns a pretty string' do 36 | request = RegisterRequest.new('TOPOLOGY_CHANGE', 'STATUS_CHANGE') 37 | request.to_s.should == 'REGISTER ["TOPOLOGY_CHANGE", "STATUS_CHANGE"]' 38 | end 39 | end 40 | end 41 | end 42 | end 43 | -------------------------------------------------------------------------------- /spec/cassandra/protocol/responses/auth_challenge_response_spec.rb: -------------------------------------------------------------------------------- 1 | # encoding: ascii-8bit 2 | 3 | #-- 4 | # Copyright DataStax, Inc. 5 | # 6 | # Licensed under the Apache License, Version 2.0 (the "License"); 7 | # you may not use this file except in compliance with the License. 8 | # You may obtain a copy of the License at 9 | # 10 | # http://www.apache.org/licenses/LICENSE-2.0 11 | # 12 | # Unless required by applicable law or agreed to in writing, software 13 | # distributed under the License is distributed on an "AS IS" BASIS, 14 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 15 | # See the License for the specific language governing permissions and 16 | # limitations under the License. 17 | #++ 18 | 19 | require 'spec_helper' 20 | 21 | 22 | module Cassandra 23 | module Protocol 24 | describe AuthChallengeResponse do 25 | describe '#to_s' do 26 | it 'returns a string with number of bytes in the token' do 27 | response = described_class.new('bingbongpong') 28 | response.to_s.should == 'AUTH_CHALLENGE 12' 29 | end 30 | end 31 | end 32 | end 33 | end 34 | -------------------------------------------------------------------------------- /spec/cassandra/protocol/responses/auth_success_response_spec.rb: -------------------------------------------------------------------------------- 1 | # encoding: ascii-8bit 2 | 3 | #-- 4 | # Copyright DataStax, Inc. 5 | # 6 | # Licensed under the Apache License, Version 2.0 (the "License"); 7 | # you may not use this file except in compliance with the License. 8 | # You may obtain a copy of the License at 9 | # 10 | # http://www.apache.org/licenses/LICENSE-2.0 11 | # 12 | # Unless required by applicable law or agreed to in writing, software 13 | # distributed under the License is distributed on an "AS IS" BASIS, 14 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 15 | # See the License for the specific language governing permissions and 16 | # limitations under the License. 17 | #++ 18 | 19 | require 'spec_helper' 20 | 21 | 22 | module Cassandra 23 | module Protocol 24 | describe AuthSuccessResponse do 25 | describe '#to_s' do 26 | it 'returns a string with number of bytes in the token' do 27 | response = described_class.new('bingbongpong') 28 | response.to_s.should == 'AUTH_SUCCESS 12' 29 | end 30 | end 31 | end 32 | end 33 | end 34 | -------------------------------------------------------------------------------- /spec/cassandra/protocol/responses/authenticate_response_spec.rb: -------------------------------------------------------------------------------- 1 | # encoding: ascii-8bit 2 | 3 | #-- 4 | # Copyright DataStax, Inc. 5 | # 6 | # Licensed under the Apache License, Version 2.0 (the "License"); 7 | # you may not use this file except in compliance with the License. 8 | # You may obtain a copy of the License at 9 | # 10 | # http://www.apache.org/licenses/LICENSE-2.0 11 | # 12 | # Unless required by applicable law or agreed to in writing, software 13 | # distributed under the License is distributed on an "AS IS" BASIS, 14 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 15 | # See the License for the specific language governing permissions and 16 | # limitations under the License. 17 | #++ 18 | 19 | require 'spec_helper' 20 | 21 | 22 | module Cassandra 23 | module Protocol 24 | describe AuthenticateResponse do 25 | describe '#to_s' do 26 | it 'returns a string with the authentication class' do 27 | response = described_class.new('org.apache.cassandra.auth.PasswordAuthenticator') 28 | response.to_s.should == 'AUTHENTICATE org.apache.cassandra.auth.PasswordAuthenticator' 29 | end 30 | end 31 | end 32 | end 33 | end 34 | -------------------------------------------------------------------------------- /spec/cassandra/protocol/responses/error_response_spec.rb: -------------------------------------------------------------------------------- 1 | # encoding: ascii-8bit 2 | 3 | #-- 4 | # Copyright DataStax, Inc. 5 | # 6 | # Licensed under the Apache License, Version 2.0 (the "License"); 7 | # you may not use this file except in compliance with the License. 8 | # You may obtain a copy of the License at 9 | # 10 | # http://www.apache.org/licenses/LICENSE-2.0 11 | # 12 | # Unless required by applicable law or agreed to in writing, software 13 | # distributed under the License is distributed on an "AS IS" BASIS, 14 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 15 | # See the License for the specific language governing permissions and 16 | # limitations under the License. 17 | #++ 18 | 19 | require 'spec_helper' 20 | 21 | 22 | module Cassandra 23 | module Protocol 24 | describe ErrorResponse do 25 | describe '#to_s' do 26 | it 'returns a string with the error code and the message' do 27 | response = described_class.new(nil, nil, 0xffff, 'This is an error') 28 | response.to_s.should == 'ERROR 0xFFFF "This is an error"' 29 | end 30 | end 31 | end 32 | end 33 | end 34 | -------------------------------------------------------------------------------- /spec/cassandra/protocol/responses/ready_response_spec.rb: -------------------------------------------------------------------------------- 1 | # encoding: ascii-8bit 2 | 3 | #-- 4 | # Copyright DataStax, Inc. 5 | # 6 | # Licensed under the Apache License, Version 2.0 (the "License"); 7 | # you may not use this file except in compliance with the License. 8 | # You may obtain a copy of the License at 9 | # 10 | # http://www.apache.org/licenses/LICENSE-2.0 11 | # 12 | # Unless required by applicable law or agreed to in writing, software 13 | # distributed under the License is distributed on an "AS IS" BASIS, 14 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 15 | # See the License for the specific language governing permissions and 16 | # limitations under the License. 17 | #++ 18 | 19 | require 'spec_helper' 20 | 21 | 22 | module Cassandra 23 | module Protocol 24 | describe ReadyResponse do 25 | describe '#to_s' do 26 | it 'returns a string' do 27 | described_class.new.to_s.should == 'READY' 28 | end 29 | end 30 | 31 | describe '#eql?' do 32 | it 'is equal to all other ready responses' do 33 | described_class.new.should eql(described_class.new) 34 | end 35 | 36 | it 'aliased as ==' do 37 | described_class.new.should == described_class.new 38 | end 39 | end 40 | 41 | describe '#hash' do 42 | it 'has the same hash code as all other ready responses' do 43 | described_class.new.hash.should == described_class.new.hash 44 | end 45 | end 46 | end 47 | end 48 | end 49 | -------------------------------------------------------------------------------- /spec/cassandra/protocol/responses/rows_result_response_spec.rb: -------------------------------------------------------------------------------- 1 | # encoding: ascii-8bit 2 | 3 | #-- 4 | # Copyright DataStax, Inc. 5 | # 6 | # Licensed under the Apache License, Version 2.0 (the "License"); 7 | # you may not use this file except in compliance with the License. 8 | # You may obtain a copy of the License at 9 | # 10 | # http://www.apache.org/licenses/LICENSE-2.0 11 | # 12 | # Unless required by applicable law or agreed to in writing, software 13 | # distributed under the License is distributed on an "AS IS" BASIS, 14 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 15 | # See the License for the specific language governing permissions and 16 | # limitations under the License. 17 | #++ 18 | 19 | require 'spec_helper' 20 | 21 | 22 | module Cassandra 23 | module Protocol 24 | describe RowsResultResponse do 25 | describe '#void?' do 26 | it 'is not void' do 27 | response = RowsResultResponse.new(nil, nil, [{'col' => 'foo'}], [['ks', 'tbl', 'col', :varchar]], nil, nil) 28 | response.should_not be_void 29 | end 30 | end 31 | 32 | describe '#to_s' do 33 | it 'returns a string with metadata and rows' do 34 | response = RowsResultResponse.new(nil, nil, [{'col' => 'foo'}], [['ks', 'tbl', 'col', :varchar]], nil, nil) 35 | response.to_s.should == 'RESULT ROWS [["ks", "tbl", "col", :varchar]] [{"col"=>"foo"}]' 36 | end 37 | end 38 | end 39 | end 40 | end 41 | -------------------------------------------------------------------------------- /spec/cassandra/protocol/responses/set_keyspace_result_response_spec.rb: -------------------------------------------------------------------------------- 1 | # encoding: ascii-8bit 2 | 3 | #-- 4 | # Copyright DataStax, Inc. 5 | # 6 | # Licensed under the Apache License, Version 2.0 (the "License"); 7 | # you may not use this file except in compliance with the License. 8 | # You may obtain a copy of the License at 9 | # 10 | # http://www.apache.org/licenses/LICENSE-2.0 11 | # 12 | # Unless required by applicable law or agreed to in writing, software 13 | # distributed under the License is distributed on an "AS IS" BASIS, 14 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 15 | # See the License for the specific language governing permissions and 16 | # limitations under the License. 17 | #++ 18 | 19 | require 'spec_helper' 20 | 21 | 22 | module Cassandra 23 | module Protocol 24 | describe SetKeyspaceResultResponse do 25 | describe '#void?' do 26 | it 'is not void' do 27 | response = described_class.new(nil, nil, 'system', nil) 28 | response.should_not be_void 29 | end 30 | end 31 | 32 | describe '#to_s' do 33 | it 'returns a string with the keyspace' do 34 | response = described_class.new(nil, nil, 'system', nil) 35 | response.to_s.should == 'RESULT SET_KEYSPACE "system"' 36 | end 37 | end 38 | end 39 | end 40 | end 41 | -------------------------------------------------------------------------------- /spec/cassandra/protocol/responses/status_change_event_response_spec.rb: -------------------------------------------------------------------------------- 1 | # encoding: ascii-8bit 2 | 3 | #-- 4 | # Copyright DataStax, Inc. 5 | # 6 | # Licensed under the Apache License, Version 2.0 (the "License"); 7 | # you may not use this file except in compliance with the License. 8 | # You may obtain a copy of the License at 9 | # 10 | # http://www.apache.org/licenses/LICENSE-2.0 11 | # 12 | # Unless required by applicable law or agreed to in writing, software 13 | # distributed under the License is distributed on an "AS IS" BASIS, 14 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 15 | # See the License for the specific language governing permissions and 16 | # limitations under the License. 17 | #++ 18 | 19 | require 'spec_helper' 20 | 21 | 22 | module Cassandra 23 | module Protocol 24 | describe StatusChangeEventResponse do 25 | describe '#to_s' do 26 | it 'returns a string that includes the change, address and port' do 27 | response = described_class.new('DOWN', IPAddr.new('0.0.0.0'), 9042) 28 | response.to_s.should == 'EVENT STATUS_CHANGE DOWN 0.0.0.0:9042' 29 | end 30 | end 31 | end 32 | end 33 | end 34 | -------------------------------------------------------------------------------- /spec/cassandra/protocol/responses/supported_response_spec.rb: -------------------------------------------------------------------------------- 1 | # encoding: ascii-8bit 2 | 3 | #-- 4 | # Copyright DataStax, Inc. 5 | # 6 | # Licensed under the Apache License, Version 2.0 (the "License"); 7 | # you may not use this file except in compliance with the License. 8 | # You may obtain a copy of the License at 9 | # 10 | # http://www.apache.org/licenses/LICENSE-2.0 11 | # 12 | # Unless required by applicable law or agreed to in writing, software 13 | # distributed under the License is distributed on an "AS IS" BASIS, 14 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 15 | # See the License for the specific language governing permissions and 16 | # limitations under the License. 17 | #++ 18 | 19 | require 'spec_helper' 20 | 21 | 22 | module Cassandra 23 | module Protocol 24 | describe SupportedResponse do 25 | describe '#to_s' do 26 | it 'returns a string with the options' do 27 | response = described_class.new('CQL_VERSION' => ['3.0.0'], 'COMPRESSION' => []) 28 | response.to_s.should == 'SUPPORTED {"CQL_VERSION"=>["3.0.0"], "COMPRESSION"=>[]}' 29 | end 30 | end 31 | end 32 | end 33 | end 34 | -------------------------------------------------------------------------------- /spec/cassandra/protocol/responses/topology_change_event_response_spec.rb: -------------------------------------------------------------------------------- 1 | # encoding: ascii-8bit 2 | 3 | #-- 4 | # Copyright DataStax, Inc. 5 | # 6 | # Licensed under the Apache License, Version 2.0 (the "License"); 7 | # you may not use this file except in compliance with the License. 8 | # You may obtain a copy of the License at 9 | # 10 | # http://www.apache.org/licenses/LICENSE-2.0 11 | # 12 | # Unless required by applicable law or agreed to in writing, software 13 | # distributed under the License is distributed on an "AS IS" BASIS, 14 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 15 | # See the License for the specific language governing permissions and 16 | # limitations under the License. 17 | #++ 18 | 19 | require 'spec_helper' 20 | 21 | 22 | module Cassandra 23 | module Protocol 24 | describe TopologyChangeEventResponse do 25 | describe '#to_s' do 26 | it 'returns a string that includes the change, address and port' do 27 | response = described_class.new('REMOVED_NODE', IPAddr.new('0.0.0.0'), 9042) 28 | response.to_s.should == 'EVENT TOPOLOGY_CHANGE REMOVED_NODE 0.0.0.0:9042' 29 | end 30 | end 31 | end 32 | end 33 | end 34 | -------------------------------------------------------------------------------- /spec/cassandra/protocol/responses/void_result_response_spec.rb: -------------------------------------------------------------------------------- 1 | # encoding: ascii-8bit 2 | 3 | #-- 4 | # Copyright DataStax, Inc. 5 | # 6 | # Licensed under the Apache License, Version 2.0 (the "License"); 7 | # you may not use this file except in compliance with the License. 8 | # You may obtain a copy of the License at 9 | # 10 | # http://www.apache.org/licenses/LICENSE-2.0 11 | # 12 | # Unless required by applicable law or agreed to in writing, software 13 | # distributed under the License is distributed on an "AS IS" BASIS, 14 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 15 | # See the License for the specific language governing permissions and 16 | # limitations under the License. 17 | #++ 18 | 19 | require 'spec_helper' 20 | 21 | 22 | module Cassandra 23 | module Protocol 24 | describe VoidResultResponse do 25 | describe '#void?' do 26 | it 'is void' do 27 | described_class.new(nil, nil, nil).should be_void 28 | end 29 | end 30 | 31 | describe '#to_s' do 32 | it 'returns a string' do 33 | described_class.new(nil, nil, nil).to_s.should == 'RESULT VOID' 34 | end 35 | end 36 | end 37 | end 38 | end 39 | -------------------------------------------------------------------------------- /spec/support/await_helper.rb: -------------------------------------------------------------------------------- 1 | # encoding: utf-8 2 | 3 | #-- 4 | # Copyright DataStax, Inc. 5 | # 6 | # Licensed under the Apache License, Version 2.0 (the "License"); 7 | # you may not use this file except in compliance with the License. 8 | # You may obtain a copy of the License at 9 | # 10 | # http://www.apache.org/licenses/LICENSE-2.0 11 | # 12 | # Unless required by applicable law or agreed to in writing, software 13 | # distributed under the License is distributed on an "AS IS" BASIS, 14 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 15 | # See the License for the specific language governing permissions and 16 | # limitations under the License. 17 | #++ 18 | 19 | module AwaitHelper 20 | def await(timeout=5, &test) 21 | started_at = Time.now 22 | until test.call 23 | yield 24 | time_taken = Time.now - started_at 25 | if time_taken > timeout 26 | fail('Test took more than %.1fs' % [time_taken.to_f]) 27 | else 28 | sleep(0.01) 29 | end 30 | end 31 | end 32 | end 33 | 34 | RSpec.configure do |c| 35 | c.include(AwaitHelper) 36 | end 37 | -------------------------------------------------------------------------------- /spec/support/bytes_helper.rb: -------------------------------------------------------------------------------- 1 | # encoding: utf-8 2 | 3 | #-- 4 | # Copyright DataStax, Inc. 5 | # 6 | # Licensed under the Apache License, Version 2.0 (the "License"); 7 | # you may not use this file except in compliance with the License. 8 | # You may obtain a copy of the License at 9 | # 10 | # http://www.apache.org/licenses/LICENSE-2.0 11 | # 12 | # Unless required by applicable law or agreed to in writing, software 13 | # distributed under the License is distributed on an "AS IS" BASIS, 14 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 15 | # See the License for the specific language governing permissions and 16 | # limitations under the License. 17 | #++ 18 | 19 | RSpec::Matchers.define :eql_bytes do |expected| 20 | match do |actual| 21 | actual.to_s.unpack('c*') == expected.to_s.unpack('c*') 22 | end 23 | end 24 | -------------------------------------------------------------------------------- /support/retry.rb: -------------------------------------------------------------------------------- 1 | module Retry extend self 2 | def with_attempts(attempts, *errors) 3 | errors = [Cassandra::Errors::ValidationError, Cassandra::Errors::ExecutionError] if errors.empty? 4 | total ||= attempts + 1 5 | return yield 6 | rescue *errors => e 7 | raise e if (attempts -= 1).zero? 8 | wait = (total - attempts) * 2 9 | puts "#{e.class.name}: #{e.message}, retrying in #{wait}s..." 10 | sleep(wait) 11 | retry 12 | end 13 | end 14 | -------------------------------------------------------------------------------- /support/ssl/.keystore: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/datastax/ruby-driver/5f41fa92aee6626f0178dbca2d3f2d5cfdd8f525/support/ssl/.keystore -------------------------------------------------------------------------------- /support/ssl/.truststore: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/datastax/ruby-driver/5f41fa92aee6626f0178dbca2d3f2d5cfdd8f525/support/ssl/.truststore -------------------------------------------------------------------------------- /support/ssl/README.md: -------------------------------------------------------------------------------- 1 | Regenerate SSL certificates and keys used for end-to-end testing by running `regenerate-keys.sh`. 2 | -------------------------------------------------------------------------------- /support/ssl/cassandra.pem: -------------------------------------------------------------------------------- 1 | -----BEGIN CERTIFICATE----- 2 | MIIDsTCCApmgAwIBAgIEWb8VYDANBgkqhkiG9w0BAQsFADCBhzELMAkGA1UEBhMCVVMxEzARBgNV 3 | BAgTCkNhbGlmb3JuaWExFDASBgNVBAcTC1NhbnRhIENsYXJhMRYwFAYDVQQKEw1EYXRhU3RheCBJ 4 | bmMuMRowGAYDVQQLExFSdWJ5IERyaXZlciBUZXN0czEZMBcGA1UEAxMQQ2Fzc2FuZHJhIFNlcnZl 5 | cjAgFw0xNDEyMjMyMTM4NDVaGA8yMTE0MTEyOTIxMzg0NVowgYcxCzAJBgNVBAYTAlVTMRMwEQYD 6 | VQQIEwpDYWxpZm9ybmlhMRQwEgYDVQQHEwtTYW50YSBDbGFyYTEWMBQGA1UEChMNRGF0YVN0YXgg 7 | SW5jLjEaMBgGA1UECxMRUnVieSBEcml2ZXIgVGVzdHMxGTAXBgNVBAMTEENhc3NhbmRyYSBTZXJ2 8 | ZXIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCmSEwwm87BdIhuMgKzLx9SouZLPxJ7 9 | HaxI9GhrqRUHF9KcdarUjaIRpH+0NzfQL93OtTvaNmzteLKYjj6A2vCjK+qjfrg6eubidGKXQ6mt 10 | yeVf5HUdodzyvDLJuoGZTlbF3gNH8BnDtxU98k0nN45dYCQbb5q77XKulQSe1anLb91kZnZ9kY2/ 11 | BO7QaDLTNe6KemK3Sijay5OXR+EDGlQitaKcbE5zEqAzLM4rmEAwbOu/YTufWYR2KBj33DdwD1OQ 12 | Y+SEH7Dl27cMPaxTTcG7YGmqbE35gthk1SDDNpelE3/ZzFu4RQS7uH0XPWJk0xTT1G0Vd62W2Uor 13 | eAXlQIhJAgMBAAGjITAfMB0GA1UdDgQWBBQ4zivAyn6Ynwko1PXoJUuAgVkTNjANBgkqhkiG9w0B 14 | AQsFAAOCAQEAo6K5jvhgkW2hGMwXcy65ae1PEftetPz/aPrhadVOQlXgjAtizt8bfj+g0+bwWKg9 15 | Wzi4Io6yilpcOuHhGMcTuxx1v/002mLn/BAT+3sN3zawLW4dl0Qug9DbWABk0vUjCw/V8XF7Zh49 16 | ri0L4jAmcRAe96/a7ArjxOuQqj9vgcQXUXaLrn94KS+Q/uSrZa5DP/QF8fG+n6Yoc3qwpOasA+g0 17 | qAkgPrGPV3Czv/QEZgEp3jEkq73e5iz71Dh6bu4cO7LuY2dNQm9IBcm+MOiAafyITOI2Xfsi3H/v 18 | MrFqfthwJ2/jwxoglyiI8yNOjf9MsEm0vRkI8hJpsdnkgE7HUg== 19 | -----END CERTIFICATE----- 20 | -------------------------------------------------------------------------------- /support/ssl/driver.pem: -------------------------------------------------------------------------------- 1 | -----BEGIN CERTIFICATE----- 2 | MIIDpzCCAo+gAwIBAgIEHIDamjANBgkqhkiG9w0BAQsFADCBgjELMAkGA1UEBhMCVVMxEzARBgNV 3 | BAgTCkNhbGlmb3JuaWExFDASBgNVBAcTC1NhbnRhIENsYXJhMRYwFAYDVQQKEw1EYXRhU3RheCBJ 4 | bmMuMRowGAYDVQQLExFSdWJ5IERyaXZlciBUZXN0czEUMBIGA1UEAxMLUnVieSBEcml2ZXIwIBcN 5 | MTQxMjIzMjEzODQ2WhgPMjExNDExMjkyMTM4NDZaMIGCMQswCQYDVQQGEwJVUzETMBEGA1UECBMK 6 | Q2FsaWZvcm5pYTEUMBIGA1UEBxMLU2FudGEgQ2xhcmExFjAUBgNVBAoTDURhdGFTdGF4IEluYy4x 7 | GjAYBgNVBAsTEVJ1YnkgRHJpdmVyIFRlc3RzMRQwEgYDVQQDEwtSdWJ5IERyaXZlcjCCASIwDQYJ 8 | KoZIhvcNAQEBBQADggEPADCCAQoCggEBAMjTqO/VG5/npLfTpATpJdVgLGSfOY+mMRbHdk00nObe 9 | /zjaoWdRZIFt8bV9NHjNlwGMiTBAG/U7e1O6FfG5IP42YmTSNgMFr+TNbA0rNdFC5MWrOCNyUsde 10 | NDDCVWhoTMGmQ8Dp2ul9KJ3MV/Jqsr4GWelE5rbSjKxnFhp0UKHV5OBPPRpa85ZTQetU/vUqZXID 11 | HlT5Ob7EO/AQjfAW6Q4CDe36VNR3QA9GLj70y7Rj1Vv+hY1xAwk2TdcewaXy4UzxYajPxyulsBYc 12 | XhvlglHAXaixhPsXs63wBQT0QeEmDFQc9egtFK6Jf5hFsvxwgr3y8BvcPr/c6j8RTUd2Ui0CAwEA 13 | AaMhMB8wHQYDVR0OBBYEFLNB6HvHOybtY6WLq3gNOdTiedrmMA0GCSqGSIb3DQEBCwUAA4IBAQAQ 14 | 5TL+/lRboYEYLDPULlCmJBKTUSo4STjWAthZfVs7elkvjN1ImmiQoOWMI6B/oXfXuIF/AfbP5Rct 15 | QDR+lTpWSPBoMSM0nkN4nPovGwqKxe5fB0/gaxAkMG01mky1+s5oeaiIUtky+o+borL1MCtlfv4b 16 | 1nUo6LXPPnnHB2Dq7YAh01vfuv0cJ5fTOeDeJjczMfBdvrAUeJkWjQYNLvg78Hrr9ibYNqN/Qb1C 17 | eQv2kMomGTuisE6SBGggiM1odjNKA39yFYAvPnnebH84TxD6OlV5WfbHjF+F9iycz0s9qpN8RT3z 18 | Iggl2VcgUS99esD4qcLSgMn2fXOdbjRBJzsg 19 | -----END CERTIFICATE----- 20 | -------------------------------------------------------------------------------- /support/triggers/AuditTrigger.properties: -------------------------------------------------------------------------------- 1 | # encoding: utf-8 2 | 3 | #-- 4 | # Copyright DataStax, Inc. 5 | # 6 | # Licensed under the Apache License, Version 2.0 (the "License"); 7 | # you may not use this file except in compliance with the License. 8 | # You may obtain a copy of the License at 9 | # 10 | # http://www.apache.org/licenses/LICENSE-2.0 11 | # 12 | # Unless required by applicable law or agreed to in writing, software 13 | # distributed under the License is distributed on an "AS IS" BASIS, 14 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 15 | # See the License for the specific language governing permissions and 16 | # limitations under the License. 17 | #++ 18 | 19 | keyspace=simplex 20 | table=audit 21 | -------------------------------------------------------------------------------- /support/triggers/trigger-example.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/datastax/ruby-driver/5f41fa92aee6626f0178dbca2d3f2d5cfdd8f525/support/triggers/trigger-example.jar --------------------------------------------------------------------------------