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.
Files changed (348) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +113 -411
  3. data/{ruby → lib}/neo4j/driver/access_mode.rb +2 -1
  4. data/lib/neo4j/driver/auth_token_managers.rb +31 -0
  5. data/lib/neo4j/driver/auth_tokens.rb +41 -0
  6. data/lib/neo4j/driver/auto_commit_retries_mode.rb +18 -0
  7. data/lib/neo4j/driver/bolt/bolt_version.rb +67 -0
  8. data/lib/neo4j/driver/bolt/connection.rb +1091 -0
  9. data/lib/neo4j/driver/bolt/handshake.rb +236 -0
  10. data/lib/neo4j/driver/bolt/message/failure.rb +139 -0
  11. data/lib/neo4j/driver/bolt/message/ignored.rb +27 -0
  12. data/lib/neo4j/driver/bolt/message/record.rb +30 -0
  13. data/lib/neo4j/driver/bolt/message/success.rb +34 -0
  14. data/lib/neo4j/driver/bolt/message.rb +112 -0
  15. data/lib/neo4j/driver/bolt/pool.rb +255 -0
  16. data/lib/neo4j/driver/bolt/protocol/base.rb +146 -0
  17. data/lib/neo4j/driver/bolt/protocol/v3.rb +43 -0
  18. data/lib/neo4j/driver/bolt/protocol/v4.rb +24 -0
  19. data/lib/neo4j/driver/bolt/protocol/v43.rb +28 -0
  20. data/lib/neo4j/driver/bolt/protocol/v44.rb +23 -0
  21. data/lib/neo4j/driver/bolt/protocol/v5.rb +27 -0
  22. data/lib/neo4j/driver/bolt/protocol/v51.rb +24 -0
  23. data/lib/neo4j/driver/bolt/protocol/v52.rb +28 -0
  24. data/lib/neo4j/driver/bolt/protocol/v53.rb +27 -0
  25. data/lib/neo4j/driver/bolt/protocol/v54.rb +14 -0
  26. data/lib/neo4j/driver/bolt/protocol/v55.rb +17 -0
  27. data/lib/neo4j/driver/bolt/protocol/v56.rb +14 -0
  28. data/lib/neo4j/driver/bolt/protocol/v57.rb +31 -0
  29. data/lib/neo4j/driver/bolt/protocol/v58.rb +15 -0
  30. data/lib/neo4j/driver/bolt/protocol/v6.rb +43 -0
  31. data/lib/neo4j/driver/bolt/protocol/v61.rb +21 -0
  32. data/lib/neo4j/driver/bolt/protocol_version_handler.rb +39 -0
  33. data/lib/neo4j/driver/bolt/record_buffer.rb +143 -0
  34. data/lib/neo4j/driver/bolt/stream_handler.rb +53 -0
  35. data/lib/neo4j/driver/bolt/tls_config.rb +129 -0
  36. data/lib/neo4j/driver/bolt/wire.rb +321 -0
  37. data/lib/neo4j/driver/bookmark.rb +15 -0
  38. data/lib/neo4j/driver/bookmark_managers.rb +39 -0
  39. data/lib/neo4j/driver/client_certificate.rb +19 -0
  40. data/lib/neo4j/driver/client_certificate_manager.rb +37 -0
  41. data/lib/neo4j/driver/client_certificate_managers.rb +15 -0
  42. data/lib/neo4j/driver/client_certificates.rb +14 -0
  43. data/lib/neo4j/driver/direct/connection_provider.rb +262 -0
  44. data/lib/neo4j/driver/driver.rb +268 -0
  45. data/lib/neo4j/driver/eager_result.rb +10 -0
  46. data/lib/neo4j/driver/exceptions/neo4j_exception.rb +16 -7
  47. data/lib/neo4j/driver/exceptions/no_such_record_exception.rb +1 -1
  48. data/lib/neo4j/driver/exceptions/protocol_exception.rb +0 -5
  49. data/lib/neo4j/driver/exceptions/security_retryable_exception.rb +14 -0
  50. data/lib/neo4j/driver/exceptions/transaction_terminated_exception.rb +13 -0
  51. data/lib/neo4j/driver/graph_database.rb +29 -0
  52. data/lib/neo4j/driver/internal/clock.rb +20 -0
  53. data/lib/neo4j/driver/internal/clock_adapter.rb +21 -0
  54. data/lib/neo4j/driver/internal/default_bookmark_manager.rb +54 -0
  55. data/lib/neo4j/driver/internal/deprecator.rb +9 -5
  56. data/lib/neo4j/driver/internal/driver_factory.rb +128 -0
  57. data/lib/neo4j/driver/internal/duration_normalizer.rb +14 -39
  58. data/lib/neo4j/driver/internal/extras.rb +23 -0
  59. data/lib/neo4j/driver/internal/home_db_cache.rb +57 -0
  60. data/lib/neo4j/driver/internal/internal_auth_token_manager.rb +37 -0
  61. data/lib/neo4j/driver/internal/metrics.rb +31 -0
  62. data/lib/neo4j/driver/internal/security/static_auth_token_manager.rb +25 -0
  63. data/lib/neo4j/driver/internal/validator.rb +16 -2
  64. data/lib/neo4j/driver/net.rb +29 -0
  65. data/lib/neo4j/driver/packstream/markers.rb +49 -0
  66. data/lib/neo4j/driver/packstream/packer.rb +335 -0
  67. data/lib/neo4j/driver/packstream/structure.rb +27 -0
  68. data/lib/neo4j/driver/packstream/unpacker.rb +170 -0
  69. data/lib/neo4j/driver/record.rb +43 -0
  70. data/lib/neo4j/driver/result.rb +282 -0
  71. data/lib/neo4j/driver/routing/load_balancer.rb +706 -0
  72. data/lib/neo4j/driver/routing/routed_connection.rb +132 -0
  73. data/lib/neo4j/driver/routing/routing_table.rb +127 -0
  74. data/lib/neo4j/driver/routing/server_address.rb +25 -0
  75. data/lib/neo4j/driver/routing_control.rb +13 -0
  76. data/lib/neo4j/driver/session.rb +577 -0
  77. data/lib/neo4j/driver/summary/database_info.rb +25 -0
  78. data/lib/neo4j/driver/summary/gql_notification.rb +38 -0
  79. data/lib/neo4j/driver/summary/gql_status_object.rb +35 -0
  80. data/lib/neo4j/driver/summary/notification.rb +46 -0
  81. data/lib/neo4j/driver/summary/plan.rb +23 -0
  82. data/lib/neo4j/driver/summary/profile.rb +28 -0
  83. data/lib/neo4j/driver/summary/query.rb +19 -0
  84. data/lib/neo4j/driver/summary/query_type.rb +5 -1
  85. data/lib/neo4j/driver/summary/result_summary.rb +215 -0
  86. data/lib/neo4j/driver/summary/server_info.rb +33 -0
  87. data/lib/neo4j/driver/summary/summary_counters.rb +72 -0
  88. data/lib/neo4j/driver/transaction.rb +344 -0
  89. data/lib/neo4j/driver/types/duration.rb +76 -0
  90. data/lib/neo4j/driver/types/entity.rb +40 -0
  91. data/lib/neo4j/driver/types/local_date_time.rb +77 -8
  92. data/lib/neo4j/driver/types/local_time.rb +50 -7
  93. data/lib/neo4j/driver/types/node.rb +18 -0
  94. data/lib/neo4j/driver/types/offset_time.rb +78 -7
  95. data/lib/neo4j/driver/types/path.rb +68 -0
  96. data/lib/neo4j/driver/types/point.rb +38 -18
  97. data/lib/neo4j/driver/types/relationship.rb +32 -0
  98. data/lib/neo4j/driver/types/temporal_value.rb +44 -0
  99. data/lib/neo4j/driver/types/unbound_relationship.rb +24 -0
  100. data/lib/neo4j/driver/types/unresolvable_zoned_date_time.rb +38 -0
  101. data/lib/neo4j/driver/types/unsupported_type.rb +25 -0
  102. data/lib/neo4j/driver/types/uuid.rb +29 -0
  103. data/{ruby → lib}/neo4j/driver/version.rb +1 -1
  104. data/lib/neo4j/driver.rb +15 -0
  105. data/lib/neo4j-ruby-driver_loader.rb +34 -20
  106. metadata +115 -441
  107. data/lib/neo4j/driver/internal/bolt_server_address.rb +0 -97
  108. data/lib/neo4j/driver/synchronizable.rb +0 -23
  109. data/lib/neo4j/driver/types/time.rb +0 -45
  110. data/ruby/neo4j/driver/auth_tokens.rb +0 -34
  111. data/ruby/neo4j/driver/bookmark.rb +0 -21
  112. data/ruby/neo4j/driver/config.rb +0 -89
  113. data/ruby/neo4j/driver/graph_database.rb +0 -78
  114. data/ruby/neo4j/driver/internal/async/connection/bolt_protocol_util.rb +0 -51
  115. data/ruby/neo4j/driver/internal/async/connection/bootstrap_factory.rb +0 -22
  116. data/ruby/neo4j/driver/internal/async/connection/channel_attributes.rb +0 -31
  117. data/ruby/neo4j/driver/internal/async/connection/channel_connected_listener.rb +0 -32
  118. data/ruby/neo4j/driver/internal/async/connection/channel_connector_impl.rb +0 -83
  119. data/ruby/neo4j/driver/internal/async/connection/channel_pipeline_builder_impl.rb +0 -22
  120. data/ruby/neo4j/driver/internal/async/connection/direct_connection.rb +0 -30
  121. data/ruby/neo4j/driver/internal/async/connection/event_loop_group_factory.rb +0 -83
  122. data/ruby/neo4j/driver/internal/async/connection/handshake_completed_listener.rb +0 -27
  123. data/ruby/neo4j/driver/internal/async/connection/handshake_handler.rb +0 -113
  124. data/ruby/neo4j/driver/internal/async/connection/netty_channel_initializer.rb +0 -57
  125. data/ruby/neo4j/driver/internal/async/connection/netty_domain_name_resolver.rb +0 -26
  126. data/ruby/neo4j/driver/internal/async/connection/netty_domain_name_resolver_group.rb +0 -19
  127. data/ruby/neo4j/driver/internal/async/connection/routing_connection.rb +0 -36
  128. data/ruby/neo4j/driver/internal/async/connection/stream.rb +0 -12
  129. data/ruby/neo4j/driver/internal/async/connection/stream_reader.rb +0 -16
  130. data/ruby/neo4j/driver/internal/async/connection_context.rb +0 -10
  131. data/ruby/neo4j/driver/internal/async/immutable_connection_context.rb +0 -24
  132. data/ruby/neo4j/driver/internal/async/inbound/byte_buf_input.rb +0 -30
  133. data/ruby/neo4j/driver/internal/async/inbound/channel_error_handler.rb +0 -77
  134. data/ruby/neo4j/driver/internal/async/inbound/chunk_decoder.rb +0 -41
  135. data/ruby/neo4j/driver/internal/async/inbound/connect_timeout_handler.rb +0 -32
  136. data/ruby/neo4j/driver/internal/async/inbound/connection_read_timeout_handler.rb +0 -17
  137. data/ruby/neo4j/driver/internal/async/inbound/inbound_message_dispatcher.rb +0 -171
  138. data/ruby/neo4j/driver/internal/async/inbound/inbound_message_handler.rb +0 -42
  139. data/ruby/neo4j/driver/internal/async/inbound/message_decoder.rb +0 -51
  140. data/ruby/neo4j/driver/internal/async/internal_async_session.rb +0 -92
  141. data/ruby/neo4j/driver/internal/async/internal_async_transaction.rb +0 -13
  142. data/ruby/neo4j/driver/internal/async/leak_logging_network_session.rb +0 -34
  143. data/ruby/neo4j/driver/internal/async/network_connection.rb +0 -194
  144. data/ruby/neo4j/driver/internal/async/network_session.rb +0 -150
  145. data/ruby/neo4j/driver/internal/async/outbound/chunk_aware_byte_buf_output.rb +0 -110
  146. data/ruby/neo4j/driver/internal/async/outbound/outbound_message_handler.rb +0 -39
  147. data/ruby/neo4j/driver/internal/async/pool/channel.rb +0 -66
  148. data/ruby/neo4j/driver/internal/async/pool/channel_pool.rb +0 -31
  149. data/ruby/neo4j/driver/internal/async/pool/channel_tracker.rb +0 -135
  150. data/ruby/neo4j/driver/internal/async/pool/connection_pool_impl.rb +0 -156
  151. data/ruby/neo4j/driver/internal/async/pool/netty_channel_health_checker.rb +0 -87
  152. data/ruby/neo4j/driver/internal/async/pool/netty_channel_pool.rb +0 -52
  153. data/ruby/neo4j/driver/internal/async/pool/network_connection_factory.rb +0 -21
  154. data/ruby/neo4j/driver/internal/async/pool/pool_settings.rb +0 -34
  155. data/ruby/neo4j/driver/internal/async/pool/timed_stack.rb +0 -15
  156. data/ruby/neo4j/driver/internal/async/result_cursors_holder.rb +0 -17
  157. data/ruby/neo4j/driver/internal/async/unmanaged_transaction.rb +0 -212
  158. data/ruby/neo4j/driver/internal/bookmark_holder.rb +0 -9
  159. data/ruby/neo4j/driver/internal/cluster/cluster_composition.rb +0 -48
  160. data/ruby/neo4j/driver/internal/cluster/cluster_composition_lookup_result.rb +0 -14
  161. data/ruby/neo4j/driver/internal/cluster/cluster_routing_table.rb +0 -122
  162. data/ruby/neo4j/driver/internal/cluster/identity_resolver.rb +0 -10
  163. data/ruby/neo4j/driver/internal/cluster/loadbalancing/least_connected_load_balancing_strategy.rb +0 -68
  164. data/ruby/neo4j/driver/internal/cluster/loadbalancing/load_balancer.rb +0 -125
  165. data/ruby/neo4j/driver/internal/cluster/loadbalancing/round_robin_array_index.rb +0 -13
  166. data/ruby/neo4j/driver/internal/cluster/multi_databases_routing_procedure_runner.rb +0 -31
  167. data/ruby/neo4j/driver/internal/cluster/rediscovery_impl.rb +0 -147
  168. data/ruby/neo4j/driver/internal/cluster/route_message_routing_procedure_runner.rb +0 -43
  169. data/ruby/neo4j/driver/internal/cluster/routing_context.rb +0 -77
  170. data/ruby/neo4j/driver/internal/cluster/routing_procedure_cluster_composition_provider.rb +0 -60
  171. data/ruby/neo4j/driver/internal/cluster/routing_procedure_response.rb +0 -35
  172. data/ruby/neo4j/driver/internal/cluster/routing_settings.rb +0 -24
  173. data/ruby/neo4j/driver/internal/cluster/routing_table_handler_impl.rb +0 -95
  174. data/ruby/neo4j/driver/internal/cluster/routing_table_registry_impl.rb +0 -121
  175. data/ruby/neo4j/driver/internal/cluster/single_database_routing_procedure_runner.rb +0 -73
  176. data/ruby/neo4j/driver/internal/connection_settings.rb +0 -16
  177. data/ruby/neo4j/driver/internal/cursor/async_result_cursor_impl.rb +0 -55
  178. data/ruby/neo4j/driver/internal/cursor/async_result_cursor_only_factory.rb +0 -24
  179. data/ruby/neo4j/driver/internal/cursor/disposable_async_result_cursor.rb +0 -61
  180. data/ruby/neo4j/driver/internal/cursor/result_cursor_factory_impl.rb +0 -24
  181. data/ruby/neo4j/driver/internal/cursor/rx_result_cursor_impl.rb +0 -110
  182. data/ruby/neo4j/driver/internal/database_name_util.rb +0 -37
  183. data/ruby/neo4j/driver/internal/default_bookmark_holder.rb +0 -9
  184. data/ruby/neo4j/driver/internal/default_domain_name_resolver.rb +0 -11
  185. data/ruby/neo4j/driver/internal/direct_connection_provider.rb +0 -40
  186. data/ruby/neo4j/driver/internal/driver_factory.rb +0 -126
  187. data/ruby/neo4j/driver/internal/eager_result_value.rb +0 -5
  188. data/ruby/neo4j/driver/internal/handlers/begin_tx_response_handler.rb +0 -20
  189. data/ruby/neo4j/driver/internal/handlers/channel_releasing_reset_response_handler.rb +0 -30
  190. data/ruby/neo4j/driver/internal/handlers/commit_tx_response_handler.rb +0 -23
  191. data/ruby/neo4j/driver/internal/handlers/hello_response_handler.rb +0 -65
  192. data/ruby/neo4j/driver/internal/handlers/init_response_handler.rb +0 -34
  193. data/ruby/neo4j/driver/internal/handlers/legacy_pull_all_response_handler.rb +0 -199
  194. data/ruby/neo4j/driver/internal/handlers/no_op_response_handler.rb +0 -16
  195. data/ruby/neo4j/driver/internal/handlers/ping_response_handler.rb +0 -29
  196. data/ruby/neo4j/driver/internal/handlers/pull_handlers.rb +0 -32
  197. data/ruby/neo4j/driver/internal/handlers/pulln/auto_pull_response_handler.rb +0 -169
  198. data/ruby/neo4j/driver/internal/handlers/pulln/basic_pull_response_handler.rb +0 -298
  199. data/ruby/neo4j/driver/internal/handlers/pulln/fetch_size_util.rb +0 -20
  200. data/ruby/neo4j/driver/internal/handlers/reset_response_handler.rb +0 -34
  201. data/ruby/neo4j/driver/internal/handlers/rollback_tx_response_handler.rb +0 -25
  202. data/ruby/neo4j/driver/internal/handlers/route_message_response_handler.rb +0 -21
  203. data/ruby/neo4j/driver/internal/handlers/routing_response_handler.rb +0 -79
  204. data/ruby/neo4j/driver/internal/handlers/run_response_handler.rb +0 -38
  205. data/ruby/neo4j/driver/internal/handlers/session_pull_response_completion_listener.rb +0 -34
  206. data/ruby/neo4j/driver/internal/handlers/transaction_pull_response_completion_listener.rb +0 -20
  207. data/ruby/neo4j/driver/internal/impersonation_util.rb +0 -22
  208. data/ruby/neo4j/driver/internal/internal_bookmark.rb +0 -9
  209. data/ruby/neo4j/driver/internal/internal_database_name.rb +0 -9
  210. data/ruby/neo4j/driver/internal/internal_driver.rb +0 -83
  211. data/ruby/neo4j/driver/internal/internal_entity.rb +0 -21
  212. data/ruby/neo4j/driver/internal/internal_node.rb +0 -21
  213. data/ruby/neo4j/driver/internal/internal_pair.rb +0 -9
  214. data/ruby/neo4j/driver/internal/internal_path.rb +0 -35
  215. data/ruby/neo4j/driver/internal/internal_point2_d.rb +0 -9
  216. data/ruby/neo4j/driver/internal/internal_point3_d.rb +0 -6
  217. data/ruby/neo4j/driver/internal/internal_record.rb +0 -27
  218. data/ruby/neo4j/driver/internal/internal_relationship.rb +0 -27
  219. data/ruby/neo4j/driver/internal/internal_result.rb +0 -49
  220. data/ruby/neo4j/driver/internal/internal_session.rb +0 -91
  221. data/ruby/neo4j/driver/internal/internal_transaction.rb +0 -48
  222. data/ruby/neo4j/driver/internal/logging/channel_activity_logger.rb +0 -29
  223. data/ruby/neo4j/driver/internal/logging/channel_error_logger.rb +0 -17
  224. data/ruby/neo4j/driver/internal/logging/prefixed_logger.rb +0 -19
  225. data/ruby/neo4j/driver/internal/logging/reformatted_logger.rb +0 -17
  226. data/ruby/neo4j/driver/internal/messaging/abstract_message_writer.rb +0 -23
  227. data/ruby/neo4j/driver/internal/messaging/bolt_protocol.rb +0 -32
  228. data/ruby/neo4j/driver/internal/messaging/bolt_protocol_version.rb +0 -48
  229. data/ruby/neo4j/driver/internal/messaging/common/common_message_reader.rb +0 -51
  230. data/ruby/neo4j/driver/internal/messaging/common/common_value.rb +0 -33
  231. data/ruby/neo4j/driver/internal/messaging/common/common_value_packer.rb +0 -104
  232. data/ruby/neo4j/driver/internal/messaging/common/common_value_unpacker.rb +0 -256
  233. data/ruby/neo4j/driver/internal/messaging/encode/begin_message_encoder.rb +0 -15
  234. data/ruby/neo4j/driver/internal/messaging/encode/commit_message_encoder.rb +0 -14
  235. data/ruby/neo4j/driver/internal/messaging/encode/discard_all_message_encoder.rb +0 -14
  236. data/ruby/neo4j/driver/internal/messaging/encode/discard_message_encoder.rb +0 -15
  237. data/ruby/neo4j/driver/internal/messaging/encode/goodbye_message_encoder.rb +0 -14
  238. data/ruby/neo4j/driver/internal/messaging/encode/hello_message_encoder.rb +0 -15
  239. data/ruby/neo4j/driver/internal/messaging/encode/init_message_encoder.rb +0 -16
  240. data/ruby/neo4j/driver/internal/messaging/encode/logoff_message_encoder.rb +0 -14
  241. data/ruby/neo4j/driver/internal/messaging/encode/logon_message_encoder.rb +0 -15
  242. data/ruby/neo4j/driver/internal/messaging/encode/pull_all_message_encoder.rb +0 -14
  243. data/ruby/neo4j/driver/internal/messaging/encode/pull_message_encoder.rb +0 -15
  244. data/ruby/neo4j/driver/internal/messaging/encode/reset_message_encoder.rb +0 -14
  245. data/ruby/neo4j/driver/internal/messaging/encode/rollback_message_encoder.rb +0 -14
  246. data/ruby/neo4j/driver/internal/messaging/encode/route_message_encoder.rb +0 -24
  247. data/ruby/neo4j/driver/internal/messaging/encode/route_v44_message_encoder.rb +0 -22
  248. data/ruby/neo4j/driver/internal/messaging/encode/run_message_encoder.rb +0 -16
  249. data/ruby/neo4j/driver/internal/messaging/encode/run_with_metadata_message_encoder.rb +0 -17
  250. data/ruby/neo4j/driver/internal/messaging/request/abstract_streaming_message.rb +0 -25
  251. data/ruby/neo4j/driver/internal/messaging/request/begin_message.rb +0 -25
  252. data/ruby/neo4j/driver/internal/messaging/request/commit_message.rb +0 -20
  253. data/ruby/neo4j/driver/internal/messaging/request/discard_all_message.rb +0 -20
  254. data/ruby/neo4j/driver/internal/messaging/request/discard_message.rb +0 -23
  255. data/ruby/neo4j/driver/internal/messaging/request/goodbye_message.rb +0 -20
  256. data/ruby/neo4j/driver/internal/messaging/request/hello_message.rb +0 -30
  257. data/ruby/neo4j/driver/internal/messaging/request/init_message.rb +0 -19
  258. data/ruby/neo4j/driver/internal/messaging/request/logoff_message.rb +0 -13
  259. data/ruby/neo4j/driver/internal/messaging/request/logon_message.rb +0 -13
  260. data/ruby/neo4j/driver/internal/messaging/request/message_with_metadata.rb +0 -17
  261. data/ruby/neo4j/driver/internal/messaging/request/multi_database_util.rb +0 -26
  262. data/ruby/neo4j/driver/internal/messaging/request/pull_all_message.rb +0 -23
  263. data/ruby/neo4j/driver/internal/messaging/request/pull_message.rb +0 -22
  264. data/ruby/neo4j/driver/internal/messaging/request/reset_message.rb +0 -32
  265. data/ruby/neo4j/driver/internal/messaging/request/rollback_message.rb +0 -20
  266. data/ruby/neo4j/driver/internal/messaging/request/route_message.rb +0 -28
  267. data/ruby/neo4j/driver/internal/messaging/request/run_message.rb +0 -23
  268. data/ruby/neo4j/driver/internal/messaging/request/run_with_metadata_message.rb +0 -49
  269. data/ruby/neo4j/driver/internal/messaging/request/transaction_metadata_builder.rb +0 -24
  270. data/ruby/neo4j/driver/internal/messaging/response/failure_message.rb +0 -40
  271. data/ruby/neo4j/driver/internal/messaging/response/ignored_message.rb +0 -29
  272. data/ruby/neo4j/driver/internal/messaging/response/record_message.rb +0 -33
  273. data/ruby/neo4j/driver/internal/messaging/response/success_message.rb +0 -34
  274. data/ruby/neo4j/driver/internal/messaging/v3/bolt_protocol_v3.rb +0 -82
  275. data/ruby/neo4j/driver/internal/messaging/v3/message_format_v3.rb +0 -17
  276. data/ruby/neo4j/driver/internal/messaging/v3/message_writer_v3.rb +0 -27
  277. data/ruby/neo4j/driver/internal/messaging/v4/bolt_protocol_v4.rb +0 -29
  278. data/ruby/neo4j/driver/internal/messaging/v4/message_format_v4.rb +0 -13
  279. data/ruby/neo4j/driver/internal/messaging/v4/message_writer_v4.rb +0 -17
  280. data/ruby/neo4j/driver/internal/messaging/v41/bolt_protocol_v41.rb +0 -25
  281. data/ruby/neo4j/driver/internal/messaging/v42/bolt_protocol_v42.rb +0 -13
  282. data/ruby/neo4j/driver/internal/messaging/v43/bolt_protocol_v43.rb +0 -19
  283. data/ruby/neo4j/driver/internal/messaging/v43/message_format_v43.rb +0 -14
  284. data/ruby/neo4j/driver/internal/messaging/v43/message_writer_v43.rb +0 -20
  285. data/ruby/neo4j/driver/internal/messaging/v44/bolt_protocol_v44.rb +0 -17
  286. data/ruby/neo4j/driver/internal/messaging/v44/message_format_v44.rb +0 -14
  287. data/ruby/neo4j/driver/internal/messaging/v44/message_writer_v44.rb +0 -15
  288. data/ruby/neo4j/driver/internal/messaging/v5/bolt_protocol_v5.rb +0 -21
  289. data/ruby/neo4j/driver/internal/messaging/v5/message_format_v5.rb +0 -18
  290. data/ruby/neo4j/driver/internal/messaging/v5/value_unpacker_v5.rb +0 -17
  291. data/ruby/neo4j/driver/internal/messaging/v51/bolt_protocol_v51.rb +0 -40
  292. data/ruby/neo4j/driver/internal/messaging/v51/message_format_v51.rb +0 -14
  293. data/ruby/neo4j/driver/internal/messaging/v51/message_writer_v51.rb +0 -17
  294. data/ruby/neo4j/driver/internal/metrics/connection_pool_metrics_listener.rb +0 -34
  295. data/ruby/neo4j/driver/internal/metrics/internal_abstract_metrics.rb +0 -46
  296. data/ruby/neo4j/driver/internal/metrics/internal_connection_pool_metrics.rb +0 -105
  297. data/ruby/neo4j/driver/internal/metrics/internal_metrics.rb +0 -82
  298. data/ruby/neo4j/driver/internal/metrics/internal_metrics_provider.rb +0 -18
  299. data/ruby/neo4j/driver/internal/metrics/listener_event.rb +0 -17
  300. data/ruby/neo4j/driver/internal/metrics/metrics_provider.rb +0 -24
  301. data/ruby/neo4j/driver/internal/metrics/time_recorder_listener_event.rb +0 -15
  302. data/ruby/neo4j/driver/internal/packstream/byte_array_incompatible_packer.rb +0 -12
  303. data/ruby/neo4j/driver/internal/packstream/pack_input.rb +0 -47
  304. data/ruby/neo4j/driver/internal/packstream/pack_output.rb +0 -39
  305. data/ruby/neo4j/driver/internal/packstream/pack_stream.rb +0 -324
  306. data/ruby/neo4j/driver/internal/packstream/pack_type.rb +0 -17
  307. data/ruby/neo4j/driver/internal/read_only_bookmark_holder.rb +0 -13
  308. data/ruby/neo4j/driver/internal/resolved_bolt_server_address.rb +0 -35
  309. data/ruby/neo4j/driver/internal/retry/exponential_backoff_retry_logic.rb +0 -150
  310. data/ruby/neo4j/driver/internal/revocation_strategy.rb +0 -19
  311. data/ruby/neo4j/driver/internal/scheme.rb +0 -32
  312. data/ruby/neo4j/driver/internal/security/internal_auth_token.rb +0 -15
  313. data/ruby/neo4j/driver/internal/security/security_plan_impl.rb +0 -48
  314. data/ruby/neo4j/driver/internal/security_setting.rb +0 -66
  315. data/ruby/neo4j/driver/internal/session_factory_impl.rb +0 -32
  316. data/ruby/neo4j/driver/internal/spi/connection.rb +0 -19
  317. data/ruby/neo4j/driver/internal/spi/connection_pool.rb +0 -9
  318. data/ruby/neo4j/driver/internal/spi/response_handler.rb +0 -23
  319. data/ruby/neo4j/driver/internal/summary/internal_database_info.rb +0 -7
  320. data/ruby/neo4j/driver/internal/summary/internal_input_position.rb +0 -11
  321. data/ruby/neo4j/driver/internal/summary/internal_notification.rb +0 -16
  322. data/ruby/neo4j/driver/internal/summary/internal_plan.rb +0 -41
  323. data/ruby/neo4j/driver/internal/summary/internal_profiled_plan.rb +0 -32
  324. data/ruby/neo4j/driver/internal/summary/internal_result_summary.rb +0 -33
  325. data/ruby/neo4j/driver/internal/summary/internal_server_info.rb +0 -6
  326. data/ruby/neo4j/driver/internal/summary/internal_summary_counters.rb +0 -18
  327. data/ruby/neo4j/driver/internal/svm/netty_substitutions.rb +0 -196
  328. data/ruby/neo4j/driver/internal/svm/z_lib_substitutions.rb +0 -21
  329. data/ruby/neo4j/driver/internal/util/certificate_tool.rb +0 -65
  330. data/ruby/neo4j/driver/internal/util/clock.rb +0 -29
  331. data/ruby/neo4j/driver/internal/util/error_util.rb +0 -104
  332. data/ruby/neo4j/driver/internal/util/extract.rb +0 -123
  333. data/ruby/neo4j/driver/internal/util/format.rb +0 -39
  334. data/ruby/neo4j/driver/internal/util/futures.rb +0 -99
  335. data/ruby/neo4j/driver/internal/util/iterables.rb +0 -35
  336. data/ruby/neo4j/driver/internal/util/lock_util.rb +0 -23
  337. data/ruby/neo4j/driver/internal/util/metadata_extractor.rb +0 -101
  338. data/ruby/neo4j/driver/internal/util/mutex.rb +0 -9
  339. data/ruby/neo4j/driver/internal/util/preconditions.rb +0 -16
  340. data/ruby/neo4j/driver/internal/util/result_holder.rb +0 -72
  341. data/ruby/neo4j/driver/internal/util/server_version.rb +0 -60
  342. data/ruby/neo4j/driver/logging1.rb +0 -51
  343. data/ruby/neo4j/driver/net/server_address.rb +0 -9
  344. data/ruby/neo4j/driver/query.rb +0 -48
  345. data/ruby/neo4j/driver/records.rb +0 -13
  346. data/ruby/neo4j/driver/transaction_config.rb +0 -50
  347. data/ruby/neo4j/driver/values.rb +0 -26
  348. 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
@@ -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