* Acquire a new instance * @param requestCtx - Optional request context, default to the owning context
(requestCtx: Context = this.context)
| 186 | * @param requestCtx - Optional request context, default to the owning context |
| 187 | */ |
| 188 | async acquire(requestCtx: Context = this.context) { |
| 189 | debug('Acquiring a resource from the pool for context %s', requestCtx.name); |
| 190 | const resource = await this.pool.acquire(); |
| 191 | |
| 192 | try { |
| 193 | // Try factory-level acquire hook first |
| 194 | if (this.factory.acquire) { |
| 195 | await this.factory.acquire(resource, requestCtx); |
| 196 | } else { |
| 197 | // Fall back to resource-level acquire hook |
| 198 | await invokePoolableMethod(resource as Poolable, 'acquire', requestCtx); |
| 199 | } |
| 200 | } catch (err) { |
| 201 | await this.pool.destroy(resource); |
| 202 | throw err; |
| 203 | } |
| 204 | debug( |
| 205 | 'Resource acquired from the pool for context %s', |
| 206 | requestCtx.name, |
| 207 | resource, |
| 208 | ); |
| 209 | return resource; |
| 210 | } |
| 211 | |
| 212 | /** |
| 213 | * Release the resource back to the pool. |
no test coverage detected