Chapter 22. Activation and Passivation Modes

22.1. Activation and Passivation Modes

Activation is the process of loading an entry into memory and removing it from the cache store. Activation occurs when a thread attempts to access an entry that is in the store but not the memory (namely a passivated entry).

Passivation mode allows entries to be stored in the cache store after they are evicted from memory. Passivation prevents unnecessary and potentially expensive writes to the cache store. It is used for entries that are frequently used or referenced and therefore not evicted from memory.

While passivation is enabled, the cache store is used as an overflow tank, similar to virtual memory implementation in operating systems that swap memory pages to disk.

The passivation flag is used to toggle passivation mode, a mode that stores entries in the cache store only after they are evicted from memory.

22.2. Passivation Mode Benefits

The primary benefit of passivation mode is that it prevents unnecessary and potentially expensive writes to the cache store. This is particularly useful if an entry is frequently used or referenced and therefore is not evicted from memory.

22.3. Configure Passivation

In Red Hat JBoss Data Grid’s Remote Client-Server mode, add the passivation parameter to the cache store element to toggle passivation for it:

Toggle Passivation in Remote Client-Server Mode

<local-cache name="customCache"/>
	<!-- Additional configuration elements for local-cache here -->
	<file-store passivation="true"
		<!-- Additional configuration elements for file-store here -->
</local-cache>

In Library mode, add the passivation parameter to the persistence element to toggle passivation:

Toggle Passivation in Library Mode

<persistence passivation="true">
   <!-- Additional configuration elements here -->
</persistence>

22.4. Evication and Passivation

22.4.1. Eviction and Passivation

To ensure that a single copy of an entry remains, either in memory or in a cache store, use passivation in conjunction with eviction.

The primary reason to use passivation instead of a normal cache store is that updating entries require less resources when passivation is in use. This is because passivation does not require an update to the cache store.

22.4.2. Eviction and Passivation Usage

If the eviction policy caused the eviction of an entry from the cache while passivation is enabled, the following occur as a result:

  • A notification regarding the passivated entry is emitted to the cache listeners.
  • The evicted entry is stored.

When an attempt to retrieve an evicted entry is made, the entry is lazily loaded into memory from the cache loader. After the entry and its children are loaded, they are removed from the cache loader and a notification regarding the entry’s activation is sent to the cache listeners.

22.4.3. Eviction Example when Passivation is Disabled

The following example indicates the state of the memory and the persistent store during eviction operations with passivation disabled.

Table 22.1. Eviction when Passivation is Disabled

StepKey in MemoryKey on Disk

Insert keyOne

Memory: keyOne

Disk: keyOne

Insert keyTwo

Memory: keyOne, keyTwo

Disk: keyOne, keyTwo

Eviction thread runs, evicts keyOne

Memory: keyTwo

Disk: keyOne, keyTwo

Read keyOne

Memory: keyOne, keyTwo

Disk: keyOne, keyTwo

Eviction thread runs, evicts keyTwo

Memory: keyOne

Disk: keyOne, keyTwo

Remove keyTwo

Memory: keyOne

Disk: keyOne

22.4.4. Eviction Example when Passivation is Enabled

The following example indicates the state of the memory and the persistent store during eviction operations with passivation enabled.

Table 22.2. Eviction when Passivation is Enabled

StepKey in MemoryKey on Disk

Insert keyOne

Memory: keyOne

Disk:

Insert keyTwo

Memory: keyOne, keyTwo

Disk:

Eviction thread runs, evicts keyOne

Memory: keyTwo

Disk: keyOne

Read keyOne

Memory: keyOne, keyTwo

Disk:

Eviction thread runs, evicts keyTwo

Memory: keyOne

Disk: keyTwo

Remove keyTwo

Memory: keyOne

Disk: