Check firebird.log [no messages found for interval when this test was running]
Jump to: output_first_mismatch    outcomes_full_history    elapsed_time_chart
Show cross-report outcomes.

Annotation type Annotation details
2 @message
assert   
    MON$CRYPT_STATE 3
    DROP DATABASE;
  - Statement failed, SQLSTATE = 42000
  + Statement failed, SQLSTATE = 40001
  - unsuccessful metadata update
  + lock time-out on wait transaction
    -object is in use
    set echo off;
    DB_NAME /var/tmp/qa_2024/test_11480/tmp_gh_7200.tmp.fdb

LOG DETAILS:

2025-02-20 04:57:31.082
2025-02-20 04:57:31.091 act = <firebird.qa.plugin.Action object at [hex]>
2025-02-20 04:57:31.104 act_tmp = <firebird.qa.plugin.Action object at [hex]>
2025-02-20 04:57:31.112 tmp_sql = PosixPath('/var/tmp/qa_2024/test_11480/tmp_gh_7200.tmp.sql')
2025-02-20 04:57:31.119 tmp_log = PosixPath('/var/tmp/qa_2024/test_11480/tmp_gh_7200.tmp.log')
2025-02-20 04:57:31.125 capsys = <_pytest.capture.CaptureFixture object at [hex]>
2025-02-20 04:57:31.132
2025-02-20 04:57:31.137 @pytest.mark.encryption
2025-02-20 04:57:31.144 @pytest.mark.version('>=4.0.2')
2025-02-20 04:57:31.151 def test_1(act: Action, act_tmp: Action, tmp_sql: Path, tmp_log: Path, capsys):
2025-02-20 04:57:31.158
2025-02-20 04:57:31.164 init_sql = f"""
2025-02-20 04:57:31.170 recreate table test(s varchar({FLD_LEN}));
2025-02-20 04:57:31.177 commit;
2025-02-20 04:57:31.183 set term ^;
2025-02-20 04:57:31.190 execute block as
2025-02-20 04:57:31.196 declare n int = {N_ROWS};
2025-02-20 04:57:31.202 begin
2025-02-20 04:57:31.208 while (n>0) do
2025-02-20 04:57:31.215 begin
2025-02-20 04:57:31.221 insert into test(s) values(lpad('', {FLD_LEN}, uuid_to_char(gen_uuid())));
2025-02-20 04:57:31.228 n = n - 1;
2025-02-20 04:57:31.234 end
2025-02-20 04:57:31.240 end
2025-02-20 04:57:31.246 ^
2025-02-20 04:57:31.252 -- for debug, trace must be started with log_proc = true:
2025-02-20 04:57:31.258 create procedure sp_debug (a_point varchar(50)) as
2025-02-20 04:57:31.265 begin
2025-02-20 04:57:31.271 -- nop --
2025-02-20 04:57:31.278 end
2025-02-20 04:57:31.286 ^
2025-02-20 04:57:31.295 set term ;^
2025-02-20 04:57:31.304 commit;
2025-02-20 04:57:31.312 create index test_s on test(s);
2025-02-20 04:57:31.321 """
2025-02-20 04:57:31.330 act_tmp.isql(switches=['-q'], input = init_sql, combine_output = True)
2025-02-20 04:57:31.338 assert act_tmp.clean_stdout == ''
2025-02-20 04:57:31.347 act_tmp.reset()
2025-02-20 04:57:31.356
2025-02-20 04:57:31.364 #############################################
2025-02-20 04:57:31.373 ###   c h a n g e     F W    t o    O N   ###
2025-02-20 04:57:31.381 #############################################
2025-02-20 04:57:31.390 act_tmp.db.set_sync_write()
2025-02-20 04:57:31.398
2025-02-20 04:57:31.406
2025-02-20 04:57:31.413 # QA_GLOBALS -- dict, is defined in qa/plugin.py, obtain settings
2025-02-20 04:57:31.422 # from act.files_dir/'test_config.ini':
2025-02-20 04:57:31.430 enc_settings = QA_GLOBALS['encryption']
2025-02-20 04:57:31.438
2025-02-20 04:57:31.447 encryption_plugin = enc_settings['encryption_plugin'] # fbSampleDbCrypt
2025-02-20 04:57:31.455 encryption_holder  = enc_settings['encryption_holder'] # fbSampleKeyHolder
2025-02-20 04:57:31.463 encryption_key = enc_settings['encryption_key'] # Red
2025-02-20 04:57:31.472
2025-02-20 04:57:31.480 sttm = f'alter database encrypt with "{encryption_plugin}" key "{encryption_key}";'
2025-02-20 04:57:31.489 tmp_sql.write_bytes(sttm.encode('utf-8'))
2025-02-20 04:57:31.497
2025-02-20 04:57:31.505 with tmp_log.open('w') as f_log:
2025-02-20 04:57:31.513
2025-02-20 04:57:31.521 p = subprocess.Popen( [ act_tmp.vars['isql'],
2025-02-20 04:57:31.530 '-q',
2025-02-20 04:57:31.539 '-user', act_tmp.db.user,
2025-02-20 04:57:31.548 '-password', act_tmp.db.password,
2025-02-20 04:57:31.557 act_tmp.db.dsn,
2025-02-20 04:57:31.566 '-i', tmp_sql
2025-02-20 04:57:31.573 ],
2025-02-20 04:57:31.582 stdout = f_log, stderr = subprocess.STDOUT
2025-02-20 04:57:31.589 )
2025-02-20 04:57:31.597
2025-02-20 04:57:31.605 encryption_started = False
2025-02-20 04:57:31.613 with act_tmp.db.connect() as con_watcher:
2025-02-20 04:57:31.621
2025-02-20 04:57:31.628 ps, rs = None, None
2025-02-20 04:57:31.635 try:
2025-02-20 04:57:31.642 custom_tpb = tpb(isolation = Isolation.SNAPSHOT, lock_timeout = -1)
2025-02-20 04:57:31.650 tx_watcher = con_watcher.transaction_manager(custom_tpb)
2025-02-20 04:57:31.657 cur_watcher = tx_watcher.cursor()
2025-02-20 04:57:31.664
2025-02-20 04:57:31.672 # 0 = non-encrypted; 1 = encrypted; 2 = is DEcrypting; 3 - is Encrypting
2025-02-20 04:57:31.680 ps = cur_watcher.prepare('select mon$crypt_state from mon$database')
2025-02-20 04:57:31.688
2025-02-20 04:57:31.696 i = 0
2025-02-20 04:57:31.703 da = dt.now()
2025-02-20 04:57:31.711 while True:
2025-02-20 04:57:31.719 # ::: NB ::: 'ps' returns data, i.e. this is SELECTABLE expression.
2025-02-20 04:57:31.728 # We have to store result of cur.execute(<psInstance>) in order to
2025-02-20 04:57:31.736 # close it explicitly.
2025-02-20 04:57:31.743 # Otherwise AV can occur during Python garbage collection and this
2025-02-20 04:57:31.751 # causes pytest to hang on its final point.
2025-02-20 04:57:31.760 # Explained by hvlad, email 26.10.24 17:42
2025-02-20 04:57:31.768 rs = cur_watcher.execute(ps)
2025-02-20 04:57:31.776 for r in rs:
2025-02-20 04:57:31.785 db_crypt_state = r[0]
2025-02-20 04:57:31.791
2025-02-20 04:57:31.799 tx_watcher.commit()
2025-02-20 04:57:31.807 db = dt.now()
2025-02-20 04:57:31.819 diff_ms = (db-da).seconds*1000 + (db-da).microseconds//1000
2025-02-20 04:57:31.830 if db_crypt_state == IS_ENCRYPTING_STATE:
2025-02-20 04:57:31.843 encryption_started = True
2025-02-20 04:57:31.852 cur_watcher.call_procedure('sp_debug', ('encryption_started',))
2025-02-20 04:57:31.860 break
2025-02-20 04:57:31.866 elif diff_ms > MAX_WAIT_FOR_ENCRYPTION_START_MS:
2025-02-20 04:57:31.873 break
2025-02-20 04:57:31.878 time.sleep(0.1)
2025-02-20 04:57:31.883
2025-02-20 04:57:31.888 except DatabaseError as e:
2025-02-20 04:57:31.893 print( e.__str__() )
2025-02-20 04:57:31.899 print(e.gds_codes)
2025-02-20 04:57:31.905 finally:
2025-02-20 04:57:31.910 if rs:
2025-02-20 04:57:31.920 rs.close() # <<< EXPLICITLY CLOSING CURSOR RESULTS
2025-02-20 04:57:31.928 if ps:
2025-02-20 04:57:31.939 ps.free()
2025-02-20 04:57:31.952
2025-02-20 04:57:31.962 assert encryption_started, f'Could not find start of encryption process for {MAX_WAIT_FOR_ENCRYPTION_START_MS} ms.'
2025-02-20 04:57:31.970
2025-02-20 04:57:31.978 #-----------------------------------------------------------------
2025-02-20 04:57:31.985
2025-02-20 04:57:31.991 drop_db_when_running_encryption_sql = f"""
2025-02-20 04:57:31.998 set list on;
2025-02-20 04:57:32.005 select mon$crypt_state from mon$database;
2025-02-20 04:57:32.011 commit;
2025-02-20 04:57:32.019 set echo on;
2025-02-20 04:57:32.027 DROP DATABASE;
2025-02-20 04:57:32.035 set echo off;
2025-02-20 04:57:32.043 select lower(rdb$get_context('SYSTEM', 'DB_NAME')) as db_name from rdb$database;
2025-02-20 04:57:32.053 """
2025-02-20 04:57:32.060 tmp_sql.write_text(drop_db_when_running_encryption_sql)
2025-02-20 04:57:32.066
2025-02-20 04:57:32.077 drop_db_expected_stdout = f"""
2025-02-20 04:57:32.088 MON$CRYPT_STATE {IS_ENCRYPTING_STATE}
2025-02-20 04:57:32.097 DROP DATABASE;
2025-02-20 04:57:32.112 Statement failed, SQLSTATE = 42000
2025-02-20 04:57:32.125 unsuccessful metadata update
2025-02-20 04:57:32.135 -object is in use
2025-02-20 04:57:32.144 set echo off;
2025-02-20 04:57:32.157 DB_NAME {str(act_tmp.db.db_path).lower()}
2025-02-20 04:57:32.170 """
2025-02-20 04:57:32.181
2025-02-20 04:57:32.196 act_tmp.expected_stdout = drop_db_expected_stdout
2025-02-20 04:57:32.205
2025-02-20 04:57:32.216 # Get current state of encryption (again, just for additional check)
2025-02-20 04:57:32.228 # and attempt to DROP database:
2025-02-20 04:57:32.235 ###############################
2025-02-20 04:57:32.241 act_tmp.isql(switches=['-q', '-n'], input_file = tmp_sql, combine_output=True)
2025-02-20 04:57:32.249
2025-02-20 04:57:32.262 # If following assert fails then act_tmp.db.db_path was unexpectedly removed from disk:
2025-02-20 04:57:32.278 >           assert act_tmp.clean_stdout == act_tmp.clean_expected_stdout
2025-02-20 04:57:32.288 E           assert
2025-02-20 04:57:32.297 E               MON$CRYPT_STATE 3
2025-02-20 04:57:32.307 E               DROP DATABASE;
2025-02-20 04:57:32.315 E             - Statement failed, SQLSTATE = 42000
2025-02-20 04:57:32.327 E             + Statement failed, SQLSTATE = 40001
2025-02-20 04:57:32.341 E             - unsuccessful metadata update
2025-02-20 04:57:32.351 E             + lock time-out on wait transaction
2025-02-20 04:57:32.361 E               -object is in use
2025-02-20 04:57:32.368 E               set echo off;
2025-02-20 04:57:32.374 E               DB_NAME /var/tmp/qa_2024/test_11480/tmp_gh_7200.tmp.fdb
2025-02-20 04:57:32.382
2025-02-20 04:57:32.391 tests/bugs/gh_7200_test.py:214: AssertionError
2025-02-20 04:57:32.400 ---------------------------- Captured stdout setup -----------------------------
2025-02-20 04:57:32.411 Creating db: localhost:/var/tmp/qa_2024/test_11480/test.fdb [page_size=16384, sql_dialect=None, charset='NONE', user=SYSDBA, password=masterkey]
2025-02-20 04:57:32.423 Creating db: localhost:/var/tmp/qa_2024/test_11480/tmp_gh_7200.tmp.fdb [page_size=None, sql_dialect=None, charset='NONE', user=SYSDBA, password=masterkey]
3 #text
act = <firebird.qa.plugin.Action pytest object at [hex]>
act_tmp = <firebird.qa.plugin.Action pytest object at [hex]>
tmp_sql = PosixPath('/var/tmp/qa_2024/test_11480/tmp_gh_7200.tmp.sql')
tmp_log = PosixPath('/var/tmp/qa_2024/test_11480/tmp_gh_7200.tmp.log')
capsys = <_pytest.capture.CaptureFixture pytest object at [hex]>

    @pytest.mark.encryption
    @pytest.mark.version('>=4.0.2')
    def test_1(act: Action, act_tmp: Action, tmp_sql: Path, tmp_log: Path, capsys):
    
        init_sql = f"""
            recreate table test(s varchar({FLD_LEN}));
            commit;
            set term ^;
            execute block as
                declare n int = {N_ROWS};
            begin
                while (n>0) do
                begin
                    insert into test(s) values(lpad('', {FLD_LEN}, uuid_to_char(gen_uuid())));
                    n = n - 1;
                end
            end
            ^
            -- for debug, trace must be started with log_proc = true:
            create procedure sp_debug (a_point varchar(50)) as
            begin
                -- nop --
            end
            ^
            set term ;^
            commit;
            create index test_s on test(s);
        """
        act_tmp.isql(switches=['-q'], input = init_sql, combine_output = True)
        assert act_tmp.clean_stdout == ''
        act_tmp.reset()
    
        #############################################
        ###   c h a n g e     F W    t o    O N   ###
        #############################################
        act_tmp.db.set_sync_write()
    
    
        # QA_GLOBALS -- dict, is defined in qa/plugin.py, obtain settings
        # from act.files_dir/'test_config.ini':
        enc_settings = QA_GLOBALS['encryption']
    
        encryption_plugin = enc_settings['encryption_plugin'] # fbSampleDbCrypt
        encryption_holder  = enc_settings['encryption_holder'] # fbSampleKeyHolder
        encryption_key = enc_settings['encryption_key'] # Red
    
        sttm = f'alter database encrypt with "{encryption_plugin}" key "{encryption_key}";'
        tmp_sql.write_bytes(sttm.encode('utf-8'))
    
        with tmp_log.open('w') as f_log:
    
            p = subprocess.Popen( [ act_tmp.vars['isql'],
                                    '-q',
                                    '-user', act_tmp.db.user,
                                    '-password', act_tmp.db.password,
                                    act_tmp.db.dsn,
                                    '-i', tmp_sql
                                  ],
                                  stdout = f_log, stderr = subprocess.STDOUT
                                )
    
            encryption_started = False
            with act_tmp.db.connect() as con_watcher:
    
                ps, rs = None, None
                try:
                    custom_tpb = tpb(isolation = Isolation.SNAPSHOT, lock_timeout = -1)
                    tx_watcher = con_watcher.transaction_manager(custom_tpb)
                    cur_watcher = tx_watcher.cursor()
    
                    # 0 = non-encrypted; 1 = encrypted; 2 = is DEcrypting; 3 - is Encrypting
                    ps = cur_watcher.prepare('select mon$crypt_state from mon$database')
    
                    i = 0
                    da = dt.now()
                    while True:
                        # ::: NB ::: 'ps' returns data, i.e. this is SELECTABLE expression.
                        # We have to store result of cur.execute(<psInstance>) in order to
                        # close it explicitly.
                        # Otherwise AV can occur during Python garbage collection and this
                        # causes pytest to hang on its final point.
                        # Explained by hvlad, email 26.10.24 17:42
                        rs = cur_watcher.execute(ps)
                        for r in rs:
                            db_crypt_state = r[0]
    
                        tx_watcher.commit()
                        db = dt.now()
                        diff_ms = (db-da).seconds*1000 + (db-da).microseconds//1000
                        if db_crypt_state == IS_ENCRYPTING_STATE:
                            encryption_started = True
                            cur_watcher.call_procedure('sp_debug', ('encryption_started',))
                            break
                        elif diff_ms > MAX_WAIT_FOR_ENCRYPTION_START_MS:
                            break
                        time.sleep(0.1)
    
                except DatabaseError as e:
                    print( e.__str__() )
                    print(e.gds_codes)
                finally:
                    if rs:
                        rs.close() # <<< EXPLICITLY CLOSING CURSOR RESULTS
                    if ps:
                        ps.free()
    
            assert encryption_started, f'Could not find start of encryption process for {MAX_WAIT_FOR_ENCRYPTION_START_MS} ms.'
    
            #-----------------------------------------------------------------
    
            drop_db_when_running_encryption_sql = f"""
                set list on;
                select mon$crypt_state from mon$database;
                commit;
                set echo on;
                DROP DATABASE;
                set echo off;
                select lower(rdb$get_context('SYSTEM', 'DB_NAME')) as db_name from rdb$database;
            """
            tmp_sql.write_text(drop_db_when_running_encryption_sql)
    
            drop_db_expected_stdout = f"""
                MON$CRYPT_STATE {IS_ENCRYPTING_STATE}
                DROP DATABASE;
                Statement failed, SQLSTATE = 42000
                unsuccessful metadata update
                -object is in use
                set echo off;
                DB_NAME {str(act_tmp.db.db_path).lower()}
            """
    
            act_tmp.expected_stdout = drop_db_expected_stdout
    
            # Get current state of encryption (again, just for additional check)
            # and attempt to DROP database:
            ###############################
            act_tmp.isql(switches=['-q', '-n'], input_file = tmp_sql, combine_output=True)
    
            # If following assert fails then act_tmp.db.db_path was unexpectedly removed from disk:
