com.hazelcast.spi.merge

## Interface SplitBrainMergePolicy<V,T extends MergingValue<V>>

- Type Parameters:
    `V` - the type of the returned merged value
    `T` - the type of the required merging value, e.g. a simple `MergingValue<V>` or a composition like `MergingEntry<String, V> & MergingHits<V> & MergingLastAccessTime<V>`
  All Superinterfaces:
    DataSerializable
  All Known Implementing Classes:
    com.hazelcast.spi.impl.merge.AbstractSplitBrainMergePolicy, DiscardMergePolicy, ExpirationTimeMergePolicy, HigherHitsMergePolicy, HyperLogLogMergePolicy, LatestAccessMergePolicy, LatestUpdateMergePolicy, PassThroughMergePolicy, PutIfAbsentMergePolicy

      @Beta
      public interface SplitBrainMergePolicy<V,T extends MergingValue<V>>
      extends DataSerializable

  Policy for merging data structure values after a split-brain has been healed.

  The values of merging and existing `MergingValue`s are always in the in-memory format of the backing data structure. This can be a serialized format, so the content cannot be processed without deserialization. For most merge policies this will be fine, since the key or value are not used.

  The deserialization is not done eagerly for two main reasons:

  - The deserialization is quite expensive and should be avoided, if the result is not needed.
  - There is no need to locate classes of stored entries on the server side, when the entries are not deserialized. So you can put entries from a client by using `InMemoryFormat.BINARY` with a different classpath on client and server. In this case a deserialization could throw a `ClassNotFoundException`.
  If you need the deserialized data you can call `MergingValue.getDeserializedValue()` or `MergingEntry.getDeserializedKey()`, which will deserialize the data lazily.

  A merge policy can implement `HazelcastInstanceAware` to get the `HazelcastInstance` injected. This can be used to retrieve the user context via `HazelcastInstance.getUserContext()`, which is an easy way to get user dependencies that are otherwise hard to obtain.

  A merge policy can also implement `NodeAware` to get an instance of `Node` injected.

  Since:
    3.10

- - ### Method Summary

    All Methods Instance Methods Abstract Methods
    Modifier and Type | Method and Description
    --- | ---
    `V` | `merge(T mergingValue, T existingValue)` Selects the value of either the merging or the existing `MergingValue` which should be merged.

    - ### Methods inherited from interface com.hazelcast.nio.serialization.DataSerializable

      `readData, writeData`

- - ### Method Detail

    - #### merge

          V merge(T mergingValue,
                  T existingValue)

      Selects the value of either the merging or the existing `MergingValue` which should be merged.

      Note that the existing `MergingValue` instance may be `null` if no matching data could be found to the merging `MergingValue`.

      Parameters:
        `mergingValue` - `MergingValue` instance that has the merging data of the smaller sub-cluster
        `existingValue` - `MergingValue` instance that has the existing data or `null` if no matching data exists
      Returns:
        the selected value for merging

Copyright © 2018. All rights reserved.