PuppetDB 0.9.1 is the second beta release on the road to 1.0. Changes
include bug fixes and performance improvements. For details on changes
in this release, please see the release notes below.
# Downloads
Available in native package format at
http://yum.puppetlabs.com
http://apt.puppetlabs.com
Source (same license as Puppet): http://github.com/puppetlabs/puppetdb
Available for use with Puppet Enterprise 2.5.1 and later at
http://yum-enterprise.puppetlabs.com/ and http://apt-enterprise.puppetlabs.com/
# Documentation (including how to install): http://docs.puppetlabs.com/puppetdb
# Issues can be filed at:
http://projects.puppetlabs.com/projects/puppetdb/issues
# Upgrading
1. On your puppetdb server, stop the puppetdb daemon
2. On your puppetmaster(s), stop the puppetmaster daemon
3. On your puppetdb server, install the new puppetdb package
4. On your puppetdb server, start the puppetdb daemon
5. On your puppetmaster(s), install the new puppetdb-terminus package
6. On your puppetmaster(s), start the puppetmaster daemon
PuppetDB 0.9.1 Release Notes
====
Many thanks to the following people who contributed patches to this
release:
* Kushal Pisavadia
* Reid Vandewiele
* Deepak Giridharagopal
* Nick Lewis
* Matthaus Litteken
* Daniel Pittman
* Chris Price
* Michael Stahnke
Notable changes:
* (#14613) Don''t fail when collecting exec resources
We were adding aliases for exec resources based on their command,
which is the namevar. This is so that we can properly lookup
resources referred to by relationship metaparameters when producing
relationship edges. However, exec resources aren''t isomorphic,
meaning they aren''t unique based on their namevar. This means we
don''t need to add those aliases, because it''s illegal to
specify a
relationship to an exec resource using its command. It also means we
were adding non-unique aliases, which were evaluated on the agent
after collecting the resources, and could cause conflicts.
* (#14624) Tolerate leading whitespace in puppetdb.conf
The INI file parser included in Puppet treats lines beginning with
whitespace to be continuation lines, adding them to the value of the
previous setting. This causes indentation to break puppetdb.conf,
which is undesired. For example:
[main]
server = puppetdb.example.com
port = 8081
This will cause the value of the server setting to be
"puppetdb.example.com\n port = 8081", and the port setting will not
be set by the file, and will just default to 8080. This is
definitely not our desired behavior, and indentation is something we
want. So the INI parser has been replaced with a simple custom
parser which handles this the way we want it.
* (#14659) Compatibility with PG 8.1.x
RHEL5 ships with 8.1.23, and ARRAY declaration syntax was different
waaaaaay back then. Running PuppetDB with that vintage PG results in
SQLExceptions during initial migration.
In particular, while more recent PG versions support data type
definitions like “foo ARRAY NOT NULL”, PG 8.1 requires “foo ARRAY[1]
NOT NULL”. The “1” is ignored by PG (much like how it ignores the
size of a VARCHAR column).
* (#14665) Removal of SSL provider fails when class not available
For compatibility with OpenJDK and OpenSSL 1.0+, we remove a buggy
OpenJDK security provider. We do this by enumerating the current set
of security providers and removing the problematic ones by checking
if they are the instance of a specific class.
However, if that class doesn''t exist on the system at all, we get a
ClassNotFoundException. We had a try/catch around this code for just
that reason, only it turns out the try/catch isn''t getting invoked
when the error is thrown. So, like, we fixed that.
* (#14586) Incorrect start-stop-daemon args in Debian init script
When we try to stop the daemon, we were passing in `--name puppetdb`
instead of `--exec $JAVA_BIN`. Since our process isn''t actually
named puppetdb, that initial call wouldn''t actually terminate the
process. It would then fall-through to a second code path where the
init script would then try to kill *all* processes with $JAVA_BIN as
the executable. That''s, like, not so great and stuff.
We''ve corrected the args to start-stop-daemon to use both the pidfile
and the executable name to give us a precise match. With that in
place, the secondary code path is no longer necessary.
A pleasant side-effect of this fix is that now stopping PuppetDB is
extremely fast, instead of taking 30 seconds or so.
* Update project to build on suse
This commit does some cleanup on the rakefile and moves the osfamily
fact into an instance variable accessible to erb templates. It
updates the rpm spec template to handle sles requires and
buildrequires and also sets the rubylib for suse.
This isn''t _complete_ support for suse; there''s still no
init script
for suse and we still don''t have any testing around suse. This is
just an intermediary step.
* Fix init script for RedHat-based PE installations
Previously, we were grepping on username in the find_my_pid function of
the init script. This was fine if the username was <= 8 characters, but
since pe-puppetdb is not, ''ps -ef'' would fall back to using
UID in the
processes table, thus causing the function to fail. This in turn led to
empty pid files and puppetdb potentially starting lots of times.
We now grep the jarfile name rather than user to confine the process
listing.
* Sort unordered metaparameter values during catalog serialization
You have a resource with a metaparameter, `tag`, with a value of
`["c", "b", "a"]`. We generate a catalog and
that catalog is sent to
PuppetDB. The next time Puppet runs, you get the same resource, with
the same metaparameter `tag`, only the value is now
`["a", "b", "c"]`. That catalog is also sent to
PuppetDB.
Everything works correctly, however PuppetDB will think that the
second catalog is different from the first catalog. That''s okay in
terms of correctness, but it''s slower...`tag` (and several other
metaparameters) are inherently unordered. We should treat both
catalogs the same because, semantically, they are.
This patchset munges catalogs prior to submission to PuppetDB such
that all inherently unordered metaparameters are sorted. That way
the output is the same no matter the initial ordering.
You may be wondering how it''s possible that Puppet could generate 2
different orders for the same metaparam. But imagine that you''re
using the spaceship operator to set dependency relationships on
resources. Puppet doesn''t order the results of a resource collection
operation. Something like this, for example, can trigger this bug:
Yumrepo <| |> -> Package <| |>
* Perform garbage collection at startup
This simply re-orders the sleep vs the garbage collection in the
garbage collection thread. This avoids skipping garbage collection
altogether if the daemon is being frequently restarted.
--
You received this message because you are subscribed to the Google Groups
"Puppet Developers" group.
To post to this group, send email to puppet-dev@googlegroups.com.
To unsubscribe from this group, send email to
puppet-dev+unsubscribe@googlegroups.com.
For more options, visit this group at
http://groups.google.com/group/puppet-dev?hl=en.
After upgrading to 0.9.1, one of my hosts fails with a NullPointerException
in PuppetDB. Other hosts still work fine.
puppet agent log-
Fri Jun 15 17:10:23 -0400 2012 Puppet (err): Could not retrieve catalog
from remote server: Error 400 on SERVER: Could not retrieve resources from
the PuppetDB at rubus.rcc.uga.edu:8762: [500 Internal Server Error] on
node mango.ctegd.uga.edu
puppetdb log-
2012-06-15 17:10:15,670 WARN [main] [bonecp.BoneCPConfig] JDBC username
was not set in config!
2012-06-15 17:10:15,671 WARN [main] [bonecp.BoneCPConfig] JDBC password
was not set in config!
2012-06-15 17:10:16,944 INFO [BoneCP-pool-watch-thread]
[HSQLDB3771C9F478.ENGINE] checkpointClose start
2012-06-15 17:10:17,207 INFO [BoneCP-pool-watch-thread]
[HSQLDB3771C9F478.ENGINE] checkpointClose end
2012-06-15 17:10:17,234 INFO [main] [cli.services] Starting broker
2012-06-15 17:10:18,111 INFO [main] [journal.Journal] ignoring zero
length, partially initialised journal data file: db-1.log number = 1 ,
length = 0
2012-06-15 17:10:18,185 INFO [main] [cli.services] Starting 4 command
processor threads
2012-06-15 17:10:18,186 INFO [main] [cli.services] Starting query server
2012-06-15 17:10:18,187 INFO [main] [cli.services] Starting database
compactor (60 minute interval)
2012-06-15 17:10:18,197 INFO [clojure-agent-send-off-pool-4] [mortbay.log]
Logging to org.slf4j.impl.Log4jLoggerAdapter(org.mortbay.log) via
org.mortbay.log.Slf4jLog
2012-06-15 17:10:18,201 INFO [clojure-agent-send-off-pool-4] [mortbay.log]
jetty-6.1.x
2012-06-15 17:10:18,217 INFO [clojure-agent-send-off-pool-4] [mortbay.log]
Started SocketConnector@localhost:8761
2012-06-15 17:10:18,391 INFO [clojure-agent-send-off-pool-4] [mortbay.log]
Started SslSocketConnector@rubus.rcc.uga.edu:8762
2012-06-15 17:10:19,086 INFO [command-proc-84] [puppetdb.command]
[61677bb0-a412-405b-8ba7-92c862f5064b] [replace facts] mango.ctegd.uga.edu
2012-06-15 17:10:23,358 ERROR [2003920175@qtp-243298716-2] [mortbay.log]
/resources?query=["and",["=","type","Nagios_host"],["=","exported",true],["=",["node","active"],true],["not",["=",["node","name"],"mango.ctegd.uga.edu"]],["=","tag","public"]]
java.lang.NullPointerException
at
com.puppetlabs.puppetdb.scf.storage$sql_current_connection_database_name.invoke(storage.clj:38)
at
com.puppetlabs.puppetdb.scf.storage$eval2037$fn__2038.invoke(storage.clj:66)
at clojure.lang.MultiFn.invoke(MultiFn.java:163)
at
com.puppetlabs.puppetdb.query.resource$eval8772$fn__8774.invoke(resource.clj:99)
at clojure.lang.MultiFn.invoke(MultiFn.java:163)
at clojure.core$map$fn__3811.invoke(core.clj:2430)
at clojure.lang.LazySeq.sval(LazySeq.java:42)
at clojure.lang.LazySeq.seq(LazySeq.java:60)
at clojure.lang.RT.seq(RT.java:466)
at clojure.core$seq.invoke(core.clj:133)
at clojure.core$map$fn__3811.invoke(core.clj:2424)
at clojure.lang.LazySeq.sval(LazySeq.java:42)
at clojure.lang.LazySeq.seq(LazySeq.java:60)
at clojure.lang.RT.seq(RT.java:466)
at clojure.core$seq.invoke(core.clj:133)
at clojure.core$apply.invoke(core.clj:600)
at clojure.core$mapcat.doInvoke(core.clj:2459)
at clojure.lang.RestFn.invoke(RestFn.java:423)
at
com.puppetlabs.puppetdb.query.resource$eval8787$fn__8789.invoke(resource.clj:144)
at clojure.lang.MultiFn.invoke(MultiFn.java:163)
at
com.puppetlabs.puppetdb.query.resource$query__GT_sql.invoke(resource.clj:60)
at
com.puppetlabs.puppetdb.http.resources$produce_body.invoke(resources.clj:83)
at
com.puppetlabs.puppetdb.http.resources$resources_app.invoke(resources.clj:105)
at
com.puppetlabs.puppetdb.http.server$routes$fn__9125.invoke(server.clj:21)
at com.puppetlabs.puppetdb.http.server$routes.invoke(server.clj:21)
at
ring.middleware.resource$wrap_resource$fn__9096.invoke(resource.clj:17)
at ring.middleware.params$wrap_params$fn__7124.invoke(params.clj:76)
at
com.puppetlabs.middleware$wrap_with_metrics_STAR_$fn__9078$fn__9079.invoke(middleware.clj:30)
at
com.puppetlabs.middleware.proxy$java.lang.Object$Callable$f8c5758f.call(Unknown
Source)
at com.yammer.metrics.core.Timer.time(Timer.java:91)
at
com.puppetlabs.middleware$wrap_with_metrics_STAR_$fn__9078.invoke(middleware.clj:28)
at
com.puppetlabs.middleware$wrap_with_globals$fn__9075.invoke(middleware.clj:13)
at ring.adapter.jetty$proxy_handler$fn__3248.invoke(jetty.clj:16)
at
ring.adapter.jetty.proxy$org.mortbay.jetty.handler.AbstractHandler$0.handle(Unknown
Source)
at
org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152)
at org.mortbay.jetty.Server.handle(Server.java:326)
at
org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:542)
at
org.mortbay.jetty.HttpConnection$RequestHandler.headerComplete(HttpConnection.java:926)
at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:549)
at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:212)
at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:404)
at
org.mortbay.jetty.bio.SocketConnector$Connection.run(SocketConnector.java:228)
at
org.mortbay.jetty.security.SslSocketConnector$SslConnection.run(SslSocketConnector.java:680)
at
org.mortbay.thread.QueuedThreadPool$PoolThread.run(QueuedThreadPool.java:582)
--
You received this message because you are subscribed to the Google Groups
"Puppet Users" group.
To view this discussion on the web visit
https://groups.google.com/d/msg/puppet-users/-/KcNygBD5pEcJ.
To post to this group, send email to puppet-users@googlegroups.com.
To unsubscribe from this group, send email to
puppet-users+unsubscribe@googlegroups.com.
For more options, visit this group at
http://groups.google.com/group/puppet-users?hl=en.
Deepak Giridharagopal
2012-Jun-16 00:44 UTC
Re: [Puppet Users] Re: Announce: PuppetDB 0.9.1 Available
On Fri, Jun 15, 2012 at 3:20 PM, Brian <bdp@uga.edu> wrote:> After upgrading to 0.9.1, one of my hosts fails with a > NullPointerException in PuppetDB. Other hosts still work fine. >Are you perhaps on a RPM-based distro? If so, does an upgrade from 0.9.1-1 to 0.9.1-2 resolve the issue? deepak> > puppet agent log- > Fri Jun 15 17:10:23 -0400 2012 Puppet (err): Could not retrieve catalog > from remote server: Error 400 on SERVER: Could not retrieve resources from > the PuppetDB at rubus.rcc.uga.edu:8762: [500 Internal Server Error] on > node mango.ctegd.uga.edu > > puppetdb log- > 2012-06-15 17:10:15,670 WARN [main] [bonecp.BoneCPConfig] JDBC username > was not set in config! > 2012-06-15 17:10:15,671 WARN [main] [bonecp.BoneCPConfig] JDBC password > was not set in config! > 2012-06-15 17:10:16,944 INFO [BoneCP-pool-watch-thread] > [HSQLDB3771C9F478.ENGINE] checkpointClose start > 2012-06-15 17:10:17,207 INFO [BoneCP-pool-watch-thread] > [HSQLDB3771C9F478.ENGINE] checkpointClose end > 2012-06-15 17:10:17,234 INFO [main] [cli.services] Starting broker > 2012-06-15 17:10:18,111 INFO [main] [journal.Journal] ignoring zero > length, partially initialised journal data file: db-1.log number = 1 , > length = 0 > 2012-06-15 17:10:18,185 INFO [main] [cli.services] Starting 4 command > processor threads > 2012-06-15 17:10:18,186 INFO [main] [cli.services] Starting query server > 2012-06-15 17:10:18,187 INFO [main] [cli.services] Starting database > compactor (60 minute interval) > 2012-06-15 17:10:18,197 INFO [clojure-agent-send-off-pool-4] > [mortbay.log] Logging to org.slf4j.impl.Log4jLoggerAdapter(org.mortbay.log) > via org.mortbay.log.Slf4jLog > 2012-06-15 17:10:18,201 INFO [clojure-agent-send-off-pool-4] > [mortbay.log] jetty-6.1.x > 2012-06-15 17:10:18,217 INFO [clojure-agent-send-off-pool-4] > [mortbay.log] Started SocketConnector@localhost:8761 > 2012-06-15 17:10:18,391 INFO [clojure-agent-send-off-pool-4] > [mortbay.log] Started SslSocketConnector@rubus.rcc.uga.edu:8762 > 2012-06-15 17:10:19,086 INFO [command-proc-84] [puppetdb.command] > [61677bb0-a412-405b-8ba7-92c862f5064b] [replace facts] mango.ctegd.uga.edu > 2012-06-15 17:10:23,358 ERROR [2003920175@qtp-243298716-2] [mortbay.log] > /resources?query=["and",["=","type","Nagios_host"],["=","exported",true],["=",["node","active"],true],["not",["=",["node","name"]," > mango.ctegd.uga.edu"]],["=","tag","public"]] > java.lang.NullPointerException > at > com.puppetlabs.puppetdb.scf.storage$sql_current_connection_database_name.invoke(storage.clj:38) > at > com.puppetlabs.puppetdb.scf.storage$eval2037$fn__2038.invoke(storage.clj:66) > at clojure.lang.MultiFn.invoke(MultiFn.java:163) > at > com.puppetlabs.puppetdb.query.resource$eval8772$fn__8774.invoke(resource.clj:99) > at clojure.lang.MultiFn.invoke(MultiFn.java:163) > at clojure.core$map$fn__3811.invoke(core.clj:2430) > at clojure.lang.LazySeq.sval(LazySeq.java:42) > at clojure.lang.LazySeq.seq(LazySeq.java:60) > at clojure.lang.RT.seq(RT.java:466) > at clojure.core$seq.invoke(core.clj:133) > at clojure.core$map$fn__3811.invoke(core.clj:2424) > at clojure.lang.LazySeq.sval(LazySeq.java:42) > at clojure.lang.LazySeq.seq(LazySeq.java:60) > at clojure.lang.RT.seq(RT.java:466) > at clojure.core$seq.invoke(core.clj:133) > at clojure.core$apply.invoke(core.clj:600) > at clojure.core$mapcat.doInvoke(core.clj:2459) > at clojure.lang.RestFn.invoke(RestFn.java:423) > at > com.puppetlabs.puppetdb.query.resource$eval8787$fn__8789.invoke(resource.clj:144) > at clojure.lang.MultiFn.invoke(MultiFn.java:163) > at > com.puppetlabs.puppetdb.query.resource$query__GT_sql.invoke(resource.clj:60) > at > com.puppetlabs.puppetdb.http.resources$produce_body.invoke(resources.clj:83) > at > com.puppetlabs.puppetdb.http.resources$resources_app.invoke(resources.clj:105) > at > com.puppetlabs.puppetdb.http.server$routes$fn__9125.invoke(server.clj:21) > at com.puppetlabs.puppetdb.http.server$routes.invoke(server.clj:21) > at > ring.middleware.resource$wrap_resource$fn__9096.invoke(resource.clj:17) > at > ring.middleware.params$wrap_params$fn__7124.invoke(params.clj:76) > at > com.puppetlabs.middleware$wrap_with_metrics_STAR_$fn__9078$fn__9079.invoke(middleware.clj:30) > at > com.puppetlabs.middleware.proxy$java.lang.Object$Callable$f8c5758f.call(Unknown > Source) > at com.yammer.metrics.core.Timer.time(Timer.java:91) > at > com.puppetlabs.middleware$wrap_with_metrics_STAR_$fn__9078.invoke(middleware.clj:28) > at > com.puppetlabs.middleware$wrap_with_globals$fn__9075.invoke(middleware.clj:13) > at ring.adapter.jetty$proxy_handler$fn__3248.invoke(jetty.clj:16) > at > ring.adapter.jetty.proxy$org.mortbay.jetty.handler.AbstractHandler$0.handle(Unknown > Source) > at > org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152) > at org.mortbay.jetty.Server.handle(Server.java:326) > at > org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:542) > at > org.mortbay.jetty.HttpConnection$RequestHandler.headerComplete(HttpConnection.java:926) > at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:549) > at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:212) > at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:404) > at > org.mortbay.jetty.bio.SocketConnector$Connection.run(SocketConnector.java:228) > at > org.mortbay.jetty.security.SslSocketConnector$SslConnection.run(SslSocketConnector.java:680) > at > org.mortbay.thread.QueuedThreadPool$PoolThread.run(QueuedThreadPool.java:582) > > > -- > You received this message because you are subscribed to the Google Groups > "Puppet Users" group. > To view this discussion on the web visit > https://groups.google.com/d/msg/puppet-users/-/KcNygBD5pEcJ. > > To post to this group, send email to puppet-users@googlegroups.com. > To unsubscribe from this group, send email to > puppet-users+unsubscribe@googlegroups.com. > For more options, visit this group at > http://groups.google.com/group/puppet-users?hl=en. >-- You received this message because you are subscribed to the Google Groups "Puppet Developers" group. To post to this group, send email to puppet-dev@googlegroups.com. To unsubscribe from this group, send email to puppet-dev+unsubscribe@googlegroups.com. For more options, visit this group at http://groups.google.com/group/puppet-dev?hl=en.
Deepak Giridharagopal
2012-Jun-16 00:47 UTC
Re: [Puppet Users] Re: Announce: PuppetDB 0.9.1 Available
On Fri, Jun 15, 2012 at 6:44 PM, Deepak Giridharagopal < deepak@puppetlabs.com> wrote:> On Fri, Jun 15, 2012 at 3:20 PM, Brian <bdp@uga.edu> wrote: > >> After upgrading to 0.9.1, one of my hosts fails with a >> NullPointerException in PuppetDB. Other hosts still work fine. > >I''ve created http://projects.puppetlabs.com/issues/15073 to track this. deepak -- Deepak Giridharagopal / Puppet Labs / @grim_radical -- You received this message because you are subscribed to the Google Groups "Puppet Users" group. To post to this group, send email to puppet-users@googlegroups.com. To unsubscribe from this group, send email to puppet-users+unsubscribe@googlegroups.com. For more options, visit this group at http://groups.google.com/group/puppet-users?hl=en.