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   
    WHO              ATT      ID EVT                                      ACTIVE_CNT IDLE_CNT CLNT_BIN
    ============ ======= ======= ======================================== ========== ======== ========
    TMP_ECP_FREQ       1       1 NEW                                               0        0 python
    TMP_ECP_FREQ       2       2 NEW                                               0        0 python
    TMP_ECP_FREQ       3       3 NEW                                               0        0 python
    TMP_ECP_FREQ       4       4 NEW                                               0        0 firebird
    TMP_ECP_FREQ       4       5 RUN DML                                           0        0 firebird
    TMP_ECP_FREQ       4       6 MOVE INTO POOL: ACTIVE -> IDLE                    0        0 firebird
    TMP_ECP_FREQ       4       7 TAKE FROM POOL: IDLE -> ACTIVE                    0        0 firebird
    TMP_ECP_FREQ       1       8 BYE                                               0        1 python
    TMP_ECP_FREQ       5       9 NEW                                               0        0 firebird
    TMP_ECP_FREQ       5      10 RUN DML                                           0        0 firebird
    TMP_ECP_FREQ       5      11 MOVE INTO POOL: ACTIVE -> IDLE                    0        0 firebird
    TMP_ECP_FREQ       5      12 TAKE FROM POOL: IDLE -> ACTIVE                    0        0 firebird
    TMP_ECP_FREQ       4      13 BYE                                               0        0 firebird
    TMP_ECP_FREQ       2      14 BYE                                               0        1 python
    TMP_ECP_FREQ       6      15 NEW                                               0        0 firebird
    TMP_ECP_FREQ       6      16 RUN DML                                           0        0 firebird
    TMP_ECP_FREQ       6      17 MOVE INTO POOL: ACTIVE -> IDLE                    0        0 firebird
    TMP_ECP_FREQ       6      18 TAKE FROM POOL: IDLE -> ACTIVE                    0        0 firebird
    TMP_ECP_FREQ       6      19 BYE                                               0        0 firebird
  - TMP_ECP_FREQ       3      20 BYE                                               0        0 python
  - TMP_ECP_FREQ       5      21 BYE                                               0        0 firebird
  + TMP_ECP_FREQ       5      20 BYE                                               0        0 firebird
  + TMP_ECP_FREQ       3      21 BYE                                               0        0 python
    TMP_ECP_RARE       1       1 NEW                                               0        0 python
    TMP_ECP_RARE       2       2 NEW                                               0        0 python
    TMP_ECP_RARE       3       3 NEW                                               0        0 python
    TMP_ECP_RARE       4       4 NEW                                               0        0 firebird
    TMP_ECP_RARE       4       5 RUN DML                                           0        0 firebird
    TMP_ECP_RARE       4       6 MOVE INTO POOL: ACTIVE -> IDLE                    0        0 firebird
    TMP_ECP_RARE       4       7 TAKE FROM POOL: IDLE -> ACTIVE                    0        0 firebird
    TMP_ECP_RARE       4       8 BYE                                               0        0 firebird
    TMP_ECP_RARE       1       9 BYE                                               0        0 python
    TMP_ECP_RARE       5      10 NEW                                               0        0 firebird
    TMP_ECP_RARE       5      11 RUN DML                                           0        0 firebird
    TMP_ECP_RARE       5      12 MOVE INTO POOL: ACTIVE -> IDLE                    0        0 firebird
    TMP_ECP_RARE       5      13 TAKE FROM POOL: IDLE -> ACTIVE                    0        0 firebird
    TMP_ECP_RARE       5      14 BYE                                               0        0 firebird
    TMP_ECP_RARE       2      15 BYE                                               0        0 python
    TMP_ECP_RARE       6      16 NEW                                               0        0 firebird
    TMP_ECP_RARE       6      17 RUN DML                                           0        0 firebird
    TMP_ECP_RARE       6      18 MOVE INTO POOL: ACTIVE -> IDLE                    0        0 firebird
    TMP_ECP_RARE       6      19 TAKE FROM POOL: IDLE -> ACTIVE                    0        0 firebird
    TMP_ECP_RARE       6      20 BYE                                               0        0 firebird
    TMP_ECP_RARE       3      21 BYE                                               0        0 python

LOG DETAILS:

2025-06-10 07:41:53.498
2025-06-10 07:41:53.504 act = <firebird.qa.plugin.Action object at [hex]>
2025-06-10 07:41:53.509 tmp_user_freq = <firebird.qa.plugin.User object at [hex]>
2025-06-10 07:41:53.515 tmp_user_rare = <firebird.qa.plugin.User object at [hex]>
2025-06-10 07:41:53.521 tmp_cleaner_role = <firebird.qa.plugin.Role object at [hex]>
2025-06-10 07:41:53.526 capsys = <_pytest.capture.CaptureFixture object at [hex]>
2025-06-10 07:41:53.531
2025-06-10 07:41:53.536 @pytest.mark.es_eds
2025-06-10 07:41:53.542 @pytest.mark.version('>=4.0')
2025-06-10 07:41:53.547 def test_1(act: Action, tmp_user_freq: User, tmp_user_rare: User, tmp_cleaner_role: Role, capsys):
2025-06-10 07:41:53.553
2025-06-10 07:41:53.558 # [doc] state of external connections pool could be queried using ...:
2025-06-10 07:41:53.563 # - EXT_CONN_POOL_SIZE			pool size
2025-06-10 07:41:53.569 # - EXT_CONN_POOL_LIFETIME		idle connection lifetime, in seconds
2025-06-10 07:41:53.574 ECP_SIZE, ECP_LIFE = -1, -1
2025-06-10 07:41:53.579 with act.db.connect() as con:
2025-06-10 07:41:53.584 with con.cursor() as cur:
2025-06-10 07:41:53.590 cur.execute("select cast(rdb$get_context('SYSTEM', 'EXT_CONN_POOL_SIZE') as int), cast(rdb$get_context('SYSTEM', 'EXT_CONN_POOL_LIFETIME') as int) from rdb$database")
2025-06-10 07:41:53.594 ECP_SIZE, ECP_LIFE = cur.fetchone()
2025-06-10 07:41:53.600 assert ECP_SIZE > 1;
2025-06-10 07:41:53.605
2025-06-10 07:41:53.610 SERVER_MODE = act.get_server_architecture()
2025-06-10 07:41:53.615 sql_init = f'''
2025-06-10 07:41:53.620 set bail on;
2025-06-10 07:41:53.625 set list on;
2025-06-10 07:41:53.630 set wng off;
2025-06-10 07:41:53.634 alter database set linger to {ECP_LIFE+ADD_DELAY_FOR_RARE+2};
2025-06-10 07:41:53.639 alter role {tmp_cleaner_role.name} set system privileges to MODIFY_EXT_CONN_POOL;
2025-06-10 07:41:53.645 commit;
2025-06-10 07:41:53.650
2025-06-10 07:41:53.655 grant default {tmp_cleaner_role.name} to user {tmp_user_freq.name};
2025-06-10 07:41:53.660 grant default {tmp_cleaner_role.name} to user {tmp_user_rare.name};
2025-06-10 07:41:53.665 commit;
2025-06-10 07:41:53.670
2025-06-10 07:41:53.675 set term ^;
2025-06-10 07:41:53.680 create function fn_get_bin_name() returns varchar(255) as
2025-06-10 07:41:53.685 declare v_bin_name varchar(255);
2025-06-10 07:41:53.690 begin
2025-06-10 07:41:53.696 v_bin_name = rdb$get_context('SYSTEM','CLIENT_PROCESS');
2025-06-10 07:41:53.701
2025-06-10 07:41:53.706 -- ::: NOTE ::: Python binary can have numeric suffixes on Linux:
2025-06-10 07:41:53.712 if (v_bin_name similar to '%((\\python([[:DIGIT:]]+%)?.exe)|(/python([[:DIGIT:]]+%)?))') then
2025-06-10 07:41:53.717 return 'python'; -- '/usr/bin/python3.9' ==> 'python'
2025-06-10 07:41:53.722
2025-06-10 07:41:53.727 if (v_bin_name similar to '%((\\firebird([[:DIGIT:]]+%)?.exe)|(/python([[:DIGIT:]]+%)?))') then
2025-06-10 07:41:53.733 return 'firebird';
2025-06-10 07:41:53.738
2025-06-10 07:41:53.743 -- Extracts file name from full path of client binary process.
2025-06-10 07:41:53.749 -- For Windows: removes extension, in order returning name be the same as on Linux.
2025-06-10 07:41:53.754 -- 'c:\\program files\\firebird30\\firebird.exe' --> 'firebird'
2025-06-10 07:41:53.759 -- '/opt/firebird/bin/firebird'                  --> 'firebird'
2025-06-10 07:41:53.765 -- ::: NOTE ::: backslash must be duplicated when using this DDL in any Python
2025-06-10 07:41:53.770 -- environment otherwise it will be swallowed
2025-06-10 07:41:53.776 return
2025-06-10 07:41:53.781 (
2025-06-10 07:41:53.786 select
2025-06-10 07:41:53.791 --p
2025-06-10 07:41:53.797 --,r
2025-06-10 07:41:53.802 --,ext_pos
2025-06-10 07:41:53.808 --,n
2025-06-10 07:41:53.813 --,x
2025-06-10 07:41:53.818 reverse(left(x,n)) as clnt_bin
2025-06-10 07:41:53.824 -- reverse(x)  as clnt_bin
2025-06-10 07:41:53.829 from
2025-06-10 07:41:53.835 (
2025-06-10 07:41:53.841 select
2025-06-10 07:41:53.846 p
2025-06-10 07:41:53.851 ,reverse(p) r
2025-06-10 07:41:53.856 ,ext_pos
2025-06-10 07:41:53.861 ,substring(reverse(p) from iif( is_win, ext_pos+1, 1) ) x
2025-06-10 07:41:53.866 ,position( '|' in replace(replace(reverse( p ),'\\','|'),'/','|') ) - iif(is_win, ext_pos+1, 1) as n
2025-06-10 07:41:53.870 from (
2025-06-10 07:41:53.875 select
2025-06-10 07:41:53.880 trim(p) as p
2025-06-10 07:41:53.885 ,position( '\\' in p ) > 0 as is_win
2025-06-10 07:41:53.890 ,iif( position( '\\' in p ) > 0, position('.' in reverse(trim(p))), 0) as ext_pos
2025-06-10 07:41:53.895 from (
2025-06-10 07:41:53.900 select rdb$get_context('SYSTEM','CLIENT_PROCESS') as p from rdb$database
2025-06-10 07:41:53.905 )
2025-06-10 07:41:53.910 )
2025-06-10 07:41:53.916 )
2025-06-10 07:41:53.922 );
2025-06-10 07:41:53.928
2025-06-10 07:41:53.933 end
2025-06-10 07:41:53.938 ^
2025-06-10 07:41:53.943 set term ;^
2025-06-10 07:41:53.948
2025-06-10 07:41:53.953
2025-06-10 07:41:53.958 create table ecp_audit(
2025-06-10 07:41:53.963 id smallint generated by default as identity constraint pk_audit primary key
2025-06-10 07:41:53.968 ,srvmode varchar(12) -- 'Super' / 'SuperClassic' / 'Classic'
2025-06-10 07:41:53.973 ,who varchar(12) default current_user -- 'TMP_ECP_FREQ' / 'TMP_ECP_RARE' / 'SYSDBA'
2025-06-10 07:41:53.978 ,evt varchar(40) not null
2025-06-10 07:41:53.983 ,att smallint default current_connection
2025-06-10 07:41:53.988 ,trn smallint default current_transaction
2025-06-10 07:41:53.993 ,dts timestamp default 'now'
2025-06-10 07:41:53.999 ,pool_active_count smallint
2025-06-10 07:41:54.004 ,pool_idle_count smallint
2025-06-10 07:41:54.010 ,clnt_bin varchar(8)
2025-06-10 07:41:54.016 ,aux_info varchar(100)
2025-06-10 07:41:54.021 );
2025-06-10 07:41:54.027
2025-06-10 07:41:54.033 create view v_ecp_audit as
2025-06-10 07:41:54.039 select
2025-06-10 07:41:54.044 who
2025-06-10 07:41:54.049 ,att
2025-06-10 07:41:54.055 ,id
2025-06-10 07:41:54.061 ,evt
2025-06-10 07:41:54.066 ,active_cnt
2025-06-10 07:41:54.071 ,idle_cnt
2025-06-10 07:41:54.077 ,clnt_bin
2025-06-10 07:41:54.082 from (
2025-06-10 07:41:54.088 select
2025-06-10 07:41:54.094 srvmode
2025-06-10 07:41:54.100 ,who
2025-06-10 07:41:54.105 ,cast(dense_rank()over(partition by who order by att) as smallint) as att
2025-06-10 07:41:54.111 ,cast(dense_rank()over(partition by who order by id) as smallint) as id
2025-06-10 07:41:54.116 ,evt
2025-06-10 07:41:54.122 ,trn
2025-06-10 07:41:54.127 ,pool_active_count as active_cnt
2025-06-10 07:41:54.133 ,pool_idle_count as idle_cnt
2025-06-10 07:41:54.138 ,clnt_bin
2025-06-10 07:41:54.143 from ecp_audit
2025-06-10 07:41:54.149 )
2025-06-10 07:41:54.155 order by who, id
2025-06-10 07:41:54.161 ;
2025-06-10 07:41:54.169
2025-06-10 07:41:54.176
2025-06-10 07:41:54.184 grant select,insert on ecp_audit to public;
2025-06-10 07:41:54.191 grant select on v_ecp_audit to public;
2025-06-10 07:41:54.197 commit;
2025-06-10 07:41:54.203
2025-06-10 07:41:54.209 set term ^;
2025-06-10 07:41:54.217 create or alter trigger trg_aud_bi for ecp_audit active before insert sql security definer as
2025-06-10 07:41:54.225 declare v_srvmode varchar(30);
2025-06-10 07:41:54.232 declare p int;
2025-06-10 07:41:54.247 begin
2025-06-10 07:41:54.258 new.srvmode = '{SERVER_MODE}';
2025-06-10 07:41:54.267 new.pool_active_count = rdb$get_context('SYSTEM','EXT_CONN_POOL_ACTIVE_COUNT');
2025-06-10 07:41:54.275 new.pool_idle_count = rdb$get_context('SYSTEM','EXT_CONN_POOL_IDLE_COUNT');
2025-06-10 07:41:54.282 new.clnt_bin = right(fn_get_bin_name(), 8);
2025-06-10 07:41:54.289 -- right(rdb$get_context('SYSTEM','CLIENT_PROCESS'),15);
2025-06-10 07:41:54.297 end
2025-06-10 07:41:54.311 ^
2025-06-10 07:41:54.322
2025-06-10 07:41:54.336 create or alter trigger trg_connect inactive on connect sql security definer as
2025-06-10 07:41:54.349 declare p smallint;
2025-06-10 07:41:54.360 begin
2025-06-10 07:41:54.369 if (current_user <> '{act.db.user}') then
2025-06-10 07:41:54.377 begin
2025-06-10 07:41:54.383
2025-06-10 07:41:54.390 insert into ecp_audit(
2025-06-10 07:41:54.397 evt
2025-06-10 07:41:54.403 ) values (
2025-06-10 07:41:54.410 iif(resetting, 'TAKE FROM POOL: IDLE -> ACTIVE', 'NEW')
2025-06-10 07:41:54.422 );
2025-06-10 07:41:54.433 end
2025-06-10 07:41:54.441 end
2025-06-10 07:41:54.447 ^
2025-06-10 07:41:54.455
2025-06-10 07:41:54.462 create or alter trigger trg_disconnect inactive on disconnect sql security definer as
2025-06-10 07:41:54.471 begin
2025-06-10 07:41:54.479 if (current_user <> '{act.db.user}') then
2025-06-10 07:41:54.487 begin
2025-06-10 07:41:54.495 insert into ecp_audit(
2025-06-10 07:41:54.502 evt
2025-06-10 07:41:54.514 ) values (
2025-06-10 07:41:54.523 iif(resetting, 'MOVE INTO POOL: ACTIVE -> IDLE', 'BYE')
2025-06-10 07:41:54.530 );
2025-06-10 07:41:54.543 end
2025-06-10 07:41:54.556 end
2025-06-10 07:41:54.563 ^
2025-06-10 07:41:54.570 set term ;^
2025-06-10 07:41:54.582 commit;
2025-06-10 07:41:54.593 alter trigger trg_connect active;
2025-06-10 07:41:54.601 alter trigger trg_disconnect active;
2025-06-10 07:41:54.609 commit;
2025-06-10 07:41:54.615 '''
2025-06-10 07:41:54.622
2025-06-10 07:41:54.629 act.expected_stdout = ''
2025-06-10 07:41:54.635 act.isql(switches = ['-q'], input = sql_init, combine_output = True, io_enc = locale.getpreferredencoding())
2025-06-10 07:41:54.642 assert act.clean_stdout == act.clean_expected_stdout
2025-06-10 07:41:54.649 act.reset()
2025-06-10 07:41:54.655
2025-06-10 07:41:54.662 #-----------------------------------------------------
2025-06-10 07:41:54.669
2025-06-10 07:41:54.676 sql_for_run = '''
2025-06-10 07:41:54.683 execute block as
2025-06-10 07:41:54.691 declare c int;
2025-06-10 07:41:54.704 begin
2025-06-10 07:41:54.719 execute statement ( q'{ insert into ecp_audit( evt ) values( 'RUN DML') }' )
2025-06-10 07:41:54.735 on external
2025-06-10 07:41:54.745 'localhost:' || rdb$get_context('SYSTEM','DB_NAME')
2025-06-10 07:41:54.753 with autonomous transaction -- <<< !!! THIS IS MANDATORY IF WE WANT TO USE EXT CONN POOL !!! <<<
2025-06-10 07:41:54.765 as user current_user password '123'
2025-06-10 07:41:54.776 ;
2025-06-10 07:41:54.785 end
2025-06-10 07:41:54.792 '''
2025-06-10 07:41:54.799
2025-06-10 07:41:54.811 for usr in (tmp_user_freq, tmp_user_rare):
2025-06-10 07:41:54.819 conn_list = []
2025-06-10 07:41:54.834 for i in range(0, ITER_LOOP_CNT):
2025-06-10 07:41:54.847 conn_list.append( act.db.connect(user = usr.name, password = usr.password) )
2025-06-10 07:41:54.857
2025-06-10 07:41:54.866 for i,c in enumerate(conn_list):
2025-06-10 07:41:54.873
2025-06-10 07:41:54.879 # ::: NOTE :::
2025-06-10 07:41:54.885 # ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
2025-06-10 07:41:54.891 # On every iteration DIFFERENT connection is used for run ES/EDS,
2025-06-10 07:41:54.898 # but all of them use the same user/password/role, so apropriate
2025-06-10 07:41:54.905 # item in the ExtConnPool can be used to run this statement.
2025-06-10 07:41:54.912 # But this will be so only for user = 'FREQ' because he does such
2025-06-10 07:41:54.920 # actions 'frequently': each (<ECP_LIFE> - 2) seconds.
2025-06-10 07:41:54.926 # For user 'RARE' new attachment will be created every time when
2025-06-10 07:41:54.939 # he runs ES/EDS because he does that 'rarely' and idle connection
2025-06-10 07:41:54.950 # (from his previous iteration) is removed from ExtConnPool due to
2025-06-10 07:41:54.963 # expiration of ExtConnPoolLifeTime:
2025-06-10 07:41:54.971 # ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
2025-06-10 07:41:54.978 try:
2025-06-10 07:41:54.985 #c.execute_immediate( sql_for_run )
2025-06-10 07:41:54.991 with c.cursor() as cur:
2025-06-10 07:41:55.006 cur.execute(sql_for_run)
2025-06-10 07:41:55.017
2025-06-10 07:41:55.028 if i < len(conn_list)-1:
2025-06-10 07:41:55.039 time.sleep( 1 if usr == tmp_user_freq else ECP_LIFE + ADD_DELAY_FOR_RARE )
2025-06-10 07:41:55.049 else:
2025-06-10 07:41:55.062 c.execute_immediate( 'ALTER EXTERNAL CONNECTIONS POOL CLEAR ALL' )
2025-06-10 07:41:55.072 finally:
2025-06-10 07:41:55.081 if c:
2025-06-10 07:41:55.088 c.close()
2025-06-10 07:41:55.096
2025-06-10 07:41:55.103 if SERVER_MODE == 'Classic':
2025-06-10 07:41:55.110 act.expected_stdout = """
2025-06-10 07:41:55.116 WHO              ATT      ID EVT                                      ACTIVE_CNT IDLE_CNT CLNT_BIN
2025-06-10 07:41:55.122 ============ ======= ======= ======================================== ========== ======== ========
2025-06-10 07:41:55.127 TMP_ECP_FREQ       1       1 NEW                                               0        0 python
2025-06-10 07:41:55.132 TMP_ECP_FREQ       2       2 NEW                                               0        0 python
2025-06-10 07:41:55.138 TMP_ECP_FREQ       3       3 NEW                                               0        0 python
2025-06-10 07:41:55.144 TMP_ECP_FREQ       4       4 NEW                                               0        0 firebird
2025-06-10 07:41:55.159 TMP_ECP_FREQ       4       5 RUN DML                                           0        0 firebird
2025-06-10 07:41:55.174 TMP_ECP_FREQ       4       6 MOVE INTO POOL: ACTIVE -> IDLE                    0        0 firebird
2025-06-10 07:41:55.185 TMP_ECP_FREQ       4       7 TAKE FROM POOL: IDLE -> ACTIVE                    0        0 firebird
2025-06-10 07:41:55.200 TMP_ECP_FREQ       1       8 BYE                                               0        1 python
2025-06-10 07:41:55.211 TMP_ECP_FREQ       5       9 NEW                                               0        0 firebird
2025-06-10 07:41:55.224 TMP_ECP_FREQ       5      10 RUN DML                                           0        0 firebird
2025-06-10 07:41:55.233 TMP_ECP_FREQ       5      11 MOVE INTO POOL: ACTIVE -> IDLE                    0        0 firebird
2025-06-10 07:41:55.241 TMP_ECP_FREQ       5      12 TAKE FROM POOL: IDLE -> ACTIVE                    0        0 firebird
2025-06-10 07:41:55.249 TMP_ECP_FREQ       4      13 BYE                                               0        0 firebird
2025-06-10 07:41:55.261 TMP_ECP_FREQ       2      14 BYE                                               0        1 python
2025-06-10 07:41:55.273 TMP_ECP_FREQ       6      15 NEW                                               0        0 firebird
2025-06-10 07:41:55.285 TMP_ECP_FREQ       6      16 RUN DML                                           0        0 firebird
2025-06-10 07:41:55.294 TMP_ECP_FREQ       6      17 MOVE INTO POOL: ACTIVE -> IDLE                    0        0 firebird
2025-06-10 07:41:55.304 TMP_ECP_FREQ       6      18 TAKE FROM POOL: IDLE -> ACTIVE                    0        0 firebird
2025-06-10 07:41:55.317 TMP_ECP_FREQ       6      19 BYE                                               0        0 firebird
2025-06-10 07:41:55.325 TMP_ECP_FREQ       3      20 BYE                                               0        0 python
2025-06-10 07:41:55.330 TMP_ECP_FREQ       5      21 BYE                                               0        0 firebird
2025-06-10 07:41:55.335 TMP_ECP_RARE       1       1 NEW                                               0        0 python
2025-06-10 07:41:55.340 TMP_ECP_RARE       2       2 NEW                                               0        0 python
2025-06-10 07:41:55.345 TMP_ECP_RARE       3       3 NEW                                               0        0 python
2025-06-10 07:41:55.351 TMP_ECP_RARE       4       4 NEW                                               0        0 firebird
2025-06-10 07:41:55.356 TMP_ECP_RARE       4       5 RUN DML                                           0        0 firebird
2025-06-10 07:41:55.362 TMP_ECP_RARE       4       6 MOVE INTO POOL: ACTIVE -> IDLE                    0        0 firebird
2025-06-10 07:41:55.373 TMP_ECP_RARE       4       7 TAKE FROM POOL: IDLE -> ACTIVE                    0        0 firebird
2025-06-10 07:41:55.385 TMP_ECP_RARE       4       8 BYE                                               0        0 firebird
2025-06-10 07:41:55.396 TMP_ECP_RARE       1       9 BYE                                               0        0 python
2025-06-10 07:41:55.410 TMP_ECP_RARE       5      10 NEW                                               0        0 firebird
2025-06-10 07:41:55.425 TMP_ECP_RARE       5      11 RUN DML                                           0        0 firebird
2025-06-10 07:41:55.437 TMP_ECP_RARE       5      12 MOVE INTO POOL: ACTIVE -> IDLE                    0        0 firebird
2025-06-10 07:41:55.447 TMP_ECP_RARE       5      13 TAKE FROM POOL: IDLE -> ACTIVE                    0        0 firebird
2025-06-10 07:41:55.455 TMP_ECP_RARE       5      14 BYE                                               0        0 firebird
2025-06-10 07:41:55.465 TMP_ECP_RARE       2      15 BYE                                               0        0 python
2025-06-10 07:41:55.478 TMP_ECP_RARE       6      16 NEW                                               0        0 firebird
2025-06-10 07:41:55.489 TMP_ECP_RARE       6      17 RUN DML                                           0        0 firebird
2025-06-10 07:41:55.501 TMP_ECP_RARE       6      18 MOVE INTO POOL: ACTIVE -> IDLE                    0        0 firebird
2025-06-10 07:41:55.515 TMP_ECP_RARE       6      19 TAKE FROM POOL: IDLE -> ACTIVE                    0        0 firebird
2025-06-10 07:41:55.530 TMP_ECP_RARE       6      20 BYE                                               0        0 firebird
2025-06-10 07:41:55.544 TMP_ECP_RARE       3      21 BYE                                               0        0 python
2025-06-10 07:41:55.559 """
2025-06-10 07:41:55.573 else:
2025-06-10 07:41:55.584 act.expected_stdout = """
2025-06-10 07:41:55.597 WHO              ATT      ID EVT                                      ACTIVE_CNT IDLE_CNT CLNT_BIN
2025-06-10 07:41:55.604 ============ ======= ======= ======================================== ========== ======== ========
2025-06-10 07:41:55.613 TMP_ECP_FREQ       1       1 NEW                                               0        0 python
2025-06-10 07:41:55.627 TMP_ECP_FREQ       2       2 NEW                                               0        0 python
2025-06-10 07:41:55.639 TMP_ECP_FREQ       3       3 NEW                                               0        0 python
2025-06-10 07:41:55.654 TMP_ECP_FREQ       4       4 NEW                                               0        0 firebird
2025-06-10 07:41:55.666 TMP_ECP_FREQ       4       5 RUN DML                                           1        0 firebird
2025-06-10 07:41:55.675 TMP_ECP_FREQ       4       6 MOVE INTO POOL: ACTIVE -> IDLE                    1        0 firebird
2025-06-10 07:41:55.684 TMP_ECP_FREQ       4       7 TAKE FROM POOL: IDLE -> ACTIVE                    1        0 firebird
2025-06-10 07:41:55.691 TMP_ECP_FREQ       1       8 BYE                                               0        1 python
2025-06-10 07:41:55.698 TMP_ECP_FREQ       4       9 RUN DML                                           1        0 firebird
2025-06-10 07:41:55.708 TMP_ECP_FREQ       4      10 MOVE INTO POOL: ACTIVE -> IDLE                    1        0 firebird
2025-06-10 07:41:55.722 TMP_ECP_FREQ       4      11 TAKE FROM POOL: IDLE -> ACTIVE                    1        0 firebird
2025-06-10 07:41:55.735 TMP_ECP_FREQ       2      12 BYE                                               0        1 python
2025-06-10 07:41:55.748 TMP_ECP_FREQ       4      13 RUN DML                                           1        0 firebird
2025-06-10 07:41:55.761 TMP_ECP_FREQ       4      14 MOVE INTO POOL: ACTIVE -> IDLE                    1        0 firebird
2025-06-10 07:41:55.774 TMP_ECP_FREQ       4      15 TAKE FROM POOL: IDLE -> ACTIVE                    1        0 firebird
2025-06-10 07:41:55.784 TMP_ECP_FREQ       4      16 BYE                                               0        0 firebird
2025-06-10 07:41:55.799 TMP_ECP_FREQ       3      17 BYE                                               0        0 python
2025-06-10 07:41:55.811 TMP_ECP_RARE       1       1 NEW                                               0        0 python
2025-06-10 07:41:55.819 TMP_ECP_RARE       2       2 NEW                                               0        0 python
2025-06-10 07:41:55.832 TMP_ECP_RARE       3       3 NEW                                               0        0 python
2025-06-10 07:41:55.841 TMP_ECP_RARE       4       4 NEW                                               0        0 firebird
2025-06-10 07:41:55.848 TMP_ECP_RARE       4       5 RUN DML                                           1        0 firebird
2025-06-10 07:41:55.855 TMP_ECP_RARE       4       6 MOVE INTO POOL: ACTIVE -> IDLE                    1        0 firebird
2025-06-10 07:41:55.860 TMP_ECP_RARE       4       7 TAKE FROM POOL: IDLE -> ACTIVE                    1        0 firebird
2025-06-10 07:41:55.865 TMP_ECP_RARE       4       8 BYE                                               0        0 firebird
2025-06-10 07:41:55.871 TMP_ECP_RARE       1       9 BYE                                               0        0 python
2025-06-10 07:41:55.876 TMP_ECP_RARE       5      10 NEW                                               0        0 firebird
2025-06-10 07:41:55.882 TMP_ECP_RARE       5      11 RUN DML                                           1        0 firebird
2025-06-10 07:41:55.887 TMP_ECP_RARE       5      12 MOVE INTO POOL: ACTIVE -> IDLE                    1        0 firebird
2025-06-10 07:41:55.892 TMP_ECP_RARE       5      13 TAKE FROM POOL: IDLE -> ACTIVE                    1        0 firebird
2025-06-10 07:41:55.897 TMP_ECP_RARE       5      14 BYE                                               0        0 firebird
2025-06-10 07:41:55.902 TMP_ECP_RARE       2      15 BYE                                               0        0 python
2025-06-10 07:41:55.907 TMP_ECP_RARE       6      16 NEW                                               0        0 firebird
2025-06-10 07:41:55.913 TMP_ECP_RARE       6      17 RUN DML                                           1        0 firebird
2025-06-10 07:41:55.918 TMP_ECP_RARE       6      18 MOVE INTO POOL: ACTIVE -> IDLE                    1        0 firebird
2025-06-10 07:41:55.923 TMP_ECP_RARE       6      19 TAKE FROM POOL: IDLE -> ACTIVE                    1        0 firebird
2025-06-10 07:41:55.928 TMP_ECP_RARE       6      20 BYE                                               0        0 firebird
2025-06-10 07:41:55.933 TMP_ECP_RARE       3      21 BYE                                               0        0 python
2025-06-10 07:41:55.938 """
2025-06-10 07:41:55.943 act.isql(switches = ['-q', '-pag', '999999'], input = 'select who,att,id,evt,active_cnt,idle_cnt,clnt_bin from v_ecp_audit;', combine_output = True, io_enc = locale.getpreferredencoding())
2025-06-10 07:41:55.948 >       assert act.clean_stdout == act.clean_expected_stdout
2025-06-10 07:41:55.953 E       assert
2025-06-10 07:41:55.958 E           WHO              ATT      ID EVT                                      ACTIVE_CNT IDLE_CNT CLNT_BIN
2025-06-10 07:41:55.963 E           ============ ======= ======= ======================================== ========== ======== ========
2025-06-10 07:41:55.968 E           TMP_ECP_FREQ       1       1 NEW                                               0        0 python
2025-06-10 07:41:55.974 E           TMP_ECP_FREQ       2       2 NEW                                               0        0 python
2025-06-10 07:41:55.980 E           TMP_ECP_FREQ       3       3 NEW                                               0        0 python
2025-06-10 07:41:55.985 E           TMP_ECP_FREQ       4       4 NEW                                               0        0 firebird
2025-06-10 07:41:55.990 E           TMP_ECP_FREQ       4       5 RUN DML                                           0        0 firebird
2025-06-10 07:41:55.996 E           TMP_ECP_FREQ       4       6 MOVE INTO POOL: ACTIVE -> IDLE                    0        0 firebird
2025-06-10 07:41:56.001 E           TMP_ECP_FREQ       4       7 TAKE FROM POOL: IDLE -> ACTIVE                    0        0 firebird
2025-06-10 07:41:56.006 E           TMP_ECP_FREQ       1       8 BYE                                               0        1 python
2025-06-10 07:41:56.012 E           TMP_ECP_FREQ       5       9 NEW                                               0        0 firebird
2025-06-10 07:41:56.018 E           TMP_ECP_FREQ       5      10 RUN DML                                           0        0 firebird
2025-06-10 07:41:56.032 E           TMP_ECP_FREQ       5      11 MOVE INTO POOL: ACTIVE -> IDLE                    0        0 firebird
2025-06-10 07:41:56.043 E           TMP_ECP_FREQ       5      12 TAKE FROM POOL: IDLE -> ACTIVE                    0        0 firebird
2025-06-10 07:41:56.052 E           TMP_ECP_FREQ       4      13 BYE                                               0        0 firebird
2025-06-10 07:41:56.061 E           TMP_ECP_FREQ       2      14 BYE                                               0        1 python
2025-06-10 07:41:56.069 E           TMP_ECP_FREQ       6      15 NEW                                               0        0 firebird
2025-06-10 07:41:56.076 E           TMP_ECP_FREQ       6      16 RUN DML                                           0        0 firebird
2025-06-10 07:41:56.083 E           TMP_ECP_FREQ       6      17 MOVE INTO POOL: ACTIVE -> IDLE                    0        0 firebird
2025-06-10 07:41:56.090 E           TMP_ECP_FREQ       6      18 TAKE FROM POOL: IDLE -> ACTIVE                    0        0 firebird
2025-06-10 07:41:56.095 E           TMP_ECP_FREQ       6      19 BYE                                               0        0 firebird
2025-06-10 07:41:56.100 E         - TMP_ECP_FREQ       3      20 BYE                                               0        0 python
2025-06-10 07:41:56.106 E         - TMP_ECP_FREQ       5      21 BYE                                               0        0 firebird
2025-06-10 07:41:56.116 E         + TMP_ECP_FREQ       5      20 BYE                                               0        0 firebird
2025-06-10 07:41:56.126 E         + TMP_ECP_FREQ       3      21 BYE                                               0        0 python
2025-06-10 07:41:56.131 E           TMP_ECP_RARE       1       1 NEW                                               0        0 python
2025-06-10 07:41:56.136 E           TMP_ECP_RARE       2       2 NEW                                               0        0 python
2025-06-10 07:41:56.141 E           TMP_ECP_RARE       3       3 NEW                                               0        0 python
2025-06-10 07:41:56.148 E           TMP_ECP_RARE       4       4 NEW                                               0        0 firebird
2025-06-10 07:41:56.154 E           TMP_ECP_RARE       4       5 RUN DML                                           0        0 firebird
2025-06-10 07:41:56.161 E           TMP_ECP_RARE       4       6 MOVE INTO POOL: ACTIVE -> IDLE                    0        0 firebird
2025-06-10 07:41:56.166 E           TMP_ECP_RARE       4       7 TAKE FROM POOL: IDLE -> ACTIVE                    0        0 firebird
2025-06-10 07:41:56.172 E           TMP_ECP_RARE       4       8 BYE                                               0        0 firebird
2025-06-10 07:41:56.177 E           TMP_ECP_RARE       1       9 BYE                                               0        0 python
2025-06-10 07:41:56.182 E           TMP_ECP_RARE       5      10 NEW                                               0        0 firebird
2025-06-10 07:41:56.187 E           TMP_ECP_RARE       5      11 RUN DML                                           0        0 firebird
2025-06-10 07:41:56.192 E           TMP_ECP_RARE       5      12 MOVE INTO POOL: ACTIVE -> IDLE                    0        0 firebird
2025-06-10 07:41:56.197 E           TMP_ECP_RARE       5      13 TAKE FROM POOL: IDLE -> ACTIVE                    0        0 firebird
2025-06-10 07:41:56.202 E           TMP_ECP_RARE       5      14 BYE                                               0        0 firebird
2025-06-10 07:41:56.207 E           TMP_ECP_RARE       2      15 BYE                                               0        0 python
2025-06-10 07:41:56.212 E           TMP_ECP_RARE       6      16 NEW                                               0        0 firebird
2025-06-10 07:41:56.218 E           TMP_ECP_RARE       6      17 RUN DML                                           0        0 firebird
2025-06-10 07:41:56.225 E           TMP_ECP_RARE       6      18 MOVE INTO POOL: ACTIVE -> IDLE                    0        0 firebird
2025-06-10 07:41:56.233 E           TMP_ECP_RARE       6      19 TAKE FROM POOL: IDLE -> ACTIVE                    0        0 firebird
2025-06-10 07:41:56.240 E           TMP_ECP_RARE       6      20 BYE                                               0        0 firebird
2025-06-10 07:41:56.249 E           TMP_ECP_RARE       3      21 BYE                                               0        0 python
2025-06-10 07:41:56.257
2025-06-10 07:41:56.266 tests/functional/session/test_ext_conn_pool_01.py:391: AssertionError
2025-06-10 07:41:56.274 ---------------------------- Captured stdout setup -----------------------------
2025-06-10 07:41:56.283 Creating db: localhost:/var/tmp/qa_2024/test_12251/test.fdb [page_size=None, sql_dialect=None, charset='NONE', user=SYSDBA, password=masterkey]
2025-06-10 07:41:56.289 CREATE user: TMP_ECP_FREQ PLUGIN: Srp
2025-06-10 07:41:56.296 CREATE user: TMP_ECP_RARE PLUGIN: Srp
2025-06-10 07:41:56.318 CREATE role: CLEANER_EXT_POOL
2025-06-10 07:41:56.328 --------------------------- Captured stdout teardown ---------------------------
2025-06-10 07:41:56.336 DROP role: CLEANER_EXT_POOL
2025-06-10 07:41:56.343 DROP user: TMP_ECP_RARE PLUGIN: Srp
2025-06-10 07:41:56.349 DROP user: TMP_ECP_FREQ PLUGIN: Srp
3 #text
act = <firebird.qa.plugin.Action pytest object at [hex]>
tmp_user_freq = <firebird.qa.plugin.User pytest object at [hex]>
tmp_user_rare = <firebird.qa.plugin.User pytest object at [hex]>
tmp_cleaner_role = <firebird.qa.plugin.Role pytest object at [hex]>
capsys = <_pytest.capture.CaptureFixture pytest object at [hex]>

    @pytest.mark.es_eds
    @pytest.mark.version('>=4.0')
    def test_1(act: Action, tmp_user_freq: User, tmp_user_rare: User, tmp_cleaner_role: Role, capsys):
    
        # [doc] state of external connections pool could be queried using ...:
        # - EXT_CONN_POOL_SIZE			pool size
        # - EXT_CONN_POOL_LIFETIME		idle connection lifetime, in seconds
        ECP_SIZE, ECP_LIFE = -1, -1
        with act.db.connect() as con:
            with con.cursor() as cur:
                cur.execute("select cast(rdb$get_context('SYSTEM', 'EXT_CONN_POOL_SIZE') as int), cast(rdb$get_context('SYSTEM', 'EXT_CONN_POOL_LIFETIME') as int) from rdb$database")
                ECP_SIZE, ECP_LIFE = cur.fetchone()
        assert ECP_SIZE > 1;
    
        SERVER_MODE = act.get_server_architecture()
        sql_init = f'''
            set bail on;
            set list on;
            set wng off;
            alter database set linger to {ECP_LIFE+ADD_DELAY_FOR_RARE+2};
            alter role {tmp_cleaner_role.name} set system privileges to MODIFY_EXT_CONN_POOL;
            commit;
    
            grant default {tmp_cleaner_role.name} to user {tmp_user_freq.name};
            grant default {tmp_cleaner_role.name} to user {tmp_user_rare.name};
            commit;
    
            set term ^;
            create function fn_get_bin_name() returns varchar(255) as
                declare v_bin_name varchar(255);
            begin
                v_bin_name = rdb$get_context('SYSTEM','CLIENT_PROCESS');
    
                -- ::: NOTE ::: Python binary can have numeric suffixes on Linux:
                if (v_bin_name similar to '%((\\python([[:DIGIT:]]+%)?.exe)|(/python([[:DIGIT:]]+%)?))') then
                    return 'python'; -- '/usr/bin/python3.9' ==> 'python'
    
                if (v_bin_name similar to '%((\\firebird([[:DIGIT:]]+%)?.exe)|(/python([[:DIGIT:]]+%)?))') then
                    return 'firebird';
    
                -- Extracts file name from full path of client binary process.
                -- For Windows: removes extension, in order returning name be the same as on Linux.
                -- 'c:\\program files\\firebird30\\firebird.exe' --> 'firebird'
                -- '/opt/firebird/bin/firebird'                  --> 'firebird'
                -- ::: NOTE ::: backslash must be duplicated when using this DDL in any Python
                -- environment otherwise it will be swallowed
                return
                (
                    select
                        --p
                        --,r
                        --,ext_pos
                        --,n
                        --,x
                        reverse(left(x,n)) as clnt_bin
                        -- reverse(x)  as clnt_bin
                    from
                    (
                        select
                            p
                            ,reverse(p) r
                            ,ext_pos
                            ,substring(reverse(p) from iif( is_win, ext_pos+1, 1) ) x
                            ,position( '|' in replace(replace(reverse( p ),'\\','|'),'/','|') ) - iif(is_win, ext_pos+1, 1) as n
                        from (
                            select
                                trim(p) as p
                                ,position( '\\' in p ) > 0 as is_win
                                ,iif( position( '\\' in p ) > 0, position('.' in reverse(trim(p))), 0) as ext_pos
                            from (
                                select rdb$get_context('SYSTEM','CLIENT_PROCESS') as p from rdb$database
                            )
                        )
                    )
                );
    
            end
            ^
            set term ;^
    
    
            create table ecp_audit(
                 id smallint generated by default as identity constraint pk_audit primary key
                ,srvmode varchar(12) -- 'Super' / 'SuperClassic' / 'Classic'
                ,who varchar(12) default current_user -- 'TMP_ECP_FREQ' / 'TMP_ECP_RARE' / 'SYSDBA'
                ,evt varchar(40) not null
                ,att smallint default current_connection
                ,trn smallint default current_transaction
                ,dts timestamp default 'now'
                ,pool_active_count smallint
                ,pool_idle_count smallint
                ,clnt_bin varchar(8)
                ,aux_info varchar(100)
            );
    
            create view v_ecp_audit as
            select
                who
               ,att
               ,id
               ,evt
               ,active_cnt
               ,idle_cnt
               ,clnt_bin
            from (
                select
                     srvmode
                    ,who
                    ,cast(dense_rank()over(partition by who order by att) as smallint) as att
                    ,cast(dense_rank()over(partition by who order by id) as smallint) as id
                    ,evt
                    ,trn
                    ,pool_active_count as active_cnt
                    ,pool_idle_count as idle_cnt
                    ,clnt_bin
                from ecp_audit
            )
            order by who, id
            ;
    
    
            grant select,insert on ecp_audit to public;
            grant select on v_ecp_audit to public;
            commit;
    
            set term ^;
            create or alter trigger trg_aud_bi for ecp_audit active before insert sql security definer as
                declare v_srvmode varchar(30);
                declare p int;
            begin
                new.srvmode = '{SERVER_MODE}';
                new.pool_active_count = rdb$get_context('SYSTEM','EXT_CONN_POOL_ACTIVE_COUNT');
                new.pool_idle_count = rdb$get_context('SYSTEM','EXT_CONN_POOL_IDLE_COUNT');
                new.clnt_bin = right(fn_get_bin_name(), 8);
                -- right(rdb$get_context('SYSTEM','CLIENT_PROCESS'),15);
            end
            ^
    
            create or alter trigger trg_connect inactive on connect sql security definer as
                declare p smallint;
            begin
                if (current_user <> '{act.db.user}') then
                begin
    
                    insert into ecp_audit(
                        evt
                    ) values (
                        iif(resetting, 'TAKE FROM POOL: IDLE -> ACTIVE', 'NEW')
                    );
                end
            end
            ^
    
            create or alter trigger trg_disconnect inactive on disconnect sql security definer as
            begin
                if (current_user <> '{act.db.user}') then
                begin
                    insert into ecp_audit(
                        evt
                    ) values (
                        iif(resetting, 'MOVE INTO POOL: ACTIVE -> IDLE', 'BYE')
                    );
                end
            end
            ^
            set term ;^
            commit;
            alter trigger trg_connect active;
            alter trigger trg_disconnect active;
            commit;
        '''
    
        act.expected_stdout = ''
        act.isql(switches = ['-q'], input = sql_init, combine_output = True, io_enc = locale.getpreferredencoding())
        assert act.clean_stdout == act.clean_expected_stdout
        act.reset()
    
        #-----------------------------------------------------
    
        sql_for_run = '''
            execute block as
                declare c int;
            begin
                execute statement ( q'{ insert into ecp_audit( evt ) values( 'RUN DML') }' )
                on external
                   'localhost:' || rdb$get_context('SYSTEM','DB_NAME')
                with autonomous transaction -- <<< !!! THIS IS MANDATORY IF WE WANT TO USE EXT CONN POOL !!! <<<
                as user current_user password '123'
                ;
            end
        '''
    
        for usr in (tmp_user_freq, tmp_user_rare):
            conn_list = []
            for i in range(0, ITER_LOOP_CNT):
                conn_list.append( act.db.connect(user = usr.name, password = usr.password) )
    
            for i,c in enumerate(conn_list):
    
                # ::: NOTE :::
                # ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
                # On every iteration DIFFERENT connection is used for run ES/EDS,
                # but all of them use the same user/password/role, so apropriate
                # item in the ExtConnPool can be used to run this statement.
                # But this will be so only for user = 'FREQ' because he does such
                # actions 'frequently': each (<ECP_LIFE> - 2) seconds.
                # For user 'RARE' new attachment will be created every time when
                # he runs ES/EDS because he does that 'rarely' and idle connection
                # (from his previous iteration) is removed from ExtConnPool due to
                # expiration of ExtConnPoolLifeTime:
                # ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
                try:
                    #c.execute_immediate( sql_for_run )
                    with c.cursor() as cur:
                        cur.execute(sql_for_run)
    
                    if i < len(conn_list)-1:
                        time.sleep( 1 if usr == tmp_user_freq else ECP_LIFE + ADD_DELAY_FOR_RARE )
                    else:
                        c.execute_immediate( 'ALTER EXTERNAL CONNECTIONS POOL CLEAR ALL' )
                finally:
                    if c:
                        c.close()
    
        if SERVER_MODE == 'Classic':
            act.expected_stdout = """
                WHO              ATT      ID EVT                                      ACTIVE_CNT IDLE_CNT CLNT_BIN
                ============ ======= ======= ======================================== ========== ======== ========
                TMP_ECP_FREQ       1       1 NEW                                               0        0 python
                TMP_ECP_FREQ       2       2 NEW                                               0        0 python
                TMP_ECP_FREQ       3       3 NEW                                               0        0 python
                TMP_ECP_FREQ       4       4 NEW                                               0        0 firebird
                TMP_ECP_FREQ       4       5 RUN DML                                           0        0 firebird
                TMP_ECP_FREQ       4       6 MOVE INTO POOL: ACTIVE -> IDLE                    0        0 firebird
                TMP_ECP_FREQ       4       7 TAKE FROM POOL: IDLE -> ACTIVE                    0        0 firebird
                TMP_ECP_FREQ       1       8 BYE                                               0        1 python
                TMP_ECP_FREQ       5       9 NEW                                               0        0 firebird
                TMP_ECP_FREQ       5      10 RUN DML                                           0        0 firebird
                TMP_ECP_FREQ       5      11 MOVE INTO POOL: ACTIVE -> IDLE                    0        0 firebird
                TMP_ECP_FREQ       5      12 TAKE FROM POOL: IDLE -> ACTIVE                    0        0 firebird
                TMP_ECP_FREQ       4      13 BYE                                               0        0 firebird
                TMP_ECP_FREQ       2      14 BYE                                               0        1 python
                TMP_ECP_FREQ       6      15 NEW                                               0        0 firebird
                TMP_ECP_FREQ       6      16 RUN DML                                           0        0 firebird
                TMP_ECP_FREQ       6      17 MOVE INTO POOL: ACTIVE -> IDLE                    0        0 firebird
                TMP_ECP_FREQ       6      18 TAKE FROM POOL: IDLE -> ACTIVE                    0        0 firebird
                TMP_ECP_FREQ       6      19 BYE                                               0        0 firebird
                TMP_ECP_FREQ       3      20 BYE                                               0        0 python
                TMP_ECP_FREQ       5      21 BYE                                               0        0 firebird
                TMP_ECP_RARE       1       1 NEW                                               0        0 python
                TMP_ECP_RARE       2       2 NEW                                               0        0 python
                TMP_ECP_RARE       3       3 NEW                                               0        0 python
                TMP_ECP_RARE       4       4 NEW                                               0        0 firebird
                TMP_ECP_RARE       4       5 RUN DML                                           0        0 firebird
                TMP_ECP_RARE       4       6 MOVE INTO POOL: ACTIVE -> IDLE                    0        0 firebird
                TMP_ECP_RARE       4       7 TAKE FROM POOL: IDLE -> ACTIVE                    0        0 firebird
                TMP_ECP_RARE       4       8 BYE                                               0        0 firebird
                TMP_ECP_RARE       1       9 BYE                                               0        0 python
                TMP_ECP_RARE       5      10 NEW                                               0        0 firebird
                TMP_ECP_RARE       5      11 RUN DML                                           0        0 firebird
                TMP_ECP_RARE       5      12 MOVE INTO POOL: ACTIVE -> IDLE                    0        0 firebird
                TMP_ECP_RARE       5      13 TAKE FROM POOL: IDLE -> ACTIVE                    0        0 firebird
                TMP_ECP_RARE       5      14 BYE                                               0        0 firebird
                TMP_ECP_RARE       2      15 BYE                                               0        0 python
                TMP_ECP_RARE       6      16 NEW                                               0        0 firebird
                TMP_ECP_RARE       6      17 RUN DML                                           0        0 firebird
                TMP_ECP_RARE       6      18 MOVE INTO POOL: ACTIVE -> IDLE                    0        0 firebird
                TMP_ECP_RARE       6      19 TAKE FROM POOL: IDLE -> ACTIVE                    0        0 firebird
                TMP_ECP_RARE       6      20 BYE                                               0        0 firebird
                TMP_ECP_RARE       3      21 BYE                                               0        0 python
            """
        else:
            act.expected_stdout = """
                WHO              ATT      ID EVT                                      ACTIVE_CNT IDLE_CNT CLNT_BIN
                ============ ======= ======= ======================================== ========== ======== ========
                TMP_ECP_FREQ       1       1 NEW                                               0        0 python
                TMP_ECP_FREQ       2       2 NEW                                               0        0 python
                TMP_ECP_FREQ       3       3 NEW                                               0        0 python
                TMP_ECP_FREQ       4       4 NEW                                               0        0 firebird
                TMP_ECP_FREQ       4       5 RUN DML                                           1        0 firebird
                TMP_ECP_FREQ       4       6 MOVE INTO POOL: ACTIVE -> IDLE                    1        0 firebird
                TMP_ECP_FREQ       4       7 TAKE FROM POOL: IDLE -> ACTIVE                    1        0 firebird
                TMP_ECP_FREQ       1       8 BYE                                               0        1 python
                TMP_ECP_FREQ       4       9 RUN DML                                           1        0 firebird
                TMP_ECP_FREQ       4      10 MOVE INTO POOL: ACTIVE -> IDLE                    1        0 firebird
                TMP_ECP_FREQ       4      11 TAKE FROM POOL: IDLE -> ACTIVE                    1        0 firebird
                TMP_ECP_FREQ       2      12 BYE                                               0        1 python
                TMP_ECP_FREQ       4      13 RUN DML                                           1        0 firebird
                TMP_ECP_FREQ       4      14 MOVE INTO POOL: ACTIVE -> IDLE                    1        0 firebird
                TMP_ECP_FREQ       4      15 TAKE FROM POOL: IDLE -> ACTIVE                    1        0 firebird
                TMP_ECP_FREQ       4      16 BYE                                               0        0 firebird
                TMP_ECP_FREQ       3      17 BYE                                               0        0 python
                TMP_ECP_RARE       1       1 NEW                                               0        0 python
                TMP_ECP_RARE       2       2 NEW                                               0        0 python
                TMP_ECP_RARE       3       3 NEW                                               0        0 python
                TMP_ECP_RARE       4       4 NEW                                               0        0 firebird
                TMP_ECP_RARE       4       5 RUN DML                                           1        0 firebird
                TMP_ECP_RARE       4       6 MOVE INTO POOL: ACTIVE -> IDLE                    1        0 firebird
                TMP_ECP_RARE       4       7 TAKE FROM POOL: IDLE -> ACTIVE                    1        0 firebird
                TMP_ECP_RARE       4       8 BYE                                               0        0 firebird
                TMP_ECP_RARE       1       9 BYE                                               0        0 python
                TMP_ECP_RARE       5      10 NEW                                               0        0 firebird
                TMP_ECP_RARE       5      11 RUN DML                                           1        0 firebird
                TMP_ECP_RARE       5      12 MOVE INTO POOL: ACTIVE -> IDLE                    1        0 firebird
                TMP_ECP_RARE       5      13 TAKE FROM POOL: IDLE -> ACTIVE                    1        0 firebird
                TMP_ECP_RARE       5      14 BYE                                               0        0 firebird
                TMP_ECP_RARE       2      15 BYE                                               0        0 python
                TMP_ECP_RARE       6      16 NEW                                               0        0 firebird
                TMP_ECP_RARE       6      17 RUN DML                                           1        0 firebird
                TMP_ECP_RARE       6      18 MOVE INTO POOL: ACTIVE -> IDLE                    1        0 firebird
                TMP_ECP_RARE       6      19 TAKE FROM POOL: IDLE -> ACTIVE                    1        0 firebird
                TMP_ECP_RARE       6      20 BYE                                               0        0 firebird
                TMP_ECP_RARE       3      21 BYE                                               0        0 python
            """
        act.isql(switches = ['-q', '-pag', '999999'], input = 'select who,att,id,evt,active_cnt,idle_cnt,clnt_bin from v_ecp_audit;', combine_output = True, io_enc = locale.getpreferredencoding())
