Skip to content

Commit

Permalink
refactor(filters): add issue_version to filters
Browse files Browse the repository at this point in the history
Included issue_version in all issue-related filters that didn't have
them yet
  • Loading branch information
murilx committed Feb 11, 2025
1 parent 0a3a904 commit c404932
Show file tree
Hide file tree
Showing 3 changed files with 116 additions and 64 deletions.
126 changes: 84 additions & 42 deletions backend/kernelCI_app/helpers/filters.py
Original file line number Diff line number Diff line change
Expand Up @@ -16,33 +16,62 @@ def is_test_failure(test_status: str) -> bool:
return test_status in failure_status_list


def is_known_issue(issue_id: Optional[str]) -> bool:
return issue_id is not None and issue_id is not UNKNOWN_STRING
def is_known_issue(issue_id: Optional[str], issue_version: Optional[int]) -> bool:
return (
issue_id is not None
and issue_version is not None
and issue_id is not UNKNOWN_STRING
)


def is_exclusively_build_issue(issue_id: Optional[str], incident_test_id: Optional[str]) -> bool:
is_known_issue_result = is_known_issue(issue_id)
is_exclusively_build_issue_result = is_known_issue_result and incident_test_id is None
def is_exclusively_build_issue(
issue_id: Optional[str],
issue_version: Optional[int],
incident_test_id: Optional[str],
) -> bool:
is_known_issue_result = is_known_issue(issue_id, issue_version)
is_exclusively_build_issue_result = (
is_known_issue_result and incident_test_id is None
)
return is_exclusively_build_issue_result


def is_exclusively_test_issue(
*, issue_id: Optional[str], incident_test_id: Optional[str]
*,
issue_id: Optional[str],
issue_version: Optional[int],
incident_test_id: Optional[str],
) -> bool:
is_known_issue_result = is_known_issue(issue_id)
is_exclusively_test_issue_result = is_known_issue_result and incident_test_id is not None
is_known_issue_result = is_known_issue(issue_id, issue_version)
is_exclusively_test_issue_result = (
is_known_issue_result and incident_test_id is not None
)
return is_exclusively_test_issue_result


def is_issue_from_test(*, incident_test_id: Optional[str], issue_id: Optional[str]) -> bool:
is_known_issue_result = is_known_issue(issue_id=issue_id)
def is_issue_from_test(
*,
incident_test_id: Optional[str],
issue_id: Optional[str],
issue_version: Optional[int],
) -> bool:
is_known_issue_result = is_known_issue(
issue_id=issue_id, issue_version=issue_version
)
is_possible_test_issue = incident_test_id is not None or not is_known_issue_result

return is_possible_test_issue


def is_issue_from_build(*, issue_id: Optional[str], incident_test_id: Optional[str]) -> bool:
is_known_issue_result = is_known_issue(issue_id=issue_id)
def is_issue_from_build(
*,
issue_id: Optional[str],
issue_version: Optional[int],
incident_test_id: Optional[str],
) -> bool:
is_known_issue_result = is_known_issue(
issue_id=issue_id, issue_version=issue_version
)
is_possible_build_issue = incident_test_id is None or not is_known_issue_result

return is_possible_build_issue
Expand All @@ -51,7 +80,7 @@ def is_issue_from_build(*, issue_id: Optional[str], incident_test_id: Optional[s
def verify_issue_in_filter(
issue_filter_data: Union[Dict, str],
issue_id: Optional[str],
issue_version: Optional[int]
issue_version: Optional[int],
) -> bool:
is_unknown_issue = False
if issue_filter_data == UNKNOWN_STRING:
Expand All @@ -68,12 +97,14 @@ def verify_issue_in_filter(


def is_issue_filtered_out(
*,
issue_id: Optional[str],
issue_filters: set,
issue_version: Optional[int]
*, issue_id: Optional[str], issue_filters: set, issue_version: Optional[int]
) -> bool:
in_filter = any(verify_issue_in_filter(issue, issue_id, issue_version) for issue in issue_filters)
in_filter = any(
verify_issue_in_filter(
issue_filter_data=issue, issue_id=issue_id, issue_version=issue_version
)
for issue in issue_filters
)
return not in_filter


Expand All @@ -83,7 +114,7 @@ def should_filter_test_issue(
issue_id: Optional[str],
issue_version: Optional[int],
incident_test_id: Optional[str],
test_status: Optional[str]
test_status: Optional[str],
) -> bool:
has_issue_filter = len(issue_filters) > 0
if not has_issue_filter:
Expand All @@ -95,7 +126,9 @@ def should_filter_test_issue(
has_unknown_filter = UNKNOWN_STRING in issue_filters

is_exclusively_build_issue_result = is_exclusively_build_issue(
issue_id=issue_id, incident_test_id=incident_test_id
issue_id=issue_id,
issue_version=issue_version,
incident_test_id=incident_test_id,
)

if is_exclusively_build_issue_result and has_unknown_filter:
Expand All @@ -104,9 +137,7 @@ def should_filter_test_issue(
issue_id = UNKNOWN_STRING

is_issue_filtered_out_result = is_issue_filtered_out(
issue_id=issue_id,
issue_version=issue_version,
issue_filters=issue_filters
issue_id=issue_id, issue_version=issue_version, issue_filters=issue_filters
)

return is_issue_filtered_out_result
Expand All @@ -118,7 +149,7 @@ def should_filter_build_issue(
issue_id: Optional[str],
issue_version: Optional[int],
incident_test_id: Optional[str],
build_valid: Optional[bool]
build_valid: Optional[bool],
) -> bool:
has_issue_filter = len(issue_filters) > 0
if not has_issue_filter:
Expand All @@ -130,7 +161,9 @@ def should_filter_build_issue(
has_unknown_filter = UNKNOWN_STRING in issue_filters

is_exclusively_test_issue_result = is_exclusively_test_issue(
issue_id=issue_id, incident_test_id=incident_test_id
issue_id=issue_id,
issue_version=issue_version,
incident_test_id=incident_test_id,
)

if is_exclusively_test_issue_result and has_unknown_filter:
Expand All @@ -139,49 +172,58 @@ def should_filter_build_issue(
issue_id = UNKNOWN_STRING

is_issue_filtered_out_result = is_issue_filtered_out(
issue_id=issue_id,
issue_version=issue_version,
issue_filters=issue_filters
issue_id=issue_id, issue_version=issue_version, issue_filters=issue_filters
)

return is_issue_filtered_out_result


def should_increment_test_issue(
issue_id: Optional[str], incident_test_id: Optional[str]
) -> Tuple[str, bool]:
issue_id: Optional[str],
issue_version: Optional[int],
incident_test_id: Optional[str],
) -> Tuple[str, int, bool]:
is_exclusively_build_issue_result = is_exclusively_build_issue(
issue_id=issue_id, incident_test_id=incident_test_id
issue_id=issue_id,
issue_version=issue_version,
incident_test_id=incident_test_id,
)
if is_exclusively_build_issue_result:
return (UNKNOWN_STRING, False)
return (UNKNOWN_STRING, None, False)

is_issue_from_test_result = is_issue_from_test(
incident_test_id=incident_test_id, issue_id=issue_id
issue_id=issue_id,
issue_version=issue_version,
incident_test_id=incident_test_id,
)

return (issue_id, is_issue_from_test_result)
return (issue_id, issue_version, is_issue_from_test_result)


def should_increment_build_issue(
*,
issue_id: Optional[str],
issue_version: Optional[int],
incident_test_id: Optional[str],
build_valid: Optional[bool],
) -> Tuple[str, bool]:
) -> Tuple[str, int, bool]:
is_exclusively_test_issue_result = is_exclusively_test_issue(
issue_id=issue_id, incident_test_id=incident_test_id
issue_id=issue_id,
issue_version=issue_version,
incident_test_id=incident_test_id,
)
if is_exclusively_test_issue_result:
return (UNKNOWN_STRING, False)
return (UNKNOWN_STRING, None, False)

is_issue_from_build_result = is_issue_from_build(
issue_id=issue_id, incident_test_id=incident_test_id
issue_id=issue_id,
issue_version=issue_version,
incident_test_id=incident_test_id,
)

result = is_issue_from_build_result and is_build_invalid(build_valid)

return (issue_id, result)
return (issue_id, issue_version, result)


def toIntOrDefault(value, default):
Expand Down Expand Up @@ -485,7 +527,7 @@ def is_build_filtered_out(
issue_id=issue_id,
issue_version=issue_version,
incident_test_id=incident_test_id,
build_valid=valid
build_valid=valid,
)
)
)
Expand Down Expand Up @@ -570,7 +612,7 @@ def is_boot_filtered_out(
issue_id=issue_id,
issue_version=issue_version,
incident_test_id=incident_test_id,
test_status=status
test_status=status,
)
or (
len(self.filterPlatforms["boot"]) > 0
Expand Down Expand Up @@ -617,7 +659,7 @@ def is_test_filtered_out(
issue_id=issue_id,
issue_version=issue_version,
incident_test_id=incident_test_id,
test_status=status
test_status=status,
)
or (
len(self.filterPlatforms["test"]) > 0
Expand Down
29 changes: 16 additions & 13 deletions backend/kernelCI_app/helpers/hardwareDetails.py
Original file line number Diff line number Diff line change
Expand Up @@ -692,14 +692,17 @@ def update_issues(
) -> None:
can_insert_issue = True
if issue_from == "build":
(issue_id, can_insert_issue) = should_increment_build_issue(
(issue_id, issue_version, can_insert_issue) = should_increment_build_issue(
issue_id=issue_id,
issue_version=issue_version,
incident_test_id=incident_test_id,
build_valid=build_valid,
)
elif issue_from == "test":
(issue_id, can_insert_issue) = should_increment_test_issue(
issue_id, incident_test_id
(issue_id, issue_version, can_insert_issue) = should_increment_test_issue(
issue_id=issue_id,
issue_version=issue_version,
incident_test_id=incident_test_id,
)

if issue_id and issue_version is not None and can_insert_issue:
Expand Down Expand Up @@ -766,11 +769,7 @@ def get_processed_issue_key(*, record: Dict) -> str:
issue_version = record["incidents__issue__version"]
issue_version_key = str(issue_version) if issue_version is not None else ""

processed_issue_key = (
record["id"]
+ issue_id_key
+ issue_version_key
)
processed_issue_key = record["id"] + issue_id_key + issue_version_key
return processed_issue_key


Expand Down Expand Up @@ -851,10 +850,13 @@ def process_filters(*, instance, record: Dict) -> None:
instance.global_architectures.add(record["build__architecture"])
instance.global_compilers.add(record["build__compiler"])

build_issue_id, is_build_issue = should_increment_build_issue(
issue_id=build_issue_id,
incident_test_id=incident_test_id,
build_valid=build_valid,
build_issue_id, build_issue_version, is_build_issue = (
should_increment_build_issue(
issue_id=build_issue_id,
issue_version=build_issue_version,
incident_test_id=incident_test_id,
build_valid=build_valid,
)
)

is_invalid = build_valid is False
Expand All @@ -876,8 +878,9 @@ def process_filters(*, instance, record: Dict) -> None:

test_issue_id = record["incidents__issue__id"]
test_issue_version = record["incidents__issue__version"]
test_issue_id, is_test_issue = should_increment_test_issue(
test_issue_id, test_issue_version, is_test_issue = should_increment_test_issue(
issue_id=test_issue_id,
issue_version=test_issue_version,
incident_test_id=incident_test_id,
)

Expand Down
25 changes: 16 additions & 9 deletions backend/kernelCI_app/helpers/treeDetails.py
Original file line number Diff line number Diff line change
Expand Up @@ -300,8 +300,9 @@ def process_builds_issue(instance, row_data):
build_valid = row_data["build_valid"]
incident_test_id = row_data["incident_test_id"]

(issue_id, can_insert_issue) = should_increment_build_issue(
(issue_id, issue_version, can_insert_issue) = should_increment_build_issue(
issue_id=issue_id,
issue_version=issue_version,
incident_test_id=incident_test_id,
build_valid=build_valid,
)
Expand Down Expand Up @@ -330,8 +331,10 @@ def process_tests_issue(instance, row_data):
issue_report_url = row_data["issue_report_url"]
incident_test_id = row_data["incident_test_id"]

(issue_id, can_insert_issue) = should_increment_test_issue(
issue_id, incident_test_id
(issue_id, issue_version, can_insert_issue) = should_increment_test_issue(
issue_id=issue_id,
issue_version=issue_version,
incident_test_id=incident_test_id,
)

if issue_id and issue_version is not None and can_insert_issue:
Expand All @@ -357,8 +360,10 @@ def process_boots_issue(instance, row_data):
issue_report_url = row_data["issue_report_url"]
incident_test_id = row_data["incident_test_id"]

(issue_id, can_insert_issue) = should_increment_test_issue(
issue_id=issue_id, incident_test_id=incident_test_id
(issue_id, issue_version, can_insert_issue) = should_increment_test_issue(
issue_id=issue_id,
issue_version=issue_version,
incident_test_id=incident_test_id,
)

if issue_id and issue_version is not None and can_insert_issue:
Expand Down Expand Up @@ -527,24 +532,26 @@ def process_filters(instance, row_data: dict) -> None:
instance.global_architectures.add(row_data["build_architecture"])
instance.global_compilers.add(row_data["build_compiler"])

build_issue_id, is_build_issue = should_increment_build_issue(
build_issue_id, build_issue_version, is_build_issue = should_increment_build_issue(
issue_id=issue_id,
issue_version=issue_version,
incident_test_id=incident_test_id,
build_valid=build_valid,
)

is_invalid = build_valid is False
add_unfiltered_issue(
issue_id=build_issue_id,
issue_version=issue_version,
issue_version=build_issue_version,
should_increment=is_build_issue,
issue_set=instance.unfiltered_build_issues,
is_invalid=is_invalid,
)

if row_data["test_id"] is not None:
test_issue_id, is_test_issue = should_increment_test_issue(
test_issue_id, test_issue_version, is_test_issue = should_increment_test_issue(
issue_id=issue_id,
issue_version=issue_version,
incident_test_id=incident_test_id,
)

Expand All @@ -556,7 +563,7 @@ def process_filters(instance, row_data: dict) -> None:
is_invalid = row_data["test_status"] == FAIL_STATUS
add_unfiltered_issue(
issue_id=test_issue_id,
issue_version=issue_version,
issue_version=test_issue_version,
should_increment=is_test_issue,
issue_set=issue_set,
is_invalid=is_invalid,
Expand Down

0 comments on commit c404932

Please sign in to comment.