org.apache.ignite.internal.processors.cache.distributed.dht.atomic

## Class GridDhtAtomicCache<K,V>

- java.lang.Object
- - org.apache.ignite.internal.processors.cache.GridCacheAdapter<K,V>
  - - org.apache.ignite.internal.processors.cache.distributed.GridDistributedCacheAdapter<K,V>
    - - org.apache.ignite.internal.processors.cache.distributed.dht.GridDhtCacheAdapter<K,V>
      - - org.apache.ignite.internal.processors.cache.distributed.dht.atomic.GridDhtAtomicCache<K,V>

All Implemented Interfaces:
  Externalizable, Serializable, Iterable<javax.cache.Cache.Entry<K,V>>, IgniteInternalCache<K,V>

    @GridToStringExclude
    public class GridDhtAtomicCache<K,V>
    extends GridDhtCacheAdapter<K,V>

Non-transactional partitioned cache.

See Also:
  Serialized Form

### Nested Class Summary

### Nested classes/interfaces inherited from class org.apache.ignite.internal.processors.cache.distributed.dht.GridDhtCacheAdapter

`GridDhtCacheAdapter.MessageHandler<M>`

### Nested classes/interfaces inherited from class org.apache.ignite.internal.processors.cache.GridCacheAdapter

`GridCacheAdapter.AsyncOp<T>, GridCacheAdapter.CacheExpiryPolicy, GridCacheAdapter.FutureHolder, GridCacheAdapter.PeekModes, GridCacheAdapter.TopologyVersionAwareJob, GridCacheAdapter.UpdateGetTimeStatClosure<T>, GridCacheAdapter.UpdatePutAndGetTimeStatClosure<T>, GridCacheAdapter.UpdatePutTimeStatClosure<T>, GridCacheAdapter.UpdateRemoveTimeStatClosure<T>, GridCacheAdapter.UpdateTimeStatClosure<T>`

### Field Summary

### Fields inherited from class org.apache.ignite.internal.processors.cache.GridCacheAdapter

`cacheCfg, CLEAR_ALL_SPLIT_THRESHOLD, ctx, DFLT_START_CACHE_SIZE, keyCheck, lastFut, locNodeId, log, map, MAX_RETRIES, metrics, RET2NULL, txLockMsgLog`

### Constructor Summary

Constructors
Constructor and Description
`GridDhtAtomicCache()` Empty constructor required by `Externalizable`.
`GridDhtAtomicCache(GridCacheContext<K,V> ctx)`
`GridDhtAtomicCache(GridCacheContext<K,V> ctx, GridCacheConcurrentMap map)`

### Method Summary

