Huge News!Announcing our $40M Series B led by Abstract Ventures.Learn More
Socket
Sign inDemoInstall
Socket

generic-promise-pool

Package Overview
Dependencies
Maintainers
1
Versions
10
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

generic-promise-pool

Promise-based connection pooling library inspired by generic-pool.

  • 1.2.2
  • latest
  • Source
  • npm
  • Socket score

Version published
Maintainers
1
Created
Source

Promise Pool Build Status Coverage Status

Promise-based connection pooling library inspired by generic-pool.

Installation

$ npm install generic-promise-pool

Documentation

The full generated JSDoc documentation is hosted on GitHub here: https://NatalieWolfe.github.io/node-promise-pool/docs/. You can also find the documentation as a single markdown file at docs.md. All of the options used for configuring a pool are at the end of this README.

Examples

Creating a Pool

This example creates a pool that uses a hypothetical promise-based MySQL library.

var mysql = require('promise-mysql');
var pool = require('generic-promise-pool');

var mysqlPool = pool.create({
    name    : 'mysql',  // An optional name for the pool.
    max     : 10,       // Optional limit for how many connections to allow.
    min     : 2,        // Optional minimum connections to keep in the pool.
    create  : function(){
        var conn = mysql.createConnection(mysqlConnOptions);
        return conn.connect();
    },
    destroy : function(conn){
        return conn.end();
    }
});

For a full list of options that the PromisePool accepts, see the documentation on GitHub: https://NatalieWolfe.github.io/node-promise-pool/docs/PromisePool.Factory.html

Using the Pool

In this example we get a connection from the pool and use it to make a query.

mysqlPool.acquire(function(conn){
    // The connection remains acquired until the promise returned by this
    // function is resolved or rejected.
    return conn.query('SELECT * FROM books WHERE author = "Neal Stephenson"');
}).then(function(res){
    // The connection has been released back to the pool before we get here,
    // and the results from the acquire callback is propagated out.
    res.forEach(function(row){ console.dir(row); });
}, function(err){
    console.error(err);
});

Draining the Pool

When you want to shut down your application, it can be quite annoying to wait for idle connections to close naturally. To get past this, drain the pool before shutting down.

mysqlPool.drain()
    .then(function(){
        console.log('The pool has drained, and all connections destroyed.');
    });

Pool Factory Options

Properties

NameTypeDescription
namestringName of the pool. Used only for logging.
createcreateShould create the item to be acquired, and return either a promise or the new client.
destroydestroyShould gently close any resources that the item is using. Called to destroy resources.
validatevalidateOptional. Should return true if the resource is still valid and false if it should be removed from the pool. Called before a resource is acquired from the pool.
onReleaseonReleaseOptional. May return a promise to indicate when a client is ready to be added back to the pool after being released.
maxnumberOptional. Maximum number of items that can exist at the same time. Any further acquire requests will be pushed to the waiting list. Defaults to 1.
minnumberOptional. Minimum number of items in pool (including in-use). When the pool is created, or a resource destroyed, this minimum will be checked. If the pool resource count is below the minimum a new resource will be created and added to the pool. Defaults to 0.
idleTimeoutMillisnumberOptional. Maximum period for resources to be idle (e.g. not acquired) before they are destroyed. Defaults to 30000 (30 seconds).
reapIntervalMillisnumberOptional. How frequently the pool will check for idle resources that need to be destroyed. Defaults to 1000 (1 second).
drainCheckIntervalMillisnumberOptional. How frequently the pool will check the status of waiting clients and unreturned resources before destroying all the resources. Defaults to 100 (1/10th a second).
logbool | logOptional. Whether the pool should log activity. If a function is provided, it will be called to log messages. If true is provided, messages are logged to console.log. Defaults to false.
priorityRangenumberOptional. The range from 1 to be treated as a valid priority. Default is 1.
refreshIdleboolOptional. Indicates if idle resources should be destroyed when left idle for idleTimeoutMillis milliseconds. Defaults to true.
returnToHeadboolOptional. Returns released object to the head of the available objects list. Default is false.

Factory.create ⇒ Promise.<PromisePool.Client>

Kind: static typedef of Factory
Returns: Promise.<PromisePool.Client> - A promise for a new client.

Factory.destroy ⇒ Promise

Kind: static typedef of Factory
Returns: Promise - If destruction is asynchronous, a promise should be returned that will resolve after the client is destroyed.

ParamTypeDescription
clientPromisePool.ClientA resource that had been created earlier.

Factory.validate ⇒ bool

Kind: static typedef of Factory
Returns: bool - True if the resource is still valid, otherwise false should be returned.

ParamTypeDescription
clientPromisePool.ClientA resource that had been created earlier.

Factory.onRelease ⇒ Promise.<*>

Kind: static typedef of Factory
Returns: Promise.<*> - May return a promise, in which case the client wont join the pool until the promise resolves. If it is rejected, then the client will be destroyed instead.

ParamTypeDescription
clientPromisePool.ClientA resource that has been released back to the pool.

Factory.log : function

Kind: static typedef of Factory

ParamTypeDescription
msgstringThe message to be logged.
levelstringThe importance of this log message. Possible values are: verbose, info, and error.

Keywords

FAQs

Package last updated on 09 Oct 2016

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc