Open atkrv opened 2 years ago
Oh, almost forgot!
I'm using prom/prometheus:v2.33.3
+ trickstercache/trickster:2.0.0-beta2
š³ images.
We also ran into this with similar configuration and same versions of tricksters & prometheus.
Seems there's some issue while merging of two JSON payloads - https://stackoverflow.com/questions/64460591/unmarshalling-json-returns-an-error-invalid-character-x1f-looking-for-beginn
@jranson could you please take a look? š
I have the same issue. at least in my case is happening because trickster is encoding the response from the backends with gzip even if it was received with no encoding. and then when it comes time to parse and merge the results, it's trying to json parse gzip-encoded data directly (hence the \x1f
which is the first byte of a gzip header)
the response from the backend gets encoded here, but the client
in this case ends up being trickster itself.
I've "fixed" the problem for me by decoding it as needed in the Body
function:
diff --git a/pkg/proxy/response/merge/merge.go b/pkg/proxy/response/merge/merge.go
index 4a6ed876..ee2db1f1 100644
--- a/pkg/proxy/response/merge/merge.go
+++ b/pkg/proxy/response/merge/merge.go
@@ -17,8 +17,13 @@
package merge
import (
+ "bytes"
+ "io"
"net/http"
+ "github.com/trickstercache/trickster/v2/pkg/encoding/profile"
+ "github.com/trickstercache/trickster/v2/pkg/encoding/providers"
+ "github.com/trickstercache/trickster/v2/pkg/proxy/headers"
"github.com/trickstercache/trickster/v2/pkg/proxy/request"
"github.com/trickstercache/trickster/v2/pkg/util/copiers"
)
@@ -57,6 +62,22 @@ func (rg *ResponseGate) WriteHeader(i int) {
// Body returns the stored body for merging
func (rg *ResponseGate) Body() []byte {
+ ep := profile.Profile{
+ ContentEncoding: rg.header.Get(headers.NameContentEncoding),
+ ContentType: rg.header.Get(headers.NameContentType),
+ }
+
+ ep.ContentEncodingNum = providers.ProviderID(ep.ContentEncoding)
+
+ di := ep.GetDecoderInitializer()
+ if di != nil {
+ decoder := di(bytes.NewReader(rg.body))
+
+ data, _ := io.ReadAll(decoder)
+
+ return data
+ }
+
return rg.body
}
I do not think this is the right solution to the problem though as the error's being ignored and the response to the final client does not have any Content-Encoding set. it does work to validate that the issue is about trying to parse the data without decoding it first (or saving it decoded when it should have been plain text)
@jnichols-git do you know what would be the proper way to handle this?
Hey! š
Got alot of errors in logs while using 'tsm' ALB mode š
I assume that I misconfigure something, but I've spend a couple of days on debugging already and found nothing special in my config.
@jranson could you please assist? š
Thanks!
Log:
Config:
Full config: