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

# Gobblin-As-Service configuration properties
gobblin.service.work.dir=/etc/gobblin-as-service
fs.uri="file:///"

# Topology Catalog and Store
topologySpec.store.dir=${gobblin.service.work.dir}/topologySpecStore

# TopologySpec Factory
topologySpecFactory.topologyNames=localGobblinCluster
topologySpecFactory.localGobblinCluster.description="StandaloneClusterTopology"
topologySpecFactory.localGobblinCluster.version="1"
topologySpecFactory.localGobblinCluster.uri="gobblinCluster"
topologySpecFactory.localGobblinCluster.specExecutorInstance.class="org.apache.gobblin.runtime.spec_executorInstance.LocalFsSpecExecutor"
topologySpecFactory.localGobblinCluster.specExecInstance.capabilities="source:dest"
topologySpecFactory.localGobblinCluster.localFsSpecProducer.dir=${gobblin.service.work.dir}/jobs

# Flow Catalog and Store
flowSpec.store.dir=${gobblin.service.work.dir}/flowSpecStore

# Template Catalog
gobblin.service.templateCatalogs.fullyQualifiedPath="file://"

# JobStatusMonitor
gobblin.service.jobStatusMonitor.enabled=false

# JobStatusRetriever
jobStatusRetriever.class="org.apache.gobblin.service.monitoring.LocalFsJobStatusRetriever"
localFsJobStatusRetriever.localFsSpecProducer.dir=${gobblin.service.work.dir}/jobs

# DagManager
gobblin.service.dagManager.enabled=true
gobblin.service.dagManager.jobStatusRetriever.class="org.apache.gobblin.service.monitoring.LocalFsJobStatusRetriever"
gobblin.service.dagManager.dagStateStoreClass="org.apache.gobblin.service.modules.orchestration.FSDagStateStore"
gobblin.service.dagManager.dagStateStoreDir=${gobblin.service.work.dir}/dagStateStoreDir

# RestLI
gobblin.service.port=6956

