[SERVER-29448] Disallow dropping "admin" and "local" dbs when in replica set mode Created: 05/Jun/17  Updated: 30/Oct/23  Resolved: 19/Oct/17

Status: Closed
Project: Core Server
Component/s: Usability
Affects Version/s: None
Fix Version/s: 3.6.0-rc1

Type: Improvement Priority: Major - P3
Reporter: Eric Milkie Assignee: Maria van Keulen
Resolution: Fixed Votes: 0
Labels: None
Remaining Estimate: Not Specified
Time Spent: Not Specified
Original Estimate: Not Specified

Issue Links:
Related
related to SERVER-29453 Disallow removing the featureCompatib... Closed
is related to SERVER-30131 collections in local should have a UU... Closed
is related to SERVER-32205 Dropping admin db sets FCV to 3.4 but... Closed
Backwards Compatibility: Fully Compatible
Sprint: Storage 2017-10-23
Participants:

 Description   

Currently, there are no system restrictions on when "admin" and "local" can be dropped. Because the usual protections against writing/dropping system collections are skipped (e.g. dropping a "system.users" collection is normally prohibited), it is too easy to break a running system with a simple dropDatabase command.
One way this can manifest is by dropping the admin database while a "system.version" exists in it, which can downgrade your feature compatibility version.
To work around this new restriction and drop these databases, one can restart a node in standalone mode.



 Comments   
Comment by Githook User [ 19/Oct/17 ]

Author:

{'email': 'maria@mongodb.com', 'name': 'Maria van Keulen', 'username': 'mvankeulen94'}

Message: SERVER-29448 Disallow removing the admin database in replica set mode
Branch: master
https://github.com/mongodb/mongo/commit/af44617f264c0a2338759debe37ad1d7e353d2ab

Comment by Maria van Keulen [ 09/Oct/17 ]

Note that as part of SERVER-30131, we restart initial sync if the admin database is dropped during initial sync. This behavior is desirable under the assumption that we will eventually disallow removing the admin database for replica sets.

Comment by Ian Boros [ 28/Sep/17 ]

max.hirschhorn and I discovered that dropping the "admin" database can lead to an invariant failure on 3.5. The reason for this is that 3.5 has "two-phase drop," which causes each collection in the database to be dropped individually and so CollectionShardingState::onDropCollection gets invoked for each collection and causes the invariant failure when running on a replica set shard.

To reproduce, do the following:

python buildscripts/resmoke.py --suites=no_server sharding_drop_admin_database.js

sharding_drop_admin_database.js

(function() {
    var st = new ShardingTest({mongos:1, config: 1, shards: 1, rs: {nodes:1}});
    assert.commandWorked(st.s.getDB("admin").dropDatabase());
    st.stop();
})();

You should get a log message/backtrace similar to the following:

