[SERVER-76040] Make mirrored requests to include tenant information in multitenancy environment Created: 12/Apr/23  Updated: 29/Oct/23  Resolved: 27/Jun/23

Status: Closed
Project: Core Server
Component/s: None
Affects Version/s: None
Fix Version/s: 7.1.0-rc0

Type: Task Priority: Major - P3
Reporter: Sophia Tan Assignee: Jason Chan
Resolution: Fixed Votes: 0
Labels: ntdi_drop_off_tenant, ntdi_must_have
Remaining Estimate: Not Specified
Time Spent: Not Specified
Original Estimate: Not Specified

Issue Links:
Depends
is depended on by SERVER-74907 Use tassert in NamespaceStringUtil fu... Closed
Backwards Compatibility: Fully Compatible
Sprint: Service Arch 2023-06-26, Service Arch 2023-07-10
Participants:
Story Points: 2

 Description   

If a completed command request on primary is mirrorable, a mirrored request will be send to secondary.
In mutitenant environment, we should attach dollar tenant to the mirrored request, otherwise, it cannot be handled correctly by secondary nodes. 

We also need to create a new jstest to verify the modification in multitenancy environment. Today, there are some mirrored read no passthrough test cases (eg, noPassthrough/mirror_reads.js). But, no core jstest cases for mirrored read. That's the reason the NTDI jscore passthrough test suit cannot cover it. 



 Comments   
Comment by Githook User [ 27/Jun/23 ]

Author:

{'name': 'Jason Chan', 'email': 'jason.chan@mongodb.com', 'username': 'jasonjhchan'}

Message: SERVER-76040 Add $tenant to mirrored reads in clusters with multi-tenant
Branch: master
https://github.com/mongodb/mongo/commit/deef39f00755047f22faf410c9d051bacec0cdf4

Comment by Janna Golden [ 07/Jun/23 ]

shameek.ray@mongodb.com, mirrored reads are actually currently allowed in Serverless - this project is changing the way the server handles requests for Serverless customers, and it's important the project maintains the same functionality as we have today.

Just to clarify, there isn't actually a deadline for this ticket in the next two weeks, the intention of our ask was that if Service Arch had time to complete this in the 2 sprints (sometime between now and ~July 7) it would help us out. We're aiming to close out this project ASAP as it blocks Cloud from being able to start testing change streams in a Serverless env, and so we were hoping to get help from a few server teams on any remaining work that that team likely knows better/can complete faster than our team could alone, if the other team has bandwidth. I'd expect this ticket to be relatively quick for a Service Arch engineer, but if you all don't have the bandwidth, we'll pull it back on our team.

Comment by Shameek Ray [ 06/Jun/23 ]

If Mirrored Reads isn't critical for the Serverless product, I'd like to ask if we can disable mirrored reads for now, if the deadline is for the next two weeks.

Comment by Shameek Ray [ 06/Jun/23 ]

What's our perspective on the value this would unlock for Serverless customers? How does this rank up to the Serverless team's priorities? cc chris.shum@mongodb.com 

Comment by Sophia Tan [ 01/Jun/23 ]

To have the mirrored requests contain the tenant information, we need to append "$tenant" to the payload of the request (code is here). The tenant id can be grabbed from invocation object with function `CommandInvocation::ns()`. 

Comment by Sophia Tan [ 12/Apr/23 ]

The mirrored requests get failed on secondary silently. It's an `massert` error `6972100` and only prints assert log without being noticed by evergreen. Once we use `tassert` in SERVER-74907, the assert will be uncovered. 

Generated at Thu Feb 08 06:31:41 UTC 2024 using Jira 9.7.1#970001-sha1:2222b88b221c4928ef0de3161136cc90c8356a66.