Configuring Write Concerns

1. Setting Write Concern

FormEffect
{w, j, wtimeout}Tuple
Per opPass in op options
Connection-stringw=majority&j=true&wtimeoutMS=5000

2. Using Acknowledged Writes

wEffect
1 (default)Primary ack
ErrorsReturned to client

3. Using Majority Writes

AspectDetail
w: "majority"Majority voting members must ack
DurabilityWill survive failover
Default (5.0+)w: majority for client writes

4. Using Journaled Writes

OptionEffect
j: trueWait for journal commit (on-disk)
Default (4.4+)j: true with w: "majority"

5. Setting Write Timeout

OptionEffect
wtimeout (ms)Max wait for replication ack; 0 = infinite
BehaviorWrite may still apply on primary even if timeout

6. Using Unacknowledged Writes

SettingEffect
w: 0Fire-and-forget; no errors returned
RiskSilent data loss

7. Using Custom Write Concern

AspectDetail
getLastErrorModesDefine in rs.conf().settings
Forme.g. {multiDC: {region: 2}}
UseCross-region durability

8. Understanding Write Concern Performance

wLatency
0Lowest
1Primary RTT
majorityPrimary + slowest of majority
+j: trueAdd fsync wait (~few ms)

9. Configuring Default Write Concern

MethodDetail
setDefaultRWConcernCluster-wide default
getDefaultRWConcernInspect current default
db.adminCommand({ setDefaultRWConcern: 1, defaultWriteConcern: { w: "majority", j: true } });

10. Handling Write Concern Errors

TypeDetail
writeConcernErrorWrite succeeded on primary but replication failed/timed out
writeErrorOperation itself failed
MitigationIdempotent design + retry