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