setDefaultRWConcern
Definição
setDefaultRWConcern
O comando administrativo
setDefaultRWConcern
define a configuração padrão global de preocupação de leitura ou gravação de um conjunto de réplicas ou cluster fragmentado.setDefaultRWConcern
deve ser executado no banco de dadosadmin
.Para conjuntos de réplicas, emita o comando
setDefaultRWConcern
no primáriomongod
.Para clusters fragmentados, emita o
setDefaultRWConcern
em ummongos
.
Compatibilidade
Esse comando está disponível em implantações hospedadas nos seguintes ambientes:
MongoDB Atlas: o serviço totalmente gerenciado para implantações do MongoDB na nuvem
Observação
Este comando é aceito em todos os clusters do MongoDB Atlas. Para obter informações sobre o suporte do Atlas a todos os comandos, consulte Comandos não suportados.
MongoDB Enterprise: a versão autogerenciada e baseada em assinatura do MongoDB
MongoDB Community: uma versão com código disponível, de uso gratuito e autogerenciada do MongoDB
Sintaxe
O comando tem a seguinte sintaxe:
db.adminCommand( { setDefaultRWConcern : 1, defaultReadConcern: { <read concern> }, defaultWriteConcern: { <write concern> }, writeConcern: { <write concern> }, comment: <any> } )
Campos de comando
O comando utiliza os seguintes campos:
Campo | Tipo | Descrição |
---|---|---|
int | Defina como | |
object | Documento que contém a configuração global de read concern. Especifique um objeto de read concern válido.
Omita este documento para deixar inalterado o atual write concern global. Se omitido, | |
object | Documento que contém a configuração de write concern padrão global.
Omita este documento para deixar a preocupação de gravação global atual inalterada. Se omitido, | |
objeto | Opcional. Documento que especifica a preocupação de gravação a ser usada pelo próprio comando Se omitido, | |
comment | any | Opcional. Um comentário fornecido pelo usuário para anexar a este comando. Depois de definido, esse comentário aparece junto com os registros desse comando nos seguintes locais:
Um comentário pode ser qualquer tipo BSON válido (string, inteiro, objeto, array etc). |
setDefaultRWConcern
retorna um objeto que contém a preocupação de leitura e gravação padrão global atualmente configurada. Consulte getDefaultRWConcern
para obter uma documentação mais completa sobre os campos retornados.
Comportamento
Observação
Exige featureCompatibilityVersion 4.4+
Cada mongod
no conjunto de réplicas ou cluster fragmentado deve ter featureCompatibilityVersion configurado para pelo menos 4.4
para usar setDefaultRWConcern
.
A partir do MongoDB 5.0, uma vez que o Cluster Wide Write Concern (CWWC) é definido por meio do comando setDefaultRWConcern
, o problema de gravação não pode ser desconfigurado.
O MongoDB só aplica o read ou write concern global padrão a operações que não especificam explicitamente um read ou write concern.
Se o MongoDB aplicar o read ou write concern padrão global a uma operação, essa operação se comportará como se esse read ou write concern fosse explicitamente especificado pelo cliente emissor.
Conjuntos de réplicas
Problema setDefaultRWConcern
em relação ao primário do conjunto de réplicas. O primário replica as novas configurações padrão globais para os nós restantes do conjunto de réplicas. Os secundários que ainda não replicaram as configurações padrão globais atualizadas continuam usando sua cópia "obsoleta" local dos padrões.
Emita o comando setDefaultRWConcern
com uma writeConcern de w : "majority"
para garantir que o comando retorne somente após as alterações propagarem para a maioria dos membros do conjunto de réplicas.
Clusters fragmentados
Emita o setDefaultRWConcern
contra um mongos
no cluster. O mongos
mantém as configurações atualizadas no conjunto de réplicas do servidor de configuração (CSRS). Cada mongos
emite periodicamente um getDefaultRWConcern
no CSRS para atualizar sua cópia local das configurações globais. Um mongos
usa sua cópia local "obsoleta" dos padrões globais durante o período de tempo entre as atualizações.
Emita o comando setDefaultRWConcern
com um writeConcern de w : "majority"
para garantir que o comando só retorne depois que as alterações tiverem se propagado para a maioria dos nós do CSRS.
Quando um aplicativo emite uma operação no mongos
sem especificar explicitamente uma configuração de read ou write concern, o mongos
aplica a configuração padrão global correspondente.
As configurações padrão globais não se propagam para os fragmentos individuais. Não é possível executar setDefaultRWConcern
em um fragmento.
Importante
setDefaultRWConcern
exige featureCompatibilityVersion 4.4+
. Se você fizer o downgrade do featureCompatibilityVersion da sua implantação de 4.4
para 4.2
, todos os padrões de preocupação de leitura e gravação em todo o cluster serão perdidos, mas as instâncias mongos
poderão continuar aplicando os padrões por até 30 segundos.
Os comandos administrativos de fragmentação substituem as configurações de write concern
O compartilhamento de comandos administrativos que executam operações de gravação no servidor de configuração, como os comandos enableSharding
ou addShard
, tem comportamento específico com configurações de write concern padrão global:
Os comandos usam o
"majority"
independentemente do write concern padrão global configurado.Os comandos usam um wtimeout mínimo de
60000
. Os comandos só usam o write concern padrão globalwtimeout
se ele for maior que60000
.
Controle de acesso
Para conjuntos de réplicas ou clusters fragmentados que forçam autenticação em sistemas autogerenciados, setDefaultRWConcern
exige que o usuário autenticado tenha a ação de privilégio setDefaultRWConcern
.
A função integrada clusterManager
fornece os privilégios exigidos para executar o setDefaultRWConcern
.
Exemplo
Definir write concern padrão global
A seguinte operação define o write concern global para o seguinte:
db.adminCommand({ "setDefaultRWConcern" : 1, "defaultWriteConcern" : { "w" : 2 } })
A operação retorna um documento semelhante ao seguinte:
{ "defaultWriteConcern" : { "w" : 2 }, "updateOpTime" : Timestamp(1586290895, 1), "updateWallClockTime" : ISODate("2020-04-07T20:21:41.849Z"), "localUpdateWallClockTime" : ISODate("2020-04-07T20:21:41.862Z"), "ok" : 1, "$clusterTime" : { ... } "operationTime" : Timestamp(1586290925, 1) }
Definir read concern padrão global
A operação a seguir define o read concern global como "majority"
:
db.adminCommand({ "setDefaultRWConcern" : 1, "defaultReadConcern" : { "level" : "majority" } })
A operação retorna um documento semelhante ao seguinte:
{ "defaultReadConcern" : { "level" : "majority" }, "updateOpTime" : Timestamp(1586290895, 1), "updateWallClockTime" : ISODate("2020-04-07T20:21:41.849Z"), "localUpdateWallClockTime" : ISODate("2020-04-07T20:21:41.862Z"), "ok" : 1, "$clusterTime" : { ... } "operationTime" : Timestamp(1586290925, 1) }
Definir read and write concern padrão global
A operação a seguir define o read ou write concern padrão global para o seguinte:
w: 2
Escreva preocupaçãolevel: "majority"
read concern.
db.adminCommand({ "setDefaultRWConcern" : 1, "defaultWriteConcern" : { "w" : 2 }, "defaultReadConcern" : { "level" : "majority" } })
A operação retorna um documento semelhante ao seguinte:
"defaultWriteConcern" : { "w" : 2 }, "defaultReadConcern" : { "level" : "majority" }
Desconfigurar read e write concern padrão global
Você pode:
Desconfigure o read concern padrão global.
Desconfigure apenas o write concern padrão global se você ainda não o tiver definido.
Por exemplo, suponha que o read concern padrão global esteja configurado para level: "majority"
. Para desconfigurar o read concern padrão global, use um documento vazio {}
:
db.adminCommand( { "setDefaultRWConcern" : 1, "defaultReadConcern" : {} } )
A operação retorna um documento que indica que a operação foi bem-sucedida:
{ defaultReadConcern: { level: 'local' }, defaultWriteConcern: { w: 2, wtimeout: 0 }, updateOpTime: Timestamp({ t: 1656696934, i: 1 }), updateWallClockTime: ISODate("2022-07-01T17:35:40.578Z"), defaultWriteConcernSource: 'global', defaultReadConcernSource: 'implicit', localUpdateWallClockTime: ISODate("2022-07-01T17:35:40.578Z"), ok: 1, '$clusterTime': { ... }, operationTime: Timestamp({ t: 1656632593, i: 1 }) }
Você só pode desconfigurar a definição do write concern padrão global se ainda não o tiver definido.
Para desconfigurar o write concern padrão global, use um documento vazio {}
:
db.adminCommand( { "setDefaultRWConcern" : 1, "defaultWriteConcern" : {} } )
Se o write concern padrão global:
For desconfigurado, a operação foi bem-sucedida.
Já estiver configurado, a operação retorna o seguinte erro.
MongoServerError: The global default write concern cannot be unset once it is set.