Interface SchemaUpdateHandler

All Known Implementing Classes:
DefaultSchemaUpdateHandler, OfflineSchemaUpdateHandler

public interface SchemaUpdateHandler
Schema update handler is responsible for maintaining the shared schema and synchronizing it with other nodes in the cluster, which means pushing and pulling changes, as well as tracking the current version in the cluster.

The interface has been extracted to abstract out that functionality. It allows for various implementations like Gossip based (the default), ETCD, offline, etc., and make it easier for mocking in unit tests.

  • Method Summary

    Modifier and Type
    Method
    Description
    apply(SchemaTransformation transformation, boolean local)
    Applies schema transformation in the underlying storage and synchronizes with other nodes.
    Marks the local schema to be cleared and refreshed.
    void
    reset(boolean local)
    Resets the schema either by reloading data from the local storage or from the other nodes.
    void
    Starts actively synchronizing schema with the rest of the cluster.
    boolean
    Waits until the schema update handler is ready and returns the result.
  • Method Details

    • start

      void start()
      Starts actively synchronizing schema with the rest of the cluster. It is called in the very beginning of the node startup. It is not expected to block - to await for the startup completion we have another method waitUntilReady(Duration).
    • waitUntilReady

      boolean waitUntilReady(Duration timeout)
      Waits until the schema update handler is ready and returns the result. If the method returns false it means that readiness could not be achieved within the specified period of time. The method can be used just to check if schema is ready by passing Duration.ZERO as the timeout - in such case it returns immediately.
      Parameters:
      timeout - the maximum time to wait for schema readiness
      Returns:
      whether readiness is achieved
    • apply

      Applies schema transformation in the underlying storage and synchronizes with other nodes.
      Parameters:
      transformation - schema transformation to be performed
      local - if true, the caller does not require synchronizing schema with other nodes - in practise local is used only in some tests
      Returns:
      transformation result
    • reset

      void reset(boolean local)
      Resets the schema either by reloading data from the local storage or from the other nodes. Once the schema is refreshed, the callbacks provided in the factory method are executed, and the updated schema version is announced.
      Parameters:
      local - whether we should reset with locally stored schema or fetch the schema from other nodes
    • clear

      Awaitable clear()
      Marks the local schema to be cleared and refreshed. Since calling this method, the update handler tries to obtain a fresh schema definition from a remote source. Once the schema definition is received, the local schema is replaced (instead of being merged which usually happens when the update is received).

      The returned awaitable is fulfilled when the schema is received and applied.