@@ -39,21 +39,10 @@ ABSL_FLAG(bool, lua_allow_undeclared_auto_correct, false,
3939 " undeclared key." );
4040
4141ABSL_FLAG (
42- std::vector<std::string>, lua_undeclared_keys_shas,
43- std::vector<std::string>({" 351130589c64523cb98978dc32c64173a31244f3" , // Sidekiq, see #2442
44- " 6ae15ef4678593dc61f991c9953722d67d822776" , // Sidekiq, see #2442
45- " 34b1048274c8e50a0cc587a3ed9c383a82bb78c5" , // Sidekiq
46- " b725ca33e5b36f318ab1150b8ac955a3d997c872" }), // Sentry, see #5495
42+ std::vector<std::string>, lua_undeclared_keys_shas, {},
4743 " Comma-separated list of Lua script SHAs which are allowed to access undeclared keys. SHAs are "
4844 " only looked at when loading the script, and new values do not affect already-loaded script." );
4945
50- ABSL_FLAG (std::vector<std::string>, lua_force_atomicity_shas,
51- std::vector<std::string>({
52- " f8133be7f04abd9dfefa83c3b29a9d837cfbda86" , // Sidekiq, see #4522
53- }),
54- "Comma-separated list of Lua script SHAs which are forced to run in atomic mode, even if "
55- "the script specifies disable-atomicity.");
56-
5746namespace dfly {
5847using namespace std ;
5948using namespace facade ;
@@ -272,17 +261,30 @@ io::Result<string, GenericError> ScriptMgr::Insert(string_view body, Interpreter
272261 auto params = params_opt->value_or (default_params_);
273262
274263 if (!params.atomic ) {
275- auto force_atomic_shas = absl::GetFlag (FLAGS_lua_force_atomicity_shas);
276- if (find (force_atomic_shas.begin (), force_atomic_shas.end (), sha) != force_atomic_shas.end ()) {
264+ // override atomicity for a specific buggy script.
265+ constexpr string_view sha_4522 =
266+ " f8133be7f04abd9dfefa83c3b29a9d837cfbda86" sv; // Sidekiq, see #4522
267+ if (sha == sha_4522) {
277268 params.atomic = true ;
278269 }
279270 }
280271
281- auto undeclared_shas = absl::GetFlag (FLAGS_lua_undeclared_keys_shas);
282- if (find (undeclared_shas.begin (), undeclared_shas.end (), sha) != undeclared_shas.end ()) {
272+ const char * kUndeclaredShas [] = {
273+ " 351130589c64523cb98978dc32c64173a31244f3" , // Sidekiq, see #2442
274+ " 6ae15ef4678593dc61f991c9953722d67d822776" , // Sidekiq, see #2442
275+ " 34b1048274c8e50a0cc587a3ed9c383a82bb78c5" , // Sidekiq
276+ " b725ca33e5b36f318ab1150b8ac955a3d997c872" , // Sentry, see #5495
277+ " 8c4dafdf9b6b7bcf511a0d1ec0518bed9260e16d" , // django-ops see #6119
278+ };
279+
280+ if (find (begin (kUndeclaredShas ), end (kUndeclaredShas ), sha) != end (kUndeclaredShas )) {
283281 params.undeclared_keys = true ;
282+ } else {
283+ auto undeclared_shas = absl::GetFlag (FLAGS_lua_undeclared_keys_shas);
284+ if (find (undeclared_shas.begin (), undeclared_shas.end (), sha) != undeclared_shas.end ()) {
285+ params.undeclared_keys = true ;
286+ }
284287 }
285-
286288 // If the script is atomic, check for possible squashing optimizations.
287289 // For non atomic modes, squashing increases the time locks are held, which
288290 // can decrease throughput with frequently accessed keys.
0 commit comments