类:Mongo::Server

继承:
对象
  • 对象
显示全部
扩展方式:
可转发
包括:
Event::PublisherMonitoring::Publishable
定义于:
build/Ruby-driver-v 2.19 /lib/mongo/server.rb ,
build/Ruby-driver-v 2.19 /lib/mongo/server/monitor.rb,
build/Ruby-driver-v 2.19 /lib/mongo/server/connection.rb,
build/Ruby-driver-v 2.19 /lib/mongo/server/description.rb,
build/Ruby-driver-v 2 。 19 /lib/mongo/server/app_metadata.rb,
build/Ruby-driver-v 2 . 19 /lib/mongo/server/push_monitor.rb,
build/Ruby-driver-v 2 . 19 /lib/mongo/server/connection_base.rb,
build/Ruby-driver-v 2 . 19 /lib/mongo/server/connection_pool.rb,
build/Ruby-driver-v 2 . 19 /lib/mongo/server/connection_common.rb,
build/Ruby-driver-v 2 . 19 /lib/mongo/server/monitor/connection.rb,
build/Ruby-driver-v 2 。 19 /lib/mongo/server/pending_connection.rb,
build/Ruby-driver-v 2 。 19 /lib/mongo/server/description/features.rb,
build/Ruby-driver-v 2 。 19 /lib/mongo/server/monitor/app_metadata.rb,
build/Ruby-driver-v 2 。 19 /lib/mongo/server/app_metadata/platform.rb,
build/Ruby-driver-v 2 。 19 /lib/mongo/server/app_metadata/truncator.rb,
build/Ruby-driver-v 2 . 19 /lib/mongo/server/push_monitor/connection.rb,
build/Ruby-driver-v 2 。 19 /lib/mongo/server/app_metadata/environment.rb,
build/Ruby-driver-v 2 。 19 /lib/mongo/server/round_trip_time_averager.rb,
build/Ruby-driver-v 2 . 19 /lib/mongo/server/connection_pool/populator.rb,
build/Ruby-driver-v 2 . 19 /lib/mongo/server/description/load_balancer.rb,
build/Ruby-driver-v 2 . 19 /lib/mongo/server/connection_pool/Generation_manager.rb

Overview

表示服务器端的单个服务器,可以是独立运行运行的、副本集的一部分或mongos。

由于:

  • 2.0.0

在命名空间下定义

类: AppMetadataConnectionConnectionBaseConnectionCommonConnectionPoolDescriptionMonitorPendingConnectionPushMonitorRoundTripTimeAverager

常量摘要折叠

CONNECT_TIMEOUT =

连接尝试超时的默认时间(以秒为单位)。

由于:

  • 2.4.3

10.冻结

Loggable中包含的常量

Loggable::PREFIX

实例属性摘要折叠

Event::Publisher中包含的属性

#event_listeners

实例方法摘要折叠

Event::Publisher中包含的方法

#publish

Monitoring::Publishable 中包含的方法

#publish_cmap_event#publish_event#publish_sdam_event

Loggable中包含的方法

#log_debug#log_error#log_ Fatal#log_info#log_warn#logger

构造函数详情

#初始化(地址, 集群, 监控, event_listeners, options = {}) ⇒ MongoDB Server

此方法是私有 API 的一部分。 您应尽可能避免使用此方法,因为它将来可能会被删除或更改。

注意:

服务器绝不能在集群之外直接实例化。

实例化一个新的服务器对象。 将启动背景刷新并订阅相应的事件。

例子:

初始化服务器。

Mongo::Server.new('127.0.0.1:27017', cluster, monitoring, listeners)

参数:

  • 地址 (地址)

    要连接到的托管:端口解决。

  • 集群 (集群)

    服务器所属的集群。

  • 监控 (监控)

    监控。

  • event_listeners ( Event::Listeners )

    事件侦听器。

  • 选项 哈希 (默认为: {}

    服务器选项。

选项哈希 ( options ):

  • :monitor 布尔值

    仅供内部驾驶员使用:是否在实例化服务器后对其进行监控。

  • :monitoring_io ( true , false )

    仅供内部驱动程序使用。 设置为 false 可防止此服务器执行与 SDAM 相关的 I/O。 注意:将此选项设置为 false 将使服务器无法运行。 它适用于手动调用 SDAM 状态转换的测试。

  • :populator_io ( true , false )

    仅供内部驾驶员使用。 设置为 false 可防止在服务器的连接池创建和启动填充器线程。 它用于同时关闭 Monitoring_io 的测试,除非明确需要填充器。 如果 Monitoring_io 关闭,但 Populator_io 打开,则需要在测试结束时手动关闭 Populator,因为没有监控的集群被视为未连接,因此在关闭时不会清理连接池Populator 线程。

  • :load_balancer ( true | false )

    此服务器是否为负载负载均衡器。

  • :connect string

    客户端连接模式。

由于:

  • 2.0.0



71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
# File 'build/Ruby-driver-v 2.19 /lib/mongo/server.rb', 第71行

def 初始化(地址, 集群, 监控, event_listeners, 选项 = {})
  @address = 地址
  @cluster = 集群
  @monitoring = 监控
  选项 = 选项.dup
  _monitor = 选项.删除(:monitor)
  @options = 选项.冻结
  @event_listeners = event_listeners
  @connection_id_gen = .new do
    包括 id
  end
  @scan_semaphore = DistinguishingSemaphore.new
  @round_trip_time_averager = RoundTripTimeAverager.new
  @description = 说明.new(地址, {},
    load_balancer: !!@options[:load_balancer],
    force_load_balancer: force_load_balancer?,
  )
  @last_scan = nil
  @last_scan_monotime = nil
  除非 选项[:monitoring_io] == false
    监控 = 监控.new(self, event_listeners, 监控,
      选项.合并(merge)(
        app_metadata: 集群.,
        push_monitor_app_metadata: 集群.,
        heartbeat_interval: 集群.heartbeat_interval,
    ))
    除非 _monitor == false
      start_monitoring
    end
  end
  @connected = true
  @pool_lock = 互斥锁.new
end

实例属性详细信息

#地址string (只读)

返回为服务器配置的解决。

返回:

  • ( string )

    为服务器配置的解决。

由于:

  • 2.0.0



106
107
108
# File 'build/Ruby-driver-v 2.19 /lib/mongo/server.rb', 第106行

def 地址
  @address
end

# 集群Cluster (readonly)

返回集群服务器集群。

返回:

  • (集群)

    集群服务器集群。

由于:

  • 2.0.0



109
110
111
# File 'build/Ruby-driver-v 2.19 /lib/mongo/server.rb', 第109行

def 集群
  @cluster
end

# descriptionServer::Description (readonly)

返回描述监控刷新的服务器描述。

返回:

由于:

  • 2.0.0



123
124
125
# File 'build/Ruby-driver-v 2.19 /lib/mongo/server.rb', 第123行

def 描述
  @description
end

#监控nil |监控(只读)

返回监视器 服务器监视器。 如果服务器是使用 Monitoring_io: false 选项创建的,则为 nil。

返回:

  • ( nil | Monitor )

    监视器 服务器监视器。 如果服务器是使用 Monitoring_io: false 选项创建的,则为 nil。

由于:

  • 2.0.0



113
114
115
# File 'build/Ruby-driver-v 2.19 /lib/mongo/server.rb', 第113行

def 监控
  监控
end

# Monitoring监控(只读)

返回监控 监控。

返回:

  • (监控)

    监控 监控。

由于:

  • 2.0.0



119
120
121
# File 'build/Ruby-driver-v 2.19 /lib/mongo/server.rb', 第119行

def 监控
  @monitoring
end

# options哈希(只读)

返回选项哈希值。

返回:

  • (哈希)

    选项哈希。

由于:

  • 2.0.0



116
117
118
# File 'build/Ruby-driver-v 2.19 /lib/mongo/server.rb', 第116行

def 选项
  @options
end

# round_trip_time_averager =" RoundTripTimeAverager " (只读)

此方法是私有 API 的一部分。 您应尽可能避免使用此方法,因为它将来可能会被删除或更改。

返回往返时间平均器对象。

返回:

由于:

  • 2.0.0



233
234
235
# File 'build/Ruby-driver-v 2.19 /lib/mongo/server.rb', 第233行

def round_trip_time_averager
  @round_trip_time_averager
end

# scan_semaphore信号量(只读)

此方法是私有 API 的一部分。 您应尽可能避免使用此方法,因为它将来可能会被删除或更改。

返回信号量,以发出信号请求其监控立即扫描此服务器(如果正在运行)。

返回:

  • (信号量)

    信号量,用于请求服务器的监控(如果正在运行)立即扫描该服务器。

由于:

  • 2.0.0



229
230
231
# File 'build/Ruby-driver-v 2.19 /lib/mongo/server.rb', 第229行

def scan_semaphore
  @scan_semaphore
end

实例方法详细信息

# == (other) ⇒ true , false

此服务器与另一台服务器相同吗?

例子:

服务器与其他服务器相同吗?

server == other

参数:

  • 其他 ( Object )

    要比较的对象。

返回:

  • ( true , false )

    如果服务器相等。

由于:

  • 2.0.0



245
246
247
248
# File 'build/Ruby-driver-v 2.19 /lib/mongo/server.rb', 第245行

def ==(其他)
  return false 除非 其他.is_a?(服务器)
  地址 == 其他.地址
end

# clear_connection_pool (service_id: nil, Interrupt_in_use_connections: false) ⇒对象

此方法是私有 API 的一部分。 您应尽可能避免使用此方法,因为它将来可能会被删除或更改。

参数:

  • :service_id ( Object )

    仅关闭与指定服务 ID 的连接。

  • :interrupt_in_use_connections ( true | false )

    是否也应中断已清除的连接。

由于:

  • 2.0.0



667
668
669
670
671
672
673
674
675
676
677
# File 'build/Ruby-driver-v 2.19 /lib/mongo/server.rb', 第667行

def clear_connection_pool(service_id: nil, Interrupt_in_use_connections: false)
  @pool_lock.同步 do
    # 从技术上讲,关闭后被标记为未知的服务器
    # 不正确,但不会有意义地改变任何状态。
    # 因为从历史上看,驱动程序允许服务器被标记为
    # 在任何时候都是未知的,即使池已关闭,也要继续这样做。
    if @pool && !@pool.已关闭?
      @pool.断开连接!(service_id: service_id, Interrupt_in_use_connections: Interrupt_in_use_connections)
    end
  end
end

# clear_description对象

此方法是私有 API 的一部分。 您应尽可能避免使用此方法,因为它将来可能会被删除或更改。

清除服务器描述,以便将其视为未知并可以安全地断开连接。

由于:

  • 2.0.0



657
658
659
# File 'build/Ruby-driver-v 2.19 /lib/mongo/server.rb', 第657行

def clear_description
  @description = mongo::服务器::说明.new(地址, {})
end

# close对象

由于:

  • 2.0.0



294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
# File 'build/Ruby-driver-v 2.19 /lib/mongo/server.rb', 第294行

def 关闭
  if 监控
    监控.停止!
  end

  @connected = false

  _pool = nil
  @pool_lock.同步 do
    _pool, @pool = @pool, nil
  end

  # TODO:在 RUBY- 3174中将其更改为 _pool.close。
  # 清空池。 如果服务器并非未知,则
  # 池将保持就绪状态。 停止背景填充器线程。
  _pool&。关闭(keep_ready: true)

  nil
end

#compressorString | nil

已弃用。
注意:

压缩是针对每个连接单独协商的。

服务器监控器协商的压缩器(如果有)。

如果没有服务器检查尚未完成,并且没有否定压缩,则此属性为零。

返回:

  • ( string | nil )

    协商的压缩程序。

由于:

  • 2.0.0



181
182
183
184
185
186
187
# File 'build/Ruby-driver-v 2.19 /lib/mongo/server.rb', 第181行

def 压缩器
  if 监控
    监控.压缩器
  else
    nil
  end
end

#可连接?true , false

已弃用。

MongoDB Server选择规范不再需要此功能。

确定是否能够建立与服务器的连接以及是否可以向其发送消息。

例子:

服务器是否可连接?

server.connectable?

返回:

  • ( true , false )

    如果服务器可连接。

由于:

  • 2.1.0



261
# File 'build/Ruby-driver-v 2.19 /lib/mongo/server.rb', 第261行

def 可连接? end

#已连接?true|false

此方法是私有 API 的一部分。 您应尽可能避免使用此方法,因为它将来可能会被删除或更改。

是否已连接服务器。

返回:

  • ( true|false )

    是否已连接服务器。

由于:

  • 2.7.0



320
321
322
# File 'build/Ruby-driver-v 2.19 /lib/mongo/server.rb', 第320行

def 已连接?
  @connected
end

#断开连接!true

断开驱动程序与此服务器的连接。

断开连接池与此服务器的所有空闲连接(如果存在)。 如果连接池的填充器正在运行,请将其停止。 不立即关闭当前已签出(即正在使用)的连接 - 此类连接在返回到各自的连接池时将被关闭。 停止服务器的背景监控。

返回:

  • ( true )

    始终为 true。

由于:

  • 2.0.0



275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
# File 'build/Ruby-driver-v 2.19 /lib/mongo/server.rb', 第275行

def 断开连接!
  if 监控
    监控.停止!
  end

  @connected = false

  # 当前的 CMAP 规范要求池大部分不可用
  # 如果其服务器未知(或因此断开连接)。
  # 但是,任何未完成的操作都应继续完成,
  # 并且它们的连接需要签入池中才能
  # 已拆除。 由于这种清理要求,我们不能只
  # 关闭池并将其设立为 nil,以便在下一个
  # 发现服务器的时间。
  pool_internal&。清除

  true
end

# force_load_balancer?true | false

此方法是私有 API 的一部分。 您应尽可能避免使用此方法,因为它将来可能会被删除或更改。

返回此服务器是否被迫成为负载均衡器。

返回:

  • ( true | false )

    是否强制将此服务器用作负载均衡器。

由于:

  • 2.0.0



130
131
132
# File 'build/Ruby-driver-v 2.19 /lib/mongo/server.rb', 第130行

def force_load_balancer?
  选项[:connect] == :load_balanced
end

# handle_auth_failure!对象

处理身份验证失败。

例子:

处理可能出现的身份验证失败问题。

server.handle_auth_failure! do
  Auth.get(user).(self)
end

返回:

  • ( Object )

    区块执行的结果。

引发:

由于:

  • 2.3.0



524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
# File 'build/Ruby-driver-v 2.19 /lib/mongo/server.rb', 第524行

def handle_auth_failure!
  产量
救援 mongo::错误::SocketTimeoutError
  #集群可能很慢,但不要放弃
  提高
救援 mongo::错误::SocketError, auth::Unauthorized => e
  # 非超时网络错误或身份验证错误,清除池并标记
  #拓扑结构未知
  未知!(
    生成: e.生成,
    service_id: e.service_id,
    stop_push_monitor: true,
  )
  提高
end

# handle_handshake_failure!对象

此方法是私有 API 的一部分。 您应尽可能避免使用此方法,因为它将来可能会被删除或更改。

处理握手失败。

由于:

  • 2.7.0



501
502
503
504
505
506
507
508
509
510
# File 'build/Ruby-driver-v 2.19 /lib/mongo/server.rb', 第501行

def handle_handshake_failure!
  产量
救援 mongo::错误::SocketError, mongo::错误::SocketTimeoutError => e
  未知!(
    生成: e.生成,
    service_id: e.service_id,
    stop_push_monitor: true,
  )
  提高
end

# heartbeat_FrequencyObject也称为: heartbeat_Frequency_Seconds

已弃用。

由于:

  • 2.0.0



159
160
161
# File 'build/Ruby-driver-v 2.19 /lib/mongo/server.rb', 第159行

def heartbeat_Frequency
  集群.heartbeat_interval
end

#检查string

进行美观打印的服务器检查。

例子:

进行服务器检查。

server.inspect

返回:

  • ( string )

    不错的检查string 。

由于:

  • 2.0.0



355
356
357
# File 'build/Ruby-driver-v 2.19 /lib/mongo/server.rb', 第355行

def 检查
  " #<Mongo::Server:0 x #{ object_id} 解决 = #{ { 托管}: #{ 解决} #{ status} > "
end

# last_scan时间 | nil

返回 last_scan 上次服务器扫描完成的时间;如果尚未扫描服务器,则返回 nil。

返回:

  • (时间 | nil )

    last_scan 上次服务器扫描完成的时间,如果尚未扫描服务器,则为 nil。

由于:

  • 2.4.0



138
139
140
141
142
143
144
# File 'build/Ruby-driver-v 2.19 /lib/mongo/server.rb', 第138行

def last_scan
  if 描述 && !描述.config.空?
    描述.last_update_time
  else
    @last_scan
  end
end

# last_scan_monotimeFloat | nil

此方法是私有 API 的一部分。 您应尽可能避免使用此方法,因为它将来可能会被删除或更改。

返回 last_scan_monotime 上次服务器扫描完成的单调时间;如果尚未扫描服务器,则返回 nil。

返回:

  • ( Float | nil )

    last_scan_monotime 上次服务器扫描完成的单调时间,如果尚未扫描服务器,则为 nil。

由于:

  • 2.0.0



149
150
151
152
153
154
155
# File 'build/Ruby-driver-v 2.19 /lib/mongo/server.rb', 第149行

def last_scan_monotime
  if 描述 && !描述.config.空?
    描述.last_update_monotime
  else
    @last_scan_monotime
  end
end

# matches_tag_set? (tag_set) ⇒ true , false

确定提供的标签是否是服务器标签的子集。

例子:

提供的标签是服务器标签的子集吗?

server.matches_tag_set?({ 'rack' => 'a', 'dc' => 'nyc' })

参数:

  • tag_set (哈希)

    用于与服务器标签进行比较的标签集。

返回:

  • ( true , false )

    如果提供的标签是服务器标签的子集。

由于:

  • 2.0.0



461
462
463
464
465
# File 'build/Ruby-driver-v 2.19 /lib/mongo/server.rb', 第461行

def matches_tag_set?(tag_set)
  tag_set.密钥.全部? do |k|
    标记[k] && 标记[k] == tag_set[k]
  end
end

# next_connection_id对象

此方法是私有 API 的一部分。 您应尽可能避免使用此方法,因为它将来可能会被删除或更改。

由于:

  • 2.0.0



680
681
682
# File 'build/Ruby-driver-v 2.19 /lib/mongo/server.rb', 第680行

def next_connection_id
  @connection_id_gen.next_id
end

#Mongo::Server::ConnectionPool

获取此服务器的连接池。

例子:

获取服务器的连接池。

server.pool

返回:

由于:

  • 2.0.0



424
425
426
427
428
429
430
431
432
433
434
435
# File 'build/Ruby-driver-v 2.19 /lib/mongo/server.rb', 第424行

def 
  if 未知?
    提高 错误::ServerNotUsable, 地址
  end

  @pool_lock.同步 do
    opts = 已连接? ? 选项 : 选项.合并(merge)(Populator_io: false)
    @pool ||= 连接池.new(self, opts).点击 do ||
      .准备就绪
    end
  end
end

# pool_internalServer::ConnectionPool | nil

此方法是私有 API 的一部分。 您应尽可能避免使用此方法,因为它将来可能会被删除或更改。

用于检索此服务器连接池的内部驱动程序方法。

pool不同,如果池尚不存在, pool_internal则不会创建。

返回:

由于:

  • 2.0.0



445
446
447
448
449
# File 'build/Ruby-driver-v 2.19 /lib/mongo/server.rb', 第445行

def pool_internal
  @pool_lock.同步 do
    @pool
  end
end

# publish_opening_event对象

此方法是私有 API 的一部分。 您应尽可能避免使用此方法,因为它将来可能会被删除或更改。

发布服务器打开事件。

由于:

  • 2.0.0



340
341
342
343
344
345
# File 'build/Ruby-driver-v 2.19 /lib/mongo/server.rb', 第340行

def publish_opening_event
  publish_sdam_event(
    监控::SERVER_OPENING,
    监控::事件::ServerOpening.new(地址, 集群.拓扑结构)
  )
end

#重新连接!true

重新启动服务器监控。

例子:

重新启动服务器监控。

server.reconnect!

返回:

  • ( true )

    始终为 true。

由于:

  • 2.1.0



475
476
477
478
479
480
# File 'build/Ruby-driver-v 2.19 /lib/mongo/server.rb', 第475行

def 重新连接!
  if 选项[:monitoring_io] != false
    监控.重新启动!
  end
  @connected = true
end

# retry_reads?布尔

此方法是私有 API 的一部分。 您应尽可能避免使用此方法,因为它将来可能会被删除或更改。

服务器是否支持新式读取重试。

返回:

  • 布尔值

由于:

  • 2.0.0



543
544
545
# File 'build/Ruby-driver-v 2.19 /lib/mongo/server.rb', 第543行

def retry_reads?
  !!(功能.session_enabled? && logic_session_timeout)
end

# retry_writes?true , false

注意:

可重试写入仅适用于服务器版本3.6 + 且具有分片集群或副本集。

注意:

对于负载均衡拓扑,此方法中的某些条件会自动返回 false。 此方法中的条件应始终为 true,因为负载均衡拓扑仅在 MongoDB 5.0 + 上可用,不适用于独立运行的拓扑。 因此,我们可以假设已启用重试写入。

是否会重试发送到此服务器的写入。

例子:

将重试写入。

server.retry_writes?

返回:

  • ( true , false )

    如果写入,则会重试。

由于:

  • 2.5.0



564
565
566
# File 'build/Ruby-driver-v 2.19 /lib/mongo/server.rb', 第564行

def retry_writes?
  !!(功能.session_enabled? && logic_session_timeout && !独立运行?) || load_balancer?
end

# start_monitoring对象

此方法是私有 API 的一部分。 您应尽可能避免使用此方法,因为它将来可能会被删除或更改。

开始监控服务器。

由驾驶员在内部使用,将服务器添加到集群,同时延迟监控,直到服务器加入集群。

由于:

  • 2.0.0



330
331
332
333
334
335
# File 'build/Ruby-driver-v 2.19 /lib/mongo/server.rb', 第330行

def start_monitoring
  publish_opening_event
  if 选项[:monitoring_io] != false
    监控.运行!
  end
end

#statusString

此方法是私有 API 的一部分。 您应尽可能避免使用此方法,因为它将来可能会被删除或更改。

返回表示服务器状态的string (例如 主节点)。

返回:

  • ( string )

    表示服务器状态的string (例如 主节点)。

由于:

  • 2.0.0



362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
# File 'build/Ruby-driver-v 2.19 /lib/mongo/server.rb', 第362行

def 状态
  案例
  when load_balancer?
    'LB'
  when 主节点?
    ' PRIMARY '
  when 从节点(secondary node from replica set)?
    ' SECONDARY '
  when 独立运行?
    'STANDALONE'
  when 仲裁节点?
    'ARBITER'
  when ghost?
    'GHOST'
  when 其他?
    ' OTHER '
  when mongos?
    'MONGOS'
  when 未知?
    ' UNKNOWN '
  else
    # 由于摘要方法经常用于调试,因此不要引发
    # 如果没有匹配的预期类型,则会出现异常
    nil
  end
end

#摘要对象

注意:

此方法是实验性的,可能会发生变化。

由于:

  • 2.7.0



393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
# File 'build/Ruby-driver-v 2.19 /lib/mongo/server.rb', 第393行

def 总结
  状态 = self.状态 || ' '
  if replica_set_name
    状态 += " replica_set= #{ replica_set_name } "
  end

  除非 监控&。运行?
    状态 += " NO-MONITORING"
  end

  if @pool
    状态 += " pool= #{ @pool .summary } } "
  end

  Address_bit = if 地址
    " #{ 解决}: #{ 托管} "
  else
    'nil'
  end

  " #< 解决= #{ address_bit } #{ status } > "
end

#未知! (options = {}) ⇒对象

将服务器标记为未知并发布关联的 SDAM事件(服务器描述已更改)。

如果在选项中传递了生成,则仅当传递的生成不早于服务器连接池的当前生成,服务器才会被标记为未知。

参数:

  • 选项 哈希 (默认为: {}

    选项。

选项哈希 ( options ):

  • :Generation 整数

    用于产生错误的操作的连接的连接池生成。

  • :keep_connection_pool ( true | false )

    通常,当新服务器描述未知时,相应服务器上的连接池将被清除。 将此选项设置为 true 以保留现有连接池(在4.2 + 服务器上处理非主错误时需要)。

  • :topology_version ( TopologyVersion )

    导致服务器被标记为未知的错误响应的拓扑版本。

  • :stop_push_monitor ( true | false )

    是否停止与服务器关联的 PushMonitor(如果有)。

  • :service_id 对象

    仅丢弃指定服务 ID 的状态。

由于:

  • 2.4.0 、 从版本2.7.0开始发送 SDAM 事件



592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
# File 'build/Ruby-driver-v 2.19 /lib/mongo/server.rb', 第592行

def 未知!(选项 = {})
   = pool_internal

  if load_balancer?
    # 当客户端处于负载均衡拓扑结构时,服务器(其中一个和
    # only that can be)开始时作为负载负载均衡器,并保持作为
    # 负载负载均衡器无限期。 因此,它没有被标记为未知。
    #
    # 但是,此方法也会清除服务器的连接池
    # 当后者被标记为未知时,并且这部分需要发生
    # 当服务器是负载均衡器时。
    #
    # 负载均衡器服务器可能没有服务 ID,
    #示例,如果尚未成功连接到
    # 此服务器,但该服务器仍可标记为未知,前提是
    # 个此类连接在建立过程中失败。
    if service_id = 选项[:service_id]
      &。断开连接!(service_id: service_id)
    end
    return
  end

  if 选项[:Generation] && 选项[:Generation] < &。生成
    return
  end

  if 选项[:topology_version] && 描述.topology_version &&
    !选项[:topology_version].gt?(描述.topology_version)
  then
    return
  end

  if 选项[:stop_push_monitor]
    监控&。stop_push_monitor!
  end

  # SDAM 流将更新服务器上的描述,而无需就地更新
  # 更改并根据需要调用 SDAM 转换。
  config = {}
  if 选项[:service_id]
    config[' serviceId '] = 选项[:service_id]
  end
  if 选项[:topology_version]
    config['topologyVersion'] = 选项[:topology_version]
  end
  new_description = 说明.new(地址, config,
    load_balancer: load_balancer?,
    force_load_balancer: 选项[:connect] == :load_balanced,
  )
  集群.run_sdam_flow(描述, new_description, 选项)
end

# update_description (description) ⇒对象

此方法是私有 API 的一部分。 您应尽可能避免使用此方法,因为它将来可能会被删除或更改。

由于:

  • 2.0.0



645
646
647
648
649
650
651
# File 'build/Ruby-driver-v 2.19 /lib/mongo/server.rb', 第645行

def update_description(描述)
   = pool_internal
  if  && !描述.未知?
    .准备就绪
  end
  @description = 描述
end

#update_last_scanObject

此方法是私有 API 的一部分。 您应尽可能避免使用此方法,因为它将来可能会被删除或更改。

由于:

  • 2.0.0



685
686
687
688
# File 'build/Ruby-driver-v 2.19 /lib/mongo/server.rb', 第685行

def update_last_scan
  @last_scan = 时间.now
  @last_scan_monotime = Utils.monotic_time
end

# with_connection (connection_global_id: nil, &block) ⇒对象

使用连接执行一段代码,先将其签出服务器的池,然后再签入。

例子:

使用连接发送消息。

server.with_connection do |connection|
  connection.dispatch([ command ])
end

返回:

  • ( Object )

    区块执行的结果。

由于:

  • 2.3.0



493
494
495
# File 'build/Ruby-driver-v 2.19 /lib/mongo/server.rb', 第493行

def with_connection(connection_global_id: nil, )
  .with_connection(connection_global_id: connection_global_id, )
end