Class MetadataUpdateProposedMessage

  • All Implemented Interfaces:
    Serializable, DiscoveryCustomMessage

    public final class MetadataUpdateProposedMessage
    extends Object
    implements DiscoveryCustomMessage
    MetadataUpdateProposedMessage and MetadataUpdateAcceptedMessage messages make a basis for discovery-based protocol for exchanging metadata describing objects in binary format stored in Ignite caches. All interactions with binary metadata are performed through BinaryMetadataHandler interface implemented in CacheObjectBinaryProcessorImpl processor. Protocol works as follows:
    1. Each thread aiming to add/update metadata sends MetadataUpdateProposedMessage and blocks until receiving acknowledge or reject for proposed update.
    2. Coordinator node checks whether proposed update is in conflict with current version of metadata for the same typeId. In case of conflict initial MetadataUpdateProposedMessage is marked rejected and sent to initiator.
    3. If there are no conflicts on coordinator, pending version for metadata of this typeId is bumped up by one; MetadataUpdateProposedMessage with pending version information is sent across the cluster.
    4. Each node on receiving non-rejected MetadataUpdateProposedMessage updates pending version for the typeId in metadata local cache.
    5. When MetadataUpdateProposedMessage finishes pass, ack is sent. Ack has the same accepted version as pending version of initial MetadataUpdateProposedMessage message.
    6. Each node on receiving MetadataUpdateAcceptedMessage updates accepted version for the typeId. All threads waiting for arrival of ack with this accepted version are unblocked.
    If a thread on some node decides to read metadata which has ongoing update (with pending version strictly greater than accepted version) it gets blocked until MetadataUpdateAcceptedMessage arrives with accepted version equals to pending version of this metadata to the moment when is was initially read by the thread.
    See Also:
    Serialized Form