allow query of donor nodes if allwed by config

This commit is contained in:
Erik 2023-10-17 18:10:55 +03:00
parent 1af88c3607
commit 6c72961d12

View File

@ -24,7 +24,8 @@ export type MariaOptions = {
cluster?: PoolClusterConfig,
client?: PoolConfig,
credentials: Credentials,
loggerOptions?: LoggerClientOptions
loggerOptions?: LoggerClientOptions,
donorQuery?: boolean
}
type MariaError = {
@ -93,8 +94,9 @@ class MariaDB
#cluster: boolean;
#pool: PoolCluster | null;
#nodes: Node[];
#canQueryDonor: boolean;
constructor (server: IServer, options: MariaOptions)
constructor (server: IServer, options: MariaOptions)
{
if (!server)
@ -124,6 +126,7 @@ class MariaDB
this.#afterLastQuery = null;
this.#cluster = this.#credentials.length > 1;
this.#canQueryDonor = options.donorQuery ?? false;
this.#logger = server.createLogger(this, options.loggerOptions);
}
@ -338,7 +341,7 @@ class MariaDB
const pool = this.#pool;
if (nodeName)
{
const available = this.#nodes.filter(n => n.status === 'synced' || !n.status);
const available = this.#nodes.filter(n => n.status === 'synced' || !n.status || (this.#canQueryDonor && n.status === 'donor'));
if (!available.length)
throw new Error('No nodes available for query');
const node = this.#nodes.find(n => n.name === nodeName);
@ -350,7 +353,7 @@ class MariaDB
this.#logger.warn(str);
nodeName = '*';
}
else if (node.status && node.status !== 'synced')
else if (node.status && node.status !== 'synced' && !(this.#canQueryDonor && node.status === 'donor'))
{
const str = `Node ${nodeName} is currently not synced with the pool and thus unqueryable`;
if (throwError)