>           assert act_tmp.clean_stdout == act_tmp.clean_expected_stdout
E           assert   
E               MON$CRYPT_STATE 3
E               DROP DATABASE;
E             - Statement failed, SQLSTATE = 42000
E             + Statement failed, SQLSTATE = 40001
E             - unsuccessful metadata update
E             + lock time-out on wait transaction
E               -object is in use
E               set echo off;
E               DB_NAME /var/tmp/qa_2024/test_11480/tmp_gh_7200.tmp.fdb

tests/bugs/gh_7200_test.py:214: AssertionError
Full history of outcomes and elapsed time, ms:
NN SNAP_INFO CS_outcome SS_outcome CS_run_time SS_run_time CS_run_beg CS_run_end SS_run_beg SS_run_end
1 4.0.6.3215 2025.06.25 6461d P P 1024 1014 2025.07.02 08:51:26.850 2025.07.02 08:51:27.874 2025.07.02 07:36:33.939 2025.07.02 07:36:34.953
2 4.0.6.3214 2025.06.21 e11f6 P P 1008 1044 2025.06.25 07:50:27.704 2025.06.25 07:50:28.712 2025.06.25 06:41:18.950 2025.06.25 06:41:19.994
3 4.0.6.3213 2025.06.14 f015c P P 1020 1018 2025.06.21 07:26:55.576 2025.06.21 07:26:56.596 2025.06.21 06:17:46.294 2025.06.21 06:17:47.312
4 4.0.6.3212 2025.06.11 bc50d P P 1025 1016 2025.06.14 08:36:11.514 2025.06.14 08:36:12.539 2025.06.14 07:15:51.373 2025.06.14 07:15:52.389
5 4.0.6.3208 2025.06.10 19fe3 P P 1018 1013 2025.06.11 07:13:11.251 2025.06.11 07:13:12.269 2025.06.11 05:54:26.054 2025.06.11 05:54:27.067
6 4.0.6.3207 2025.06.07 205ff P P 1024 1024 2025.06.10 07:15:46.350 2025.06.10 07:15:47.374 2025.06.10 05:55:46.630 2025.06.10 05:55:47.654
7 4.0.6.3206 2025.05.22 d7d10 P P 1026 1023 2025.06.06 07:21:28.084 2025.06.06 07:21:29.110 2025.06.06 06:01:20.388 2025.06.06 06:01:21.411
8 4.0.6.3205 2025.05.07 00148 P P 1025 1026 2025.05.21 07:15:31.917 2025.05.21 07:15:32.942 2025.05.21 05:54:39.567 2025.05.21 05:54:40.593
9 4.0.6.3204 2025.05.06 35b85 P P 1024 1012 2025.05.07 06:47:51.865 2025.05.07 06:47:52.889 2025.05.07 05:28:19.184 2025.05.07 05:28:20.196
10 4.0.6.3203 2025.05.05 c2cbd P P 1021 1018 2025.05.06 06:54:06.966 2025.05.06 06:54:07.987 2025.05.06 05:25:23.505 2025.05.06 05:25:24.523
11 4.0.6.3200 2025.04.18 7ef56 P P 1013 1035 2025.05.01 06:35:54.840 2025.05.01 06:35:55.853 2025.05.01 05:16:47.978 2025.05.01 05:16:49.013
12 4.0.6.3199 2025.04.14 33a10 P P 1033 1025 2025.04.18 06:46:49.499 2025.04.18 06:46:50.532 2025.04.18 05:27:15.604 2025.04.18 05:27:16.629
13 4.0.6.3198 2025.04.13 64a7f P P 1037 1022 2025.04.14 05:52:16.170 2025.04.14 05:52:17.207 2025.04.14 04:38:58.836 2025.04.14 04:38:59.858
14 4.0.6.3195 2025.03.28 b9faf P P 1035 1016 2025.04.13 05:50:19.622 2025.04.13 05:50:20.657 2025.04.13 04:27:37.639 2025.04.13 04:27:38.655
15 4.0.6.3194 2025.03.26 912aa P P 1025 1024 2025.03.28 06:21:20.298 2025.03.28 06:21:21.323 2025.03.28 05:04:29.674 2025.03.28 05:04:30.698
16 4.0.6.3193 2025.03.20 80234 P P 1026 1014 2025.03.24 06:39:42.966 2025.03.24 06:39:43.992 2025.03.24 05:18:31.333 2025.03.24 05:18:32.347
17 4.0.6.3192 2025.03.13 2a9da P P 3082 2895 2025.03.17 03:21:40.865 2025.03.17 03:21:43.947 2025.03.17 02:01:02.628 2025.03.17 02:01:05.523
18 4.0.6.3191 2025.03.10 3d9fd P P 3064 2864 2025.03.13 06:30:30.887 2025.03.13 06:30:33.951 2025.03.13 05:08:37.351 2025.03.13 05:08:40.215
19 4.0.6.3190 2025.02.25 c9928 P P 3043 2859 2025.03.09 06:16:24.131 2025.03.09 06:16:27.174 2025.03.09 04:56:00.446 2025.03.09 04:56:03.305
20 4.0.6.3189 2025.02.22 3fb0b P P 3051 2868 2025.02.25 06:06:25.607 2025.02.25 06:06:28.658 2025.02.25 04:47:18.486 2025.02.25 04:47:21.354
21 4.0.6.3188 2025.02.21 8ee1c P P 2996 2842 2025.02.22 06:05:51.046 2025.02.22 06:05:54.042 2025.02.22 04:43:31.897 2025.02.22 04:43:34.739
22 4.0.6.3186 2025.02.19 92cb6 P F 2996 2800 2025.02.20 03:06:35.565 2025.02.20 03:06:38.561 2025.02.20 01:38:38.464 2025.02.20 01:38:41.264
23 4.0.6.3185 2025.02.16 9cac4 P F 2916 3096 2025.02.17 00:04:30.134 2025.02.17 00:04:33.050 2025.02.16 22:11:36.657 2025.02.16 22:11:39.753
24 4.0.6.3183 2025.02.04 bf738 P P 2966 2817 2025.02.14 06:18:40.474 2025.02.14 06:18:43.440 2025.02.14 04:58:09.538 2025.02.14 04:58:12.355
25 4.0.6.3181 2025.02.01 00b64 P P 3062 2919 2025.02.04 06:21:41.315 2025.02.04 06:21:44.377 2025.02.04 05:01:57.947 2025.02.04 05:02:00.866
26 4.0.6.3180 2025.01.27 2edb8 P P 3080 2827 2025.01.28 06:22:27.409 2025.01.28 06:22:30.489 2025.01.28 04:52:34.698 2025.01.28 04:52:37.525
27 4.0.6.3179 2025.01.24 008d4 P P 3036 2863 2025.01.25 06:08:14.178 2025.01.25 06:08:17.214 2025.01.25 04:48:23.493 2025.01.25 04:48:26.356
28 4.0.6.3178 2025.01.20 ec94d P P 3003 2849 2025.01.24 06:07:52.091 2025.01.24 06:07:55.094 2025.01.24 04:48:21.808 2025.01.24 04:48:24.657
29 4.0.6.3176 2025.01.16 79cc1 P P 2962 2797 2025.01.20 05:57:33.576 2025.01.20 05:57:36.538 2025.01.20 04:39:42.041 2025.01.20 04:39:44.838
30 4.0.6.3175 2025.01.15 91361 P P 3059 2809 2025.01.16 05:56:46.245 2025.01.16 05:56:49.304 2025.01.16 04:39:16.970 2025.01.16 04:39:19.779
31 4.0.6.3174 2024.12.23 ffd39 P P 3013 2881 2025.01.14 06:11:52.703 2025.01.14 06:11:55.716 2025.01.14 04:43:33.851 2025.01.14 04:43:36.732
32 4.0.6.3173 2024.12.19 60b32 P P 2893 2665 2024.12.21 17:39:31.957 2024.12.21 17:39:34.850 2024.12.21 16:36:58.487 2024.12.21 16:37:01.152
33 4.0.6.3172 2024.12.11 33f5d P P 2805 2649 2024.12.16 04:32:50.064 2024.12.16 04:32:52.869 2024.12.16 03:30:12.449 2024.12.16 03:30:15.098
34 4.0.6.3171 2024.12.10 ab1d4 P P 2846 2665 2024.12.11 04:19:09.915 2024.12.11 04:19:12.761 2024.12.11 03:16:48.371 2024.12.11 03:16:51.036
35 4.0.6.3170 2024.12.02 68abd P P 2936 2673 2024.12.04 04:08:58.207 2024.12.04 04:09:01.143 2024.12.04 03:06:28.216 2024.12.04 03:06:30.889
36 4.0.6.3169 2024.11.28 1673f P P 2853 2686 2024.11.30 04:32:38.028 2024.11.30 04:32:40.881 2024.11.30 03:20:23.914 2024.11.30 03:20:26.600
37 4.0.6.3168 2024.11.07 f67e2 P P 2842 2652 2024.11.27 04:06:45.792 2024.11.27 04:06:48.634 2024.11.27 02:57:14.613 2024.11.27 02:57:17.265
38 4.0.6.3167 2024.11.04 c9228 P P 2827 2646 2024.11.05 05:44:55.321 2024.11.05 05:44:58.148 2024.11.05 04:45:55.885 2024.11.05 04:45:58.531
39 4.0.6.3165 2024.10.23 b0c36 P P 2823 2691 2024.11.04 05:49:16.256 2024.11.04 05:49:19.079 2024.11.04 04:49:41.736 2024.11.04 04:49:44.427
40 4.0.6.3164 2024.10.17 35344 P P 2862 2647 2024.10.23 06:03:57.183 2024.10.23 06:04:00.045 2024.10.23 05:02:13.289 2024.10.23 05:02:15.936
41 4.0.6.3163 2024.10.14 2e35e P P 2844 2618 2024.10.15 05:51:26.495 2024.10.15 05:51:29.339 2024.10.15 04:50:58.432 2024.10.15 04:51:01.050
42 4.0.6.3161 2024.10.05 91502 P P 2890 2739 2024.10.06 03:55:01.546 2024.10.06 03:55:04.436 2024.10.06 02:50:31.097 2024.10.06 02:50:33.836
43 4.0.6.3159 2024.10.01 85136 P P 3058 2679 2024.10.02 01:18:48.066 2024.10.02 01:18:51.124 2024.10.01 23:56:55.465 2024.10.01 23:56:58.144
44 4.0.6.3158 2024.09.30 d2c33 P P 2846 2673 2024.10.01 05:59:38.352 2024.10.01 05:59:41.198 2024.10.01 04:58:45.972 2024.10.01 04:58:48.645
45 4.0.6.3157 2024.09.24 3bb2e P P 2886 2726 2024.09.30 06:04:57.743 2024.09.30 06:05:00.629 2024.09.30 05:02:00.108 2024.09.30 05:02:02.834
46 4.0.6.3156 2024.09.21 f6416 P P 2888 2674 2024.09.24 04:10:26.928 2024.09.24 04:10:29.816 2024.09.24 03:07:53.692 2024.09.24 03:07:56.366
47 4.0.6.3155 2024.09.20 1ed0c P P 2883 2731 2024.09.21 04:05:10.453 2024.09.21 04:05:13.336 2024.09.21 03:02:59.614 2024.09.21 03:03:02.345
48 4.0.6.3151 2024.09.09 1b77f P P 3141 2889 2024.09.17 06:38:32.513 2024.09.17 06:38:35.654 2024.09.17 05:06:26.708 2024.09.17 05:06:29.597
49 4.0.6.3149 2024.09.04 32ce9 P P 3235 2993 2024.09.06 06:45:55.030 2024.09.06 06:45:58.265 2024.09.06 05:14:26.357 2024.09.06 05:14:29.350
50 4.0.6.3148 2024.09.02 4be5c P P 3219 3060 2024.09.04 08:52:11.218 2024.09.04 08:52:14.437 2024.09.04 07:03:30.268 2024.09.04 07:03:33.328
51 4.0.6.3147 2024.08.30 5ffd7 P P 3333 3450 2024.09.02 08:08:14.295 2024.09.02 08:08:17.628 2024.09.02 06:17:19.456 2024.09.02 06:17:22.906
52 4.0.6.3146 2024.08.27 38582 P P 3821 3021 2024.08.30 07:52:27.686 2024.08.30 07:52:31.507 2024.08.30 06:01:53.727 2024.08.30 06:01:56.748
53 4.0.6.3145 2024.08.21 87240 P P 3284 2955 2024.08.27 07:26:56.525 2024.08.27 07:26:59.809 2024.08.27 04:47:22.628 2024.08.27 04:47:25.583
54 4.0.6.3144 2024.08.20 5a3b7 P P 3251 3035 2024.08.21 07:31:34.194 2024.08.21 07:31:37.445 2024.08.21 05:47:36.690 2024.08.21 05:47:39.725
55 4.0.6.3142 2024.08.11 b9f39 P P 3002 2835 2024.08.19 04:38:10.078 2024.08.19 04:38:13.080 2024.08.19 03:27:19.250 2024.08.19 03:27:22.085
56 4.0.6.3141 2024.08.09 6d39f P P 3054 2749 2024.08.10 04:30:59.018 2024.08.10 04:31:02.072 2024.08.10 03:21:31.516 2024.08.10 03:21:34.265
57 4.0.5.3140 2024.08.06 64f3a P P 3064 2733 2024.08.09 04:26:31.423 2024.08.09 04:26:34.487 2024.08.09 03:17:07.035 2024.08.09 03:17:09.768
58 4.0.5.3139 2024.08.01 3bc8b P P 2791 2651 2024.08.06 03:40:00.037 2024.08.06 03:40:02.828 2024.08.06 02:38:11.442 2024.08.06 02:38:14.093
59 4.0.5.3136 2024.07.31 e41ec P P 2799 2583 2024.08.01 03:39:09.111 2024.08.01 03:39:11.910 2024.08.01 02:38:02.330 2024.08.01 02:38:04.913
60 4.0.5.3135 2024.07.26 b4981 P P 2833 2584 2024.07.30 03:36:26.902 2024.07.30 03:36:29.735 2024.07.30 02:35:39.724 2024.07.30 02:35:42.308
61 4.0.5.3129 2024.07.24 b8184 P P 2966 2658 2024.07.25 03:34:29.079 2024.07.25 03:34:32.045 2024.07.25 02:33:28.207 2024.07.25 02:33:30.865
62 4.0.5.3128 2024.07.13 aa318 P P 3007 2610 2024.07.24 03:40:38.511 2024.07.24 03:40:41.518 2024.07.24 02:39:33.649 2024.07.24 02:39:36.259
63 4.0.5.3127 2024.07.10 eace3 P P 2836 2628 2024.07.13 03:32:48.145 2024.07.13 03:32:50.981 2024.07.13 02:31:20.230 2024.07.13 02:31:22.858
64 4.0.5.3123 2024.06.24 c27c6 P P 3036 2630 2024.07.10 03:25:30.075 2024.07.10 03:25:33.111 2024.07.10 02:25:56.011 2024.07.10 02:25:58.641
65 4.0.5.3112 2024.06.13 d2e61 P F 2971 2637 2024.06.22 03:26:18.290 2024.06.22 03:26:21.261 2024.06.22 02:27:13.788 2024.06.22 02:27:16.425
66 4.0.5.3098 2024.05.09 4c3ec P P 2917 2708 2024.05.14 08:00:32.512 2024.05.14 08:00:35.429 2024.05.14 06:58:08.134 2024.05.14 06:58:10.842
67 4.0.5.3092 2024.05.06 bbc47 P P 2723 2596 2024.05.08 19:18:55.537 2024.05.08 19:18:58.260 2024.05.08 18:25:09.653 2024.05.08 18:25:12.249
68 4.0.5.3091 2024.04.29 062a7 P P 2681 2565 2024.05.01 12:03:09.971 2024.05.01 12:03:12.652 2024.05.01 11:10:21.508 2024.05.01 11:10:24.073
69 4.0.5.3089 2024.04.19 08c92 P P 2710 2550 2024.04.27 14:02:16.403 2024.04.27 14:02:19.113 2024.04.27 13:08:35.531 2024.04.27 13:08:38.081

Elapsed time, ms. Chart for last 69 runs:

Last commits information (all timestamps in UTC):