neo4j-ruby-driver 1.7.4 → 4.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/README.md +37 -42
- data/lib/loader.rb +5 -3
- data/lib/neo4j/driver/auto_closable.rb +2 -2
- data/lib/neo4j/driver/exceptions/authentication_exception.rb +6 -1
- data/lib/neo4j/driver/exceptions/authorization_expired_exception.rb +14 -0
- data/lib/neo4j/driver/{types/bytes.rb → exceptions/certificate_exception.rb} +2 -2
- data/lib/neo4j/driver/exceptions/client_exception.rb +3 -0
- data/lib/neo4j/driver/exceptions/connection_read_timeout_exception.rb +14 -0
- data/lib/neo4j/driver/exceptions/database_exception.rb +3 -0
- data/lib/neo4j/driver/exceptions/discovery_exception.rb +16 -0
- data/lib/neo4j/driver/exceptions/fatal_discovery_exception.rb +13 -0
- data/lib/neo4j/driver/exceptions/protocol_exception.rb +7 -0
- data/lib/neo4j/driver/exceptions/result_consumed_exception.rb +13 -0
- data/lib/neo4j/driver/exceptions/security_exception.rb +5 -1
- data/lib/neo4j/driver/exceptions/service_unavailable_exception.rb +2 -0
- data/lib/neo4j/driver/exceptions/session_expired_exception.rb +4 -0
- data/lib/neo4j/driver/exceptions/token_expired_exception.rb +15 -0
- data/lib/neo4j/driver/exceptions/transaction_nesting_exception.rb +11 -0
- data/lib/neo4j/driver/exceptions/transient_exception.rb +3 -0
- data/lib/neo4j/driver/exceptions/untrusted_server_exception.rb +1 -0
- data/lib/neo4j/driver/exceptions/value/lossy_coercion.rb +15 -0
- data/lib/neo4j/driver/exceptions/value/not_multi_valued.rb +13 -0
- data/lib/neo4j/driver/exceptions/value/uncoercible.rb +15 -0
- data/lib/neo4j/driver/exceptions/value/unsizable.rb +12 -0
- data/lib/neo4j/driver/exceptions/value/value_exception.rb +12 -0
- data/lib/neo4j/driver/internal/bolt_server_address.rb +97 -0
- data/lib/neo4j/driver/internal/duration_normalizer.rb +1 -1
- data/lib/neo4j/driver/internal/validator.rb +5 -4
- data/{ffi/neo4j/driver/summary/statement_type.rb → lib/neo4j/driver/summary/query_type.rb} +1 -3
- data/lib/neo4j/driver/synchronizable.rb +23 -0
- data/lib/neo4j/driver/types/time.rb +4 -2
- data/lib/neo4j_ruby_driver.rb +5 -10
- data/{ffi → ruby}/neo4j/driver/access_mode.rb +2 -2
- data/ruby/neo4j/driver/auth_tokens.rb +34 -0
- data/ruby/neo4j/driver/bookmark.rb +21 -0
- data/ruby/neo4j/driver/config.rb +89 -0
- data/ruby/neo4j/driver/graph_database.rb +80 -0
- data/ruby/neo4j/driver/internal/async/connection/bolt_protocol_util.rb +51 -0
- data/ruby/neo4j/driver/internal/async/connection/bootstrap_factory.rb +22 -0
- data/ruby/neo4j/driver/internal/async/connection/channel_attributes.rb +31 -0
- data/ruby/neo4j/driver/internal/async/connection/channel_connected_listener.rb +32 -0
- data/ruby/neo4j/driver/internal/async/connection/channel_connector_impl.rb +83 -0
- data/ruby/neo4j/driver/internal/async/connection/channel_pipeline_builder_impl.rb +22 -0
- data/ruby/neo4j/driver/internal/async/connection/direct_connection.rb +30 -0
- data/ruby/neo4j/driver/internal/async/connection/event_loop_group_factory.rb +83 -0
- data/ruby/neo4j/driver/internal/async/connection/handshake_completed_listener.rb +27 -0
- data/ruby/neo4j/driver/internal/async/connection/handshake_handler.rb +113 -0
- data/ruby/neo4j/driver/internal/async/connection/netty_channel_initializer.rb +57 -0
- data/ruby/neo4j/driver/internal/async/connection/netty_domain_name_resolver.rb +26 -0
- data/ruby/neo4j/driver/internal/async/connection/netty_domain_name_resolver_group.rb +19 -0
- data/ruby/neo4j/driver/internal/async/connection/routing_connection.rb +36 -0
- data/ruby/neo4j/driver/internal/async/connection/stream.rb +12 -0
- data/ruby/neo4j/driver/internal/async/connection/stream_reader.rb +16 -0
- data/ruby/neo4j/driver/internal/async/connection_context.rb +10 -0
- data/ruby/neo4j/driver/internal/async/immutable_connection_context.rb +24 -0
- data/ruby/neo4j/driver/internal/async/inbound/byte_buf_input.rb +30 -0
- data/ruby/neo4j/driver/internal/async/inbound/channel_error_handler.rb +77 -0
- data/ruby/neo4j/driver/internal/async/inbound/chunk_decoder.rb +41 -0
- data/ruby/neo4j/driver/internal/async/inbound/connect_timeout_handler.rb +32 -0
- data/ruby/neo4j/driver/internal/async/inbound/connection_read_timeout_handler.rb +17 -0
- data/ruby/neo4j/driver/internal/async/inbound/inbound_message_dispatcher.rb +171 -0
- data/ruby/neo4j/driver/internal/async/inbound/inbound_message_handler.rb +42 -0
- data/ruby/neo4j/driver/internal/async/inbound/message_decoder.rb +51 -0
- data/ruby/neo4j/driver/internal/async/internal_async_session.rb +98 -0
- data/ruby/neo4j/driver/internal/async/internal_async_transaction.rb +13 -0
- data/ruby/neo4j/driver/internal/async/leak_logging_network_session.rb +34 -0
- data/ruby/neo4j/driver/internal/async/network_connection.rb +194 -0
- data/ruby/neo4j/driver/internal/async/network_session.rb +150 -0
- data/ruby/neo4j/driver/internal/async/outbound/chunk_aware_byte_buf_output.rb +110 -0
- data/ruby/neo4j/driver/internal/async/outbound/outbound_message_handler.rb +39 -0
- data/ruby/neo4j/driver/internal/async/pool/channel.rb +62 -0
- data/ruby/neo4j/driver/internal/async/pool/channel_pool.rb +31 -0
- data/ruby/neo4j/driver/internal/async/pool/channel_tracker.rb +135 -0
- data/ruby/neo4j/driver/internal/async/pool/connection_pool_impl.rb +156 -0
- data/ruby/neo4j/driver/internal/async/pool/netty_channel_health_checker.rb +87 -0
- data/ruby/neo4j/driver/internal/async/pool/netty_channel_pool.rb +52 -0
- data/ruby/neo4j/driver/internal/async/pool/network_connection_factory.rb +21 -0
- data/ruby/neo4j/driver/internal/async/pool/pool_settings.rb +34 -0
- data/ruby/neo4j/driver/internal/async/pool/timed_stack.rb +15 -0
- data/ruby/neo4j/driver/internal/async/result_cursors_holder.rb +17 -0
- data/ruby/neo4j/driver/internal/async/unmanaged_transaction.rb +212 -0
- data/ruby/neo4j/driver/internal/bookmark_holder.rb +9 -0
- data/ruby/neo4j/driver/internal/cluster/cluster_composition.rb +48 -0
- data/ruby/neo4j/driver/internal/cluster/cluster_composition_lookup_result.rb +14 -0
- data/ruby/neo4j/driver/internal/cluster/cluster_routing_table.rb +122 -0
- data/ruby/neo4j/driver/internal/cluster/identity_resolver.rb +10 -0
- data/ruby/neo4j/driver/internal/cluster/loadbalancing/least_connected_load_balancing_strategy.rb +68 -0
- data/ruby/neo4j/driver/internal/cluster/loadbalancing/load_balancer.rb +125 -0
- data/ruby/neo4j/driver/internal/cluster/loadbalancing/round_robin_array_index.rb +13 -0
- data/ruby/neo4j/driver/internal/cluster/multi_databases_routing_procedure_runner.rb +31 -0
- data/ruby/neo4j/driver/internal/cluster/rediscovery_impl.rb +147 -0
- data/ruby/neo4j/driver/internal/cluster/route_message_routing_procedure_runner.rb +43 -0
- data/ruby/neo4j/driver/internal/cluster/routing_context.rb +77 -0
- data/ruby/neo4j/driver/internal/cluster/routing_procedure_cluster_composition_provider.rb +60 -0
- data/ruby/neo4j/driver/internal/cluster/routing_procedure_response.rb +35 -0
- data/ruby/neo4j/driver/internal/cluster/routing_settings.rb +24 -0
- data/ruby/neo4j/driver/internal/cluster/routing_table_handler_impl.rb +95 -0
- data/ruby/neo4j/driver/internal/cluster/routing_table_registry_impl.rb +121 -0
- data/ruby/neo4j/driver/internal/cluster/single_database_routing_procedure_runner.rb +73 -0
- data/ruby/neo4j/driver/internal/connection_settings.rb +16 -0
- data/ruby/neo4j/driver/internal/cursor/async_result_cursor_impl.rb +55 -0
- data/ruby/neo4j/driver/internal/cursor/async_result_cursor_only_factory.rb +24 -0
- data/ruby/neo4j/driver/internal/cursor/disposable_async_result_cursor.rb +61 -0
- data/ruby/neo4j/driver/internal/cursor/result_cursor_factory_impl.rb +24 -0
- data/ruby/neo4j/driver/internal/cursor/rx_result_cursor_impl.rb +110 -0
- data/ruby/neo4j/driver/internal/database_name_util.rb +37 -0
- data/ruby/neo4j/driver/internal/default_bookmark_holder.rb +9 -0
- data/ruby/neo4j/driver/internal/default_domain_name_resolver.rb +11 -0
- data/ruby/neo4j/driver/internal/direct_connection_provider.rb +40 -0
- data/ruby/neo4j/driver/internal/driver_factory.rb +126 -0
- data/ruby/neo4j/driver/internal/handlers/begin_tx_response_handler.rb +20 -0
- data/ruby/neo4j/driver/internal/handlers/channel_releasing_reset_response_handler.rb +30 -0
- data/ruby/neo4j/driver/internal/handlers/commit_tx_response_handler.rb +25 -0
- data/ruby/neo4j/driver/internal/handlers/hello_response_handler.rb +65 -0
- data/ruby/neo4j/driver/internal/handlers/init_response_handler.rb +34 -0
- data/ruby/neo4j/driver/internal/handlers/legacy_pull_all_response_handler.rb +199 -0
- data/ruby/neo4j/driver/internal/handlers/no_op_response_handler.rb +16 -0
- data/ruby/neo4j/driver/internal/handlers/ping_response_handler.rb +29 -0
- data/ruby/neo4j/driver/internal/handlers/pull_handlers.rb +32 -0
- data/ruby/neo4j/driver/internal/handlers/pulln/auto_pull_response_handler.rb +168 -0
- data/ruby/neo4j/driver/internal/handlers/pulln/basic_pull_response_handler.rb +298 -0
- data/ruby/neo4j/driver/internal/handlers/pulln/fetch_size_util.rb +20 -0
- data/ruby/neo4j/driver/internal/handlers/reset_response_handler.rb +34 -0
- data/ruby/neo4j/driver/internal/handlers/rollback_tx_response_handler.rb +25 -0
- data/ruby/neo4j/driver/internal/handlers/route_message_response_handler.rb +21 -0
- data/ruby/neo4j/driver/internal/handlers/routing_response_handler.rb +70 -0
- data/ruby/neo4j/driver/internal/handlers/run_response_handler.rb +38 -0
- data/ruby/neo4j/driver/internal/handlers/session_pull_response_completion_listener.rb +34 -0
- data/ruby/neo4j/driver/internal/handlers/transaction_pull_response_completion_listener.rb +20 -0
- data/ruby/neo4j/driver/internal/impersonation_util.rb +22 -0
- data/ruby/neo4j/driver/internal/internal_bookmark.rb +36 -0
- data/ruby/neo4j/driver/internal/internal_database_name.rb +9 -0
- data/ruby/neo4j/driver/internal/internal_driver.rb +74 -0
- data/ruby/neo4j/driver/internal/internal_entity.rb +20 -0
- data/ruby/neo4j/driver/internal/internal_node.rb +21 -0
- data/ruby/neo4j/driver/internal/internal_pair.rb +9 -0
- data/ruby/neo4j/driver/internal/internal_path.rb +35 -0
- data/ruby/neo4j/driver/internal/internal_point2_d.rb +9 -0
- data/ruby/neo4j/driver/internal/internal_point3_d.rb +6 -0
- data/{ffi → ruby}/neo4j/driver/internal/internal_record.rb +2 -1
- data/ruby/neo4j/driver/internal/internal_relationship.rb +26 -0
- data/ruby/neo4j/driver/internal/internal_result.rb +49 -0
- data/ruby/neo4j/driver/internal/internal_session.rb +81 -0
- data/ruby/neo4j/driver/internal/internal_transaction.rb +48 -0
- data/ruby/neo4j/driver/internal/logging/channel_activity_logger.rb +29 -0
- data/ruby/neo4j/driver/internal/logging/channel_error_logger.rb +17 -0
- data/ruby/neo4j/driver/internal/logging/prefixed_logger.rb +19 -0
- data/ruby/neo4j/driver/internal/logging/reformatted_logger.rb +17 -0
- data/ruby/neo4j/driver/internal/messaging/abstract_message_writer.rb +23 -0
- data/ruby/neo4j/driver/internal/messaging/bolt_protocol.rb +30 -0
- data/ruby/neo4j/driver/internal/messaging/bolt_protocol_version.rb +48 -0
- data/ruby/neo4j/driver/internal/messaging/common/common_message_reader.rb +51 -0
- data/ruby/neo4j/driver/internal/messaging/common/common_value.rb +31 -0
- data/ruby/neo4j/driver/internal/messaging/common/common_value_packer.rb +101 -0
- data/ruby/neo4j/driver/internal/messaging/common/common_value_unpacker.rb +234 -0
- data/ruby/neo4j/driver/internal/messaging/encode/begin_message_encoder.rb +15 -0
- data/ruby/neo4j/driver/internal/messaging/encode/commit_message_encoder.rb +14 -0
- data/ruby/neo4j/driver/internal/messaging/encode/discard_all_message_encoder.rb +14 -0
- data/ruby/neo4j/driver/internal/messaging/encode/discard_message_encoder.rb +15 -0
- data/ruby/neo4j/driver/internal/messaging/encode/goodbye_message_encoder.rb +14 -0
- data/ruby/neo4j/driver/internal/messaging/encode/hello_message_encoder.rb +15 -0
- data/ruby/neo4j/driver/internal/messaging/encode/init_message_encoder.rb +16 -0
- data/ruby/neo4j/driver/internal/messaging/encode/pull_all_message_encoder.rb +14 -0
- data/ruby/neo4j/driver/internal/messaging/encode/pull_message_encoder.rb +15 -0
- data/ruby/neo4j/driver/internal/messaging/encode/reset_message_encoder.rb +14 -0
- data/ruby/neo4j/driver/internal/messaging/encode/rollback_message_encoder.rb +14 -0
- data/ruby/neo4j/driver/internal/messaging/encode/route_message_encoder.rb +24 -0
- data/ruby/neo4j/driver/internal/messaging/encode/route_v44_message_encoder.rb +22 -0
- data/ruby/neo4j/driver/internal/messaging/encode/run_message_encoder.rb +16 -0
- data/ruby/neo4j/driver/internal/messaging/encode/run_with_metadata_message_encoder.rb +17 -0
- data/ruby/neo4j/driver/internal/messaging/request/abstract_streaming_message.rb +25 -0
- data/ruby/neo4j/driver/internal/messaging/request/begin_message.rb +25 -0
- data/ruby/neo4j/driver/internal/messaging/request/commit_message.rb +20 -0
- data/ruby/neo4j/driver/internal/messaging/request/discard_all_message.rb +20 -0
- data/ruby/neo4j/driver/internal/messaging/request/discard_message.rb +23 -0
- data/ruby/neo4j/driver/internal/messaging/request/goodbye_message.rb +20 -0
- data/ruby/neo4j/driver/internal/messaging/request/hello_message.rb +31 -0
- data/ruby/neo4j/driver/internal/messaging/request/init_message.rb +19 -0
- data/ruby/neo4j/driver/internal/messaging/request/message_with_metadata.rb +10 -0
- data/ruby/neo4j/driver/internal/messaging/request/multi_database_util.rb +26 -0
- data/ruby/neo4j/driver/internal/messaging/request/pull_all_message.rb +23 -0
- data/ruby/neo4j/driver/internal/messaging/request/pull_message.rb +22 -0
- data/ruby/neo4j/driver/internal/messaging/request/reset_message.rb +32 -0
- data/ruby/neo4j/driver/internal/messaging/request/rollback_message.rb +20 -0
- data/ruby/neo4j/driver/internal/messaging/request/route_message.rb +28 -0
- data/ruby/neo4j/driver/internal/messaging/request/run_message.rb +23 -0
- data/ruby/neo4j/driver/internal/messaging/request/run_with_metadata_message.rb +49 -0
- data/ruby/neo4j/driver/internal/messaging/request/transaction_metadata_builder.rb +24 -0
- data/ruby/neo4j/driver/internal/messaging/response/failure_message.rb +40 -0
- data/ruby/neo4j/driver/internal/messaging/response/ignored_message.rb +29 -0
- data/ruby/neo4j/driver/internal/messaging/response/record_message.rb +33 -0
- data/ruby/neo4j/driver/internal/messaging/response/success_message.rb +34 -0
- data/ruby/neo4j/driver/internal/messaging/v3/bolt_protocol_v3.rb +82 -0
- data/ruby/neo4j/driver/internal/messaging/v3/message_format_v3.rb +17 -0
- data/ruby/neo4j/driver/internal/messaging/v3/message_writer_v3.rb +27 -0
- data/ruby/neo4j/driver/internal/messaging/v4/bolt_protocol_v4.rb +29 -0
- data/ruby/neo4j/driver/internal/messaging/v4/message_format_v4.rb +17 -0
- data/ruby/neo4j/driver/internal/messaging/v4/message_writer_v4.rb +17 -0
- data/ruby/neo4j/driver/internal/messaging/v41/bolt_protocol_v41.rb +25 -0
- data/ruby/neo4j/driver/internal/messaging/v42/bolt_protocol_v42.rb +13 -0
- data/ruby/neo4j/driver/internal/messaging/v43/bolt_protocol_v43.rb +19 -0
- data/ruby/neo4j/driver/internal/messaging/v43/message_format_v43.rb +18 -0
- data/ruby/neo4j/driver/internal/messaging/v43/message_writer_v43.rb +20 -0
- data/ruby/neo4j/driver/internal/messaging/v44/bolt_protocol_v44.rb +17 -0
- data/ruby/neo4j/driver/internal/messaging/v44/message_format_v44.rb +18 -0
- data/ruby/neo4j/driver/internal/messaging/v44/message_writer_v44.rb +15 -0
- data/ruby/neo4j/driver/internal/metrics/connection_pool_metrics_listener.rb +34 -0
- data/ruby/neo4j/driver/internal/metrics/internal_abstract_metrics.rb +46 -0
- data/ruby/neo4j/driver/internal/metrics/internal_connection_pool_metrics.rb +105 -0
- data/ruby/neo4j/driver/internal/metrics/internal_metrics.rb +82 -0
- data/ruby/neo4j/driver/internal/metrics/internal_metrics_provider.rb +18 -0
- data/ruby/neo4j/driver/internal/metrics/listener_event.rb +17 -0
- data/ruby/neo4j/driver/internal/metrics/metrics_provider.rb +24 -0
- data/ruby/neo4j/driver/internal/metrics/time_recorder_listener_event.rb +15 -0
- data/ruby/neo4j/driver/internal/packstream/byte_array_incompatible_packer.rb +12 -0
- data/ruby/neo4j/driver/internal/packstream/pack_input.rb +47 -0
- data/ruby/neo4j/driver/internal/packstream/pack_output.rb +39 -0
- data/ruby/neo4j/driver/internal/packstream/pack_stream.rb +326 -0
- data/ruby/neo4j/driver/internal/packstream/pack_type.rb +17 -0
- data/ruby/neo4j/driver/internal/read_only_bookmark_holder.rb +13 -0
- data/ruby/neo4j/driver/internal/resolved_bolt_server_address.rb +35 -0
- data/ruby/neo4j/driver/internal/retry/exponential_backoff_retry_logic.rb +151 -0
- data/ruby/neo4j/driver/internal/revocation_strategy.rb +19 -0
- data/ruby/neo4j/driver/internal/scheme.rb +32 -0
- data/ruby/neo4j/driver/internal/security/internal_auth_token.rb +15 -0
- data/ruby/neo4j/driver/internal/security/security_plan_impl.rb +48 -0
- data/ruby/neo4j/driver/internal/security_setting.rb +66 -0
- data/ruby/neo4j/driver/internal/session_factory_impl.rb +32 -0
- data/ruby/neo4j/driver/internal/spi/connection.rb +19 -0
- data/ruby/neo4j/driver/internal/spi/connection_pool.rb +9 -0
- data/ruby/neo4j/driver/internal/spi/response_handler.rb +23 -0
- data/ruby/neo4j/driver/internal/summary/internal_database_info.rb +7 -0
- data/ruby/neo4j/driver/internal/summary/internal_input_position.rb +11 -0
- data/ruby/neo4j/driver/internal/summary/internal_notification.rb +16 -0
- data/ruby/neo4j/driver/internal/summary/internal_plan.rb +41 -0
- data/ruby/neo4j/driver/internal/summary/internal_profiled_plan.rb +32 -0
- data/ruby/neo4j/driver/internal/summary/internal_result_summary.rb +33 -0
- data/ruby/neo4j/driver/internal/summary/internal_server_info.rb +6 -0
- data/ruby/neo4j/driver/internal/summary/internal_summary_counters.rb +18 -0
- data/ruby/neo4j/driver/internal/svm/netty_substitutions.rb +196 -0
- data/ruby/neo4j/driver/internal/svm/z_lib_substitutions.rb +21 -0
- data/ruby/neo4j/driver/internal/util/certificate_tool.rb +65 -0
- data/ruby/neo4j/driver/internal/util/clock.rb +29 -0
- data/ruby/neo4j/driver/internal/util/error_util.rb +104 -0
- data/ruby/neo4j/driver/internal/util/extract.rb +123 -0
- data/ruby/neo4j/driver/internal/util/format.rb +39 -0
- data/ruby/neo4j/driver/internal/util/futures.rb +99 -0
- data/ruby/neo4j/driver/internal/util/iterables.rb +35 -0
- data/ruby/neo4j/driver/internal/util/lock_util.rb +23 -0
- data/ruby/neo4j/driver/internal/util/metadata_extractor.rb +107 -0
- data/ruby/neo4j/driver/internal/util/mutex.rb +9 -0
- data/ruby/neo4j/driver/internal/util/preconditions.rb +16 -0
- data/ruby/neo4j/driver/internal/util/result_holder.rb +72 -0
- data/ruby/neo4j/driver/internal/util/server_version.rb +60 -0
- data/ruby/neo4j/driver/logging1.rb +51 -0
- data/ruby/neo4j/driver/net/server_address.rb +9 -0
- data/ruby/neo4j/driver/query.rb +48 -0
- data/ruby/neo4j/driver/records.rb +13 -0
- data/ruby/neo4j/driver/transaction_config.rb +50 -0
- data/ruby/neo4j/driver/values.rb +26 -0
- data/{lib → ruby}/neo4j/driver/version.rb +1 -1
- data/ruby/neo4j/driver.rb +29 -0
- metadata +264 -101
- data/ffi/bolt/address.rb +0 -11
- data/ffi/bolt/address_resolver.rb +0 -12
- data/ffi/bolt/address_set.rb +0 -9
- data/ffi/bolt/auth.rb +0 -10
- data/ffi/bolt/auto_releasable.rb +0 -22
- data/ffi/bolt/boolean.rb +0 -9
- data/ffi/bolt/bytes.rb +0 -10
- data/ffi/bolt/config.rb +0 -45
- data/ffi/bolt/connection.rb +0 -44
- data/ffi/bolt/connector.rb +0 -17
- data/ffi/bolt/dictionary.rb +0 -15
- data/ffi/bolt/error.rb +0 -74
- data/ffi/bolt/float.rb +0 -9
- data/ffi/bolt/integer.rb +0 -9
- data/ffi/bolt/library.rb +0 -12
- data/ffi/bolt/lifecycle.rb +0 -9
- data/ffi/bolt/list.rb +0 -10
- data/ffi/bolt/log.rb +0 -16
- data/ffi/bolt/socket_options.rb +0 -14
- data/ffi/bolt/status.rb +0 -25
- data/ffi/bolt/string.rb +0 -9
- data/ffi/bolt/structure.rb +0 -10
- data/ffi/bolt/value.rb +0 -35
- data/ffi/neo4j/driver/auth_tokens.rb +0 -18
- data/ffi/neo4j/driver/config.rb +0 -40
- data/ffi/neo4j/driver/graph_database.rb +0 -52
- data/ffi/neo4j/driver/internal/async/access_mode_connection.rb +0 -19
- data/ffi/neo4j/driver/internal/async/direct_connection.rb +0 -106
- data/ffi/neo4j/driver/internal/bolt_server_address.rb +0 -18
- data/ffi/neo4j/driver/internal/bookmarks_holder.rb +0 -30
- data/ffi/neo4j/driver/internal/direct_connection_provider.rb +0 -28
- data/ffi/neo4j/driver/internal/driver_factory.rb +0 -125
- data/ffi/neo4j/driver/internal/error_handling.rb +0 -112
- data/ffi/neo4j/driver/internal/explicit_transaction.rb +0 -146
- data/ffi/neo4j/driver/internal/handlers/pull_all_response_handler.rb +0 -104
- data/ffi/neo4j/driver/internal/handlers/response_handler.rb +0 -49
- data/ffi/neo4j/driver/internal/handlers/run_response_handler.rb +0 -32
- data/ffi/neo4j/driver/internal/handlers/session_pull_all_response_handler.rb +0 -32
- data/ffi/neo4j/driver/internal/handlers/transaction_pull_all_response_handler.rb +0 -23
- data/ffi/neo4j/driver/internal/internal_driver.rb +0 -45
- data/ffi/neo4j/driver/internal/internal_logger.rb +0 -32
- data/ffi/neo4j/driver/internal/internal_resolver.rb +0 -31
- data/ffi/neo4j/driver/internal/internal_statement_result.rb +0 -52
- data/ffi/neo4j/driver/internal/messaging/bolt_protocol.rb +0 -24
- data/ffi/neo4j/driver/internal/messaging/v1/bolt_protocol_v1.rb +0 -59
- data/ffi/neo4j/driver/internal/messaging/v2/bolt_protocol_v2.rb +0 -16
- data/ffi/neo4j/driver/internal/messaging/v3/bolt_protocol_v3.rb +0 -63
- data/ffi/neo4j/driver/internal/network_session.rb +0 -129
- data/ffi/neo4j/driver/internal/retry/exponential_backoff_retry_logic.rb +0 -80
- data/ffi/neo4j/driver/internal/session_factory_impl.rb +0 -28
- data/ffi/neo4j/driver/internal/summary/internal_result_summary.rb +0 -67
- data/ffi/neo4j/driver/internal/summary/internal_server_info.rb +0 -19
- data/ffi/neo4j/driver/internal/summary/internal_summary_counters.rb +0 -23
- data/ffi/neo4j/driver/internal/util/metadata_extractor.rb +0 -15
- data/ffi/neo4j/driver/internal/value/base_time_value.rb +0 -22
- data/ffi/neo4j/driver/internal/value/date_value.rb +0 -25
- data/ffi/neo4j/driver/internal/value/duration_value.rb +0 -27
- data/ffi/neo4j/driver/internal/value/local_date_time_value.rb +0 -24
- data/ffi/neo4j/driver/internal/value/local_time_value.rb +0 -19
- data/ffi/neo4j/driver/internal/value/node_value.rb +0 -18
- data/ffi/neo4j/driver/internal/value/offset_time_value.rb +0 -25
- data/ffi/neo4j/driver/internal/value/path_value.rb +0 -41
- data/ffi/neo4j/driver/internal/value/point2_d_value.rb +0 -24
- data/ffi/neo4j/driver/internal/value/point3_d_value.rb +0 -24
- data/ffi/neo4j/driver/internal/value/relationship_value.rb +0 -18
- data/ffi/neo4j/driver/internal/value/structure_value.rb +0 -42
- data/ffi/neo4j/driver/internal/value/time_with_zone_id_value.rb +0 -25
- data/ffi/neo4j/driver/internal/value/time_with_zone_offset_value.rb +0 -28
- data/ffi/neo4j/driver/internal/value/unbound_relationship_value.rb +0 -18
- data/ffi/neo4j/driver/internal/value/value_adapter.rb +0 -101
- data/ffi/neo4j/driver/net/server_address.rb +0 -13
- data/ffi/neo4j/driver/statement.rb +0 -15
- data/ffi/neo4j/driver/types/entity.rb +0 -21
- data/ffi/neo4j/driver/types/node.rb +0 -16
- data/ffi/neo4j/driver/types/path.rb +0 -35
- data/ffi/neo4j/driver/types/relationship.rb +0 -19
- data/ffi/neo4j/driver.rb +0 -61
- data/lib/neo4j/driver/internal/ruby_signature.rb +0 -18
@@ -0,0 +1,82 @@
|
|
1
|
+
module Neo4j::Driver
|
2
|
+
module Internal
|
3
|
+
module Messaging
|
4
|
+
module V3
|
5
|
+
class BoltProtocolV3
|
6
|
+
VERSION = BoltProtocolVersion.new(3, 0)
|
7
|
+
INSTANCE = new
|
8
|
+
METADATA_EXTRACTOR = Util::MetadataExtractor.new(:t_first, :t_last)
|
9
|
+
|
10
|
+
def create_message_format
|
11
|
+
MessageFormatV3.new
|
12
|
+
end
|
13
|
+
|
14
|
+
def initialize_channel(channel, user_agent, auth_token, routing_context)
|
15
|
+
message = Request::HelloMessage.new(user_agent, auth_token,
|
16
|
+
(routing_context.to_h if routing_context.server_routing_enabled?))
|
17
|
+
handler = Handlers::HelloResponseHandler.new(channel, VERSION)
|
18
|
+
|
19
|
+
channel.message_dispatcher.enqueue(handler)
|
20
|
+
channel.write_and_flush(message)
|
21
|
+
end
|
22
|
+
|
23
|
+
def prepare_to_close_channel(channel)
|
24
|
+
message_dispatcher = Connection::ChannelAttributes.message_dispatcher(channel)
|
25
|
+
|
26
|
+
message = Request::GoodbyeMessage::GOODBYE
|
27
|
+
message_dispatcher.enqueue(Handlers::NoOpResponseHandler::INSTANCE)
|
28
|
+
channel.write_and_flush(message, channel.void_promise)
|
29
|
+
|
30
|
+
message_dispatcher.prepare_to_close_channel
|
31
|
+
end
|
32
|
+
|
33
|
+
def begin_transaction(connection, bookmark, config)
|
34
|
+
verify_database_name_before_transaction(connection.database_name)
|
35
|
+
begin_message = Request::BeginMessage.new(bookmark, config, connection.database_name, connection.mode, connection.impersonated_user)
|
36
|
+
connection.write_and_flush(begin_message, Handlers::BeginTxResponseHandler.new)
|
37
|
+
end
|
38
|
+
|
39
|
+
def commit_transaction(connection)
|
40
|
+
Util::ResultHolder.new.tap do |result_holder|
|
41
|
+
connection.write_and_flush(Request::CommitMessage::COMMIT, Handlers::CommitTxResponseHandler.new(result_holder))
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
def rollback_transaction(connection)
|
46
|
+
Util::ResultHolder.new.tap do |result_holder|
|
47
|
+
connection.write_and_flush(Request::RollbackMessage::ROLLBACK, Handlers::RollbackTxResponseHandler.new(result_holder))
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
def run_in_auto_commit_transaction(connection, query, bookmark_holder, config, fetch_size)
|
52
|
+
verify_database_name_before_transaction(connection.database_name)
|
53
|
+
|
54
|
+
run_message = Request::RunWithMetadataMessage.auto_commit_tx_run_message(query, config, connection.database_name, connection.mode, bookmark_holder.bookmark, connection.impersonated_user)
|
55
|
+
|
56
|
+
build_result_cursor_factory(connection, query, bookmark_holder, nil, run_message, fetch_size)
|
57
|
+
end
|
58
|
+
|
59
|
+
def run_in_unmanaged_transaction(connection, query, tx, fetch_size)
|
60
|
+
run_message = Request::RunWithMetadataMessage.unmanaged_tx_run_message(query)
|
61
|
+
build_result_cursor_factory(connection, query, BookmarkHolder::NO_OP, tx, run_message, fetch_size)
|
62
|
+
end
|
63
|
+
|
64
|
+
def build_result_cursor_factory(connection, query, bookmark_holder, tx, run_message, ignored)
|
65
|
+
run_handler = Handlers::RunResponseHandler.new(METADATA_EXTRACTOR, connection, tx)
|
66
|
+
pull_handler = Handlers::PullHandlers.new_bolt_v3_pull_all_handler(query, run_handler, connection, bookmark_holder, tx)
|
67
|
+
|
68
|
+
Cursor::AsyncResultCursorOnlyFactory.new(connection, run_message, run_handler, pull_handler)
|
69
|
+
end
|
70
|
+
|
71
|
+
def verify_database_name_before_transaction(database_name)
|
72
|
+
Request::MultiDatabaseUtil.assert_empty_database_name(database_name, VERSION)
|
73
|
+
end
|
74
|
+
|
75
|
+
def version
|
76
|
+
self.class::VERSION
|
77
|
+
end
|
78
|
+
end
|
79
|
+
end
|
80
|
+
end
|
81
|
+
end
|
82
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
module Neo4j::Driver
|
2
|
+
module Internal
|
3
|
+
module Messaging
|
4
|
+
module V3
|
5
|
+
class MessageFormatV3
|
6
|
+
def new_writer(output)
|
7
|
+
MessageWriterV3.new(output)
|
8
|
+
end
|
9
|
+
|
10
|
+
def new_reader(input)
|
11
|
+
Common::CommonMessageReader.new(input)
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
module Neo4j::Driver
|
2
|
+
module Internal
|
3
|
+
module Messaging
|
4
|
+
module V3
|
5
|
+
class MessageWriterV3 < AbstractMessageWriter
|
6
|
+
COMMON_ENCODERS = {
|
7
|
+
Request::HelloMessage::SIGNATURE => Encode::HelloMessageEncoder,
|
8
|
+
Request::GoodbyeMessage::SIGNATURE => Encode::GoodbyeMessageEncoder,
|
9
|
+
Request::RunWithMetadataMessage::SIGNATURE => Encode::RunWithMetadataMessageEncoder,
|
10
|
+
Request::BeginMessage::SIGNATURE => Encode::BeginMessageEncoder,
|
11
|
+
Request::CommitMessage::SIGNATURE => Encode::CommitMessageEncoder,
|
12
|
+
Request::RollbackMessage::SIGNATURE => Encode::RollbackMessageEncoder,
|
13
|
+
Request::ResetMessage::SIGNATURE => Encode::ResetMessageEncoder,
|
14
|
+
}
|
15
|
+
private
|
16
|
+
|
17
|
+
def build_encoders
|
18
|
+
COMMON_ENCODERS.merge(
|
19
|
+
Request::DiscardAllMessage::SIGNATURE => Encode::DiscardAllMessageEncoder,
|
20
|
+
Request::PullAllMessage::SIGNATURE => Encode::PullAllMessageEncoder,
|
21
|
+
)
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
module Neo4j::Driver
|
2
|
+
module Internal
|
3
|
+
module Messaging
|
4
|
+
module V4
|
5
|
+
class BoltProtocolV4 < V3::BoltProtocolV3
|
6
|
+
VERSION = BoltProtocolVersion.new(4,0)
|
7
|
+
INSTANCE = new
|
8
|
+
|
9
|
+
def create_message_format
|
10
|
+
MessageFormatV4.new
|
11
|
+
end
|
12
|
+
|
13
|
+
def build_result_cursor_factory(connection, query, bookmark_holder, tx, run_message, fetch_size)
|
14
|
+
run_handler = Handlers::RunResponseHandler.new(V3::BoltProtocolV3::METADATA_EXTRACTOR, connection, tx)
|
15
|
+
|
16
|
+
pull_all_handler = Handlers::PullHandlers.new_bolt_v4_auto_pull_handler(query, run_handler, connection, bookmark_holder, tx, fetch_size)
|
17
|
+
pull_handler = Handlers::PullHandlers.new_bolt_v4_basic_pull_handler(query, run_handler, connection, bookmark_holder, tx)
|
18
|
+
|
19
|
+
Cursor::ResultCursorFactoryImpl.new(connection, run_message, run_handler, pull_handler, pull_all_handler)
|
20
|
+
end
|
21
|
+
|
22
|
+
def verify_database_name_before_transaction(_database_name)
|
23
|
+
# Bolt V4.1 accepts database name
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
module Neo4j::Driver
|
2
|
+
module Internal
|
3
|
+
module Messaging
|
4
|
+
module V4
|
5
|
+
class MessageFormatV4
|
6
|
+
def new_writer(output)
|
7
|
+
MessageWriterV4.new(output)
|
8
|
+
end
|
9
|
+
|
10
|
+
def new_reader(input)
|
11
|
+
Common::CommonMessageReader.new(input)
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
module Neo4j::Driver
|
2
|
+
module Internal
|
3
|
+
module Messaging
|
4
|
+
module V4
|
5
|
+
class MessageWriterV4 < V3::MessageWriterV3
|
6
|
+
private
|
7
|
+
|
8
|
+
def build_encoders
|
9
|
+
COMMON_ENCODERS.merge(
|
10
|
+
Request::DiscardMessage::SIGNATURE => Encode::DiscardMessageEncoder,
|
11
|
+
Request::PullMessage::SIGNATURE => Encode::PullMessageEncoder)
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
module Neo4j::Driver
|
2
|
+
module Internal
|
3
|
+
module Messaging
|
4
|
+
module V41
|
5
|
+
class BoltProtocolV41 < V4::BoltProtocolV4
|
6
|
+
VERSION = BoltProtocolVersion.new(4, 1)
|
7
|
+
INSTANCE = new
|
8
|
+
|
9
|
+
def create_message_format
|
10
|
+
V4::MessageFormatV4.new
|
11
|
+
end
|
12
|
+
|
13
|
+
def build_result_cursor_factory(connection, query, bookmark_holder, tx, run_message, fetch_size)
|
14
|
+
run_handler = Handlers::RunResponseHandler.new(V3::BoltProtocolV3::METADATA_EXTRACTOR, connection, tx)
|
15
|
+
|
16
|
+
pull_all_handler = Handlers::PullHandlers.new_bolt_v4_auto_pull_handler(query, run_handler, connection, bookmark_holder, tx, fetch_size)
|
17
|
+
pull_handler = Handlers::PullHandlers.new_bolt_v4_basic_pull_handler(query, run_handler, connection, bookmark_holder, tx)
|
18
|
+
|
19
|
+
Cursor::ResultCursorFactoryImpl.new(connection, run_message, run_handler, pull_handler, pull_all_handler)
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
module Neo4j::Driver
|
2
|
+
module Internal
|
3
|
+
module Messaging
|
4
|
+
module V43
|
5
|
+
# Definition of the Bolt Protocol 4.3
|
6
|
+
|
7
|
+
# The version 4.3 use most of the 4.2 behaviours, but it extends it with new messages such as ROUTE
|
8
|
+
class BoltProtocolV43 < V42::BoltProtocolV42
|
9
|
+
VERSION = BoltProtocolVersion.new(4,3)
|
10
|
+
INSTANCE = new
|
11
|
+
|
12
|
+
def create_message_format
|
13
|
+
MessageFormatV43.new
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
module Neo4j::Driver
|
2
|
+
module Internal
|
3
|
+
module Messaging
|
4
|
+
module V43
|
5
|
+
# Bolt message format v4.3
|
6
|
+
class MessageFormatV43
|
7
|
+
def new_writer(output)
|
8
|
+
MessageWriterV43.new(output)
|
9
|
+
end
|
10
|
+
|
11
|
+
def new_reader(input)
|
12
|
+
Common::CommonMessageReader.new(input)
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
module Neo4j::Driver
|
2
|
+
module Internal
|
3
|
+
module Messaging
|
4
|
+
module V43
|
5
|
+
|
6
|
+
# Bolt message writer v4.3
|
7
|
+
# This version is able to encode all the versions existing on v4.2, but it encodes
|
8
|
+
|
9
|
+
# new messages such as ROUTE
|
10
|
+
class MessageWriterV43 < V4::MessageWriterV4
|
11
|
+
private
|
12
|
+
|
13
|
+
def build_encoders
|
14
|
+
super.merge(Request::RouteMessage::SIGNATURE => Encode::RouteMessageEncoder)
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
module Neo4j::Driver
|
2
|
+
module Internal
|
3
|
+
module Messaging
|
4
|
+
module V44
|
5
|
+
# Definition of the Bolt Protocol 4.4
|
6
|
+
class BoltProtocolV44 < V43::BoltProtocolV43
|
7
|
+
VERSION = BoltProtocolVersion.new(4,4)
|
8
|
+
INSTANCE = new
|
9
|
+
|
10
|
+
def create_message_format
|
11
|
+
MessageFormatV44.new
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
module Neo4j::Driver
|
2
|
+
module Internal
|
3
|
+
module Messaging
|
4
|
+
module V44
|
5
|
+
# Bolt message format v4.4
|
6
|
+
class MessageFormatV44
|
7
|
+
def new_writer(output)
|
8
|
+
MessageWriterV44.new(output)
|
9
|
+
end
|
10
|
+
|
11
|
+
def new_reader(input)
|
12
|
+
CommonMessageReader.new(input)
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
module Neo4j::Driver
|
2
|
+
module Internal
|
3
|
+
module Messaging
|
4
|
+
module V44
|
5
|
+
class MessageWriterV44 < V4::MessageWriterV4
|
6
|
+
private
|
7
|
+
|
8
|
+
def build_encoders
|
9
|
+
super.merge(Request::RouteMessage::SIGNATURE => Encode::RouteV44MessageEncoder)
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
@@ -0,0 +1,34 @@
|
|
1
|
+
module Neo4j::Driver
|
2
|
+
module Internal
|
3
|
+
module Metrics
|
4
|
+
module ConnectionPoolMetricsListener
|
5
|
+
DEV_NULL_POOL_METRICS_LISTENER =
|
6
|
+
Class.new do
|
7
|
+
def before_creating(_listener_event) end
|
8
|
+
|
9
|
+
def after_created(_listener_event) end
|
10
|
+
|
11
|
+
def after_failed_to_create
|
12
|
+
end
|
13
|
+
|
14
|
+
def after_closed
|
15
|
+
end
|
16
|
+
|
17
|
+
def before_acquiring_or_creating(_acquire_event = nil) end
|
18
|
+
|
19
|
+
def after_acquiring_or_creating
|
20
|
+
end
|
21
|
+
|
22
|
+
def after_acquired_or_created(_acquire_event) end
|
23
|
+
|
24
|
+
def after_timed_out_to_acquire_or_create
|
25
|
+
end
|
26
|
+
|
27
|
+
def acquired(_in_use_event) end
|
28
|
+
|
29
|
+
def released(_in_use_event) end
|
30
|
+
end.new
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
@@ -0,0 +1,46 @@
|
|
1
|
+
module Neo4j::Driver
|
2
|
+
module Internal
|
3
|
+
module Metrics
|
4
|
+
class InternalAbstractMetrics
|
5
|
+
DEV_NULL_METRICS =
|
6
|
+
Class.new do
|
7
|
+
def before_creating(_pool_id, _creating_event) end
|
8
|
+
|
9
|
+
def after_created(_pool_id, _creating_event) end
|
10
|
+
|
11
|
+
def after_failed_to_create(_pool_id) end
|
12
|
+
|
13
|
+
def after_closed(_pool_id) end
|
14
|
+
|
15
|
+
def before_acquiring_or_creating(_pool_id, _acquire_event) end
|
16
|
+
|
17
|
+
def after_acquiring_or_creating(_pool_id) end
|
18
|
+
|
19
|
+
def after_acquired_or_created(_pool_id, _acquire_event) end
|
20
|
+
|
21
|
+
def after_timed_out_to_acquire_or_create(_pool_id) end
|
22
|
+
|
23
|
+
def after_connection_created(_pool_id, _in_use_event) end
|
24
|
+
|
25
|
+
def after_connection_released(_pool_id, _in_use_event) end
|
26
|
+
|
27
|
+
def create_listener_event
|
28
|
+
ListenerEvent::DEV_NULL_LISTENER_EVENT
|
29
|
+
end
|
30
|
+
|
31
|
+
def put_pool_metrics(_id, _address, _connection_pool) end
|
32
|
+
|
33
|
+
def remove_pool_metrics(_pool_id) end
|
34
|
+
|
35
|
+
def connection_pool_metrics
|
36
|
+
Set.new
|
37
|
+
end
|
38
|
+
|
39
|
+
def to_s
|
40
|
+
'Driver metrics not available while driver metrics is not enabled.'
|
41
|
+
end
|
42
|
+
end.new
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
@@ -0,0 +1,105 @@
|
|
1
|
+
module Neo4j::Driver
|
2
|
+
module Internal
|
3
|
+
module Metrics
|
4
|
+
class InternalConnectionPoolMetrics
|
5
|
+
attr_reader :id, :address, :pool
|
6
|
+
|
7
|
+
def initialize(pool_id, address, pool)
|
8
|
+
Internal::Validotor.require_non_nil!(address)
|
9
|
+
Internal::Validotor.require_non_nil!(pool)
|
10
|
+
|
11
|
+
@id = pool_id
|
12
|
+
@address = address
|
13
|
+
@pool = pool
|
14
|
+
|
15
|
+
@closed = Concurrent::AtomicFixnum.new
|
16
|
+
|
17
|
+
# creating = created + failedToCreate
|
18
|
+
@creating = Concurrent::AtomicFixnum.new
|
19
|
+
@created = Concurrent::AtomicFixnum.new
|
20
|
+
@failed_to_create = Concurrent::AtomicFixnum.new
|
21
|
+
|
22
|
+
# acquiring = acquired + timedOutToAcquire + failedToAcquireDueToOtherFailures (which we do not keep track)
|
23
|
+
@acquiring = Concurrent::AtomicFixnum.new
|
24
|
+
@acquired = Concurrent::AtomicFixnum.new
|
25
|
+
@timed_out_to_acquire = Concurrent::AtomicFixnum.new
|
26
|
+
|
27
|
+
@total_acquisition_time = Concurrent::AtomicFixnum.new
|
28
|
+
@total_connection_time = Concurrent::AtomicFixnum.new
|
29
|
+
@total_in_use_time = Concurrent::AtomicFixnum.new
|
30
|
+
|
31
|
+
@total_in_use_count = Concurrent::AtomicFixnum.new
|
32
|
+
end
|
33
|
+
|
34
|
+
def before_creating(conn_event)
|
35
|
+
@creating.increment
|
36
|
+
conn_event.start
|
37
|
+
end
|
38
|
+
|
39
|
+
def after_failed_to_create
|
40
|
+
@failed_to_create.increment
|
41
|
+
@creating.decrement_and_get
|
42
|
+
end
|
43
|
+
|
44
|
+
def after_created(conn_event)
|
45
|
+
@created.increment
|
46
|
+
@creating.decrement
|
47
|
+
elapsed = conn_event.elapsed
|
48
|
+
|
49
|
+
@total_connection_time.increment(elapsed)
|
50
|
+
end
|
51
|
+
|
52
|
+
def after_closed
|
53
|
+
@closed.increment
|
54
|
+
end
|
55
|
+
|
56
|
+
def before_acquiring_or_creating(acquire_event)
|
57
|
+
acquire_event.start
|
58
|
+
@acquiring.increment
|
59
|
+
end
|
60
|
+
|
61
|
+
def after_acquiring_or_creating
|
62
|
+
@acquiring.decrement
|
63
|
+
end
|
64
|
+
|
65
|
+
def after_acquired_or_created(acquire_event)
|
66
|
+
@acquired.increment
|
67
|
+
elapsed = acquire_event.elapsed
|
68
|
+
@total_acquisition_time.increment(elapsed)
|
69
|
+
end
|
70
|
+
|
71
|
+
def after_timed_out_to_acquire_or_create
|
72
|
+
@timed_out_to_acquire.increment
|
73
|
+
end
|
74
|
+
|
75
|
+
def acquired(in_use_event)
|
76
|
+
in_use_event.start
|
77
|
+
end
|
78
|
+
|
79
|
+
def released(in_use_event)
|
80
|
+
@total_in_use_count.increment
|
81
|
+
elapsed = in_use_event.elapsed
|
82
|
+
|
83
|
+
@total_in_use_time.increment(elapsed)
|
84
|
+
end
|
85
|
+
|
86
|
+
def in_use
|
87
|
+
@pool.in_use_connections(@address)
|
88
|
+
end
|
89
|
+
|
90
|
+
def idle
|
91
|
+
@pool.idle_connections(@address)
|
92
|
+
end
|
93
|
+
|
94
|
+
%i[creating created failed_to_create timed_out_to_acquire total_acquisition_time :total_connection_time
|
95
|
+
total_in_use_time total_in_use_count closed acquiring acquired].each do |method|
|
96
|
+
define_method(method) { instance_variable_get(method).value }
|
97
|
+
end
|
98
|
+
|
99
|
+
def to_s
|
100
|
+
"#{@id}[created=#{@created}, closed=#{@closed}, creating=#{@creating}, failed_to_create=#{@failed_to_create}, acquiring=#{@acquiring}, acquired=#{@acquired}, timed_out_to_acquire=#{@timed_out_to_acquire}, in_use=#{@in_use}, idle=#{@idle}, total_acquisition_time=#{@total_acquisition_time}, total_connection_time=#{@total_connection_time}, total_in_use_time=#{@total_in_use_time}, total_in_use_count=#{@totalInUseCount}]"
|
101
|
+
end
|
102
|
+
end
|
103
|
+
end
|
104
|
+
end
|
105
|
+
end
|
@@ -0,0 +1,82 @@
|
|
1
|
+
module Neo4j::Driver
|
2
|
+
module Internal
|
3
|
+
module Metrics
|
4
|
+
class InternalMetrics
|
5
|
+
def initialize(logger)
|
6
|
+
@connection_pool_metrics = Concurrent::Map.new
|
7
|
+
@log = logger
|
8
|
+
end
|
9
|
+
|
10
|
+
def put_pool_metrics(pool_id, server_address, pool)
|
11
|
+
@connection_pool_metrics[pool_id] = InternalConnectionPoolMetrics.new(pool_id, server_address, pool)
|
12
|
+
end
|
13
|
+
|
14
|
+
def remove_pool_metrics(id)
|
15
|
+
@connection_pool_metrics.delete(id)
|
16
|
+
end
|
17
|
+
|
18
|
+
def before_creating(pool_id, creating_event)
|
19
|
+
pool_metrics(pool_id).before_creating(creating_event)
|
20
|
+
end
|
21
|
+
|
22
|
+
def after_created(pool_id, creating_event)
|
23
|
+
pool_metrics(pool_id).after_created(creating_event)
|
24
|
+
end
|
25
|
+
|
26
|
+
def after_failed_to_create(pool_id)
|
27
|
+
pool_metrics(pool_id).after_failed_to_create
|
28
|
+
end
|
29
|
+
|
30
|
+
def after_closed(pool_id)
|
31
|
+
pool_metrics(pool_id).after_closed
|
32
|
+
end
|
33
|
+
|
34
|
+
def before_acquiring_or_creating(pool_id, acquire_event)
|
35
|
+
pool_metrics(pool_id).before_acquiring_or_creating(acquire_event)
|
36
|
+
end
|
37
|
+
|
38
|
+
def after_acquiring_or_creating(pool_id)
|
39
|
+
pool_metrics(pool_id).after_acquiring_or_creating
|
40
|
+
end
|
41
|
+
|
42
|
+
def after_acquired_or_created(pool_id, acquire_event)
|
43
|
+
pool_metrics(pool_id).after_acquired_or_created(acquire_event)
|
44
|
+
end
|
45
|
+
|
46
|
+
def after_connection_created(pool_id, in_use_event)
|
47
|
+
pool_metrics(pool_id).acquired(in_use_event)
|
48
|
+
end
|
49
|
+
|
50
|
+
def after_connection_released(pool_id, in_use_event)
|
51
|
+
pool_metrics(pool_id).released(in_use_event)
|
52
|
+
end
|
53
|
+
|
54
|
+
def after_timed_out_to_acquire_or_create(pool_id)
|
55
|
+
pool_metrics(pool_id).after_timed_out_to_acquire_or_create
|
56
|
+
end
|
57
|
+
|
58
|
+
def create_listener_event
|
59
|
+
TimeRecorderListenerEvent.new
|
60
|
+
end
|
61
|
+
|
62
|
+
def connection_pool_metrics
|
63
|
+
@connection_pool_metrics.values.freeze
|
64
|
+
end
|
65
|
+
|
66
|
+
def to_s
|
67
|
+
"PoolMetrics=#{@connection_pool_metrics.each_pair.to_h}"
|
68
|
+
end
|
69
|
+
|
70
|
+
private
|
71
|
+
|
72
|
+
def pool_metrics(pool_id)
|
73
|
+
@connection_pool_metrics[pool_id] ||
|
74
|
+
begin
|
75
|
+
@log.warn("Failed to find pool metrics with id `#{pool_id}` in #{@connection_pool_metrics.each_pair.to_h}.")
|
76
|
+
ConnectionPoolMetricsListener::DEV_NULL_POOL_METRICS_LISTENER
|
77
|
+
end
|
78
|
+
end
|
79
|
+
end
|
80
|
+
end
|
81
|
+
end
|
82
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
module Neo4j::Driver
|
2
|
+
module Internal
|
3
|
+
module Metrics
|
4
|
+
class InternalMetricsProvider
|
5
|
+
attr_reader :metrics
|
6
|
+
alias metrics_listener metrics
|
7
|
+
|
8
|
+
def initialize(logger)
|
9
|
+
@metrics = InternalMetrics.new(logger)
|
10
|
+
end
|
11
|
+
|
12
|
+
def metrics_enabled?
|
13
|
+
true
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
module Neo4j::Driver
|
2
|
+
module Internal
|
3
|
+
module Metrics
|
4
|
+
module MetricsProvider
|
5
|
+
METRICS_DISABLED_PROVIDER =
|
6
|
+
Class.new do
|
7
|
+
def metrics
|
8
|
+
# To outside users, we forbidden their access to the metrics API
|
9
|
+
raise Exceptions::ClientException, "Driver metrics not enabled. To access driver metrics, you need to enabled driver metrics in the driver's configuration."
|
10
|
+
end
|
11
|
+
|
12
|
+
def metrics_listener
|
13
|
+
# Internally we can still register callbacks to this empty metrics listener.
|
14
|
+
InternalAbstractMetrics::DEV_NULL_METRICS
|
15
|
+
end
|
16
|
+
|
17
|
+
def metrics_enabled?
|
18
|
+
false
|
19
|
+
end
|
20
|
+
end.new
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|