클래스: Mongo::ServerSelector::Base

상속:
객체
  • 객체
모두 표시
다음에 정의됨:
build/ruby-driver-v2.19/lib/mongo/server_selector/base.rb

개요

이후:

  • 2.0.0

직접 알려진 하위 클래스

Nearest, Primary, PrimaryPreferred, Secondary, SecondaryPreferred

인스턴스 속성 요약 접기

인스턴스 메서드 요약 접기

생성자 세부 정보

#initialize(options = nil) ⇒ Base

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

서버 선택기를 초기화합니다.

예시:

선택기를 초기화합니다.

Mongo::ServerSelector::Secondary.new(:tag_sets => [{'dc' => 'nyc'}])

옵션 없이 기본 설정을 초기화합니다.

Mongo::ServerSelector::Secondary.new

매개변수:

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

    서버 기본 설정 옵션입니다.

옵션 해시(options):

  • :local_threshold (정수)

    가장 가까운 선택 항목에 대한 로컬 임계값 경계(초)입니다.

  • max_staleness (정수)

    세컨더리가 겪으면서도 여전히 읽기 대상이 될 수 있는 최대 복제 지연 시간(초)입니다. -1 값은 최대 비활성 상태를 갖지 않는 nil과 동일하게 처리됩니다.

  • 헤지 (해시 | nil)

    서버 에서 헤지된 읽기(hedged read)를 활성화 할지 여부를 지정하는 해시입니다. 헤지된 읽기(hedged read)는 기본값 활성화되어 있지 않습니다. 이 옵션을 지정할 때는 { enabled: true } 형식이어야 하며, 여기서 :enabled 키의 값은 부울 값입니다.

다음을 발생시킵니다.

이후:

  • 2.0.0



49
50
51
52
53
54
55
56
57
58
59
60
# 파일 ' 빌드/ Ruby-driver-v2.19/lib/mongo/server_selector/base.rb', 줄 49

def 초기화(옵션 = nil)
  옵션 = 옵션 ? 옵션.dup : {}
  만약 옵션[:max_staleness] == -1
    옵션.삭제(:max_staleness)
  end
  @options = 옵션
  @tag_sets = 옵션[:tag_sets] || []
  @max_staleness = 옵션[:max_staleness]
  @hedge = 옵션[:hedged]

  유효성을 검사합니다!
end

인스턴스 속성 세부 정보

#헤지해시 | nil (읽기 전용)

헤지된 읽기(hedged read)를 활성화할지 여부를 지정하는 문서를 반환합니다.

반환합니다:

  • (Hash | nil)

    헤지된 읽기(hedged read)를 활성화 할지 여부를 지정하는 문서 입니다.

이후:

  • 2.0.0



76
77
78
# 파일 ' 빌드/ Ruby-driver-v2.19/lib/mongo/server_selector/base.rb', 줄 76

def 헤지
  @hedge
end

#max_staleness정수 (읽기 전용)

세컨더리 가 겪을 수 있지만 여전히 읽기에 적합할 수 있는 최대 복제 지연 (초)을 반환합니다.

반환합니다:

  • (정수)

    max_staleness 세컨더리가 겪을 수 있고 여전히 읽기에 적합할 수 있는 최대 복제 지연 시간(초)입니다.

이후:

  • 2.4.0



72
73
74
# 파일 ' 빌드/ Ruby-driver-v2.19/lib/mongo/server_selector/base.rb', 줄 72

def max_staleness
  @max_staleness
end

#options해시 (읽기 전용)

반환값 options options.

반환합니다:

  • (해시)

    options 옵션입니다.

이후:

  • 2.0.0



63
64
65
# 파일 ' 빌드/ Ruby-driver-v2.19/lib/mongo/server_selector/base.rb', 줄 63

def 옵션
  @options
end

#tag_sets배열 (읽기 전용)

반환값 tag_sets 서버를 선택하는 데 사용되는 태그 세트입니다.

반환합니다:

  • (배열)

    tag_sets 서버를 선택하는 데 사용되는 태그를 지정하다 세트입니다.

이후:

  • 2.0.0



66
67
68
# 파일 ' 빌드/ Ruby-driver-v2.19/lib/mongo/server_selector/base.rb', 줄 66

def tag_sets
  @tag_sets
end

인스턴스 메서드 세부 정보

#==(기타) ⇒ true, false

두 서버 선택기가 동일한지 확인합니다.

예시:

서버 선택기가 동일한지 확인합니다.

preference == other

매개변수:

  • 기타 (객체)

    기타 기본 설정입니다.

반환합니다:

  • (true, false)

    객체가 동일한지 여부입니다.

이후:

  • 2.0.0



136
137
138
139
# 파일 ' 빌드/ Ruby-driver-v2.19/lib/mongo/server_selector/base.rb', 줄 136

