static void lmgr_cfg_write_default(FILE *output) { print_begin_block(output, 0, LMGR_CONFIG_BLOCK, NULL); print_line(output, 1, "commit_behavior : transaction"); print_line(output, 1, "connect_retry_interval_min : 1s"); print_line(output, 1, "connect_retry_interval_max : 30s"); print_line(output, 1, "accounting : enabled"); fprintf(output, "\n"); #ifdef _MYSQL print_begin_block(output, 1, MYSQL_CONFIG_BLOCK, NULL); print_line(output, 2, "server : localhost"); print_line(output, 2, "db : [MANDATORY]"); print_line(output, 2, "user : robinhood"); print_line(output, 2, "password|password_file : [MANDATORY]"); print_line(output, 2, "port : (MySQL default)"); print_line(output, 2, "socket : NONE"); print_line(output, 2, "engine : InnoDB"); print_end_block(output, 1); #elif defined(_SQLITE) print_begin_block(output, 1, SQLITE_CONFIG_BLOCK, NULL); print_line(output, 2, "db_file : \"/var/robinhood/robinhood_sqlite_db\""); print_line(output, 2, "retry_delay_microsec : 1000 (1 millisec)"); print_end_block(output, 1); #endif print_end_block(output, 0); }
int WriteLmgrConfigDefault( FILE * output ) { print_begin_block( output, 0, LMGR_CONFIG_BLOCK, NULL ); print_line( output, 1, "commit_behavior : autocommit" ); print_line( output, 1, "connect_retry_interval_min : 1s" ); print_line( output, 1, "connect_retry_interval_max : 30s" ); print_line( output, 1, "user_acct : enabled" ); print_line( output, 1, "group_acct : enabled" ); fprintf( output, "\n" ); #ifdef _MYSQL print_begin_block( output, 1, MYSQL_CONFIG_BLOCK, NULL ); print_line( output, 2, "server : localhost" ); print_line( output, 2, "db : [MANDATORY]" ); print_line( output, 2, "user : robinhood" ); print_line( output, 2, "password|password_file : [MANDATORY]" ); print_line( output, 2, "port : (MySQL default)" ); print_line( output, 2, "socket : NONE" ); print_line( output, 2, "innodb : disabled" ); print_end_block( output, 1 ); #elif defined (_SQLITE) print_begin_block( output, 1, SQLITE_CONFIG_BLOCK, NULL ); print_line( output, 2, "db_file : \"/var/robinhood/robinhood_sqlite_db\"" ); print_line( output, 2, "retry_delay_microsec : 1000 (1 millisec)" ); print_end_block( output, 1 ); #endif print_end_block( output, 0 ); return 0; }
int Write_EntryProc_ConfigTemplate( FILE * output ) { int i; print_begin_block( output, 0, ENTRYPROC_CONFIG_BLOCK, NULL ); #ifndef _LUSTRE_HSM print_line( output, 1, "# Raise alerts for directories with too many entries" ); print_begin_block( output, 1, ALERT_BLOCK, "Too_many_entries_in_directory" ); print_line( output, 2, "type == directory" ); print_line( output, 2, "and" ); print_line( output, 2, "dircount > 10000" ); print_end_block( output, 1 ); fprintf( output, "\n" ); #endif print_line( output, 1, "# Raise alerts for large files" ); print_begin_block( output, 1, ALERT_BLOCK, "Large_file" ); #ifndef _LUSTRE_HSM print_line( output, 2, "type == file" ); print_line( output, 2, "and" ); #endif print_line( output, 2, "size > 100GB" ); print_end_block( output, 1 ); fprintf( output, "\n" ); print_line( output, 1, "# nbr of worker threads for processing pipeline tasks" ); print_line( output, 1, "nb_threads = 8 ;" ); fprintf( output, "\n" ); print_line( output, 1, "# Max number of operations in the Entry Processor pipeline." ); print_line( output, 1, "# If the number of pending operations exceeds this limit, " ); print_line( output, 1, "# info collectors are suspended until this count decreases" ); #ifdef _SQLITE print_line( output, 1, "max_pending_operations = 1000 ;" ); #else print_line( output, 1, "max_pending_operations = 10000 ;" ); #endif fprintf( output, "\n" ); print_line( output, 1, "# Optionnaly specify a maximum thread count for each stage of the pipeline:" ); print_line( output, 1, "# <stagename>_threads_max = <n> (0: use default)" ); for ( i = 0; i < PIPELINE_STAGE_COUNT; i++ ) { if ( entry_proc_pipeline[i].stage_flags & STAGE_FLAG_PARALLEL ) print_line( output, 1, "# %s_threads_max\t= 8 ;", entry_proc_pipeline[i].stage_name ); else if ( entry_proc_pipeline[i].stage_flags & STAGE_FLAG_MAX_THREADS ) print_line( output, 1, "%s_threads_max\t= %u ;", entry_proc_pipeline[i].stage_name, entry_proc_pipeline[i].max_thread_count ); } fprintf( output, "\n" ); print_line( output, 1, "# if set to FALSE, classes will only be matched"); print_line( output, 1, "# at policy application time (not during a scan or reading changelog)" ); print_line( output, 1, "match_classes = TRUE;"); print_end_block( output, 0 ); return 0; }
int FSScan_WriteConfigTemplate( FILE * output ) { print_begin_block( output, 0, FSSCAN_CONFIG_BLOCK, NULL ); print_line( output, 1, "# simple scan interval (fixed)" ); #ifdef HAVE_CHANGELOGS print_line( output, 1, "scan_interval = 2d ;" ); #else print_line( output, 1, "scan_interval = 6h ;" ); #endif fprintf( output, "\n" ); print_line( output, 1, "# min/max for adaptive scan interval:" ); print_line( output, 1, "# the more the filesystem is full, the more frequently it is scanned." ); #ifdef HAVE_CHANGELOGS print_line( output, 1, "#min_scan_interval = 24h ;" ); print_line( output, 1, "#max_scan_interval = 7d ;" ); #else print_line( output, 1, "#min_scan_interval = 2h ;" ); print_line( output, 1, "#max_scan_interval = 12h ;" ); #endif fprintf( output, "\n" ); print_line( output, 1, "# number of threads used for scanning the filesystem" ); print_line( output, 1, "nb_threads_scan = 2 ;" ); fprintf( output, "\n" ); print_line( output, 1, "# when a scan fails, this is the delay before retrying" ); print_line( output, 1, "scan_retry_delay = 1h ;" ); fprintf( output, "\n" ); print_line( output, 1, "# timeout for operations on the filesystem" ); print_line( output, 1, "scan_op_timeout = 1h ;" ); print_line( output, 1, "# exit if operation timeout is reached?" ); print_line( output, 1, "exit_on_timeout = TRUE ;" ); print_line( output, 1, "# external command called on scan termination"); print_line( output, 1, "# special arguments can be specified: {cfg} = config file path,"); print_line( output, 1, "# {fspath} = path to managed filesystem"); print_line( output, 1, "#completion_command = \"/path/to/my/script.sh -f {cfg} -p {fspath}\" ;" ); fprintf( output, "\n" ); print_line( output, 1, "# Internal scheduler granularity (for testing and of scan, hangs, ...)" ); print_line( output, 1, "spooler_check_interval = 1min ;" ); fprintf( output, "\n" ); print_line( output, 1, "# Memory preallocation parameters" ); print_line( output, 1, "nb_prealloc_tasks = 256 ;" ); fprintf( output, "\n" ); print_begin_block( output, 1, IGNORE_BLOCK, NULL ); print_line( output, 2, "# ignore \".snapshot\" and \".snapdir\" directories (don't scan them)" ); print_line( output, 2, "type == directory" ); print_line( output, 2, "and" ); print_line( output, 2, "( name == \".snapdir\" or name == \".snapshot\" )" ); print_end_block( output, 1 ); print_end_block( output, 0 ); return 0; }
int WriteLmgrConfigTemplate( FILE * output ) { print_begin_block( output, 0, LMGR_CONFIG_BLOCK, NULL ); print_line( output, 1, "# Method for committing information to database." ); print_line( output, 1, "# Possible values are:" ); print_line( output, 1, "# - \"autocommit\": weak transactions (more efficient, but database inconsistencies may occur)" ); print_line( output, 1, "# - \"transaction\": manage operations in transactions (best consistency, lower performance)" ); print_line( output, 1, "# - \"periodic(<nb_transaction>)\": periodically commit (every <n> transactions)." ); #ifdef _MYSQL print_line( output, 1, "commit_behavior = autocommit ;" ); #elif defined (_SQLITE) print_line( output, 1, "commit_behavior = transaction ;" ); #endif fprintf( output, "\n" ); print_line( output, 1, "# Minimum time (in seconds) to wait before trying to reestablish a lost connection." ); print_line( output, 1, "# Then this time is multiplied by 2 until reaching connect_retry_interval_max" ); print_line( output, 1, "connect_retry_interval_min = 1 ;" ); print_line( output, 1, "connect_retry_interval_max = 30 ;" ); print_line( output, 1, "# disable the following options if your are not interested in" ); print_line( output, 1, "# user or group stats (to speed up scan)" ); print_line( output, 1, "user_acct = enabled ;" ); print_line( output, 1, "group_acct = enabled ;" ); fprintf( output, "\n" ); #ifdef _MYSQL print_begin_block( output, 1, MYSQL_CONFIG_BLOCK, NULL ); print_line( output, 2, "server = \"localhost\" ;" ); print_line( output, 2, "db = \"robinhood_db\" ;" ); print_line( output, 2, "user = \"robinhood\" ;" ); print_line( output, 2, "password_file = \"/etc/robinhood.d/.dbpassword\" ;" ); print_line( output, 2, "port = 3306 ;" ); print_line( output, 2, "socket = \"/tmp/mysql.sock\" ;" ); print_line( output, 2, "innodb = enabled ;" ); print_end_block( output, 1 ); #elif defined (_SQLITE) print_begin_block( output, 1, SQLITE_CONFIG_BLOCK, NULL ); print_line( output, 2, "db_file = \"/var/robinhood/robinhood_sqlite_db\" ;" ); print_line( output, 2, "retry_delay_microsec = 1000 ;" ); print_end_block( output, 1 ); #endif print_end_block( output, 0 ); return 0; }
static void dump_msft_header(void) { print_begin_block("Header"); print_hex("magic1"); print_hex("magic2"); print_hex("posguid"); print_hex("lcid"); print_hex("lsid2"); header_flags = print_hex("varflags"); print_hex("version"); print_hex("flags"); typeinfo_cnt = print_dec("ntypeinfos"); print_hex("helpstring"); print_hex("helpstringcontext"); print_hex("helpcontext"); print_dec("nametablecont"); print_dec("nametablechars"); print_hex("NameOffset"); print_hex("helpfile"); print_hex("CustomDataOffset"); print_hex("res44"); print_hex("res48"); print_hex("dispatchpos"); print_hex("res50"); print_end_block(); }
static BOOL dump_msft_custdata(seg_t *seg) { unsigned short vt; unsigned i, n; print_begin_block("CustData"); for(i=0; offset < seg->offset+seg->length; i++) { print_offset(); vt = tlb_read_short(); printf("vt %d", vt); n = tlb_read_int(); switch(vt) { case 8 /* VT_BSTR */: printf(" len %d: ", n); dump_string(n, 2); printf("\n"); break; default: printf(": %x ", n); printf("\\%2.2x \\%2.2x\n", tlb_read_byte(), tlb_read_byte()); } } print_end_block(); return TRUE; }
int WriteLogConfigTemplate( FILE * output ) { print_begin_block( output, 0, RBH_LOG_CONFIG_BLOCK, NULL ); print_line( output, 1, "# Log verbosity level" ); print_line( output, 1, "# Possible values are: CRIT, MAJOR, EVENT, VERB, DEBUG, FULL" ); print_line( output, 1, "debug_level = EVENT ;" ); fprintf( output, "\n" ); print_line( output, 1, "# Log file" ); print_line( output, 1, "log_file = \"/var/log/robinhood.log\" ;" ); fprintf( output, "\n" ); print_line( output, 1, "# File for reporting purge events" ); print_line( output, 1, "report_file = \"/var/log/robinhood_reports.log\" ;" ); fprintf( output, "\n" ); print_line( output, 1, "# set alert_file, alert_mail or both depending on the alert method you wish" ); print_line( output, 1, "alert_file = \"/var/log/robinhood_alerts.log\" ;" ); print_line( output, 1, "alert_mail = \"root@localhost\" ;" ); fprintf( output, "\n" ); print_line( output, 1, "# Interval for dumping stats (to logfile)" ); print_line( output, 1, "stats_interval = 20min ;" ); fprintf( output, "\n" ); print_line( output, 1, "# Alert batching (to send a digest instead of 1 alert per file)" ); print_line( output, 1, "# 0: unlimited batch size, 1: no batching (1 alert per file)," ); print_line( output, 1, "# N>1: batch N alerts per digest" ); print_line( output, 1, "batch_alert_max = 5000 ;" ); print_line( output, 1, "# Give the detail of entry attributes for each alert?" ); print_line( output, 1, "alert_show_attrs = FALSE ;" ); print_end_block( output, 0 ); return 0; }
static int dump_msft_res0f(seg_t *seg) { print_begin_block("res0f"); dump_binary(seg->length); print_end_block(); return -1; }
static BOOL dump_msft_res0e(seg_t *seg) { print_begin_block("res0e"); dump_binary(seg->length); print_end_block(); return TRUE; }
static int dump_msft_res07(seg_t *seg) { print_begin_block("res07"); dump_binary(seg->length); /* FIXME */ print_end_block(); return -1; }
static BOOL dump_msft_namehashtab(seg_t *seg) { print_begin_block("NameHashTab"); dump_binary(seg->length); /* FIXME */ print_end_block(); return TRUE; }
static int dump_msft_custdata(seg_t *seg) { print_begin_block("CustData"); dump_binary(seg->length); /* FIXME */ print_end_block(); return -1; }
static int dump_msft_arraydescs(seg_t *seg) { print_begin_block("ArrayDescriptions"); dump_binary(seg->length); /* FIXME */ print_end_block(); return -1; }
static int dump_msft_stringtab(seg_t *seg) { print_begin_block("StringTab"); dump_binary(seg->length); /* FIXME */ print_end_block(); return -1; }
static int dump_msft_reftabs(seg_t *seg) { print_begin_block("RefTab"); dump_binary(seg->length); /* FIXME */ print_end_block(); return -1; }
int Write_EntryProc_ConfigDefault( FILE * output ) { print_begin_block( output, 0, ENTRYPROC_CONFIG_BLOCK, NULL ); print_line( output, 1, "nb_threads : 8" ); print_line( output, 1, "max_pending_operations : 10000" ); print_line( output, 1, "match_classes : TRUE" ); print_line( output, 1, "alert : NONE" ); print_end_block( output, 0 ); return 0; }
int Write_Rmdir_ConfigDefault( FILE * output ) { print_begin_block( output, 0, RMDIR_PARAM_BLOCK, NULL ); print_line( output, 1, "runtime_interval : 6h" ); print_line( output, 1, "nb_threads_rmdir : 4" ); print_line( output, 1, "rmdir_queue_size : 256" ); print_end_block( output, 0 ); return 0; }
static int dump_msft_libtab(seg_t *seg) { print_begin_block("LibTab"); dump_binary(seg->length); /* FIXME */ print_end_block(); assert(offset == seg->offset+seg->length); return -1; }
static void dump_msft_segdir(void) { int i; print_begin_block("SegDir"); for(i=0; i < sizeof(segdir)/sizeof(segdir[0]); i++) dump_msft_seg(segdir+i); print_end_block(); }
static BOOL dump_msft_guidhashtab(seg_t *seg) { print_begin_block("GuidHashTab"); dump_binary(seg->length); /* FIXME */ print_end_block(); assert(offset == seg->offset+seg->length); return TRUE; }
static void dump_msft_seg(seg_t *seg) { print_begin_block(seg->name); seg->offset = print_hex("offset"); seg->length = print_dec("length"); print_hex("res08"); print_hex("res0c"); print_end_block(); }
int WriteLogConfigDefault( FILE * output ) { print_begin_block( output, 0, RBH_LOG_CONFIG_BLOCK, NULL ); print_line( output, 1, "debug_level : EVENT" ); print_line( output, 1, "log_file : \"/var/log/robinhood.log\"" ); print_line( output, 1, "report_file : \"/var/log/robinhood_reports.log\"" ); print_line( output, 1, "alert_file : \"/var/log/robinhood_alerts.log\"" ); print_line( output, 1, "syslog_facility: local1.info" ); print_line( output, 1, "stats_interval : 15min" ); print_line( output, 1, "batch_alert_max: 1 (no batching)" ); print_line( output, 1, "alert_show_attrs: FALSE" ); print_end_block( output, 0 ); return 0; }
int Write_Rmdir_ConfigTemplate( FILE * output ) { print_begin_block( output, 0, RMDIR_PARAM_BLOCK, NULL ); print_line( output, 1, "# Interval for performing empty directory removal" ); print_line( output, 1, "runtime_interval = 12h ;" ); fprintf( output, "\n" ); print_line( output, 1, "# Number of threads for performing rmdir operations" ); print_line( output, 1, "nb_threads_rmdir = 4 ;" ); fprintf( output, "\n" ); print_line( output, 1, "# Queue size (for leveraging rmdir threads load)" ); print_line( output, 1, "rmdir_queue_size = 256 ;" ); print_end_block( output, 0 ); return 0; }
static int dump_msft_typedesctab(seg_t *seg) { int i; print_begin_block("TypedescTab"); for(i = 0; offset < seg->offset+seg->length; i++) dump_msft_typedesc(i); print_end_block(); assert(offset == seg->offset+seg->length); return -1; }
static void log_cfg_write_default(FILE *output) { print_begin_block(output, 0, RBH_LOG_CONFIG_BLOCK, NULL); print_line(output, 1, "debug_level : EVENT"); print_line(output, 1, "log_file : \"/var/log/robinhood.log\""); print_line(output, 1, "report_file : \"/var/log/robinhood_actions.log\""); print_line(output, 1, "alert_file : \"/var/log/robinhood_alerts.log\""); print_line(output, 1, "syslog_facility: local1.info"); print_line(output, 1, "stats_interval : 15min"); print_line(output, 1, "batch_alert_max: 1 (no batching)"); print_line(output, 1, "alert_show_attrs: no"); print_line(output, 1, "log_procname: no"); print_line(output, 1, "log_hostname: no"); print_end_block(output, 0); }
static void log_cfg_write_template(FILE *output) { print_begin_block(output, 0, RBH_LOG_CONFIG_BLOCK, NULL); print_line(output, 1, "# Log verbosity level"); print_line(output, 1, "# Possible values are: CRIT, MAJOR, EVENT, VERB, DEBUG, FULL"); print_line(output, 1, "debug_level = EVENT ;"); fprintf(output, "\n"); print_line(output, 1, "# Log file"); print_line(output, 1, "log_file = \"/var/log/robinhood.log\" ;"); fprintf(output, "\n"); print_line(output, 1, "# File for reporting purge events"); print_line(output, 1, "report_file = \"/var/log/robinhood_actions.log\" ;"); fprintf(output, "\n"); print_line(output, 1, "# set alert_file, alert_mail or both depending on the alert method you wish"); print_line(output, 1, "alert_file = \"/var/log/robinhood_alerts.log\" ;"); print_line(output, 1, "alert_mail = \"root@localhost\" ;"); fprintf(output, "\n"); #ifdef HAVE_CHANGELOGS print_line(output, 1, "# File to dump changelogs into"); print_line(output, 1, "changelogs_file = \"/var/log/robinhood_cl.log\" ;"); #endif fprintf(output, "\n"); print_line(output, 1, "# Interval for dumping stats (to logfile)"); print_line(output, 1, "stats_interval = 20min ;"); fprintf(output, "\n"); print_line(output, 1, "# Alert batching (to send a digest instead of 1 alert per file)"); print_line(output, 1, "# 0: unlimited batch size, 1: no batching (1 alert per file),"); print_line(output, 1, "# N>1: batch N alerts per digest"); print_line(output, 1, "batch_alert_max = 5000 ;"); print_line(output, 1, "# Give the detail of entry attributes for each alert?"); print_line(output, 1, "alert_show_attrs = no ;"); fprintf(output, "\n"); print_line(output, 1, "# whether the process name appears in the log line"); print_line(output, 1, "log_procname = yes;"); print_line(output, 1, "# whether the host name appears in the log line"); print_line(output, 1, "log_hostname = yes;"); print_end_block(output, 0); }
int Write_ResourceMon_ConfigDefault(FILE * output) { print_begin_block(output, 0, PURGE_PARAM_BLOCK, NULL); print_line(output, 1, "nb_threads_purge : 4"); print_line(output, 1, "post_purge_df_latency : 1min"); print_line(output, 1, "purge_queue_size : 4096"); print_line(output, 1, "db_result_size_max : 100000"); #ifdef ATTR_INDEX_status print_line(output, 1, "check_purge_status_on_startup: TRUE"); #endif print_line(output, 1, "recheck_ignored_classes: TRUE"); #ifdef _TMP_FS_MGR print_line(output, 1, "purge_command : <built-in: unlink>"); #endif print_end_block(output, 0); fprintf(output, "\n"); return 0; }
int FSScan_WriteDefaultConfig( FILE * output ) { print_begin_block( output, 0, FSSCAN_CONFIG_BLOCK, NULL ); #ifdef _LUSTRE_HSM print_line( output, 1, "min_scan_interval : 24h" ); print_line( output, 1, "max_scan_interval : 7d" ); #else print_line( output, 1, "min_scan_interval : 2h" ); print_line( output, 1, "max_scan_interval : 12h" ); #endif print_line( output, 1, "scan_retry_delay : 1h" ); print_line( output, 1, "nb_threads_scan : 2" ); print_line( output, 1, "scan_op_timeout : 0 (disabled)" ); print_line( output, 1, "exit_on_timeout : FALSE" ); print_line( output, 1, "spooler_check_interval : 1min" ); print_line( output, 1, "nb_prealloc_tasks : 256" ); print_line( output, 1, "ignore : NONE" ); print_line( output, 1, "completion_command : NONE" ); print_end_block( output, 0 ); return 0; }
int WriteGlobalConfigDefault( FILE * output ) { print_begin_block( output, 0, GLOBAL_CONFIG_BLOCK, NULL ); print_line( output, 1, "fs_path : [MANDATORY]" ); #ifdef _HAVE_FID print_line( output, 1, "fs_type : lustre" ); #else print_line( output, 1, "fs_type : [MANDATORY]" ); #endif print_line( output, 1, "fs_key : fsname" ); print_line( output, 1, "lock_file : \"/var/locks/robinhood.lock\"" ); print_line( output, 1, "stay_in_fs : TRUE" ); print_line( output, 1, "check_mounted : TRUE" ); #if defined( _LUSTRE ) && defined( _MDS_STAT_SUPPORT ) print_line( output, 1, "direct_mds_stat : FALSE" ); #endif print_end_block( output, 0 ); return 0; }