You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
flink/flink-python/pyflink/common/tests/test_execution_config.py

164 lines
6.0 KiB
Python

################################################################################
# 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.
################################################################################
from pyflink.datastream import StreamExecutionEnvironment
from pyflink.common import (ExecutionConfig, Configuration)
from pyflink.java_gateway import get_gateway
from pyflink.testing.test_case_utils import PyFlinkTestCase
from pyflink.util.java_utils import get_j_env_configuration
class ExecutionConfigTests(PyFlinkTestCase):
def setUp(self):
self.env = StreamExecutionEnvironment.get_execution_environment()
self.execution_config = self.env.get_config()
def test_constant(self):
gateway = get_gateway()
JExecutionConfig = gateway.jvm.org.apache.flink.api.common.ExecutionConfig
self.assertEqual(ExecutionConfig.PARALLELISM_DEFAULT, JExecutionConfig.PARALLELISM_DEFAULT)
self.assertEqual(ExecutionConfig.PARALLELISM_UNKNOWN, JExecutionConfig.PARALLELISM_UNKNOWN)
def test_get_set_closure_cleaner(self):
self.assertTrue(self.execution_config.is_closure_cleaner_enabled())
self.execution_config.disable_closure_cleaner()
self.assertFalse(self.execution_config.is_closure_cleaner_enabled())
self.execution_config.enable_closure_cleaner()
self.assertTrue(self.execution_config.is_closure_cleaner_enabled())
def test_get_set_auto_watermark_interval(self):
[FLINK-19317] Make EventTime the default TimeCharacteristic This is part of the FLIP-134 (Batch execution for the DataStream API) work. Event time is the only sensible time characteristic for batch processing. We therefore change the default value of the TimeCharacteristic from ProcessingTime to EventTime. This means the DataStream API programs that were using event time before now just work without manually changing this setting. Processing-time programs will also still work, because using processing-time timers is not dependent on the TimeCharacteristic. DataStream programs that don't set a TimestampAssigner or WatermarkStrategy will also still work if they don't use operations that don't rely on (event-time) timestamps. This is true for both BATCH and STREAMING execution mode. With this change, users don't need to call setStreamTimeCharacteristic(EventTime) anymore. We will make sure they learn of this by deprecating the method in a follow-up commit. The only real user-visible change of this is that programs that used the KeyedStream.timeWindow()/DataStream.timeWindow() operation, which is dependent on the TimeCharacteristic will now use event time by default. We don't think this operation is useful because the behaviour can be surprising. We recommend users always use an explicit processing-time window or event-time window. We also change the default watermark interval from 0 (disabled) to 200 to match the previous behaviour of calling setStreamTimeCharacteristic(EventTime).
4 years ago
self.assertEqual(self.execution_config.get_auto_watermark_interval(), 200)
self.execution_config.set_auto_watermark_interval(1000)
self.assertEqual(self.execution_config.get_auto_watermark_interval(), 1000)
def test_get_set_parallelism(self):
self.execution_config.set_parallelism(8)
self.assertEqual(self.execution_config.get_parallelism(), 8)
self.execution_config.set_parallelism(4)
self.assertEqual(self.execution_config.get_parallelism(), 4)
def test_get_set_max_parallelism(self):
self.execution_config.set_max_parallelism(12)
self.assertEqual(self.execution_config.get_max_parallelism(), 12)
self.execution_config.set_max_parallelism(16)
self.assertEqual(self.execution_config.get_max_parallelism(), 16)
def test_get_set_task_cancellation_interval(self):
self.assertEqual(self.execution_config.get_task_cancellation_interval(), 30000)
self.execution_config.set_task_cancellation_interval(1000)
self.assertEqual(self.execution_config.get_task_cancellation_interval(), 1000)
def test_get_set_task_cancellation_timeout(self):
self.assertEqual(self.execution_config.get_task_cancellation_timeout(), 180000)
self.execution_config.set_task_cancellation_timeout(3000)
self.assertEqual(self.execution_config.get_task_cancellation_timeout(), 3000)
def test_disable_enable_auto_generated_uids(self):
self.execution_config.disable_auto_generated_uids()
self.assertFalse(self.execution_config.has_auto_generated_uids_enabled())
self.execution_config.enable_auto_generated_uids()
self.assertTrue(self.execution_config.has_auto_generated_uids_enabled())
def test_disable_enable_object_reuse(self):
self.execution_config.disable_object_reuse()
self.assertFalse(self.execution_config.is_object_reuse_enabled())
self.execution_config.enable_object_reuse()
self.assertTrue(self.execution_config.is_object_reuse_enabled())
def test_get_set_global_job_parameters(self):
self.execution_config.set_global_job_parameters({"hello": "world"})
self.assertEqual(self.execution_config.get_global_job_parameters(), {"hello": "world"})
def test_get_set_use_snapshot_compression(self):
self.execution_config.set_use_snapshot_compression(False)
self.assertFalse(self.execution_config.is_use_snapshot_compression())
self.execution_config.set_use_snapshot_compression(True)
self.assertTrue(self.execution_config.is_use_snapshot_compression())
def test_equals_and_hash(self):
config1 = StreamExecutionEnvironment.get_execution_environment().get_config()
config2 = StreamExecutionEnvironment.get_execution_environment().get_config()
self.assertEqual(config1, config2)
self.assertEqual(hash(config1), hash(config2))
config1.set_parallelism(12)
config2.set_parallelism(11)
self.assertNotEqual(config1, config2)
# it is allowed for hashes to be equal even if objects are not
config2.set_parallelism(12)
self.assertEqual(config1, config2)
self.assertEqual(hash(config1), hash(config2))
def test_get_execution_environment_with_config(self):
configuration = Configuration()
configuration.set_integer('parallelism.default', 12)
configuration.set_string('pipeline.name', 'haha')
env = StreamExecutionEnvironment.get_execution_environment(configuration)
execution_config = env.get_config()
self.assertEqual(execution_config.get_parallelism(), 12)
config = Configuration(
j_configuration=get_j_env_configuration(env._j_stream_execution_environment))
self.assertEqual(config.get_string('pipeline.name', ''), 'haha')