def ==(기타)
  이름 == 기타.이름 && 헤지 == 기타.헤지 &&
    max_staleness == 기타.max_staleness && tag_sets == 기타.tag_sets
end

#후보(클러스터) ⇒ 배열<MongoDB 서버>

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

클러스터에서 허용되는 유형의 서버를 반환합니다.

부실 유효성 검사, 부실 필터링 또는 지연 시간 필터링을 수행하지 않습니다.

매개변수:

반환합니다:

이후:

  • 2.0.0



379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
# 파일 ' 빌드/ Ruby-driver-v2.19/lib/mongo/server_selector/base.rb', 줄 379

def 후보자(cluster)
  서버 = cluster.서버
  서버. do |서버|
    validate_max_staleness_support!(서버)
  end
  만약 cluster.싱글?
    서버
  elsif cluster.?
    서버
  elsif cluster.replica_set?
    select_in_replica_set(서버)
  other
    # 알 수 없는 클러스터 - 서버 없음
    []
  end
end

#검사string

서버 선택기를 검사합니다.

예시:

서버 선택기를 검사합니다.

selector.inspect

반환합니다:

  • (string)

    검사.

이후:

  • 2.2.0



122
123
124
# 파일 ' 빌드/ Ruby-driver-v2.19/lib/mongo/server_selector/base.rb', 줄 122

def 검사
  "#<#{self.class.name}:0x#{object_id} tag_sets=#{tag_sets.검사} max_staleness=#{max_staleness.검사} 헤지=#{헤지}>"
end

#local_thresholdFloat

더 이상 사용되지 않습니다.

이제 서버 를 선택하면 클러스터 옵션에서 이 설정을 가져옵니다. 버전 3.0 에서 제거될 예정입니다.

가장 가까운 선택 항목에 대한 로컬 임계값 경계를 초 단위로 가져옵니다.

예시:

로컬 임계값을 가져옵니다.

selector.local_threshold

반환합니다:

  • (Float)

    로컬 임계값입니다.

이후:

  • 2.0.0



105
106
107
# 파일 ' 빌드/ Ruby-driver-v2.19/lib/mongo/server_selector/base.rb', 줄 105

def local_threshold
  @local_threshold ||= (옵션[:local_threshold] || ServerSelector::LOCAL_THRESHOLD)
end

#local_threshold_with_cluster(클러스터) ⇒ 객체

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

이후:

  • 2.0.0



110
111
112
# 파일 ' 빌드/ Ruby-driver-v2.19/lib/mongo/server_selector/base.rb', 줄 110

def local_threshold_with_cluster(cluster)
  옵션[:local_threshold] || cluster.옵션[:local_threshold] || LOCAL_THRESHOLD
end

#select_server(cluster, ping = nil, session = nil, write_aggregation: false) ⇒ Mongo::Server

지정된 세션에 대한 mongos 고정을 고려하여 지정된 클러스터 에서 서버 를 선택합니다.

세션이 제공되고 고정된 서버 가 있는 경우 이 서버 가 선택 대상으로 고려되는 유일한 서버 입니다. 서버 가 mongos 유형이면 즉시 반환됩니다. 그렇지 않으면 이 서버 에 대한 모니터링 검사가 시작되어 상태를 업데이트 하고, 서버 선택 제한 시간 내에 서버 가 mongos 가 되면 반환됩니다.

세션이 지정되지 않았거나 세션에 고정된 서버 가 없으면 이 서버 선택기 객체 의 기본 설정과 일치하는 지정된 클러스터 의 모든 서버 중에서 일반 서버 선택 프로세스 가 수행됩니다. 서버 선택 제한 시간까지 적절한 서버 를 찾을 때까지 클러스터 의 서버에 대한 모니터링 검사가 시작됩니다.

서버 선택 제한 시간 내에 적절한 서버를 찾지 못하면 이 메서드는 Error::NoServerAvailable을 발생시킵니다.

매개변수:

  • cluster (Mongo::Cluster)

    적격 서버 를 선택할 클러스터 입니다.

  • ping (true, false) (기본값: nil)

    선택하기 전에 서버를 핑할지 여부입니다. 더 이상 사용되지 않으며 무시됩니다.

  • Session (Session | nil) (기본값: nil)

    mongos 고정을 위해 고려해야 할 선택적 세션입니다. 버전 2.10.0 에 추가되었습니다.

  • write_aggregation (true | false) (기본값은 false)

    세컨더리에서 애그리게이션 쓰기(예: $merge/$out 사용)를 지원하는 서버가 필요한지 여부.

반환합니다:

  • (Mongo::Server)

    서버 설정과 일치하는 서버 입니다.

다음을 발생시킵니다.

  • (Error::NoServerAvailable)

    서버 선택 시간 초과에서 지정된 기본 설정/고정 요구 사항과 일치하는 서버를 찾을 수 없습니다.

  • (Error::LintError)

    예기치 않은 조건이 감지되어 린트 모드 가 활성화되었습니다.

