allow query of donor nodes if allwed by config
This commit is contained in:
parent
1af88c3607
commit
6c72961d12
@ -24,7 +24,8 @@ export type MariaOptions = {
|
||||
cluster?: PoolClusterConfig,
|
||||
client?: PoolConfig,
|
||||
credentials: Credentials,
|
||||
loggerOptions?: LoggerClientOptions
|
||||
loggerOptions?: LoggerClientOptions,
|
||||
donorQuery?: boolean
|
||||
}
|
||||
|
||||
type MariaError = {
|
||||
@ -93,6 +94,7 @@ class MariaDB
|
||||
#cluster: boolean;
|
||||
#pool: PoolCluster | null;
|
||||
#nodes: Node[];
|
||||
#canQueryDonor: boolean;
|
||||
|
||||
constructor (server: IServer, options: MariaOptions)
|
||||
{
|
||||
@ -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)
|
||||
|
Loading…
Reference in New Issue
Block a user