org.apache.ignite.configuration

## Class ClientConfiguration

- java.lang.Object
- - org.apache.ignite.configuration.ClientConfiguration

- All Implemented Interfaces:
    Serializable

      public final class ClientConfiguration
      extends Object
      implements Serializable

  `TcpIgniteClient` configuration.
  See Also:
    Serialized Form

- - ### Constructor Summary

    Constructors
    Constructor and Description
    `ClientConfiguration()`

  - ### Method Summary

    All Methods Instance Methods Concrete Methods
    Modifier and Type | Method and Description
    --- | ---
    `String[]` | `getAddresses()`
    `ClientAddressFinder` | `getAddressesFinder()`
    `Executor` | `getAsyncContinuationExecutor()` Gets the async continuation executor.
    `BinaryConfiguration` | `getBinaryConfiguration()`
    `EventListener[]` | `getEventListeners()`
    `long` | `getHeartbeatInterval()` Gets the heartbeat message interval, in milliseconds.
    `IgniteLogger` | `getLogger()` Gets the logger.
    `ClientPartitionAwarenessMapperFactory` | `getPartitionAwarenessMapperFactory()`
    `int` | `getReceiveBufferSize()`
    `long` | `getReconnectThrottlingPeriod()`
    `int` | `getReconnectThrottlingRetries()`
    `int` | `getRetryLimit()`
    `ClientRetryPolicy` | `getRetryPolicy()` Gets the retry policy.
    `int` | `getSendBufferSize()`
    `String` | `getSslClientCertificateKeyStorePassword()`
    `String` | `getSslClientCertificateKeyStorePath()`
    `String` | `getSslClientCertificateKeyStoreType()`
    `javax.cache.configuration.Factory<SSLContext>` | `getSslContextFactory()`
    `String` | `getSslKeyAlgorithm()`
    `SslMode` | `getSslMode()`
    `SslProtocol` | `getSslProtocol()`
    `String` | `getSslTrustCertificateKeyStorePassword()`
    `String` | `getSslTrustCertificateKeyStorePath()`
    `String` | `getSslTrustCertificateKeyStoreType()`
    `int` | `getTimeout()`
    `ClientTransactionConfiguration` | `getTransactionConfiguration()` Gets transactions configuration.
    `Map<String,String>` | `getUserAttributes()` Returns user attributes which can be used on server node.
    `String` | `getUserName()`
    `String` | `getUserPassword()`
    `boolean` | `isAutoBinaryConfigurationEnabled()` Gets a value indicating whether automatic binary configuration retrieval should be enabled.
    `boolean` | `isClusterDiscoveryEnabled()` Gets a value indicating whether cluster discovery should be enabled.
    `boolean` | `isHeartbeatEnabled()` Gets a value indicating whether heartbeats are enabled.
    `boolean` | `isPartitionAwarenessEnabled()` Default is `true`: client sends requests directly to the primary node for the given cache key.
    `boolean` | `isSslTrustAll()`
    `boolean` | `isTcpNoDelay()`
    `ClientConfiguration` | `setAddresses(String... addrs)` Set addresses of Ignite server nodes within a cluster.
    `ClientConfiguration` | `setAddressesFinder(ClientAddressFinder finder)`
    `ClientConfiguration` | `setAsyncContinuationExecutor(Executor asyncContinuationExecutor)` Sets the async continuation executor.
    `ClientConfiguration` | `setAutoBinaryConfigurationEnabled(boolean autoBinaryConfigurationEnabled)` Sets a value indicating whether automatic binary configuration retrieval should be enabled.
    `ClientConfiguration` | `setBinaryConfiguration(BinaryConfiguration binaryCfg)`
    `ClientConfiguration` | `setClusterDiscoveryEnabled(boolean clusterDiscoveryEnabled)` Sets a value indicating whether cluster discovery should be enabled.
    `ClientConfiguration` | `setEventListeners(EventListener... listeners)`
    `ClientConfiguration` | `setHeartbeatEnabled(boolean heartbeatEnabled)` Sets a value indicating whether heartbeats are enabled.
    `ClientConfiguration` | `setHeartbeatInterval(long heartbeatInterval)` Sets the heartbeat message interval, in milliseconds.
    `ClientConfiguration` | `setLogger(IgniteLogger logger)` Sets the logger.
    `ClientConfiguration` | `setPartitionAwarenessEnabled(boolean partitionAwarenessEnabled)` Sets a value indicating whether partition awareness should be enabled.
    `ClientConfiguration` | `setPartitionAwarenessMapperFactory(ClientPartitionAwarenessMapperFactory factory)`
    `ClientConfiguration` | `setReceiveBufferSize(int rcvBufSize)`
    `ClientConfiguration` | `setReconnectThrottlingPeriod(long reconnectThrottlingPeriod)` Sets reconnect throttling period.
    `ClientConfiguration` | `setReconnectThrottlingRetries(int reconnectThrottlingRetries)` Sets reconnect throttling retries.
    `ClientConfiguration` | `setRetryLimit(int retryLimit)` Sets the retry limit.
    `ClientConfiguration` | `setRetryPolicy(ClientRetryPolicy retryPolicy)` Sets the retry policy.
    `ClientConfiguration` | `setSendBufferSize(int sndBufSize)`
    `ClientConfiguration` | `setSslClientCertificateKeyStorePassword(String newVal)`
    `ClientConfiguration` | `setSslClientCertificateKeyStorePath(String newVal)`
    `ClientConfiguration` | `setSslClientCertificateKeyStoreType(String newVal)`
    `ClientConfiguration` | `setSslContextFactory(javax.cache.configuration.Factory<SSLContext> newVal)`
    `ClientConfiguration` | `setSslKeyAlgorithm(String newVal)`
    `ClientConfiguration` | `setSslMode(SslMode sslMode)`
    `ClientConfiguration` | `setSslProtocol(SslProtocol newVal)`
    `ClientConfiguration` | `setSslTrustAll(boolean newVal)`
    `ClientConfiguration` | `setSslTrustCertificateKeyStorePassword(String newVal)`
    `ClientConfiguration` | `setSslTrustCertificateKeyStorePath(String newVal)`
    `ClientConfiguration` | `setSslTrustCertificateKeyStoreType(String newVal)`
    `ClientConfiguration` | `setTcpNoDelay(boolean tcpNoDelay)`
    `ClientConfiguration` | `setTimeout(int timeout)`
    `ClientConfiguration` | `setTransactionConfiguration(ClientTransactionConfiguration txCfg)` Sets transactions configuration.
    `ClientConfiguration` | `setUserAttributes(Map<String,String> userAttrs)` Sets user attributes which can be used to send additional info to the server nodes.
    `ClientConfiguration` | `setUserName(String newVal)`
    `ClientConfiguration` | `setUserPassword(String newVal)`
    `String` | `toString()`

    - ### Methods inherited from class java.lang.Object

      `clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait`

