Skip to content

Commit aa82b19

Browse files
committed
add setfle2parameter.py workaround
To enable the featureFlagFLE2ProtocolVersion2 until it is enabled by default in SERVER-69563
1 parent e24a7a2 commit aa82b19

File tree

2 files changed

+202
-0
lines changed

2 files changed

+202
-0
lines changed

.evergreen/scripts/integration-tests.sh

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -92,6 +92,24 @@ find orchestration_configs -name \*.json | xargs perl -p -i -e "s|/tmp/orchestra
9292
export ORCHESTRATION_FILE="orchestration_configs/${TOPOLOGY}s/${ORCHESTRATION_FILE}.json"
9393
export ORCHESTRATION_URL="http://localhost:8889/v1/${TOPOLOGY}s"
9494

95+
if [ "$CLIENT_SIDE_ENCRYPTION" = "on" -a "$MONGODB_VERSION" = "latest" ]; then
96+
# This is a temporary workaround until featureFlagFLE2ProtocolVersion2 is enabled by default in SERVER-69563. Once latest server builds have SERVER-69563, this if block may be removed.
97+
# DRIVERS-2590 tracks removal of this workaround.
98+
echo "SERVER-69563: rewrite orchestration config to add setParameter featureFlagFLE2ProtocolVersion2=1 ... begin"
99+
# Only attempt to enable the feature flag if the server is 7.0.0. The 'latest' builds may not be updated to 7.0 yet.
100+
ACTUAL_MONGODB_VERSION=$(./mongodb/bin/mongod --version | head -1 | awk '{print $3}')
101+
case $ACTUAL_MONGODB_VERSION in
102+
v7*)
103+
python $DIR/setfle2parameter.py $ORCHESTRATION_FILE > $ORCHESTRATION_FILE.modified
104+
mv $ORCHESTRATION_FILE.modified $ORCHESTRATION_FILE
105+
;;
106+
*)
107+
echo "mongod version $ACTUAL_MONGODB_VERSION is not v7. Not enabling featureFlagFLE2ProtocolVersion2"
108+
;;
109+
esac
110+
echo "SERVER-69563: rewrite orchestration config to add setParameter featureFlagFLE2ProtocolVersion2=1 ... end"
111+
fi
112+
95113
export TMPDIR=$MONGO_ORCHESTRATION_HOME/db
96114
echo From shell `date` > $MONGO_ORCHESTRATION_HOME/server.log
97115

Lines changed: 184 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,184 @@
1+
#!/usr/bin/env python3
2+
"""
3+
setfle2parameter.py modifies and prints an orchestration config file to add the `--setParameter featureFlagFLE2ProtocolVersion2=1` option to mongod and mongos.
4+
Usage: setfle2parameter.py <orchestration config file path>
5+
This file is a temporary workaround until featureFlagFLE2ProtocolVersion2 is enabled by default in SERVER-69563. Once latest server builds have SERVER-69563, this file may be removed.
6+
DRIVERS-2590 tracks removal of this file.
7+
"""
8+
9+
import json
10+
import sys
11+
import unittest
12+
import os
13+
14+
15+
def do_rewrite(config):
16+
did_rewrite = False
17+
18+
def rewrite_server(server):
19+
if "procParams" in server:
20+
if "setParameter" in server["procParams"]:
21+
server["procParams"]["setParameter"]["featureFlagFLE2ProtocolVersion2"] = "1"
22+
else:
23+
server["procParams"]["setParameter"] = {
24+
"featureFlagFLE2ProtocolVersion2": "1"
25+
}
26+
return True
27+
return False
28+
29+
# Rewrite for a server.
30+
if rewrite_server(config):
31+
did_rewrite = True
32+
# Rewrite for each member in a replica set.
33+
if "members" in config:
34+
for server in config["members"]:
35+
if rewrite_server(server):
36+
did_rewrite = True
37+
# Rewrite each shard.
38+
if "shards" in config:
39+
for shard in config["shards"]:
40+
if "shardParams" in shard:
41+
if "members" in shard["shardParams"]:
42+
for server in shard["shardParams"]["members"]:
43+
if rewrite_server (server):
44+
did_rewrite = True
45+
# Rewrite each router.
46+
if "routers" in config:
47+
for router in config["routers"]:
48+
# routers do not use `procParams`. Use setParameter directly.
49+
if "setParameter" in router:
50+
router["setParameter"]["featureFlagFLE2ProtocolVersion2"] = "1"
51+
else:
52+
router["setParameter"] = {
53+
"featureFlagFLE2ProtocolVersion2": "1"
54+
}
55+
did_rewrite = True
56+
57+
58+
if not did_rewrite:
59+
raise Exception(
60+
"Did not add setParameter. Does the orchestration config have `procParams`?"
61+
)
62+
pass
63+
64+
65+
class TestRewrite(unittest.TestCase):
66+
def test_rewrite(self):
67+
# Test that setParameter is added for a server.
68+
input = {
69+
"procParams": {}
70+
}
71+
do_rewrite (input)
72+
self.assertEqual (input, {
73+
"procParams": {
74+
"setParameter": {
75+
"featureFlagFLE2ProtocolVersion2": "1"
76+
}
77+
}
78+
})
79+
80+
# Test that other setParameter values are kept for a server.
81+
input = {
82+
"procParams": {
83+
"setParameter": {
84+
"foo": "bar"
85+
}
86+
}
87+
}
88+
do_rewrite (input)
89+
self.assertEqual (input, {
90+
"procParams": {
91+
"setParameter": {
92+
"foo": "bar",
93+
"featureFlagFLE2ProtocolVersion2": "1"
94+
}
95+
}
96+
})
97+
98+
# Test that setParameter is added for a replica_set.
99+
input = {
100+
"members": [
101+
{"procParams": {}},
102+
{"procParams": {}},
103+
]
104+
}
105+
do_rewrite(input)
106+
self.assertEqual(
107+
input,
108+
{
109+
"members": [
110+
{
111+
"procParams": {
112+
"setParameter": {"featureFlagFLE2ProtocolVersion2": "1"}
113+
}
114+
},
115+
{
116+
"procParams": {
117+
"setParameter": {"featureFlagFLE2ProtocolVersion2": "1"}
118+
}
119+
},
120+
]
121+
},
122+
)
123+
124+
# Test that setParameter is added for shards and routers.
125+
input = {
126+
"shards": [
127+
{"shardParams": {"members": [{"procParams": {}}, {"procParams": {}}]}}
128+
],
129+
"routers": [{}, {}],
130+
}
131+
132+
do_rewrite(input)
133+
self.assertEqual(
134+
input,
135+
{
136+
"shards": [
137+
{
138+
"shardParams": {
139+
"members": [
140+
{
141+
"procParams": {
142+
"setParameter": {
143+
"featureFlagFLE2ProtocolVersion2": "1"
144+
}
145+
}
146+
},
147+
{
148+
"procParams": {
149+
"setParameter": {
150+
"featureFlagFLE2ProtocolVersion2": "1"
151+
}
152+
}
153+
},
154+
]
155+
}
156+
}
157+
],
158+
"routers": [
159+
{"setParameter": {"featureFlagFLE2ProtocolVersion2": "1"}},
160+
{"setParameter": {"featureFlagFLE2ProtocolVersion2": "1"}},
161+
],
162+
},
163+
)
164+
165+
166+
if __name__ == "__main__":
167+
if os.environ.get("SELFTEST", "OFF") == "ON":
168+
print("Doing self test")
169+
unittest.main()
170+
sys.exit(0)
171+
172+
if len(sys.argv) != 2:
173+
print(
174+
"Error: expected path to orchestration config file path as first argument"
175+
)
176+
print("Usage: setfle2parameter.py <orchestration config file path>")
177+
sys.exit(1)
178+
179+
path = sys.argv[1]
180+
with open(path, "r") as file:
181+
config = json.loads(file.read())
182+
do_rewrite(config)
183+
print (json.dumps(config, indent=4))
184+

0 commit comments

Comments
 (0)