neo4j-ruby-driver 0.2.1 → 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: d120aee905184fbdec88e8492508aaf5ca5ab442e584d80d7047370b8d9b38f8
4
- data.tar.gz: f029e5705dbdc89b2ed0f27e224f4711a6ddbdf5c9968925a0a7fe0e8cd164e1
3
+ metadata.gz: 9da1a1a99dc073fdc74afd9078432f53d6d574eecf5fecc436c9207f9096687b
4
+ data.tar.gz: 0765c112017827121324658b302e4c7bd809fa7c390944aa21e912f16e371b9a
5
5
  SHA512:
6
- metadata.gz: cb2ee849c0c8952ae992ba23b4068a750454772a49b8d891c81abf184c5f6440f4295a38b266e51fc466521c8dfcd1a722f84db16f50e29bd28a6c2fd0e411a0
7
- data.tar.gz: 5efbeb6d55973470fa765bb6b46417f02c63713c4a2637847ff99bda193483b8751b6b7ca378b40a550cf25a0ea2cd0c39a4e459effc886a11d0fb746e3654c0
6
+ metadata.gz: bf3e072bf5b7a189de7cb6f176c64f7d502e9e30f93590dcd4b35a1af0ac9c8d3e01f4e5d087269a9257f7e9995686e1d5cb4e258f46637e01ae53526cbec3ca
7
+ data.tar.gz: b3c9e897e362d1e93db0a82d554d8b1cb1dcc5f625b0fc3223214fd55295291eb41f40f1858aad32e0e61ab7a711dbbfcb1f3296e832ee5c33a81a551d44ce97
@@ -0,0 +1,12 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Bolt
4
+ module AddressResolver
5
+ extend Bolt::Library
6
+
7
+ callback :address_resolver_func, %i[pointer pointer pointer], :void
8
+
9
+ attach_function :create, :BoltAddressResolver_create, %i[pointer address_resolver_func], :auto_pointer
10
+ attach_function :destroy, :BoltLog_destroy, %i[pointer], :void
11
+ end
12
+ end
@@ -0,0 +1,9 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Bolt
4
+ module AddressSet
5
+ extend Bolt::Library
6
+
7
+ attach_function :add, :BoltAddressSet_add, %i[pointer pointer], :int32_t
8
+ end
9
+ end
data/ffi/bolt/config.rb CHANGED
@@ -8,6 +8,10 @@ module Bolt
8
8
  BOLT_SCHEME_NEO4J = 1
9
9
 
10
10
  typedef :int32_t, :bolt_scheme
11
+
12
+ BOLT_TRANSPORT_PLAINTEXT = 0
13
+ BOLT_TRANSPORT_ENCRYPTED = 1
14
+
11
15
  typedef :int32_t, :bolt_transport
12
16
 
13
17
  attach_function :create, :BoltConfig_create, [], :auto_pointer
data/ffi/bolt/log.rb CHANGED
@@ -7,8 +7,8 @@ module Bolt
7
7
  callback :log_func, %i[pointer string], :void
8
8
 
9
9
  attach_function :create, :BoltLog_create, %i[pointer], :auto_pointer
10
- attach_function :destroy, :BoltLog_create, %i[pointer], :void
11
- attach_function :set_error_func, :BoltLog_create, %i[pointer log_func], :void
10
+ attach_function :destroy, :BoltLog_destroy, %i[pointer], :void
11
+ attach_function :set_error_func, :BoltLog_set_error_func, %i[pointer log_func], :void
12
12
  attach_function :set_warning_func, :BoltLog_set_warning_func, %i[pointer log_func], :void
13
13
  attach_function :set_info_func, :BoltLog_set_info_func, %i[pointer log_func], :void
14
14
  attach_function :set_debug_func, :BoltLog_set_debug_func, %i[pointer log_func], :void
@@ -11,7 +11,21 @@ module Neo4j
11
11
 
12
12
  class << self
13
13
  def default_config
14
- new
14
+ {
15
+ logger: ActiveSupport::Logger.new(STDOUT, level: ::Logger::ERROR), # :set_log
16
+ leaked_session_logging: false,
17
+ #connection_liveness_check_timeout: -1, # Not configured
18
+ max_connection_lifetime: 1.hour, # :set_max_connection_life_time
19
+ max_connection_pool_size: 100, #:set_max_pool_size
20
+ connection_acquisition_timeout: 1.minute, #:set_max_connection_acquisition_time
21
+ encryption: true, # :set_transport
22
+ trust_strategy: :trust_all_certificates,
23
+ connection_timeout: 30.seconds, # BoltSocketOptions_set_connect_timeout
24
+ max_transaction_retry_time: Internal::Retry::ExponentialBackoffRetryLogic::DEFAULT_MAX_RETRY_TIME,
25
+ #resolver: nil # :set_address_resolver
26
+ # ?????? BoltSocketOptions_set_keep_alive
27
+ # ???? BoltConfig_set_user_agent
28
+ }
15
29
  end
