예제 #1
0
def detect_known_bugs():
    """Unit fails to start complaining there are members in the relation."""
    known_bugs = {
        1910958: {
            "description": ("Unit fails to start complaining there are "
                            "members in the relation."),
            "pattern": (
                r'.* manifold worker returned unexpected error: failed to '
                r'initialize uniter for "[A-Za-z0-9-]+": cannot create '
                r'relation state tracker: cannot remove persisted state, '
                r'relation \d+ has members'),
            "hint": "manifold worker returned unexpected error",
            }
        }

    s = FileSearcher()
    for bug in known_bugs:
        sd = SearchDef(known_bugs[bug]["pattern"],
                       tag=1910958, hint=known_bugs[bug]["hint"])
        s.add_search_term(sd, f"{JUJU_LOG_PATH}/*")

    results = s.search()

    for bug in known_bugs:
        if results.find_by_tag(bug):
            add_known_bug(bug, known_bugs.get("description"))
예제 #2
0
 def test_add_known_bug_first(self):
     with mock.patch.object(known_bugs_utils, 'PLUGIN_TMP_DIR',
                            self.tmpdir):
         known_bugs_utils.add_known_bug(1)
         ret = known_bugs_utils.get_known_bugs()
         self.assertEquals(ret, {
             known_bugs_utils.MASTER_YAML_KNOWN_BUGS_KEY:
             ['https://pad.lv/1']
         })
예제 #3
0
파일: checks.py 프로젝트: dosaboy/hotsos
 def process_results(self, results):
     for bugsearch in self.bug_definitions:
         tag = bugsearch["def"].tag
         _results = results.find_by_tag(tag)
         if _results:
             if bugsearch["def"].reason_format_result_groups:
                 reason = bugsearch["def"].rendered_reason(_results[0])
                 add_known_bug(tag, reason)
             else:
                 add_known_bug(tag, bugsearch["def"].reason)
예제 #4
0
 def test_add_known_bug_first(self):
     with mock.patch.object(known_bugs_utils, 'PLUGIN_TMP_DIR',
                            self.tmpdir):
         known_bugs_utils.add_known_bug(1)
         ret = known_bugs_utils._get_known_bugs()
         self.assertEquals(ret,
                           {known_bugs_utils.MASTER_YAML_KNOWN_BUGS_KEY:
                            [{'id': 'https://bugs.launchpad.net/bugs/1',
                              'desc': 'no description provided',
                              'origin': 'testplugin.01part'}
                             ]})
예제 #5
0
 def test_add_known_bug_first(self):
     with mock.patch.object(known_bugs_utils, 'PLUGIN_TMP_DIR',
                            self.tmpdir):
         known_bugs_utils.add_known_bug(1)
         ret = known_bugs_utils._get_known_bugs()
         self.assertEquals(
             ret, {
                 known_bugs_utils.MASTER_YAML_KNOWN_BUGS_KEY: [{
                     'https://bugs.launchpad.net/bugs/1':
                     'Microsoft has a majority market share'
                 }]
             })
예제 #6
0
    def test_add_known_bug(self):
        known_bugs = {
            known_bugs_utils.MASTER_YAML_KNOWN_BUGS_KEY: ['https://pad.lv/1']
        }
        with mock.patch.object(known_bugs_utils, 'PLUGIN_TMP_DIR',
                               self.tmpdir):
            with open(os.path.join(self.tmpdir, 'known_bugs.yaml'), 'w') as fd:
                fd.write(yaml.dump(known_bugs))

            known_bugs_utils.add_known_bug(2)
            ret = known_bugs_utils.get_known_bugs()
            self.assertEquals(
                ret, {
                    known_bugs_utils.MASTER_YAML_KNOWN_BUGS_KEY:
                    ['https://pad.lv/1', 'https://pad.lv/2']
                })
예제 #7
0
    def check_stats(self):
        if not self.get_sysfs_cachesets():
            return

        for path in self.get_sysfs_cachesets():
            path = os.path.join(path, "cache_available_percent")
            with open(path) as fd:
                value = fd.read().strip()
                limit = CACHE_AVAILABLE_PERCENT_LIMIT_LP1900438
                if int(value) <= limit:
                    msg = (
                        "bcache cache_available_percent ({}) is <= {} - "
                        "this node could be suffering from bug 1900438".format(
                            value, limit))
                    add_issue(BcacheWarning(msg))
                    add_known_bug(1900438, "see BcacheWarning for info")
예제 #8
0
def detect_known_bugs():
    """Unit fails to start complaining there are members in the relation."""
    data_source = f"{JUJU_LOG_PATH}/*.log"
    if constants.USE_ALL_LOGS:
        data_source = f"{data_source}*"

    s = FileSearcher()
    for bugdef in BUG_SEARCHES:
        s.add_search_term(bugdef, data_source)

    results = s.search()

    for bugdef in BUG_SEARCHES:
        bug_results = results.find_by_tag(bugdef.tag)
        if bug_results:
            reason = bugdef.render_reason(bug_results[0])
            add_known_bug(bugdef.tag, reason)