All Methods Instance Methods Concrete Methods
`protected void` `checkJta()` Checks if cache is working in JTA transaction and enlist cache as XAResource if necessary.
`protected Map<K,V>` `getAll0(Collection<? extends K> keys, boolean deserializeBinary, boolean needVer)`
`IgniteInternalFuture<Map<K,V>>` `getAllAsync(Collection<? extends K> keys, boolean forcePrimary, boolean skipTx, UUID subjId, String taskName, boolean deserializeBinary, boolean recovery, boolean skipVals, boolean needVer)`
`protected V` `getAndPut0(K key, V val, CacheEntryPredicate filter)`
`IgniteInternalFuture<V>` `getAndPutAsync0(K key, V val, CacheEntryPredicate filter)`
`V` `getAndRemove0(K key)`
`IgniteInternalFuture<V>` `getAndRemoveAsync0(K key)`
`protected IgniteInternalFuture<V>` `getAsync(K key, boolean forcePrimary, boolean skipTx, UUID subjId, String taskName, boolean deserializeBinary, boolean skipVals, boolean needVer)`
`protected void` `init()` Post constructor initialization for subclasses.
`<T> javax.cache.processor.EntryProcessorResult<T>` `invoke(K key, javax.cache.processor.EntryProcessor<K,V,T> entryProcessor, Object... args)`
`<T> Map<K,javax.cache.processor.EntryProcessorResult<T>>` `invokeAll(Map<? extends K,? extends javax.cache.processor.EntryProcessor<K,V,T>> map, Object... args)`
`<T> Map<K,javax.cache.processor.EntryProcessorResult<T>>` `invokeAll(Set<? extends K> keys, javax.cache.processor.EntryProcessor<K,V,T> entryProcessor, Object... args)`
`<T> IgniteInternalFuture<Map<K,javax.cache.processor.EntryProcessorResult<T>>>` `invokeAllAsync(Map<? extends K,? extends javax.cache.processor.EntryProcessor<K,V,T>> map, Object... args)`
`<T> IgniteInternalFuture<Map<K,javax.cache.processor.EntryProcessorResult<T>>>` `invokeAllAsync(Set<? extends K> keys, javax.cache.processor.EntryProcessor<K,V,T> entryProcessor, Object... args)`
`<T> IgniteInternalFuture<javax.cache.processor.EntryProcessorResult<T>>` `invokeAsync(K key, javax.cache.processor.EntryProcessor<K,V,T> entryProcessor, Object... args)`
`boolean` `isDhtAtomic()`
`protected IgniteInternalFuture<Boolean>` `lockAllAsync(Collection<KeyCacheObject> keys, long timeout, IgniteTxLocalEx tx, boolean isInvalidate, boolean isRead, boolean retval, TransactionIsolation isolation, long createTtl, long accessTtl)`
`GridNearCacheAdapter<K,V>` `near()`
`void` `near(GridNearAtomicCache<K,V> near)`
`protected boolean` `put0(K key, V val, CacheEntryPredicate filter)`
`protected void` `putAll0(Map<? extends K,? extends V> m)`
`IgniteInternalFuture<?>` `putAllAsync0(Map<? extends K,? extends V> m)`
`void` `putAllConflict(Map<KeyCacheObject,GridCacheDrInfo> conflictMap)` Store DR data.
`IgniteInternalFuture<?>` `putAllConflictAsync(Map<KeyCacheObject,GridCacheDrInfo> conflictMap)` Store DR data asynchronously.
`IgniteInternalFuture<Boolean>` `putAsync0(K key, V val, CacheEntryPredicate filter)`
`protected boolean` `remove0(K key, CacheEntryPredicate filter)`
`protected void` `removeAll0(Collection<? extends K> keys)`
`IgniteInternalFuture<Object>` `removeAllAsync0(Collection<? extends K> keys)`
`void` `removeAllConflict(Map<KeyCacheObject,GridCacheVersion> conflictMap)` Removes DR data.
`IgniteInternalFuture<?>` `removeAllConflictAsync(Map<KeyCacheObject,GridCacheVersion> conflictMap)` Removes DR data asynchronously.
`IgniteInternalFuture<Boolean>` `removeAsync0(K key, CacheEntryPredicate filter)`
`void` `start()` Starts this cache.
`String` `toString()`

### Methods inherited from class org.apache.ignite.internal.processors.cache.distributed.dht.GridDhtCacheAdapter

`addFuture, beginMultiUpdate, createEntry, dumpDebugInfo, endMultiUpdate, entryEx, entryExx, entryExx, getDhtAsync, getDhtSingleAsync, localEntriesIterator, localLoad, localLoadCache, multiUpdateFinishFuture, multiUpdateTopologyFuture, needRemap, onDeferredDelete, onKernalStop, peekExx, preloader, primarySize, primarySizeLong, printMemoryStats, processForceKeyResponse, processForceKeysRequest, processNearGetRequest, processNearGetResponse, processNearSingleGetRequest, processNearSingleGetResponse, removeFuture, sendTtlUpdateRequest, size, sizeLong, splitClearLocally, topology, unlockAll`

### Methods inherited from class org.apache.ignite.internal.processors.cache.distributed.GridDistributedCacheAdapter

`localSizeLong, localSizeLong, lockAllAsync, removeAll, removeAllAsync, removeVersionedEntry, txLockAsync`

### Methods inherited from class org.apache.ignite.internal.processors.cache.GridCacheAdapter

