diff --git a/server/modules/routing/readwritesplit/rwsplit_route_stmt.cc b/server/modules/routing/readwritesplit/rwsplit_route_stmt.cc index 9271c424c..e92046535 100644 --- a/server/modules/routing/readwritesplit/rwsplit_route_stmt.cc +++ b/server/modules/routing/readwritesplit/rwsplit_route_stmt.cc @@ -105,21 +105,32 @@ bool RWSplitSession::prepare_target(RWBackend* target, route_target_t route_targ bool RWSplitSession::create_one_connection() { + mxb_assert(m_config.lazy_connect); + // Try to first find a master for (auto backend : m_raw_backends) { if (backend->can_connect() && backend->is_master()) { - return prepare_target(backend, TARGET_MASTER); + if (prepare_target(backend, TARGET_MASTER)) + { + if (!m_current_master) + { + MXS_INFO("Chose '%s' as master due to session write", backend->name()); + m_current_master = backend; + } + + return true; + } } } // If no master was found, find a slave for (auto backend : m_raw_backends) { - if (backend->can_connect() && backend->is_slave()) + if (backend->can_connect() && backend->is_slave() && prepare_target(backend, TARGET_SLAVE)) { - return prepare_target(backend, TARGET_SLAVE); + return true; } }