Skip to content

PIP-197: Add Schema hash and equals to public API #16959

@alpreu

Description

@alpreu

ML discussion thread: https://lists.apache.org/thread/brf946dgzojlqkd8y9s2h11b0rg47qcd

Motivation

Currently, the Schema interface in the public client-api does not provide access to a sensible hash function. The fallback to Java’s object-equality makes it unfit for use in most hash-based collections. For example, it prevents usage as a key in a cache.
Further, the lack of a reliable equals function means that there is no way to identify if two schemas are the same thing.

Goal

The goal of this proposal is to provide a sensible hashCode and equals implementation for Schema as part of the public API.

Currently, pulsar-common contains SchemaHash, a wrapper class that exists to solve the aforementioned problems. However, SchemaHash is not part of the public API, so users should not depend on it.

API Changes

There is no further change required as moving SchemaHash from pulsar-common to the public API. The only further change could be to re-think the class name, as the wrapper offers more than just a schemas hash.

Implementation

Move SchemaHash from pulsar-common org.apache.pulsar.common.protocol.schema package into pulsar-client-api org.apache.pulsar.common.schema package.

Reject Alternatives

Providing default methods for equals and hashCode directly on the Schema interface is not possible because Java prohibits overriding the base Object methods.
Another option would be to provide the hashCode and equals functionality through similarly-named default methods that could be used by any Schema implementation. The drawback of this idea is that it requires developers to override the equals and hashCode to use these provided methods, as well as possibly polluting the interface.

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions