Public bug reported: Context ======= Neutron 2024.2
oslo.db==16.0.0 neutron-lib==3.15.0 Neutron, like any other OpenStack service rely on oslo.db for SQL statements. oslo.db provides two parameters to connect to the DB: connection slave_connection Slave connection is supposed to be used for read requests. Olso.db enginefacade provides a way to have both reader and writter context. Neutron use that, e.g. taken from neutron-lib: CONTEXT_READER = get_context_manager().reader CONTEXT_WRITER = get_context_manager().writer In my test env, I created two mariadb users: root neutronro I configured the connection info like this: [database] connection = mysql+pymysql://root:pass@mysql-neutron/neutron slave_connection = mysql+pymysql://neutronro:pass@mysql-neutron/neutron I am following the connection to the db with: MariaDB [neutron]> show processlist; Issue ===== Despite the fact that neutron does use the CONTEXT_READER on a lot of code that do not need any writer context, the slave_connection is never used, thus the connection is always perform to the same server: MariaDB [neutron]> show processlist; +-----+------+------------------+---------+---------+------+----------+------------------+----------+ | Id | User | Host | db | Command | Time | State | Info | Progress | +-----+------+------------------+---------+---------+------+----------+------------------+----------+ | 598 | root | localhost | neutron | Query | 0 | starting | show processlist | 0.000 | | 876 | root | 10.42.0.61:41336 | neutron | Sleep | 8 | | NULL | 0.000 | | 877 | root | 10.42.0.61:41338 | neutron | Sleep | 0 | | NULL | 0.000 | | 878 | root | 10.42.0.61:41348 | neutron | Sleep | 0 | | NULL | 0.000 | | 879 | root | 10.42.0.61:44508 | neutron | Sleep | 0 | | NULL | 0.000 | | 880 | root | 10.42.0.61:44522 | neutron | Sleep | 0 | | NULL | 0.000 | | 881 | root | 10.42.0.61:44524 | neutron | Sleep | 0 | | NULL | 0.000 | | 882 | root | 10.42.0.61:44534 | neutron | Sleep | 0 | | NULL | 0.000 | | 883 | root | 10.42.0.61:44542 | neutron | Sleep | 0 | | NULL | 0.000 | | 884 | root | 10.42.0.61:44548 | neutron | Sleep | 0 | | NULL | 0.000 | | 885 | root | 10.42.0.61:44560 | neutron | Sleep | 0 | | NULL | 0.000 | | 886 | root | 10.42.0.61:44562 | neutron | Sleep | 0 | | NULL | 0.000 | | 887 | root | 10.42.0.61:44574 | neutron | Sleep | 0 | | NULL | 0.000 | | 888 | root | 10.42.0.61:44582 | neutron | Sleep | 0 | | NULL | 0.000 | | 889 | root | 10.42.0.61:44594 | neutron | Sleep | 0 | | NULL | 0.000 | | 890 | root | 10.42.0.61:44606 | neutron | Sleep | 0 | | NULL | 0.000 | | 891 | root | 10.42.0.61:44622 | neutron | Sleep | 0 | | NULL | 0.000 | | 892 | root | 10.42.0.61:44632 | neutron | Sleep | 0 | | NULL | 0.000 | | 893 | root | 10.42.0.61:44640 | neutron | Sleep | 0 | | NULL | 0.000 | | 894 | root | 10.42.0.61:44642 | neutron | Sleep | 0 | | NULL | 0.000 | | 895 | root | 10.42.0.61:44646 | neutron | Sleep | 0 | | NULL | 0.000 | | 896 | root | 10.42.0.61:44656 | neutron | Sleep | 0 | | NULL | 0.000 | | 897 | root | 10.42.0.61:44664 | neutron | Sleep | 0 | | NULL | 0.000 | | 898 | root | 10.42.0.61:44668 | neutron | Sleep | 16 | | NULL | 0.000 | | 899 | root | 10.42.0.61:44682 | neutron | Sleep | 0 | | NULL | 0.000 | | 900 | root | 10.42.0.61:44684 | neutron | Sleep | 0 | | NULL | 0.000 | +-----+------+------------------+---------+---------+------+----------+------------------+----------+ Expected behavior ================= To reduce the load on the writer db node, an operator may want to redirect all read requests to a second synchronous node (like in a galera cluster). What I would expect is: MariaDB [neutron]> show processlist; +-----+-----------+------------------+---------+---------+------+----------+------------------+----------+ | Id | User | Host | db | Command | Time | State | Info | Progress | +-----+-----------+------------------+---------+---------+------+----------+------------------+----------+ | 598 | root | localhost | neutron | Query | 0 | starting | show processlist | 0.000 | | 822 | neutronro | 10.42.0.61:48804 | neutron | Sleep | 25 | | NULL | 0.000 | | 823 | neutronro | 10.42.0.61:48818 | neutron | Sleep | 25 | | NULL | 0.000 | | 824 | neutronro | 10.42.0.61:48834 | neutron | Sleep | 20 | | NULL | 0.000 | | 825 | root | 10.42.0.61:48844 | neutron | Sleep | 3 | | NULL | 0.000 | | 826 | root | 10.42.0.61:49036 | neutron | Sleep | 2 | | NULL | 0.000 | | 827 | neutronro | 10.42.0.61:49052 | neutron | Sleep | 242 | | NULL | 0.000 | | 828 | root | 10.42.0.61:49068 | neutron | Sleep | 1 | | NULL | 0.000 | | 829 | neutronro | 10.42.0.61:49076 | neutron | Sleep | 242 | | NULL | 0.000 | | 830 | root | 10.42.0.61:49084 | neutron | Sleep | 7 | | NULL | 0.000 | | 831 | root | 10.42.0.61:49088 | neutron | Sleep | 7 | | NULL | 0.000 | | 832 | neutronro | 10.42.0.61:49090 | neutron | Sleep | 3 | | NULL | 0.000 | | 833 | neutronro | 10.42.0.61:49100 | neutron | Sleep | 254 | | NULL | 0.000 | | 834 | neutronro | 10.42.0.61:49114 | neutron | Sleep | 242 | | NULL | 0.000 | | 835 | root | 10.42.0.61:38028 | neutron | Sleep | 42 | | NULL | 0.000 | +-----+-----------+------------------+---------+---------+------+----------+------------------+----------+ ** Affects: neutron Importance: Undecided Status: In Progress -- You received this bug notification because you are a member of Yahoo! Engineering Team, which is subscribed to neutron. https://bugs.launchpad.net/bugs/2103868 Title: slave_connection is never used Status in neutron: In Progress Bug description: Context ======= Neutron 2024.2 oslo.db==16.0.0 neutron-lib==3.15.0 Neutron, like any other OpenStack service rely on oslo.db for SQL statements. oslo.db provides two parameters to connect to the DB: connection slave_connection Slave connection is supposed to be used for read requests. Olso.db enginefacade provides a way to have both reader and writter context. Neutron use that, e.g. taken from neutron-lib: CONTEXT_READER = get_context_manager().reader CONTEXT_WRITER = get_context_manager().writer In my test env, I created two mariadb users: root neutronro I configured the connection info like this: [database] connection = mysql+pymysql://root:pass@mysql-neutron/neutron slave_connection = mysql+pymysql://neutronro:pass@mysql-neutron/neutron I am following the connection to the db with: MariaDB [neutron]> show processlist; Issue ===== Despite the fact that neutron does use the CONTEXT_READER on a lot of code that do not need any writer context, the slave_connection is never used, thus the connection is always perform to the same server: MariaDB [neutron]> show processlist; +-----+------+------------------+---------+---------+------+----------+------------------+----------+ | Id | User | Host | db | Command | Time | State | Info | Progress | +-----+------+------------------+---------+---------+------+----------+------------------+----------+ | 598 | root | localhost | neutron | Query | 0 | starting | show processlist | 0.000 | | 876 | root | 10.42.0.61:41336 | neutron | Sleep | 8 | | NULL | 0.000 | | 877 | root | 10.42.0.61:41338 | neutron | Sleep | 0 | | NULL | 0.000 | | 878 | root | 10.42.0.61:41348 | neutron | Sleep | 0 | | NULL | 0.000 | | 879 | root | 10.42.0.61:44508 | neutron | Sleep | 0 | | NULL | 0.000 | | 880 | root | 10.42.0.61:44522 | neutron | Sleep | 0 | | NULL | 0.000 | | 881 | root | 10.42.0.61:44524 | neutron | Sleep | 0 | | NULL | 0.000 | | 882 | root | 10.42.0.61:44534 | neutron | Sleep | 0 | | NULL | 0.000 | | 883 | root | 10.42.0.61:44542 | neutron | Sleep | 0 | | NULL | 0.000 | | 884 | root | 10.42.0.61:44548 | neutron | Sleep | 0 | | NULL | 0.000 | | 885 | root | 10.42.0.61:44560 | neutron | Sleep | 0 | | NULL | 0.000 | | 886 | root | 10.42.0.61:44562 | neutron | Sleep | 0 | | NULL | 0.000 | | 887 | root | 10.42.0.61:44574 | neutron | Sleep | 0 | | NULL | 0.000 | | 888 | root | 10.42.0.61:44582 | neutron | Sleep | 0 | | NULL | 0.000 | | 889 | root | 10.42.0.61:44594 | neutron | Sleep | 0 | | NULL | 0.000 | | 890 | root | 10.42.0.61:44606 | neutron | Sleep | 0 | | NULL | 0.000 | | 891 | root | 10.42.0.61:44622 | neutron | Sleep | 0 | | NULL | 0.000 | | 892 | root | 10.42.0.61:44632 | neutron | Sleep | 0 | | NULL | 0.000 | | 893 | root | 10.42.0.61:44640 | neutron | Sleep | 0 | | NULL | 0.000 | | 894 | root | 10.42.0.61:44642 | neutron | Sleep | 0 | | NULL | 0.000 | | 895 | root | 10.42.0.61:44646 | neutron | Sleep | 0 | | NULL | 0.000 | | 896 | root | 10.42.0.61:44656 | neutron | Sleep | 0 | | NULL | 0.000 | | 897 | root | 10.42.0.61:44664 | neutron | Sleep | 0 | | NULL | 0.000 | | 898 | root | 10.42.0.61:44668 | neutron | Sleep | 16 | | NULL | 0.000 | | 899 | root | 10.42.0.61:44682 | neutron | Sleep | 0 | | NULL | 0.000 | | 900 | root | 10.42.0.61:44684 | neutron | Sleep | 0 | | NULL | 0.000 | +-----+------+------------------+---------+---------+------+----------+------------------+----------+ Expected behavior ================= To reduce the load on the writer db node, an operator may want to redirect all read requests to a second synchronous node (like in a galera cluster). What I would expect is: MariaDB [neutron]> show processlist; +-----+-----------+------------------+---------+---------+------+----------+------------------+----------+ | Id | User | Host | db | Command | Time | State | Info | Progress | +-----+-----------+------------------+---------+---------+------+----------+------------------+----------+ | 598 | root | localhost | neutron | Query | 0 | starting | show processlist | 0.000 | | 822 | neutronro | 10.42.0.61:48804 | neutron | Sleep | 25 | | NULL | 0.000 | | 823 | neutronro | 10.42.0.61:48818 | neutron | Sleep | 25 | | NULL | 0.000 | | 824 | neutronro | 10.42.0.61:48834 | neutron | Sleep | 20 | | NULL | 0.000 | | 825 | root | 10.42.0.61:48844 | neutron | Sleep | 3 | | NULL | 0.000 | | 826 | root | 10.42.0.61:49036 | neutron | Sleep | 2 | | NULL | 0.000 | | 827 | neutronro | 10.42.0.61:49052 | neutron | Sleep | 242 | | NULL | 0.000 | | 828 | root | 10.42.0.61:49068 | neutron | Sleep | 1 | | NULL | 0.000 | | 829 | neutronro | 10.42.0.61:49076 | neutron | Sleep | 242 | | NULL | 0.000 | | 830 | root | 10.42.0.61:49084 | neutron | Sleep | 7 | | NULL | 0.000 | | 831 | root | 10.42.0.61:49088 | neutron | Sleep | 7 | | NULL | 0.000 | | 832 | neutronro | 10.42.0.61:49090 | neutron | Sleep | 3 | | NULL | 0.000 | | 833 | neutronro | 10.42.0.61:49100 | neutron | Sleep | 254 | | NULL | 0.000 | | 834 | neutronro | 10.42.0.61:49114 | neutron | Sleep | 242 | | NULL | 0.000 | | 835 | root | 10.42.0.61:38028 | neutron | Sleep | 42 | | NULL | 0.000 | +-----+-----------+------------------+---------+---------+------+----------+------------------+----------+ To manage notifications about this bug go to: https://bugs.launchpad.net/neutron/+bug/2103868/+subscriptions -- Mailing list: https://launchpad.net/~yahoo-eng-team Post to : yahoo-eng-team@lists.launchpad.net Unsubscribe : https://launchpad.net/~yahoo-eng-team More help : https://help.launchpad.net/ListHelp