`active, active, affinity, allEntries, asyncOp, asyncOpAcquire, asyncOpRelease, awaitLastFut, cache, clear, clear, clearAll, clearAllAsync, clearAsync, clearAsync, clearLocally, clearLocally, clearLocally, clearLocallyAll, clusterMetrics, clusterMetrics, clusterMxBean, configuration, containsKey, containsKeyAsync, containsKeys, containsKeysAsync, context, decrementSize, entries, entryEx, entryEx, entrySet, entrySet, evict, evictAll, expiry, expiryPolicy, forceKeyCheck, forSubjectId, get, get, get0, getAll, getAllAsync, getAllAsync, getAllAsync, getAllAsync0, getAllOutTx, getAllOutTxAsync, getAndPut, getAndPut, getAndPutAsync, getAndPutAsync, getAndPutIfAbsent, getAndPutIfAbsentAsync, getAndRemove, getAndRemoveAsync, getAndReplace, getAndReplaceAsync, getAsync, getAsync, getEntries, getEntriesAsync, getEntry, getEntryAsync, getForcePrimary, getForcePrimaryAsync, igfsDataSpaceUsed, igniteIterator, igniteIterator, incrementSize, invoke, isColocated, isDht, isEmpty, isIgfsDataCache, isLocal, isLocked, isLockedByThread, isMongoDataCache, isMongoMetaCache, isNear, iterator, iterator, keepBinary, keySet, loadAll, localEntries, localLoadCacheAsync, localMetrics, localMxBean, localPeek, localSize, lock, lockAll, lockAsync, log, lostPartitions, map, metrics0, name, nearSize, offHeapAllocatedSize, offHeapEntriesCount, onIgfsDataSizeChanged, onKernalStart, onReconnected, onUndeploy, parsePeekModes, peekEx, peekEx, put, put, putAll, putAllAsync, putAsync, putAsync, putIfAbsent, putIfAbsentAsync, readExternal, readResolve, rebalance, remove, remove, remove, removeAll, removeAllAsync, removeAsync, removeAsync, removeAsync, removeEntry, removeIfObsolete, replace, replace, replaceAsync, replaceAsync, saveFuture, scanIterator, setSkipStore, size, sizeAsync, sizeLong, sizeLong, sizeLongAsync, sizeLongAsync, skipStore, startInfo, stop, stopInfo, tx, txStart, txStart, txStartEx, unlock, validateCacheKey, validateCacheKeys, withExpiryPolicy, withNoRetries, writeExternal`

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

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

### Methods inherited from interface java.lang.Iterable

`forEach, spliterator`

### Constructor Detail

#### GridDhtAtomicCache

    public GridDhtAtomicCache()

Empty constructor required by `Externalizable`.

#### GridDhtAtomicCache

    public GridDhtAtomicCache(GridCacheContext<K,V> ctx)

Parameters:
  `ctx` - Cache context.

#### GridDhtAtomicCache

    public GridDhtAtomicCache(GridCacheContext<K,V> ctx,
                              GridCacheConcurrentMap map)

Parameters:
  `ctx` - Cache context.
  `map` - Cache concurrent map.

### Method Detail

#### checkJta

    protected void checkJta()
                     throws IgniteCheckedException

Checks if cache is working in JTA transaction and enlist cache as XAResource if necessary.

Overrides:
  `checkJta` in class `GridCacheAdapter<K,V>`
Throws:
  `IgniteCheckedException` - In case of error.

#### isDhtAtomic

    public boolean isDhtAtomic()

Overrides:
  `isDhtAtomic` in class `GridCacheAdapter<K,V>`
Returns:
  `True` if cache is DHT Atomic.

#### init

    protected void init()

Post constructor initialization for subclasses.

Overrides:
  `init` in class `GridCacheAdapter<K,V>`

#### start

    public void start()
               throws IgniteCheckedException

Starts this cache. Child classes should override this method to provide custom start-up behavior.

Overrides:
  `start` in class `GridDhtCacheAdapter<K,V>`
Throws:
  `IgniteCheckedException` - If start failed.

#### near

    public void near(GridNearAtomicCache<K,V> near)

Parameters:
  `near` - Near cache.

#### near

    public GridNearCacheAdapter<K,V> near()

Specified by:
  `near` in class `GridDhtCacheAdapter<K,V>`
Returns:
  Near cache.

#### getAsync

    protected IgniteInternalFuture<V> getAsync(K key,
                                               boolean forcePrimary,
                                               boolean skipTx,
                                               @Nullable
                                               UUID subjId,
                                               String taskName,
                                               boolean deserializeBinary,
                                               boolean skipVals,
                                               boolean needVer)

Overrides:
  `getAsync` in class `GridCacheAdapter<K,V>`
