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.