# 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.


# Example Usergrid Qakka Queue System Configuration 

# When Qakka starts up it looks for this file, which must be named 
# "qakka.properties" in the Java classpath. On Tomcat you should be 
# able to place this file in the lib directory.


#------------------------------------------------------------------------------
# Usergrid Cassandra config 

## (Make sure cassandra.hosts is set correctly)

cassandra.username=

cassandra.password=

cassandra.datacenter.local=us-east

# Comma separated list of Cassandra hosts that this instance should use
cassandra.hosts=localhost

# Name of keyspace to be used for queues and queue message payload data (must 
# be replicated) Qakka will create this keyspace if it does not exit, and 
# Qakka will create a non-replicated keyspace with the same name plus "_local"
cassandra.keyspace.application=qakka_replicated

cassandra.keyspace.replication=us-east:3
cassandra.keyspace.strategy=NetworkTopologyStrategy

# Keyspace settings for replicated keyspace
cassandra.strategy=NetworkTopologyStrategy
cassandra.strategy.options=us-west-2:3

# Keyspace settings for local and non-replicated keyspace
cassandra.strategy.local=NetworkTopologyStrategy
cassandra.strategy.options.local=us-east:3

# Number of connections to maintain in connection pool
cassandra.connections=30

# Timeout pooled connections after this time
cassandra.timeout.pool=20000


#------------------------------------------------------------------------------
# Usergrid Cluster Config  

## (Make sure all of these are set correctly)

usergrid.cluster_name=Test Cluster

usergrid.cluster.hostname=localhost

# Comma-separated list of regions
usergrid.cluster.region.list=us-east

# The local region of this Qakka instance
usergrid.cluster.region.local=us-east

# Comma-separated lists of cluster "seed" nodes each with format {region}:{hostname}
usergrid.cluster.seeds=us-east:localhost

# Port used for cluster communications.
usergrid.cluster.port=3545


#------------------------------------------------------------------------------
# Authentication config

queue.auth.enabled=true

queue.auth.username=admin

queue.auth.password=s3cr3t


#------------------------------------------------------------------------------
# Queue System Config

# (You probably don't need to change these values)

# Must be true for Qakka
queue.standalone=true

# Enable in memory cache for queue reads
queue.inmemory.cache=true

# Number of actors for processing queue gets/reads
queue.num.actors=50

# Number of actors for processing queue sends
queue.sender.num.actors=100

# Number of actors for processing queue writes
queue.writer.num.actors=100

# Timeout any queue send that takes longer than
queue.send.timeout.seconds=5

# Timeout any queue get/read that takes longer than
queue.get.timeout.seconds=5

# Shard size for storing queue messages
queue.shard.max.size=400000

# Frequency to check for new shards needed
queue.shard.allocation.check.frequency.millis=1000

# Allocate new shards some time in advance of when they are to be used
queue.shard.allocation.advance.time.millis=200

# Only write shard counters after this number opf changes
queue.shard.counter.max-in-memory=100

# Only write message counters after this number of changes 
queue.message.counter.max-in-memory=100

# On a queue get, wait some time for new messages to arrive
queue.long.polling.time.millis=2000