Parameters:
  `key` - Key.
  `forcePrimary` - Force primary.
  `skipTx` - Skip tx.
  `subjId` - Subj Id.
  `taskName` - Task name.
  `deserializeBinary` - Deserialize binary.
  `skipVals` - Skip values.
  `needVer` - Need version.
Returns:
  Future for the get operation.

#### getAll0

    protected Map<K,V> getAll0(Collection<? extends K> keys,
                               boolean deserializeBinary,
                               boolean needVer)
                        throws IgniteCheckedException

Overrides:
  `getAll0` in class `GridCacheAdapter<K,V>`
Parameters:
  `keys` - Keys.
  `deserializeBinary` - Deserialize binary flag.
  `needVer` - Need version.
Returns:
  Map of cached values.
Throws:
  `IgniteCheckedException` - If read failed.

#### getAllAsync

    public IgniteInternalFuture<Map<K,V>> getAllAsync(@Nullable
                                                      Collection<? extends K> keys,
                                                      boolean forcePrimary,
                                                      boolean skipTx,
                                                      @Nullable
                                                      UUID subjId,
                                                      String taskName,
                                                      boolean deserializeBinary,
                                                      boolean recovery,
                                                      boolean skipVals,
                                                      boolean needVer)

Overrides:
  `getAllAsync` in class `GridDhtCacheAdapter<K,V>`
Parameters:
  `keys` - Keys.
  `forcePrimary` - Force primary.
  `skipTx` - Skip tx.
  `subjId` - Subj Id.
  `taskName` - Task name.
  `deserializeBinary` - Deserialize binary.
  `recovery` - Recovery mode flag.
  `skipVals` - Skip values.
  `needVer` - Need version.
Returns:
  Future for the get operation.
See Also:
  `GridCacheAdapter.getAllAsync(Collection)`

#### getAndPut0

    protected V getAndPut0(K key,
                           V val,
                           @Nullable
                           CacheEntryPredicate filter)
                    throws IgniteCheckedException

Overrides:
  `getAndPut0` in class `GridCacheAdapter<K,V>`
Parameters:
  `key` - Key.
  `val` - Value.
  `filter` - Optional filter.
Returns:
  Previous value.
Throws:
  `IgniteCheckedException` - If failed.

#### put0

    protected boolean put0(K key,
                           V val,
                           CacheEntryPredicate filter)
                    throws IgniteCheckedException

Overrides:
  `put0` in class `GridCacheAdapter<K,V>`
Parameters:
  `key` - Key.
  `val` - Value.
  `filter` - Filter.
Returns:
  `True` if optional filter passed and value was stored in cache, `false` otherwise. Note that this method will return `true` if filter is not specified.
Throws:
  `IgniteCheckedException` - If put operation failed.

#### getAndPutAsync0

    public IgniteInternalFuture<V> getAndPutAsync0(K key,
                                                   V val,
                                                   @Nullable
                                                   CacheEntryPredicate filter)

Overrides:
  `getAndPutAsync0` in class `GridCacheAdapter<K,V>`
Parameters:
  `key` - Key.
  `val` - Value.
  `filter` - Optional filter.
Returns:
  Put operation future.

#### putAsync0

    public IgniteInternalFuture<Boolean> putAsync0(K key,
                                                   V val,
                                                   @Nullable
                                                   CacheEntryPredicate filter)

Overrides:
  `putAsync0` in class `GridCacheAdapter<K,V>`
Parameters:
  `key` - Key.
  `val` - Value.
  `filter` - Optional filter.
Returns:
  Putx operation future.

#### putAll0

    protected void putAll0(Map<? extends K,? extends V> m)
                    throws IgniteCheckedException

Overrides:
  `putAll0` in class `GridCacheAdapter<K,V>`
Parameters:
  `m` - Map.
Throws:
  `IgniteCheckedException` - If failed.

#### putAllAsync0

    public IgniteInternalFuture<?> putAllAsync0(Map<? extends K,? extends V> m)

Overrides:
  `putAllAsync0` in class `GridCacheAdapter<K,V>`
Parameters:
  `m` - Map.
Returns:
  Future.

#### putAllConflict

    public void putAllConflict(Map<KeyCacheObject,GridCacheDrInfo> conflictMap)
                        throws IgniteCheckedException

Store DR data.