>       assert act.clean_stdout == act.clean_expected_stdout
E       assert   
E           WHO              ATT      ID EVT                                      ACTIVE_CNT IDLE_CNT CLNT_BIN
E           ============ ======= ======= ======================================== ========== ======== ========
E           TMP_ECP_FREQ       1       1 NEW                                               0        0 python
E           TMP_ECP_FREQ       2       2 NEW                                               0        0 python
E           TMP_ECP_FREQ       3       3 NEW                                               0        0 python
E           TMP_ECP_FREQ       4       4 NEW                                               0        0 firebird
E           TMP_ECP_FREQ       4       5 RUN DML                                           0        0 firebird
E           TMP_ECP_FREQ       4       6 MOVE INTO POOL: ACTIVE -> IDLE                    0        0 firebird
E           TMP_ECP_FREQ       4       7 TAKE FROM POOL: IDLE -> ACTIVE                    0        0 firebird
E           TMP_ECP_FREQ       1       8 BYE                                               0        1 python
E           TMP_ECP_FREQ       5       9 NEW                                               0        0 firebird
E           TMP_ECP_FREQ       5      10 RUN DML                                           0        0 firebird
E           TMP_ECP_FREQ       5      11 MOVE INTO POOL: ACTIVE -> IDLE                    0        0 firebird
E           TMP_ECP_FREQ       5      12 TAKE FROM POOL: IDLE -> ACTIVE                    0        0 firebird
E           TMP_ECP_FREQ       4      13 BYE                                               0        0 firebird
E           TMP_ECP_FREQ       2      14 BYE                                               0        1 python
E           TMP_ECP_FREQ       6      15 NEW                                               0        0 firebird
E           TMP_ECP_FREQ       6      16 RUN DML                                           0        0 firebird
E           TMP_ECP_FREQ       6      17 MOVE INTO POOL: ACTIVE -> IDLE                    0        0 firebird
E           TMP_ECP_FREQ       6      18 TAKE FROM POOL: IDLE -> ACTIVE                    0        0 firebird
E           TMP_ECP_FREQ       6      19 BYE                                               0        0 firebird
E         - TMP_ECP_FREQ       3      20 BYE                                               0        0 python
E         - TMP_ECP_FREQ       5      21 BYE                                               0        0 firebird
E         + TMP_ECP_FREQ       5      20 BYE                                               0        0 firebird
E         + TMP_ECP_FREQ       3      21 BYE                                               0        0 python
E           TMP_ECP_RARE       1       1 NEW                                               0        0 python
E           TMP_ECP_RARE       2       2 NEW                                               0        0 python
E           TMP_ECP_RARE       3       3 NEW                                               0        0 python
E           TMP_ECP_RARE       4       4 NEW                                               0        0 firebird
E           TMP_ECP_RARE       4       5 RUN DML                                           0        0 firebird
E           TMP_ECP_RARE       4       6 MOVE INTO POOL: ACTIVE -> IDLE                    0        0 firebird
E           TMP_ECP_RARE       4       7 TAKE FROM POOL: IDLE -> ACTIVE                    0        0 firebird
E           TMP_ECP_RARE       4       8 BYE                                               0        0 firebird
E           TMP_ECP_RARE       1       9 BYE                                               0        0 python
E           TMP_ECP_RARE       5      10 NEW                                               0        0 firebird
E           TMP_ECP_RARE       5      11 RUN DML                                           0        0 firebird
E           TMP_ECP_RARE       5      12 MOVE INTO POOL: ACTIVE -> IDLE                    0        0 firebird
E           TMP_ECP_RARE       5      13 TAKE FROM POOL: IDLE -> ACTIVE                    0        0 firebird
E           TMP_ECP_RARE       5      14 BYE                                               0        0 firebird
E           TMP_ECP_RARE       2      15 BYE                                               0        0 python
E           TMP_ECP_RARE       6      16 NEW                                               0        0 firebird
E           TMP_ECP_RARE       6      17 RUN DML                                           0        0 firebird
E           TMP_ECP_RARE       6      18 MOVE INTO POOL: ACTIVE -> IDLE                    0        0 firebird
E           TMP_ECP_RARE       6      19 TAKE FROM POOL: IDLE -> ACTIVE                    0        0 firebird
E           TMP_ECP_RARE       6      20 BYE                                               0        0 firebird
E           TMP_ECP_RARE       3      21 BYE                                               0        0 python

tests/functional/session/test_ext_conn_pool_01.py:391: 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 5.0.3.1675 2025.06.27 1bb2c P P 29889 27838 2025.06.29 05:52:44.670 2025.06.29 05:53:14.559 2025.06.29 04:25:17.536 2025.06.29 04:25:45.374
2 5.0.3.1674 2025.06.26 d366d P P 29610 27791 2025.06.27 05:24:15.004 2025.06.27 05:24:44.614 2025.06.27 04:01:57.162 2025.06.27 04:02:24.953
3 5.0.3.1673 2025.06.25 f0e1f P P 29345 27586 2025.06.26 05:29:02.633 2025.06.26 05:29:31.978 2025.06.26 04:06:14.580 2025.06.26 04:06:42.166
4 5.0.3.1668 2025.06.21 b8e22 P P 29554 27517 2025.06.25 05:28:16.887 2025.06.25 05:28:46.441 2025.06.25 04:05:06.724 2025.06.25 04:05:34.241
5 5.0.3.1667 2025.06.15 4374a P P 29549 27693 2025.06.21 05:09:53.084 2025.06.21 05:10:22.633 2025.06.21 03:46:14.116 2025.06.21 03:46:41.809
6 5.0.3.1666 2025.06.14 97178 P P 29481 27638 2025.06.15 05:36:28.689 2025.06.15 05:36:58.170 2025.06.15 04:12:57.040 2025.06.15 04:13:24.678
7 5.0.3.1665 2025.06.11 d8b62 P P 29997 27685 2025.06.14 05:59:05.589 2025.06.14 05:59:35.586 2025.06.14 04:30:02.003 2025.06.14 04:30:29.688
8 5.0.3.1661 2025.06.10 cfcf0 P P 30078 27797 2025.06.11 04:28:06.902 2025.06.11 04:28:36.980 2025.06.11 02:52:52.445 2025.06.11 02:53:20.242
9 5.0.3.1660 2025.06.07 db691 F P 30405 27879 2025.06.10 04:27:22.471 2025.06.10 04:27:52.876 2025.06.10 02:50:58.274 2025.06.10 02:51:26.153
10 5.0.3.1659 2025.05.28 f4c0f P P 30232 27951 2025.06.06 04:24:47.725 2025.06.06 04:25:17.957 2025.06.06 02:48:42.317 2025.06.06 02:49:10.268
11 5.0.3.1658 2025.05.27 e3aa4 P P 30366 27913 2025.05.28 04:40:46.781 2025.05.28 04:41:17.147 2025.05.28 03:02:57.312 2025.05.28 03:03:25.225
12 5.0.3.1657 2025.05.22 a6c19 P P 30415 27964 2025.05.25 04:30:44.768 2025.05.25 04:31:15.183 2025.05.25 02:53:41.655 2025.05.25 02:54:09.619
13 5.0.3.1656 2025.05.12 37a12 P P 30461 27727 2025.05.21 04:27:39.880 2025.05.21 04:28:10.341 2025.05.21 02:50:05.138 2025.05.21 02:50:32.865
14 5.0.3.1654 2025.05.11 789ca P P 30362 27947 2025.05.12 04:07:32.571 2025.05.12 04:08:02.933 2025.05.12 02:28:51.837 2025.05.12 02:29:19.784
15 5.0.3.1653 2025.05.07 8e48a P P 30168 27691 2025.05.08 04:03:13.043 2025.05.08 04:03:43.211 2025.05.08 02:27:48.228 2025.05.08 02:28:15.919
16 5.0.3.1652 2025.05.06 1de2f P P 30163 27842 2025.05.07 04:02:24.563 2025.05.07 04:02:54.726 2025.05.07 02:27:05.649 2025.05.07 02:27:33.491
17 5.0.3.1651 2025.05.05 c8191 P P 30379 27768 2025.05.06 04:00:35.087 2025.05.06 04:01:05.466 2025.05.06 02:25:48.701 2025.05.06 02:26:16.469
18 5.0.3.1650 2025.04.23 41dca P P 30309 27861 2025.05.01 03:53:15.309 2025.05.01 03:53:45.618 2025.05.01 02:17:50.621 2025.05.01 02:18:18.482
19 5.0.3.1649 2025.04.18 da7bd P P 30191 27853 2025.04.23 04:10:25.269 2025.04.23 04:10:55.460 2025.04.23 02:33:41.179 2025.04.23 02:34:09.032
20 5.0.3.1648 2025.04.17 a54ad P P 30278 27937 2025.04.18 04:01:48.047 2025.04.18 04:02:18.325 2025.04.18 02:26:22.435 2025.04.18 02:26:50.372
21 5.0.3.1647 2025.04.14 8993a P P 30135 27814 2025.04.17 03:53:00.430 2025.04.17 03:53:30.565 2025.04.17 02:18:41.547 2025.04.17 02:19:09.361
22 5.0.3.1646 2025.04.13 60c64 P P 29944 27920 2025.04.14 03:22:29.648 2025.04.14 03:22:59.592 2025.04.14 01:53:57.141 2025.04.14 01:54:25.061
23 5.0.3.1643 2025.04.11 a5179 P P 29994 27563 2025.04.13 03:15:46.742 2025.04.13 03:16:16.736 2025.04.13 01:48:02.189 2025.04.13 01:48:29.752
24 5.0.3.1642 2025.04.09 9dc39 P P 29951 27637 2025.04.11 03:19:14.847 2025.04.11 03:19:44.798 2025.04.11 01:50:52.463 2025.04.11 01:51:20.100
25 5.0.3.1641 2025.04.02 59e25 P P 30288 27792 2025.04.09 03:41:49.077 2025.04.09 03:42:19.365 2025.04.09 02:08:02.425 2025.04.09 02:08:30.217
26 5.0.3.1639 2025.03.31 67152 P P 30016 27739 2025.04.01 03:23:57.963 2025.04.01 03:24:27.979 2025.04.01 01:51:55.665 2025.04.01 01:52:23.404
27 5.0.3.1638 2025.03.28 6579c P P 29844 27764 2025.03.31 03:24:39.655 2025.03.31 03:25:09.499 2025.03.31 01:53:47.770 2025.03.31 01:54:15.534
28 5.0.3.1636 2025.03.26 725be P P 29778 27965 2025.03.28 03:49:04.192 2025.03.28 03:49:33.970 2025.03.28 02:18:19.013 2025.03.28 02:18:46.978
29 5.0.3.1635 2025.03.24 9363e P P 29708 27729 2025.03.25 03:29:32.617 2025.03.25 03:30:02.325 2025.03.25 02:02:10.339 2025.03.25 02:02:38.068
30 5.0.3.1634 2025.03.20 be406 P P 30327 27942 2025.03.24 03:58:13.248 2025.03.24 03:58:43.575 2025.03.24 02:21:21.324 2025.03.24 02:21:49.266
31 5.0.3.1632 2025.03.13 10216 P P 783 428 2025.03.19 14:32:09.462 2025.03.19 14:32:10.245 2025.03.19 12:51:31.378 2025.03.19 12:51:31.806
32 5.0.3.1631 2025.03.12 34a04 P P 792 436 2025.03.13 03:48:56.644 2025.03.13 03:48:57.436 2025.03.13 02:13:07.791 2025.03.13 02:13:08.227
33 5.0.3.1630 2025.03.07 81e0d P P 694 374 2025.03.11 03:14:24.563 2025.03.11 03:14:25.257 2025.03.11 01:43:44.579 2025.03.11 01:43:44.953
34 5.0.3.1629 2025.03.05 a6fa2 P P 734 346 2025.03.06 03:22:27.833 2025.03.06 03:22:28.567 2025.03.06 01:50:29.050 2025.03.06 01:50:29.396
35 5.0.3.1628 2025.03.04 d7ecb P P 702 413 2025.03.05 03:15:08.738 2025.03.05 03:15:09.440 2025.03.05 01:44:24.351 2025.03.05 01:44:24.764
36 5.0.3.1627 2025.02.26 5e33d P P 784 462 2025.03.03 04:11:45.009 2025.03.03 04:11:45.793 2025.03.03 02:30:41.757 2025.03.03 02:30:42.219
37 5.0.3.1626 2025.02.25 2d71d P P 729 428 2025.02.26 03:16:03.729 2025.02.26 03:16:04.458 2025.02.26 01:46:07.923 2025.02.26 01:46:08.351
38 5.0.3.1624 2025.02.24 b01e1 P P 794 393 2025.02.25 03:30:45.179 2025.02.25 03:30:45.973 2025.02.25 01:57:26.422 2025.02.25 01:57:26.815
39 5.0.3.1622 2025.02.22 c1a51 F P 1191 429 2025.02.24 11:11:59.952 2025.02.24 11:12:01.143 2025.02.24 09:25:01.595 2025.02.24 09:25:02.024
40 5.0.3.1619 2025.02.21 81c5f P P 797 419 2025.02.22 03:27:36.211 2025.02.22 03:27:37.008 2025.02.22 01:54:19.033 2025.02.22 01:54:19.452
41 5.0.3.1617 2025.02.18 33201 P P 696 451 2025.02.19 03:13:59.485 2025.02.19 03:14:00.181 2025.02.19 01:42:17.088 2025.02.19 01:42:17.539
42 5.0.3.1616 2025.02.14 29b24 F P 670 644 2025.02.15 00:22:22.498 2025.02.15 00:22:23.168 2025.02.14 22:23:39.588 2025.02.14 22:23:40.232
43 5.0.2.1615 2025.02.13 78c6a P P 773 434 2025.02.14 03:43:59.642 2025.02.14 03:44:00.415 2025.02.14 02:06:30.134 2025.02.14 02:06:30.568
44 5.0.2.1614 2025.02.12 8bc05 P P 819 397 2025.02.13 03:46:18.873 2025.02.13 03:46:19.692 2025.02.13 02:10:51.517 2025.02.13 02:10:51.914
45 5.0.2.1613 2025.02.11 f6d53 P P 774 439 2025.02.12 03:32:46.441 2025.02.12 03:32:47.215 2025.02.12 02:00:27.770 2025.02.12 02:00:28.209
46 5.0.2.1611 2025.02.05 28ae6 P P 802 465 2025.02.08 03:34:00.893 2025.02.08 03:34:01.695 2025.02.08 01:58:59.056 2025.02.08 01:58:59.521
47 5.0.2.1610 2025.02.03 5e63a P P 735 436 2025.02.05 03:40:24.588 2025.02.05 03:40:25.323 2025.02.05 02:06:22.602 2025.02.05 02:06:23.038
48 5.0.2.1606 2025.02.01 90e37 P P 645 451 2025.02.02 03:24:15.886 2025.02.02 03:24:16.531 2025.02.02 01:52:00.484 2025.02.02 01:52:00.935
49 5.0.2.1605 2025.01.31 9f60e P P 1133 582 2025.02.01 00:16:58.995 2025.02.01 00:17:00.128 2025.01.31 22:23:38.813 2025.01.31 22:23:39.395
50 5.0.2.1604 2025.01.27 aca12 P P 732 438 2025.01.28 03:39:23.911 2025.01.28 03:39:24.643 2025.01.28 02:04:35.713 2025.01.28 02:04:36.151
51 5.0.2.1602 2025.01.24 7db8e P P 764 428 2025.01.25 03:35:44.540 2025.01.25 03:35:45.304 2025.01.25 02:02:39.767 2025.01.25 02:02:40.195
52 5.0.2.1601 2025.01.21 f0949 P P 770 400 2025.01.24 03:36:04.867 2025.01.24 03:36:05.637 2025.01.24 02:01:55.058 2025.01.24 02:01:55.458
53 5.0.2.1597 2025.01.20 4a631 P P 728 410 2025.01.21 03:29:24.595 2025.01.21 03:29:25.323 2025.01.21 01:56:23.421 2025.01.21 01:56:23.831
54 5.0.2.1595 2025.01.17 85d82 P P 818 414 2025.01.20 03:27:14.708 2025.01.20 03:27:15.526 2025.01.20 01:54:26.786 2025.01.20 01:54:27.200
55 5.0.2.1593 2025.01.16 03e5b P P 753 409 2025.01.17 03:23:51.145 2025.01.17 03:23:51.898 2025.01.17 01:51:54.778 2025.01.17 01:51:55.187
56 5.0.2.1592 2025.01.15 2d117 P P 730 437 2025.01.16 03:27:35.593 2025.01.16 03:27:36.323 2025.01.16 01:55:31.799 2025.01.16 01:55:32.236
57 5.0.2.1590 2025.01.14 9d7f7 P P 768 413 2025.01.15 03:29:20.376 2025.01.15 03:29:21.144 2025.01.15 01:55:47.567 2025.01.15 01:55:47.980
58 5.0.2.1589 2025.01.13 41a98 P P 746 411 2025.01.14 03:31:40.098 2025.01.14 03:31:40.844 2025.01.14 01:58:53.469 2025.01.14 01:58:53.880
59 5.0.2.1585 2025.01.11 03974 P P 684 623 2025.01.12 00:24:09.990 2025.01.12 00:24:10.674 2025.01.11 22:23:20.181 2025.01.11 22:23:20.804
60 5.0.2.1584 2025.01.09 5d7be F P 1144 686 2025.01.10 00:23:32.098 2025.01.10 00:23:33.242 2025.01.09 22:23:26.590 2025.01.09 22:23:27.276
61 5.0.2.1583 2024.12.23 89a88 P P 654 336 2025.01.01 02:26:02.874 2025.01.01 02:26:03.528 2025.01.01 01:13:21.790 2025.01.01 01:13:22.126
62 5.0.2.1582 2024.12.19 4a676 P P 594 338 2024.12.21 15:42:44.283 2024.12.21 15:42:44.877 2024.12.21 14:19:58.759 2024.12.21 14:19:59.097
63 5.0.2.1580 2024.12.13 fca2e P P 606 296 2024.12.16 02:35:53.791 2024.12.16 02:35:54.397 2024.12.16 01:22:37.456 2024.12.16 01:22:37.752
64 5.0.2.1579 2024.12.12 a7248 P P 1046 275 2024.12.12 23:57:15.340 2024.12.12 23:57:16.386 2024.12.12 22:06:14.790 2024.12.12 22:06:15.065
65 5.0.2.1577 2024.12.11 b36f2 P P 598 323 2024.12.12 11:17:13.311 2024.12.12 11:17:13.909 2024.12.12 10:03:11.812 2024.12.12 10:03:12.135
66 5.0.2.1576 2024.12.10 a93ab P P 582 323 2024.12.11 02:23:39.757 2024.12.11 02:23:40.339 2024.12.11 01:10:21.334 2024.12.11 01:10:21.657
67 5.0.2.1575 2024.12.08 59b01 P P 623 331 2024.12.09 02:12:29.820 2024.12.09 02:12:30.443 2024.12.09 01:01:12.872 2024.12.09 01:01:13.203
68 5.0.2.1571 2024.12.02 4b154 P P 552 309 2024.12.04 02:12:58.338 2024.12.04 02:12:58.890 2024.12.04 01:01:34.531 2024.12.04 01:01:34.840
69 5.0.2.1570 2024.11.28 7a891 P P 586 328 2024.11.30 02:26:23.652 2024.11.30 02:26:24.238 2024.11.30 01:13:26.674 2024.11.30 01:13:27.002
70 5.0.2.1569 2024.11.25 6e45d P P 569 272 2024.11.27 02:04:50.926 2024.11.27 02:04:51.495 2024.11.27 00:54:29.667 2024.11.27 00:54:29.939
71 5.0.2.1567 2024.11.16 9fbd5 P P 1076 321 2024.11.22 23:42:58.423 2024.11.22 23:42:59.499 2024.11.22 22:04:28.767 2024.11.22 22:04:29.088
72 5.0.2.1566 2024.11.15 6db71 P P 585 318 2024.11.16 04:01:39.902 2024.11.16 04:01:40.487 2024.11.16 02:52:07.038 2024.11.16 02:52:07.356
73 5.0.2.1565 2024.11.14 d5fa4 P P 623 307 2024.11.15 04:08:58.238 2024.11.15 04:08:58.861 2024.11.15 02:57:29.238 2024.11.15 02:57:29.545
74 5.0.2.1564 2024.11.12 6866e P P 594 371 2024.11.14 04:09:29.663 2024.11.14 04:09:30.257 2024.11.14 02:58:08.709 2024.11.14 02:58:09.080
75 5.0.2.1561 2024.11.08 ae88c P P 610 316 2024.11.10 16:41:52.898 2024.11.10 16:41:53.508 2024.11.10 15:29:40.074 2024.11.10 15:29:40.390
76 5.0.2.1560 2024.11.07 98836 P P 547 291 2024.11.08 04:02:34.391 2024.11.08 04:02:34.938 2024.11.08 02:54:28.544 2024.11.08 02:54:28.835
77 5.0.2.1555 2024.11.06 0c5eb P P 581 317 2024.11.07 01:36:42.617 2024.11.07 01:36:43.198 2024.11.07 00:02:54.273 2024.11.07 00:02:54.590
78 5.0.2.1553 2024.11.04 1eacd P P 551 315 2024.11.05 03:55:53.139 2024.11.05 03:55:53.690 2024.11.05 02:46:42.791 2024.11.05 02:46:43.106
79 5.0.2.1551 2024.10.30 53a92 P P 606 358 2024.11.04 03:59:08.978 2024.11.04 03:59:09.584 2024.11.04 02:49:12.471 2024.11.04 02:49:12.829
80 5.0.2.1550 2024.10.29 9eecd P P 610 331 2024.10.30 04:05:41.304 2024.10.30 04:05:41.914 2024.10.30 02:52:55.085 2024.10.30 02:52:55.416
81 5.0.2.1547 2024.10.24 1e08f P P 555 308 2024.10.29 03:59:32.659 2024.10.29 03:59:33.214 2024.10.29 02:50:22.107 2024.10.29 02:50:22.415
82 5.0.2.1542 2024.10.23 7d501 P P 539 325 2024.10.24 01:42:11.374 2024.10.24 01:42:11.913 2024.10.24 00:04:26.621 2024.10.24 00:04:26.946
83 5.0.2.1539 2024.10.22 a7912 P P 604 377 2024.10.23 04:09:36.419 2024.10.23 04:09:37.023 2024.10.23 02:57:10.458 2024.10.23 02:57:10.835
84 5.0.2.1537 2024.10.21 e5b4a P P 700 317 2024.10.22 04:18:26.166 2024.10.22 04:18:26.866 2024.10.22 03:04:26.807 2024.10.22 03:04:27.124
85 5.0.2.1535 2024.10.17 a153b P P 583 309 2024.10.18 04:07:35.803 2024.10.18 04:07:36.386 2024.10.18 02:54:53.950 2024.10.18 02:54:54.259
86 5.0.2.1532 2024.10.14 40552 P P 574 338 2024.10.15 04:00:26.917 2024.10.15 04:00:27.491 2024.10.15 02:49:39.734 2024.10.15 02:49:40.072
87 5.0.2.1530 2024.10.11 2d8e7 P P 581 379 2024.10.12 04:13:52.991 2024.10.12 04:13:53.572 2024.10.12 03:00:53.449 2024.10.12 03:00:53.828
88 5.0.2.1529 2024.10.09 57afb P P 564 367 2024.10.10 04:26:00.581 2024.10.10 04:26:01.145 2024.10.10 03:11:08.366 2024.10.10 03:11:08.733
89 5.0.2.1528 2024.10.06 ce72c P P 720 340 2024.10.07 04:25:01.158 2024.10.07 04:25:01.878 2024.10.07 03:10:06.434 2024.10.07 03:10:06.774
90 5.0.2.1526 2024.10.05 e1874 P P 861 596 2024.10.06 01:53:02.335 2024.10.06 01:53:03.196 2024.10.06 00:07:27.189 2024.10.06 00:07:27.785
91 5.0.2.1525 2024.10.02 02d09 P P 621 358 2024.10.03 04:17:47.389 2024.10.03 04:17:48.010 2024.10.03 03:04:49.785 2024.10.03 03:04:50.143
92 5.0.2.1520 2024.09.30 fc48a P P 622 377 2024.10.01 04:07:09.118 2024.10.01 04:07:09.740 2024.10.01 02:55:32.618 2024.10.01 02:55:32.995
93 5.0.2.1519 2024.09.26 4e350 P P 619 326 2024.09.30 04:09:06.464 2024.09.30 04:09:07.083 2024.09.30 02:55:58.286 2024.09.30 02:55:58.612
94 5.0.2.1518 2024.09.25 f88f0 P P 608 334 2024.09.26 02:15:12.079 2024.09.26 02:15:12.687 2024.09.26 01:01:51.257 2024.09.26 01:01:51.591
95 5.0.2.1516 2024.09.23 fe6ba P P 579 341 2024.09.25 02:15:10.492 2024.09.25 02:15:11.071 2024.09.25 01:01:24.945 2024.09.25 01:01:25.286
96 5.0.2.1513 2024.09.21 ade6b P P 675 340 2024.09.23 02:15:10.306 2024.09.23 02:15:10.981 2024.09.23 01:01:28.160 2024.09.23 01:01:28.500
97 5.0.2.1512 2024.09.20 66b5f P P 589 304 2024.09.21 02:10:42.002 2024.09.21 02:10:42.591 2024.09.21 00:58:21.325 2024.09.21 00:58:21.629
98 5.0.2.1509 2024.09.19 f0aec P P 631 348 2024.09.19 23:43:29.596 2024.09.19 23:43:30.227 2024.09.19 22:05:40.697 2024.09.19 22:05:41.045
99 5.0.2.1508 2024.09.18 1ea82 P P 621 310 2024.09.18 23:41:36.869 2024.09.18 23:41:37.490 2024.09.18 22:06:09.110 2024.09.18 22:06:09.420
100 5.0.2.1502 2024.09.16 0799c F P 982 457 2024.09.17 03:48:16.074 2024.09.17 03:48:17.056 2024.09.17 01:58:13.789 2024.09.17 01:58:14.246
101 5.0.2.1500 2024.09.14 ce3a9 F P 1005 548 2024.09.16 03:47:55.781 2024.09.16 03:47:56.786 2024.09.16 01:57:13.052 2024.09.16 01:57:13.600
102 5.0.2.1499 2024.09.09 00c00 F P 984 541 2024.09.14 03:46:20.876 2024.09.14 03:46:21.860 2024.09.14 01:56:41.389 2024.09.14 01:56:41.930
103 5.0.2.1497 2024.09.06 7eaa5 F P 1280 511 2024.09.07 00:20:37.521 2024.09.07 00:20:38.801 2024.09.06 22:28:30.022 2024.09.06 22:28:30.533
104 5.0.2.1496 2024.09.04 38c3f F P 960 519 2024.09.06 03:54:02.210 2024.09.06 03:54:03.170 2024.09.06 02:05:30.835 2024.09.06 02:05:31.354
105 5.0.2.1493 2024.09.02 22e33 P P 968 535 2024.09.04 05:30:18.547 2024.09.04 05:30:19.515 2024.09.04 03:21:24.060 2024.09.04 03:21:24.595
106 5.0.2.1489 2024.08.30 c185d F P 1080 555 2024.09.02 04:43:15.277 2024.09.02 04:43:16.357 2024.09.02 02:42:12.277 2024.09.02 02:42:12.832
107 5.0.2.1488 2024.08.28 c395a F P 975 520 2024.08.30 04:39:30.176 2024.08.30 04:39:31.151 2024.08.30 02:50:35.568 2024.08.30 02:50:36.088
108 5.0.2.1487 2024.08.27 8d46b F P 1050 644 2024.08.28 09:55:44.049 2024.08.28 09:55:45.099 2024.08.28 05:53:45.164 2024.08.28 05:53:45.808
109 5.0.2.1486 2024.08.26 5af13 P P 947 515 2024.08.27 03:34:10.458 2024.08.27 03:34:11.405 2024.08.27 01:51:35.917 2024.08.27 01:51:36.432
110 5.0.2.1485 2024.08.25 6ef87 P P 1853 407 2024.08.26 00:33:05.537 2024.08.26 00:33:07.390 2024.08.25 22:28:31.835 2024.08.25 22:28:32.242
111 5.0.2.1484 2024.08.24 86dc3 F P 966 395 2024.08.25 01:26:51.874 2024.08.25 01:26:52.840 2024.08.24 22:48:25.116 2024.08.24 22:48:25.511
112 5.0.2.1483 2024.08.23 42003 F P 977 562 2024.08.24 06:30:21.656 2024.08.24 06:30:22.633 2024.08.24 04:02:06.535 2024.08.24 04:02:07.097
113 5.0.2.1482 2024.08.21 e40e4 F P 932 503 2024.08.22 05:37:51.695 2024.08.22 05:37:52.627 2024.08.22 03:31:31.842 2024.08.22 03:31:32.345
114 5.0.2.1481 2024.08.20 fc710 F P 999 606 2024.08.21 04:25:39.570 2024.08.21 04:25:40.569 2024.08.21 02:23:18.861 2024.08.21 02:23:19.467
115 5.0.2.1479 2024.08.17 47aa3 P P 737 444 2024.08.19 02:29:11.271 2024.08.19 02:29:12.008 2024.08.19 01:09:38.216 2024.08.19 01:09:38.660
116 5.0.2.1478 2024.08.11 32ebc P P 758 486 2024.08.16 02:23:34.952 2024.08.16 02:23:35.710 2024.08.16 01:05:05.919 2024.08.16 01:05:06.405
117 5.0.2.1477 2024.08.09 57382 P P 731 478 2024.08.10 02:24:13.582 2024.08.10 02:24:14.313 2024.08.10 01:06:56.240 2024.08.10 01:06:56.718
118 5.0.1.1476 2024.08.08 ce100 P P 859 436 2024.08.09 02:20:25.111 2024.08.09 02:20:25.970 2024.08.09 01:03:38.467 2024.08.09 01:03:38.903
119 5.0.1.1475 2024.08.06 eda8d P P 770 472 2024.08.08 14:57:52.837 2024.08.08 14:57:53.607 2024.08.08 13:41:04.684 2024.08.08 13:41:05.156
120 5.0.1.1473 2024.08.05 24ee5 P P 531 262 2024.08.06 01:46:24.230 2024.08.06 01:46:24.761 2024.08.06 00:39:29.748 2024.08.06 00:39:30.010
121 5.0.1.1469 2024.08.01 1d792 P P 484 304 2024.08.05 01:49:51.045 2024.08.05 01:49:51.529 2024.08.05 00:43:01.564 2024.08.05 00:43:01.868
122 5.0.1.1464 2024.07.31 d1033 P P 525 319 2024.08.01 01:46:31.525 2024.08.01 01:46:32.050 2024.08.01 00:40:41.547 2024.08.01 00:40:41.866
123 5.0.1.1453 2024.07.27 62ee5 P P 505 278 2024.07.30 01:44:16.879 2024.07.30 01:44:17.384 2024.07.30 00:39:00.944 2024.07.30 00:39:01.222
124 5.0.1.1452 2024.07.26 b056f P P 470 280 2024.07.27 01:41:24.014 2024.07.27 01:41:24.484 2024.07.27 00:35:43.205 2024.07.27 00:35:43.485
125 5.0.1.1446 2024.07.24 50c74 P P 518 284 2024.07.25 01:41:57.301 2024.07.25 01:41:57.819 2024.07.25 00:36:40.886 2024.07.25 00:36:41.170
126 5.0.1.1445 2024.07.23 9ccd8 P P 486 294 2024.07.24 01:48:06.001 2024.07.24 01:48:06.487 2024.07.24 00:41:59.749 2024.07.24 00:42:00.043
127 5.0.1.1440 2024.07.13 5b653 P P 517 282 2024.07.23 01:41:06.711 2024.07.23 01:41:07.228 2024.07.23 00:35:27.960 2024.07.23 00:35:28.242
128 5.0.1.1439 2024.07.10 c7d55 P P 468 270 2024.07.13 01:41:01.678 2024.07.13 01:41:02.146 2024.07.13 00:36:30.845 2024.07.13 00:36:31.115
129 5.0.1.1434 2024.07.09 33085 P P 513 283 2024.07.10 01:35:55.732 2024.07.10 01:35:56.245 2024.07.10 00:31:52.130 2024.07.10 00:31:52.413
130 5.0.1.1432 2024.07.06 9d5a6 P P 508 267 2024.07.09 01:38:45.096 2024.07.09 01:38:45.604 2024.07.09 00:33:40.963 2024.07.09 00:33:41.230
131 5.0.1.1428 2024.06.27 54c00 P P 476 273 2024.06.28 01:35:22.020 2024.06.28 01:35:22.496 2024.06.28 00:32:23.770 2024.06.28 00:32:24.043
132 5.0.1.1425 2024.06.21 3dbe6 P P 506 274 2024.06.22 01:37:19.553 2024.06.22 01:37:20.059 2024.06.22 00:34:19.014 2024.06.22 00:34:19.288
133 5.0.1.1421 2024.06.18 7aa8f P P 514 225 2024.06.21 01:33:20.978 2024.06.21 01:33:21.492 2024.06.21 00:30:38.105 2024.06.21 00:30:38.330
134 5.0.1.1417 2024.06.17 9637a P P 482 246 2024.06.18 01:37:08.782 2024.06.18 01:37:09.264 2024.06.18 00:33:37.168 2024.06.18 00:33:37.414
135 5.0.1.1416 2024.06.13 ad0e5 P P 483 281 2024.06.17 01:32:19.999 2024.06.17 01:32:20.482 2024.06.17 00:29:40.689 2024.06.17 00:29:40.970
136 5.0.1.1415 2024.06.09 099ba P P 389 310 2024.06.13 07:44:29.122 2024.06.13 07:44:29.511 2024.06.13 06:45:45.213 2024.06.13 06:45:45.523
137 5.0.1.1412 2024.06.09 9de13 P P 561 226 2024.06.11 22:17:37.008 2024.06.11 22:17:37.569 2024.06.11 21:19:15.540 2024.06.11 21:19:15.766
138 5.0.1.1411 2024.05.28 81ea7 F P 961 414 2024.06.12 01:32:23.752 2024.06.12 01:32:24.713 2024.06.12 00:02:17.493 2024.06.12 00:02:17.907
139 5.0.1.1408 2024.05.24 ff412 F P 652 326 2024.06.12 10:05:55.529 2024.06.12 10:05:56.181 2024.06.12 08:33:53.257 2024.06.12 08:33:53.583
140 5.0.1.1405 2024.05.21 c02fa P P 464 211 2024.06.12 12:11:51.441 2024.06.12 12:11:51.905 2024.06.12 11:12:23.917 2024.06.12 11:12:24.128
141 5.0.1.1404 2024.05.15 c7963 P P 510 227 2024.06.12 14:10:16.534 2024.06.12 14:10:17.044 2024.06.12 13:11:10.377 2024.06.12 13:11:10.604
142 5.0.1.1399 2024.05.14 77af7 P P 408 227 2024.06.12 16:59:23.841 2024.06.12 16:59:24.249 2024.06.12 16:00:04.616 2024.06.12 16:00:04.843
143 5.0.1.1398 2024.05.09 f339e P P 387 214 2024.06.12 19:05:32.719 2024.06.12 19:05:33.106 2024.06.12 18:06:14.877 2024.06.12 18:06:15.091
144 5.0.1.1397 2024.05.08 96967 P P 425 202 2024.06.12 21:35:47.704 2024.06.12 21:35:48.129 2024.06.12 20:37:10.473 2024.06.12 20:37:10.675
145 5.0.1.1395 2024.05.06 23887 P P 448 244 2024.06.13 05:41:56.252 2024.06.13 05:41:56.700 2024.06.13 04:42:45.985 2024.06.13 04:42:46.229

Elapsed time, ms. Chart for last 145 runs:

Last commits information (all timestamps in UTC):