If we rely on dictionary_id: nil as the signal to renegotiate, we can just always call the function and only ever set it to nil on failover to trigger renegotiation.
If we fail to fetch the dictionary we fall back to non-compressed mode and we stay there for the rest of the subscriber's lifetime. We could consider mechanisms for trying to recover compression, but it's all tradeoffs.