From 802e1032cf4ab5865ca6b04f9ffcef4fe5ae0da5 Mon Sep 17 00:00:00 2001 From: Lucian Wischik Date: Thu, 13 Feb 2020 17:12:03 -0800 Subject: [PATCH] bubble ctx for decls 2/4 Summary: I'm just putting ctx further up the callstack. This diff pushes it as far as decl_redecl Reviewed By: arxanas Differential Revision: D19825851 fbshipit-source-id: 9757d69b99b82d4f537d25e393cbc542b4331e24 --- hphp/hack/src/decl/decl_redecl_service.ml | 11 +++++---- hphp/hack/src/decl/shallow_decl_compare.ml | 8 ++++--- hphp/hack/src/decl/shallow_decl_compare.mli | 1 + hphp/hack/src/providers/decl_provider.ml | 4 ++-- .../hack/src/providers/shallow_classes_provider.ml | 26 +++++++++------------- .../src/providers/shallow_classes_provider.mli | 14 ++++++------ 6 files changed, 33 insertions(+), 31 deletions(-) diff --git a/hphp/hack/src/decl/decl_redecl_service.ml b/hphp/hack/src/decl/decl_redecl_service.ml index fd7b25dce4c..ce80a23e6c9 100644 --- a/hphp/hack/src/decl/decl_redecl_service.ml +++ b/hphp/hack/src/decl/decl_redecl_service.ml @@ -262,10 +262,11 @@ let oldify_defs { FileInfo.n_funs; n_classes; n_record_defs; n_types; n_consts } elems ~collect_garbage = + let ctx = Provider_context.get_global_context_or_empty_FOR_MIGRATION () in Decl_heap.Funs.oldify_batch n_funs; Decl_class_elements.oldify_all elems; Decl_heap.Classes.oldify_batch n_classes; - Shallow_classes_provider.oldify_batch n_classes; + Shallow_classes_provider.oldify_batch ctx n_classes; Decl_heap.RecordDefs.oldify_batch n_record_defs; Decl_heap.Typedefs.oldify_batch n_types; Decl_heap.GConsts.oldify_batch n_consts; @@ -274,10 +275,11 @@ let oldify_defs let remove_old_defs { FileInfo.n_funs; n_classes; n_record_defs; n_types; n_consts } elems = + let ctx = Provider_context.get_global_context_or_empty_FOR_MIGRATION () in Decl_heap.Funs.remove_old_batch n_funs; Decl_class_elements.remove_old_all elems; Decl_heap.Classes.remove_old_batch n_classes; - Shallow_classes_provider.remove_old_batch n_classes; + Shallow_classes_provider.remove_old_batch ctx n_classes; Decl_heap.RecordDefs.remove_old_batch n_record_defs; Decl_heap.Typedefs.remove_old_batch n_types; Decl_heap.GConsts.remove_old_batch n_consts; @@ -288,10 +290,11 @@ let remove_defs { FileInfo.n_funs; n_classes; n_record_defs; n_types; n_consts } elems ~collect_garbage = + let ctx = Provider_context.get_global_context_or_empty_FOR_MIGRATION () in Decl_heap.Funs.remove_batch n_funs; Decl_class_elements.remove_all elems; Decl_heap.Classes.remove_batch n_classes; - Shallow_classes_provider.remove_batch n_classes; + Shallow_classes_provider.remove_batch ctx n_classes; Decl_linearize.remove_batch n_classes; Decl_heap.RecordDefs.remove_batch n_record_defs; Decl_heap.Typedefs.remove_batch n_types; @@ -438,7 +441,7 @@ let redo_type_decl let (changed, to_recheck) = if shallow_decl_enabled () then ( let AffectedDeps.{ changed = changed'; mro_invalidated; needs_recheck } = - Shallow_decl_compare.compute_class_fanout get_classes fnl + Shallow_decl_compare.compute_class_fanout ctx get_classes fnl in let changed = DepSet.union changed changed' in let to_recheck = DepSet.union to_recheck needs_recheck in diff --git a/hphp/hack/src/decl/shallow_decl_compare.ml b/hphp/hack/src/decl/shallow_decl_compare.ml index 0cfca570197..23d6420be0c 100644 --- a/hphp/hack/src/decl/shallow_decl_compare.ml +++ b/hphp/hack/src/decl/shallow_decl_compare.ml @@ -27,6 +27,7 @@ let diff_class_in_changed_file Major_change let compute_class_diffs + (ctx : Provider_context.t) ~(get_classes_in_file : Relative_path.t -> SSet.t) (changed_files : Relative_path.t list) : (string * ClassDiff.t) list = let possibly_changed_classes = @@ -34,10 +35,10 @@ let compute_class_diffs SSet.union classes (get_classes_in_file filename)) in let old_classes = - Shallow_classes_provider.get_old_batch possibly_changed_classes + Shallow_classes_provider.get_old_batch ctx possibly_changed_classes in let new_classes = - Shallow_classes_provider.get_batch possibly_changed_classes + Shallow_classes_provider.get_batch ctx possibly_changed_classes in SSet.fold possibly_changed_classes ~init:[] ~f:(fun cid acc -> let diff = diff_class_in_changed_file old_classes new_classes cid in @@ -48,12 +49,13 @@ let compute_class_diffs (cid, diff) :: acc) let compute_class_fanout + (ctx : Provider_context.t) ~(get_classes_in_file : Relative_path.t -> SSet.t) (changed_files : Relative_path.t list) : AffectedDeps.t = let file_count = List.length changed_files in Hh_logger.log "Detecting changes to classes in %d files:" file_count; - let changes = compute_class_diffs ~get_classes_in_file changed_files in + let changes = compute_class_diffs ctx ~get_classes_in_file changed_files in let change_count = List.length changes in if List.is_empty changes then Hh_logger.log "No class changes detected" diff --git a/hphp/hack/src/decl/shallow_decl_compare.mli b/hphp/hack/src/decl/shallow_decl_compare.mli index 6349bbe3daa..8511c02fe1a 100644 --- a/hphp/hack/src/decl/shallow_decl_compare.mli +++ b/hphp/hack/src/decl/shallow_decl_compare.mli @@ -8,6 +8,7 @@ *) val compute_class_fanout : + Provider_context.t -> get_classes_in_file:(Relative_path.t -> SSet.t) -> Relative_path.t list -> AffectedDeps.t diff --git a/hphp/hack/src/providers/decl_provider.ml b/hphp/hack/src/providers/decl_provider.ml index 4b439e03baf..2880e83e84a 100644 --- a/hphp/hack/src/providers/decl_provider.ml +++ b/hphp/hack/src/providers/decl_provider.ml @@ -282,7 +282,7 @@ let local_changes_push_stack (ctx : Provider_context.t) = Decl_heap.Typedefs.LocalChanges.push_stack (); Decl_heap.GConsts.LocalChanges.push_stack (); - Shallow_classes_provider.push_local_changes (); + Shallow_classes_provider.push_local_changes ctx; Decl_linearize.push_local_changes (); invalidate_context_decls ~ctx @@ -300,7 +300,7 @@ let local_changes_pop_stack (ctx : Provider_context.t) = Decl_heap.Typedefs.LocalChanges.pop_stack (); Decl_heap.GConsts.LocalChanges.pop_stack (); - Shallow_classes_provider.pop_local_changes (); + Shallow_classes_provider.pop_local_changes ctx; Decl_linearize.pop_local_changes (); invalidate_context_decls ~ctx diff --git a/hphp/hack/src/providers/shallow_classes_provider.ml b/hphp/hack/src/providers/shallow_classes_provider.ml index a67d3bda757..0a4bb1957ed 100644 --- a/hphp/hack/src/providers/shallow_classes_provider.ml +++ b/hphp/hack/src/providers/shallow_classes_provider.ml @@ -55,8 +55,8 @@ let get (ctx : Provider_context.t) (name : string) : shallow_class option = | Provider_backend.Decl_service _ -> failwith "shallow class cache lookup not implemented for Decl_service" -let get_batch (names : SSet.t) : shallow_class option SMap.t = - let ctx = Provider_context.get_global_context_or_empty_FOR_MIGRATION () in +let get_batch (ctx : Provider_context.t) (names : SSet.t) : + shallow_class option SMap.t = match ctx.Provider_context.backend with | Provider_backend.Shared_memory -> Shallow_classes_heap.get_batch names | Provider_backend.Local_memory _ -> @@ -64,8 +64,8 @@ let get_batch (names : SSet.t) : shallow_class option SMap.t = | Provider_backend.Decl_service _ -> failwith "get_batch not implemented for Decl_service" -let get_old_batch (names : SSet.t) : shallow_class option SMap.t = - let ctx = Provider_context.get_global_context_or_empty_FOR_MIGRATION () in +let get_old_batch (ctx : Provider_context.t) (names : SSet.t) : + shallow_class option SMap.t = match ctx.Provider_context.backend with | Provider_backend.Shared_memory -> Shallow_classes_heap.get_old_batch names | Provider_backend.Local_memory _ -> @@ -73,8 +73,7 @@ let get_old_batch (names : SSet.t) : shallow_class option SMap.t = | Provider_backend.Decl_service _ -> failwith "get_old_batch not implemented for Decl_service" -let oldify_batch (names : SSet.t) : unit = - let ctx = Provider_context.get_global_context_or_empty_FOR_MIGRATION () in +let oldify_batch (ctx : Provider_context.t) (names : SSet.t) : unit = match ctx.Provider_context.backend with | Provider_backend.Shared_memory -> Shallow_classes_heap.oldify_batch names | Provider_backend.Local_memory _ -> @@ -82,8 +81,7 @@ let oldify_batch (names : SSet.t) : unit = | Provider_backend.Decl_service _ -> failwith "oldify_batch not implemented for Decl_service" -let remove_old_batch (names : SSet.t) : unit = - let ctx = Provider_context.get_global_context_or_empty_FOR_MIGRATION () in +let remove_old_batch (ctx : Provider_context.t) (names : SSet.t) : unit = match ctx.Provider_context.backend with | Provider_backend.Shared_memory -> Shallow_classes_heap.remove_old_batch names @@ -92,8 +90,7 @@ let remove_old_batch (names : SSet.t) : unit = | Provider_backend.Decl_service _ -> failwith "remove_old_batch not implemented for Decl_service" -let remove_batch (names : SSet.t) : unit = - let ctx = Provider_context.get_global_context_or_empty_FOR_MIGRATION () in +let remove_batch (ctx : Provider_context.t) (names : SSet.t) : unit = match ctx.Provider_context.backend with | Provider_backend.Shared_memory -> Shallow_classes_heap.remove_batch names | Provider_backend.Local_memory _ -> @@ -103,7 +100,8 @@ let remove_batch (names : SSet.t) : unit = let invalidate_class (ctx : Provider_context.t) (class_name : string) : unit = match ctx.Provider_context.backend with - | Provider_backend.Shared_memory -> remove_batch (SSet.singleton class_name) + | Provider_backend.Shared_memory -> + remove_batch ctx (SSet.singleton class_name) | Provider_backend.Local_memory { decl_cache = _; shallow_decl_cache } -> Provider_backend.Shallow_decl_cache.remove shallow_decl_cache @@ -121,16 +119,14 @@ let invalidate_context_decls ~(ctx : Provider_context.t) : unit = List.iter classes ~f:(fun (_, class_name) -> invalidate_class ctx class_name)) -let push_local_changes () : unit = - let ctx = Provider_context.get_global_context_or_empty_FOR_MIGRATION () in +let push_local_changes (ctx : Provider_context.t) : unit = match ctx.Provider_context.backend with | Provider_backend.Shared_memory -> Shallow_classes_heap.push_local_changes () | Provider_backend.Local_memory _ -> invalidate_context_decls ctx | Provider_backend.Decl_service _ -> failwith "push_local_changes not implemented for Decl_service" -let pop_local_changes () : unit = - let ctx = Provider_context.get_global_context_or_empty_FOR_MIGRATION () in +let pop_local_changes (ctx : Provider_context.t) : unit = match ctx.Provider_context.backend with | Provider_backend.Shared_memory -> Shallow_classes_heap.pop_local_changes () | Provider_backend.Local_memory _ -> invalidate_context_decls ctx diff --git a/hphp/hack/src/providers/shallow_classes_provider.mli b/hphp/hack/src/providers/shallow_classes_provider.mli index f1ac18da3c9..36862c69310 100644 --- a/hphp/hack/src/providers/shallow_classes_provider.mli +++ b/hphp/hack/src/providers/shallow_classes_provider.mli @@ -22,18 +22,18 @@ val get : Provider_context.t -> string -> shallow_class option Raises [Failure] if [shallow_class_decl] is not enabled. *) val decl : Provider_context.t -> use_cache:bool -> Nast.class_ -> shallow_class -val get_batch : SSet.t -> shallow_class option SMap.t +val get_batch : Provider_context.t -> SSet.t -> shallow_class option SMap.t -val get_old_batch : SSet.t -> shallow_class option SMap.t +val get_old_batch : Provider_context.t -> SSet.t -> shallow_class option SMap.t -val oldify_batch : SSet.t -> unit +val oldify_batch : Provider_context.t -> SSet.t -> unit -val remove_old_batch : SSet.t -> unit +val remove_old_batch : Provider_context.t -> SSet.t -> unit -val remove_batch : SSet.t -> unit +val remove_batch : Provider_context.t -> SSet.t -> unit -val push_local_changes : unit -> unit +val push_local_changes : Provider_context.t -> unit -val pop_local_changes : unit -> unit +val pop_local_changes : Provider_context.t -> unit val invalidate_class : Provider_context.t -> string -> unit -- 2.11.4.GIT