16
30
  end
17
31
  end
@@ -21,7 +21,7 @@ module Neo4j
21
21
  unless auth_token.is_a? FFI::Pointer
22
22
  raise Exceptions::AuthenticationException, 'Unsupported authentication token'
23
23
  end
24
- config ||= Config.default_config
24
+ config = Config.default_config.merge(config || {})
25
25
 
26
26
  Internal::DriverFactory.new.new_instance(uri, auth_token, config)
27
27
  end
@@ -0,0 +1,18 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Neo4j
4
+ module Driver
5
+ module Internal
6
+ class BoltServerAddress
7
+ include Net::ServerAddress
8
+
9
+ attr_reader :host, :port
10
+
11
+ def initialize(host, port)
12
+ @host = host
13
+ @port = port
14
+ end
15
+ end
16
+ end
17
+ end
18
+ end
@@ -13,9 +13,9 @@ module Neo4j
13
13
  def new_instance(uri, auth_token, config)
14
14
  uri = URI(uri)
15
15
  routing_context = routing_context(uri)
16
- connector, logger = create_connector(uri, auth_token, routing_context, config)
16
+ connector, logger, resolver = create_connector(uri, auth_token, routing_context, config)
17
17
  retry_logic = Retry::ExponentialBackoffRetryLogic.new(config[:max_transaction_retry_time], config[:logger])
18
- create_driver(connector, logger, retry_logic, config).tap(&:verify_connectivity)
18
+ create_driver(connector, logger, resolver, retry_logic, config).tap(&:verify_connectivity)
19
19
  end
20
20
 
21
21
  private
@@ -27,7 +27,8 @@ module Neo4j
27
27
  set_socket_options(bolt_config, config)
28
28
  set_routing_context(bolt_config, routing_context)
29
29
  set_scheme(bolt_config, uri, routing_context)
30
- [Bolt::Connector.create(address, auth_token, bolt_config), logger]
30
+ resolver = InternalResolver.register(bolt_config, config[:resolver])
31
+ [Bolt::Connector.create(address, auth_token, bolt_config), logger, resolver]
31
32
  end
32
33
 
33
34
  def bolt_config(config)
@@ -41,6 +42,11 @@ module Neo4j
41
42
  when :connection_acquisition_timeout
42
43
  check_error Bolt::Config.set_max_connection_acquisition_time(bolt_config,
43
44
  DurationNormalizer.milliseconds(value))
45
+ when :encryption
46
+ check_error Bolt::Config.set_transport(
47
+ bolt_config,
48
+ value ? Bolt::Config::BOLT_TRANSPORT_ENCRYPTED : Bolt::Config::BOLT_TRANSPORT_PLAINTEXT
49
+ )
44
50
  end
45
51
  end
46
52
  check_error Bolt::Config.set_user_agent(bolt_config, 'seabolt-cmake/1.7')
@@ -102,10 +108,10 @@ module Neo4j
102
108
  end
103
109
  end
104
110
 
105
- def create_driver(connector, logger, retry_logic, config)
111
+ def create_driver(connector, logger, resolver, retry_logic, config)
106
112
  connection_provider = DirectConnectionProvider.new(connector, config)
107
113
  session_factory = create_session_factory(connection_provider, retry_logic, config)
108
- InternalDriver.new(session_factory, logger)
114
+ InternalDriver.new(session_factory, logger, resolver)
109
115
  end
110
116
 
111
117
  def create_session_factory(connection_provider, retry_logic = nil, config = nil)
@@ -11,10 +11,13 @@ module Neo4j
11
11
  delegate :verify_connectivity, to: :session_factory
12
12
  auto_closable :session
13
13
 
14
- def initialize(session_factory, logger)
14
+ def initialize(session_factory, logger, resolver)
15
15
  @session_factory = session_factory
16
- @logger = logger # just a weak reference to prevent garbage collection
17
16
  @closed = Concurrent::AtomicBoolean.new(false)
