Сегодня один из пользователей нашего сегментированного кластера MongoDB 3.0.12 (ошибочно) выпустил сборку индекса переднего плана в своей собственной базе данных (pride_archive_ms), после того, как операция завершилась на основном члене каждого набора реплик (сегменте), он был реплицирован на вторичные.
Я ожидал, что база данных, в которой все еще выполняется построение индекса, будет заблокирована для чтения и записи, но на самом деле все чтение / запись баз данных блокируются при использовании вторичного или вторичного предпочтения чтения. Любой открытый сеанс просто добавляется. Это ожидаемое поведение? Документы сообщают, что:
Любая операция, которая требует блокировки чтения или записи во всех базах данных (например, listDatabases), будет ждать завершения построения индекса переднего плана.
Но в нашем случае это простая функция find () для баз данных, отличных от той, на которой строится индекс.
Может ли кто-нибудь пролить свет?
Спасибо
Томас Шуберт дал ответ на этот вопрос в:
https://jira.mongodb.org/browse/SERVER-25168
Тем не менее, мне интересно, почему маршрутизатор не обнаруживает вторичные серверы с блокировкой чтения и не обслуживает запросы от первичного, когда secondaryPreferred
указано предпочтение чтения.