클래스: Mongo::Server::ConnectionPool

상속:
객체
  • 객체
모두 표시
확장자:
전달 가능
다음을 포함합니다.
로깅 가능, 모니터링::게시 가능
다음에 정의됨:
build/ruby-driver-v2.19/lib/mongo/server/connection_pool.rb,
build/ruby-driver-v2.19/lib/mongo/server/connection_pool/populator.rb,
build/ruby-driver-v2.19/lib/mongo/server/connection_pool/generation_manager.rb

개요

서버 연결을 위한 연결 풀을 나타냅니다.

이후:

  • 2.0.0, 2.9.0에서 크게 다시 작성되었습니다.

네임스페이스 아래에 정의됨

클래스: 생성 관리자, 채우기

상수 요약 접기

DEFAULT_MAX_SIZE =

연결 풀 의 기본값 최대 크기입니다.

이후:

  • 2.9.0

20.동결
DEFAULT_MIN_SIZE =

연결 풀 의 기본값 최소 크기입니다.

이후:

  • 2.9.0

0.동결
DEFAULT_WAIT_TIMEOUT =

연결을 기다릴 기본값 시간 제한(초)입니다.

이 시간 제한은 인플로우 스레드가 백그라운드 스레드가 연결을 설정하기를 기다리는 동안 적용됩니다(따라서 할당된 시간 내에 연결, 핸드셰이크 및 인증해야 함).

현재 10 초로 설정되어 있습니다. 기본 연결 시간 제한 자체는 10 초이지만, 시간 제한을 크게 설정하면 역방향 프록시에서 요청 시간이 초과되면 애플리케이션에 문제가 발생할 수 있으므로 15 초를 초과하는 연결은 잠재적으로 위험할 수 있습니다.

이후:

  • 2.9.0

10.동결

Loggable에서 포함된 상수

Loggable::prefix

인스턴스 속성 요약 접기

모니터링::게시 가능에 포함된 속성

#monitoring

클래스 메서드 요약 접기

인스턴스 메서드 요약 접기

Monitoring::Publishable에 포함된 메서드

#publish_cmap_event, #publish_event, #publish_s담_event

Loggable에 포함된 메서드

#log_debug, #log_error, #log_fatal, #log_info, #log_warn, #logger

생성자 세부 정보

#initialize(서버, options = {}) ⇒ ConnectionPool

새 연결 풀을 만듭니다.

참고: 또한 이 풀에서 생성한 연결에 대한 옵션은 다음과 같아야 합니다.

be included in the options passed here, and they will be forwarded to
any connections created by the pool.

매개변수:

  • 서버 (MongoDB 서버)

    이 연결 풀 사용되는 서버 입니다.

  • 옵션 (해시) (기본값: {})

    연결 풀 옵션.

옵션 해시(options):

  • :max_size (정수)

    The maximum pool size. 이 옵션을 0으로 설정하면 연결 풀 무제한으로 생성됩니다.

  • :max_pool_size (정수)

    더 이상 사용되지 않습니다. 최대 풀 크기입니다. max_size도 지정하는 경우 max_size와 max_pool_size가 동일해야 합니다.

  • :min_size (정수)

    최소 풀 크기입니다.

  • :min_pool_size (정수)

    더 이상 사용되지 않습니다. 최소 풀 크기입니다. min_size도 지정하는 경우 min_size와 min_pool_size는 동일해야 합니다.

  • :wait_timeout (Float)

    무료 연결을 기다리는 시간(초)입니다.

  • :wait_queue_timeout (Float)

    더 이상 사용되지 않습니다. :wait_timeout의 별칭입니다. wait_timeout과 wait_queue_timeout이 모두 지정된 경우 해당 값이 동일해야 합니다.

  • :max_idle_time (Float)

    풀에서 유휴 연결을 닫아야 하는 시간(초)입니다.

  • :populator_io (true, false)

    내부 운전자 전용입니다. 서버의 연결 풀 에서 채우기 스레드가 생성되고 시작되지 않도록 하려면 false로 설정합니다. 채우기 도구가 명시적으로 필요한 경우를 제외하고 monitoring_io도 끄는 테스트에 사용하기 위한 것입니다. monitoring_io가 꺼져 있지만populator_io가 켜져 있는 경우, 모니터링 이 없는 클러스터 는 연결되지 않은 것으로 간주되어 닫을 때 연결 풀 채우기 스레드를 정리하지 않으므로 테스트가 끝날 때 채우기를 수동으로 닫아야 합니다.

이후:

  • 2.0.0, 2.9.0에서 변경된 API



92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
# 파일 ' 빌드/ Ruby-driver-v2.19/lib/mongo/ 서버/connection_pool.rb', 줄 92

