# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements.  See the NOTICE.txt 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.    
#
#
# Properties required to configure the Resource Manager

# resource spark master
resource.runner.spark.host = mesos://<ip>:5050

# resource batchmgr factory
resource.batchmgr.factory = org.apache.oodt.cas.resource.batchmgr.XmlRpcBatchMgrFactory

# resource monitor factory
resource.monitor.factory = org.apache.oodt.cas.resource.monitor.AssignmentMonitorFactory

# resource scheduler factory
resource.scheduler.factory = org.apache.oodt.cas.resource.scheduler.LRUSchedulerFactory

# resource jobqueue factory
resource.jobqueue.factory = org.apache.oodt.cas.resource.jobqueue.JobStackJobQueueFactory

# resource job repository factory
resource.jobrepo.factory = org.apache.oodt.cas.resource.jobrepo.MemoryJobRepositoryFactory

# For queue-multiplexing scheduler
resource.backend.mux.repository = org.apache.oodt.cas.resource.mux.XmlBackendRepositoryFactory
resource.backend.mux.xmlrepository.queuetobackend = file://[HOME]/queue-to-backend.xml


# node repository factory
org.apache.oodt.cas.resource.nodes.repo.factory = org.apache.oodt.cas.resource.noderepo.XmlNodeRepositoryFactory

# queue repository factory
org.apache.oodt.cas.resource.queues.repo.factory = org.apache.oodt.cas.resource.queuerepo.XmlQueueRepositoryFactory

# resource nodes monitor factory
org.apache.oodt.cas.resource.monitor.factory = org.apache.oodt.cas.resource.monitor.ganglia.GangliaResourceMonitorFactory

# ganglia resource monitor's load calculator factory
org.apache.oodt.cas.resource.monitor.loadcalc.factory = org.apache.oodt.cas.resource.monitor.ganglia.loadcalc.WeightedAverageLoadCalcFactory

# JobStack JobQueue config properties
org.apache.oodt.cas.resource.jobqueue.jobstack.maxstacksize=1000

# XML LRUScheduler config properties
org.apache.oodt.cas.resource.scheduler.wait.seconds=20

# XML-RPC configuration props
org.apache.oodt.cas.resource.system.xmlrpc.requestTimeout.minutes=20
org.apache.oodt.cas.resource.system.xmlrpc.connectionTimeout.minutes=60

# XStream JobRepo configuration props
org.apache.oodt.cas.resource.jobrepo.xstream.working.dir=[HOME]/job-repo
org.apache.oodt.cas.resource.jobrepo.xstream.max.history=4000

# XML Node Repository config properties
org.apache.oodt.cas.resource.nodes.dirs=file://[HOME]/nodes,file://[HOME]/nodes2

# XML Queue Repository config properties
org.apache.oodt.cas.resource.nodetoqueues.dirs=file://[HOME]/nodes,file://[HOME]/nodes2

# Load calculation weights
org.apache.oodt.cas.resource.monitor.loadcalc.weight.loadone=1
org.apache.oodt.cas.resource.monitor.loadcalc.weight.loadfive=5
org.apache.oodt.cas.resource.monitor.loadcalc.weight.loadfifteen=5
org.apache.oodt.cas.resource.monitor.loadcalc.weight.memfree=2
org.apache.oodt.cas.resource.monitor.loadcalc.weight.swapfree=1

#ganglia meta daemon (gmetad) host details
org.apache.oodt.cas.resource.monitor.ganglia.gemtad.host.address=localhost
org.apache.oodt.cas.resource.monitor.ganglia.gemtad.host.port=8651