17
+ # The below hold references to callbacks called from c,
18
+ # this prevents garbage collection before driver is garbage collected
19
+ @logger = logger
20
+ @resolver = resolver
18
21
  end
19
22
 
20
23
  def session(*args)
@@ -0,0 +1,31 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Neo4j
4
+ module Driver
5
+ module Internal
6
+ class InternalResolver
7
+ include ErrorHandling
8
+
9
+ class << self
10
+ def register(bolt_config, resolver)
11
+ return unless resolver
12
+ new(bolt_config, resolver)
13
+ end
14
+ end
15
+
16
+ def initialize(bolt_config, resolver)
17
+ @address_resolver_func = ->(_ptr, address, set) {
18
+ resolver.call(BoltServerAddress.new(Bolt::Address.host(address).first,
19
+ Bolt::Address.port(address).first.to_i)).each do |server_address|
20
+ bolt_address = Bolt::Address.create(server_address.host, server_address.port.to_s)
21
+ check_error Bolt::AddressSet.add(set, bolt_address)
22
+ end
23
+ }
24
+
25
+ address_resolver = Bolt::AddressResolver.create(nil, @address_resolver_func)
26
+ check_error Bolt::Config.set_address_resolver(bolt_config, address_resolver)
27
+ end
28
+ end
29
+ end
30
+ end
31
+ end
@@ -0,0 +1,13 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Neo4j
4
+ module Driver
5
+ module Net
6
+ module ServerAddress
7
+ def self.of(host, port)
8
+ Internal::BoltServerAddress.new(host, port)
9
+ end
10
+ end
11
+ end
12
+ end
13
+ end
data/ffi/neo4j/driver.rb CHANGED
@@ -28,6 +28,8 @@ if RUBY_PLATFORM.match?(/java/)
28
28
  module Value
29
29
  end
30
30
  end
31
+ module Net
32
+ end
31
33
  module Summary
32
34
  end
33
35
  module Types
@@ -2,6 +2,6 @@
2
2
 
3
3
  module Neo4j
4
4
  module Driver
5
- VERSION = '0.2.1'
5
+ VERSION = '0.3.0'
6
6
  end
7
7
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: neo4j-ruby-driver
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.1
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Heinrich Klobuczek
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-01-09 00:00:00.000000000 Z
11
+ date: 2020-01-14 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
@@ -224,6 +224,8 @@ files:
224
224
  - LICENSE.txt
225
225
  - README.md
226
226
  - ffi/bolt/address.rb
227
+ - ffi/bolt/address_resolver.rb
228
+ - ffi/bolt/address_set.rb
227
229
  - ffi/bolt/auth.rb
228
230
  - ffi/bolt/auto_releasable.rb
229
231
  - ffi/bolt/boolean.rb
@@ -251,6 +253,7 @@ files:
251
253
  - ffi/neo4j/driver/graph_database.rb
252
254
  - ffi/neo4j/driver/internal/async/access_mode_connection.rb
253
255
  - ffi/neo4j/driver/internal/async/direct_connection.rb
256
+ - ffi/neo4j/driver/internal/bolt_server_address.rb
254
257
  - ffi/neo4j/driver/internal/bookmarks_holder.rb
255
258
  - ffi/neo4j/driver/internal/direct_connection_provider.rb
256
259
  - ffi/neo4j/driver/internal/driver_factory.rb
@@ -264,6 +267,7 @@ files:
264
267
  - ffi/neo4j/driver/internal/internal_driver.rb
265
268
  - ffi/neo4j/driver/internal/internal_logger.rb
266
269
  - ffi/neo4j/driver/internal/internal_record.rb
270
+ - ffi/neo4j/driver/internal/internal_resolver.rb
267
271
  - ffi/neo4j/driver/internal/internal_statement_result.rb
268
272
  - ffi/neo4j/driver/internal/messaging/bolt_protocol.rb
269
273
  - ffi/neo4j/driver/internal/messaging/v1/bolt_protocol_v1.rb
@@ -292,6 +296,7 @@ files:
292
296
  - ffi/neo4j/driver/internal/value/time_with_zone_offset_value.rb
293
297
  - ffi/neo4j/driver/internal/value/unbound_relationship_value.rb
294
298
  - ffi/neo4j/driver/internal/value/value_adapter.rb
299
+ - ffi/neo4j/driver/net/server_address.rb
295
300
  - ffi/neo4j/driver/statement.rb
296
301
  - ffi/neo4j/driver/summary/statement_type.rb
297
302
  - ffi/neo4j/driver/types/entity.rb