이후:

  • 2.0.0



177
178
179
180
181
182
183
# 파일 ' 빌드/ Ruby-driver-v2.19/lib/mongo/server_selector/base.rb', 줄 177

def select_server(cluster, ping = nil, Session = nil, write_aggregation: 거짓)
  select_server_impl(cluster, ping, Session, write_aggregation). do |서버|
    만약 Lint.활성화? && !서버..준비됐나요?
      올리다 오류::LintError, '서버 선택기가 준비되지 않은 풀이 있는 서버 를 반환합니다.'
    end
  end
end

#server_selection_timeoutFloat

더 이상 사용되지 않습니다.

이제 서버 를 선택하면 클러스터 옵션에서 이 설정을 가져옵니다. 버전 3.0 에서 제거될 예정입니다.

서버 선택에 대한 제한 시간을 가져옵니다.

예시:

서버 선택 제한 시간(초)을 가져옵니다.

selector.server_selection_timeout

반환합니다:

  • (Float)

    시간 초과입니다.

이후:

  • 2.0.0



89
90
91
92
# 파일 ' 빌드/ Ruby-driver-v2.19/lib/mongo/server_selector/base.rb', 줄 89

def server_selection_timeout
  @server_selection_timeout ||=
    (옵션[:server_selection_timeout] || ServerSelector::SERVER_SELECTION_TIMEOUT)
end

#적합한 _서버 (클러스터) ⇒ Array<Server>

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

클러스터에서 서버 선택기를 충족하는 서버를 반환합니다.

매개변수:

반환합니다:

이후:

  • 2.0.0



403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
# 파일 ' 빌드/ Ruby-driver-v2.19/lib/mongo/server_selector/base.rb', 줄 403

def 적합 서버(cluster)
  만약 cluster.싱글?
    후보자(cluster)
  elsif cluster.?
    local_threshold = local_threshold_with_cluster(cluster)
    서버 = 후보자(cluster)
    near_servers(서버, local_threshold)
  elsif cluster.replica_set?
    validate_max_staleness_value!(cluster)
    후보자(cluster)
  other
    # 알 수 없는 클러스터 - 서버 없음
    []
  end
end

#try_select_server(cluster, write_aggregation: false) ⇒ MongoDB Server | nil

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

적합한 서버를 찾으려고 시도하고, 사용 가능한 경우 서버를 반환하고, 적합한 서버가 없는 경우 nil을 반환합니다.

매개변수:

  • cluster (Mongo::Cluster)

    적격 서버 를 선택할 클러스터 입니다.

  • write_aggregation (true | false) (기본값은 false)

    세컨더리에서 애그리게이션 쓰기(예: $merge/$out 사용)를 지원하는 서버가 필요한지 여부.

반환합니다:

이후:

  • 2.0.0



328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
# 파일 ' 빌드/ Ruby-driver-v2.19/lib/mongo/server_selector/base.rb', 줄 328

def try_select_server(cluster, write_aggregation: 거짓)
  서버 = 만약 write_aggregation && cluster.replica_set?
    # 1. 클러스터 의 모든 서버가 세컨더리 쓰기를 지원 하는지 확인합니다.
    is_write_supported = cluster.서버.reduce(true) do |res, 서버|
      res && 서버.기능.merge_out_on_secondary_enabled?
    end

    만약 is_write_supported
      # 2. 모든 서버가 세컨더리 쓰기를 지원 경우 읽기 설정 (read preference) 을 준수합니다.
      적합 서버(cluster)
    other
      # 3. 그렇지 않으면 복제본 세트에 대해 프라이머리로 대체됩니다.
      [cluster.서버.감지(&: 프라이머리?)]
    end
  other
    적합 서버(cluster)
  end

  # 이 서버 목록은 특정 방식으로 정렬할 수 있습니다.
  # 셀렉터로 지정(예: 세컨더리 기본 설정의 경우 첫 번째
  # 서버는 세컨더리, 두 번째 서버는 프라이머리일 수 있음)
  # 그리고 여기서 첫 번째 서버 를 가져와야 합니다.
  서버 = 서버.first

  만약 서버
    만약 Lint.활성화?
      # 여기서는 서버 가 평균 RTT가 nil일 수 있습니다.
      # ATT는 업데이트될 수 있는 설명에서 제공되기 때문입니다.
      # 서버 선택이 실행되는 동안 백그라운드 스레드에 의해 실행됩니다.
      # 현재 린트 모드 는 공개 기능 이 아닙니다.
      # 변경 사항 (https://jira.mongodb.org/browse/RUBY-1576) the
      # ATT가 nil이 아니려면 요구 사항을 제거해야 합니다.
      만약 서버.평균 왕복 시간.nil?
        올리다 오류::LintError, "MongoDB Server #{서버.주소} 의 평균 rtt는 nil"
      end
    end
  end

  서버
end