You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@impala.apache.org by tm...@apache.org on 2018/08/20 20:36:05 UTC
[2/4] impala git commit: tests: remove unused failure_injector test
library
tests: remove unused failure_injector test library
This seems to have been added years ago but never used. It's just
clutter right now that distracts from newer failure injection
approaches. Let's remove it.
Change-Id: I6ae8aa13acc85ec2f3a345d460babdb8c55a56cd
Reviewed-on: http://gerrit.cloudera.org:8080/11226
Tested-by: Impala Public Jenkins <im...@cloudera.com>
Reviewed-by: Todd Lipcon <to...@apache.org>
Project: http://git-wip-us.apache.org/repos/asf/impala/repo
Commit: http://git-wip-us.apache.org/repos/asf/impala/commit/f8f200e5
Tree: http://git-wip-us.apache.org/repos/asf/impala/tree/f8f200e5
Diff: http://git-wip-us.apache.org/repos/asf/impala/diff/f8f200e5
Branch: refs/heads/master
Commit: f8f200e58ddfb37abac9fedaad7ee4b5516b244f
Parents: 73d37d6
Author: Todd Lipcon <to...@apache.org>
Authored: Tue Aug 14 16:46:37 2018 -0700
Committer: Todd Lipcon <to...@apache.org>
Committed: Mon Aug 20 18:15:57 2018 +0000
----------------------------------------------------------------------
tests/common/failure_injector.py | 102 ----------------------------------
1 file changed, 102 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/impala/blob/f8f200e5/tests/common/failure_injector.py
----------------------------------------------------------------------
diff --git a/tests/common/failure_injector.py b/tests/common/failure_injector.py
deleted file mode 100644
index 95a8393..0000000
--- a/tests/common/failure_injector.py
+++ /dev/null
@@ -1,102 +0,0 @@
-# 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.
-
-# Failure injection module for the Impala service. There are two main ways this module
-# can be used - the first is to initialize the failure injector and then call start()
-# which will kick off a timer that chooses a random impalad/state store process
-# to fail each time timer fires.
-# The second way this module can be used to to initialize it and call the actions
-# directly (ex. kill_random_impalad()). This provides a bit more control over exactly
-# when a failure will happen and is useful for targeted test scenarios.
-
-import logging
-from random import choice
-from threading import Timer
-
-logging.basicConfig(level=logging.INFO, format='%(threadName)s: %(message)s')
-LOG = logging.getLogger('failure-injector')
-
-# This class is used for injecting failures for the Impala service.
-class FailureInjector(object):
- def __init__(self, impala_cluster, failure_frequency, impalad_exclude_list=None):
- """
- Initializes the FailureInjector object.
-
- impala_cluster - An ImpalaCluster object (see the impala_cluster module)
- failure_frequency - Interval to fire timer (in seconds)
- impalad_exclude_list - A list of impalad host:port name to not inject failures
- on. Useful to filter out the coordinator.
- """
- self.cluster = impala_cluster
- self.cluster.get_impala_service().set_process_auto_restart_config(value=True)
- # TODO: Do we need to restart the impala service to apply this?
- # self.cluster.get_impala_service().restart()
- self.failure_frequency = failure_frequency
- num_impalad_procs = len(self.cluster.get_impala_service().get_all_impalad_processes())
-
- self.impalad_exclude_list = impalad_exclude_list
-
- # Build a weighted list of possible actions. This is done using a trivial approach
- # where we just add the item multiple times (weight value) into the action list.
- # TODO: Provide a way to dynamically configure the weights
- actions_with_weights = {self.kill_random_impalad: num_impalad_procs * 2,
- self.kill_state_store: 1}
-
- self.possible_actions = list()
- for key, value in actions_with_weights.items():
- self.possible_actions.extend([key] * value)
-
- def start(self):
- """ Starts the timer, triggering failures for the specified interval """
- self.__start_timer()
-
- def cancel(self):
- """ Stops the timer, canceling any additional failures from occurring """
- if self.__timer is not None:
- self.__timer.cancel()
-
- def kill_random_impalad(self):
- """ Kills a randomly selected impalad instance not in the exlude list """
- filtered_impalad = \
- filter(lambda impalad: '%s:%d' % (impalad.hostname, impalad.be_port)\
- not in self.impalad_exclude_list,
- self.cluster.get_impala_service().get_all_impalad_processes())
- self.kill_impalad(choice(filtered_impalad))
-
- def kill_impalad(self, impalad):
- """ Kills the specified impalad instance """
- LOG.info('Chose impalad on "%s" to kill' % impalad.hostname)
- impalad.kill()
-
- def kill_state_store(self):
- """ Kills the statestore process """
- state_store = self.cluster.get_impala_service().get_state_store_process()
- LOG.info('Chose statestore on "%s" to kill' % state_store.hostname)
- state_store.kill()
-
- def __start_timer(self):
- """ Starts a new timer, cancelling the previous timer if it is running """
- self.cancel()
- self.__timer = Timer(self.failure_frequency, self.__choose_action)
- self.__timer.start()
-
- def __choose_action(self):
- """ Chooses a failure action to perform """
- action = choice(self.possible_actions)
- LOG.info('Executing action: %s' % action)
- action()
- self.__start_timer()