def 초기화(서버, 옵션 = {})
  하지 않는 한 서버.is_a?(서버)
    올리다 ArgumentError, '첫 번째 인수는 서버 인스턴스 여야 합니다.'
  end
  옵션 = 옵션.dup
  만약 옵션[:min_size] && 옵션[:min_pool_size] && 옵션[:min_size] != 옵션[:min_pool_size]
    올리다 ArgumentError, "최소 크기 #{options[:min_size]} 가 최소 풀 크기 #{options[:min_pool_size]}와 동일하지 않습니다.
  end
  만약 옵션[:max_size] && 옵션[:max_pool_size] && 옵션[:max_size] != 옵션[:max_pool_size]
    올리다 ArgumentError, "최대 크기 #{options[:max_size]} 가 최대 풀 크기 #{options[:max_pool_size]}와 동일하지 않습니다. "
  end
  만약 옵션[:wait_timeout] && 옵션[:wait_queue_timeout] && 옵션[:wait_timeout] != 옵션[:wait_queue_timeout]
    올리다 ArgumentError, "대기 시간 제한#{options[:wait_timeout]} 은 대기열 제한 시간#{options[:wait_queue_timeout]} 과 동일하지 않습니다 .
  end
  옵션[:min_size] ||= 옵션[:min_pool_size]
  옵션.삭제(:min_pool_size)
  옵션[:max_size] ||= 옵션[:max_pool_size]
  옵션.삭제(:max_pool_size)
  만약 옵션[:min_size] && 옵션[:max_size] &&
    (옵션[:max_size] != 0 && 옵션[:min_size] > 옵션[:max_size])
  then
    올리다 ArgumentError, "최소 크기 #{options[:min_size]} 가 최대 크기 #{options[:max_size]} } 를 초과할 수 없습니다. "
  end
  만약 옵션[:wait_queue_timeout]
    옵션[:wait_timeout] ||= 옵션[:wait_queue_timeout]
  end
  옵션.삭제(:wait_queue_timeout)

  @server = 서버
  @options = 옵션.동결

  @generation_manager = 생성 관리자.신규(서버: 서버)
  @ready = 거짓
  @closed = 거짓

  # 이 풀이 소유한 연결은 다음 중 하나에 있어야 합니다.
  # 사용 가능한 연결 배열 ( 스택 으로 사용됨)
  # 또는 체크아웃된 연결 설정하다.
  @available_connections = available_connections = []
  @checked_out_connections = 세트.신규
  @pending_connections = 세트.신규
  @interrupt_connections = []

  # @available_connections에 대한 액세스를 동기화하는 데 사용되는 뮤텍스 및
  # @checked_out_connections. 풀 객체 는 스레드로부터 안전하므로
  # 일반적으로 인스턴스 변수를 조회 하거나 수정하는 모든 메서드
  # 이 잠금 상태에서 수행해야 합니다.
  @ 락 = 뮤텍스.신규

  # 백그라운드 스레드는 다음의 크기를 유지 관리합니다.
  # 풀을 최소 min_size로 설정
  @populator = 인구.신규(self, 옵션)
  @popule_semapher = 세마포어.신규

  # 첫 번째 체크인 check_out: max_pool_size를 시행하다 조건 변수입니다.
  # 이 조건 변수는 다음과 같은 경우 신호를 보내야 합니다.
  # 사용할 수 없는 연결이 감소합니다(pending + Pending_connections +
  # available_connections).
  @size_cv = mongo::조건 변수.신규(@ 락)
  # size_cv를 초과한 스레드 수를 나타냅니다.
  # 게이트이지만 보류 중인 연결에 추가할 연결을 획득하지 않았습니다.
  # 설정하다.
  @connection_requests = 0

  # 두 번째 검사를 시행할 조건 변수 check_out: max_connecting.
  # i 조건 변수는 대기 중인
  # 연결이 감소합니다.
  @max_connecting_cv = mongo::조건 변수.신규(@ 락)
  @max_connecting = 옵션.가져오기(:max_connecting, 2)

  ObjectSpace.describe_finalizer(self, self.클래스.마무리(@available_connections, @pending_connections, @populator))

  publish_cmap_event(
    모니터링::이벤트::Cmap::풀 생성.신규(@server.주소, 옵션, self)
  )
end

인스턴스 속성 세부 정보

#creation_manager정수 (읽기 전용)

이 메서드는 비공개 API의 일부입니다. 이 방법은 향후 제거되거나 변경될 수 있으므로 가능하면 사용하지 않는 것이 좋습니다.

현재 대기열에서 사용 중인 연결의 생성 생성을 반환합니다.

반환합니다:

  • (정수)

    생성 대기열에서 현재 사용 중인 연결의 생성입니다.

이후:

  • 2.0.0, 2.9.0에서 크게 다시 작성되었습니다.



216
217
218
# 파일 ' 빌드/ Ruby-driver-v2.19/lib/mongo/ 서버/connection_pool.rb', 줄 216

def generate_manager
  @generation_manager
end

#max_connecting객체 (읽기 전용)

이 메서드는 비공개 API의 일부입니다. 이 방법은 향후 제거되거나 변경될 수 있으므로 가능하면 사용하지 않는 것이 좋습니다.

이후:

  • 2.0.0, 2.9.0에서 크게 다시 작성되었습니다.



325
326
327
# 파일 ' 빌드/ Ruby-driver-v2.19/lib/mongo/ 서버/connection_pool.rb', 줄 325

def max_connecting
  @max_connecting