- - ### Constructor Detail

    - #### ClientConfiguration

          public ClientConfiguration()

  - ### Method Detail

    - #### getAddresses

          public String[] getAddresses()

      Returns:
        Host addresses.

    - #### setAddresses

          public ClientConfiguration setAddresses(String... addrs)

      Set addresses of Ignite server nodes within a cluster. An address can be IPv4 address or hostname, with or without port. If port is not set then Ignite will generate multiple addresses for default port range. See `ClientConnectorConfiguration.DFLT_PORT`, `ClientConnectorConfiguration.DFLT_PORT_RANGE`.
      Parameters:
        `addrs` - Host addresses.
      Returns:
        `this` for chaining.

    - #### getAddressesFinder

          public ClientAddressFinder getAddressesFinder()

      Returns:
        Finder that finds server node addresses.

    - #### setAddressesFinder

          public ClientConfiguration setAddressesFinder(ClientAddressFinder finder)

      Parameters:
        `finder` - Finds server node addresses.
      Returns:
        `this` for chaining.

    - #### isTcpNoDelay

          public boolean isTcpNoDelay()

      Returns:
        Whether Nagle's algorithm is enabled.

    - #### setTcpNoDelay

          public ClientConfiguration setTcpNoDelay(boolean tcpNoDelay)

      Parameters:
        `tcpNoDelay` - whether Nagle's algorithm is enabled.
      Returns:
        `this` for chaining.

    - #### getTimeout

          public int getTimeout()

      Returns:
        Send/receive timeout in milliseconds.

    - #### setTimeout

          public ClientConfiguration setTimeout(int timeout)

      Parameters:
        `timeout` - Send/receive timeout in milliseconds.
      Returns:
        `this` for chaining.

    - #### getSendBufferSize

          public int getSendBufferSize()

      Returns:
        Send buffer size.

    - #### setSendBufferSize

          public ClientConfiguration setSendBufferSize(int sndBufSize)

      Parameters:
        `sndBufSize` - Send buffer size.
      Returns:
        `this` for chaining.

    - #### getReceiveBufferSize

          public int getReceiveBufferSize()

      Returns:
        Send buffer size.

    - #### setReceiveBufferSize

          public ClientConfiguration setReceiveBufferSize(int rcvBufSize)

      Parameters:
        `rcvBufSize` - Send buffer size.
      Returns:
        `this` for chaining.

    - #### getBinaryConfiguration

          public BinaryConfiguration getBinaryConfiguration()

      Returns:
        Configuration for Ignite Binary objects.

    - #### setBinaryConfiguration

          public ClientConfiguration setBinaryConfiguration(BinaryConfiguration binaryCfg)

      Parameters:
        `binaryCfg` - Configuration for Ignite Binary objects.
      Returns:
        `this` for chaining.

    - #### getSslMode

          public SslMode getSslMode()

      Returns:
        SSL mode.

    - #### setSslMode

          public ClientConfiguration setSslMode(SslMode sslMode)

      Parameters:
        `sslMode` - SSL mode.
      Returns:
        `this` for chaining.

    - #### getSslClientCertificateKeyStorePath

          public String getSslClientCertificateKeyStorePath()

      Returns:
        Ssl client certificate key store path.

    - #### setSslClientCertificateKeyStorePath

          public ClientConfiguration setSslClientCertificateKeyStorePath(String newVal)

      Parameters:
        `newVal` - Ssl client certificate key store path.
      Returns:
        `this` for chaining.

    - #### getSslClientCertificateKeyStorePassword

          public String getSslClientCertificateKeyStorePassword()

      Returns:
        Ssl client certificate key store password.

    - #### setSslClientCertificateKeyStorePassword

          public ClientConfiguration setSslClientCertificateKeyStorePassword(String newVal)

      Parameters:
        `newVal` - Ssl client certificate key store password.
      Returns:
        `this` for chaining.

    - #### getSslClientCertificateKeyStoreType

          public String getSslClientCertificateKeyStoreType()

      Returns:
        Ssl client certificate key store type.

    - #### setSslClientCertificateKeyStoreType

          public ClientConfiguration setSslClientCertificateKeyStoreType(String newVal)

      Parameters:
        `newVal` - Ssl client certificate key store type.
      Returns:
        `this` for chaining.

    - #### getSslTrustCertificateKeyStorePath

          public String getSslTrustCertificateKeyStorePath()

      Returns:
        Ssl trust certificate key store path.

    - #### setSslTrustCertificateKeyStorePath

          public ClientConfiguration setSslTrustCertificateKeyStorePath(String newVal)

      Parameters:
        `newVal` - Ssl trust certificate key store path.
      Returns:
        `this` for chaining.

    - #### getSslTrustCertificateKeyStorePassword

          public String getSslTrustCertificateKeyStorePassword()

      Returns:
        Ssl trust certificate key store password.

    - #### setSslTrustCertificateKeyStorePassword

          public ClientConfiguration setSslTrustCertificateKeyStorePassword(String newVal)

      Parameters:
        `newVal` - Ssl trust certificate key store password.
      Returns:
        `this` for chaining.

    - #### getSslTrustCertificateKeyStoreType

          public String getSslTrustCertificateKeyStoreType()

      Returns:
        Ssl trust certificate key store type.

    - #### setSslTrustCertificateKeyStoreType

          public ClientConfiguration setSslTrustCertificateKeyStoreType(String newVal)

      Parameters:
        `newVal` - Ssl trust certificate key store type.
      Returns:
        `this` for chaining.

    - #### getSslKeyAlgorithm

          public String getSslKeyAlgorithm()

      Returns:
        Ssl key algorithm.

    - #### setSslKeyAlgorithm

          public ClientConfiguration setSslKeyAlgorithm(String newVal)

      Parameters:
        `newVal` - Ssl key algorithm.
      Returns:
        `this` for chaining.

    - #### isSslTrustAll

          public boolean isSslTrustAll()

      Returns:
        Flag indicating if certificate validation errors should be ignored.

    - #### setSslTrustAll

          public ClientConfiguration setSslTrustAll(boolean newVal)

      Parameters:
        `newVal` - Flag indicating if certificate validation errors should be ignored.
      Returns:
        `this` for chaining.

    - #### getSslProtocol

          public SslProtocol getSslProtocol()

      Returns:
        Ssl protocol.

    - #### setSslProtocol

          public ClientConfiguration setSslProtocol(SslProtocol newVal)

      Parameters:
        `newVal` - Ssl protocol.
      Returns:
        `this` for chaining.

    - #### getUserName

          public String getUserName()

      Returns:
        User name.

    - #### setUserName

          public ClientConfiguration setUserName(String newVal)

      Parameters:
        `newVal` - User name.
      Returns:
        `this` for chaining.

    - #### getUserPassword

          public String getUserPassword()

      Returns:
        User password.

    - #### setUserPassword

          public ClientConfiguration setUserPassword(String newVal)

      Parameters:
        `newVal` - User password.
      Returns:
        `this` for chaining.

    - #### getSslContextFactory

          public javax.cache.configuration.Factory<SSLContext> getSslContextFactory()

      Returns:
        SSL Context Factory.

    - #### setSslContextFactory

          public ClientConfiguration setSslContextFactory(javax.cache.configuration.Factory<SSLContext> newVal)

      Parameters:
        `newVal` - SSL Context Factory.
      Returns:
        `this` for chaining.

    - #### getTransactionConfiguration

          public ClientTransactionConfiguration getTransactionConfiguration()

      Gets transactions configuration.
      Returns:
        Transactions configuration.

    - #### setTransactionConfiguration

          public ClientConfiguration setTransactionConfiguration(ClientTransactionConfiguration txCfg)

      Sets transactions configuration.
      Parameters:
        `txCfg` - Transactions configuration.
      Returns:
        `this` for chaining.

    - #### isPartitionAwarenessEnabled

          public boolean isPartitionAwarenessEnabled()

      Default is `true`: client sends requests directly to the primary node for the given cache key. To do so, connection is established to every known server node.

      When `false`, only one connection is established at a given moment to a random server node.

      Partition awareness functionality helps to avoid an additional network hop in the following scenarios:

      - 1. Single-key operations API, like put(), get(), etc. However, the functionality has no effect on those operations within explicit transactions `ClientTransactions.txStart()`.
      - 2. `ScanQuery.setPartition(Integer)` and `IndexQuery.setPartition(Integer)` accept a partition number as a parameter with which the query is routed to a particular server node that stores the requested data.
      Returns:
        A value indicating whether partition awareness should be enabled.

    - #### setPartitionAwarenessEnabled

          public ClientConfiguration setPartitionAwarenessEnabled(boolean partitionAwarenessEnabled)

      Sets a value indicating whether partition awareness should be enabled.

      Default is `true`: client sends requests directly to the primary node for the given cache key. To do so, connection is established to every known server node.

      When `false`, only one connection is established at a given moment to a random server node.

      Partition awareness functionality helps to avoid an additional network hop in the following scenarios:

      - 1. Single-key operations API, like put(), get(), etc. However, the functionality has no effect on those operations within explicit transactions `ClientTransactions.txStart()`.
      - 2. `ScanQuery.setPartition(Integer)` and `IndexQuery.setPartition(Integer)` accept a partition number as a parameter with which the query is routed to a particular server node that stores the requested data.
      Parameters:
        `partitionAwarenessEnabled` - Value indicating whether partition awareness should be enabled.
      Returns:
        `this` for chaining.

    - #### isClusterDiscoveryEnabled

          public boolean isClusterDiscoveryEnabled()

      Gets a value indicating whether cluster discovery should be enabled.

      Default is `true`: client get addresses of server nodes from the cluster and connects to all of them.

      When `false`, client only connects to the addresses provided in `setAddresses(String...)` and `setAddressesFinder(ClientAddressFinder)`.

      Returns:
        A value indicating whether cluster discovery should be enabled.

    - #### setClusterDiscoveryEnabled

          public ClientConfiguration setClusterDiscoveryEnabled(boolean clusterDiscoveryEnabled)

      Sets a value indicating whether cluster discovery should be enabled.

      Default is `true`: client get addresses of server nodes from the cluster and connects to all of them.

      When `false`, client only connects to the addresses provided in `setAddresses(String...)` and `setAddressesFinder(ClientAddressFinder)`.

      Parameters:
        `clusterDiscoveryEnabled` - Value indicating whether cluster discovery should be enabled.
      Returns:
        `this` for chaining.

    - #### getReconnectThrottlingPeriod

          public long getReconnectThrottlingPeriod()

      Returns:
        reconnect throttling period.

    - #### setReconnectThrottlingPeriod

          public ClientConfiguration setReconnectThrottlingPeriod(long reconnectThrottlingPeriod)

      Sets reconnect throttling period.
      Parameters:
        `reconnectThrottlingPeriod` - Reconnect throttling period.
      Returns:
        `this` for chaining.

    - #### getReconnectThrottlingRetries

          public int getReconnectThrottlingRetries()

      Returns:
        Reconnect throttling retries.

    - #### setReconnectThrottlingRetries

          public ClientConfiguration setReconnectThrottlingRetries(int reconnectThrottlingRetries)

      Sets reconnect throttling retries.
      Parameters:
        `reconnectThrottlingRetries` - Reconnect throttling retries.
      Returns:
        `this` for chaining.

    - #### getRetryLimit

          public int getRetryLimit()

      Returns:
        Retry limit.

    - #### setRetryLimit

          public ClientConfiguration setRetryLimit(int retryLimit)

      Sets the retry limit. When a request fails due to a connection error, and multiple server connections are available, Ignite will retry the request on every connection. When this property is greater than zero, Ignite will limit the number of retries.
      Parameters:
        `retryLimit` - Retry limit.
      Returns:
        `this` for chaining.

    - #### getRetryPolicy

          public ClientRetryPolicy getRetryPolicy()

      Gets the retry policy.
      Returns:
        Retry policy.

    - #### setRetryPolicy

          public ClientConfiguration setRetryPolicy(ClientRetryPolicy retryPolicy)

      Sets the retry policy. When a request fails due to a connection error, and multiple server connections are available, Ignite will retry the request if the specified policy allows it.

      When `retryLimit` is set, retry count will be limited even if the specified policy returns `true`.

      Default is `ClientRetryAllPolicy`.
      Parameters:
        `retryPolicy` - Retry policy.
      Returns:
        `this` for chaining.

    - #### toString

          public String toString()

      Overrides:
        `toString` in class `Object`

    - #### getUserAttributes

          public Map<String,String> getUserAttributes()

      Returns user attributes which can be used on server node.
      Returns:
        User attributes.

    - #### setUserAttributes

          public ClientConfiguration setUserAttributes(Map<String,String> userAttrs)

      Sets user attributes which can be used to send additional info to the server nodes. Sent attributes can be accessed on server nodes from `GridRestRequest` or `ClientListenerAbstractConnectionContext` (depends on client type).
      Parameters:
        `userAttrs` - User attributes.
      Returns:
        `this` for chaining.

    - #### getAsyncContinuationExecutor

          public Executor getAsyncContinuationExecutor()

      Gets the async continuation executor.

      When `null` (default), `ForkJoinPool.commonPool()` is used.

      When async client operation completes, corresponding `IgniteFuture` listeners will be invoked using this executor. Thin client operation results are handled by a dedicated thread. This thread should be free from any extra work, and should not be not be used to execute future listeners directly.
      Returns:
        Executor for async continuations.

    - #### setAsyncContinuationExecutor

          public ClientConfiguration setAsyncContinuationExecutor(Executor asyncContinuationExecutor)

      Sets the async continuation executor.

      When `null` (default), `ForkJoinPool.commonPool()` is used.

      When async client operation completes, corresponding `IgniteFuture` listeners will be invoked using this executor. Thin client operation results are handled by a dedicated thread. This thread should be free from any extra work, and should not be not be used to execute future listeners directly.
      Parameters:
        `asyncContinuationExecutor` - Executor for async continuations.
      Returns:
        `this` for chaining.

    - #### isHeartbeatEnabled

          public boolean isHeartbeatEnabled()

      Gets a value indicating whether heartbeats are enabled.

      When thin client connection is idle (no operations are performed), heartbeat messages are sent periodically to keep the connection alive and detect potential half-open state.

      See also `heartbeatInterval`.
      Returns:
        Whether heartbeats are enabled.

    - #### setHeartbeatEnabled

          public ClientConfiguration setHeartbeatEnabled(boolean heartbeatEnabled)

      Sets a value indicating whether heartbeats are enabled.

      When thin client connection is idle (no operations are performed), heartbeat messages are sent periodically to keep the connection alive and detect potential half-open state.

      See also `heartbeatInterval`.
      Parameters:
        `heartbeatEnabled` - Whether to enable heartbeats.
      Returns:
        `this` for chaining.

    - #### getHeartbeatInterval

          public long getHeartbeatInterval()

      Gets the heartbeat message interval, in milliseconds. Default is `30_000`.

      When server-side `ClientConnectorConfiguration.getIdleTimeout()` is not zero, effective heartbeat interval is set to `min(heartbeatInterval, idleTimeout / 3)`.

      When thin client connection is idle (no operations are performed), heartbeat messages are sent periodically to keep the connection alive and detect potential half-open state. *
      Returns:
        Heartbeat interval.

    - #### setHeartbeatInterval

          public ClientConfiguration setHeartbeatInterval(long heartbeatInterval)

      Sets the heartbeat message interval, in milliseconds. Default is `30_000`.

      When server-side `ClientConnectorConfiguration.getIdleTimeout()` is not zero, effective heartbeat interval is set to `min(heartbeatInterval, idleTimeout / 3)`.

      When thin client connection is idle (no operations are performed), heartbeat messages are sent periodically to keep the connection alive and detect potential half-open state. *
      Parameters:
        `heartbeatInterval` - Heartbeat interval, in milliseconds.
      Returns:
        `this` for chaining.

    - #### isAutoBinaryConfigurationEnabled

          public boolean isAutoBinaryConfigurationEnabled()

      Gets a value indicating whether automatic binary configuration retrieval should be enabled.

      When enabled, compact footer (`BinaryConfiguration.isCompactFooter()`) and name mapper (`BinaryConfiguration.getNameMapper()`) settings will be retrieved from the server to match the cluster configuration.

      Default is `true`.
      Returns:
        Whether automatic binary configuration is enabled.

    - #### setAutoBinaryConfigurationEnabled

          public ClientConfiguration setAutoBinaryConfigurationEnabled(boolean autoBinaryConfigurationEnabled)

      Sets a value indicating whether automatic binary configuration retrieval should be enabled.

      When enabled, compact footer (`BinaryConfiguration.isCompactFooter()`) and name mapper (`BinaryConfiguration.getNameMapper()`) settings will be retrieved from the server to match the cluster configuration.

      Default is `true`.
      Parameters:
        `autoBinaryConfigurationEnabled` - Whether automatic binary configuration is enabled.
      Returns:
        `this` for chaining.

    - #### setPartitionAwarenessMapperFactory

          public ClientConfiguration setPartitionAwarenessMapperFactory(ClientPartitionAwarenessMapperFactory factory)

      Parameters:
        `factory` - Factory that accepts as parameters a cache name and the number of cache partitions received from a server node and produces key to partition mapping functions.
      Returns:
        `this` for chaining.

    - #### getPartitionAwarenessMapperFactory

          public ClientPartitionAwarenessMapperFactory getPartitionAwarenessMapperFactory()

      Returns:
        Factory that accepts as parameters a cache name and the number of cache partitions received from a server node and produces key to partition mapping functions.

    - #### setLogger

          public ClientConfiguration setLogger(IgniteLogger logger)

      Sets the logger.
      Parameters:
        `logger` - Logger.
      Returns:
        `this` for chaining.

    - #### getLogger

          public IgniteLogger getLogger()

      Gets the logger.
      Returns:
        Logger.

    - #### setEventListeners

          public ClientConfiguration setEventListeners(EventListener... listeners)

      Parameters:
        `listeners` - Clent event listeners.
      Returns:
        `this` for chaining.

    - #### getEventListeners

          public EventListener[] getEventListeners()

      Returns:
        Client event listeners.

${current.year} Copyright © Apache Software Foundation
| Follow @ApacheIgnite
Ignite Database and Caching Platform | : ver. 2.15.0
Release Date | : April 25 2023