/*++ Copyright (c) 1998 Microsoft Corporation Module Name: partctrl.h Abstract: SIS Groveler partition controller headers Authors: John Douceur, 1998 Environment: User Mode Revision History: --*/ #ifndef _INC_PARTCTRL #define _INC_PARTCTRL class PartitionController { public: PartitionController( Groveler *groveler, GrovelStatus groveler_status, int target_entries_per_extraction, int max_extraction_interval, int base_grovel_interval, int max_grovel_interval, int low_confidence_grovel_interval, int low_disk_space_grovel_interval, int partition_info_update_interval, int base_restart_extraction_interval, int max_restart_extraction_interval, int base_restart_groveling_interval, int max_restart_groveling_interval, int base_regrovel_interval, int max_regrovel_interval, int volscan_regrovel_threshold, int partition_balance_time_constant, int read_time_increase_history_size, int read_time_decrease_history_size, int file_size_history_size, bool error_retry_log_extraction, bool error_retry_groveling, __int64 base_usn_log_size, __int64 max_usn_log_size, int sample_group_size, double acceptance_p_value, double rejection_p_value, double base_use_multiplier, double max_use_multiplier, double peak_finder_accuracy, double peak_finder_range, double base_cpu_load_threshold, double max_cpu_load_threshold, double *hash_match_ratio, double *compare_match_ratio, double *dequeue_hash_ratio, double *hash_read_time_estimate, double *compare_read_time_estimate, double *mean_file_size, double *read_time_confidence, int *volume_serial_number, int partition_index, double read_report_discard_threshold, int min_file_size, int min_file_age, bool allow_compressed_files, bool allow_encrypted_files, bool allow_hidden_files, bool allow_offline_files, bool allow_temporary_files, int num_excluded_paths, const _TCHAR **excluded_paths); ~PartitionController(); bool control_operation( DWORD grovel_duration, DWORD *count_of_files_hashed, DWORDLONG *bytes_of_files_hashed, DWORD *count_of_files_matching, DWORDLONG *bytes_of_files_matching, DWORD *count_of_files_compared, DWORDLONG *bytes_of_files_compared, DWORD *count_of_files_merged, DWORDLONG *bytes_of_files_merged, DWORD *count_of_files_enqueued, DWORD *count_of_files_dequeued, double cpu_load); void advance( int time_delta); double priority() const; int wait() const; void demarcate_foreground_batch(); void command_full_volume_scan(); private: enum ReadType { RT_hash, RT_compare }; static void control_extraction( void *context); static void restart_extraction( void *context); static void restart_groveling( void *context); static void update_partition_info( void *context); void initialize_groveling( GrovelStatus groveler_status); bool control_groveling( DWORD grovel_duration, DWORD *count_of_files_hashed, DWORDLONG *bytes_of_files_hashed, DWORD *count_of_files_matching, DWORDLONG *bytes_of_files_matching, DWORD *count_of_files_compared, DWORDLONG *bytes_of_files_compared, DWORD *count_of_files_merged, DWORDLONG *bytes_of_files_merged, DWORD *count_of_files_enqueued, DWORD *count_of_files_dequeued, double cpu_load); bool control_volume_scan( int scan_duration, DWORD *count_of_files_enqueued); void update_peak_finder( ReadType read_type, DWORD read_time, DWORD read_ops); void calculate_effective_max_grovel_interval(); Groveler *groveler; int partition_index; IncidentFilter file_size_filter; ConfidenceEstimator read_time_confidence_estimator; DecayingAccumulator partition_grovel_accumulator; MeanComparator read_mean_comparator; PeakFinder *read_peak_finder[2]; DirectedIncidentFilter *read_time_filter[2]; double *read_time_estimate[2]; bool initiate_full_volume_scan; bool performing_full_volume_scan; int target_entries_per_extraction; int max_extraction_interval; int extraction_interval; __int64 base_usn_log_size; __int64 max_usn_log_size; __int64 current_usn_log_size; int max_grovel_interval; int base_grovel_interval; int effective_max_grovel_interval; int grovel_interval; int remaining_grovel_interval; bool ok_to_record_measurement; int next_untrusted_measurement_time; int untrusted_measurement_interval; double log_max_grovel_interval; double log_low_confidence_slope; double low_disk_space_slope; double base_use_multiplier; double use_multiplier_slope; double base_cpu_load_threshold; double cpu_load_threshold_slope; bool error_retry_log_extraction; bool error_retry_groveling; bool restart_extraction_required; int base_restart_extraction_interval; int max_restart_extraction_interval; int base_restart_groveling_interval; int max_restart_groveling_interval; int restart_extraction_interval; int remaining_restart_extraction_interval; int restart_groveling_interval; double peak_finder_accuracy; int volscan_regrovel_threshold; int partition_info_update_interval; bool restart_volume_scan; bool first_extraction; bool log_extractor_dead; bool groveler_dead; bool extended_restart_in_progress; double volume_total_bytes; double volume_free_bytes; double *hash_match_ratio; double *compare_match_ratio; double *dequeue_hash_ratio; double *mean_file_size; double *read_time_confidence; double free_space_ratio; int *volume_serial_number; int base_regrovel_interval; int max_regrovel_interval; double read_report_discard_threshold; int min_file_size; int min_file_age; bool allow_compressed_files; bool allow_encrypted_files; bool allow_hidden_files; bool allow_offline_files; bool allow_temporary_files; int num_excluded_paths; const _TCHAR **excluded_paths; }; #endif /* _INC_PARTCTRL */