com.hazelcast.core

## Interface IdGenerator

- All Superinterfaces:
    DistributedObject
  All Known Subinterfaces:
    FlakeIdGenerator
  All Known Implementing Classes:
    ClientFlakeIdGeneratorProxy, ClientIdGeneratorProxy, IdGeneratorImpl, IdGeneratorProxy

  Deprecated.
  The implementation can produce duplicate IDs in case of network split, even with split-brain protection enabled (during short window while split-brain is detected). Use `HazelcastInstance.getFlakeIdGenerator(String)` for an alternative implementation which does not suffer from this problem.

      @Deprecated
      public interface IdGenerator
      extends DistributedObject

  The IdGenerator is responsible for creating unique `long` IDs in a cluster, under normal operating scenarios.

  In theory a `IAtomicLong.incrementAndGet()` could be used to provide the same functionality. The big difference is that the `incrementAndGet` requires one or more remote calls for every invocation and therefore is a performance and scalability bottleneck. The IdGenerator uses an `IAtomicLong` under the hood, but instead of doing a remote call for every call to `newId()`, it does it less frequently. It checks out a chunk of 10,000 IDs and as long as it has not yet consumed all the IDs in its chunk, no remote call is done.

  It can be that IDs generated by different cluster members will get out of order because each member will get its own chunk. It can be that member 1 has chunk 1..10000 and member 2 has 10001..20000. Therefore, member 2 will automatically have IDs that are out of order with the IDs generated by member 1. Next, the chunk is kept until all IDs are used.

  It should be noted that IdGenerator does not guarantee unique IDs in a split brain situation. During a split brain, different partitions of the cluster may have the primary or back-up, and will therefore continue in their respective clusters from the last known value. Other partitions of the cluster may not have the original primary nor the back-up, in which case the `IdGenerator` will be created as new and initialised as per the provided `init(long)`

  When a cluster heals after a split brain, a default large side merge takes place for the `IAtomicLong` that keeps track of the last issued block of IDs, therefore it is possible that already issued IDs could be issued again after the cluster is repaired. As a precaution when in a new record insert situation try to detect if the key already exists and then grab another, possibly executing this logic only after a known split brain merge has occurred.

  Care should be taken if you are using the IdGenerator to provide keys for `IMap` or `ICache`, as after split brain it could be possible for two unique values to share the same key. When a `MapMergePolicy` is applied, one of these unique values will have to be discarded. Unless configured, the default merge policy is `PutIfAbsentMapMergePolicy`.

  It is NOT RECOMMENDED to use `IdGenerator` to provide keys that are also used as unique identifiers in underlying persistent storage, for example in an `IMap` that writes to a relational database using `MapStore`.

- - ### Method Summary

    All Methods Instance Methods Abstract Methods Deprecated Methods
    Modifier and Type | Method and Description
    --- | ---
    `boolean` | `init(long id)` Deprecated. Tries to initialize this `IdGenerator` instance with the given ID.
    `long` | `newId()` Deprecated. Generates and returns a cluster-wide unique ID.

    - ### Methods inherited from interface com.hazelcast.core.DistributedObject

      `destroy, getName, getPartitionKey, getServiceName`

- - ### Method Detail

    - #### init

          boolean init(long id)

      Deprecated.
      Tries to initialize this `IdGenerator` instance with the given ID.

      The next generated ID will be 1 greater than the supplied ID.

      Returns:
        `true` if initialization succeeded, `false` otherwise.

    - #### newId

          long newId()

      Deprecated.
      Generates and returns a cluster-wide unique ID.
      Returns:
        new cluster-wide unique ID

Copyright © 2020. All rights reserved.