end

#options해시 (읽기 전용)

반환값 options 풀 옵션입니다.

반환합니다:

  • (해시)

    options 풀 옵션입니다.

이후:

  • 2.0.0, 2.9.0에서 크게 다시 작성되었습니다.



170
171
172
# 파일 ' 빌드/ Ruby-driver-v2.19/lib/mongo/ 서버/connection_pool.rb', 줄 170

def 옵션
  @options
end

#채우기 _세마포어 ⇒ 객체 (읽기 전용)

풀 크기가 변경되어 채우기를 깨울 때 조건 변수가 브로드캐스트됩니다.

이후:

  • 2.0.0, 2.9.0에서 크게 다시 작성되었습니다.



55
56
57
# 파일 ' 빌드/ Ruby-driver-v2.19/lib/mongo/ 서버/connection_pool.rb', 줄 55

def 채우기 세마포어
  @popule_semapher
end

#populator객체 (읽기 전용)

이 메서드는 비공개 API의 일부입니다. 이 방법은 향후 제거되거나 변경될 수 있으므로 가능하면 사용하지 않는 것이 좋습니다.

이후:

  • 2.0.0, 2.9.0에서 크게 다시 작성되었습니다.



322
323
324
# 파일 ' 빌드/ Ruby-driver-v2.19/lib/mongo/ 서버/connection_pool.rb', 줄 322

def 채우기
  @populator
end

#서버객체 (읽기 전용)

이 메서드는 비공개 API의 일부입니다. 이 방법은 향후 제거되거나 변경될 수 있으므로 가능하면 사용하지 않는 것이 좋습니다.

이후:

  • 2.0.0, 2.9.0에서 크게 다시 작성되었습니다.



173
174
175
# 파일 ' 빌드/ Ruby-driver-v2.19/lib/mongo/ 서버/connection_pool.rb', 줄 173

def 서버
  @server
end

클래스 메서드 세부 정보

.finalize(사용 가능한_연결, 보류 중인_연결, 채우기) ⇒ Proc

가비지 컬렉션을 위한 연결 풀을 마무리합니다.

매개변수:

  • available_connections (List<Mongo::Connection>)

    사용 가능한 연결입니다.

  • 보류 중인_연결 (List<Mongo::Connection>)

    보류 중인 연결입니다.

  • 채우기 (인구)

    채우기.

반환합니다:

  • (Proc)

    종료자.

이후:

  • 2.0.0, 2.9.0에서 크게 다시 작성되었습니다.



787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
# 파일 ' 빌드/ Ruby-driver-v2.19/lib/mongo/ 서버/connection_pool.rb', 줄 787

def self.마무리(available_connections, 보류 중인_연결, 채우기)
  proc do
    available_connections. do |연결|
      연결.연결 해제!(이유: :pool_closed)
    end
    available_connections.지우기

    보류 중인_연결. do |연결|
      연결.연결 해제!(이유: :pool_closed)
    end
    보류 중인_연결.지우기

    # 종료자는 체크아웃된 연결을 닫지 않습니다.
    # 자체적으로 가비지를 수집해야 합니다.
    # 그러면 닫힙니다.
  end
end

인스턴스 메서드 세부 정보

#available_count정수

풀에서 사용 가능한 연결 수입니다.

반환합니다:

  • (정수)

    사용 가능한 연결 수입니다.

이후:

  • 2.9.0



274
275
276
277
278
279
280
# 파일 ' 빌드/ Ruby-driver-v2.19/lib/mongo/ 서버/connection_pool.rb', 줄 274

def available_count
  raise_if_closed!

  @ 락.동기화 do
    @available_connections.분량
  end
end

#check_in(connection) ⇒ 객체

풀에 대한 연결을 다시 확인합니다.

연결이 이전에 이 풀에서 생성된 적이 있어야 합니다.

매개변수:

이후:

  • 2.9.0



379
380
381
382
383
384
385
386
387
# 파일 ' 빌드/ Ruby-driver-v2.19/lib/mongo/ 서버/connection_pool.rb', 줄 379

def check_in(연결)
  check_invariants

  @ 락.동기화 do
    do_check_in(연결)
  end
보장
  check_invariants
end

#check_out(connection_global_id: nil) ⇒ Mongo::Server::Connection

풀에서 연결을 확인합니다.

풀에 활성 연결이 있는 경우 가장 최근에 사용된 연결이 반환됩니다. 그렇지 않고 연결 풀 크기가 최대 크기보다 작은 경우 새 연결을 만들고 반환합니다. 그렇지 않고 대기 시간 제한까지 기다렸다가 여전히 활성 연결이 없고 풀 크기가 최대인 경우 Timeout::Error를 발생시킵니다.

반환된 연결은 풀의 최대 크기에 포함됩니다. 호출자가 연결 사용을 마치면 check_in 메서드를 통해 연결을 다시 체크인해야 합니다.

반환합니다:

다음을 발생시킵니다.

  • (Error::PoolClosedError)

    풀이 닫힌 경우.

  • (Timeout::Error)

    연결 풀 최대 크기이고 대기 시간 초과보다 오래 유지되는 경우.

이후:

  • 2.9.0



345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
# 파일 ' 빌드/ Ruby-driver-v2.19/lib/mongo/ 서버/connection_pool.rb', 줄 345

def check_out(connection_global_id: nil)
  check_invariants

  publish_cmap_event(
    모니터링::이벤트::Cmap::connectionCheckOutStarted 이벤트.신규(@server.주소)
  )

  raise_if_pool_closed!
  raise_if_pool_paused_locked!

  연결 = recover_and_connect_connection(connection_global_id)

  publish_cmap_event(
    모니터링::이벤트::Cmap::connectionCheckedOut.신규(@server.주소, 연결.id, self),
  )

  만약 Lint.활성화?
    하지 않는 한 연결.연결됨?
      올리다 오류::LintError, "#{주소} 에 대한연결 풀이 연결 이 끊긴 연결 #{연결.생성} } 을 체크아웃했습니다:#{연결.ID}"
    end
  end

  연결
보장
  check_invariants
end

#clear(options = nil) ⇒ true

풀의 모든 유휴 연결을 닫고 현재 체크아웃된 연결이 풀에 다시 체크인될 때 닫히도록 예약합니다. 풀이 일시 중지되고 배경 에서 새 연결을 생성하지 않으며 준비됨으로 표시될 때까지 체크아웃 요청이 실패합니다.

매개변수:

  • 옵션 (해시) (기본값: nil)

    사용자 지정 가능한 옵션 세트

옵션 해시(options):

  • :lazy (true | false)

    true인 경우 유휴 연결을 닫지 말고 후속 체크아웃 작업 중에 닫도록 합니다. 기본값은 false입니다.

  • :interrupt_in_use_connections (true | false)

    true인 경우 체크아웃된 모든 연결을 즉시 닫습니다. 거짓인 경우 체크아웃된 연결을 닫지 마세요. 기본값은 true입니다.

  • :service_id (객체)

    지정된 서비스 ID와의 연결만 해제합니다.

반환합니다:

  • (true)

    true.

이후:

  • 2.1.0



497
498
499
500
501
502
503
504
505
# 파일 ' 빌드/ Ruby-driver-v2.19/lib/mongo/ 서버/connection_pool.rb', 줄 497

def 지우기(옵션 = nil)
  raise_if_closed!

  만약 Lint.활성화? && !@server.알 수 없음?
    올리다 오류::LintError, "{@ 서버.summary}서버 서버 풀을 지우려고 시도 하는 중"
  end

  do_clear(옵션)
end

#close(options = nil) ⇒ true

풀을 닫은 것으로 표시하고, 풀의 모든 유휴 연결을 닫으며, 현재 체크아웃된 연결이 풀에 다시 체크인될 때 닫히도록 예약합니다. 강제 옵션이 true이면 체크아웃된 연결도 닫힙니다. 풀이 닫힌 후 사용하려고 하면 Error::PoolClosedError가 발생합니다.

매개변수:

  • 옵션 (해시) (기본값: nil)

    사용자 지정 가능한 옵션 세트

옵션 해시(options):

  • :force (true | false)

    또한 체크아웃한 모든 연결을 닫습니다.

  • :Stay_ready (true | false)

    내부 드라이버 전용입니다. 풀을 닫힌 상태로 표시할지 여부입니다.

반환합니다:

  • (true)

    항상 사실입니다.

이후:

  • 2.9.0



621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
# 파일 ' 빌드/ Ruby-driver-v2.19/lib/mongo/ 서버/connection_pool.rb', 줄 621

def 닫기(옵션 = nil)
  반환 만약 닫힘?

  옵션 ||= {}

  stop_populator

  @ 락.동기화 do
    까지 @available_connections.비어 있나요?
      연결 = @available_connections.
      연결.연결 해제!(이유: :pool_closed)
    end

    만약 옵션[:force]
      까지 @checked_out_connections.비어 있나요?
        연결 = @checked_out_connections.가져(1).first
        연결.연결 해제!(이유: :pool_closed)
        @checked_out_connections.삭제(연결)
      end
    end

    하지 않는 한 옵션 && 옵션[:Stay_ready]
      # 락 을 해제하기 전에 풀을 닫힌 상태로 표시합니다.
      # 연결을 만들거나, 체크인하거나, 체크아웃할 수 없습니다.
      @closed = true
      @ready = 거짓
    end

    @max_connecting_cv.브로드캐스트
    @size_cv.브로드캐스트
  end

  publish_cmap_event(
    모니터링::이벤트::Cmap::풀 마감.신규(@server.주소, self)
  )

  true
end

#close_idle_sockets객체

최대 유휴 시간보다 오래 열려 있던 소켓을 닫습니다.

if the option is set.

이후:

  • 2.5.0



708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
# 파일 ' 빌드/ Ruby-driver-v2.19/lib/mongo/ 서버/connection_pool.rb', 줄 708