Specified by:
  `putAllConflict` in interface `IgniteInternalCache<K,V>`
Overrides:
  `putAllConflict` in class `GridCacheAdapter<K,V>`
Parameters:
  `conflictMap` - DR map.
Throws:
  `IgniteCheckedException` - If put operation failed.

#### putAllConflictAsync

    public IgniteInternalFuture<?> putAllConflictAsync(Map<KeyCacheObject,GridCacheDrInfo> conflictMap)

Store DR data asynchronously.

Specified by:
  `putAllConflictAsync` in interface `IgniteInternalCache<K,V>`
Overrides:
  `putAllConflictAsync` in class `GridCacheAdapter<K,V>`
Parameters:
  `conflictMap` - DR map.
Returns:
  Future.

#### getAndRemove0

    public V getAndRemove0(K key)
                    throws IgniteCheckedException

Overrides:
  `getAndRemove0` in class `GridCacheAdapter<K,V>`
Parameters:
  `key` - Key.
Returns:
  Previous value.
Throws:
  `IgniteCheckedException` - If failed.

#### getAndRemoveAsync0

    public IgniteInternalFuture<V> getAndRemoveAsync0(K key)

Overrides:
  `getAndRemoveAsync0` in class `GridCacheAdapter<K,V>`
Parameters:
  `key` - Key.
Returns:
  Future.

#### removeAll0

    protected void removeAll0(Collection<? extends K> keys)
                       throws IgniteCheckedException

Overrides:
  `removeAll0` in class `GridCacheAdapter<K,V>`
Parameters:
  `keys` - Keys.
Throws:
  `IgniteCheckedException` - If failed.

#### removeAllAsync0

    public IgniteInternalFuture<Object> removeAllAsync0(Collection<? extends K> keys)

Overrides:
  `removeAllAsync0` in class `GridCacheAdapter<K,V>`
Parameters:
  `keys` - Keys.
Returns:
  Future.

#### remove0

    protected boolean remove0(K key,
                              CacheEntryPredicate filter)
                       throws IgniteCheckedException

Overrides:
  `remove0` in class `GridCacheAdapter<K,V>`
Parameters:
  `key` - Key.
  `filter` - Filter.
Returns:
  `True` if entry was removed.
Throws:
  `IgniteCheckedException` - If failed.

#### removeAsync0

    public IgniteInternalFuture<Boolean> removeAsync0(K key,
                                                      @Nullable
                                                      CacheEntryPredicate filter)

Overrides:
  `removeAsync0` in class `GridCacheAdapter<K,V>`
Parameters:
  `key` - Key.
  `filter` - Filter.
Returns:
  Future.

#### removeAllConflict

    public void removeAllConflict(Map<KeyCacheObject,GridCacheVersion> conflictMap)
                           throws IgniteCheckedException

Removes DR data.

Specified by:
  `removeAllConflict` in interface `IgniteInternalCache<K,V>`
Overrides:
  `removeAllConflict` in class `GridCacheAdapter<K,V>`
Parameters:
  `conflictMap` - DR map.
Throws:
  `IgniteCheckedException` - If remove failed.

#### removeAllConflictAsync

    public IgniteInternalFuture<?> removeAllConflictAsync(Map<KeyCacheObject,GridCacheVersion> conflictMap)

Removes DR data asynchronously.

Specified by:
  `removeAllConflictAsync` in interface `IgniteInternalCache<K,V>`
Overrides:
  `removeAllConflictAsync` in class `GridCacheAdapter<K,V>`
Parameters:
  `conflictMap` - DR map.
Returns:
  Future.

#### lockAllAsync

    protected IgniteInternalFuture<Boolean> lockAllAsync(Collection<KeyCacheObject> keys,
                                                         long timeout,
                                                         @Nullable
                                                         IgniteTxLocalEx tx,
                                                         boolean isInvalidate,
                                                         boolean isRead,
                                                         boolean retval,
                                                         @Nullable
                                                         TransactionIsolation isolation,
                                                         long createTtl,
                                                         long accessTtl)

Specified by:
  `lockAllAsync` in class `GridDistributedCacheAdapter<K,V>`
