Skip to content

Commit 4d7ebae

Browse files
Merge pull request #9044 from joshcooper/warn_pson
(PUP-11787) Warn if we fail to serialize and fallback
2 parents 049dc6a + 394f263 commit 4d7ebae

File tree

2 files changed

+7
-4
lines changed

2 files changed

+7
-4
lines changed

lib/puppet/network/http/api/indirected_routes.rb

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -124,7 +124,7 @@ def do_find(indirection, key, params, request, response)
124124

125125
rendered_result = result
126126

127-
rendered_format = first_response_formatter_for(indirection.model, request) do |format|
127+
rendered_format = first_response_formatter_for(indirection.model, request, key) do |format|
128128
if result.respond_to?(:render)
129129
Puppet::Util::Profiler.profile(_("Rendered result in %{format}") % { format: format }, [:http, :v3_render, format]) do
130130
rendered_result = result.render(format)
@@ -157,7 +157,7 @@ def do_search(indirection, key, params, request, response)
157157

158158
rendered_result = nil
159159

160-
rendered_format = first_response_formatter_for(indirection.model, request) do |format|
160+
rendered_format = first_response_formatter_for(indirection.model, request, key) do |format|
161161
rendered_result = indirection.model.render_multiple(format, result)
162162
end
163163

@@ -185,14 +185,15 @@ def do_save(indirection, key, params, request, response)
185185

186186
# Return the first response formatter that didn't cause the yielded
187187
# block to raise a FormatError.
188-
def first_response_formatter_for(model, request, &block)
188+
def first_response_formatter_for(model, request, key, &block)
189189
formats = accepted_response_formatters_for(model, request)
190190
formatter = formats.find do |format|
191191
begin
192192
yield format
193193
true
194194
rescue Puppet::Network::FormatHandler::FormatError => err
195-
Puppet.log_exception(err, err.message, level: :debug)
195+
Puppet.warning(_("Failed to serialize %{model} for '%{key}': %{detail}") %
196+
{model: model, key: key, detail: err})
196197
false
197198
end
198199
end

spec/unit/network/http/api/indirected_routes_spec.rb

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -182,6 +182,7 @@
182182
indirection.save(data, "my data")
183183
request = a_request_that_finds(data, :accept_header => "application/json, text/pson")
184184
allow(data).to receive(:to_json).and_raise(Puppet::Network::FormatHandler::FormatError, 'Could not render to Puppet::Network::Format[json]: source sequence is illegal/malformed utf-8')
185+
expect(Puppet).to receive(:warning).with(/Failed to serialize Puppet::IndirectorTesting for 'my data': Could not render to Puppet::Network::Format\[json\]/)
185186

186187
handler.call(request, response)
187188

@@ -228,6 +229,7 @@
228229
indirection.save(data, "my data")
229230
request = a_request_that_searches(Puppet::IndirectorTesting.new("my"), :accept_header => "application/json, text/pson")
230231
allow(data).to receive(:to_json).and_raise(Puppet::Network::FormatHandler::FormatError, 'Could not render to Puppet::Network::Format[json]: source sequence is illegal/malformed utf-8')
232+
expect(Puppet).to receive(:warning).with(/Failed to serialize Puppet::IndirectorTesting for 'my': Could not render_multiple to Puppet::Network::Format\[json\]/)
231233

232234
handler.call(request, response)
233235

0 commit comments

Comments
 (0)