[Pkg-puppet-devel] Bug#780664: puppetmaster fills up the database connection pool.

bertagaz bertagaz at ptitcanardnoir.org
Tue Mar 17 14:31:07 UTC 2015


Package: puppetmaster
Version: 3.7.2-3
Severity: important
User: tails-dev at boum.org
Usertags: infra

Hi,

When enabling storeconfig in puppetmaster, the database connection pool gets
filled up by inactive connections opened by previous puppet agents runs. After
the maximum size of the pool have been reached (default to 5 in ActiveRecord),
the puppet agents can't retrieve the catalog anymore and exit with this error:

  err: Could not retrieve catalog from remote server: Error 400 on SERVER:
  could not obtain a database connection within 5.000 seconds (waited
  5.000 seconds)

With the sqlite3 database backend, the puppetmaster opens 5 FDs to the
sqlite database:

  root at puppet-git:~/# lsof /var/lib/puppet/state/clientconfigs.sqlite3
  COMMAND   PID   USER   FD   TYPE DEVICE SIZE/OFF   NODE NAME
  puppet  17031 puppet   12u   REG  253,1 14777344 131800 /var/lib/puppet/state/clientconfigs.sqlite3
  puppet  17031 puppet   13u   REG  253,1 14777344 131800 /var/lib/puppet/state/clientconfigs.sqlite3
  puppet  17031 puppet   14u   REG  253,1 14777344 131800 /var/lib/puppet/state/clientconfigs.sqlite3
  puppet  17031 puppet   15u   REG  253,1 14777344 131800 /var/lib/puppet/state/clientconfigs.sqlite3
  puppet  17031 puppet   16u   REG  253,1 14777344 131800 /var/lib/puppet/state/clientconfigs.sqlite3

The same seems to happen with the MySQL database backend:

  mysql> show processlist\g
  +----+--------+-----------+--------+---------+------+-------+------------------+
  | Id | User   | Host      | db     | Command | Time | State | Info             |
  +----+--------+-----------+--------+---------+------+-------+------------------+
  | 44 | puppet | localhost | puppet | Sleep   |  117 |       | NULL             |
  | 45 | root   | localhost | NULL   | Query   |    0 | NULL  | show processlist |
  | 46 | puppet | localhost | puppet | Sleep   |   98 |       | NULL             |
  | 47 | puppet | localhost | puppet | Sleep   |   79 |       | NULL             |
  | 48 | puppet | localhost | puppet | Sleep   |   59 |       | NULL             |
  | 49 | puppet | localhost | puppet | Sleep   |   40 |       | NULL             |
  +----+--------+-----------+--------+---------+------+-------+------------------+
  6 rows in set (0.00 sec)


This sound a lot like a bug reported upstream a while ago [1], but it's not
easy to track if something came out with upstream's tracker move.

I've tried several changes in lib/puppet/rails.rb:

* replace ActiveRecord::Base.clear_active_connections! by
ActiveRecord::Base.clear_all_connections!
* remove the ActiveRecord::Base.allow_concurrency = true setting, as proposed
in the upstream ticket

But this didn't fix anything. Each time an agent runs, the puppetmaster
initiates a new connection to the database rather than using the active one,
even if it is the same agent than the previous run.

bert.

[1] http://projects.puppetlabs.com/issues/3238 



More information about the Pkg-puppet-devel mailing list