Issue #5298 has been updated by Markus Roberts.

Status changed from Investigating to Accepted

If this is a regression it appears to be a consequence of the fix for #4344 in 
commit:449315a2c705df2396852462a1d1e14774b9f117

    [#4397]+[#4344] Move type-name resolution out of Puppet::Resource into the 
AST resources.
    
    Move type-name resolution out of Puppet::Resource into the AST resources.
    Move find_resource_type out of Puppet::Resource into Scope
    Thus, never pass unqualified type names to Puppet::Resource objects.
    Thus, Puppet::Resource objects don't need the namespace property,
    and Puppet::Resource objects never consult the harddrive to look for
    .pp files that might contain their type definitions,
    Thus, performance is improved.
    
    Also removes the temporary fix for #4257 that caused #4397
    (The code was too eager to look for a class in the topscope)
    

----------------------------------------
Bug #5298: Cannot find an exported define if code haven't yet been autoloaded 
on compile instance for the collecting host.
https://projects.puppetlabs.com/issues/5298

Author: Peter Meier
Status: Accepted
Priority: High
Assignee: Markus Roberts
Category: 
Target version: 
Affected Puppet version: 2.6.3rc3
Keywords: 
Branch: 


Given a define that is exported on host A and collected on host B, but host B 
does not apply the define itself (and the current instance has not yet loaded 
the code for the define) hence it only applies the collected one, we get the 
following error:

Server:
<pre>
/opt/ruby-enterprise/lib/ruby/gems/1.8/gems/puppet-2.6.3/lib/puppet/util/errors.rb:60:in
 `fail'
/opt/ruby-enterprise/lib/ruby/gems/1.8/gems/puppet-2.6.3/lib/puppet/parser/resource.rb:75:in
 `evaluate'
/opt/ruby-enterprise/lib/ruby/gems/1.8/gems/puppet-2.6.3/lib/puppet/parser/compiler.rb:255:in
 `evaluate_definitions'
/opt/ruby-enterprise/lib/ruby/gems/1.8/gems/puppet-2.6.3/lib/puppet/parser/compiler.rb:255:in
 `each'
/opt/ruby-enterprise/lib/ruby/gems/1.8/gems/puppet-2.6.3/lib/puppet/parser/compiler.rb:255:in
 `evaluate_definitions'
/opt/ruby-enterprise/lib/ruby/gems/1.8/gems/puppet-2.6.3/lib/puppet/util/errors.rb:35:in
 `exceptwrap'
/opt/ruby-enterprise/lib/ruby/gems/1.8/gems/puppet-2.6.3/lib/puppet/parser/compiler.rb:254:in
 `evaluate_definitions'
/opt/ruby-enterprise/lib/ruby/gems/1.8/gems/puppet-2.6.3/lib/puppet/parser/compiler.rb:270:in
 `evaluate_generators'
/opt/ruby-enterprise/lib/ruby/gems/1.8/gems/puppet-2.6.3/lib/puppet/parser/compiler.rb:265:in
 `loop'
/opt/ruby-enterprise/lib/ruby/gems/1.8/gems/puppet-2.6.3/lib/puppet/parser/compiler.rb:265:in
 `evaluate_generators'
/opt/ruby-enterprise/lib/ruby/gems/1.8/gems/puppet-2.6.3/lib/puppet/parser/compiler.rb:107:in
 `compile'
/opt/ruby-enterprise/lib/ruby/gems/1.8/gems/puppet-2.6.3/lib/puppet/parser/compiler.rb:18:in
 `compile'
/opt/ruby-enterprise/lib/ruby/gems/1.8/gems/puppet-2.6.3/lib/puppet/indirector/catalog/compiler.rb:77:in
 `compile'
/opt/ruby-enterprise/lib/ruby/gems/1.8/gems/puppet-2.6.3/lib/puppet/util.rb:192:in
 `benchmark'
/opt/ruby-enterprise/lib/ruby/1.8/benchmark.rb:308:in `realtime'
/opt/ruby-enterprise/lib/ruby/gems/1.8/gems/puppet-2.6.3/lib/puppet/util.rb:191:in
 `benchmark'
/opt/ruby-enterprise/lib/ruby/gems/1.8/gems/puppet-2.6.3/lib/puppet/indirector/catalog/compiler.rb:75:in
 `compile'
/opt/ruby-enterprise/lib/ruby/gems/1.8/gems/puppet-2.6.3/lib/puppet/indirector/catalog/compiler.rb:34:in
 `find'
/opt/ruby-enterprise/lib/ruby/gems/1.8/gems/puppet-2.6.3/lib/puppet/indirector/indirection.rb:193:in
 `find'
/opt/ruby-enterprise/lib/ruby/gems/1.8/gems/puppet-2.6.3/lib/puppet/indirector.rb:50:in
 `find'
/opt/ruby-enterprise/lib/ruby/gems/1.8/gems/puppet-2.6.3/lib/puppet/network/http/handler.rb:101:in
 `do_find'
/opt/ruby-enterprise/lib/ruby/gems/1.8/gems/puppet-2.6.3/lib/puppet/network/http/handler.rb:68:in
 `send'
/opt/ruby-enterprise/lib/ruby/gems/1.8/gems/puppet-2.6.3/lib/puppet/network/http/handler.rb:68:in
 `process'
/opt/ruby-enterprise/lib/ruby/gems/1.8/gems/puppet-2.6.3/lib/puppet/network/http/webrick/rest.rb:24:in
 `service'
/opt/ruby-enterprise/lib/ruby/1.8/webrick/httpserver.rb:104:in `service'
/opt/ruby-enterprise/lib/ruby/1.8/webrick/httpserver.rb:65:in `run'
/opt/ruby-enterprise/lib/ruby/gems/1.8/gems/puppet-2.6.3/lib/puppet/network/http/webrick.rb:45
/opt/ruby-enterprise/lib/ruby/1.8/webrick/server.rb:173:in `call'
/opt/ruby-enterprise/lib/ruby/1.8/webrick/server.rb:173:in `start_thread'
/opt/ruby-enterprise/lib/ruby/1.8/webrick/server.rb:162:in `start'
/opt/ruby-enterprise/lib/ruby/1.8/webrick/server.rb:162:in `start_thread'
/opt/ruby-enterprise/lib/ruby/1.8/webrick/server.rb:95:in `start'
/opt/ruby-enterprise/lib/ruby/1.8/webrick/server.rb:92:in `each'
/opt/ruby-enterprise/lib/ruby/1.8/webrick/server.rb:92:in `start'
/opt/ruby-enterprise/lib/ruby/1.8/webrick/server.rb:23:in `start'
/opt/ruby-enterprise/lib/ruby/1.8/webrick/server.rb:82:in `start'
/opt/ruby-enterprise/lib/ruby/gems/1.8/gems/puppet-2.6.3/lib/puppet/network/http/webrick.rb:42:in
 `listen'
/opt/ruby-enterprise/lib/ruby/gems/1.8/gems/puppet-2.6.3/lib/puppet/network/http/webrick.rb:41:in
 `initialize'
/opt/ruby-enterprise/lib/ruby/gems/1.8/gems/puppet-2.6.3/lib/puppet/network/http/webrick.rb:41:in
 `new'
/opt/ruby-enterprise/lib/ruby/gems/1.8/gems/puppet-2.6.3/lib/puppet/network/http/webrick.rb:41:in
 `listen'
/opt/ruby-enterprise/lib/ruby/gems/1.8/gems/puppet-2.6.3/lib/puppet/network/http/webrick.rb:38:in
 `synchronize'
/opt/ruby-enterprise/lib/ruby/gems/1.8/gems/puppet-2.6.3/lib/puppet/network/http/webrick.rb:38:in
 `listen'
/opt/ruby-enterprise/lib/ruby/gems/1.8/gems/puppet-2.6.3/lib/puppet/network/server.rb:127:in
 `listen'
/opt/ruby-enterprise/lib/ruby/gems/1.8/gems/puppet-2.6.3/lib/puppet/network/server.rb:142:in
 `start'
/opt/ruby-enterprise/lib/ruby/gems/1.8/gems/puppet-2.6.3/lib/puppet/daemon.rb:124:in
 `start'
/opt/ruby-enterprise/lib/ruby/gems/1.8/gems/puppet-2.6.3/lib/puppet/application/master.rb:114:in
 `main'
/opt/ruby-enterprise/lib/ruby/gems/1.8/gems/puppet-2.6.3/lib/puppet/application/master.rb:46:in
 `run_command'
/opt/ruby-enterprise/lib/ruby/gems/1.8/gems/puppet-2.6.3/lib/puppet/application.rb:287:in
 `run'
/opt/ruby-enterprise/lib/ruby/gems/1.8/gems/puppet-2.6.3/lib/puppet/application.rb:393:in
 `exit_on_fail'
/opt/ruby-enterprise/lib/ruby/gems/1.8/gems/puppet-2.6.3/lib/puppet/application.rb:287:in
 `run'
/opt/ruby-enterprise/lib/ruby/gems/1.8/gems/puppet-2.6.3/lib/puppet/util/command_line.rb:55:in
 `execute'
/opt/ruby-enterprise/lib/ruby/gems/1.8/gems/puppet-2.6.3/bin/puppet:4
/opt/ruby-enterprise/bin/puppet:19:in `load'
/opt/ruby-enterprise/bin/puppet:19
err: Cannot find definition Awstats::Server::Sitestorage at line 64 on node 
foo.bar.ch
/opt/ruby-enterprise/lib/ruby/gems/1.8/gems/puppet-2.6.3/lib/puppet/parser/compiler.rb:21:in
 `compile'
/opt/ruby-enterprise/lib/ruby/gems/1.8/gems/puppet-2.6.3/lib/puppet/indirector/catalog/compiler.rb:77:in
 `compile'
/opt/ruby-enterprise/lib/ruby/gems/1.8/gems/puppet-2.6.3/lib/puppet/util.rb:192:in
 `benchmark'
/opt/ruby-enterprise/lib/ruby/1.8/benchmark.rb:308:in `realtime'
/opt/ruby-enterprise/lib/ruby/gems/1.8/gems/puppet-2.6.3/lib/puppet/util.rb:191:in
 `benchmark'
/opt/ruby-enterprise/lib/ruby/gems/1.8/gems/puppet-2.6.3/lib/puppet/indirector/catalog/compiler.rb:75:in
 `compile'
/opt/ruby-enterprise/lib/ruby/gems/1.8/gems/puppet-2.6.3/lib/puppet/indirector/catalog/compiler.rb:34:in
 `find'
/opt/ruby-enterprise/lib/ruby/gems/1.8/gems/puppet-2.6.3/lib/puppet/indirector/indirection.rb:193:in
 `find'
/opt/ruby-enterprise/lib/ruby/gems/1.8/gems/puppet-2.6.3/lib/puppet/indirector.rb:50:in
 `find'
/opt/ruby-enterprise/lib/ruby/gems/1.8/gems/puppet-2.6.3/lib/puppet/network/http/handler.rb:101:in
 `do_find'
/opt/ruby-enterprise/lib/ruby/gems/1.8/gems/puppet-2.6.3/lib/puppet/network/http/handler.rb:68:in
 `send'
/opt/ruby-enterprise/lib/ruby/gems/1.8/gems/puppet-2.6.3/lib/puppet/network/http/handler.rb:68:in
 `process'
/opt/ruby-enterprise/lib/ruby/gems/1.8/gems/puppet-2.6.3/lib/puppet/network/http/webrick/rest.rb:24:in
 `service'
/opt/ruby-enterprise/lib/ruby/1.8/webrick/httpserver.rb:104:in `service'
/opt/ruby-enterprise/lib/ruby/1.8/webrick/httpserver.rb:65:in `run'
/opt/ruby-enterprise/lib/ruby/gems/1.8/gems/puppet-2.6.3/lib/puppet/network/http/webrick.rb:45
/opt/ruby-enterprise/lib/ruby/1.8/webrick/server.rb:173:in `call'
/opt/ruby-enterprise/lib/ruby/1.8/webrick/server.rb:173:in `start_thread'
/opt/ruby-enterprise/lib/ruby/1.8/webrick/server.rb:162:in `start'
/opt/ruby-enterprise/lib/ruby/1.8/webrick/server.rb:162:in `start_thread'
/opt/ruby-enterprise/lib/ruby/1.8/webrick/server.rb:95:in `start'
/opt/ruby-enterprise/lib/ruby/1.8/webrick/server.rb:92:in `each'
/opt/ruby-enterprise/lib/ruby/1.8/webrick/server.rb:92:in `start'
/opt/ruby-enterprise/lib/ruby/1.8/webrick/server.rb:23:in `start'
/opt/ruby-enterprise/lib/ruby/1.8/webrick/server.rb:82:in `start'
/opt/ruby-enterprise/lib/ruby/gems/1.8/gems/puppet-2.6.3/lib/puppet/network/http/webrick.rb:42:in
 `listen'
/opt/ruby-enterprise/lib/ruby/gems/1.8/gems/puppet-2.6.3/lib/puppet/network/http/webrick.rb:41:in
 `initialize'
/opt/ruby-enterprise/lib/ruby/gems/1.8/gems/puppet-2.6.3/lib/puppet/network/http/webrick.rb:41:in
 `new'
/opt/ruby-enterprise/lib/ruby/gems/1.8/gems/puppet-2.6.3/lib/puppet/network/http/webrick.rb:41:in
 `listen'
/opt/ruby-enterprise/lib/ruby/gems/1.8/gems/puppet-2.6.3/lib/puppet/network/http/webrick.rb:38:in
 `synchronize'
/opt/ruby-enterprise/lib/ruby/gems/1.8/gems/puppet-2.6.3/lib/puppet/network/http/webrick.rb:38:in
 `listen'
/opt/ruby-enterprise/lib/ruby/gems/1.8/gems/puppet-2.6.3/lib/puppet/network/server.rb:127:in
 `listen'
/opt/ruby-enterprise/lib/ruby/gems/1.8/gems/puppet-2.6.3/lib/puppet/network/server.rb:142:in
 `start'
/opt/ruby-enterprise/lib/ruby/gems/1.8/gems/puppet-2.6.3/lib/puppet/daemon.rb:124:in
 `start'
/opt/ruby-enterprise/lib/ruby/gems/1.8/gems/puppet-2.6.3/lib/puppet/application/master.rb:114:in
 `main'
/opt/ruby-enterprise/lib/ruby/gems/1.8/gems/puppet-2.6.3/lib/puppet/application/master.rb:46:in
 `run_command'
/opt/ruby-enterprise/lib/ruby/gems/1.8/gems/puppet-2.6.3/lib/puppet/application.rb:287:in
 `run'
/opt/ruby-enterprise/lib/ruby/gems/1.8/gems/puppet-2.6.3/lib/puppet/application.rb:393:in
 `exit_on_fail'
/opt/ruby-enterprise/lib/ruby/gems/1.8/gems/puppet-2.6.3/lib/puppet/application.rb:287:in
 `run'
/opt/ruby-enterprise/lib/ruby/gems/1.8/gems/puppet-2.6.3/lib/puppet/util/command_line.rb:55:in
 `execute'
/opt/ruby-enterprise/lib/ruby/gems/1.8/gems/puppet-2.6.3/bin/puppet:4
/opt/ruby-enterprise/bin/puppet:19:in `load'
/opt/ruby-enterprise/bin/puppet:19
err: Cannot find definition Awstats::Server::Sitestorage at line 64 on node 
foo.bar.ch
</pre>

Client:
<pre>
err: Could not retrieve catalog from remote server: Error 400 on SERVER: Cannot 
find definition Awstats::Server::Sitestorage at line 64 on node foo.bar.ch
</pre>

This is likely an autoloading issue, as if I run this code on a webrick (single 
thread) and I run puppet on host A (which is exporting the define) prior to 
host B (which collects the exported resources) it will work on subsequent runs 
on host B.

However, obviously this is hard to ensure on a passenger based host.

This means that exported resources are currently not (really) working on 2.6.x, 
therefor I set the priority as high.

Additionally the error message is not very helpful (which line 64?) and I'm 
going to file that as another bug report.




-- 
You have received this notification because you have either subscribed to it, 
or are involved in it.
To change your notification preferences, please click here: 
http://projects.puppetlabs.com/my/account

-- 
You received this message because you are subscribed to the Google Groups 
"Puppet Bugs" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/puppet-bugs?hl=en.

Reply via email to