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()