Add support for a redis-based reporting for invalid mirrorred objects
The idea is that we check the BaseModel validity at journal deserialization time so that we still have access to the raw object from kafka for complete reporting (object id plus raw message from kafka).
This uses a new ModelObjectDeserializer class that is responsible for
deserializing the kafka message (still using kafka_to_value) then
immediately create the BaseModel object from that dict. Its convert
method is then passed as value_deserializer
argument of the
JournalClient
.
Then, for each deserialized object from kafka, if it's a HashableObject, check its validity by comparing the computed hash with its id.
If it's invalid, report the error in logs, and if configured, register the
invalid object in via the reporter
callback.
In the cli code, a Redis.set()
is used a such a callback (if configured).
So it simply stores invalid objects using the object id a key (typically its
swhid), and the raw kafka message value as value.
Related to #3693 (closed).
Alse refactor fixer.fix_objects() to extract the inner object_fixers dict allowing to use this dict independently of the fix_objects() function.
Depends on !742 (closed).
Migrated from D6571 (view on Phabricator)