def close_idle_sockets
  반환 만약 닫힘?
  반환 하지 않는 한 max_idle_time

  @ 락.동기화 do
    i = 0
    동안 i < @available_connections.분량
      연결 = @available_connections[i]
      만약 last_checkin = 연결.last_checkin
        만약 (시간.지금 - last_checkin) > max_idle_time
          연결.연결 해제!(이유: :idle)
          @available_connections.delete_at(i)
          @popule_semapher.신호
          다음
        end
      end
      i += 1
    end
  end
end

#닫았나요?true | false

풀이 닫혔는지 여부입니다.

반환합니다:

  • (true | false)

    풀이 닫혔는지 여부입니다.

이후:

  • 2.9.0



287
288
289
# 파일 ' 빌드/ Ruby-driver-v2.19/lib/mongo/ 서버/connection_pool.rb', 줄 287

def 닫힘?
  !!@closed
end

#연결 해제!(options = nil) ⇒ 객체

이 메서드는 비공개 API의 일부입니다. 이 방법은 향후 제거되거나 변경될 수 있으므로 가능하면 사용하지 않는 것이 좋습니다.

풀 연결을 해제합니다.

풀이 닫힌 경우 이 메서드는 아무 작업도 수행하지 않지만 clear 에서 PoolClosedError를 발생시키는 것을 제외하고 clear 가 수행하는 모든 작업을 수행합니다.

이후:

  • 2.1.0



514
515
516
517
518
519
520
# 파일 ' 빌드/ Ruby-driver-v2.19/lib/mongo/ 서버/connection_pool.rb', 줄 514

def 연결 해제!(옵션 = nil)
  do_clear(옵션)
구출 오류::PoolClosedError
  # "연결 해제됨" 상태 는 닫힘과 일시 중지 사이입니다.
  # 풀 연결을 끊으려고 할 때 풀을 다음과 같이 허용합니다.
  # 이미 종료되었습니다.
end

#do_check_in(connection) ⇒ 객체

이미 잠금을 획득한 후 체크인을 실행합니다.

매개변수:

이후:

  • 2.0.0, 2.9.0에서 크게 다시 작성되었습니다.



392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
# 파일 ' 빌드/ Ruby-driver-v2.19/lib/mongo/ 서버/connection_pool.rb', 줄 392

def do_check_in(연결)
  # 연결이 중단되면 풀에 다시 확인됩니다.
  # 닫습니다. 이전에 연결을 사용하고 있던 작업은 다음과 같습니다.
  # interrupted는 풀에 다시 체크인하려고 시도합니다.
  # 이미 닫혀 풀에서 제거되었으므로 무시해야 합니다.
  반환 만약 연결.닫힘? && 연결.중단?

  하지 않는 한 연결.connection_pool == self
    올리다 ArgumentError, "이 풀에서 체크아웃되지 않은 연결을 체크인하려고 합니다: #{연결} 풀에서 체크아웃됨 #{연결.연결} (#{자기})"
  end

  하지 않는 한 @checked_out_connections.포함?(연결)
    올리다 ArgumentError, "현재 이 풀에서 체크아웃되지 않은 연결을 체크인하려고 합니다: #{connection} (for #{self})"
  end

  # 참고: 이벤트 핸들러가 발생하면 리소스 에 신호가 전달되지 않습니다.
  # 이는 연결이 해제되기를 기다리는 스레드가 다음과 같은 경우를 의미합니다.
  # 풀이 최대 크기일 때 시간이 초과될 수 있습니다.
  # 이 메서드가 완료된 후 대기를 시작하는 스레드(
  # 예외)는 괜찮습니다.

  @checked_out_connections.삭제(연결)
  @size_cv.신호

  publish_cmap_event(
    모니터링::이벤트::Cmap::connectionCheckedIn.신규(@server.주소, 연결.id, self)
  )

  만약 연결.중단?
    연결.연결 해제!(이유: :stale)
    반환
  end

  만약 연결.오류?
    연결.연결 해제!(이유: :error)
    반환
  end

  만약 닫힘?
    연결.연결 해제!(이유: :pool_closed)
    반환
  end

  만약 연결.닫힘?
    # 연결이 예시 습니다.
    # 네트워크 오류입니다. 여기서는 다른 작업을 수행할 필요가 없습니다.
    @popule_semapher.신호
  elsif 연결.생성 != 생성(service_id: 연결.service_id) && !연결.고정?
    # 연결이 고정됨으로 표시되면 트랜잭션 에서 사용됩니다.
    로드 밸런싱 설정에서 # 또는 일련의 커서 작업.
    # 이 경우 연결이 끊어지면 안 됩니다.
    # 고정 해제되었습니다.
    연결.연결 해제!(이유: :stale)
    @popule_semapher.신호
  other
    연결.record_checkin!
    @available_connections << 연결

    @max_connecting_cv.신호
  end
end

#do_clear(options = nil) ⇒ 객체

이후:

  • 2.0.0, 2.9.0에서 크게 다시 작성되었습니다.



522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
# 파일 ' 빌드/ Ruby-driver-v2.19/lib/mongo/ 서버/connection_pool.rb', 줄 522

def do_clear(옵션 = nil)
  check_invariants

  service_id = 옵션 && 옵션[:service_id]

  @ 락.동기화 do
    # 풀 지우기 이벤트를 내보내기 전에 세대를 충돌시켜야 합니다.
    @generation_manager.범프(service_id: service_id)

    하지 않는 한 옵션 && 옵션[:lazy]
      close_available_connections(service_id)
    end

    만약 옵션 && 옵션[:interrupt_in_use_connections]
      Schedule_for_interruption(@checked_out_connections, service_id)
      Schedule_for_interruption(@pending_connections, service_id)
    end

    만약 @ready
      publish_cmap_event(
        모니터링::이벤트::Cmap::풀 지우기.신규(
          @server.주소,
          service_id: service_id,
          interrupt_in_use_connections: 옵션&.[](:interrupt_in_use_connections)
        )
      )
      # 서버가 알 수 없음으로 표시된 경우에만 연결 풀을 일시 중지합니다.
      # 그렇지 않으면 준비된 풀로 재시도를 허용합니다.
      do_pause 만약 !@server.load_balancer? && @server.알 수 없음?
    end

    # 여기에서 브로드캐스트하여 모든 스레드가 최대
    # 대기 루프를 벗어나기 위해 연결하는 중 오류가 발생했습니다.
    @max_connecting_cv.브로드캐스트
    # 모든 스레드가 풀 크기에서 대기하도록 하려면 여기에서 브로드캐스트합니다.
    # 대기 루프와 오류에서 벗어나기 위해.
    @size_cv.브로드캐스트
  end

  # "백그라운드 스레드 예약" 후 삭제. 이것은 책임이 있습니다.
  # 오래된 스레드를 정리하고 사용 중인 연결을 중단합니다.
  @popule_semapher.신호
  true
보장
  check_invariants
end

#do_pause객체

이 메서드는 비공개 API의 일부입니다. 이 방법은 향후 제거되거나 변경될 수 있으므로 가능하면 사용하지 않는 것이 좋습니다.

잠금을 획득하지 않고 연결 풀을 일시 중지된 상태로 표시합니다.

이후:

  • 2.0.0, 2.9.0에서 크게 다시 작성되었습니다.



470
471
472
473
474
475
476
477
478
# 파일 ' 빌드/ Ruby-driver-v2.19/lib/mongo/ 서버/connection_pool.rb', 줄 470

def do_pause
  만약 Lint.활성화? && !@server.알 수 없음?
    올리다 오류::LintError, " 알려진서버 #{@server.요약}대한 풀을 일시 중지하려고 시도 중"
  end

  반환 만약 !@ready

  @ready = 거짓
end

#검사string

풀에 대해 예쁜 인쇄된 string 검사를 받으세요.

예시:

풀을 검사합니다.

pool.inspect

반환합니다:

  • (string)

    풀 검사.

이후:

  • 2.0.0



668
669
670
671
672
673
674
675
676
677
678
679
# 파일 ' 빌드/ Ruby-driver-v2.19/lib/mongo/ 서버/connection_pool.rb', 줄 668

def 검사
  만약 닫힘?
    "#<Mongo::Server::ConnectionPool:0x#{object_id} min_size=#{min_size} max_size=#{max_size} " +
      "wait_timeout=#{wait_timeout} closed>"
  elsif !준비됐나요?
    "#<Mongo::Server::ConnectionPool:0x#{object_id} min_size=#{min_size} max_size=#{max_size} " +
      "wait_timeout=#{wait_timeout} paused>"
  other
    "#<Mongo::Server::ConnectionPool:0x#{object_id} min_size=#{min_size} max_size=#{max_size} " +
      "wait_timeout=#{wait_timeout} current_size=#{size} available=#{available_count}>"
  end
end

#max_idle_timeFloat | nil

소켓이 풀에 체크인된 이후 유휴 상태로 유지될 수 있는 최대 시간(초)입니다(설정된 경우).

반환합니다:

  • (Float | nil)

    최대 소켓 유휴 시간(초)입니다.

이후:

  • 2.9.0



211
212
213
# 파일 ' 빌드/ Ruby-driver-v2.19/lib/mongo/ 서버/connection_pool.rb', 줄 211

def max_idle_time
  @max_idle_time ||= 옵션[:max_idle_time]
end

#max_sizeInteger

연결 풀 의 최대 크기를 가져옵니다.

반환합니다:

  • (정수)

    연결 풀 의 최대 크기입니다.

이후:

  • 2.9.0



183
184
185
# 파일 ' 빌드/ Ruby-driver-v2.19/lib/mongo/ 서버/connection_pool.rb', 줄 183

def max_size
  @max_size ||= 옵션[:max_size] || [DEFAULT_MAX_SIZE, min_size].최대
end

#min_sizeInteger

연결 풀의 최소 크기를 가져옵니다.

반환합니다:

  • (정수)

    연결 풀 의 최소 크기입니다.

이후:

  • 2.9.0



192
193
194
# 파일 ' 빌드/ Ruby-driver-v2.19/lib/mongo/ 서버/connection_pool.rb', 줄 192

def min_size
  @min_size ||= 옵션[:min_size] || DEFAULT_MIN_SIZE
end

#pause객체

