Summary: Store model summaries in the `model_specs` database table instead of in spec files. This table is populated when a new database is created by loading a dump of the `specs` table in the models database. This avoids the perf and reliability implications of ATTACHing the same, non-read-only models-DB by many processes. - `BiabductionModels` is moved into `IR` so that `JsonReports` can access it. - The binary `sqlite3` is now required on the host compiling infer. Reviewed By: skcho Differential Revision: D23191601 fbshipit-source-id: 1532481eemaster
							parent
							
								
									cb2243741c
								
							
						
					
					
						commit
						1db53f43b5
					
				| @ -0,0 +1,25 @@ | ||||
| (* | ||||
|  * Copyright (c) Facebook, Inc. and its affiliates. | ||||
|  * | ||||
|  * This source code is licensed under the MIT license found in the | ||||
|  * LICENSE file in the root directory of this source tree. | ||||
|  *) | ||||
| 
 | ||||
| open! IStd | ||||
| 
 | ||||
| let scan_model_proc_names () = | ||||
|   let db = ResultsDatabase.get_database () in | ||||
|   Sqlite3.prepare db "SELECT proc_uid FROM model_specs" | ||||
|   |> SqliteUtils.result_fold_single_column_rows db ~log:"scan model procnames" | ||||
|        ~init:String.Set.empty ~f:(fun acc proc_uid_sqlite -> | ||||
|          let[@warning "-8"] (Sqlite3.Data.TEXT proc_uid) = proc_uid_sqlite in | ||||
|          String.Set.add acc proc_uid ) | ||||
| 
 | ||||
| 
 | ||||
| let models_index = | ||||
|   lazy (if Config.biabduction_models_mode then String.Set.empty else scan_model_proc_names ()) | ||||
| 
 | ||||
| 
 | ||||
| let mem proc_name = | ||||
|   let proc_uid = Procname.to_unique_id proc_name in | ||||
|   String.Set.mem (Lazy.force models_index) proc_uid | ||||
| @ -1,34 +0,0 @@ | ||||
| (* | ||||
|  * Copyright (c) Facebook, Inc. and its affiliates. | ||||
|  * | ||||
|  * This source code is licensed under the MIT license found in the | ||||
|  * LICENSE file in the root directory of this source tree. | ||||
|  *) | ||||
| 
 | ||||
| open! IStd | ||||
| 
 | ||||
| let scan_models () = | ||||
|   let rec next_entry index dir = | ||||
|     match Unix.readdir_opt dir with | ||||
|     | None -> | ||||
|         Unix.closedir dir ; | ||||
|         index | ||||
|     | Some entry -> ( | ||||
|       match String.chop_suffix entry ~suffix:Config.specs_files_suffix with | ||||
|       | Some file_proc_name -> | ||||
|           next_entry (String.Set.add index file_proc_name) dir | ||||
|       | None -> | ||||
|           next_entry index dir ) | ||||
|   in | ||||
|   match Unix.opendir Config.biabduction_models_dir with | ||||
|   | dir -> | ||||
|       next_entry String.Set.empty dir | ||||
|   | exception Unix.Unix_error ((ENOTDIR | ENOENT), _, _) -> | ||||
|       String.Set.empty | ||||
| 
 | ||||
| 
 | ||||
| let models_index = | ||||
|   lazy (if not Config.biabduction_models_mode then scan_models () else String.Set.empty) | ||||
| 
 | ||||
| 
 | ||||
| let mem proc_name = String.Set.mem (Lazy.force models_index) (Procname.to_filename proc_name) | ||||
					Loading…
					
					
				
		Reference in new issue