office-gobmx/connectivity
Caolán McNamara 7e989259c6 connectivity: avoid divide by zero in calculateTimeOuts
See https://crashreport.libreoffice.org/stats/signature/connectivity::OConnectionPool::propertyChange(com::sun:🫘:PropertyChangeEvent%20const%20&)

To reproduce this, blow away your config and start writer, visit tools,
options, base, connections and enable connection pooling enabled, find
com.sun.star.sdbcx.comp.hdqldb.Driver and "enable pooling for this
driver" and "apply" with the default 120 seconds, ok and exit

then open a database (based on hsqldb) and click on "tables" (to start a
connection) that default 120 seconds is the input for calculateTimeOuts
(this becomes a final m_nALiveCount of 10 by the divide by 20), now
visit the options again and change the 120 to something else and ok and
the input for calculateTimeOuts is the old "10" calculated before and
not the new expected value.

The reason appears to be in OConnectionPool::propertyChange, it expects
to get the new value of the property from evt.NewValue but it gets an
empty Any so the m_nALiveCount is not actually changed, so the
assumption it was set and will be >= 20 and sanely divisible by 20
doesn't hold.

For this easy fix, fetch the new value explicitly from the config

Change-Id: Ie91bf5328634f9aafbda1814b10c29b86a3f9cbe
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/138111
Tested-by: Jenkins
Reviewed-by: Caolán McNamara <caolanm@redhat.com>
2022-08-11 18:07:39 +02:00
..
com/sun/star/sdbcx/comp/hsqldb
inc Related tdf#137145 tdf#137569 Capitalization + punctuation fixes 2022-07-05 18:18:46 +02:00
org/hsqldb/lib
qa
registry
source connectivity: avoid divide by zero in calculateTimeOuts 2022-08-11 18:07:39 +02:00
workben
AllLangMoTarget_cnr.mk
Configuration_ado.mk
Configuration_calc.mk
Configuration_dbase.mk
Configuration_evoab.mk
Configuration_firebird.mk
Configuration_flat.mk
Configuration_hsqldb.mk
Configuration_jdbc.mk
Configuration_macab.mk
Configuration_mysql.mk
Configuration_mysql_jdbc.mk
Configuration_odbc.mk
Configuration_postgresql.mk
Configuration_writer.mk
CppunitTest_connectivity_ado.mk
CppunitTest_connectivity_commontools.mk
CppunitTest_connectivity_mysql_test.mk
CppunitTest_connectivity_sharedresources.mk
IwyuFilter_connectivity.yaml
Jar_ConnectivityTools.mk
Jar_sdbc_hsqldb.mk
JunitTest_complex.mk
Library_ado.mk
Library_calc.mk
Library_dbase.mk
Library_dbpool2.mk
Library_dbtools.mk
Library_evoab.mk
Library_file.mk
Library_firebird_sdbc.mk
Library_flat.mk
Library_hsqldb.mk
Library_jdbc.mk
Library_macab1.mk
Library_macabdrv1.mk
Library_mozbootstrap.mk
Library_mysql_jdbc.mk
Library_mysqlc.mk
Library_odbc.mk
Library_postgresql-sdbc-impl.mk
Library_postgresql-sdbc.mk
Library_sdbc2.mk
Library_writer.mk
Makefile
Module_connectivity.mk
Package_postgresql-sdbc.mk
Rdb_postgresql-sdbc.mk
README.md

Database Connectivity

Contains database pieces, drivers, etc.

dbaccess builds UI on top of this.

Testing

PostgreSQL

For testing, use:

podman pull postgres:latest
podman run --name=postgres -e POSTGRES_PASSWORD=foobarbaz -p 127.0.0.1:5432:5432 postgres:latest

In Base, Connect to an existing database, select PostgreSQL:

URL: host=127.0.0.1 port=5432 dbname=postgres
User: postgres
Password: foobarbaz

podman stop postgres
podman rm postgres

In order to test SCRAM authentication, create the container like this:

podman run --name=postgres -e POSTGRES_PASSWORD=foobarbaz -e POSTGRES_INITDB_ARGS=--auth-host=scram-sha-256 -e POSTGRES_HOST_AUTH_METHOD=scram-sha-256 -p 127.0.0.1:5432:5432 postgres:latest

MySQL

For mysql_test:

  • The CppunitTest_mysql_test unit test can be used to test the mysqlc library with any versions of mysql or mariadb server of your choice.

  • This test does not run automatically. It can be triggered with setting the environment variable "CONNECTIVITY_TEST_MYSQL_DRIVER".

  • The environment variable should contain a URL of the following format: [user]/[passwd]@sdbc:mysql:mysqlc:[host]:[port]/db_name

  • tl;dr:

    podman pull mariadb/server
    podman run --name=mariadb -e MYSQL_ROOT_PASSWORD=foobarbaz -p 127.0.0.1:3306:3306 mariadb/server
    podman exec -it mariadb /bin/bash -c "echo -e CREATE DATABASE test | /usr/bin/mysql -u root"
    (cd connectivity && make -srj8 CppunitTest_connectivity_mysql_test CONNECTIVITY_TEST_MYSQL_DRIVER="root/foobarbaz@sdbc:mysql:mysqlc:127.0.0.1:3306/test")
    podman stop mariadb
    podman rm mariadb