예제 #9
0
    def test_add_known_bug(self):
        known_bugs = {known_bugs_utils.MASTER_YAML_KNOWN_BUGS_KEY:
                      [{'id': 'https://bugs.launchpad.net/bugs/1',
                        'desc': 'no description provided',
                        'origin': 'testplugin.01part'}]}
        with mock.patch.object(known_bugs_utils, 'PLUGIN_TMP_DIR',
                               self.tmpdir):
            with open(os.path.join(self.tmpdir, 'known_bugs.yaml'), 'w') as fd:
                fd.write(yaml.dump(known_bugs))

            known_bugs_utils.add_known_bug(2)
            ret = known_bugs_utils._get_known_bugs()
            expected = {known_bugs_utils.MASTER_YAML_KNOWN_BUGS_KEY:
                        [{'id': 'https://bugs.launchpad.net/bugs/1',
                          'desc': 'no description provided',
                          'origin': 'testplugin.01part'},
                         {'id': 'https://bugs.launchpad.net/bugs/2',
                          'desc': 'no description provided',
                          'origin': 'testplugin.01part'}]}
            self.assertEquals(ret, expected)
예제 #10
0
    def run_cpu_pinning_checks(self):
        """Perform a set of checks on Nova cpu pinning configuration to ensure
        it is setup as expected.
        """

        if self.cpu_dedicated_set:
            intersect1 = self.cpu_dedicated_set.intersection(self.isolcpus)
            intersect2 = self.cpu_dedicated_set.intersection(self.cpuaffinity)
            if intersect1:
                if intersect2:
                    extra = ("intersection with isolcpus: {}\nintersection "
                             "with cpuaffinity: {}".format(
                                 intersect1, intersect2))
                    msg = ("{} is a subset of both isolcpus AND "
                           "cpuaffinity".format(self.cpu_dedicated_set_name))
                    self.results.add_error(msg, extra)
            elif intersect2:
                if intersect1:
                    extra = ("intersection with isolcpus: {}\nintersection "
                             "with cpuaffinity: {}".format(
                                 intersect1, intersect2))
                    msg = ("{} is a subset of both isolcpus AND "
                           "cpuaffinity".format(self.cpu_dedicated_set_name))
                    self.results.add_error(msg, extra)
            else:
                msg = ("{} is neither a subset of isolcpus nor cpuaffinity".
                       format(self.cpu_dedicated_set_name))
                self.results.add_error(msg)
                reason = "cpu pinning check: {}".format(msg)
                add_known_bug(1897275, reason)

        intersect = self.cpu_shared_set.intersection(self.kernel.isolcpus)
        if intersect:
            extra = "intersection: {}".format(list_to_str(intersect))
            self.results.add_error(
                "cpu_shared_set contains cores from "
                "isolcpus", extra)

        intersect = self.cpu_dedicated_set.intersection(self.cpu_shared_set)
        if intersect:
            extra = "intersection: {}".format(list_to_str(intersect))
            self.results.add_error(
                "cpu_shared_set and {} overlap".format(
                    self.cpu_dedicated_set_name), extra)

        intersect = self.isolcpus.intersection(self.cpuaffinity)
        if intersect:
            extra = "intersection: {}".format(list_to_str(intersect))
            self.results.add_error("isolcpus and cpuaffinity overlap", extra)

        node_count = 0
        for node in self.numa.nodes:
            if self.cpu_dedicated_set.intersection(set(self.numa.cores(node))):
                node_count += 1

        if node_count > 1:
            extra = ""
            for node in self.numa.nodes:
                if extra:
                    extra += "\n"

                extra += "node{}: {}".format(
                    node, list_to_str(self.numa.cores(node)))

            extra += "\n{}: {}".format(self.cpu_dedicated_set_name,
                                       list_to_str(self.cpu_dedicated_set))

            self.results.add_info(
                "{} has cores from > 1 numa node".format(
                    self.cpu_dedicated_set_name), extra)

        if self.isolcpus or self.cpuaffinity:
            total_isolated = self.isolcpus.union(self.cpuaffinity)
            nonisolated = set(total_isolated).intersection()
            if len(nonisolated) <= 4:
                self.results.add_warn("Host has only {} cores unpinned. This "
                                      "might cause unintended performance "
                                      "problems".format(len(nonisolated)))
예제 #11
0
 def process_bug_results(self, results):
     for tag in self.agent_bug_search_terms:
         if results.find_by_tag(tag):
             reason = self.agent_bug_search_terms[tag]["reason"]
             add_known_bug(tag, description=reason)
예제 #12
0
 def process_results(self, results):
     for bugsearch in AGENT_BUG_SEARCHES:
         if results.find_by_tag(bugsearch.tag):
             add_known_bug(bugsearch.tag, bugsearch.reason)
예제 #13
0
 def process_results(self, results):
     for bugsearch in AGENT_BUG_SEARCHES:
         tag = bugsearch["def"].tag
         if results.find_by_tag(tag):
             add_known_bug(tag, bugsearch["def"].reason)