Parameters:
  `keys` - Keys to lock.
  `timeout` - Timeout.
  `tx` - Transaction
  `isInvalidate` - Invalidation flag.
  `isRead` - Indicates whether value is read or written.
  `retval` - Flag to return value.
  `isolation` - Transaction isolation.
  `createTtl` - TTL for create operation.
  `accessTtl` - TTL for read operation.
Returns:
  Future for locks.

#### invoke

    public <T> javax.cache.processor.EntryProcessorResult<T> invoke(K key,
                                                                    javax.cache.processor.EntryProcessor<K,V,T> entryProcessor,
                                                                    Object... args)
                                                             throws IgniteCheckedException

Specified by:
  `invoke` in interface `IgniteInternalCache<K,V>`
Overrides:
  `invoke` in class `GridCacheAdapter<K,V>`
Parameters:
  `key` - Key.
  `entryProcessor` - Entry processor.
  `args` - Arguments.
Returns:
  Invoke result.
Throws:
  `IgniteCheckedException` - If failed.

#### invokeAll

    public <T> Map<K,javax.cache.processor.EntryProcessorResult<T>> invokeAll(Set<? extends K> keys,
                                                                              javax.cache.processor.EntryProcessor<K,V,T> entryProcessor,
                                                                              Object... args)
                                                                       throws IgniteCheckedException

Specified by:
  `invokeAll` in interface `IgniteInternalCache<K,V>`
Overrides:
  `invokeAll` in class `GridCacheAdapter<K,V>`
Parameters:
  `keys` - Keys.
  `entryProcessor` - Entry processor.
  `args` - Arguments.
Returns:
  Invoke results.
Throws:
  `IgniteCheckedException` - If failed.

#### invokeAsync

    public <T> IgniteInternalFuture<javax.cache.processor.EntryProcessorResult<T>> invokeAsync(K key,
                                                                                               javax.cache.processor.EntryProcessor<K,V,T> entryProcessor,
                                                                                               Object... args)

Specified by:
  `invokeAsync` in interface `IgniteInternalCache<K,V>`
Overrides:
  `invokeAsync` in class `GridCacheAdapter<K,V>`
Parameters:
  `key` - Key.
  `entryProcessor` - Entry processor.
  `args` - Arguments.
Returns:
  Future.

#### invokeAllAsync

    public <T> IgniteInternalFuture<Map<K,javax.cache.processor.EntryProcessorResult<T>>> invokeAllAsync(Set<? extends K> keys,
                                                                                                         javax.cache.processor.EntryProcessor<K,V,T> entryProcessor,
                                                                                                         Object... args)

Specified by:
  `invokeAllAsync` in interface `IgniteInternalCache<K,V>`
Overrides:
  `invokeAllAsync` in class `GridCacheAdapter<K,V>`
Parameters:
  `keys` - Keys.
  `entryProcessor` - Entry processor.
  `args` - Arguments.
Returns:
  Future.

#### invokeAll

    public <T> Map<K,javax.cache.processor.EntryProcessorResult<T>> invokeAll(Map<? extends K,? extends javax.cache.processor.EntryProcessor<K,V,T>> map,
                                                                              Object... args)
                                                                       throws IgniteCheckedException

Specified by:
  `invokeAll` in interface `IgniteInternalCache<K,V>`
Overrides:
  `invokeAll` in class `GridCacheAdapter<K,V>`
Parameters:
  `map` - Map containing keys and entry processors to be applied to values.
  `args` - Arguments.
Returns:
  Invoke results.
Throws:
  `IgniteCheckedException` - If failed.

#### invokeAllAsync

    public <T> IgniteInternalFuture<Map<K,javax.cache.processor.EntryProcessorResult<T>>> invokeAllAsync(Map<? extends K,? extends javax.cache.processor.EntryProcessor<K,V,T>> map,
                                                                                                         Object... args)

Specified by:
  `invokeAllAsync` in interface `IgniteInternalCache<K,V>`
Overrides:
  `invokeAllAsync` in class `GridCacheAdapter<K,V>`
Parameters:
  `map` - Map containing keys and entry processors to be applied to values.
  `args` - Arguments.
Returns:
  Future.

#### toString

    public String toString()

Overrides:
  `toString` in class `GridDhtCacheAdapter<K,V>`

2018 Copyright © Apache Software Foundation

Follow @ApacheIgnite

Ignite Fabric | : ver. 2.4.0
Release Date | : March 5 2018