# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements.  See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership.  The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License.  You may obtain a copy of the License at
#
#   http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied.  See the License for the
# specific language governing permissions and limitations
# under the License.
# Cache configuration for the 'TestDiskCache' test. The memory cache has a
# a maximum of 100 objects, so objects should get pushed into the disk cache

jcs.default=blockDiskCache
jcs.default.cacheattributes=org.apache.commons.jcs3.engine.CompositeCacheAttributes
jcs.default.cacheattributes.MaxObjects=100
jcs.default.cacheattributes.MemoryCacheName=org.apache.commons.jcs3.engine.memory.lru.LRUMemoryCache



# #### CACHE REGIONS FOR TEST

jcs.region.blockRegion1=blockDiskCache
jcs.region.blockRegion1.cacheattributes=org.apache.commons.jcs3.engine.CompositeCacheAttributes
jcs.region.blockRegion1.cacheattributes.MaxObjects=100
jcs.region.blockRegion1.cacheattributes.MemoryCacheName=org.apache.commons.jcs3.engine.memory.lru.LRUMemoryCache

jcs.region.blockRegion2=blockDiskCache
jcs.region.blockRegion2.cacheattributes=org.apache.commons.jcs3.engine.CompositeCacheAttributes
jcs.region.blockRegion2.cacheattributes.MaxObjects=100
jcs.region.blockRegion2.cacheattributes.MemoryCacheName=org.apache.commons.jcs3.engine.memory.lru.LRUMemoryCache

jcs.region.blockRegion3=blockDiskCache
jcs.region.blockRegion3.cacheattributes=org.apache.commons.jcs3.engine.CompositeCacheAttributes
jcs.region.blockRegion3.cacheattributes.MaxObjects=100
jcs.region.blockRegion3.cacheattributes.MemoryCacheName=org.apache.commons.jcs3.engine.memory.lru.LRUMemoryCache

jcs.region.blockRegion4=blockDiskCache
jcs.region.blockRegion4.cacheattributes=org.apache.commons.jcs3.engine.CompositeCacheAttributes
jcs.region.blockRegion4.cacheattributes.MaxObjects=100
jcs.region.blockRegion4.cacheattributes.MemoryCacheName=org.apache.commons.jcs3.engine.memory.lru.LRUMemoryCache


# #### AUXILIARY CACHES

# Block Disk Cache
jcs.auxiliary.blockDiskCache=org.apache.commons.jcs3.auxiliary.disk.block.BlockDiskCacheFactory
jcs.auxiliary.blockDiskCache.attributes=org.apache.commons.jcs3.auxiliary.disk.block.BlockDiskCacheAttributes
jcs.auxiliary.blockDiskCache.attributes.DiskPath=target/test-sandbox/block-disk-cache-conc
jcs.auxiliary.blockDiskCache.attributes.MaxPurgatorySize=10000
jcs.auxiliary.blockDiskCache.attributes.MaxKeySize=10000
jcs.auxiliary.blockDiskCache.attributes.EventQueueType=SINGLE
jcs.auxiliary.blockDiskCache.attributes.EventQueuePoolName=disk_cache_event_queue


# #############################################################
# ################# THREAD POOL CONFIGURATION ###################
# Default thread pool config
thread_pool.default.boundarySize=2000
thread_pool.default.maximumPoolSize=150
thread_pool.default.minimumPoolSize=4
thread_pool.default.keepAliveTime=350000
# RUN ABORT WAIT BLOCK DISCARDOLDEST
thread_pool.default.whenBlockedPolicy=RUN
thread_pool.default.startUpSize=4

# Default Cache Event Queue thread pool config, used by auxiliaries
thread_pool.cache_event_queue.useBoundary=false
# thread_pool.cache_event_queue.boundarySize=2000
# thread_pool.cache_event_queue.maximumPoolSize=10
thread_pool.cache_event_queue.minimumPoolSize=1
thread_pool.cache_event_queue.keepAliveTime=3500
# thread_pool.cache_event_queue.whenBlockedPolicy=RUN
thread_pool.cache_event_queue.startUpSize=1

# Disk Cache pool
thread_pool.disk_cache_event_queue.useBoundary=false
thread_pool.disk_cache_event_queue.minimumPoolSize=2
thread_pool.disk_cache_event_queue.keepAliveTime=3500
thread_pool.disk_cache_event_queue.startUpSize=10

# Remote cache client thread pool config
thread_pool.remote_cache_client.boundarySize=75
thread_pool.remote_cache_client.maximumPoolSize=150
thread_pool.remote_cache_client.minimumPoolSize=4
thread_pool.remote_cache_client.keepAliveTime=350000
thread_pool.remote_cache_client.whenBlockedPolicy=RUN
thread_pool.remote_cache_client.startUpSize=4