연결 풀을 일시 중지됨으로 표시합니다.

이후:

  • 2.0.0, 2.9.0에서 크게 다시 작성되었습니다.



455
456
457
458
459
460
461
462
463
464
465
# 파일 ' 빌드/ Ruby-driver-v2.19/lib/mongo/ 서버/connection_pool.rb', 줄 455

def 일시 중지
  raise_if_closed!

  check_invariants

  @ 락.동기화 do
    do_pause
  end
보장
  check_invariants
end

#일시 중지되었나요?true | false

연결 풀 닫히지 않았거나 준비되지 않은 경우 일시 중지됩니다.

반환합니다:

  • (true | false)

    연결 풀이 일시 중지되었는지 여부.

다음을 발생시킵니다.

이후:

  • 2.0.0, 2.9.0에서 크게 다시 작성되었습니다.



229
230
231
232
233
234
235
# 파일 ' 빌드/ Ruby-driver-v2.19/lib/mongo/ 서버/connection_pool.rb', 줄 229

def 일시 중지되었나요?
  raise_if_closed!

  @ 락.동기화 do
    !@ready
  end
end

#채우기true | false

이 메서드는 비공개 API의 일부입니다. 이 방법은 향후 제거되거나 변경될 수 있으므로 가능하면 사용하지 않는 것이 좋습니다.

이 메서드는 세 가지 작업을 수행합니다.

  1. 풀의 크기가 min_size보다 작은 경우 풀에 연결을 생성하고 추가합니다. 이 프로세스 중에 소켓 관련 오류가 발생하면 한 번 재시도하고, 두 번째 오류 또는 소켓과 관련이 없는 오류가 발생하면 발생시킵니다.

  2. 연결 풀에서 오래된 연결을 제거합니다.

  3. 중단으로 표시된 연결을 중단합니다.

풀 채우기 백그라운드 스레드에서 사용합니다.

발생했거나 소켓과 관련되지 않은 오류

반환합니다:

  • (true | false)

    더 많은 연결을 생성하기 위해 이 메서드를 다시 호출해야 하는지 여부입니다.

다음을 발생시킵니다.

이후:

  • 2.0.0, 2.9.0에서 크게 다시 작성되었습니다.



766
767
768
769
770
771
772
773
774
775
776
777
778
# 파일 ' 빌드/ Ruby-driver-v2.19/lib/mongo/ 서버/connection_pool.rb', 줄 766

def 채우기
  반환 거짓 만약 닫힘?

  시작
    반환 create_and_add_connection
  구출 오류::SocketError, 오류::SocketTimeoutError => e
    # 연결을 연결하는 동안 오류가 발생했습니다.
    # 이 첫 번째 오류를 무시하고 다시 시도하세요.
    log_warn("포플러가 #{주소}: #{ e.class}: #{ e} 에 대한연결을 연결하지 못했습니다. 다시 시도합니다.")
  end

  반환 create_and_add_connection
end

#준비 됨 ⇒ 객체

연결을 생성하고 반환하도록 풀에 지시합니다.

이후:

  • 2.0.0, 2.9.0에서 크게 다시 작성되었습니다.



570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
# 파일 ' 빌드/ Ruby-driver-v2.19/lib/mongo/ 서버/connection_pool.rb', 줄 570

def 준비됨
  raise_if_closed!

  # TODO: RUBY-3174 에 다시 추가합니다.
  # if Lint.enabled?
  # when @ 서버.connected?
  # 제기 오류::LintError, "#{@ 서버 .summary} 서버 에 대한 풀을 준비하는 중입니다. 연결이 끊어졌습니다."
  # end
  # end

  @ 락.동기화 do
    반환 만약 @ready

    @ready = true
  end

  # CMAP 사양은 다음에 대한 CMAP 이벤트의 직렬화를 요구합니다.
  # 풀. 이를 구현하려면 이벤트 게시를 다음으로 수행해야 합니다.
  # 구독자가 호출되는 대신 동기화되는 대기열
  # 이와 같은 trigger 메서드에서 인라인으로 가져옵니다. 자기공명영상(MRI)에서 다음과 같이 가정합니다.
  # 스레드가 할 일이 없어지면 다른 스레드에게 양보합니다.
  # 이벤트가 실제로 항상 다음 위치에 게시될 가능성이 높습니다.
  #개의 필수 순서입니다. JRuby는 OS 스레드와 진정한 동시성을 제공하며,
  # 이러한 보장을 제공하지 않습니다.
  publish_cmap_event(
    모니터링::이벤트::Cmap::풀 준비.신규(@server.주소, 옵션, self)
  )

  만약 옵션.가져오기(:populator_io, true)
    만약 @populator.실행?
      @popule_semapher.신호
    other
      @populator.실행!
    end
  end
end

#준비되었나요?true | false

풀이 준비되었는지 여부입니다.

반환합니다:

  • (true | false)

    풀이 준비되었는지 여부입니다.

이후:

  • 2.0.0, 2.9.0에서 크게 다시 작성되었습니다.



294
295
296
297
298
# 파일 ' 빌드/ Ruby-driver-v2.19/lib/mongo/ 서버/connection_pool.rb', 줄 294