[ShardedClusterFixture:job0:shard0:primary] 2017-09-27T16:50:42.668+0000 D TRACKING [conn25] Cmd: dropDatabase, TrackingId: 59cbd6db4102c6ef9ddcc5b8|59cbd6e24102c6ef9ddcc5c4
[ShardedClusterFixture:job0:shard0:primary] 2017-09-27T16:50:42.668+0000 I COMMAND  [conn25] dropDatabase admin - starting
[ShardedClusterFixture:job0:shard0:primary] 2017-09-27T16:50:42.668+0000 I COMMAND  [conn25] dropDatabase admin - dropping collection: admin.system.version
[ShardedClusterFixture:job0:shard0:primary] 2017-09-27T16:50:42.668+0000 D STORAGE  [conn25] dropCollection: admin.system.version
[ShardedClusterFixture:job0:shard0:primary] 2017-09-27T16:50:42.668+0000 I COMMAND  [conn25] setting featureCompatibilityVersion to 3.4
[ShardedClusterFixture:job0:shard0:primary] 2017-09-27T16:50:42.669+0000 F -        [conn25] Invariant failure !opCtx->writesAreReplicated() src/mongo/db/s/collection_sharding_state.cpp 382
[ShardedClusterFixture:job0:shard0:primary] 2017-09-27T16:50:42.669+0000 F -        [conn25]
[ShardedClusterFixture:job0:shard0:primary] 
[ShardedClusterFixture:job0:shard0:primary] ***aborting after invariant() failure
[ShardedClusterFixture:job0:shard0:primary] 
[ShardedClusterFixture:job0:shard0:primary] 
[ShardedClusterFixture:job0:shard0:primary] 2017-09-27T16:50:42.684+0000 F -        [conn25] Got signal: 6 (Aborted).
[ShardedClusterFixture:job0:shard0:primary] 
[ShardedClusterFixture:job0:shard0:primary]  0x7fab598b06f1 0x7fab598af909 0x7fab598afded 0x7fab54b917e0 0x7fab54820495 0x7fab54821c75 0x7fab57f0d938 0x7fab58705fc8 0x7fab581fceca 0x7fab58240bf3 0x7fab583cfde0 0x7fab5814435b 0x7fab5925ccc6 0x7fab5925980f 0x7fab581125ea 0x7fab58112d4c 0x7fab58113bf5 0x7fab5811ce80 0x7fab58119e75 0x7fab5811bfa7 0x7fab58117791 0x7fab59737d54 0x7fab54b89aa1 0x7fab548d6bcd
[ShardedClusterFixture:job0:shard0:primary] ----- BEGIN BACKTRACE -----
[ShardedClusterFixture:job0:shard0:primary] {"backtrace":[{"b":"7FAB575E1000","o":"22CF6F1","s":"_ZN5mongo15printStackTraceERSo"},{"b":"7FAB575E1000","o":"22CE909"},{"b":"7FAB575E1000","o":"22CEDED"},{"b":"7FAB54B82000","o":"F7E0"},{"b":"7FAB547EE000","o":"32495","s":"gsignal"},{"b":"7FAB547EE000","o":"33C75","s":"abort"},{"b":"7FAB575E1000","o":"92C938","s":"_ZN5mongo17invariantOKFailedEPKcRKNS_6StatusES1_j"},{"b":"7FAB575E1000","o":"1124FC8","s":"_ZN5mongo23CollectionShardingState16onDropCollectionEPNS_16OperationContextERKNS_15NamespaceStringE"},{"b":"7FAB575E1000","o":"C1BECA","s":"_ZN5mongo14OpObserverImpl16onDropCollectionEPNS_16OperationContextERKNS_15NamespaceStringEN5boost8optionalINS_4UUIDEEE"},{"b":"7FAB575E1000","o":"C5FBF3","s":"_ZN5mongo12DatabaseImpl26dropCollectionEvenIfSystemEPNS_16OperationContextERKNS_15NamespaceStringENS_4repl6OpTimeE"},{"b":"7FAB575E1000","o":"DEEDE0","s":"_ZN5mongo12dropDatabaseEPNS_16OperationContextERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE"},{"b":"7FAB575E1000","o":"B6335B","s":"_ZN5mongo15CmdDropDatabase3runEPNS_16OperationContextERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERKNS_7BSONObjERNS_14BSONObjBuilderE"},{"b":"7FAB575E1000","o":"1C7BCC6","s":"_ZN5mongo12BasicCommand11enhancedRunEPNS_16OperationContextERKNS_12OpMsgRequestERNS_14BSONObjBuilderE"},{"b":"7FAB575E1000","o":"1C7880F","s":"_ZN5mongo7Command9publicRunEPNS_16OperationContextERKNS_12OpMsgRequestERNS_14BSONObjBuilderE"},{"b":"7FAB575E1000","o":"B315EA"},{"b":"7FAB575E1000","o":"B31D4C"},{"b":"7FAB575E1000","o":"B32BF5","s":"_ZN5mongo23ServiceEntryPointMongod13handleRequestEPNS_16OperationContextERKNS_7MessageE"},{"b":"7FAB575E1000","o":"B3BE80","s":"_ZN5mongo19ServiceStateMachine15_processMessageERNS0_11ThreadGuardE"},{"b":"7FAB575E1000","o":"B38E75","s":"_ZN5mongo19ServiceStateMachine15_runNextInGuardERNS0_11ThreadGuardE"},{"b":"7FAB575E1000","o":"B3AFA7","s":"_ZN5mongo19ServiceStateMachine7runNextEv"},{"b":"7FAB575E1000","o":"B36791"},{"b":"7FAB575E1000","o":"2156D54"},{"b":"7FAB54B82000","o":"7AA1"},{"b":"7FAB547EE000","o":"E8BCD","s":"clone"}],"processInfo":{ "mongodbVersion" : "3.5.12-171-g9f8084f2c8-patch-59cbc157e3c3312ab2000036", "gitVersion" : "9f8084f2c87cdbe5616cd5d6d8adb2a8272a504a", "compiledModules" : [ "enterprise" ], "uname" : { "sysname" : "Linux", "release" : "2.6.32-220.el6.x86_64", "version" : "#1 SMP Wed Nov 9 08:03:13 EST 2011", "machine" : "x86_64" }, "somap" : [ { "b" : "7FAB575E1000", "elfType" : 3, "buildId" : "6F0A3C5C49B52F6F38FF456359D246D77C8D5FAB" }, { "b" : "7FFF14E35000", "elfType" : 3, "buildId" : "08F634A1D22DEFF00461D50A7699DACDC97657BF" }, { "b" : "7FAB57169000", "path" : "/usr/lib64/libcurl.so.4", "elfType" : 3, "buildId" : "A38B9CE8AEAF277CBD8BC1298B1731E2C9A66192" }, { "b" : "7FAB56F1D000", "path" : "/usr/lib64/libnetsnmpagent.so.20", "elfType" : 3, "buildId" : "1270BB069D761BD79C79F8986BB3ED5DCAA7D06D" }, { "b" : "7FAB56CF7000", "path" : "/usr/lib64/libnetsnmphelpers.so.20", "elfType" : 3, "buildId" : "3FA4F246A7DF00EC1355C5226C9308DC7B4AB5CD" }, { "b" : "7FAB5682F000", "path" : "/usr/lib64/libnetsnmpmibs.so.20", "elfType" : 3, "buildId" : "AE65092368DDB948A32B62D613DD8FFE210EBEB9" }, { "b" : "7FAB56554000", "path" : "/usr/lib64/libnetsnmp.so.20", "elfType" : 3, "buildId" : "52E4D411A95E6C7FCCE0E1942B525AC8FBBDF4A8" }, { "b" : "7F6D21B3A000", "path" : "/usr/lib64/libsasl2.so.2", "elfType" : 3, "buildId" : "E0AEE889D5BF1373F2F9EE0D448DBF3F5B5113F0" }, { "b" : "7F6D20CE9000", "path" : "/lib64/libldap-2.4.so.2", "elfType" : 3, "buildId" : "DDBAC283102A61D6A63B3F3952A1C06657FF3AE8" }, { "b" : "7F6D206DA000", "path" : "/lib64/liblber-2.4.so.2", "elfType" : 3, "buildId" : "244D2593BDE4FE657BC88572DB5DA88FA274B7F3" }, { "b" : "7F6D21C96000", "path" : "/lib64/libgssapi_krb5.so.2", "elfType" : 3, "buildId" : "0C249DF4D77989253CCD859956BF50749308A16A" }, { "b" : "7FAB55A2A000", "path" : "/usr/lib64/libssl.so.10", "elfType" : 3, "buildId" : "D256E285C5E11D9A99EB04CA7651003A8F67B64E" }, { "b" : "7FAB55645000", "path" : "/usr/lib64/libcrypto.so.10", "elfType" : 3, "buildId" : "1EDB45C205A844A75EBBB4F0075E705803FFB85B" }, { "b" : "7F6D26C3D000", "path" : "/lib64/librt.so.1", "elfType" : 3, "buildId" : "FDF3A36FFFE08375456D59DA959EAB2FC30B6186" }, { "b" : "7F6D27639000", "path" : "/lib64/libdl.so.2", "elfType" : 3, "buildId" : "1F7E85410384392BC51FA7324961719A10125F31" }, { "b" : "7F6D25FB5000", "path" : "/lib64/libm.so.6", "elfType" : 3, "buildId" : "8A852AC42F0B64F0F30C760EBBCFA3FE4A228F12" }, { "b" : "7F6D2519F000", "path" : "/lib64/libgcc_s.so.1", "elfType" : 3, "buildId" : "BC7550A8A7C2D706FE4E489058BADC963465DBB7" }, { "b" : "7F6D26782000", "path" : "/lib64/libpthread.so.0", "elfType" : 3, "buildId" : "85104ECFE42C606B31C2D0D0D2E5DACD3286A341" }, { "b" : "7F6D267EE000", "path" : "/lib64/libc.so.6", "elfType" : 3, "buildId" : "8A7E7404A2335231BE759CB54F8041344CAC0C1B" }, { "b" : "7F6D29BBE000", "path" : "/lib64/ld-linux-x86-64.so.2", "elfType" : 3, "buildId" : "1CC2165E019D43F71FDE0A47AF9F4C8EB5E51963" }, { "b" : "7F6D1F9BC000", "path" : "/lib64/libidn.so.11", "elfType" : 3, "buildId" : "5659EB985475B586E3BBCB95BA21F4A30BE5EBF4" }, { "b" : "7F6D20AD5000", "path" : "/lib64/libkrb5.so.3", "elfType" : 3, "buildId" : "624C7056B8BBE6BA758DEF557F516FBDBD01E1FD" }, { "b" : "7F6D1FCA9000", "path" : "/lib64/libk5crypto.so.3", "elfType" : 3, "buildId" : "C81673692EEF670BC951EE726490F5D1CAB822F4" }, { "b" : "7F6D242A5000", "path" : "/lib64/libcom_err.so.2", "elfType" : 3, "buildId" : "088FB9EC41563FE043C14CA969FB38468B647B2E" }, { "b" : "7F6D2508F000", "path" : "/lib64/libz.so.1", "elfType" : 3, "buildId" : "D053BB4FF0C2FC983842F81598813B9B931AD0D1" }, { "b" : "7F6D21642000", "path" : "/usr/lib64/libssl3.so", "elfType" : 3, "buildId" : "91CC41112E4194613F1AE7E15CFF5873922A08EC" }, { "b" : "7F6D21016000", "path" : "/usr/lib64/libsmime3.so", "elfType" : 3, "buildId" : "6842A55418527250648A1836541354C79613F8BD" }, { "b" : "7F6D220D3000", "path" : "/usr/lib64/libnss3.so", "elfType" : 3, "buildId" : "9221B9CD4B38C4C3FE22B82AA65E2405860E79CA" }, { "b" : "7F6D216A6000", "path" : "/usr/lib64/libnssutil3.so", "elfType" : 3, "buildId" : "F1484D8815EFE9CC47C437AE0AA7A89A3B5A3A24" }, { "b" : "7F6D224A2000", "path" : "/lib64/libplds4.so", "elfType" : 3, "buildId" : "21B62D06504B5AC5A7A849E7C8B919DF357EBEFE" }, { "b" : "7F6D20E9D000", "path" : "/lib64/libplc4.so", "elfType" : 3, "buildId" : "83EB817989559AE1CBAE20564AAAB42D61532D9E" }, { "b" : "7F6D2145F000", "path" : "/lib64/libnspr4.so", "elfType" : 3, "buildId" : "993E6315CCFCEA516F5A0F993632DFE1A4A395A4" }, { "b" : "7FAB52A37000", "path" : "/usr/lib64/libssh2.so.1", "elfType" : 3, "buildId" : "8727EC925D6D91DAC74A99BDE8B3C6EE96AF13EA" }, { "b" : "7FAB5282C000", "path" : "/lib64/libwrap.so.0", "elfType" : 3, "buildId" : "083332F88CF3C61AB0184D8F397FC8BFF4548D8E" }, { "b" : "7F6D238C1000", "path" : "/usr/lib64/perl5/CORE/libperl.so", "elfType" : 3, "buildId" : "53842C2896DED0063E1BE5C650CE97C67AE97973" }, { "b" : "7F6D222A7000", "path" : "/lib64/libresolv.so.2", "elfType" : 3, "buildId" : "F0BE1166EDCFFB2422B940D601A1BBD89352D80F" }, { "b" : "7F6D20C8E000", "path" : "/lib64/libnsl.so.1", "elfType" : 3, "buildId" : "D233CCCC987214EE5DACCF88949E31469228F6FF" }, { "b" : "7F6D20E57000", "path" : "/lib64/libcrypt.so.1", "elfType" : 3, "buildId" : "F542C8ACD4AD1F2C6A551043BDFBAB051905DA1C" }, { "b" : "7F6D23454000", "path" : "/lib64/libutil.so.1", "elfType" : 3, "buildId" : "2963FF1BBF4BF9131097982EB8BE5C905A342CBD" }, { "b" : "7F6D1D5E9000", "path" : "/usr/lib64/librpm.so.1", "elfType" : 3, "buildId" : "C65174824A80EDE5374CFF6143C808807160CA63" }, { "b" : "7F6D1DBBA000", "path" : "/usr/lib64/librpmio.so.1", "elfType" : 3, "buildId" : "F858A331FA080C7E82549BE3191EB4BADE02A5C0" }, { "b" : "7F6D215B1000", "path" : "/lib64/libpopt.so.0", "elfType" : 3, "buildId" : "E7B49911F1136073DD7DC58E8118CD9A4FBE2A19" }, { "b" : "7FAB513A1000", "path" : "/usr/lib64/libsensors.so.4", "elfType" : 3, "buildId" : "6855E5BF5B3634C15F01B1043BD892D727EE3C08" }, { "b" : "7F6D1D596000", "path" : "/lib64/libkrb5support.so.0", "elfType" : 3, "buildId" : "03B69EEB8998AC9CA7519A27571BAD976BA4C56D" }, { "b" : "7F6D1DF93000", "path" : "/lib64/libkeyutils.so.1", "elfType" : 3, "buildId" : "3BCCABE75DC61BBA81AAE45D164E26EF4F9F55DB" }, { "b" : "7F6D20990000", "path" : "/lib64/libfreebl3.so", "elfType" : 3, "buildId" : "AFF1C795A3CF422C9F8AC32C7522F6376B1EA087" }, { "b" : "7F6D1E37F000", "path" : "/lib64/libbz2.so.1", "elfType" : 3, "buildId" : "1250B1D041DD7552F0C870BB188DC3A34DF2651D" }, { "b" : "7F6D20569000", "path" : "/usr/lib64/libelf.so.1", "elfType" : 3, "buildId" : "50517407A07B8D6C9A55A392E99246B52E8BFEEA" }, { "b" : "7F6D1F748000", "path" : "/usr/lib64/liblzma.so.0", "elfType" : 3, "buildId" : "6FF9BAEEEE9DDEEF2DFA5CBD36147A75891C0AD4" }, { "b" : "7F6D1CD1B000", "path" : "/usr/lib64/liblua-5.1.so", "elfType" : 3, "buildId" : "6BDB4E1990D6EBA12A5C8D39A7650DB8798BF568" }, { "b" : "7F6D20EFC000", "path" : "/lib64/libselinux.so.1", "elfType" : 3, "buildId" : "B4576BE308DDCF7BC31F7304E4734C3D846D0236" }, { "b" : "7F6D1CCF8000", "path" : "/lib64/libcap.so.2", "elfType" : 3, "buildId" : "A436538388F1F25113FDA834CA2EED524EFA17D6" }, { "b" : "7F6D1CEF0000", "path" : "/lib64/libacl.so.1", "elfType" : 3, "buildId" : "26CC708AC7C0FC1797A2340C024F0ADD0CE054D8" }, { "b" : "7F6D1D77B000", "path" : "/lib64/libdb-4.7.so", "elfType" : 3, "buildId" : "D91C702275E2039E98E39925B02FF5C53A6C3312" }, { "b" : "7F6D1F176000", "path" : "/lib64/libattr.so.1", "elfType" : 3, "buildId" : "8EF0683858704EF173AB11B1E27076F37F82B7B6" } ] }}
[ShardedClusterFixture:job0:shard0:primary]  mongod(_ZN5mongo15printStackTraceERSo+0x41) [0x7fab598b06f1]
[ShardedClusterFixture:job0:shard0:primary]  mongod(+0x22CE909) [0x7fab598af909]
[ShardedClusterFixture:job0:shard0:primary]  mongod(+0x22CEDED) [0x7fab598afded]
[ShardedClusterFixture:job0:shard0:primary]  libpthread.so.0(+0xF7E0) [0x7fab54b917e0]
[ShardedClusterFixture:job0:shard0:primary]  libc.so.6(gsignal+0x35) [0x7fab54820495]
[ShardedClusterFixture:job0:shard0:primary]  libc.so.6(abort+0x175) [0x7fab54821c75]
[ShardedClusterFixture:job0:shard0:primary]  mongod(_ZN5mongo17invariantOKFailedEPKcRKNS_6StatusES1_j+0x0) [0x7fab57f0d938]
[ShardedClusterFixture:job0:shard0:primary]  mongod(_ZN5mongo23CollectionShardingState16onDropCollectionEPNS_16OperationContextERKNS_15NamespaceStringE+0x1C8) [0x7fab58705fc8]
[ShardedClusterFixture:job0:shard0:primary]  mongod(_ZN5mongo14OpObserverImpl16onDropCollectionEPNS_16OperationContextERKNS_15NamespaceStringEN5boost8optionalINS_4UUIDEEE+0x82A) [0x7fab581fceca]
[ShardedClusterFixture:job0:shard0:primary]  mongod(_ZN5mongo12DatabaseImpl26dropCollectionEvenIfSystemEPNS_16OperationContextERKNS_15NamespaceStringENS_4repl6OpTimeE+0x2D3) [0x7fab58240bf3]
[ShardedClusterFixture:job0:shard0:primary]  mongod(_ZN5mongo12dropDatabaseEPNS_16OperationContextERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE+0x750) [0x7fab583cfde0]
[ShardedClusterFixture:job0:shard0:primary]  mongod(_ZN5mongo15CmdDropDatabase3runEPNS_16OperationContextERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERKNS_7BSONObjERNS_14BSONObjBuilderE+0xDB) [0x7fab5814435b]
[ShardedClusterFixture:job0:shard0:primary]  mongod(_ZN5mongo12BasicCommand11enhancedRunEPNS_16OperationContextERKNS_12OpMsgRequestERNS_14BSONObjBuilderE+0x76) [0x7fab5925ccc6]
[ShardedClusterFixture:job0:shard0:primary]  mongod(_ZN5mongo7Command9publicRunEPNS_16OperationContextERKNS_12OpMsgRequestERNS_14BSONObjBuilderE+0x1F) [0x7fab5925980f]
[ShardedClusterFixture:job0:shard0:primary]  mongod(+0xB315EA) [0x7fab581125ea]
[ShardedClusterFixture:job0:shard0:primary]  mongod(+0xB31D4C) [0x7fab58112d4c]
[ShardedClusterFixture:job0:shard0:primary]  mongod(_ZN5mongo23ServiceEntryPointMongod13handleRequestEPNS_16OperationContextERKNS_7MessageE+0x305) [0x7fab58113bf5]
[ShardedClusterFixture:job0:shard0:primary]  mongod(_ZN5mongo19ServiceStateMachine15_processMessageERNS0_11ThreadGuardE+0xF0) [0x7fab5811ce80]
[ShardedClusterFixture:job0:shard0:primary]  mongod(_ZN5mongo19ServiceStateMachine15_runNextInGuardERNS0_11ThreadGuardE+0x1B5) [0x7fab58119e75]
[ShardedClusterFixture:job0:shard0:primary]  mongod(_ZN5mongo19ServiceStateMachine7runNextEv+0x157) [0x7fab5811bfa7]
[ShardedClusterFixture:job0:shard0:primary]  mongod(+0xB36791) [0x7fab58117791]
[ShardedClusterFixture:job0:shard0:primary]  mongod(+0x2156D54) [0x7fab59737d54]
[ShardedClusterFixture:job0:shard0:primary]  libpthread.so.0(+0x7AA1) [0x7fab54b89aa1]
[ShardedClusterFixture:job0:shard0:primary]  libc.so.6(clone+0x6D) [0x7fab548d6bcd]
[ShardedClusterFixture:job0:shard0:primary] -----  END BACKTRACE  -----
[ShardedClusterFixture:job0:shard0:primary] mongod on port 20003 was expected to be running in _do_teardown(), but wasn't. Exited with code -6.

The invariant was introduced in SERVER-25677 by spencer.

Comment by Ian Whalen (Inactive) [ 27/Jun/17 ]

milkie is this part of the plan for the 3.4/3.6 upgrade, i.e. related to fixing the problem with the absence of the FCV document? Also this seems like it'd be more like Storage or Replication team?

Generated at Thu Feb 08 04:20:54 UTC 2024 using Jira 9.7.1#970001-sha1:2222b88b221c4928ef0de3161136cc90c8356a66.