neo4j-ruby-driver 6.0.3.alpha.0 → 6.2.1.beta.2
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 +113 -411
- data/{ruby → lib}/neo4j/driver/access_mode.rb +2 -1
- data/lib/neo4j/driver/auth_token_managers.rb +31 -0
- data/lib/neo4j/driver/auth_tokens.rb +41 -0
- data/lib/neo4j/driver/auto_commit_retries_mode.rb +18 -0
- data/lib/neo4j/driver/bolt/bolt_version.rb +67 -0
- data/lib/neo4j/driver/bolt/connection.rb +1091 -0
- data/lib/neo4j/driver/bolt/handshake.rb +236 -0
- data/lib/neo4j/driver/bolt/message/failure.rb +139 -0
- data/lib/neo4j/driver/bolt/message/ignored.rb +27 -0
- data/lib/neo4j/driver/bolt/message/record.rb +30 -0
- data/lib/neo4j/driver/bolt/message/success.rb +34 -0
- data/lib/neo4j/driver/bolt/message.rb +112 -0
- data/lib/neo4j/driver/bolt/pool.rb +255 -0
- data/lib/neo4j/driver/bolt/protocol/base.rb +146 -0
- data/lib/neo4j/driver/bolt/protocol/v3.rb +43 -0
- data/lib/neo4j/driver/bolt/protocol/v4.rb +24 -0
- data/lib/neo4j/driver/bolt/protocol/v43.rb +28 -0
- data/lib/neo4j/driver/bolt/protocol/v44.rb +23 -0
- data/lib/neo4j/driver/bolt/protocol/v5.rb +27 -0
- data/lib/neo4j/driver/bolt/protocol/v51.rb +24 -0
- data/lib/neo4j/driver/bolt/protocol/v52.rb +28 -0
- data/lib/neo4j/driver/bolt/protocol/v53.rb +27 -0
- data/lib/neo4j/driver/bolt/protocol/v54.rb +14 -0
- data/lib/neo4j/driver/bolt/protocol/v55.rb +17 -0
- data/lib/neo4j/driver/bolt/protocol/v56.rb +14 -0
- data/lib/neo4j/driver/bolt/protocol/v57.rb +31 -0
- data/lib/neo4j/driver/bolt/protocol/v58.rb +15 -0
- data/lib/neo4j/driver/bolt/protocol/v6.rb +43 -0
- data/lib/neo4j/driver/bolt/protocol/v61.rb +21 -0
- data/lib/neo4j/driver/bolt/protocol_version_handler.rb +39 -0
- data/lib/neo4j/driver/bolt/record_buffer.rb +143 -0
- data/lib/neo4j/driver/bolt/stream_handler.rb +53 -0
- data/lib/neo4j/driver/bolt/tls_config.rb +129 -0
- data/lib/neo4j/driver/bolt/wire.rb +321 -0
- data/lib/neo4j/driver/bookmark.rb +15 -0
- data/lib/neo4j/driver/bookmark_managers.rb +39 -0
- data/lib/neo4j/driver/client_certificate.rb +19 -0
- data/lib/neo4j/driver/client_certificate_manager.rb +37 -0
- data/lib/neo4j/driver/client_certificate_managers.rb +15 -0
- data/lib/neo4j/driver/client_certificates.rb +14 -0
- data/lib/neo4j/driver/direct/connection_provider.rb +262 -0
- data/lib/neo4j/driver/driver.rb +268 -0
- data/lib/neo4j/driver/eager_result.rb +10 -0
- data/lib/neo4j/driver/exceptions/neo4j_exception.rb +16 -7
- data/lib/neo4j/driver/exceptions/no_such_record_exception.rb +1 -1
- data/lib/neo4j/driver/exceptions/protocol_exception.rb +0 -5
- data/lib/neo4j/driver/exceptions/security_retryable_exception.rb +14 -0
- data/lib/neo4j/driver/exceptions/transaction_terminated_exception.rb +13 -0
- data/lib/neo4j/driver/graph_database.rb +29 -0
- data/lib/neo4j/driver/internal/clock.rb +20 -0
- data/lib/neo4j/driver/internal/clock_adapter.rb +21 -0
- data/lib/neo4j/driver/internal/default_bookmark_manager.rb +54 -0
- data/lib/neo4j/driver/internal/deprecator.rb +9 -5
- data/lib/neo4j/driver/internal/driver_factory.rb +128 -0
- data/lib/neo4j/driver/internal/duration_normalizer.rb +14 -39
- data/lib/neo4j/driver/internal/extras.rb +23 -0
- data/lib/neo4j/driver/internal/home_db_cache.rb +57 -0
- data/lib/neo4j/driver/internal/internal_auth_token_manager.rb +37 -0
- data/lib/neo4j/driver/internal/metrics.rb +31 -0
- data/lib/neo4j/driver/internal/security/static_auth_token_manager.rb +25 -0
- data/lib/neo4j/driver/internal/validator.rb +16 -2
- data/lib/neo4j/driver/net.rb +29 -0
- data/lib/neo4j/driver/packstream/markers.rb +49 -0
- data/lib/neo4j/driver/packstream/packer.rb +335 -0
- data/lib/neo4j/driver/packstream/structure.rb +27 -0
- data/lib/neo4j/driver/packstream/unpacker.rb +170 -0
- data/lib/neo4j/driver/record.rb +43 -0
- data/lib/neo4j/driver/result.rb +282 -0
- data/lib/neo4j/driver/routing/load_balancer.rb +706 -0
- data/lib/neo4j/driver/routing/routed_connection.rb +132 -0
- data/lib/neo4j/driver/routing/routing_table.rb +127 -0
- data/lib/neo4j/driver/routing/server_address.rb +25 -0
- data/lib/neo4j/driver/routing_control.rb +13 -0
- data/lib/neo4j/driver/session.rb +577 -0
- data/lib/neo4j/driver/summary/database_info.rb +25 -0
- data/lib/neo4j/driver/summary/gql_notification.rb +38 -0
- data/lib/neo4j/driver/summary/gql_status_object.rb +35 -0
- data/lib/neo4j/driver/summary/notification.rb +46 -0
- data/lib/neo4j/driver/summary/plan.rb +23 -0
- data/lib/neo4j/driver/summary/profile.rb +28 -0
- data/lib/neo4j/driver/summary/query.rb +19 -0
- data/lib/neo4j/driver/summary/query_type.rb +5 -1
- data/lib/neo4j/driver/summary/result_summary.rb +215 -0
- data/lib/neo4j/driver/summary/server_info.rb +33 -0
- data/lib/neo4j/driver/summary/summary_counters.rb +72 -0
- data/lib/neo4j/driver/transaction.rb +344 -0
- data/lib/neo4j/driver/types/duration.rb +76 -0
- data/lib/neo4j/driver/types/entity.rb +40 -0
- data/lib/neo4j/driver/types/local_date_time.rb +77 -8
- data/lib/neo4j/driver/types/local_time.rb +50 -7
- data/lib/neo4j/driver/types/node.rb +18 -0
- data/lib/neo4j/driver/types/offset_time.rb +78 -7
- data/lib/neo4j/driver/types/path.rb +68 -0
- data/lib/neo4j/driver/types/point.rb +38 -18
- data/lib/neo4j/driver/types/relationship.rb +32 -0
- data/lib/neo4j/driver/types/temporal_value.rb +44 -0
- data/lib/neo4j/driver/types/unbound_relationship.rb +24 -0
- data/lib/neo4j/driver/types/unresolvable_zoned_date_time.rb +38 -0
- data/lib/neo4j/driver/types/unsupported_type.rb +25 -0
- data/lib/neo4j/driver/types/uuid.rb +29 -0
- data/{ruby → lib}/neo4j/driver/version.rb +1 -1
- data/lib/neo4j/driver.rb +15 -0
- data/lib/neo4j-ruby-driver_loader.rb +34 -20
- metadata +115 -441
- data/lib/neo4j/driver/internal/bolt_server_address.rb +0 -97
- data/lib/neo4j/driver/synchronizable.rb +0 -23
- data/lib/neo4j/driver/types/time.rb +0 -45
- data/ruby/neo4j/driver/auth_tokens.rb +0 -34
- data/ruby/neo4j/driver/bookmark.rb +0 -21
- data/ruby/neo4j/driver/config.rb +0 -89
- data/ruby/neo4j/driver/graph_database.rb +0 -78
- data/ruby/neo4j/driver/internal/async/connection/bolt_protocol_util.rb +0 -51
- data/ruby/neo4j/driver/internal/async/connection/bootstrap_factory.rb +0 -22
- data/ruby/neo4j/driver/internal/async/connection/channel_attributes.rb +0 -31
- data/ruby/neo4j/driver/internal/async/connection/channel_connected_listener.rb +0 -32
- data/ruby/neo4j/driver/internal/async/connection/channel_connector_impl.rb +0 -83
- data/ruby/neo4j/driver/internal/async/connection/channel_pipeline_builder_impl.rb +0 -22
- data/ruby/neo4j/driver/internal/async/connection/direct_connection.rb +0 -30
- data/ruby/neo4j/driver/internal/async/connection/event_loop_group_factory.rb +0 -83
- data/ruby/neo4j/driver/internal/async/connection/handshake_completed_listener.rb +0 -27
- data/ruby/neo4j/driver/internal/async/connection/handshake_handler.rb +0 -113
- data/ruby/neo4j/driver/internal/async/connection/netty_channel_initializer.rb +0 -57
- data/ruby/neo4j/driver/internal/async/connection/netty_domain_name_resolver.rb +0 -26
- data/ruby/neo4j/driver/internal/async/connection/netty_domain_name_resolver_group.rb +0 -19
- data/ruby/neo4j/driver/internal/async/connection/routing_connection.rb +0 -36
- data/ruby/neo4j/driver/internal/async/connection/stream.rb +0 -12
- data/ruby/neo4j/driver/internal/async/connection/stream_reader.rb +0 -16
- data/ruby/neo4j/driver/internal/async/connection_context.rb +0 -10
- data/ruby/neo4j/driver/internal/async/immutable_connection_context.rb +0 -24
- data/ruby/neo4j/driver/internal/async/inbound/byte_buf_input.rb +0 -30
- data/ruby/neo4j/driver/internal/async/inbound/channel_error_handler.rb +0 -77
- data/ruby/neo4j/driver/internal/async/inbound/chunk_decoder.rb +0 -41
- data/ruby/neo4j/driver/internal/async/inbound/connect_timeout_handler.rb +0 -32
- data/ruby/neo4j/driver/internal/async/inbound/connection_read_timeout_handler.rb +0 -17
- data/ruby/neo4j/driver/internal/async/inbound/inbound_message_dispatcher.rb +0 -171
- data/ruby/neo4j/driver/internal/async/inbound/inbound_message_handler.rb +0 -42
- data/ruby/neo4j/driver/internal/async/inbound/message_decoder.rb +0 -51
- data/ruby/neo4j/driver/internal/async/internal_async_session.rb +0 -92
- data/ruby/neo4j/driver/internal/async/internal_async_transaction.rb +0 -13
- data/ruby/neo4j/driver/internal/async/leak_logging_network_session.rb +0 -34
- data/ruby/neo4j/driver/internal/async/network_connection.rb +0 -194
- data/ruby/neo4j/driver/internal/async/network_session.rb +0 -150
- data/ruby/neo4j/driver/internal/async/outbound/chunk_aware_byte_buf_output.rb +0 -110
- data/ruby/neo4j/driver/internal/async/outbound/outbound_message_handler.rb +0 -39
- data/ruby/neo4j/driver/internal/async/pool/channel.rb +0 -66
- data/ruby/neo4j/driver/internal/async/pool/channel_pool.rb +0 -31
- data/ruby/neo4j/driver/internal/async/pool/channel_tracker.rb +0 -135
- data/ruby/neo4j/driver/internal/async/pool/connection_pool_impl.rb +0 -156
- data/ruby/neo4j/driver/internal/async/pool/netty_channel_health_checker.rb +0 -87
- data/ruby/neo4j/driver/internal/async/pool/netty_channel_pool.rb +0 -52
- data/ruby/neo4j/driver/internal/async/pool/network_connection_factory.rb +0 -21
- data/ruby/neo4j/driver/internal/async/pool/pool_settings.rb +0 -34
- data/ruby/neo4j/driver/internal/async/pool/timed_stack.rb +0 -15
- data/ruby/neo4j/driver/internal/async/result_cursors_holder.rb +0 -17
- data/ruby/neo4j/driver/internal/async/unmanaged_transaction.rb +0 -212
- data/ruby/neo4j/driver/internal/bookmark_holder.rb +0 -9
- data/ruby/neo4j/driver/internal/cluster/cluster_composition.rb +0 -48
- data/ruby/neo4j/driver/internal/cluster/cluster_composition_lookup_result.rb +0 -14
- data/ruby/neo4j/driver/internal/cluster/cluster_routing_table.rb +0 -122
- data/ruby/neo4j/driver/internal/cluster/identity_resolver.rb +0 -10
- data/ruby/neo4j/driver/internal/cluster/loadbalancing/least_connected_load_balancing_strategy.rb +0 -68
- data/ruby/neo4j/driver/internal/cluster/loadbalancing/load_balancer.rb +0 -125
- data/ruby/neo4j/driver/internal/cluster/loadbalancing/round_robin_array_index.rb +0 -13
- data/ruby/neo4j/driver/internal/cluster/multi_databases_routing_procedure_runner.rb +0 -31
- data/ruby/neo4j/driver/internal/cluster/rediscovery_impl.rb +0 -147
- data/ruby/neo4j/driver/internal/cluster/route_message_routing_procedure_runner.rb +0 -43
- data/ruby/neo4j/driver/internal/cluster/routing_context.rb +0 -77
- data/ruby/neo4j/driver/internal/cluster/routing_procedure_cluster_composition_provider.rb +0 -60
- data/ruby/neo4j/driver/internal/cluster/routing_procedure_response.rb +0 -35
- data/ruby/neo4j/driver/internal/cluster/routing_settings.rb +0 -24
- data/ruby/neo4j/driver/internal/cluster/routing_table_handler_impl.rb +0 -95
- data/ruby/neo4j/driver/internal/cluster/routing_table_registry_impl.rb +0 -121
- data/ruby/neo4j/driver/internal/cluster/single_database_routing_procedure_runner.rb +0 -73
- data/ruby/neo4j/driver/internal/connection_settings.rb +0 -16
- data/ruby/neo4j/driver/internal/cursor/async_result_cursor_impl.rb +0 -55
- data/ruby/neo4j/driver/internal/cursor/async_result_cursor_only_factory.rb +0 -24
- data/ruby/neo4j/driver/internal/cursor/disposable_async_result_cursor.rb +0 -61
- data/ruby/neo4j/driver/internal/cursor/result_cursor_factory_impl.rb +0 -24
- data/ruby/neo4j/driver/internal/cursor/rx_result_cursor_impl.rb +0 -110
- data/ruby/neo4j/driver/internal/database_name_util.rb +0 -37
- data/ruby/neo4j/driver/internal/default_bookmark_holder.rb +0 -9
- data/ruby/neo4j/driver/internal/default_domain_name_resolver.rb +0 -11
- data/ruby/neo4j/driver/internal/direct_connection_provider.rb +0 -40
- data/ruby/neo4j/driver/internal/driver_factory.rb +0 -126
- data/ruby/neo4j/driver/internal/eager_result_value.rb +0 -5
- data/ruby/neo4j/driver/internal/handlers/begin_tx_response_handler.rb +0 -20
- data/ruby/neo4j/driver/internal/handlers/channel_releasing_reset_response_handler.rb +0 -30
- data/ruby/neo4j/driver/internal/handlers/commit_tx_response_handler.rb +0 -23
- data/ruby/neo4j/driver/internal/handlers/hello_response_handler.rb +0 -65
- data/ruby/neo4j/driver/internal/handlers/init_response_handler.rb +0 -34
- data/ruby/neo4j/driver/internal/handlers/legacy_pull_all_response_handler.rb +0 -199
- data/ruby/neo4j/driver/internal/handlers/no_op_response_handler.rb +0 -16
- data/ruby/neo4j/driver/internal/handlers/ping_response_handler.rb +0 -29
- data/ruby/neo4j/driver/internal/handlers/pull_handlers.rb +0 -32
- data/ruby/neo4j/driver/internal/handlers/pulln/auto_pull_response_handler.rb +0 -169
- data/ruby/neo4j/driver/internal/handlers/pulln/basic_pull_response_handler.rb +0 -298
- data/ruby/neo4j/driver/internal/handlers/pulln/fetch_size_util.rb +0 -20
- data/ruby/neo4j/driver/internal/handlers/reset_response_handler.rb +0 -34
- data/ruby/neo4j/driver/internal/handlers/rollback_tx_response_handler.rb +0 -25
- data/ruby/neo4j/driver/internal/handlers/route_message_response_handler.rb +0 -21
- data/ruby/neo4j/driver/internal/handlers/routing_response_handler.rb +0 -79
- data/ruby/neo4j/driver/internal/handlers/run_response_handler.rb +0 -38
- data/ruby/neo4j/driver/internal/handlers/session_pull_response_completion_listener.rb +0 -34
- data/ruby/neo4j/driver/internal/handlers/transaction_pull_response_completion_listener.rb +0 -20
- data/ruby/neo4j/driver/internal/impersonation_util.rb +0 -22
- data/ruby/neo4j/driver/internal/internal_bookmark.rb +0 -9
- data/ruby/neo4j/driver/internal/internal_database_name.rb +0 -9
- data/ruby/neo4j/driver/internal/internal_driver.rb +0 -83
- data/ruby/neo4j/driver/internal/internal_entity.rb +0 -21
- data/ruby/neo4j/driver/internal/internal_node.rb +0 -21
- data/ruby/neo4j/driver/internal/internal_pair.rb +0 -9
- data/ruby/neo4j/driver/internal/internal_path.rb +0 -35
- data/ruby/neo4j/driver/internal/internal_point2_d.rb +0 -9
- data/ruby/neo4j/driver/internal/internal_point3_d.rb +0 -6
- data/ruby/neo4j/driver/internal/internal_record.rb +0 -27
- data/ruby/neo4j/driver/internal/internal_relationship.rb +0 -27
- data/ruby/neo4j/driver/internal/internal_result.rb +0 -49
- data/ruby/neo4j/driver/internal/internal_session.rb +0 -91
- data/ruby/neo4j/driver/internal/internal_transaction.rb +0 -48
- data/ruby/neo4j/driver/internal/logging/channel_activity_logger.rb +0 -29
- data/ruby/neo4j/driver/internal/logging/channel_error_logger.rb +0 -17
- data/ruby/neo4j/driver/internal/logging/prefixed_logger.rb +0 -19
- data/ruby/neo4j/driver/internal/logging/reformatted_logger.rb +0 -17
- data/ruby/neo4j/driver/internal/messaging/abstract_message_writer.rb +0 -23
- data/ruby/neo4j/driver/internal/messaging/bolt_protocol.rb +0 -32
- data/ruby/neo4j/driver/internal/messaging/bolt_protocol_version.rb +0 -48
- data/ruby/neo4j/driver/internal/messaging/common/common_message_reader.rb +0 -51
- data/ruby/neo4j/driver/internal/messaging/common/common_value.rb +0 -33
- data/ruby/neo4j/driver/internal/messaging/common/common_value_packer.rb +0 -104
- data/ruby/neo4j/driver/internal/messaging/common/common_value_unpacker.rb +0 -256
- data/ruby/neo4j/driver/internal/messaging/encode/begin_message_encoder.rb +0 -15
- data/ruby/neo4j/driver/internal/messaging/encode/commit_message_encoder.rb +0 -14
- data/ruby/neo4j/driver/internal/messaging/encode/discard_all_message_encoder.rb +0 -14
- data/ruby/neo4j/driver/internal/messaging/encode/discard_message_encoder.rb +0 -15
- data/ruby/neo4j/driver/internal/messaging/encode/goodbye_message_encoder.rb +0 -14
- data/ruby/neo4j/driver/internal/messaging/encode/hello_message_encoder.rb +0 -15
- data/ruby/neo4j/driver/internal/messaging/encode/init_message_encoder.rb +0 -16
- data/ruby/neo4j/driver/internal/messaging/encode/logoff_message_encoder.rb +0 -14
- data/ruby/neo4j/driver/internal/messaging/encode/logon_message_encoder.rb +0 -15
- data/ruby/neo4j/driver/internal/messaging/encode/pull_all_message_encoder.rb +0 -14
- data/ruby/neo4j/driver/internal/messaging/encode/pull_message_encoder.rb +0 -15
- data/ruby/neo4j/driver/internal/messaging/encode/reset_message_encoder.rb +0 -14
- data/ruby/neo4j/driver/internal/messaging/encode/rollback_message_encoder.rb +0 -14
- data/ruby/neo4j/driver/internal/messaging/encode/route_message_encoder.rb +0 -24
- data/ruby/neo4j/driver/internal/messaging/encode/route_v44_message_encoder.rb +0 -22
- data/ruby/neo4j/driver/internal/messaging/encode/run_message_encoder.rb +0 -16
- data/ruby/neo4j/driver/internal/messaging/encode/run_with_metadata_message_encoder.rb +0 -17
- data/ruby/neo4j/driver/internal/messaging/request/abstract_streaming_message.rb +0 -25
- data/ruby/neo4j/driver/internal/messaging/request/begin_message.rb +0 -25
- data/ruby/neo4j/driver/internal/messaging/request/commit_message.rb +0 -20
- data/ruby/neo4j/driver/internal/messaging/request/discard_all_message.rb +0 -20
- data/ruby/neo4j/driver/internal/messaging/request/discard_message.rb +0 -23
- data/ruby/neo4j/driver/internal/messaging/request/goodbye_message.rb +0 -20
- data/ruby/neo4j/driver/internal/messaging/request/hello_message.rb +0 -30
- data/ruby/neo4j/driver/internal/messaging/request/init_message.rb +0 -19
- data/ruby/neo4j/driver/internal/messaging/request/logoff_message.rb +0 -13
- data/ruby/neo4j/driver/internal/messaging/request/logon_message.rb +0 -13
- data/ruby/neo4j/driver/internal/messaging/request/message_with_metadata.rb +0 -17
- data/ruby/neo4j/driver/internal/messaging/request/multi_database_util.rb +0 -26
- data/ruby/neo4j/driver/internal/messaging/request/pull_all_message.rb +0 -23
- data/ruby/neo4j/driver/internal/messaging/request/pull_message.rb +0 -22
- data/ruby/neo4j/driver/internal/messaging/request/reset_message.rb +0 -32
- data/ruby/neo4j/driver/internal/messaging/request/rollback_message.rb +0 -20
- data/ruby/neo4j/driver/internal/messaging/request/route_message.rb +0 -28
- data/ruby/neo4j/driver/internal/messaging/request/run_message.rb +0 -23
- data/ruby/neo4j/driver/internal/messaging/request/run_with_metadata_message.rb +0 -49
- data/ruby/neo4j/driver/internal/messaging/request/transaction_metadata_builder.rb +0 -24
- data/ruby/neo4j/driver/internal/messaging/response/failure_message.rb +0 -40
- data/ruby/neo4j/driver/internal/messaging/response/ignored_message.rb +0 -29
- data/ruby/neo4j/driver/internal/messaging/response/record_message.rb +0 -33
- data/ruby/neo4j/driver/internal/messaging/response/success_message.rb +0 -34
- data/ruby/neo4j/driver/internal/messaging/v3/bolt_protocol_v3.rb +0 -82
- data/ruby/neo4j/driver/internal/messaging/v3/message_format_v3.rb +0 -17
- data/ruby/neo4j/driver/internal/messaging/v3/message_writer_v3.rb +0 -27
- data/ruby/neo4j/driver/internal/messaging/v4/bolt_protocol_v4.rb +0 -29
- data/ruby/neo4j/driver/internal/messaging/v4/message_format_v4.rb +0 -13
- data/ruby/neo4j/driver/internal/messaging/v4/message_writer_v4.rb +0 -17
- data/ruby/neo4j/driver/internal/messaging/v41/bolt_protocol_v41.rb +0 -25
- data/ruby/neo4j/driver/internal/messaging/v42/bolt_protocol_v42.rb +0 -13
- data/ruby/neo4j/driver/internal/messaging/v43/bolt_protocol_v43.rb +0 -19
- data/ruby/neo4j/driver/internal/messaging/v43/message_format_v43.rb +0 -14
- data/ruby/neo4j/driver/internal/messaging/v43/message_writer_v43.rb +0 -20
- data/ruby/neo4j/driver/internal/messaging/v44/bolt_protocol_v44.rb +0 -17
- data/ruby/neo4j/driver/internal/messaging/v44/message_format_v44.rb +0 -14
- data/ruby/neo4j/driver/internal/messaging/v44/message_writer_v44.rb +0 -15
- data/ruby/neo4j/driver/internal/messaging/v5/bolt_protocol_v5.rb +0 -21
- data/ruby/neo4j/driver/internal/messaging/v5/message_format_v5.rb +0 -18
- data/ruby/neo4j/driver/internal/messaging/v5/value_unpacker_v5.rb +0 -17
- data/ruby/neo4j/driver/internal/messaging/v51/bolt_protocol_v51.rb +0 -40
- data/ruby/neo4j/driver/internal/messaging/v51/message_format_v51.rb +0 -14
- data/ruby/neo4j/driver/internal/messaging/v51/message_writer_v51.rb +0 -17
- data/ruby/neo4j/driver/internal/metrics/connection_pool_metrics_listener.rb +0 -34
- data/ruby/neo4j/driver/internal/metrics/internal_abstract_metrics.rb +0 -46
- data/ruby/neo4j/driver/internal/metrics/internal_connection_pool_metrics.rb +0 -105
- data/ruby/neo4j/driver/internal/metrics/internal_metrics.rb +0 -82
- data/ruby/neo4j/driver/internal/metrics/internal_metrics_provider.rb +0 -18
- data/ruby/neo4j/driver/internal/metrics/listener_event.rb +0 -17
- data/ruby/neo4j/driver/internal/metrics/metrics_provider.rb +0 -24
- data/ruby/neo4j/driver/internal/metrics/time_recorder_listener_event.rb +0 -15
- data/ruby/neo4j/driver/internal/packstream/byte_array_incompatible_packer.rb +0 -12
- data/ruby/neo4j/driver/internal/packstream/pack_input.rb +0 -47
- data/ruby/neo4j/driver/internal/packstream/pack_output.rb +0 -39
- data/ruby/neo4j/driver/internal/packstream/pack_stream.rb +0 -324
- data/ruby/neo4j/driver/internal/packstream/pack_type.rb +0 -17
- data/ruby/neo4j/driver/internal/read_only_bookmark_holder.rb +0 -13
- data/ruby/neo4j/driver/internal/resolved_bolt_server_address.rb +0 -35
- data/ruby/neo4j/driver/internal/retry/exponential_backoff_retry_logic.rb +0 -150
- data/ruby/neo4j/driver/internal/revocation_strategy.rb +0 -19
- data/ruby/neo4j/driver/internal/scheme.rb +0 -32
- data/ruby/neo4j/driver/internal/security/internal_auth_token.rb +0 -15
- data/ruby/neo4j/driver/internal/security/security_plan_impl.rb +0 -48
- data/ruby/neo4j/driver/internal/security_setting.rb +0 -66
- data/ruby/neo4j/driver/internal/session_factory_impl.rb +0 -32
- data/ruby/neo4j/driver/internal/spi/connection.rb +0 -19
- data/ruby/neo4j/driver/internal/spi/connection_pool.rb +0 -9
- data/ruby/neo4j/driver/internal/spi/response_handler.rb +0 -23
- data/ruby/neo4j/driver/internal/summary/internal_database_info.rb +0 -7
- data/ruby/neo4j/driver/internal/summary/internal_input_position.rb +0 -11
- data/ruby/neo4j/driver/internal/summary/internal_notification.rb +0 -16
- data/ruby/neo4j/driver/internal/summary/internal_plan.rb +0 -41
- data/ruby/neo4j/driver/internal/summary/internal_profiled_plan.rb +0 -32
- data/ruby/neo4j/driver/internal/summary/internal_result_summary.rb +0 -33
- data/ruby/neo4j/driver/internal/summary/internal_server_info.rb +0 -6
- data/ruby/neo4j/driver/internal/summary/internal_summary_counters.rb +0 -18
- data/ruby/neo4j/driver/internal/svm/netty_substitutions.rb +0 -196
- data/ruby/neo4j/driver/internal/svm/z_lib_substitutions.rb +0 -21
- data/ruby/neo4j/driver/internal/util/certificate_tool.rb +0 -65
- data/ruby/neo4j/driver/internal/util/clock.rb +0 -29
- data/ruby/neo4j/driver/internal/util/error_util.rb +0 -104
- data/ruby/neo4j/driver/internal/util/extract.rb +0 -123
- data/ruby/neo4j/driver/internal/util/format.rb +0 -39
- data/ruby/neo4j/driver/internal/util/futures.rb +0 -99
- data/ruby/neo4j/driver/internal/util/iterables.rb +0 -35
- data/ruby/neo4j/driver/internal/util/lock_util.rb +0 -23
- data/ruby/neo4j/driver/internal/util/metadata_extractor.rb +0 -101
- data/ruby/neo4j/driver/internal/util/mutex.rb +0 -9
- data/ruby/neo4j/driver/internal/util/preconditions.rb +0 -16
- data/ruby/neo4j/driver/internal/util/result_holder.rb +0 -72
- data/ruby/neo4j/driver/internal/util/server_version.rb +0 -60
- data/ruby/neo4j/driver/logging1.rb +0 -51
- data/ruby/neo4j/driver/net/server_address.rb +0 -9
- data/ruby/neo4j/driver/query.rb +0 -48
- data/ruby/neo4j/driver/records.rb +0 -13
- data/ruby/neo4j/driver/transaction_config.rb +0 -50
- data/ruby/neo4j/driver/values.rb +0 -26
- data/ruby/neo4j/driver.rb +0 -30
|
@@ -1,97 +0,0 @@
|
|
|
1
|
-
module Neo4j::Driver
|
|
2
|
-
module Internal
|
|
3
|
-
# Holds a host and port pair that denotes a Bolt server address.
|
|
4
|
-
class BoltServerAddress
|
|
5
|
-
attr_reader :host, :connection_host, :port
|
|
6
|
-
delegate :hash, to: :attributes
|
|
7
|
-
|
|
8
|
-
DEFAULT_PORT = 7687
|
|
9
|
-
|
|
10
|
-
class << self
|
|
11
|
-
def host_from(uri)
|
|
12
|
-
uri&.host || (raise invalid_address_format(uri))
|
|
13
|
-
end
|
|
14
|
-
|
|
15
|
-
def port_from(uri)
|
|
16
|
-
uri&.port || DEFAULT_PORT
|
|
17
|
-
end
|
|
18
|
-
|
|
19
|
-
def uri_from(address)
|
|
20
|
-
scheme_split = address.split('://')
|
|
21
|
-
|
|
22
|
-
if scheme_split.length == 1
|
|
23
|
-
# URI can't parse addresses without scheme, prepend fake "bolt://" to reuse the parsing facility
|
|
24
|
-
scheme = 'bolt://'
|
|
25
|
-
host_port = host_port_from(scheme_split.first)
|
|
26
|
-
elsif scheme_split.length == 2
|
|
27
|
-
scheme = "#{scheme_split.first}://"
|
|
28
|
-
host_port = host_port_from(scheme_split.second)
|
|
29
|
-
else
|
|
30
|
-
raise invalid_address_format(address)
|
|
31
|
-
end
|
|
32
|
-
|
|
33
|
-
URI(scheme + host_port)
|
|
34
|
-
end
|
|
35
|
-
|
|
36
|
-
def host_port_from(address)
|
|
37
|
-
# expected to be an IPv6 address like [::1] or [::1]:7687
|
|
38
|
-
return address if address.start_with?('[')
|
|
39
|
-
|
|
40
|
-
contains_single_colon = address.index(':') == address.rindex(':')
|
|
41
|
-
|
|
42
|
-
# expected to be an IPv4 address with or without port like 127.0.0.1 or 127.0.0.1:7687
|
|
43
|
-
return address if contains_single_colon
|
|
44
|
-
|
|
45
|
-
# address contains multiple colons and does not start with '['
|
|
46
|
-
# expected to be an IPv6 address without brackets
|
|
47
|
-
"[#{address}]"
|
|
48
|
-
end
|
|
49
|
-
|
|
50
|
-
def invalid_address_format(address)
|
|
51
|
-
ArgumentError.new("Invalid address format #{address}")
|
|
52
|
-
end
|
|
53
|
-
|
|
54
|
-
def require_valid_port(port)
|
|
55
|
-
return port if port >= 0 && port <= 65_535
|
|
56
|
-
|
|
57
|
-
raise ArgumentError, "Illegal port: #{port}"
|
|
58
|
-
end
|
|
59
|
-
end
|
|
60
|
-
|
|
61
|
-
def initialize(uri: nil, host: self.class.host_from(uri), port: self.class.port_from(uri), connection_host: host)
|
|
62
|
-
@host = Validator.require_non_nil!(host)
|
|
63
|
-
@connection_host = Validator.require_non_nil!(connection_host)
|
|
64
|
-
@port = self.class.require_valid_port(port)
|
|
65
|
-
end
|
|
66
|
-
|
|
67
|
-
LOCAL_DEFAULT = new(host: 'localhost', port: DEFAULT_PORT)
|
|
68
|
-
|
|
69
|
-
def self.from(address)
|
|
70
|
-
address.is_a?(BoltServerAddress) ? address : new(host: address.host, port: address.port)
|
|
71
|
-
end
|
|
72
|
-
|
|
73
|
-
def ==(other)
|
|
74
|
-
attributes == other&.attributes
|
|
75
|
-
end
|
|
76
|
-
|
|
77
|
-
alias eql? ==
|
|
78
|
-
|
|
79
|
-
def to_s
|
|
80
|
-
"#{host}#{"(#{connection_host})" unless host == connection_host}:#{port}"
|
|
81
|
-
end
|
|
82
|
-
|
|
83
|
-
# Create a stream of unicast addresses.
|
|
84
|
-
# <p>
|
|
85
|
-
# While this implementation just returns a stream of itself, the subclasses may provide multiple addresses.
|
|
86
|
-
|
|
87
|
-
# @return stream of unicast addresses.
|
|
88
|
-
def unicast_stream
|
|
89
|
-
Set[self]
|
|
90
|
-
end
|
|
91
|
-
|
|
92
|
-
def attributes
|
|
93
|
-
[@host, @connection_host, @port]
|
|
94
|
-
end
|
|
95
|
-
end
|
|
96
|
-
end
|
|
97
|
-
end
|
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
module Neo4j
|
|
4
|
-
module Driver
|
|
5
|
-
module Synchronizable
|
|
6
|
-
def sync(*methods)
|
|
7
|
-
prepend with_sync_wrapper(methods)
|
|
8
|
-
end
|
|
9
|
-
|
|
10
|
-
private
|
|
11
|
-
|
|
12
|
-
def with_sync_wrapper(methods)
|
|
13
|
-
Module.new do
|
|
14
|
-
methods.each do |method|
|
|
15
|
-
define_method(method) do |*args, **kwargs, &block|
|
|
16
|
-
Sync { super(*args, **kwargs, &block) }
|
|
17
|
-
end
|
|
18
|
-
end
|
|
19
|
-
end
|
|
20
|
-
end
|
|
21
|
-
end
|
|
22
|
-
end
|
|
23
|
-
end
|
|
@@ -1,45 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
module Neo4j
|
|
4
|
-
module Driver
|
|
5
|
-
module Types
|
|
6
|
-
class Time
|
|
7
|
-
include Comparable
|
|
8
|
-
|
|
9
|
-
delegate :hash, :to_a, to: :significant
|
|
10
|
-
|
|
11
|
-
class << self
|
|
12
|
-
def parse(date)
|
|
13
|
-
new(::Time.parse(date))
|
|
14
|
-
end
|
|
15
|
-
end
|
|
16
|
-
|
|
17
|
-
def initialize(time)
|
|
18
|
-
@time = time
|
|
19
|
-
end
|
|
20
|
-
|
|
21
|
-
def significant
|
|
22
|
-
self.class.significant_fields.map(&method(:send))
|
|
23
|
-
end
|
|
24
|
-
|
|
25
|
-
def <=>(other)
|
|
26
|
-
return unless other.is_a?(self.class)
|
|
27
|
-
|
|
28
|
-
self.class.significant_fields.reduce(0) do |acc, elem|
|
|
29
|
-
acc.zero? ? send(elem) <=> other.send(elem) : (break acc)
|
|
30
|
-
end
|
|
31
|
-
end
|
|
32
|
-
|
|
33
|
-
def ==(other)
|
|
34
|
-
other.is_a?(self.class) && self.class.significant_fields.all? { |elem| send(elem) == other.send(elem) }
|
|
35
|
-
end
|
|
36
|
-
|
|
37
|
-
alias eql? ==
|
|
38
|
-
|
|
39
|
-
def +(numeric)
|
|
40
|
-
self.class.new(@time + numeric)
|
|
41
|
-
end
|
|
42
|
-
end
|
|
43
|
-
end
|
|
44
|
-
end
|
|
45
|
-
end
|
|
@@ -1,34 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
module Neo4j
|
|
4
|
-
module Driver
|
|
5
|
-
class AuthTokens
|
|
6
|
-
class << self
|
|
7
|
-
def basic(username, password, realm = nil)
|
|
8
|
-
Internal::Validator.require_non_nil_credentials!(username, password)
|
|
9
|
-
Internal::Security::InternalAuthToken[
|
|
10
|
-
{ scheme: 'basic', principal: username, credentials: password, realm: realm }.compact]
|
|
11
|
-
end
|
|
12
|
-
|
|
13
|
-
def bearer(token)
|
|
14
|
-
Internal::Validator.require_non_nil!(token, "Token")
|
|
15
|
-
Internal::Security::InternalAuthToken[scheme: 'bearer', credentials: token]
|
|
16
|
-
end
|
|
17
|
-
|
|
18
|
-
def kerberos(base64_encoded_ticket)
|
|
19
|
-
Internal::Validator.require_non_nil!(base64_encoded_ticket, "Ticket")
|
|
20
|
-
Internal::Security::InternalAuthToken[scheme: 'bearer', credentials: base64_encoded_ticket]
|
|
21
|
-
end
|
|
22
|
-
|
|
23
|
-
def custom(principal, credentials, realm, scheme, **parameters)
|
|
24
|
-
Internal::Security::InternalAuthToken[{ scheme: scheme, principal: principal, credentials: credentials,
|
|
25
|
-
realm: realm, parameters: parameters.presence || nil }.compact]
|
|
26
|
-
end
|
|
27
|
-
|
|
28
|
-
def none
|
|
29
|
-
Internal::Security::InternalAuthToken[scheme: 'none']
|
|
30
|
-
end
|
|
31
|
-
end
|
|
32
|
-
end
|
|
33
|
-
end
|
|
34
|
-
end
|
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
module Neo4j
|
|
2
|
-
module Driver
|
|
3
|
-
# Causal chaining is carried out by passing bookmarks between transactions.
|
|
4
|
-
|
|
5
|
-
# When starting a session with initial bookmarks, the first transaction will be ensured to run at least after
|
|
6
|
-
# the database is as up-to-date as the latest transaction referenced by the supplied bookmarks.
|
|
7
|
-
|
|
8
|
-
# Within a session, bookmark propagation is carried out automatically.
|
|
9
|
-
# Thus all transactions in a session (both managed and unmanaged) are guaranteed to be carried out one after another.
|
|
10
|
-
|
|
11
|
-
# To opt out of this mechanism for unrelated units of work, applications can use multiple sessions.
|
|
12
|
-
module Bookmark
|
|
13
|
-
# Reconstruct bookmark from \bookmarks string values.
|
|
14
|
-
# @param values values obtained from a previous bookmark.
|
|
15
|
-
# @return A bookmark.
|
|
16
|
-
def self.from(value)
|
|
17
|
-
Internal::InternalBookmark.new(value)
|
|
18
|
-
end
|
|
19
|
-
end
|
|
20
|
-
end
|
|
21
|
-
end
|
data/ruby/neo4j/driver/config.rb
DELETED
|
@@ -1,89 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
module Neo4j
|
|
4
|
-
module Driver
|
|
5
|
-
class Config < Hash
|
|
6
|
-
class TrustStrategy
|
|
7
|
-
TRUST_ALL_CERTIFICATES = :trust_all_certificates
|
|
8
|
-
TRUST_CUSTOM_CA_SIGNED_CERTIFICATES = :trust_custom_certificates
|
|
9
|
-
TRUST_SYSTEM_CA_SIGNED_CERTIFICATES = :trust_system_certificates
|
|
10
|
-
|
|
11
|
-
attr_reader :strategy, :cert_files, :revocation_strategy
|
|
12
|
-
|
|
13
|
-
# Sample config:
|
|
14
|
-
# {
|
|
15
|
-
# trust_strategy: {
|
|
16
|
-
# strategy: :trust_custom_certificates,
|
|
17
|
-
# cert_files: ['some_path', 'another_path'],
|
|
18
|
-
# revocation_strategy: :no_checks, # or :verify_if_present, :strict
|
|
19
|
-
# hostname_verification: true
|
|
20
|
-
# },
|
|
21
|
-
# encryption: true
|
|
22
|
-
# }
|
|
23
|
-
def initialize(**config)
|
|
24
|
-
@strategy = config[:strategy]
|
|
25
|
-
@cert_files = config[:cert_files]
|
|
26
|
-
@revocation_strategy = config[:revocation_strategy] || Neo4j::Driver::Internal::RevocationStrategy::NO_CHECKS
|
|
27
|
-
@hostname_verification_enabled = config[:hostname_verification] || false
|
|
28
|
-
end
|
|
29
|
-
|
|
30
|
-
def self.trust_all_certificates
|
|
31
|
-
new(trust_strategy: TRUST_ALL_CERTIFICATES)
|
|
32
|
-
end
|
|
33
|
-
|
|
34
|
-
def hostname_verification_enabled?
|
|
35
|
-
@hostname_verification_enabled
|
|
36
|
-
end
|
|
37
|
-
end
|
|
38
|
-
|
|
39
|
-
# Console.logger = ::Logger.new(STDOUT, level: :debug)
|
|
40
|
-
DEFAULTS = {
|
|
41
|
-
logger: ::Logger.new(nil),
|
|
42
|
-
# logger: ::Logger.new(STDOUT, level: :debug),
|
|
43
|
-
# logger: Console.logger,
|
|
44
|
-
leaked_sessions_logging: false,
|
|
45
|
-
max_connection_pool_size: Internal::Async::Pool::PoolSettings::DEFAULT_MAX_CONNECTION_POOL_SIZE,
|
|
46
|
-
idle_time_before_connection_test: Internal::Async::Pool::PoolSettings::DEFAULT_IDLE_TIME_BEFORE_CONNECTION_TEST,
|
|
47
|
-
max_connection_lifetime: Internal::Async::Pool::PoolSettings::DEFAULT_MAX_CONNECTION_LIFETIME,
|
|
48
|
-
connection_acquisition_timeout: Internal::Async::Pool::PoolSettings::DEFAULT_CONNECTION_ACQUISITION_TIMEOUT,
|
|
49
|
-
routing_failure_limit: Internal::Cluster::RoutingSettings::DEFAULT.max_routing_failures,
|
|
50
|
-
routing_retry_delay: Internal::Cluster::RoutingSettings::DEFAULT.retry_timeout_delay,
|
|
51
|
-
routing_table_purge_delay: Internal::Cluster::RoutingSettings::DEFAULT.routing_table_purge_delay,
|
|
52
|
-
user_agent: "neo4j-ruby/#{Neo4j::Driver::VERSION}",
|
|
53
|
-
connection_timeout: 30.seconds,
|
|
54
|
-
driver_metrics: false,
|
|
55
|
-
fetch_size: Internal::Handlers::Pulln::FetchSizeUtil::DEFAULT_FETCH_SIZE,
|
|
56
|
-
event_loop_threads: 0,
|
|
57
|
-
|
|
58
|
-
# TODO: Still to cleanup
|
|
59
|
-
encryption: false, # :set_transport
|
|
60
|
-
keep_alive: true, # BoltSocketOptions_set_keep_alive
|
|
61
|
-
# connection_liveness_check_timeout: -1, # Not configured
|
|
62
|
-
max_transaction_retry_time: Internal::Retry::ExponentialBackoffRetryLogic::DEFAULT_MAX_RETRY_TIME,
|
|
63
|
-
metrics_enabled: false,
|
|
64
|
-
# resolver: nil # :set_address_resolver
|
|
65
|
-
trust_strategy: { strategy: :trust_all_certificates }
|
|
66
|
-
}.freeze
|
|
67
|
-
|
|
68
|
-
def initialize(**config)
|
|
69
|
-
merge!(DEFAULTS).merge!(config.compact)
|
|
70
|
-
init_security_and_trust_config
|
|
71
|
-
end
|
|
72
|
-
|
|
73
|
-
def routing_settings
|
|
74
|
-
Internal::Cluster::RoutingSettings.new(
|
|
75
|
-
*values_at(:routing_failure_limit, :routing_retry_delay, :routing_table_purge_delay))
|
|
76
|
-
end
|
|
77
|
-
|
|
78
|
-
private
|
|
79
|
-
|
|
80
|
-
def init_security_and_trust_config
|
|
81
|
-
relevant = %i[encryption trust_strategy]
|
|
82
|
-
customized = slice(*relevant) != DEFAULTS.slice(*relevant)
|
|
83
|
-
merge!(security_settings: Neo4j::Driver::Internal::SecuritySetting.new(
|
|
84
|
-
fetch(:encryption), TrustStrategy.new(**fetch(:trust_strategy)), customized),
|
|
85
|
-
)
|
|
86
|
-
end
|
|
87
|
-
end
|
|
88
|
-
end
|
|
89
|
-
end
|
|
@@ -1,78 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
module Neo4j::Driver
|
|
4
|
-
class GraphDatabase
|
|
5
|
-
class << self
|
|
6
|
-
extend AutoCloseable
|
|
7
|
-
auto_closeable :driver, :routing_driver
|
|
8
|
-
|
|
9
|
-
def driver(uri, auth_token = nil, **config)
|
|
10
|
-
internal_driver(uri, auth_token, config)
|
|
11
|
-
end
|
|
12
|
-
|
|
13
|
-
def internal_driver(uri, auth_token, config, &domain_name_resolver)
|
|
14
|
-
uri = URI(uri)
|
|
15
|
-
config = Config.new(**config)
|
|
16
|
-
|
|
17
|
-
Internal::DriverFactory.new(&domain_name_resolver).new_instance(
|
|
18
|
-
uri,
|
|
19
|
-
auth_token || AuthTokens.none,
|
|
20
|
-
config.routing_settings,
|
|
21
|
-
config[:max_transaction_retry_time],
|
|
22
|
-
config,
|
|
23
|
-
config[:security_settings].create_security_plan(uri.scheme)
|
|
24
|
-
)
|
|
25
|
-
end
|
|
26
|
-
|
|
27
|
-
def routing_driver(routing_uris, auth_token, **config)
|
|
28
|
-
assert_routing_uris(routing_uris)
|
|
29
|
-
log = Config.new(**config)[:logger]
|
|
30
|
-
|
|
31
|
-
routing_uris.each do |uri|
|
|
32
|
-
driver = driver(uri, auth_token, **config)
|
|
33
|
-
begin
|
|
34
|
-
return driver.tap(&:verify_connectivity)
|
|
35
|
-
rescue Exceptions::ServiceUnavailableException => e
|
|
36
|
-
log.warn { "Unable to create routing driver for URI: #{uri}\n#{e}" }
|
|
37
|
-
close_driver(driver, uri, log)
|
|
38
|
-
rescue Exception => e
|
|
39
|
-
close_driver(driver, uri, log)
|
|
40
|
-
raise e
|
|
41
|
-
end
|
|
42
|
-
end
|
|
43
|
-
|
|
44
|
-
raise Exceptions::ServiceUnavailableException, 'Failed to discover an available server'
|
|
45
|
-
end
|
|
46
|
-
|
|
47
|
-
private
|
|
48
|
-
|
|
49
|
-
def bolt_version(version)
|
|
50
|
-
pad(version.split(/[.\-]/).map(&:to_i), 4).reverse
|
|
51
|
-
end
|
|
52
|
-
|
|
53
|
-
def ruby_version(bolt_version)
|
|
54
|
-
bolt_version.unpack('C*').reverse.map(&:to_s).join('.')
|
|
55
|
-
end
|
|
56
|
-
|
|
57
|
-
def bolt_versions(*versions)
|
|
58
|
-
pad(versions[0..3].map(&method(:bolt_version)).flatten, 16).pack('C*')
|
|
59
|
-
end
|
|
60
|
-
|
|
61
|
-
def pad(arr, n)
|
|
62
|
-
arr + [0] * [0, n - arr.size].max
|
|
63
|
-
end
|
|
64
|
-
|
|
65
|
-
def close_driver(driver, uri, log)
|
|
66
|
-
driver.close
|
|
67
|
-
rescue => close_error
|
|
68
|
-
log.warn { "Unable to close driver towards URI: #{uri}\n#{close_error}" }
|
|
69
|
-
end
|
|
70
|
-
|
|
71
|
-
def assert_routing_uris(uris)
|
|
72
|
-
uris.find { |uri| URI(uri).scheme != Neo4j::Driver::Internal::Scheme::NEO4J_URI_SCHEME }&.tap do |uri|
|
|
73
|
-
raise ArgumentError, "Illegal URI scheme, expected '#{Internal::Scheme::NEO4J_URI_SCHEME}' in '#{uri}'"
|
|
74
|
-
end
|
|
75
|
-
end
|
|
76
|
-
end
|
|
77
|
-
end
|
|
78
|
-
end
|
|
@@ -1,51 +0,0 @@
|
|
|
1
|
-
module Neo4j::Driver
|
|
2
|
-
module Internal
|
|
3
|
-
module Async
|
|
4
|
-
module Connection
|
|
5
|
-
class BoltProtocolUtil
|
|
6
|
-
BOLT_MAGIC_PREAMBLE = 0x6060B017
|
|
7
|
-
NO_PROTOCOL_VERSION = Messaging::BoltProtocolVersion.new(0, 0)
|
|
8
|
-
CHUNK_HEADER_SIZE_BYTES = 2
|
|
9
|
-
DEFAULT_MAX_OUTBOUND_CHUNK_SIZE_BYTES = 2 ** 15 - 1
|
|
10
|
-
HANDSHAKE = [
|
|
11
|
-
BOLT_MAGIC_PREAMBLE,
|
|
12
|
-
Messaging::V5::BoltProtocolV5::VERSION.to_int,
|
|
13
|
-
Messaging::V44::BoltProtocolV44::VERSION.to_int_range(Messaging::V42::BoltProtocolV42::VERSION),
|
|
14
|
-
Messaging::V41::BoltProtocolV41::VERSION.to_int,
|
|
15
|
-
Messaging::V3::BoltProtocolV3::VERSION.to_int]
|
|
16
|
-
HANDSHAKE_BUF = HANDSHAKE.pack('N*').freeze
|
|
17
|
-
|
|
18
|
-
class << self
|
|
19
|
-
def handshake_buf
|
|
20
|
-
HANDSHAKE_BUF
|
|
21
|
-
end
|
|
22
|
-
|
|
23
|
-
def handshake_string
|
|
24
|
-
HANDSHAKE_STRING
|
|
25
|
-
end
|
|
26
|
-
|
|
27
|
-
def write_message_boundary(buf)
|
|
28
|
-
buf.write_short(0)
|
|
29
|
-
end
|
|
30
|
-
|
|
31
|
-
def write_empty_chunk_header(buf)
|
|
32
|
-
buf.write_short(0)
|
|
33
|
-
end
|
|
34
|
-
|
|
35
|
-
def write_chunk_header(buf, chunk_start_index, header_value)
|
|
36
|
-
buf.set_short(chunk_start_index, header_value)
|
|
37
|
-
end
|
|
38
|
-
|
|
39
|
-
private
|
|
40
|
-
|
|
41
|
-
def create_handshake_string
|
|
42
|
-
"[0x#{HANDSHAKE.first.to_s(16)}, %s, %s, %s, %s]" % HANDSHAKE[1, 4]
|
|
43
|
-
end
|
|
44
|
-
end
|
|
45
|
-
|
|
46
|
-
HANDSHAKE_STRING = create_handshake_string
|
|
47
|
-
end
|
|
48
|
-
end
|
|
49
|
-
end
|
|
50
|
-
end
|
|
51
|
-
end
|
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
module Neo4j::Driver
|
|
2
|
-
module Internal
|
|
3
|
-
module Async
|
|
4
|
-
module Connection
|
|
5
|
-
class BootstrapFactory
|
|
6
|
-
class << self
|
|
7
|
-
def new_bootstrap(thread_count: nil,
|
|
8
|
-
event_loop_group: EventLoopGroupFactory.new_event_loop_group(thread_count))
|
|
9
|
-
# Ione::Io::IoReactor.new
|
|
10
|
-
# Io::Bootstrap.new.tap do |bootstrap|
|
|
11
|
-
# bootstrap.group = event_loop_group
|
|
12
|
-
# bootstrap.channel(EventLoopGroupFactory.channel_class)
|
|
13
|
-
# bootstrap.option(org.neo4j.driver.internal.shaded.io.netty.channel.ChannelOption::SO_KEEPALIVE, true)
|
|
14
|
-
# bootstrap.option(org.neo4j.driver.internal.shaded.io.netty.channel.ChannelOption::SO_REUSEADDR, true)
|
|
15
|
-
# end
|
|
16
|
-
end
|
|
17
|
-
end
|
|
18
|
-
end
|
|
19
|
-
end
|
|
20
|
-
end
|
|
21
|
-
end
|
|
22
|
-
end
|
|
@@ -1,31 +0,0 @@
|
|
|
1
|
-
module Neo4j::Driver
|
|
2
|
-
module Internal
|
|
3
|
-
module Async
|
|
4
|
-
module Connection
|
|
5
|
-
class ChannelAttributes < Hash
|
|
6
|
-
# CONNECTION_ID = org.neo4j.driver.internal.shaded.io.netty.util.AttributeKey.new_instance('connectionId')
|
|
7
|
-
# POOL_ID = org.neo4j.driver.internal.shaded.io.netty.util.AttributeKey.new_instance('poolId')
|
|
8
|
-
# PROTOCOL_VERSION = org.neo4j.driver.internal.shaded.io.netty.util.AttributeKey.new_instance('protocolVersion')
|
|
9
|
-
# SERVER_AGENT = org.neo4j.driver.internal.shaded.io.netty.util.AttributeKey.new_instance('serverAgent')
|
|
10
|
-
# ADDRESS = org.neo4j.driver.internal.shaded.io.netty.util.AttributeKey.new_instance('serverAddress')
|
|
11
|
-
# SERVER_VERSION = org.neo4j.driver.internal.shaded.io.netty.util.AttributeKey.new_instance('serverVersion')
|
|
12
|
-
# CREATION_TIMESTAMP = org.neo4j.driver.internal.shaded.io.netty.util.AttributeKey.new_instance('creationTimestamp')
|
|
13
|
-
# LAST_USED_TIMESTAMP = org.neo4j.driver.internal.shaded.io.netty.util.AttributeKey.new_instance('lastUsedTimestamp')
|
|
14
|
-
# MESSAGE_DISPATCHER = org.neo4j.driver.internal.shaded.io.netty.util.AttributeKey.new_instance('messageDispatcher')
|
|
15
|
-
# TERMINATION_REASON = org.neo4j.driver.internal.shaded.io.netty.util.AttributeKey.new_instance('terminationReason')
|
|
16
|
-
# AUTHORIZATION_STATE_LISTENER = org.neo4j.driver.internal.shaded.io.netty.util.AttributeKey.new_instance('authorizationStateListener')
|
|
17
|
-
# CONNECTION_READ_TIMEOUT = org.neo4j.driver.internal.shaded.io.netty.util.AttributeKey.new_instance('connectionReadTimeout')
|
|
18
|
-
|
|
19
|
-
UPDATABLE_KEYS = %i[last_used_timestamp authorization_state_listener]
|
|
20
|
-
|
|
21
|
-
def []=(key, value)
|
|
22
|
-
if !UPDATABLE_KEYS.include?(key) && key?(key)
|
|
23
|
-
raise Neo4j::Driver::Exceptions::IllegalStateException, "Unable to set #{key} because it is already set to #{self[key]}"
|
|
24
|
-
end
|
|
25
|
-
super
|
|
26
|
-
end
|
|
27
|
-
end
|
|
28
|
-
end
|
|
29
|
-
end
|
|
30
|
-
end
|
|
31
|
-
end
|
|
@@ -1,32 +0,0 @@
|
|
|
1
|
-
module Neo4j::Driver
|
|
2
|
-
module Internal
|
|
3
|
-
module Async
|
|
4
|
-
module Connection
|
|
5
|
-
class ChannelConnectedListener < Struct.new(:address, :pipeline_builder, :handshake_completed_promise, :logger)
|
|
6
|
-
# include org.neo4j.driver.internal.shaded.io.netty.channel.ChannelFutureListener
|
|
7
|
-
def operationComplete(future)
|
|
8
|
-
channel = future.channel
|
|
9
|
-
log = Logging::ChannelActivityLogger.new(channel, logger, self.class)
|
|
10
|
-
|
|
11
|
-
if future.fulfilled?
|
|
12
|
-
log.debug("Channel #{channel} connected, initiating bolt handshake")
|
|
13
|
-
|
|
14
|
-
pipeline = channel.pipeline
|
|
15
|
-
pipeline.add_last(HandshakeHandler.new(pipeline_builder, handshake_completed_promise, logger))
|
|
16
|
-
log.debug("C: [Bolt Handshake] #{BoltProtocolUtil.handshake_string}")
|
|
17
|
-
channel.write_and_flush(BoltProtocolUtil.handshake_buf, channel.void_promise)
|
|
18
|
-
else
|
|
19
|
-
handshake_completed_promise.set_failure(self.class.database_unavailable_error(address, future.cause))
|
|
20
|
-
end
|
|
21
|
-
end
|
|
22
|
-
|
|
23
|
-
def self.database_unavailable_error(address, cause)
|
|
24
|
-
Neo4j::Driver::Exceptions::ServiceUnavailableException.new(
|
|
25
|
-
"Unable to connect to #{address}, ensure the database is running and that there is a working network connection to it.",
|
|
26
|
-
cause)
|
|
27
|
-
end
|
|
28
|
-
end
|
|
29
|
-
end
|
|
30
|
-
end
|
|
31
|
-
end
|
|
32
|
-
end
|
|
@@ -1,83 +0,0 @@
|
|
|
1
|
-
module Neo4j::Driver
|
|
2
|
-
module Internal
|
|
3
|
-
module Async
|
|
4
|
-
module Connection
|
|
5
|
-
class ChannelConnectorImpl
|
|
6
|
-
def initialize(connection_settings, security_plan, logger, clock, routing_context, pipeline_builder = ChannelPipelineBuilderImpl.new, &domain_name_resolver)
|
|
7
|
-
@user_agent = connection_settings.user_agent
|
|
8
|
-
@auth_token = self.class.require_valid_auth_token(connection_settings.auth_token)
|
|
9
|
-
@routing_context = routing_context
|
|
10
|
-
@connect_timeout_millis = connection_settings.connect_timeout_millis
|
|
11
|
-
@security_plan = Validator.require_non_nil!(security_plan)
|
|
12
|
-
@pipeline_builder = pipeline_builder
|
|
13
|
-
@logger = Validator.require_non_nil!(logger)
|
|
14
|
-
@clock = Validator.require_non_nil!(clock)
|
|
15
|
-
@domain_name_resolver = Validator.require_non_nil!(domain_name_resolver)
|
|
16
|
-
end
|
|
17
|
-
|
|
18
|
-
def connect(address)
|
|
19
|
-
socket_host = (@domain_name_resolver.call(address.connection_host).first.ip_address rescue nil) ||
|
|
20
|
-
bracketless(address.connection_host)
|
|
21
|
-
|
|
22
|
-
endpoint = ::Async::IO::Endpoint.tcp(socket_host, address.port)
|
|
23
|
-
if @security_plan.requires_encryption?
|
|
24
|
-
endpoint = ::Async::IO::SSLEndpoint.new(endpoint, ssl_context: @security_plan.ssl_context,
|
|
25
|
-
hostname: address.host)
|
|
26
|
-
end
|
|
27
|
-
channel_connected = endpoint.connect
|
|
28
|
-
|
|
29
|
-
# install_channel_connected_listeners(address, channel_connected, handshake_completed)
|
|
30
|
-
# install_handshake_completed_listeners(handshake_completed, connection_initialized)
|
|
31
|
-
|
|
32
|
-
channel_connected
|
|
33
|
-
rescue Errno::ECONNREFUSED => e
|
|
34
|
-
raise Exceptions::ServiceUnavailableException, e.message
|
|
35
|
-
end
|
|
36
|
-
|
|
37
|
-
def initialize_channel(channel, protocol)
|
|
38
|
-
protocol.initialize_channel(channel, @user_agent, @auth_token, @routing_context)
|
|
39
|
-
end
|
|
40
|
-
|
|
41
|
-
private
|
|
42
|
-
|
|
43
|
-
def bracketless(host)
|
|
44
|
-
host.delete_prefix('[').delete_suffix(']')
|
|
45
|
-
end
|
|
46
|
-
|
|
47
|
-
def install_channel_connected_listeners(address, channel_connected, handshake_completed)
|
|
48
|
-
pipeline = channel_connected.channel.pipeline
|
|
49
|
-
|
|
50
|
-
# add timeout handler to the pipeline when channel is connected. it's needed to limit amount of time code
|
|
51
|
-
# spends in TLS and Bolt handshakes. prevents infinite waiting when database does not respond
|
|
52
|
-
channel_connected.add_listener { pipeline.add_first(Inbound::ConnectTimeoutHandler.new(@connect_timeout_millis)) }
|
|
53
|
-
|
|
54
|
-
# add listener that sends Bolt handshake bytes when channel is connected
|
|
55
|
-
channel_connected.add_listener(ChannelConnectedListener.new(address, @pipeline_builder, handshake_completed, @logger))
|
|
56
|
-
end
|
|
57
|
-
|
|
58
|
-
def install_handshake_completed_listeners(handshake_completed, connection_initialized)
|
|
59
|
-
pipeline = handshake_completed.channel.pipeline
|
|
60
|
-
|
|
61
|
-
# remove timeout handler from the pipeline once TLS and Bolt handshakes are completed. regular protocol
|
|
62
|
-
# messages will flow next and we do not want to have read timeout for them
|
|
63
|
-
handshake_completed.add_listener { pipeline.remove(Inbound::ConnectTimeoutHandler.java_class) }
|
|
64
|
-
|
|
65
|
-
# add listener that sends an INIT message. connection is now fully established. channel pipeline if fully
|
|
66
|
-
# set to send/receive messages for a selected protocol version
|
|
67
|
-
handshake_completed.add_listener(HandshakeCompletedListener.new(@user_agent, @auth_token, @routing_context, connection_initialized))
|
|
68
|
-
end
|
|
69
|
-
|
|
70
|
-
class << self
|
|
71
|
-
def require_valid_auth_token(token)
|
|
72
|
-
if token.is_a? Internal::Security::InternalAuthToken
|
|
73
|
-
token
|
|
74
|
-
else
|
|
75
|
-
raise Exceptions::ClientException, "Unknown authentication token, `#{token}`. Please use one of the supported tokens from `#{AuthTokens.class}`."
|
|
76
|
-
end
|
|
77
|
-
end
|
|
78
|
-
end
|
|
79
|
-
end
|
|
80
|
-
end
|
|
81
|
-
end
|
|
82
|
-
end
|
|
83
|
-
end
|
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
module Neo4j::Driver
|
|
2
|
-
module Internal
|
|
3
|
-
module Async
|
|
4
|
-
module Connection
|
|
5
|
-
class ChannelPipelineBuilderImpl
|
|
6
|
-
def build(message_format, pipeline, logger)
|
|
7
|
-
# inbound handlers
|
|
8
|
-
pipeline.add_last(Inbound::ChunkDecoder.new(logger))
|
|
9
|
-
pipeline.add_last(Inbound::MessageDecoder.new)
|
|
10
|
-
pipeline.add_last(Inbound::InboundMessageHandler.new(message_format, logger))
|
|
11
|
-
|
|
12
|
-
# outbound handlers
|
|
13
|
-
pipeline.add_last(Outbound::OutboundMessageHandler::NAME, Outbound::OutboundMessageHandler.new(message_format, logger))
|
|
14
|
-
|
|
15
|
-
# last one - error handler
|
|
16
|
-
pipeline.add_last(Inbound::ChannelErrorHandler.new(logger))
|
|
17
|
-
end
|
|
18
|
-
end
|
|
19
|
-
end
|
|
20
|
-
end
|
|
21
|
-
end
|
|
22
|
-
end
|
|
@@ -1,30 +0,0 @@
|
|
|
1
|
-
module Neo4j::Driver
|
|
2
|
-
module Internal
|
|
3
|
-
module Async
|
|
4
|
-
module Connection
|
|
5
|
-
# This is a connection used by {@link DirectConnectionProvider} to connect to a remote database.
|
|
6
|
-
class DirectConnection < Struct.new(:delegate, :database_name, :mode, :impersonated_user)
|
|
7
|
-
delegate *%i[enable_auto_read disable_auto_read reset open? release terminate_and_release server_agent
|
|
8
|
-
server_address server_version protocol flush], to: :delegate
|
|
9
|
-
alias connection delegate
|
|
10
|
-
|
|
11
|
-
def write(message1, handler1, message2 = nil, handler2 = nil)
|
|
12
|
-
if message2.present? && handler2.present?
|
|
13
|
-
delegate.write(message1, handler1, message2, handler2)
|
|
14
|
-
else
|
|
15
|
-
delegate.write(message1, handler1)
|
|
16
|
-
end
|
|
17
|
-
end
|
|
18
|
-
|
|
19
|
-
def write_and_flush(message1, handler1, message2 = nil, handler2 = nil)
|
|
20
|
-
if message2.present? && handler2.present?
|
|
21
|
-
delegate.write_and_flush(message1, handler1, message2, handler2)
|
|
22
|
-
else
|
|
23
|
-
delegate.write_and_flush(message1, handler1)
|
|
24
|
-
end
|
|
25
|
-
end
|
|
26
|
-
end
|
|
27
|
-
end
|
|
28
|
-
end
|
|
29
|
-
end
|
|
30
|
-
end
|