You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
When resources become insufficient for larger loads, a state where the number of records created increases faster than they are purged out can be reached, so the corresponding timeout errors can be expected.
However, some (very noisy) unexpected additional error logs immediately follow the one above when this state is reached:
In this case, the resurfaceio backend the following type assertion is performed on line 217:
decoded, ok := v.(analytics.AnalyticsRecord)
if !ok {
rp.log.Error("Error decoding analytic record")
continue
}
Which fails as the interface v does not hold an analytics.AnalyticsRecord type. This can just result in noisy logs as mentioned above, but for pumps that do not carry out a safe type assertion (decoded := v.(analytics.AnalyticsRecord) instead of decoded, ok := v.(analytics.AnalyticsRecord)), an unhandled runtime panic could be triggered.
By tracing back the origin of these logs, we can see how:
multiple type assertion errors are logged as shown above (one for each one these empty interfaces)
I believe that even though many empty records cause EOF errors at read time, many others do not, and they end up getting passed to the writePumps method as new interface-wrapped decoded values, which causes the type assertion errors.
This issue can be reproduced following the same steps described in PR #731, as the related issue can lead to a state where the number of records builds up faster than they are purged out.
The text was updated successfully, but these errors were encountered:
Timeout errors can occur when retrieving data from redis, especially when attempting to retrieve a large number of records:
When resources become insufficient for larger loads, a state where the number of records created increases faster than they are purged out can be reached, so the corresponding timeout errors can be expected.
However, some (very noisy) unexpected additional error logs immediately follow the one above when this state is reached:
Depending on which pumps are configured, this can result in (also quite noisy) error logs such as:
In this case, the
resurfaceio
backend the following type assertion is performed on line 217:Which fails as the interface
v
does not hold ananalytics.AnalyticsRecord
type. This can just result in noisy logs as mentioned above, but for pumps that do not carry out a safe type assertion (decoded := v.(analytics.AnalyticsRecord)
instead ofdecoded, ok := v.(analytics.AnalyticsRecord)
), an unhandled runtime panic could be triggered.By tracing back the origin of these logs, we can see how:
GetAndDeleteSet
methodI believe that even though many empty records cause EOF errors at read time, many others do not, and they end up getting passed to the
writePumps
method as new interface-wrapped decoded values, which causes the type assertion errors.This issue can be reproduced following the same steps described in PR #731, as the related issue can lead to a state where the number of records builds up faster than they are purged out.
The text was updated successfully, but these errors were encountered: