diff --git a/bazel/docs/header_cycle_resolution.md b/bazel/docs/header_cycle_resolution.md index 0f88919219a..7625d41ea8b 100644 --- a/bazel/docs/header_cycle_resolution.md +++ b/bazel/docs/header_cycle_resolution.md @@ -1,8 +1,8 @@ -# Header relocation and cycle resolution. +# Header Relocation and Cycle Resolution 1. Locate all the targets that reference the header file in BUILD.bazel files. -2. Find an ideal target to declare the header under. The is usually under the target that features the .cpp file of the same name. Otherwise, the header can be placed it its own library. +2. Find an ideal target to declare the header under. This is usually under the target that features the .cpp file of the same name. Otherwise, the header can be placed in its own library. 3. Ensure that all the targets that need this header can depend on the target the header was moved to. -4. Run `bazel build //src/...` to see if it builds (check for failures related to dependency cycles). +4. Run `bazel build //src/...` to check for build failures (look for failures related to dependency cycles). 5. If the build fails because of a dependency cycle, you may need to split up the dependent library or relocate the header. 6. Once the build succeeds, please create a PR and include `devprod-build` for review. diff --git a/buildscripts/client/jiraclient.py b/buildscripts/client/jiraclient.py index 9e0f38b1178..ed1a60c04a5 100644 --- a/buildscripts/client/jiraclient.py +++ b/buildscripts/client/jiraclient.py @@ -6,6 +6,7 @@ from typing import Any, Dict, Iterable, Optional, Sequence from jira import JIRA, Issue from jira.client import ResultList +from jira.resilientsession import ResilientSession from pydantic import BaseSettings ASSIGNED_TEAMS_FIELD = "customfield_12751" @@ -104,15 +105,14 @@ class JiraClient: priority: str = "3", components: Optional[Sequence[str]] = None, labels: Optional[Sequence[str]] = None, - ) -> Issue: + ) -> Optional[Issue]: assigned_teams_mapped = list(map(lambda x: {"value": x}, assigned_teams)) fields = { "project": {"key": jira_project}, - "summary": issue_summary, + "summary": summary, "description": description, "issuetype": {"name": issue_type}, ASSIGNED_TEAMS_FIELD: assigned_teams_mapped, - "components": components, "priority": {"id": priority}, } if labels: @@ -121,7 +121,12 @@ class JiraClient: if owner: fields["assignee"] = {"name": owner} + if components: + fields["components"] = components + logger.info({"message": "Creating JIRA issue", "fields": fields}) if not self.dry_run: return self._jira.create_issue(fields=fields) + + return None diff --git a/buildscripts/fix_headers.py b/buildscripts/fix_headers.py index 37ffb8e913a..1ff91df307f 100644 --- a/buildscripts/fix_headers.py +++ b/buildscripts/fix_headers.py @@ -21,6 +21,10 @@ if __name__ == "__main__" and __package__ is None: sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) import buildscripts.util.buildozer_utils as bd_utils +from buildscripts.client.jiraclient import JiraAuth, JiraClient +from buildscripts.util.codeowners_utils import Owners + +JIRA_SERVER = "https://jira.mongodb.org" CC_LIB_SUFFIX = "_with_debug" @@ -31,8 +35,8 @@ def move_header( bd_utils.bd_remove([fix_target], "hdrs", [header]) if new_dep: bd_utils.bd_add([fix_target], "deps", [new_dep]) - if add_header: - bd_utils.bd_add([new_dep], "hdrs", [header]) + # if add_header: + # bd_utils.bd_add([new_dep], "hdrs", [header]) def undo_header_move( @@ -40,9 +44,32 @@ def undo_header_move( ) -> None: if new_dep: bd_utils.bd_remove([fix_target], "deps", [new_dep]) - if remove_header: - bd_utils.bd_remove([new_dep], "hdrs", [header]) - bd_utils.bd_add([fix_target], "hdrs", [header]) + # if remove_header: + # bd_utils.bd_remove([new_dep], "hdrs", [header]) + # bd_utils.bd_add([fix_target], "hdrs", [header]) + + +def new_filegroup(header: str, issue_key: str) -> str: + package = header.split(":")[0] + ":__pkg__" + target_name = header.split(".")[0] + fg_name = target_name.split(":")[1] + "_hdrs" + fg_label = package.split(":")[0] + f":{fg_name}" + bd_utils.bd_new(package, "filegroup", fg_name) + bd_utils.bd_add([fg_label], "srcs", [header]) + return fg_label + + +def fix_cycle(fix_target: str, header: str, issue_key: str) -> str: + fg_label = new_filegroup(header, issue_key) + bd_utils.bd_add([fix_target], "hdrs", [fg_label]) + return fg_label + + +def todo_comment(issue_key: str, header: str, new_dep: str, fg_label: str) -> None: + comment = f"TODO({issue_key}): Remove cycle created by moving {header} to {new_dep}".replace( + " ", "\ " + ) + bd_utils.bd_comment([fg_label], comment) def useful_print(fixes: Dict) -> None: @@ -73,13 +100,23 @@ class HeaderFixer: bazel_include_info = json.load(f) self.bazel_exec = bazel_include_info["bazel_exec"] self.bazel_config = bazel_include_info["config"] + auth = JiraAuth() + auth.pat = os.environ["JIRA_TOKEN"] + self.jira_client = JiraClient(JIRA_SERVER, auth, dry_run=False) + self.owners = Owners() + self.team_issues = {} def _query( self, query: str, config: bool = False, args: List[str] = [] ) -> subprocess.CompletedProcess: - query_cmd = "cquery" if config else "query" + query_cmd = "cquery" + config_args = self.bazel_config + if not config: + query_cmd = "query" + config_args = [] + p = subprocess.run( - [self.bazel_exec, query_cmd] + self.bazel_config + args + [query], + [self.bazel_exec, query_cmd] + config_args + args + [query], capture_output=True, text=True, check=True, @@ -91,7 +128,6 @@ class HeaderFixer: [self.bazel_exec, "build"] + self.bazel_config + [target], capture_output=True, text=True, - check=True, ) return p @@ -162,10 +198,15 @@ class HeaderFixer: orphaned_headers.append(hdr) continue + # ignore if cpp file of respective header is a src of our fix target + if new_dep == target: + continue + buildozer_cmds = [f"buildozer 'remove hdrs {hdr}' {target}"] if not has_header: buildozer_cmds += [f"buildozer 'add hdrs {hdr}' {new_dep}"] if self._check_dep_exists(target, new_dep): + print(f"Dep {new_dep} is already a dependency") new_dep = None else: buildozer_cmds += [f"buildozer 'add deps {new_dep}' {target}"] @@ -173,11 +214,14 @@ class HeaderFixer: p = self._build(target) if p.returncode == 0: target_fixes["fixes"][hdr] = buildozer_cmds - elif p.returncode == 1 and "cycle in dependency graph" in p.stdout: + elif p.returncode == 1 and "cycle in dependency graph" in p.stderr: target_fixes["cycles"][hdr] = buildozer_cmds + issue_key = self._create_jira_ticket(hdr) + fg_label = fix_cycle(target, hdr, issue_key) + todo_comment(issue_key, hdr, new_dep, fg_label) + undo_header_move(target, hdr, new_dep, has_header) else: print("Unexpected bazel failure.") - undo_header_move(target, hdr, new_dep, has_header) print(f"Orphaned headers for {target}") print("\n".join(orphaned_headers)) @@ -194,6 +238,35 @@ class HeaderFixer: if line.startswith("//") ] + def _create_jira_ticket(self, header: str) -> str: + summary = f"Fix cycle created by " + header + header_file_path = header.replace(":", "/")[2:] + assigned_teams = self.owners.get_jira_team_owner(header_file_path) + if not assigned_teams: + assigned_teams = ["Build"] + teams_key = ",".join(sorted(assigned_teams)) + if teams_key in self.team_issues: + description = header + issue = self.team_issues[teams_key] + # Add new header to description + issue.update(description=(issue.fields.description or "") + "\n" + description) + else: + description = ( + "[Header relocation info|https://github.com/10gen/mongo/blob/master/bazel/docs/header_cycle_resolution.md]\nPlease resolve dependency issues with the following headers:\n" + + header + ) + issue = self.jira_client.create_issue( + issue_type="Bug", + summary=summary, + description=description, + assigned_teams=assigned_teams, + jira_project="SERVER", + ) + self.team_issues[teams_key] = issue + if not issue: + return "" + return issue.key + def fix_targets(self, target_exp: str) -> Dict: fixes = {} for target in self._evaluate_target_expression(target_exp): diff --git a/buildscripts/util/buildozer_utils.py b/buildscripts/util/buildozer_utils.py index 4ca668e399d..2807778115c 100644 --- a/buildscripts/util/buildozer_utils.py +++ b/buildscripts/util/buildozer_utils.py @@ -1,18 +1,30 @@ import subprocess -from typing import List +from typing import List, Optional def _bd_command(cmd: str, labels: List[str]): - return subprocess.run( - ["buildozer"] + [cmd], + p = subprocess.run( + f"buildozer '{cmd}' " + " ".join(labels), capture_output=True, + shell=True, text=True, + check=True, ) + return p + def bd_add(labels: List[str], attr: str, values: List[str]) -> None: - _bd_command(f'add {attr} {"".join(values)}', labels) + _bd_command(f'add {attr} {" ".join(values)}', labels) def bd_remove(labels: List[str], attr: str, values: List[str]) -> None: - _bd_command(f'remove {attr} {"".join(values)}', labels) + _bd_command(f'remove {attr} {" ".join(values)}', labels) + + +def bd_new(package: str, rule_kind: str, rule_name: str) -> None: + _bd_command(f"new {rule_kind} {rule_name}", [package]) + + +def bd_comment(labels: List[str], comment: str, attr: str = "", value: str = "") -> None: + _bd_command(f"comment {attr} {value} {comment}", labels) diff --git a/buildscripts/util/codeowners_utils.py b/buildscripts/util/codeowners_utils.py index 230a13571b0..069f7f8425c 100644 --- a/buildscripts/util/codeowners_utils.py +++ b/buildscripts/util/codeowners_utils.py @@ -1,22 +1,35 @@ +import fnmatch import os import re -from typing import Dict, List, Optional +from functools import lru_cache +from typing import Dict, List, Optional, Tuple import yaml -def process_owners(owners_file_path: str) -> Dict[re.Pattern, List[str]]: - assert os.path.exists(owners_file_path) +@lru_cache +def process_owners(cur_dir: str) -> Tuple[Dict[re.Pattern, List[str]], bool]: + if not cur_dir: + return ({}, False) + + owners_file_path = cur_dir + "/OWNERS.yml" + if not os.path.exists(owners_file_path): + return process_owners(os.path.dirname(cur_dir)) with open(owners_file_path, "r") as f: - contents = yaml.safe_load(file) + contents = yaml.safe_load(f) assert "version" in contents, f"Version not found in {owners_file_path}" assert contents["version"] == "1.0.0", f"Invalid version in {owners_file_path}" assert "filters" in contents + no_parent_owners = False + if "options" in contents: + options = contents["options"] + no_parent_owners = "no_parent_owners" in options and options["no_parent_owners"] + filters = {} - for file_filter in contents["filter"]: + for file_filter in contents["filters"]: assert "approvers" in file_filter approvers = file_filter["approvers"] del file_filter["approvers"] @@ -24,35 +37,37 @@ def process_owners(owners_file_path: str) -> Dict[re.Pattern, List[str]]: assert len(file_filter) == 1 pattern = next(iter(file_filter)) - regex_pattern = re.compile(pattern) + pattern = f"{cur_dir}/{pattern}" + + regex_pattern = re.compile(fnmatch.translate(pattern)) filters[regex_pattern] = [] for approver in approvers: filters[regex_pattern].append(approver) - return filters + return (filters, no_parent_owners) class Owners: def __init__(self): - self.owners = {} - self.co_jira_map = yaml.safe_load("buildscripts/util/co_jira_map.yml") + self.co_jira_map = yaml.safe_load(open("buildscripts/util/co_jira_map.yml", "r")) - def get_filters_for_dir(self, d: str) -> Dict[re.Pattern, List[str]]: - if d in self.owners: - return self.owners[d] - owners_file_path = d + "/OWNERS.yml" - filters = process_owners(owners_file_path) - self.owners[d] = filters - return filters - - def get_codeowners(self, file_name: str) -> List[str]: - filters = self.get_filters_for_dir(os.path.basename(file_name)) - for regex_filter, codeowners in filters.items(): - if regex_filter.match(file_name): - return codeowners - - return [] + def get_codeowners(self, file_path: str) -> List[str]: + cur_dir = os.path.dirname(file_path) + codeowners = [] + # search up tree until matching filter found + while True: + filters, no_parent = process_owners(cur_dir) + if not cur_dir: + break + # latest applicable filter takes precedence + for regex_filter, cur_codeowners in filters.items(): + if regex_filter.fullmatch(file_path): + codeowners = cur_codeowners + if codeowners or no_parent: + break + cur_dir = os.path.dirname(cur_dir) + return codeowners def get_jira_team_from_codeowner(self, codeowner: str) -> List[str]: return self.co_jira_map[codeowner] @@ -60,6 +75,6 @@ class Owners: def get_jira_team_owner(self, file_path: str) -> List[str]: return [ jira_team - for jira_team in self.get_jira_team_from_codeowner(codeowner) for codeowner in self.get_codeowners(file_path) + for jira_team in self.get_jira_team_from_codeowner(codeowner) ] diff --git a/buildscripts/util/generate_co_jira_map.py b/buildscripts/util/generate_co_jira_map.py new file mode 100644 index 00000000000..333fe48cff8 --- /dev/null +++ b/buildscripts/util/generate_co_jira_map.py @@ -0,0 +1,19 @@ +import glob + +import yaml + +if __name__ == "__main__": + approvers = set() + owners_paths = glob.glob("**/OWNERS.yml", recursive=True) + print(len(owners_paths)) + for path in owners_paths: + with open(path, "r") as owner_file: + contents = yaml.safe_load(owner_file) + if "filters" not in contents: + continue + for file_filter in contents["filters"]: + assert "approvers" in file_filter + approvers.update(set(file_filter["approvers"])) + + f = open("co_jira_map.yml", "w+") + yaml.dump({approver: "jira_team" for approver in approvers}, f) diff --git a/src/mongo/bson/mutable/BUILD.bazel b/src/mongo/bson/mutable/BUILD.bazel index 5f62163f34a..547a53f6502 100644 --- a/src/mongo/bson/mutable/BUILD.bazel +++ b/src/mongo/bson/mutable/BUILD.bazel @@ -28,3 +28,9 @@ mongo_cc_library( "//src/mongo/util:safe_num", ], ) + +# TODO(SERVER-96851): Remove cycle created by moving //src/mongo/bson/mutable:element.h to //src/mongo/bson/mutable:mutable_bson +filegroup( + name = "element_hdrs", + srcs = [":element.h"], +) diff --git a/src/mongo/client/BUILD.bazel b/src/mongo/client/BUILD.bazel index 251d9b4eb61..5d31ade1b11 100644 --- a/src/mongo/client/BUILD.bazel +++ b/src/mongo/client/BUILD.bazel @@ -520,3 +520,9 @@ mongo_cc_library( "native_sasl_client", ], ) + +# TODO(SERVER-96852): Remove cycle created by moving //src/mongo/client:connection_string.h to //src/mongo/client:connection_string +filegroup( + name = "connection_string_hdrs", + srcs = [":connection_string.h"], +) diff --git a/src/mongo/db/BUILD.bazel b/src/mongo/db/BUILD.bazel index 91c058beb6e..d1639ea5e64 100644 --- a/src/mongo/db/BUILD.bazel +++ b/src/mongo/db/BUILD.bazel @@ -3389,3 +3389,105 @@ mongo_cc_binary( "server_base", ], ) + +# TODO(SERVER-96853): Remove cycle created by moving //src/mongo/db:baton.h to //src/mongo/db:service_context +filegroup( + name = "baton_hdrs", + srcs = [":baton.h"], +) + +# TODO(SERVER-96851): Remove cycle created by moving //src/mongo/db:client.h to //src/mongo/db:service_context +filegroup( + name = "client_hdrs", + srcs = [":client.h"], +) + +# TODO(SERVER-96855): Remove cycle created by moving //src/mongo/db:cluster_role.h to //src/mongo/db:server_base +filegroup( + name = "cluster_role_hdrs", + srcs = [":cluster_role.h"], +) + +# TODO(SERVER-96853): Remove cycle created by moving //src/mongo/db:database_name.h to //src/mongo/db:common +filegroup( + name = "database_name_hdrs", + srcs = [":database_name.h"], +) + +# TODO(SERVER-96853): Remove cycle created by moving //src/mongo/db:logical_time.h to //src/mongo/db:server_base +filegroup( + name = "logical_time_hdrs", + srcs = [":logical_time.h"], +) + +# TODO(SERVER-96853): Remove cycle created by moving //src/mongo/db:namespace_string.h to //src/mongo/db:server_base +filegroup( + name = "namespace_string_hdrs", + srcs = [":namespace_string.h"], +) + +# TODO(SERVER-96853): Remove cycle created by moving //src/mongo/db:operation_context.h to //src/mongo/db:service_context +filegroup( + name = "operation_context_hdrs", + srcs = [":operation_context.h"], +) + +# TODO(SERVER-96853): Remove cycle created by moving //src/mongo/db:operation_id.h to //src/mongo/db:service_context +filegroup( + name = "operation_id_hdrs", + srcs = [":operation_id.h"], +) + +# TODO(SERVER-96856): Remove cycle created by moving //src/mongo/db:read_write_concern_provenance.h to //src/mongo/db:server_base +filegroup( + name = "read_write_concern_provenance_hdrs", + srcs = [":read_write_concern_provenance.h"], +) + +# TODO(SERVER-96857): Remove cycle created by moving //src/mongo/db:record_id_helpers.h to //src/mongo/db:record_id_helpers +filegroup( + name = "record_id_helpers_hdrs", + srcs = [":record_id_helpers.h"], +) + +# TODO(SERVER-96858): Remove cycle created by moving //src/mongo/db:server_options.h to //src/mongo/db:server_base +filegroup( + name = "server_options_hdrs", + srcs = [":server_options.h"], +) + +# TODO(SERVER-96858): Remove cycle created by moving //src/mongo/db:server_parameter.h to //src/mongo/db:server_base +filegroup( + name = "server_parameter_hdrs", + srcs = [":server_parameter.h"], +) + +# TODO(SERVER-96858): Remove cycle created by moving //src/mongo/db:server_parameter_with_storage.h to //src/mongo/db:server_base +filegroup( + name = "server_parameter_with_storage_hdrs", + srcs = [":server_parameter_with_storage.h"], +) + +# TODO(SERVER-96853): Remove cycle created by moving //src/mongo/db:service_context.h to //src/mongo/db:service_context +filegroup( + name = "service_context_hdrs", + srcs = [":service_context.h"], +) + +# TODO(SERVER-96853): Remove cycle created by moving //src/mongo/db:tenant_id.h to //src/mongo/db:server_base +filegroup( + name = "tenant_id_hdrs", + srcs = [":tenant_id.h"], +) + +# TODO(SERVER-96856): Remove cycle created by moving //src/mongo/db:write_concern_idl.h to //src/mongo/db:server_base +filegroup( + name = "write_concern_idl_hdrs", + srcs = [":write_concern_idl.h"], +) + +# TODO(SERVER-96856): Remove cycle created by moving //src/mongo/db:write_concern_options.h to //src/mongo/db:server_base +filegroup( + name = "write_concern_options_hdrs", + srcs = [":write_concern_options.h"], +) diff --git a/src/mongo/db/admission/BUILD.bazel b/src/mongo/db/admission/BUILD.bazel index 394da002d56..f7da4c6fbea 100644 --- a/src/mongo/db/admission/BUILD.bazel +++ b/src/mongo/db/admission/BUILD.bazel @@ -125,3 +125,9 @@ mongo_cc_library( "//src/mongo/util/concurrency:admission_context", ], ) + +# TODO(SERVER-96853): Remove cycle created by moving //src/mongo/db/admission:execution_admission_context.h to //src/mongo/db/admission:execution_admission_context +filegroup( + name = "execution_admission_context_hdrs", + srcs = [":execution_admission_context.h"], +) diff --git a/src/mongo/db/auth/BUILD.bazel b/src/mongo/db/auth/BUILD.bazel index df43a1bc348..f978ad8c03d 100644 --- a/src/mongo/db/auth/BUILD.bazel +++ b/src/mongo/db/auth/BUILD.bazel @@ -829,3 +829,45 @@ mongo_cc_library( "//src/mongo/db/repl:oplog_entry", ], ) + +# TODO(SERVER-96858): Remove cycle created by moving //src/mongo/db/auth:action_set.h to //src/mongo/db/auth:authprivilege +filegroup( + name = "action_set_hdrs", + srcs = [":action_set.h"], +) + +# TODO(SERVER-96858): Remove cycle created by moving //src/mongo/db/auth:action_type.h to //src/mongo/db/auth:authprivilege +filegroup( + name = "action_type_hdrs", + srcs = [":action_type.h"], +) + +# TODO(SERVER-96858): Remove cycle created by moving //src/mongo/db/auth:auth_name.h to //src/mongo/db:server_base +filegroup( + name = "auth_name_hdrs", + srcs = [":auth_name.h"], +) + +# TODO(SERVER-96858): Remove cycle created by moving //src/mongo/db/auth:privilege.h to //src/mongo/db/auth:authprivilege +filegroup( + name = "privilege_hdrs", + srcs = [":privilege.h"], +) + +# TODO(SERVER-96858): Remove cycle created by moving //src/mongo/db/auth:resource_pattern.h to //src/mongo/db/auth:authprivilege +filegroup( + name = "resource_pattern_hdrs", + srcs = [":resource_pattern.h"], +) + +# TODO(SERVER-96858): Remove cycle created by moving //src/mongo/db/auth:validated_tenancy_scope.h to //src/mongo/db:server_base +filegroup( + name = "validated_tenancy_scope_hdrs", + srcs = [":validated_tenancy_scope.h"], +) + +# TODO(SERVER-96858): Remove cycle created by moving //src/mongo/db/auth:validated_tenancy_scope_factory.h to //src/mongo/db/auth:security_token_auth +filegroup( + name = "validated_tenancy_scope_factory_hdrs", + srcs = [":validated_tenancy_scope_factory.h"], +) diff --git a/src/mongo/db/concurrency/BUILD.bazel b/src/mongo/db/concurrency/BUILD.bazel index c1aba9e856c..5da601afce1 100644 --- a/src/mongo/db/concurrency/BUILD.bazel +++ b/src/mongo/db/concurrency/BUILD.bazel @@ -82,49 +82,47 @@ mongo_cc_library( "//src/mongo/bson:bson_duration.h", "//src/mongo/bson:bson_time_support.h", "//src/mongo/bson/mutable:api.h", - "//src/mongo/bson/mutable:element.h", - "//src/mongo/client:connection_string.h", + "//src/mongo/bson/mutable:element_hdrs", + "//src/mongo/client:connection_string_hdrs", "//src/mongo/crypto:hash_block.h", - "//src/mongo/crypto:sha256_block.h", "//src/mongo/db:basic_types.h", "//src/mongo/db:basic_types_gen", - "//src/mongo/db:baton.h", - "//src/mongo/db:client.h", - "//src/mongo/db:cluster_role.h", - "//src/mongo/db:database_name.h", + "//src/mongo/db:baton_hdrs", + "//src/mongo/db:client_hdrs", + "//src/mongo/db:cluster_role_hdrs", + "//src/mongo/db:database_name_hdrs", "//src/mongo/db:database_name_reserved.def.h", "//src/mongo/db:jsobj.h", - "//src/mongo/db:logical_time.h", - "//src/mongo/db:namespace_string.h", + "//src/mongo/db:logical_time_hdrs", + "//src/mongo/db:namespace_string_hdrs", "//src/mongo/db:namespace_string_reserved.def.h", - "//src/mongo/db:operation_context.h", - "//src/mongo/db:operation_id.h", - "//src/mongo/db:read_write_concern_provenance.h", + "//src/mongo/db:operation_context_hdrs", + "//src/mongo/db:operation_id_hdrs", "//src/mongo/db:read_write_concern_provenance_base_gen", + "//src/mongo/db:read_write_concern_provenance_hdrs", "//src/mongo/db:record_id.h", - "//src/mongo/db:record_id_helpers.h", - "//src/mongo/db:server_options.h", - "//src/mongo/db:server_parameter.h", - "//src/mongo/db:server_parameter_with_storage.h", - "//src/mongo/db:service_context.h", - "//src/mongo/db:tenant_id.h", + "//src/mongo/db:record_id_helpers_hdrs", + "//src/mongo/db:server_options_hdrs", + "//src/mongo/db:server_parameter_hdrs", + "//src/mongo/db:server_parameter_with_storage_hdrs", + "//src/mongo/db:service_context_hdrs", + "//src/mongo/db:tenant_id_hdrs", "//src/mongo/db:write_concern_gen", - "//src/mongo/db:write_concern_idl.h", - "//src/mongo/db:write_concern_options.h", - "//src/mongo/db/admission:execution_admission_context.h", - "//src/mongo/db/auth:action_set.h", - "//src/mongo/db/auth:action_type.h", + "//src/mongo/db:write_concern_idl_hdrs", + "//src/mongo/db:write_concern_options_hdrs", + "//src/mongo/db/admission:execution_admission_context_hdrs", + "//src/mongo/db/auth:action_set_hdrs", "//src/mongo/db/auth:action_type_gen", - "//src/mongo/db/auth:auth_name.h", - "//src/mongo/db/auth:cluster_auth_mode.h", - "//src/mongo/db/auth:privilege.h", + "//src/mongo/db/auth:action_type_hdrs", + "//src/mongo/db/auth:auth_name_hdrs", + "//src/mongo/db/auth:privilege_hdrs", "//src/mongo/db/auth:resolve_role_option.h", - "//src/mongo/db/auth:resource_pattern.h", + "//src/mongo/db/auth:resource_pattern_hdrs", "//src/mongo/db/auth:restriction_environment.h", "//src/mongo/db/auth:role_name.h", "//src/mongo/db/auth:user_name.h", - "//src/mongo/db/auth:validated_tenancy_scope.h", - "//src/mongo/db/auth:validated_tenancy_scope_factory.h", + "//src/mongo/db/auth:validated_tenancy_scope_factory_hdrs", + "//src/mongo/db/auth:validated_tenancy_scope_hdrs", "//src/mongo/db/catalog:clustered_collection_options_gen", "//src/mongo/db/concurrency:cond_var_lock_grant_notification.h", "//src/mongo/db/concurrency:fast_map_noalloc.h", @@ -133,48 +131,47 @@ mongo_cc_library( "//src/mongo/db/concurrency:lock_stats.h", "//src/mongo/db/concurrency:locker.h", "//src/mongo/db/exec:collection_scan_common.h", - "//src/mongo/db/exec/document_value:document.h", + "//src/mongo/db/exec/document_value:document_hdrs", "//src/mongo/db/exec/document_value:document_internal.h", - "//src/mongo/db/exec/document_value:document_metadata_fields.h", - "//src/mongo/db/exec/document_value:value.h", + "//src/mongo/db/exec/document_value:document_metadata_fields_hdrs", + "//src/mongo/db/exec/document_value:value_hdrs", "//src/mongo/db/exec/document_value:value_internal.h", "//src/mongo/db/index_builds:index_builds.h", "//src/mongo/db/index_builds:resumable_index_builds_gen", - "//src/mongo/db/pipeline:field_path.h", - "//src/mongo/db/query:explain_options.h", + "//src/mongo/db/pipeline:field_path_hdrs", + "//src/mongo/db/query:explain_options_hdrs", "//src/mongo/db/query:explain_verbosity_gen", "//src/mongo/db/query:record_id_bound.h", "//src/mongo/db/query/collation:collation_spec.h", - "//src/mongo/db/query/collation:collator_interface.h", - "//src/mongo/db/query/datetime:date_time_support.h", - "//src/mongo/db/query/query_shape:serialization_options.h", - "//src/mongo/db/repl:optime.h", + "//src/mongo/db/query/collation:collator_interface_hdrs", + "//src/mongo/db/query/datetime:date_time_support_hdrs", + "//src/mongo/db/query/query_shape:serialization_options_hdrs", + "//src/mongo/db/repl:optime_hdrs", "//src/mongo/db/repl:read_concern_gen", - "//src/mongo/db/repl:read_concern_idl.h", + "//src/mongo/db/repl:read_concern_idl_hdrs", "//src/mongo/db/repl:read_concern_level.h", - "//src/mongo/db/session:logical_session_id.h", "//src/mongo/db/session:logical_session_id_gen", - "//src/mongo/db/session:logical_session_id_helpers.h", + "//src/mongo/db/session:logical_session_id_hdrs", + "//src/mongo/db/session:logical_session_id_helpers_hdrs", "//src/mongo/db/sorter:sorter_gen", "//src/mongo/db/storage:compact_options.h", - "//src/mongo/db/storage:ident.h", "//src/mongo/db/storage:key_format.h", "//src/mongo/db/storage:record_data.h", - "//src/mongo/db/storage:record_store.h", - "//src/mongo/db/storage:recovery_unit.h", + "//src/mongo/db/storage:record_store_hdrs", + "//src/mongo/db/storage:recovery_unit_hdrs", "//src/mongo/db/storage:snapshot.h", "//src/mongo/db/storage:storage_engine.h", "//src/mongo/db/storage:storage_stats.h", "//src/mongo/db/storage:temporary_record_store.h", - "//src/mongo/db/storage:write_unit_of_work.h", - "//src/mongo/db/storage/key_string:key_string.h", - "//src/mongo/idl:command_generic_argument.h", - "//src/mongo/idl:idl_parser.h", + "//src/mongo/db/storage:write_unit_of_work_hdrs", + "//src/mongo/db/storage/key_string:key_string_hdrs", + "//src/mongo/idl:command_generic_argument_hdrs", + "//src/mongo/idl:idl_parser_hdrs", "//src/mongo/platform:atomic_proxy.h", "//src/mongo/platform:visibility.h", - "//src/mongo/rpc:message.h", - "//src/mongo/rpc:op_msg.h", - "//src/mongo/transport:session.h", + "//src/mongo/rpc:message_hdrs", + "//src/mongo/rpc:op_msg_hdrs", + "//src/mongo/transport:session_hdrs", "//src/mongo/transport:session_id.h", "//src/mongo/util:headers", "//src/mongo/util/concurrency:headers", @@ -183,8 +180,10 @@ mongo_cc_library( ], deps = [ "//src/mongo:base", + "//src/mongo/crypto:sha256_block", "//src/mongo/db/stats:counter_ops", "//src/mongo/db/storage:damage_vector", + "//src/mongo/db/storage:ident", "//src/mongo/util:secure_compare_memory", ], ) diff --git a/src/mongo/db/exec/document_value/BUILD.bazel b/src/mongo/db/exec/document_value/BUILD.bazel index fd268aafdef..c922b4048bc 100644 --- a/src/mongo/db/exec/document_value/BUILD.bazel +++ b/src/mongo/db/exec/document_value/BUILD.bazel @@ -31,3 +31,21 @@ mongo_cc_library( "//src/mongo/db/query/datetime:date_time_support", # TODO(SERVER-93876): Remove. ], ) + +# TODO(SERVER-96859): Remove cycle created by moving //src/mongo/db/exec/document_value:document.h to //src/mongo/db/exec/document_value:document_value +filegroup( + name = "document_hdrs", + srcs = [":document.h"], +) + +# TODO(SERVER-96859): Remove cycle created by moving //src/mongo/db/exec/document_value:document_metadata_fields.h to //src/mongo/db/exec/document_value:document_value +filegroup( + name = "document_metadata_fields_hdrs", + srcs = [":document_metadata_fields.h"], +) + +# TODO(SERVER-96859): Remove cycle created by moving //src/mongo/db/exec/document_value:value.h to //src/mongo/db/exec/document_value:document_value +filegroup( + name = "value_hdrs", + srcs = [":value.h"], +) diff --git a/src/mongo/db/pipeline/BUILD.bazel b/src/mongo/db/pipeline/BUILD.bazel index b5c18aa8071..f207995877a 100644 --- a/src/mongo/db/pipeline/BUILD.bazel +++ b/src/mongo/db/pipeline/BUILD.bazel @@ -1197,3 +1197,9 @@ mongo_cc_library( "//src/mongo/util:periodic_runner", ], ) + +# TODO(SERVER-96860): Remove cycle created by moving //src/mongo/db/pipeline:field_path.h to //src/mongo/db/pipeline:field_path +filegroup( + name = "field_path_hdrs", + srcs = [":field_path.h"], +) diff --git a/src/mongo/db/query/BUILD.bazel b/src/mongo/db/query/BUILD.bazel index d71b0eed637..1e5563027e8 100644 --- a/src/mongo/db/query/BUILD.bazel +++ b/src/mongo/db/query/BUILD.bazel @@ -615,3 +615,9 @@ mongo_cc_library( "//src/mongo/db:server_base", ], ) + +# TODO(SERVER-96860): Remove cycle created by moving //src/mongo/db/query:explain_options.h to //src/mongo/db/query:common_query_enums_and_helpers +filegroup( + name = "explain_options_hdrs", + srcs = [":explain_options.h"], +) diff --git a/src/mongo/db/query/collation/BUILD.bazel b/src/mongo/db/query/collation/BUILD.bazel index a4c758feb0e..5399ab94299 100644 --- a/src/mongo/db/query/collation/BUILD.bazel +++ b/src/mongo/db/query/collation/BUILD.bazel @@ -97,3 +97,9 @@ mongo_cc_library( ":collator_icu", ], ) + +# TODO(SERVER-96859): Remove cycle created by moving //src/mongo/db/query/collation:collator_interface.h to //src/mongo/db/query/collation:collator_interface +filegroup( + name = "collator_interface_hdrs", + srcs = [":collator_interface.h"], +) diff --git a/src/mongo/db/query/datetime/BUILD.bazel b/src/mongo/db/query/datetime/BUILD.bazel index df7dae8e6ec..04a44cd4cb9 100644 --- a/src/mongo/db/query/datetime/BUILD.bazel +++ b/src/mongo/db/query/datetime/BUILD.bazel @@ -34,3 +34,9 @@ mongo_cc_library( "//src/third_party/timelib", ], ) + +# TODO(SERVER-96859): Remove cycle created by moving //src/mongo/db/query/datetime:date_time_support.h to //src/mongo/db/query/datetime:date_time_support +filegroup( + name = "date_time_support_hdrs", + srcs = [":date_time_support.h"], +) diff --git a/src/mongo/db/query/query_shape/BUILD.bazel b/src/mongo/db/query/query_shape/BUILD.bazel index 8265e221c77..48cc709eed3 100644 --- a/src/mongo/db/query/query_shape/BUILD.bazel +++ b/src/mongo/db/query/query_shape/BUILD.bazel @@ -86,3 +86,9 @@ mongo_cc_library( "//src/mongo/crypto:sha256_block", ], ) + +# TODO(SERVER-96861): Remove cycle created by moving //src/mongo/db/query/query_shape:serialization_options.h to //src/mongo/db/query/query_shape:query_shape_common +filegroup( + name = "serialization_options_hdrs", + srcs = [":serialization_options.h"], +) diff --git a/src/mongo/db/repl/BUILD.bazel b/src/mongo/db/repl/BUILD.bazel index 78d745f8a0e..a8312d3032d 100644 --- a/src/mongo/db/repl/BUILD.bazel +++ b/src/mongo/db/repl/BUILD.bazel @@ -2211,3 +2211,15 @@ mongo_cc_library( "//src/mongo/util:fail_point", ], ) + +# TODO(SERVER-96856): Remove cycle created by moving //src/mongo/db/repl:optime.h to //src/mongo/db/repl:optime +filegroup( + name = "optime_hdrs", + srcs = [":optime.h"], +) + +# TODO(SERVER-96856): Remove cycle created by moving //src/mongo/db/repl:read_concern_idl.h to //src/mongo/db:server_base +filegroup( + name = "read_concern_idl_hdrs", + srcs = [":read_concern_idl.h"], +) diff --git a/src/mongo/db/session/BUILD.bazel b/src/mongo/db/session/BUILD.bazel index df59adc7256..55a05805542 100644 --- a/src/mongo/db/session/BUILD.bazel +++ b/src/mongo/db/session/BUILD.bazel @@ -321,3 +321,15 @@ mongo_cc_library( "//src/mongo/db/transaction", ], ) + +# TODO(SERVER-96853): Remove cycle created by moving //src/mongo/db/session:logical_session_id.h to //src/mongo/db/session:logical_session_id +filegroup( + name = "logical_session_id_hdrs", + srcs = [":logical_session_id.h"], +) + +# TODO(SERVER-96853): Remove cycle created by moving //src/mongo/db/session:logical_session_id_helpers.h to //src/mongo/db/session:logical_session_id_helpers +filegroup( + name = "logical_session_id_helpers_hdrs", + srcs = [":logical_session_id_helpers.h"], +) diff --git a/src/mongo/db/storage/BUILD.bazel b/src/mongo/db/storage/BUILD.bazel index e46344e235e..445947a0a9e 100644 --- a/src/mongo/db/storage/BUILD.bazel +++ b/src/mongo/db/storage/BUILD.bazel @@ -682,3 +682,21 @@ mongo_cc_library( "//src/mongo:base", ], ) + +# TODO(SERVER-96857): Remove cycle created by moving //src/mongo/db/storage:record_store.h to //src/mongo/db/storage:record_store_base +filegroup( + name = "record_store_hdrs", + srcs = [":record_store.h"], +) + +# TODO(SERVER-96857): Remove cycle created by moving //src/mongo/db/storage:recovery_unit.h to //src/mongo/db/storage:recovery_unit_base +filegroup( + name = "recovery_unit_hdrs", + srcs = [":recovery_unit.h"], +) + +# TODO(SERVER-96857): Remove cycle created by moving //src/mongo/db/storage:write_unit_of_work.h to //src/mongo/db/storage:write_unit_of_work +filegroup( + name = "write_unit_of_work_hdrs", + srcs = [":write_unit_of_work.h"], +) diff --git a/src/mongo/db/storage/key_string/BUILD.bazel b/src/mongo/db/storage/key_string/BUILD.bazel index 28108471858..cb9ac034dfc 100644 --- a/src/mongo/db/storage/key_string/BUILD.bazel +++ b/src/mongo/db/storage/key_string/BUILD.bazel @@ -22,3 +22,9 @@ mongo_cc_library( "//src/mongo/bson:bson_validate", ], ) + +# TODO(SERVER-96862): Remove cycle created by moving //src/mongo/db/storage/key_string:key_string.h to //src/mongo/db/storage/key_string:key_string +filegroup( + name = "key_string_hdrs", + srcs = [":key_string.h"], +) diff --git a/src/mongo/idl/BUILD.bazel b/src/mongo/idl/BUILD.bazel index 1a4397b0bb7..7e10690d607 100644 --- a/src/mongo/idl/BUILD.bazel +++ b/src/mongo/idl/BUILD.bazel @@ -240,3 +240,15 @@ mongo_cc_library( "//src/mongo/s:grid", ], ) + +# TODO(SERVER-96851): Remove cycle created by moving //src/mongo/idl:command_generic_argument.h to //src/mongo/db:server_base +filegroup( + name = "command_generic_argument_hdrs", + srcs = [":command_generic_argument.h"], +) + +# TODO(SERVER-96851): Remove cycle created by moving //src/mongo/idl:idl_parser.h to //src/mongo/idl:idl_parser +filegroup( + name = "idl_parser_hdrs", + srcs = [":idl_parser.h"], +) diff --git a/src/mongo/rpc/BUILD.bazel b/src/mongo/rpc/BUILD.bazel index f4acf6fe91e..0d3b47ba271 100644 --- a/src/mongo/rpc/BUILD.bazel +++ b/src/mongo/rpc/BUILD.bazel @@ -202,3 +202,15 @@ mongo_cc_library( "//src/mongo/db:server_base", ], ) + +# TODO(SERVER-96852): Remove cycle created by moving //src/mongo/rpc:message.h to //src/mongo/rpc:message +filegroup( + name = "message_hdrs", + srcs = [":message.h"], +) + +# TODO(SERVER-96852): Remove cycle created by moving //src/mongo/rpc:op_msg.h to //src/mongo/rpc:message +filegroup( + name = "op_msg_hdrs", + srcs = [":op_msg.h"], +) diff --git a/src/mongo/transport/BUILD.bazel b/src/mongo/transport/BUILD.bazel index 280ee3f634d..db856d45597 100644 --- a/src/mongo/transport/BUILD.bazel +++ b/src/mongo/transport/BUILD.bazel @@ -263,3 +263,9 @@ mongo_cc_library( "//src/mongo/util/net:ssl_manager", ], ) + +# TODO(SERVER-96852): Remove cycle created by moving //src/mongo/transport:session.h to //src/mongo/transport:transport_layer_common +filegroup( + name = "session_hdrs", + srcs = [":session.h"], +)