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

# SAMOA Flink properties file
# This file contains specific configurations for SAMOA deployment in Flink platform

# samoa.flink.mode corresponds to the execution mode of a Task in Flink
# possible values:
# 1. local   - to run the task in local StreamingEnvironment
# 2. cluster - to run the task in the specified cluster
samoa.flink.mode=cluster

#in case samoa.flink.mode equals "cluster", then the user has to set up also the following parameters:
# @samoa.flink.flinkMaster: the IP address of the cluster
# @samoa.flink.port : the port
samoa.flink.flinkMaster=127.0.0.1
samoa.flink.port=6123