def 준비됐나요?
  @ 락.동기화 do
    @ready
  end
end

#크기정수

연결 풀의 크기입니다.

사용 가능한 연결과 체크 아웃된 연결이 포함됩니다.

반환합니다:

  • (정수)

    연결 풀의 크기입니다.

이후:

  • 2.9.0



244
245
246
247
248
249
250
# 파일 ' 빌드/ Ruby-driver-v2.19/lib/mongo/ 서버/connection_pool.rb', 줄 244

def size
  raise_if_closed!

  @ 락.동기화 do
    unsynchronized_size
  end
end

#stop_populator객체

이 메서드는 비공개 API의 일부입니다. 이 방법은 향후 제거되거나 변경될 수 있으므로 가능하면 사용하지 않는 것이 좋습니다.

백그라운드 채우기 스레드를 중지하고 생성된 연결 중 아직 연결되지 않은 연결을 모두 정리합니다.

테스트 목적으로 풀을 닫거나 bg 스레드를 종료할 때 사용됩니다. 후자의 경우, 풀을 사용하기 전에 이 메서드를 호출해야 check_out 메서드에 의해 인플로(in-flow)에서 보류 중인 연결의 연결이 생성되지 않았는지 확인할 수 있습니다.

이후:

  • 2.0.0, 2.9.0에서 크게 다시 작성되었습니다.



738
739
740
741
742
743
744
745
746
747
748
# 파일 ' 빌드/ Ruby-driver-v2.19/lib/mongo/ 서버/connection_pool.rb', 줄 738

def stop_populator
  @populator.중지!

  @ 락.동기화 do
    # 채우기가 실행되는 동안 stop_populator가 호출되면 다음이 발생할 수 있습니다.
    # 연결 대기 중인 연결, 아직 연결되지 않은 연결
    # available_connections로 이동되었거나 연결이 available_connections로 이동되었습니다.
    # 하지만 보류 중인_연결에서 삭제되지 않았습니다. 이러한 항목을 정리해야 합니다.
    clear_pending_connections
  end
end

#요약객체

참고:

이 방법은 실험적이며 변경될 수 있습니다.

이후:

  • 2.11.0



304
305
306
307
308
309
310
311
312
313
314
315
316
# 파일 ' 빌드/ Ruby-driver-v2.19/lib/mongo/ 서버/connection_pool.rb', 줄 304

def 요약
  @ 락.동기화 do
    상태 = 만약 닫힘?
      'closed'
    elsif !@ready
      'paused'
    other
      '준비'
    end
    "#<ConnectionPool size=#{unsynchronized_size} (#{min_size}-#{max_size}) " +
      "used=#{@checked_out_connections.length}available =#{@available_connections.length} 보류 중=#{@pending_connections.length} #{state}>"
  end
end

#available_connections정수

이 메서드는 비공개 API의 일부입니다. 이 방법은 향후 제거되거나 변경될 수 있으므로 가능하면 사용하지 않는 것이 좋습니다.

풀에서 사용할 수 없는 연결 수를 반환합니다. max_pool_size에 도달했는지 여부를 계산하는 데 사용됩니다.

반환합니다:

  • (정수)

    풀에서 사용할 수 없는 연결의 수입니다. max_pool_size에 도달했는지 여부를 계산하는 데 사용됩니다.

이후:

  • 2.0.0, 2.9.0에서 크게 다시 작성되었습니다.



265
266
267
# 파일 ' 빌드/ Ruby-driver-v2.19/lib/mongo/ 서버/connection_pool.rb', 줄 265

def available_connections
  @checked_out_connections.분량 + @pending_connections.분량 + @connection_requests
end

#wait_timeoutFloat

연결을 사용할 수 있을 때까지 기다리는 시간(초)입니다.

반환합니다:

  • (Float)

    대기열 대기 시간 초과입니다.

이후:

  • 2.9.0



201
202
203
# 파일 ' 빌드/ Ruby-driver-v2.19/lib/mongo/ 서버/connection_pool.rb', 줄 201

def wait_timeout
  @wait_timeout ||= 옵션[:wait_timeout] || DEFAULT_WAIT_TIMEOUT
end

#with_connection(connection_global_id: nil) ⇒ 객체

체크인/체크아웃 로직을 처리하는 동안 차단을 연결에 양보합니다.

예시:

연결을 사용하여 실행합니다.

pool.with_connection do |connection|
  connection.read
end

반환합니다:

  • (객체)

    차단의 결과입니다.

이후:

  • 2.0.0



691
692
693
694
695
696
697
698
699
700
701
702
# 파일 ' 빌드/ Ruby-driver-v2.19/lib/mongo/ 서버/connection_pool.rb', 줄 691

def with_connection(connection_global_id: nil)
  raise_if_closed!

  연결 = check_out(connection_global_id: connection_global_id)
  yield(연결)
구출 오류::SocketError, 오류::SocketTimeoutError, 오류::ConnectionPerished => e
  may_raise_pool_cleared!(연결, e)
보장
  만약 연결
    check_in(연결)
  end
end