neo4j-ruby-driver 5.7.0.alpha.4 → 6.0.3.alpha.0-java
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 +440 -40
- data/jruby/neo4j/driver/ext/async_converter.rb +55 -0
- data/jruby/neo4j/driver/ext/auth_tokens.rb +20 -0
- data/jruby/neo4j/driver/ext/config_converter.rb +83 -0
- data/jruby/neo4j/driver/ext/exception_checkable.rb +34 -0
- data/jruby/neo4j/driver/ext/exception_mapper.rb +92 -0
- data/jruby/neo4j/driver/ext/graph_database.rb +33 -0
- data/jruby/neo4j/driver/ext/internal/abstract_query_runner.rb +18 -0
- data/jruby/neo4j/driver/ext/internal/async/internal_async_session.rb +23 -0
- data/jruby/neo4j/driver/ext/internal/cluster/routing_table_registry_impl.rb +15 -0
- data/jruby/neo4j/driver/ext/internal/cursor/disposable_async_result_cursor.rb +15 -0
- data/jruby/neo4j/driver/ext/internal/driver_factory.rb +24 -0
- data/jruby/neo4j/driver/ext/internal/eager_result_value.rb +17 -0
- data/jruby/neo4j/driver/ext/internal/metrics/internal_connection_pool_metrics.rb +17 -0
- data/jruby/neo4j/driver/ext/internal/summary/internal_notification.rb +27 -0
- data/jruby/neo4j/driver/ext/internal/summary/internal_plan.rb +26 -0
- data/jruby/neo4j/driver/ext/internal/summary/internal_result_summary.rb +34 -0
- data/jruby/neo4j/driver/ext/internal_driver.rb +52 -0
- data/jruby/neo4j/driver/ext/internal_entity.rb +21 -0
- data/jruby/neo4j/driver/ext/internal_keys.rb +15 -0
- data/jruby/neo4j/driver/ext/internal_node.rb +13 -0
- data/jruby/neo4j/driver/ext/internal_record.rb +29 -0
- data/jruby/neo4j/driver/ext/internal_relationship.rb +13 -0
- data/jruby/neo4j/driver/ext/internal_result.rb +27 -0
- data/jruby/neo4j/driver/ext/internal_session.rb +44 -0
- data/jruby/neo4j/driver/ext/internal_transaction.rb +19 -0
- data/jruby/neo4j/driver/ext/logger.rb +60 -0
- data/jruby/neo4j/driver/ext/map_converter.rb +14 -0
- data/jruby/neo4j/driver/ext/neo_converter.rb +59 -0
- data/jruby/neo4j/driver/ext/query.rb +13 -0
- data/jruby/neo4j/driver/ext/ruby_converter.rb +57 -0
- data/jruby/neo4j/driver/ext/run_override.rb +22 -0
- data/jruby/neo4j/driver/ext/start_end_naming.rb +17 -0
- data/{ruby → jruby}/neo4j/driver/version.rb +1 -1
- data/jruby/neo4j/driver.rb +62 -0
- data/lib/neo4j/driver/{auto_closable.rb → auto_closeable.rb} +6 -6
- data/lib/neo4j/driver/exceptions/neo4j_exception.rb +6 -6
- data/lib/neo4j/driver/internal/deprecator.rb +15 -0
- metadata +91 -277
- data/ruby/neo4j/driver/access_mode.rb +0 -10
- 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 -98
- 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/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 -25
- 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 -168
- 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 -70
- 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 -36
- data/ruby/neo4j/driver/internal/internal_database_name.rb +0 -9
- data/ruby/neo4j/driver/internal/internal_driver.rb +0 -74
- 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 -81
- 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 -326
- 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 -151
- 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 -107
- 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 -28
|
@@ -1,57 +0,0 @@
|
|
|
1
|
-
module Neo4j::Driver
|
|
2
|
-
module Internal
|
|
3
|
-
module Async
|
|
4
|
-
module Connection
|
|
5
|
-
class NettyChannelInitializer #< org.neo4j.driver.internal.shaded.io.netty.channel.ChannelInitializer
|
|
6
|
-
def initialize(address, security_plan, connect_timeout_millis, clock, logger)
|
|
7
|
-
super()
|
|
8
|
-
@address = address
|
|
9
|
-
@security_plan = security_plan
|
|
10
|
-
@connect_timeout_millis = connect_timeout_millis
|
|
11
|
-
@clock = clock
|
|
12
|
-
@logger = logger
|
|
13
|
-
end
|
|
14
|
-
|
|
15
|
-
protected
|
|
16
|
-
|
|
17
|
-
def initChannel(channel)
|
|
18
|
-
if @security_plan.requires_encryption?
|
|
19
|
-
ssl_handler = create_ssl_handler
|
|
20
|
-
channel.pipeline.add_first(ssl_handler)
|
|
21
|
-
end
|
|
22
|
-
|
|
23
|
-
update_channel_attributes(channel)
|
|
24
|
-
end
|
|
25
|
-
|
|
26
|
-
private
|
|
27
|
-
|
|
28
|
-
def create_ssl_handler
|
|
29
|
-
ssl_engine = create_ssl_engine
|
|
30
|
-
ssl_handler = org.neo4j.driver.internal.shaded.io.netty.handler.ssl.SslHandler.new(ssl_engine)
|
|
31
|
-
ssl_handler.set_handshake_timeout_millis(@connect_timeout_millis)
|
|
32
|
-
ssl_handler
|
|
33
|
-
end
|
|
34
|
-
|
|
35
|
-
def create_ssl_engine
|
|
36
|
-
ssl_context = @security_plan.ssl_context
|
|
37
|
-
ssl_engine = ssl_context.create_ssl_engine(@address.host, @address.port)
|
|
38
|
-
ssl_engine.set_use_client_mode(true)
|
|
39
|
-
|
|
40
|
-
if @security_plan.requires_hostname_verification
|
|
41
|
-
ssl_parameters = ssl_engine.get_ssl_parameters
|
|
42
|
-
ssl_parameters.set_endpoint_identification_algorithm('HTTPS')
|
|
43
|
-
ssl_engine.set_ssl_parameters(ssl_parameters)
|
|
44
|
-
end
|
|
45
|
-
ssl_engine
|
|
46
|
-
end
|
|
47
|
-
|
|
48
|
-
def update_channel_attributes(channel)
|
|
49
|
-
ChannelAttributes.set_server_address(channel, @address)
|
|
50
|
-
ChannelAttributes.set_creation_timestamp(channel, @clock.millis)
|
|
51
|
-
ChannelAttributes.set_message_dispatcher(channel, Inbound::InboundMessageDispatcher.new(channel, @logger))
|
|
52
|
-
end
|
|
53
|
-
end
|
|
54
|
-
end
|
|
55
|
-
end
|
|
56
|
-
end
|
|
57
|
-
end
|
|
@@ -1,26 +0,0 @@
|
|
|
1
|
-
module Neo4j::Driver
|
|
2
|
-
module Internal
|
|
3
|
-
module Async
|
|
4
|
-
module Connection
|
|
5
|
-
class NettyDomainNameResolver #< org.neo4j.driver.internal.shaded.io.netty.resolver.InetNameResolver
|
|
6
|
-
def initialize(executor, domain_name_resolver)
|
|
7
|
-
# super(executor)
|
|
8
|
-
@domain_name_resolver = domain_name_resolver
|
|
9
|
-
end
|
|
10
|
-
|
|
11
|
-
def doResolve(inet_host, promise)
|
|
12
|
-
promise.set_success(@domain_name_resolver.call(inet_host).first)
|
|
13
|
-
rescue java.net.UnknownHostException => e
|
|
14
|
-
promise.set_failure(e)
|
|
15
|
-
end
|
|
16
|
-
|
|
17
|
-
def doResolveAll(inet_host, promise)
|
|
18
|
-
promise.set_success(@domain_name_resolver.call(inet_host))
|
|
19
|
-
rescue java.net.UnknownHostException => e
|
|
20
|
-
promise.set_failure(e)
|
|
21
|
-
end
|
|
22
|
-
end
|
|
23
|
-
end
|
|
24
|
-
end
|
|
25
|
-
end
|
|
26
|
-
end
|
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
module Neo4j::Driver
|
|
2
|
-
module Internal
|
|
3
|
-
module Async
|
|
4
|
-
module Connection
|
|
5
|
-
class NettyDomainNameResolverGroup #< org.neo4j.driver.internal.shaded.io.netty.resolver.AddressResolverGroup
|
|
6
|
-
attr_reader :domain_name_resolver
|
|
7
|
-
|
|
8
|
-
def initialize(&domain_name_resolver)
|
|
9
|
-
@domain_name_resolver = domain_name_resolver
|
|
10
|
-
end
|
|
11
|
-
|
|
12
|
-
def newResolver(executor)
|
|
13
|
-
NettyDomainNameResolver.new(executor, domain_name_resolver).as_address_resolver
|
|
14
|
-
end
|
|
15
|
-
end
|
|
16
|
-
end
|
|
17
|
-
end
|
|
18
|
-
end
|
|
19
|
-
end
|
|
@@ -1,36 +0,0 @@
|
|
|
1
|
-
module Neo4j::Driver
|
|
2
|
-
module Internal
|
|
3
|
-
module Async
|
|
4
|
-
module Connection
|
|
5
|
-
# A connection used by the routing driver.
|
|
6
|
-
class RoutingConnection < Struct.new(:delegate, :database_name, :access_mode, :impersonated_user, :error_handler)
|
|
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 mode access_mode
|
|
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
|
-
|
|
27
|
-
private
|
|
28
|
-
|
|
29
|
-
def new_routing_response_handler(handler)
|
|
30
|
-
Handlers::RoutingResponseHandler.new(handler, server_address, access_mode, error_handler)
|
|
31
|
-
end
|
|
32
|
-
end
|
|
33
|
-
end
|
|
34
|
-
end
|
|
35
|
-
end
|
|
36
|
-
end
|
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
module Neo4j::Driver
|
|
2
|
-
module Internal
|
|
3
|
-
module Async
|
|
4
|
-
module Connection
|
|
5
|
-
class StreamReader
|
|
6
|
-
include Inbound::ChunkDecoder
|
|
7
|
-
include Packstream::PackInput
|
|
8
|
-
include Packstream::PackStream::Unpacker
|
|
9
|
-
include Messaging::Common::CommonValueUnpacker
|
|
10
|
-
# delegate_missing_to :@input
|
|
11
|
-
|
|
12
|
-
end
|
|
13
|
-
end
|
|
14
|
-
end
|
|
15
|
-
end
|
|
16
|
-
end
|
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
module Neo4j::Driver
|
|
2
|
-
module Internal
|
|
3
|
-
module Async
|
|
4
|
-
class ImmutableConnectionContext
|
|
5
|
-
attr :database_name, :mode, :rediscovery_bookmark, :impersonated_user
|
|
6
|
-
|
|
7
|
-
def initialize(database_name, bookmark, mode)
|
|
8
|
-
@database_name = database_name
|
|
9
|
-
@rediscovery_bookmark = bookmark
|
|
10
|
-
@mode = mode
|
|
11
|
-
end
|
|
12
|
-
|
|
13
|
-
SINGLE_DB_CONTEXT = new(DatabaseNameUtil::DEFAULT_DATABASE, InternalBookmark::EMPTY, AccessMode::READ)
|
|
14
|
-
MULTI_DB_CONTEXT = new(DatabaseNameUtil::SYSTEM_DATABASE, InternalBookmark::EMPTY, AccessMode::READ)
|
|
15
|
-
|
|
16
|
-
# A simple context is used to test connectivity with a remote server/cluster. As long as there is a read only service, the connection shall be established
|
|
17
|
-
# successfully. Depending on whether multidb is supported or not, this method returns different context for routing table discovery.
|
|
18
|
-
def self.simple(supports_multi_db)
|
|
19
|
-
supports_multi_db ? MULTI_DB_CONTEXT : SINGLE_DB_CONTEXT
|
|
20
|
-
end
|
|
21
|
-
end
|
|
22
|
-
end
|
|
23
|
-
end
|
|
24
|
-
end
|
|
@@ -1,30 +0,0 @@
|
|
|
1
|
-
module Neo4j::Driver
|
|
2
|
-
module Internal
|
|
3
|
-
module Async
|
|
4
|
-
module Inbound
|
|
5
|
-
class ByteBufInput
|
|
6
|
-
delegate :read_byte, :read_short, :read_int, :read_long, :read_double, :read_bytes, to: :@buf
|
|
7
|
-
|
|
8
|
-
def start(new_buf)
|
|
9
|
-
assert_not_started
|
|
10
|
-
@buf = Validator.require_non_nil!(new_buf)
|
|
11
|
-
end
|
|
12
|
-
|
|
13
|
-
def stop
|
|
14
|
-
@buf = nil
|
|
15
|
-
end
|
|
16
|
-
|
|
17
|
-
def peek_byte
|
|
18
|
-
@buf.get_byte(@buf.read_index)
|
|
19
|
-
end
|
|
20
|
-
|
|
21
|
-
private
|
|
22
|
-
|
|
23
|
-
def assert_not_started
|
|
24
|
-
raise Neo4j::Driver::Exceptions::IllegalStateException, 'Already started' if @buf
|
|
25
|
-
end
|
|
26
|
-
end
|
|
27
|
-
end
|
|
28
|
-
end
|
|
29
|
-
end
|
|
30
|
-
end
|
|
@@ -1,77 +0,0 @@
|
|
|
1
|
-
module Neo4j::Driver
|
|
2
|
-
module Internal
|
|
3
|
-
module Async
|
|
4
|
-
module Inbound
|
|
5
|
-
class ChannelErrorHandler
|
|
6
|
-
def initialize(logger)
|
|
7
|
-
@logger = logger
|
|
8
|
-
end
|
|
9
|
-
|
|
10
|
-
def handler_added(ctx)
|
|
11
|
-
@message_dispatcher = java.util.Objects.require_non_null(Connection::ChannelAttributes.message_dispatcher(ctx.channel))
|
|
12
|
-
@log = Logging::ChannelActivityLogger.new(ctx.channel, @logger, self.class)
|
|
13
|
-
@error_log = Logging::ChannelErrorLogger.new(ctx.channel, @logger)
|
|
14
|
-
end
|
|
15
|
-
|
|
16
|
-
def handler_removed(ctx)
|
|
17
|
-
@message_dispatcher = @log = nil
|
|
18
|
-
@failed = false
|
|
19
|
-
end
|
|
20
|
-
|
|
21
|
-
def channel_inactive(ctx)
|
|
22
|
-
@log.debug('Channel is inactive')
|
|
23
|
-
|
|
24
|
-
termination_reason = Connection::ChannelAttributes.termination_reason(ctx.channel)
|
|
25
|
-
error = Util::ErrorUtil.new_connection_terminated_error(termination_reason)
|
|
26
|
-
|
|
27
|
-
if @failed
|
|
28
|
-
|
|
29
|
-
# channel became inactive not because of a fatal exception that came from exceptionCaught
|
|
30
|
-
# it is most likely inactive because actual network connection broke or was explicitly closed by the driver
|
|
31
|
-
@message_dispatcher.handle_channel_inactive(error)
|
|
32
|
-
ctx.channel.close
|
|
33
|
-
else
|
|
34
|
-
fail(error)
|
|
35
|
-
end
|
|
36
|
-
end
|
|
37
|
-
|
|
38
|
-
def exception_caught(ctx, error)
|
|
39
|
-
if @failed
|
|
40
|
-
@error_log.debug('Another fatal error occurred in the pipeline', error)
|
|
41
|
-
else
|
|
42
|
-
@failed = true
|
|
43
|
-
log_unexpected_error_warning(error)
|
|
44
|
-
fail(error)
|
|
45
|
-
end
|
|
46
|
-
end
|
|
47
|
-
|
|
48
|
-
private
|
|
49
|
-
|
|
50
|
-
def log_unexpected_error_warning(error)
|
|
51
|
-
unless error.is_a?(Exceptions::ConnectionReadTimeoutException)
|
|
52
|
-
@error_log.debug('Fatal error occurred in the pipeline', error)
|
|
53
|
-
end
|
|
54
|
-
end
|
|
55
|
-
|
|
56
|
-
def fail(error)
|
|
57
|
-
cause = transform_error(error)
|
|
58
|
-
@message_dispatcher.handle_channel_error(cause)
|
|
59
|
-
end
|
|
60
|
-
|
|
61
|
-
class << self
|
|
62
|
-
def transform_error(error)
|
|
63
|
-
# unwrap the CodecException if it has a cause
|
|
64
|
-
error = error.cause if error.is_a?(io.netty.handler.codec.CodecException) && error.cause
|
|
65
|
-
|
|
66
|
-
if error.is_a?(java.io.IOException)
|
|
67
|
-
Neo4j::Driver::Exceptions::ServiceUnavailableException.new('Connection to the database failed', error)
|
|
68
|
-
else
|
|
69
|
-
error
|
|
70
|
-
end
|
|
71
|
-
end
|
|
72
|
-
end
|
|
73
|
-
end
|
|
74
|
-
end
|
|
75
|
-
end
|
|
76
|
-
end
|
|
77
|
-
end
|
|
@@ -1,41 +0,0 @@
|
|
|
1
|
-
module Neo4j::Driver
|
|
2
|
-
module Internal
|
|
3
|
-
module Async
|
|
4
|
-
module Inbound
|
|
5
|
-
module ChunkDecoder
|
|
6
|
-
def initialize(input)
|
|
7
|
-
@input = input
|
|
8
|
-
@remaining = 0
|
|
9
|
-
end
|
|
10
|
-
|
|
11
|
-
def read_exactly(size, buffer = nil)
|
|
12
|
-
while @remaining.zero?
|
|
13
|
-
@remaining = read_length_field
|
|
14
|
-
end
|
|
15
|
-
if size > @remaining
|
|
16
|
-
# (buffer ||= Buffer.new(capacity: size)) << super(@remaining)
|
|
17
|
-
(buffer ||= ::Async::IO::Buffer.new) << @input.read_exactly(@remaining)
|
|
18
|
-
size -= @remaining
|
|
19
|
-
@remaining = 0
|
|
20
|
-
read_exactly(size, buffer)
|
|
21
|
-
else
|
|
22
|
-
data = @input.read_exactly(size)
|
|
23
|
-
@remaining -= size
|
|
24
|
-
buffer ? buffer << data : data
|
|
25
|
-
end
|
|
26
|
-
end
|
|
27
|
-
|
|
28
|
-
def ensure_termination
|
|
29
|
-
raise 'Chunking problem' unless @remaining.zero? && read_length_field.zero?
|
|
30
|
-
end
|
|
31
|
-
|
|
32
|
-
private
|
|
33
|
-
|
|
34
|
-
def read_length_field
|
|
35
|
-
@input.read_exactly(2).unpack1('S>')
|
|
36
|
-
end
|
|
37
|
-
end
|
|
38
|
-
end
|
|
39
|
-
end
|
|
40
|
-
end
|
|
41
|
-
end
|
|
@@ -1,32 +0,0 @@
|
|
|
1
|
-
module Neo4j::Driver
|
|
2
|
-
module Internal
|
|
3
|
-
module Async
|
|
4
|
-
module Inbound
|
|
5
|
-
# Handler needed to limit amount of time connection performs TLS and Bolt handshakes.
|
|
6
|
-
# It should only be used when connection is established and removed from the pipeline afterwards.
|
|
7
|
-
# Otherwise it will make long running queries fail.
|
|
8
|
-
class ConnectTimeoutHandler #< org.neo4j.driver.internal.shaded.io.netty.handler.timeout.ReadTimeoutHandler
|
|
9
|
-
def initialize(timeout_millis)
|
|
10
|
-
super(timeout_millis, java.util.concurrent.TimeUnit::MILLISECONDS)
|
|
11
|
-
@timeout_millis = timeout_millis
|
|
12
|
-
end
|
|
13
|
-
|
|
14
|
-
protected
|
|
15
|
-
|
|
16
|
-
def readTimedOut(ctx)
|
|
17
|
-
unless @triggered
|
|
18
|
-
@triggered = true
|
|
19
|
-
ctx.fire_exception_caught(unable_to_connect_error)
|
|
20
|
-
end
|
|
21
|
-
end
|
|
22
|
-
|
|
23
|
-
private
|
|
24
|
-
|
|
25
|
-
def unable_to_connect_error
|
|
26
|
-
Neo4j::Driver::Exceptions::ServiceUnavailableException.new("Unable to establish connection in #{@timeout_millis}ms")
|
|
27
|
-
end
|
|
28
|
-
end
|
|
29
|
-
end
|
|
30
|
-
end
|
|
31
|
-
end
|
|
32
|
-
end
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
module Neo4j::Driver
|
|
2
|
-
module Internal
|
|
3
|
-
module Async
|
|
4
|
-
module Inbound
|
|
5
|
-
class ConnectionReadTimeoutHandler #< org.neo4j.driver.internal.shaded.io.netty.handler.timeout.ReadTimeoutHandler
|
|
6
|
-
def read_timeout(ctx)
|
|
7
|
-
unless @triggered
|
|
8
|
-
ctx.fire_exception_caught(Neo4j::Driver::Exception::ConnectionReadTimeoutException::INSTANCE)
|
|
9
|
-
ctx.close
|
|
10
|
-
@triggered = true
|
|
11
|
-
end
|
|
12
|
-
end
|
|
13
|
-
end
|
|
14
|
-
end
|
|
15
|
-
end
|
|
16
|
-
end
|
|
17
|
-
end
|
|
@@ -1,171 +0,0 @@
|
|
|
1
|
-
module Neo4j::Driver
|
|
2
|
-
module Internal
|
|
3
|
-
module Async
|
|
4
|
-
module Inbound
|
|
5
|
-
class InboundMessageDispatcher
|
|
6
|
-
attr_reader :fatal_error_occurred, :current_error
|
|
7
|
-
|
|
8
|
-
def initialize(channel, logger)
|
|
9
|
-
@handlers = []
|
|
10
|
-
@channel = Validator.require_non_nil!(channel)
|
|
11
|
-
@log = Logging::ChannelActivityLogger.new(channel, logger, self.class)
|
|
12
|
-
@error_log = Logging::ChannelErrorLogger.new(channel, logger)
|
|
13
|
-
end
|
|
14
|
-
|
|
15
|
-
def enqueue(handler)
|
|
16
|
-
if fatal_error_occurred
|
|
17
|
-
handler.on_failure(@current_error)
|
|
18
|
-
else
|
|
19
|
-
@handlers << handler
|
|
20
|
-
update_auto_read_managing_handler_if_needed(handler)
|
|
21
|
-
end
|
|
22
|
-
end
|
|
23
|
-
|
|
24
|
-
def set_before_last_handler_hook(before_last_handler_hook)
|
|
25
|
-
unless @channel.event_loop.in_event_loop
|
|
26
|
-
raise Neo4j::Driver::Exceptions::IllegalStateException.new('This method may only be called in the EventLoop')
|
|
27
|
-
end
|
|
28
|
-
@before_last_handler_hook = before_last_handler_hook
|
|
29
|
-
end
|
|
30
|
-
|
|
31
|
-
def queued_handlers_count
|
|
32
|
-
@handlers.size
|
|
33
|
-
end
|
|
34
|
-
|
|
35
|
-
def handle_success_message(meta)
|
|
36
|
-
@log.debug("S: SUCCESS #{meta}")
|
|
37
|
-
invoke_before_last_handler_hook(HandlerHook::SUCCESS)
|
|
38
|
-
handler = remove_handler
|
|
39
|
-
handler.on_success(meta)
|
|
40
|
-
end
|
|
41
|
-
|
|
42
|
-
def handle_record_message(fields)
|
|
43
|
-
@log.debug { "S: RECORD #{fields}" }
|
|
44
|
-
|
|
45
|
-
(@handlers.first or
|
|
46
|
-
raise Exceptions::IllegalStateException,
|
|
47
|
-
"No handler exists to handle RECORD message with fields #{fields}")
|
|
48
|
-
.on_record(fields)
|
|
49
|
-
end
|
|
50
|
-
|
|
51
|
-
def handle_failure_message(code:, message:)
|
|
52
|
-
@log.debug("S: FAILURE #{code}, '#{message}'")
|
|
53
|
-
@current_error = Util::ErrorUtil.new_neo4j_error(code, message)
|
|
54
|
-
|
|
55
|
-
# we should not continue using channel after a fatal error
|
|
56
|
-
# fire error event back to the pipeline and avoid sending RESET
|
|
57
|
-
|
|
58
|
-
# return @channel.pipeline.fire_exception_caught(current_error) if Util::ErrorUtil.fatal?(current_error)
|
|
59
|
-
raise @current_error if Util::ErrorUtil.fatal?(@current_error) # TODO clarify
|
|
60
|
-
|
|
61
|
-
if @current_error.is_a?(Exceptions::AuthorizationExpiredException)
|
|
62
|
-
# TODO: ??????
|
|
63
|
-
# Connection::ChannelAttributes.authorization_state_listener(@channel).on_expired(@current_error, @channel)
|
|
64
|
-
else
|
|
65
|
-
# write a RESET to "acknowledge" the failure
|
|
66
|
-
enqueue(Handlers::ResetResponseHandler.new(self))
|
|
67
|
-
@channel.write_and_flush(Messaging::Request::ResetMessage::RESET)
|
|
68
|
-
end
|
|
69
|
-
|
|
70
|
-
invoke_before_last_handler_hook(HandlerHook::FAILURE)
|
|
71
|
-
handler = remove_handler
|
|
72
|
-
handler.on_failure(@current_error)
|
|
73
|
-
end
|
|
74
|
-
|
|
75
|
-
def handle_ignored_message
|
|
76
|
-
@log.debug('S: IGNORED')
|
|
77
|
-
handler = remove_handler
|
|
78
|
-
|
|
79
|
-
if @current_error
|
|
80
|
-
error = @current_error
|
|
81
|
-
else
|
|
82
|
-
@log.warn("Received IGNORED message for handler #{handler} but error is missing and RESET is not in progress. Current handlers #{@handlers}")
|
|
83
|
-
error = Exceptions::ClientException.new('Database ignored the request')
|
|
84
|
-
end
|
|
85
|
-
|
|
86
|
-
handler.on_failure(error)
|
|
87
|
-
end
|
|
88
|
-
|
|
89
|
-
def handle_channel_inactive(cause)
|
|
90
|
-
# report issue if the connection has not been terminated as a result of a graceful shutdown request from its
|
|
91
|
-
# parent pool
|
|
92
|
-
if !@gracefully_closed
|
|
93
|
-
handle_channel_error(cause)
|
|
94
|
-
else
|
|
95
|
-
@channel.close
|
|
96
|
-
end
|
|
97
|
-
end
|
|
98
|
-
|
|
99
|
-
def handle_channel_error(error)
|
|
100
|
-
if @current_error
|
|
101
|
-
# we already have an error, this new error probably is caused by the existing one, thus we chain the new error on this current error
|
|
102
|
-
Util::ErrorUtil.add_suppressed(@current_error, error)
|
|
103
|
-
else
|
|
104
|
-
@current_error = error
|
|
105
|
-
end
|
|
106
|
-
|
|
107
|
-
@fatal_error_occurred = true
|
|
108
|
-
|
|
109
|
-
while !@handlers.empty?
|
|
110
|
-
handler = remove_handler
|
|
111
|
-
handler.on_failure(@current_error)
|
|
112
|
-
end
|
|
113
|
-
|
|
114
|
-
@error_log.debug('Closing channel because of a failure', error)
|
|
115
|
-
@channel.close
|
|
116
|
-
end
|
|
117
|
-
|
|
118
|
-
def clear_current_error
|
|
119
|
-
@current_error = nil
|
|
120
|
-
end
|
|
121
|
-
|
|
122
|
-
def prepare_to_close_channel
|
|
123
|
-
@gracefully_closed = true
|
|
124
|
-
end
|
|
125
|
-
|
|
126
|
-
def remove_handler
|
|
127
|
-
handler = @handlers.shift
|
|
128
|
-
|
|
129
|
-
if handler == @auto_read_managing_handler
|
|
130
|
-
# the auto-read managing handler is being removed
|
|
131
|
-
# make sure this dispatcher does not hold on to a removed handler
|
|
132
|
-
update_auto_read_managing_handler(nil)
|
|
133
|
-
end
|
|
134
|
-
handler
|
|
135
|
-
end
|
|
136
|
-
|
|
137
|
-
private
|
|
138
|
-
|
|
139
|
-
def update_auto_read_managing_handler_if_needed(handler)
|
|
140
|
-
if handler.can_manage_auto_read?
|
|
141
|
-
update_auto_read_managing_handler(handler)
|
|
142
|
-
end
|
|
143
|
-
end
|
|
144
|
-
|
|
145
|
-
def update_auto_read_managing_handler(new_handler)
|
|
146
|
-
if @auto_read_managing_handler
|
|
147
|
-
|
|
148
|
-
# there already exists a handler that manages channel's auto-read
|
|
149
|
-
# make it stop because new managing handler is being added and there should only be a single such handler
|
|
150
|
-
@auto_read_managing_handler.disable_auto_read_management
|
|
151
|
-
|
|
152
|
-
# restore the default value of auto-read
|
|
153
|
-
@channel.auto_read = true
|
|
154
|
-
end
|
|
155
|
-
|
|
156
|
-
@auto_read_managing_handler = new_handler
|
|
157
|
-
end
|
|
158
|
-
|
|
159
|
-
def invoke_before_last_handler_hook(message_type)
|
|
160
|
-
@before_last_handler_hook&.run(message_type) if @handlers.size == 1
|
|
161
|
-
end
|
|
162
|
-
|
|
163
|
-
module HandlerHook
|
|
164
|
-
SUCCESS = :success
|
|
165
|
-
FAILURE = :failure
|
|
166
|
-
end
|
|
167
|
-
end
|
|
168
|
-
end
|
|
169
|
-
end
|
|
170
|
-
end
|
|
171
|
-
end
|
|
@@ -1,42 +0,0 @@
|
|
|
1
|
-
module Neo4j::Driver
|
|
2
|
-
module Internal
|
|
3
|
-
module Async
|
|
4
|
-
module Inbound
|
|
5
|
-
class InboundMessageHandler #< org.neo4j.driver.internal.shaded.io.netty.channel.SimpleChannelInboundHandler
|
|
6
|
-
def initialize(message_format, logger)
|
|
7
|
-
@input = ByteBufInput.new
|
|
8
|
-
@reader = message_format.new_reader(input)
|
|
9
|
-
@logger = logger
|
|
10
|
-
end
|
|
11
|
-
|
|
12
|
-
def handler_added(ctx)
|
|
13
|
-
@message_dispatcher = Validator::require_non_nil!(connection.ChannelAttributes.message_dispatcher(ctx.channel))
|
|
14
|
-
@log = Logging::ChannelActivityLogger.new(ctx.channel, logger, self.class)
|
|
15
|
-
end
|
|
16
|
-
|
|
17
|
-
def handler_removed(_ctx)
|
|
18
|
-
@message_dispatcher = nil
|
|
19
|
-
@log = nil
|
|
20
|
-
end
|
|
21
|
-
|
|
22
|
-
def channel_read0(_ctx, msg)
|
|
23
|
-
if message_dispatcher.fatal_error_occurred
|
|
24
|
-
return @log.warn( "Message ignored because of the previous fatal error. Channel will be closed. Message:\n#{org.neo4j.driver.internal.shaded.io.netty.buffer.ByteBufUtil.hex_dump(msg)}")
|
|
25
|
-
end
|
|
26
|
-
|
|
27
|
-
@log.debug( "S: #{org.neo4j.driver.internal.shaded.io.netty.buffer.ByteBufUtil.hex_dump(msg)}") if @log.is_trace_enabled?
|
|
28
|
-
|
|
29
|
-
@input.start(msg)
|
|
30
|
-
begin
|
|
31
|
-
@reader.read(@message_dispatcher)
|
|
32
|
-
rescue StandardError => error
|
|
33
|
-
org.neo4j.driver.internal.shaded.io.netty.handler.codec.DecoderException.new("Failed to read inbound message:\n#{org.neo4j.driver.internal.shaded.io.netty.buffer.ByteBufUtil.hex_dump(msg)}\n", error)
|
|
34
|
-
ensure
|
|
35
|
-
@input.stop
|
|
36
|
-
end
|
|
37
|
-
end
|
|
38
|
-
end
|
|
39
|
-
end
|
|
40
|
-
end
|
|
41
|
-
end
|
|
42
|
-
end
|
|
@@ -1,51 +0,0 @@
|
|
|
1
|
-
module Neo4j::Driver
|
|
2
|
-
module Internal
|
|
3
|
-
module Async
|
|
4
|
-
module Inbound
|
|
5
|
-
class MessageDecoder #< org.neo4j.driver.internal.shaded.io.netty.handler.codec.ByteToMessageDecoder
|
|
6
|
-
class << self
|
|
7
|
-
def determine_default_cumulator
|
|
8
|
-
value = ENV['message_decoder_cumulator']
|
|
9
|
-
# 'merge' == value ? org.neo4j.driver.internal.shaded.io.netty.handler.codec.ByteToMessageDecoder::MERGE_CUMULATOR : org.neo4j.driver.internal.shaded.io.netty.handler.codec.ByteToMessageDecoder::COMPOSITE_CUMULATOR
|
|
10
|
-
end
|
|
11
|
-
end
|
|
12
|
-
|
|
13
|
-
DEFAULT_CUMULATOR = determine_default_cumulator
|
|
14
|
-
|
|
15
|
-
def initialize
|
|
16
|
-
set_cumulator(DEFAULT_CUMULATOR)
|
|
17
|
-
end
|
|
18
|
-
|
|
19
|
-
def channel_read(ctx, msg)
|
|
20
|
-
if msg.is_a?(org.neo4j.driver.internal.shaded.io.netty.buffer.ByteBuf)
|
|
21
|
-
|
|
22
|
-
# on every read check if input buffer is empty or not
|
|
23
|
-
# if it is empty then it's a message boundary and full message is in the buffer
|
|
24
|
-
@read_message_boundary = msg.readable_bytes == 0
|
|
25
|
-
end
|
|
26
|
-
|
|
27
|
-
org.neo4j.driver.internal.shaded.io.netty.handler.codec.ByteToMessageDecoder.channel_read(ctx, msg)
|
|
28
|
-
end
|
|
29
|
-
|
|
30
|
-
def decode(ctx, inward, out)
|
|
31
|
-
if @read_message_boundary
|
|
32
|
-
|
|
33
|
-
# now we have a complete message in the input buffer
|
|
34
|
-
|
|
35
|
-
# increment ref count of the buffer and create it's duplicate that shares the content
|
|
36
|
-
# duplicate will be the output of this decoded and input for the next one
|
|
37
|
-
message_buf = inward.retained_duplicate
|
|
38
|
-
|
|
39
|
-
# signal that whole message was read by making input buffer seem like it was fully read/consumed
|
|
40
|
-
inward.reader_index(inward.readable_bytes)
|
|
41
|
-
|
|
42
|
-
# pass the full message to the next handler in the pipeline
|
|
43
|
-
out.add(message_buf)
|
|
44
|
-
@read_message_boundary = false
|
|
45
|
-
end
|
|
46
|
-
end
|
|
47
|
-
end
|
|
48
|
-
end
|
|
49
|
-
end
|
|
50
|
-
end
|
|
51
|
-
end
|