Showing preview only (5,822K chars total). Download the full file or copy to clipboard to get everything.
Repository: cea-hpc/robinhood
Branch: master
Commit: 806084c9d623
Files: 497
Total size: 5.5 MB
Directory structure:
gitextract_8lphqcmv/
├── .commit-template
├── .gitignore
├── ChangeLog
├── LICENSE.en.txt
├── LICENSE.fr.txt
├── Makefile.am
├── README.md
├── autogen.sh
├── autotools/
│ └── m4/
│ ├── args_mgmt.m4
│ ├── as-ac-expand.m4
│ ├── ax_valgrind_check.m4
│ ├── db.m4
│ └── lustre.m4
├── configure.ac
├── doc/
│ ├── Makefile.am
│ ├── admin_guides/
│ │ ├── MOVED_TO
│ │ └── rbh25-disaster_recovery.odt
│ ├── doxygen/
│ │ └── doxygen.cfg.in
│ └── templates/
│ ├── Makefile.am
│ ├── basic.conf
│ ├── example_alerts.conf
│ ├── example_checksum.conf
│ ├── example_cleanup.conf
│ ├── example_lhsm.conf
│ ├── example_modeguard.conf
│ ├── example_rmdir.conf
│ ├── example_shook.conf
│ └── includes/
│ ├── alerts.inc
│ ├── backup.inc
│ ├── check.inc
│ ├── lhsm.inc
│ ├── modeguard.inc
│ ├── rmdir.inc
│ ├── rmdir_old.inc
│ ├── shook.inc
│ └── tmpfs.inc
├── man/
│ ├── Makefile.am
│ ├── lhsmtool_cmd.1
│ ├── lhsmtool_cmd.rst
│ ├── rbh-diff.1
│ ├── rbh-du.1
│ ├── rbh-find.1
│ ├── rbh-report.1
│ └── robinhood.1
├── robinhood.spec.in
├── scripts/
│ ├── Makefile.am
│ ├── bestiaire.sh
│ ├── cfg_25to30.sh
│ ├── check_commit.sh
│ ├── check_rpm_reloc.sh
│ ├── checkpatch.pl
│ ├── cmd2man.sh
│ ├── code_format.sh
│ ├── commit-msg
│ ├── demo/
│ │ ├── disk_usage.sh
│ │ ├── migr_purge.sh
│ │ ├── mkplot.sh
│ │ ├── populate_backend.sh
│ │ ├── rh.migr_purge.conf
│ │ ├── trace_usage.gp
│ │ └── write_data.sh
│ ├── exafs.sh
│ ├── fill_fs.sh
│ ├── fix_man_options.sh
│ ├── git_prepare_hook
│ ├── indent.sh
│ ├── ld.so.robinhood.conf.in
│ ├── pre-commit
│ ├── rbh-config
│ ├── rbh_cksum.sh.in
│ ├── rbhext_tool
│ ├── rbhext_tool_clnt
│ ├── rbhext_tool_svr
│ ├── rewrite.sh
│ ├── robinhood.init.in
│ ├── robinhood.init.sles.in
│ ├── robinhood.service.in
│ ├── robinhood@.service.in
│ ├── sanity-lhsm/
│ │ ├── repro_time.sh
│ │ ├── rh-hsm.conf.in
│ │ └── sanity.sh
│ ├── sysconfig_robinhood.in
│ └── type_gen.pl
├── src/
│ ├── Makefile.am
│ ├── cfg_parsing/
│ │ ├── Makefile.am
│ │ ├── analyze.c
│ │ ├── analyze.h
│ │ ├── conf_lex.c
│ │ ├── conf_lex.l
│ │ ├── conf_yacc.c
│ │ ├── conf_yacc.h
│ │ ├── conf_yacc.y
│ │ ├── config_parsing.c
│ │ ├── rbh_boolexpr.c
│ │ ├── rbh_cfg.c
│ │ └── rbh_cfg_helpers.c
│ ├── chglog_reader/
│ │ ├── Makefile.am
│ │ ├── chglog_reader.c
│ │ └── chglog_reader_config.c
│ ├── common/
│ │ ├── Makefile.am
│ │ ├── RW_Lock.c
│ │ ├── basename.c
│ │ ├── global_config.c
│ │ ├── lustre_tools.c
│ │ ├── mntent_compat.c
│ │ ├── mntent_compat.h
│ │ ├── param_utils.c
│ │ ├── queue.c
│ │ ├── rbh_cmd.c
│ │ ├── rbh_logs.c
│ │ ├── rbh_misc.c
│ │ ├── rbh_modules.c
│ │ ├── rbh_params.c
│ │ ├── uidgidcache.c
│ │ └── update_params.c
│ ├── entry_processor/
│ │ ├── Makefile.am
│ │ ├── diff_pipeline.c
│ │ ├── entry_proc_hash.c
│ │ ├── entry_proc_impl.c
│ │ ├── entry_proc_tools.c
│ │ ├── entry_proc_tools.h
│ │ ├── std_pipeline.c
│ │ └── test_hash.c
│ ├── fs_scan/
│ │ ├── Makefile.am
│ │ ├── fs_scan.c
│ │ ├── fs_scan.h
│ │ ├── fs_scan_main.c
│ │ ├── fs_scan_types.h
│ │ ├── task_stack_mngmt.c
│ │ ├── task_stack_mngmt.h
│ │ ├── task_tree_mngmt.c
│ │ └── task_tree_mngmt.h
│ ├── include/
│ │ ├── Makefile.am
│ │ ├── Memory.h
│ │ ├── RW_Lock.h
│ │ ├── chglog_reader.h
│ │ ├── config_parsing.h
│ │ ├── db_schema.def
│ │ ├── db_types.h
│ │ ├── entry_proc_hash.h
│ │ ├── entry_processor.h
│ │ ├── fs_scan_main.h
│ │ ├── global_config.h
│ │ ├── list.h
│ │ ├── list_mgr.h
│ │ ├── lustre/
│ │ │ └── lustre_errno.h
│ │ ├── lustre_extended_types.h
│ │ ├── pipeline_types.h
│ │ ├── policy_rules.h
│ │ ├── policy_run.h
│ │ ├── queue.h
│ │ ├── rbh_basename.h
│ │ ├── rbh_boolexpr.h
│ │ ├── rbh_cfg.h
│ │ ├── rbh_cfg_helpers.h
│ │ ├── rbh_const.h
│ │ ├── rbh_logs.h
│ │ ├── rbh_misc.h
│ │ ├── rbh_modules.h
│ │ ├── rbh_params.h
│ │ ├── rbh_types.h
│ │ ├── status_manager.h
│ │ ├── uidgidcache.h
│ │ ├── update_params.h
│ │ └── xplatform_print.h
│ ├── list_mgr/
│ │ ├── Makefile.am
│ │ ├── database.h
│ │ ├── listmgr_common.c
│ │ ├── listmgr_common.h
│ │ ├── listmgr_config.c
│ │ ├── listmgr_filters.c
│ │ ├── listmgr_get.c
│ │ ├── listmgr_init.c
│ │ ├── listmgr_insert.c
│ │ ├── listmgr_internal.h
│ │ ├── listmgr_iterators.c
│ │ ├── listmgr_ns.c
│ │ ├── listmgr_recov.c
│ │ ├── listmgr_remove.c
│ │ ├── listmgr_reports.c
│ │ ├── listmgr_stripe.c
│ │ ├── listmgr_stripe.h
│ │ ├── listmgr_tags.c
│ │ ├── listmgr_update.c
│ │ ├── listmgr_vars.c
│ │ ├── mysql_wrapper.c
│ │ └── sqlite_wrapper.c
│ ├── modules/
│ │ ├── Makefile.am
│ │ ├── alerter.c
│ │ ├── backup.c
│ │ ├── backup.h
│ │ ├── basic.c
│ │ ├── checker.c
│ │ ├── common_actions.c
│ │ ├── common_sched.c
│ │ ├── lhsm.c
│ │ ├── mod_internal.c
│ │ ├── mod_internal.h
│ │ ├── modeguard.c
│ │ ├── sched_ratelimit.c
│ │ ├── shook.c
│ │ └── test_sched.c
│ ├── policies/
│ │ ├── Makefile.am
│ │ ├── policy_loader.c
│ │ ├── policy_matching.c
│ │ ├── policy_run.c
│ │ ├── policy_run_cfg.c
│ │ ├── policy_sched.c
│ │ ├── policy_sched.h
│ │ ├── policy_triggers.c
│ │ ├── run_policies.h
│ │ └── status_manager.c
│ ├── robinhood/
│ │ ├── Makefile.am
│ │ ├── cmd_helpers.c
│ │ ├── cmd_helpers.h
│ │ ├── rbh_daemon.c
│ │ ├── rbh_diff.c
│ │ ├── rbh_du.c
│ │ ├── rbh_find.c
│ │ ├── rbh_find.h
│ │ ├── rbh_find_printf.c
│ │ ├── rbh_import.c
│ │ ├── rbh_rebind.c
│ │ ├── rbh_recov.c
│ │ ├── rbh_report.c
│ │ └── rbh_undelete.c
│ ├── tests/
│ │ ├── Makefile.am
│ │ ├── create_nostripe.c
│ │ ├── path.sql
│ │ ├── test_confparam.c
│ │ ├── test_forcestripe.c
│ │ ├── test_params.c
│ │ ├── test_parse.c
│ │ ├── test_parsing.sh
│ │ ├── test_uidgidcache.c
│ │ └── tst.data/
│ │ ├── bad.conf
│ │ ├── inc2.inc
│ │ ├── ok.conf
│ │ ├── test.conf
│ │ └── test.inc
│ └── tools/
│ ├── Makefile.am
│ ├── gen_lov_objid.c
│ ├── lhsmtool_cmd.c
│ ├── ost_fids_remap.c
│ ├── read_lovea.c
│ └── set_lovea.c
├── tests/
│ ├── Makefile.am
│ ├── completion.sh
│ ├── create_files.sh
│ ├── fill_fs.sh
│ ├── gprof-helper.c
│ ├── huge_posix/
│ │ ├── 1-test_setup.sh
│ │ ├── 2-run-tests.sh
│ │ └── cfg/
│ │ ├── common.conf
│ │ └── innodb.conf
│ ├── shook_configure.sh
│ ├── test_compil_switches.sh
│ ├── test_rpmbuild.sh
│ └── test_suite/
│ ├── 1-test_setup_lustre.sh
│ ├── 1-test_setup_posix.sh
│ ├── 2-run-tests.sh
│ ├── 3-tests-lustre.sh
│ ├── Makefile.am
│ ├── README.rst
│ ├── bench_rpc.sh
│ ├── cfg/
│ │ ├── Generation_Report_1.conf
│ │ ├── MigrationClass_ExtendedAttribut.conf
│ │ ├── MigrationClass_LastAccess.conf
│ │ ├── MigrationClass_LastModification.conf
│ │ ├── MigrationClass_OST.conf
│ │ ├── MigrationClass_Owner.conf
│ │ ├── MigrationClass_Path_Name.conf
│ │ ├── MigrationClass_Size.conf
│ │ ├── MigrationClass_Type.conf
│ │ ├── MigrationFile_ExtendedAttribut.conf
│ │ ├── MigrationFile_LastAccess.conf
│ │ ├── MigrationFile_LastModification.conf
│ │ ├── MigrationFile_OST.conf
│ │ ├── MigrationFile_Owner.conf
│ │ ├── MigrationFile_Path_Name.conf
│ │ ├── MigrationFile_Size.conf
│ │ ├── MigrationFile_Type.conf
│ │ ├── MigrationGroup.conf
│ │ ├── MigrationOST.conf
│ │ ├── MigrationStd_ExtendedAttribut.conf
│ │ ├── MigrationStd_LastAccess.conf
│ │ ├── MigrationStd_LastModification.conf
│ │ ├── MigrationStd_OST.conf
│ │ ├── MigrationStd_Owner.conf
│ │ ├── MigrationStd_Path_Name.conf
│ │ ├── MigrationStd_Size.conf
│ │ ├── MigrationStd_Type.conf
│ │ ├── MigrationUser.conf
│ │ ├── OtherParameters_1.conf
│ │ ├── OtherParameters_2.conf
│ │ ├── OtherParameters_3.conf
│ │ ├── OtherParameters_4.conf
│ │ ├── OtherParameters_5.conf
│ │ ├── PurgeClass_ExtendedAttribut.conf
│ │ ├── PurgeClass_LastAccess.conf
│ │ ├── PurgeClass_LastModification.conf
│ │ ├── PurgeClass_OST.conf
│ │ ├── PurgeClass_Owner.conf
│ │ ├── PurgeClass_Path_Name.conf
│ │ ├── PurgeClass_Size.conf
│ │ ├── PurgeClass_Type.conf
│ │ ├── PurgeOST.conf
│ │ ├── PurgeStd_ExtendedAttribut.conf
│ │ ├── PurgeStd_LastAccess.conf
│ │ ├── PurgeStd_LastModification.conf
│ │ ├── PurgeStd_OST.conf
│ │ ├── PurgeStd_Owner.conf
│ │ ├── PurgeStd_Path_Name.conf
│ │ ├── PurgeStd_Size.conf
│ │ ├── PurgeStd_Type.conf
│ │ ├── RemovingDir_Dircount.conf
│ │ ├── RemovingDir_ExtendedAttribute.conf
│ │ ├── RemovingDir_LastAccess.conf
│ │ ├── RemovingDir_LastModification.conf
│ │ ├── RemovingDir_Mixed.conf
│ │ ├── RemovingDir_OST.conf
│ │ ├── RemovingDir_Owner.conf
│ │ ├── RemovingDir_Path_Name.conf
│ │ ├── RemovingEmptyDir.conf
│ │ ├── TriggerPurge_GroupQuotaExceeded.conf
│ │ ├── TriggerPurge_OstQuotaExceeded.conf
│ │ ├── TriggerPurge_QuotaExceeded.conf
│ │ ├── TriggerPurge_UserQuotaExceeded.conf
│ │ ├── acct.conf
│ │ ├── alert.conf
│ │ ├── alert_ost.conf
│ │ ├── cl_batch.conf
│ │ ├── commit_update.conf
│ │ ├── common.conf
│ │ ├── common_noclass.conf
│ │ ├── compress.conf
│ │ ├── info_collect.conf
│ │ ├── info_collect2.conf
│ │ ├── log1.conf
│ │ ├── log1b.conf
│ │ ├── log2.conf
│ │ ├── log2b.conf
│ │ ├── log3.conf
│ │ ├── log3b.conf
│ │ ├── log_common.conf
│ │ ├── lru_purge.conf
│ │ ├── lru_sort_access.conf
│ │ ├── lru_sort_archive.conf
│ │ ├── lru_sort_creat_last_arch.conf
│ │ ├── lru_sort_creation.conf
│ │ ├── lru_sort_mod.conf
│ │ ├── lru_sort_mod_2pass.conf
│ │ ├── lru_sort_size_asc.conf
│ │ ├── lru_sort_size_desc.conf
│ │ ├── migr_fail.conf
│ │ ├── migr_failer.sh
│ │ ├── overflow.conf
│ │ ├── rbh25.sql
│ │ ├── rmdir.conf
│ │ ├── test1.conf
│ │ ├── test2.conf
│ │ ├── test3.conf
│ │ ├── test_action_params.conf
│ │ ├── test_basic.conf
│ │ ├── test_check_migr.conf
│ │ ├── test_check_purge.conf
│ │ ├── test_checker.conf
│ │ ├── test_checker_invert.conf
│ │ ├── test_completion.conf
│ │ ├── test_copy.conf
│ │ ├── test_custom_purge.conf
│ │ ├── test_default_case.conf
│ │ ├── test_fileclass.conf
│ │ ├── test_hsm_invalidate.conf
│ │ ├── test_hsm_remove_noorder.conf
│ │ ├── test_hsm_remove_order.conf
│ │ ├── test_iname.conf
│ │ ├── test_lhsm1.conf
│ │ ├── test_limits.conf
│ │ ├── test_maintenance.conf
│ │ ├── test_mnt_point.conf
│ │ ├── test_modeguard_dir.conf
│ │ ├── test_modeguard_file.conf
│ │ ├── test_move.conf
│ │ ├── test_multirule.conf
│ │ ├── test_multirule_migr.conf
│ │ ├── test_nlink.conf
│ │ ├── test_path.conf
│ │ ├── test_pipeline.conf
│ │ ├── test_pools.conf
│ │ ├── test_prepost_cmd.conf
│ │ ├── test_prepost_sched.conf
│ │ ├── test_purge.conf
│ │ ├── test_purge2.conf
│ │ ├── test_ratelim.conf
│ │ ├── test_recov.conf
│ │ ├── test_recov2.conf
│ │ ├── test_rm1.conf
│ │ ├── test_rmdir_depth.conf
│ │ ├── test_run.conf
│ │ ├── test_scan_only.conf
│ │ ├── test_sched1.conf
│ │ ├── test_trig.conf
│ │ ├── test_trig2.conf
│ │ ├── test_trig3.conf
│ │ ├── test_trig4.conf
│ │ ├── test_trig_cntpct.conf
│ │ ├── test_updt.conf
│ │ ├── test_uuid.conf
│ │ ├── test_xattr.conf
│ │ ├── tokudb1.conf
│ │ ├── tokudb2.conf
│ │ └── uidgidnum.conf
│ ├── cleanup.sh
│ ├── create-random.c
│ ├── lsetup.sh
│ ├── prepost_cmd.sh
│ ├── rm_script
│ └── valgrind.supp
└── web_gui/
├── Makefile.am
├── gui_v3/
│ ├── README.txt
│ ├── api/
│ │ ├── .htaccess
│ │ ├── index.php
│ │ ├── rest.class.php
│ │ └── robinhood.php
│ ├── common.php
│ ├── config.php
│ ├── config_local.php.template
│ ├── cron.php
│ ├── css/
│ │ ├── bootstrap-datetimepicker.css
│ │ ├── bootstrap-slider.css
│ │ ├── bootstrap-theme.css
│ │ ├── bootstrap.css
│ │ ├── dashboard.css
│ │ ├── dataTables.bootstrap.css
│ │ ├── dataTables.bootstrap4.css
│ │ ├── dataTables.foundation.css
│ │ ├── dataTables.jqueryui.css
│ │ ├── dataTables.material.css
│ │ ├── dataTables.semanticui.css
│ │ ├── dataTables.uikit.css
│ │ ├── jquery.dataTables.css
│ │ └── jquery.dataTables_themeroller.css
│ ├── customjs/
│ │ ├── newgui.js
│ │ └── param.php
│ ├── images/
│ │ └── Sorting icons.psd
│ ├── index.php
│ ├── js/
│ │ ├── Chart.bundle.js
│ │ ├── bootstrap-slider.js
│ │ ├── bootstrap.js
│ │ ├── dataTables.bootstrap.js
│ │ ├── dataTables.bootstrap4.js
│ │ ├── dataTables.foundation.js
│ │ ├── dataTables.jqueryui.js
│ │ ├── dataTables.material.js
│ │ ├── dataTables.semanticui.js
│ │ ├── dataTables.uikit.js
│ │ ├── filesize.dataTables.js
│ │ ├── jquery.dataTables.js
│ │ ├── jquery.js
│ │ ├── moment.js
│ │ └── npm.js
│ ├── lang/
│ │ ├── en.php
│ │ ├── fr.php
│ │ └── sys.php
│ ├── plugin.php
│ └── plugins/
│ ├── README.txt
│ ├── browser/
│ │ ├── css/
│ │ │ └── bootstrap-treeview.css
│ │ ├── help.html
│ │ ├── js/
│ │ │ └── bootstrap-treeview.js
│ │ ├── plugin.php
│ │ └── script.js
│ ├── colorgraph/
│ │ └── plugin.php
│ ├── console/
│ │ ├── plugin.php
│ │ └── script.js
│ ├── customgraph/
│ │ ├── help.html
│ │ ├── plugin.php
│ │ └── script.js
│ ├── internalstats/
│ │ ├── plugin.php
│ │ └── script.js
│ ├── ldapauth/
│ │ ├── plugin.php
│ │ └── script.js
│ ├── netauth/
│ │ ├── help.html
│ │ └── plugin.php
│ ├── output/
│ │ ├── help.html
│ │ └── plugin.php
│ ├── plugdisplay/
│ │ ├── help.html
│ │ ├── plugin.php
│ │ └── script.js
│ ├── stackgraph/
│ │ └── plugin.php
│ └── tasks/
│ ├── help.html
│ ├── plugin.php
│ └── script.js
├── robinhood.conf
├── scripts/
│ └── check_robinhood.py
└── tests/
├── nonreg.bash
└── nonreg.php
================================================
FILE CONTENTS
================================================
================================================
FILE: .commit-template
================================================
# Please use the following format for the commit message:
#
# <module>: short description of the change.
#
# More detailed description about the issue
# and the way it is addressed.
#
# Implementation details.
#
================================================
FILE: .gitignore
================================================
.deps
.libs
.dirstamp
Makefile.in
Makefile
*.o
*.lo
*.la
*.diff
*.orig
*.rej
*.gcda
*.gcno
*~
\#*\#
TAGS
cscope.*
/autotools/depcomp
/autotools/install-sh
/autotools/ltmain.sh
/autotools/missing
/autotools/compile
/autotools/config.guess
/autotools/config.sub
/autotools/ar-lib
/autotools/m4/libtool.m4
/autotools/m4/ltoptions.m4
/autotools/m4/ltsugar.m4
/autotools/m4/ltversion.m4
/autotools/m4/lt~obsolete.m4
/autotools/ylwrap
/autotools/test-driver
/autom4te.cache
/config.status
/libtool
/Makefile
/aclocal.m4
/config.log
/configure
/doc/doxygen/doxygen.cfg
/man/Makefile
/robinhood-*.tar.gz
/robinhood.spec
/rpms/
/scripts/Makefile
/scripts/robinhood.init
/scripts/robinhood.init.sles
/scripts/robinhood.service
/scripts/robinhood@.service
/scripts/sysconfig_robinhood
/scripts/ld.so.robinhood.conf
/scripts/rbh_cksum.sh
/src/Makefile
/src/todo
/src/robinhood/todo
/src/cfg_parsing/Makefile
/src/chglog_reader/Makefile
/src/common/Makefile
/src/entry_processor/Makefile
/src/fs_scan/Makefile
/src/include/Makefile
/src/include/config.h
/src/include/config.h.in
/src/include/stamp-h1
/src/list_mgr/Makefile
/src/logs/Makefile
/src/policy_matching/Makefile
/src/policy_modules/Makefile
/src/policy_modules/hsm_remove/Makefile
/src/policy_modules/migration/Makefile
/src/policy_modules/purge/Makefile
/src/policy_modules/rmdir/Makefile
/src/robinhood/Makefile
/src/tests/Makefile
/src/tests/test_uidgidcache
/src/tests/test_params
/src/tests/test_confparam
/src/tests/test_parse
/src/tests/create_nostripe
/src/tests/test_forcestripe
/src/backend_ext/Makefile
/tests/Makefile
/web_gui/Makefile
/src/tools/Makefile
/src/tools/gen_lov_objid
/src/tools/read_lovea
/src/tools/set_lovea
/src/tools/ost_fids_remap
/src/tools/lhsmtool_cmd
/src/robinhood/rbh-du
/src/robinhood/rbh-find
/src/robinhood/rbh-report
/src/robinhood/rbh-diff
/src/robinhood/rbh-undelete
/src/robinhood/robinhood
/tests/lustre_fs/*.log
/tests/posix_fs/*.log
/tests/test_suite/create-random
/TODO
/src/include/db_schema.h
/scripts/make_mans.sh
/web_gui/gui_v3/config_local.php
================================================
FILE: ChangeLog
================================================
Summary of changes in versions 3.x:
3.2:
- Add features for Lustre's project quota:
- Retrieve project id when scanning and reading changelogs
- Add report: rbh-report --project-info
- New filtering options in rbh-report: --filter-project
- New option --split-user-projects to split user's usage per project
- Display project-info with 'rbh-find --printf %RP'
- Filter project with 'rbh-find -projid num'
- New 'projid' trigger target on command line
- Implement policy sort order by size, e.g. lru_sort_attr = size;
- Implement asc/desc modifiers for sort order, e.g. lru_sort_attr = size(desc);
- Implement policy trigger thresholds as percentage of available inodes:
high/low_threshold_cntpct = xx%;
- policy optimization: no DB update when pre_sched_match and post_sched_match
are set to "none or "cache_only".
- Fix errors "Out of range value for size columns" due to DB triggers
- Make top-user --by-count take all entry types into account
- Adaptations for Lustre 2.15
- Adaptations for RHEL9.4 OS family
3.1.7:
- Fix pool_usage triggers.
- Fix partial application of policies when run on multiple OSTs.
3.1.6:
- fix build on Lustre 2.12.4
- check the filesystem returns consistent statfs values
- chglog_reader: reopen changelog in case of unexpected error
- chglog_reader: de-duplicate HSM STATE events (keep the latest)
- policy run time stat now includes initial DB request time
- fix the use of archive_id parameter in lhsm
- port to CentOS8 and lustre master (2.13.52)
3.1.5:
- Lustre: compatibility with FPL and DoM (no full-featured support)
- Fix and improvement of ratelimit scheduler
- Stop retrying SQL requests on SIGTERM
- Faster remove policies (disable sorting)
3.1.4:
* Web gui:
- new access control criteria: IP address, hostname;
- tasks: scheduled requests, and possiblity to keep result history;
- custom graphs.
* Performance improvements:
- Improved rules-to-SQL conversion engine. Enable faster policy runs.
- Auto-tune hash table sizes (changelog reader and entry processor).
- Pipeline tuning to reduce CPU usage and improve ingestion rate.
- Default linking to jemalloc memory allocator for better performance.
Note: it is advised to start MariaDB with this allocator too
to achieve maximal performance.
- Fix major performance bug in changelog reader (appeared in v3.1.3).
* Configuration files: support %include directives in sub-blocks.
* New parameter to 'common.copy': "mkdir=yes" creates target directories
prior to the copy operation.
* New action 'common.move' (move an entry from one path/name to another).
* Command copytool 'lhsmtool_cmd': add man page.
3.1.3:
* Policies: add matching modes "auto_update_attrs" and "auto_update_all"
* Faster changelog reader shutdown when the process is terminated by a signal
* Changelog optimization: drop CREATE/UNLINK and MKDIR/RMDIR changelog pairs
* rbh-find:
add "-links" criterion
"-ost" accepts OST sets
add "-iname" option for case-insensitive name matching
support "-not" for links, size and dates
* FS scan optimization (use openat() to walk through the filesystem instead
of full paths).
* Fix rules-to-SQL conversion
3.1.2:
* Implement command rbh-rebind command to assign an archived entry to a newly
created fid (e.g. used for undelete operation).
* Make lhsm undelete more resilient to error cases
* lhsm: add tunable to allow custom/smaller UUID
* REST API:
add nagios plugin
add graph preview in console plugin
add new filters
Main changes in robinhood 3.1:
* Ingest rate optimizations: up to x10
* New plugin type: action schedulers
These plugins make it possible to reorder policy actions, or smooth policy execution.
In this release, two of such plugins are provided: 'common.max_per_run' and
'common.rate_limit'.
* Policy optimizations:
- Improved pre-filtering: convert all policy rules to SQL for better
pre-filtering.
- Configurable attribute matching before/after scheduling
(pre/post_sched_match parameters).
* FS scan: make it possible to restrict scan to several directories
('scan_only' configuration parameter).
- Especially useful with Lustre's static DNE partitioning.
* Pre/post policy run commands
* Modeguard status manager
- Enforce or clear permission bits on entries of the filesystem
* Fixes for Lustre 2.10
- Note: this robinhood version does not support Progressive File Layouts yet
* REST API and web interface enhancements:
- Plugin mechanism to add custom charts/fields/requests...
- Finer access control (limit user views only to their stats)
- All robinhood DB available through the REST API
Main changes in robinhood 3.0:
* Policies at will:
- Define new custom policies at will, just by writting just a few lines of configuration.
- Schedule all imaginable actions on filesystem entries.
- Templates are provided to implement: old entries cleanup, directory cleanup, data corruption checks (by regularly checking file's checksum), Lustre/HSM policies.
* Fully configurable policies:
- All policy aspects made configurable (scope, actions, action parameters, sort order...)
- Fine-grained specification of policy actions and parameters.
* Plugin-based architecture:
- Missing a specific feature in Robinhood core? Implement you own plugin to manage new kind of policies, maintain specific info in robinhood DB, enable interactions with specific site ecosystem (job scheduler, system load...), ...
* Enabling the Robinhood community:
- Share your custom policy definitions and plugins, so that other community members can benefit from them and enrich them!
* All Robinhood features in a single instance:
- No more distinct and incompatible robinhood "flavors" (tmpfs, lhsm, backup...)
- All policies can be implemented in a single robinhood instance.
* Get a better overlook of your filesystem contents than ever!
- New web interface
- REST interface to query filesystem stats
- Tag your filesystem entries based on arbitrary criteria using the new fileclass implementation
- Flexible reporting with "rbh-find -printf"
* RedHat 7 integration:
- systemd support.
- Per filesystem service: robinhood@<fsname>
* New features for Lustre/HSM:
- Undelete: recover accidentally deleted files.
- Implement Lustre/HSM with any backend, using the generic command copytool shipped with robinhood: 'lhsmtool_cmd'.
- UUID support for Lustre/HSM copytools.
* Convenient:
- Automatic DB conversion after major upgrades.
* Even more robust & Improved code quality.
Changes between version 2.5.4 and 2.5.5:
* [lustre] Support Lustre versions up to 2.7.
* [DB performance] Allow both batching and parallelizing DB operations when
accounting is OFF. Benchmarks show a x3~x4 speedup of DB ingest rate in this
case.
* [DB performance] Reduce lock contention on indexes of STRIPE_ITEMS table.
* [acct] Avoid accounting stats inconsistency when this feature is enabled/
disabled/re-enabled.
* [policy performance] Disable ignored class re-matching by default.
* [policy performance] Disable sort by mtime by default.
* [policy performance] Allow disabling sort by atime for purge policies.
* [fix] Fix segfault when log rotation occurs under heavy logging.
* [fix] When processing a RENAME changelog record, match the new path in
filesystem instead of building it from DB (which caused 'incomplete path'
errors).
* [fix] Fix sendfile copy operation for backup mode.
* [fix] Fix various requests about directories: --topdirs with --filter-path
option, --toprmdir, ...
* [fix] Fix possible duplicate insert error when updated entry attributes are
only in ANNEX_INFO table (rare).
* [fix] Some purge parameters may not be taken into account.
* [packaging] clean permissions in distribution tarball.
* [report performance] Improve performance of path matching when running
directory reports with --filter-path option.
Changes between version 2.5.3 and 2.5.4:
* [lustre] Lustre 2.4+: detect all stripe changes and update the DB accordingly.
* [scan] Prevent from dropping entries from DB when opendir or stat fail.
* [DB] Optimization to batch more DB requests.
* [DB] Allow using any MySQL engine (new config parameter: listmanager::mysql::engine)
* [rbh-config] Avoid backup_db to lock the whole tables with innodb.
* [bugfix] Improve robustness to corrupted mtimes.
* [bugfix] Fix possible crash in db_exec_sql.
* [bugfix] Fix possible overflow when executing a custom archive command.
* [backup mode] Clean all non-printable characters in backend path.
* [pkg] libattr-devel is now mandatory to build robinhood.
2.5.4 release notes:
* "innodb = enabled/disabled": this parameter will be deprecated.
It has to be replaced by "engine = innodb".
* (Lustre only) one of the field types changed in the DB.
It will be automatically converted the first time rbh 2.5.4 starts.
The conversion takes about 5s per million entries.
* Admin guides are now available online (http://robinhood.sf.net > "Online documentation")
"odt" and "pdf" versions are no longer maintained.
Changes between version 2.5.2 and 2.5.3:
- custom purge_command (fix): fixed vulnerability to malicious file names.
- changelog processing (fix): fixed errors 'Entry has incomplete path in DB'
in some case of rm/create patterns.
- migration policy (fix): don't trigger copy of files that no longer exist.
- rbh-config (feature): new option 'reset_acct' to rebuild accounting info.
- changelog reader (feature): new parameter 'dump_file' to dump all incoming
changelog records to a file.
- Port to Lustre 2.6.
Changes between version 2.5.1 and 2.5.2:
- rbh-du: fixed major performance regression (since v2.5.0).
- rbh-find: fixed occasional crash.
- HSM and backup modes: fixed a risk of removing an existing entry from the backend
(in some situations of hardlink/rename+unlink).
- backup mode: optimized sendfile()-based copy (Linux kernel >= 2.6.33).
- logs: avoid flood of log messages in case of DB connection error.
- alerts: added host name to alert mail title.
- rbh-config empty_db/repair_db: also manage/fix stored procedures.
- cosmetic: fix wrong display of purged blocks for count-based triggers.
- cosmetic: fix migration counter display.
- init script: check that 'ulimit -s' is reasonable.
- fixed build dependancies on Fedora19 and Fedora20.
- code sanity: fixed many 'coverity' warnings + a couple of minor memleaks.
- doc: details about RPM installation locations.
- doc: detail of 'backend' paramaters for backup mode.
Changes between version 2.5.0 and 2.5.1:
- entry processing (major fix): fixed deadlock when the pipeline is full
and an entry with an unknown parent is encountered.
- purge (enhancement): start purging data from the most used OSTs.
- rbh-find (features): new options: -pool, -exec, -print, -nouser, -nogroup, -lsost
- rbh-find (optimization): automatically switch to bulk DB request mode when
command argument is filesystem root (+new option -nobulk to disable it).
- logging (enhancement): new config parameters to control log header format
- backup (feature): allow compressing data in archive.
- backup (fix): wrong path in archive when robinhood root directory != mount point.
- backup (fix): fix segfault when importing a single file with a FID-ending name.
Changes in version 2.5.0:
Summary:
- filesystem disaster recovery features
- new namespace management (new DB schema to properly handle hardlinks, renames...)
- scanning and changelog processing optimizations
- database optimizations (requests batching)
- many other changes, improvements and code cleaning...
Details:
- rbh-diff:
* new command to detect differences between the filesystem and the information
in robinhood database.
* option "--apply=fs" for disaster recovery purpose: restore the filesystem
metadata from robinhood DB.
* makes it possible to rebuild a Lustre MDT from scratch, or from a LVM snapshot
(see "Robinhood Lustre disaster recovery guide" for more details).
- database:
* new namespace implementation in database with new NAMES table (Cray contribution)
- fixes/improves hardlink support
- fixes/improves Lustre ChangeLog hardlink/rename/unlink support
- saves DB storage space
* database request batching: significantly increase database ingest rate.
No longer needs innodb_flush_log_at_tx_commit != 1 to speed up DB operations.
* additional information in DB that can help for disaster recovery:
symlink info, access rights, stripe object indexes, stripe order, nlink...
* set default commit behavior to transaction (prevent from DB inconsistencies)
* optimized multi-table requests
* optimization: minimized attribute set in DB update operations
(don't update attributes that didn't change)
* Fix: deal with mysql case insensitivity for string matching
* triggers and stored procedures versioning mechanism
* prevent from overflows for large INSERT requests, wide stripes...
* prevent from DB deadlocks
- scanning:
* --partial-scan option is deprecated and replaced by an optional argument to --scan (e.g. --scan=/fs/subdir).
* better management of partial scans:
- better detection of removed entries vs. entries moved from a directory to another.
- partial scans can be used for initial DB population (even if the DB is initially empty).
* garbage collection of removed entries in DB is a long operation when terminating a scan (and even more
when terminating a partial scan). Added --no-gc option to skip it (recommanded for partial scans).
* automatically enabling --no-gc if the DB is initially empty (eg. for initial scan).
* optimization: use *at() functions (openat, fstatat) and readdir by chunk (using getdents) instead of POSIX lstat() and readdir_r().
* optimization: use NOATIME flag to access entries as much as possible
* optimizations of get_stripe and get_fid operations.
* new --diff option for robinhood --scan and --readlog: output detected changes in a diff-like format.
- Lustre changelogs:
* changelog batching (Cray contribution): to speed up changelog processing,
robinhood retains changelog records in memory a short time,
to aggregate similar/redundant Changelog records on the same entry before
updating its database.
* support multiple changelog readers (for DNE) as multiple threads (default)
or as multiple processes, possibly on different hosts, by giving a MDT index
to --readlog option.
* resilience to filesystem umount/mount.
- rbh-report:
* new option --entry-info to get all the stored information about an entry
* option --dump-ost can now list multiple OSTs and support ranges notation (e.g. 3,5-8,12-23).
* --dump-ost output indicates if a file has data on a given OST (could be striped on the OST but have no data on it).
- rbh-find:
* new option -crtime to filter entries on creation time.
* output ordering closer to find output
* added missing info in 'rbh-find -ls' output (nlink, mode, symlink info...)
- robinhood-backup:
* by default, use a built-in copy function to avoid the cost of forking copy commands.
* rbh-backup-rebind: tool to rebind an entry in the backend if its fid changed in the filesystem
for any reason (file copied to a new one to change its stripe, etc...)
* rbh-backup-recov new features and options:
--list (list information about entries to be recovered)
--ost <ost_set> to only recover entries for a given set of OSTs (support range notation):
the basic use-case is OST disaster recovery.
--since <time> to only recover entries modified since a given date:
the basic use case is after restoring an OST snapshot.
* symlinks archiving to backend made optional (new parameter 'archive_symlinks')
as they can now be restored using robinhood database information.
- configuration:
* can specify environment variables in config file (e.g. fs_path = $ROOT_DIR ;)
* prevent from using a wrong config file (Cray contribution):
- only check files in /etc/robinhood.d/<purpose>, no longer in the current directory
- fails if to many config files are available.
Changes between version 2.4.2 and 2.4.3:
* [lustre] support of Lustre 2.4
- DNE not fully supported yet: if running multiple MDS,
run 1 instance of changelog reader per MDT.
- Detect file layout changes (new changelog record CL_LAYOUT).
* [lustre] added statistics about changelog processing speed.
* [policies] new parameter 'recheck_ignored_classes' to allow/avoid
rematching entries from ignored classes in migration and purge policies.
* [web ui] security patch to prevent from SQL injection.
* [lustre] fix stack overflow when handling files with wide stripes.
* [DB] better handling of ER_QUERY_INTERRUPTED MySQL error.
* [DB] fixed DB connection leaks.
* Backup & HSM modes:
- [fix] fix segfault in import command when uid/gid can't be resolved.
- [rbh-report] fix bad display of total volume with -u or -g.
* Migration policy features and optimizations:
- [feature] new parameter 'lru_sort_attr' to select LRU sort criteria for policy application.
Previously based on last modification time, it can now be one of:
creation, last_archive, last_mod, last_access.
- [feature] special meaning for condition 'last_archive == 0':
matches entries that have never been archived.
- [feature] suspend migration if copy error rate exceed a threshold.
This is controled by 'suspend_error_pct' and 'suspend_error_min' parameters.
- [stats] migration stats while migration is running: added skipped and error counters.
- [optim] avoid rechecking ignored entries at each pass
- [optim] smoother feeding of migration workers queue
* Code & environment:
- [build] can specify a path to alternative lustre source tree in ./configure
- [tests] allow specifying an alternative path to lfs command
Changes between version 2.4.1 and 2.4.2:
* [general] immediate exit on ctrl+C: don't process all queued operations, just finish current.
* [general] LSB compliance if daemon is already started.
* [DB] validation with MariaDB (replacement for MySQL in Fedora19).
* [config] can set default config file using RBH_CFG_DEFAULT environment variable.
* [config] more precise message if no config file is found.
* [rbh-find] added -not/-! option to rbh-find.
* [lustre] fix for 16 chars pool names.
* [bugfix] fixed memleak in rbh-find.
* [bugfix] fixed segfault if checking scan deadline occured exactly when scan ended.
* [logs] display bandwidth and rate stats during migration run.
* [logs] fix: DB get operations were counted twice in stats.
* [cosmetic] removed "connection failed" warning for one shot commands.
* [cosmetic] fix typos in logs.
* [devel] port to automake 1.12 (since Fedora18).
Changes between version 2.4.0 and 2.4.1:
* [lustre] better file size change detection using CLOSE events
from MDT ChangeLog (requires Lustre 2.2 or +)
* [scan] optimization: using fstatat and getdents
* [rbh-find] added -atime/-amin options
* [logs] add'l information in logs (DB operations, HSM_rm details)
* [logs] log to stderr if opening of the log file fails
* [fix] scan blocked if final DB operation failed
* [fix] avoid DB lock exhaustion for huge requests
* [backup] manage cross device rename in backend
* [backup] rebind an entry in backend after fid change (e.g. restripe)
New features in robinhood 2.4:
* rbh-du and rbh-find: "du" and "find" clones querying robinhood's database
Faster way to search for entries in a filesystem!
Performance comparison for a 1 million entries Lustre v2 filesystem
find /lustre -user foo -type f -size -32M -ls
(no possible criteria on OST index)
> 58m13s
lfs find /lustre -user foo -type f --obd lustre-OST0001
(no possible criteria on size)
> 20m46s
rbh-find /lustre -user foo -type f -size -32M -ost 1 -ls
> 1.2s
* Directory reporting: top directories per dirent count, per avg file size
(useful for small file hunting)
* File size profiling: global, per user, per group, per fileclass...
(+additional section in webUI)
* Sorting user/groups by size range (eg. percentage of files < 1G)
(useful for small file hunting)
* Partial scans to update only a subset of the filesystem.
=> allow distributed scans by splitting the namespace into
partial scans running on multiple clients.
Other changes in 2.4.0:
* [packaging] rpm name 'robinhood-tmp_fs_mgr' changed to 'robinhood-tmpfs'
* [packaging] 'rbh-config' command moved to new RPM 'robinhood-adm'
* [report] refurbished rbh-report output format
* [policies] new criteria on file creation time
* [database] use innodb by default for MySQL engine
* [system] ability to detect "fake mtime" (mtime != actual modification time)
* [system] improved filesystem detection,
using fsname or devid as FS identifier (config driven)
* [scan] can trigger external completion command when a scan ends
* [misc.] can use short config name instead of full path
(eg. "-f <name>" instead of "-f /full/path/to/name.conf")
* [backup] directory and symlink recovery
* [lustre] port to Lustre 2.2 and 2.3
* [lustre] support for new Changelog record struct (lu-1331)
* [fix] max_rm_count=0 resulted in no rm (instead of unlimited)
* [fix] segfault in realpath() on Ubuntu
* [fix] unsigned arithmetic issue with MySQL 5.5
Changes between version 2.3.3 and 2.3.4:
- Faster and safer shutdown on SIGINT/SIGTERM
- Can use short config name instead of full config file path.
E.g. "-f myconf" instead of "-f /etc/robinhood.d/tmp_fs/myconf.cfg"
- Consider all non-dirs for classinfo (instead of files only)
- Implemented max_rm_count in hsm remove policy
- clearer messages about DB connection and retries
- added lu543 configure option (must be enabled if this patch
is integrated to your Lustre distribution)
- Better block counting for purges
- backup/shook modes:
- import of existing files from backend
- entry state set to 'archive_running' during migration
- recovery for entries with 'release pending' or 'restore running' state on startup
(new parameter: check_purge_status_on_startup)
- enable DB rebuild if it is lost
- fix: symlink recovery
- improvements of rbhext_tool_clnt/svr (timeout, traces, ...)
- user.shook_state xattr changed to security.shook_state
(to avoid users to change it)
- Fix: Don't consider 'released' entries for quota-like purge triggers
- Fix: migrate-group did migrate user
- Generate up-to-date template automatically at RPM installation
- 72 new regression tests (all policies conditions and config file parameters are tested)
Changes between version 2.3.2 and 2.3.3:
[webgui]
- added FS name to page title and page header
- added missing file in RPM (.htaccess)
[reports]
- new options for top-users/top-groups: --by-avgsize, --count-min, --reverse
- Lustre changelog stats in 'rbh-report -a'
[policies]
- fix: 'tree' condition must match root entry
- fix: migration class matching at scan time
[config]
- simpler parameter 'scan_interval'
- fix: don't reload config of disabled modules on SIGHUP
- fix: on SIGHUP, don't reload parameters specified on cmd line
[database]
- retry on connection failure
[stats]
- dump process stats on SIGUSR1
[backup]
- clean special chars in archive names
- fix issues in symlink archiving
[lustre]
- specific compilation option for jira's LU-543
[misc]
- code cleaning, sanity checks, improved traces...
Changes between version 2.3.1 and 2.3.2:
- [webgui] Web interface (beta)
- [quota/alerts] Implemented quota alerts on inode count (users and groups)
- [reporting] New option --by-count for --top-users, to sort users by entry count
- [database] Support of InnoDB MySQL engine
- [database] MySQL 4 compatibility fix
- [bugfix](minor) handling DB deadlock error
- [bugfix](tweak) added acct parameters to default and template outputs
- [testing] big tests with 1M entries
- [backup] about backup mode (beta):
- [bugfix](major) fixed error determining symlink status
- [bugfix](minor) don't consider 'new' entries in deferred removal
- [trace] display warning if mtime in FS < mtime in backend
Changes between version 2.3.0 and 2.3.1:
- [bugfix](major) Wrong accounting values if file owner changes
- [bugfix](major) SQL error for widely striped files
- [compat] Compatibility fix for MySQL servers between 5.0.0 and 5.0.32
Changes between version 2.2.3 and 2.3.0:
- [optim.] instant accounting reports (user/group usage, fs content summary, ...)
- [reporting] split user usage per group (--split-user-groups option)
- [reporting] split group usage per user (--split-user-groups option)
- [feature] new policy criteria for Lustre FileSystems: ost_index
- [reporting] detailed FS scan statistics in "rbh-report -a"
- [misc.] fast and clean abort on ctrl^c (during scan, migration and purge)
- [admin.] automatically disables features that are not defined in config file
- [admin.] "rbh-config backup_db" helper to create a robinhood DB backup
- [misc.] -V option displays Lustre version and release number
- [tweak] changed 'watermark' parameters to 'threshold'
- [tweak] changed 'notify_lw' and 'alert_hw' parameters to 'alert_low' and 'alert_high'
- [database] alternative port or socket file can be used for MySQL connection
- [database] limiting DB access rights for reporting command
- [bugfix](major) fixed inconsistent pool names
- [bugfix](minor) kill -HUP terminated the process if no trigger was defined
- [bugfix](minor) 'unknown' status not correctly filtered in '--dump-status' report
- [bugfix](tweak) added 'reload' in short help of SLES init script
- [misc.] code cleaning, error message cleaning, removed some obsolete code
- [feature] new robinhood flavor to track modifications in a Lustre v2 filesystem, and backup data to an external storage (current status: Alpha testing only).
As part of this feature:
- soft rm + command to retrieve removed files
- disaster recovery command
- "--migrate-file" option to archive a single file
- pre-maintenance mode to smoothly backup the whole filesystem content before a due date.
Changes between version 2.2.2 and 2.2.3:
- [feature] periodic purge trigger
- [feature] options for controlling trigger notifications
- [doc] pdf documentation updated
Changes between version 2.2.1 and 2.2.2:
- [bugfix] (major) fixed "duplicate key" errors
- [bugfix] (major) FS scan sometimes blocks on Lustre 2
- [misc.] integration to automatic testing suite (Hudson)
Changes between version 2.2.0 and 2.2.1:
- [feature] new purge command: --purge-class to apply purge policy on files in a given class
- [feature] new migration command: --migrate-class to apply migration policy on files in a given class
- [feature] support of syslog for logging
- [report cmd] Added summary line to all reports, with total nbr entries and volume.
- [report cmd] Added '-q' option to hide headers and footers in reports.
- [optim.] changed primary key format to reduce DB requests
- [misc.] new command 'repair_db' in rbh-config, to fix tables after a MySQL server crash.
- [compat.] Support for Lustre MDT changelogs on Lustre v2.0 final
- [compat.] port to FreeBSD
- [admin] added 'reload' action to init.d script
- [misc.] a gap in OST index list should displays a warning, not an error
- [pkg] common spec file for both el4, el5 and el6
- [bugfix] handling large UNIX groups (>4k) and long lists of alt groups.
- [bugfix] retrieving Lustre pool fails with error "Unsupported Lustre magic number"
- [bugfix] wrong class matching on OST pools when scanning
- [bugfix] unescaped SQL strings caused error for filenames with single quotes
- [bugfix] error in init script when RBH_OPT contains several options
Changes between version 2.1.5 and 2.2.0:
- [feature] fileclass union/intersection/negation
- [feature] rbh-report displays last matched fileclass
- [feature] new reporting command '--class-info' generates fileclass summary
- [feature] new reporting option '--filter-class' to dump entries per fileclass
- [feature] alert batching: send a mail summary instead of 1 mail per matching entry
- [feature] alert improvements: named alerts, tweak changes
- [feature] special wildcard '**' in 'path ' or 'tree' conditions matches any count of directory levels
- [feature] quota-like purge triggers fully implemented (on group or user)
- [feature] triggers on used inode count in filesystem
- [feature] '--check-triggers' option to check triggers without purging files
- [feature] notification can be sent when a high watermark is reached (for triggers)
- [feature] rbh-config helper now supports batch commands
- [feature] Lustre 2.0 ready
- [optim.] configurable fileclass periodic matching to reduce calls to filesystem
- [optim.] configurable attr/path periodic update in DB to reduce calls to filesystem
- [bugfix] explicit trace when readdir fails
- [bugfix] issue when filtering on fields with NULL values in DB
- [bugfix] check migration timeout on last effective action, not on last queued entry
- [bugfix] name-based conditions complaining about missing auto-generated fields
- [bugfix] race condition when appplying policy lead to handle the same entry several times
- [bugfix] removing removed directories from database for recursive rmdir policies
- [misc.] added documented file in /etc/sysconfig for robinhood service parameters
- [misc.] changing source directory layout
- [misc.] documentation update
Changes between version 2.1.4 and 2.1.5:
- Major bug fix: incomplete database content after scan
Changes between version 2.1.3 and 2.1.4:
- New recursive rmdir policy (for TMP_FS_MGR purpose)
- changed default value for max_pending_operations
(unlimited value could result in excessive memory usage)
- removing useless fields and redundant information in database
- rh-* commands renamed to rbh-*, to avoid conflicts and confusions
with RedHat commands.
- check conflicting flags in configure
Changes between version 2.1.2 and 2.1.3:
- SQLite support (should only be used for testing purpose or small filesystems)
- Support of relative paths in 'path' and 'tree' conditions
- Migration timeout mechanism
- Prompting for database admin password in rh-config script
Changes between version 2.1.1 and 2.1.2:
- New reporting commands: Dump all files (--dump-all) and dump files
by status (--dump-status).
- New configuration helper script: "rh-config"
- Made RPM relocatable
- BUG FIX: wrong scan duration when using volume-based purge triggers
- Lustre-HSM: Checking previous migrations status when restarting
- Lustre-HSM: CL_TIME record support (bz 19505)
- Lustre-HSM: multi-archive support (archive_num)
- Lustre-HSM: new --sync option (immediately archive all modified files)
- Lustre-HSM: changed --handle-events action switch to --readlog
- Fixed SLES portability issues
Changes between version 2.1.0.beta2 and 2.1.1:
- Added new report options: --dump-ost, --dump-user, --dump-group
- Added --filter-path option to reporting tool.
- TMP FS MGR purpose ported to Lustre 2.0-alpha5 (including changelog
support).
- documentation updates (in doc/admin_guides)
- Each purpose has its own service and binary names,
to make it possible to install and run several robinhood with
differents purposes on the same machine.
- Added '--disable-lustre' compilation switch for disabling Lustre specific
features
- Added '--disable-fid-support' compilation switch, to force addressing
entries by path, not by their Lustre fid.
- Integration of new purpose "SHERPA" (software suite for cache management)
- Generated RPM name includes lustre version it was built for.
- report command displays help if is started without option.
Changes between 2.1.0.beta1 and 2.1.0.beta2:
- Extended attributes support in policy definition
- 32 bits plateforms compatibility fixes
- Fixed bug when using mysql4
- Added parameter to force changelog polling
- Fixed minor compilation warning
- commands now search for config file in /etc/robinhood.d if no config file is
given on command line
Changes from v2.0.1 to 2.1.0.beta1:
- added '--dry-run' option instead of "simulation_mode" parameter in config file
- added '--once' option, to perform an single pass of a given policy or action
and exit (same as '--one-shot' option).
- Compatibility fixes for MySQL 4 and 5
- Fixed dependencies on lustre include files.
- Compatibility fixes for 32 bits platforms
Lustre-HSM specific features:
- Porting to the new changelog interface (handling changelog records as
structures instead of text, and using CHANGELOG_FLAG_FOLLOW
and CHANGELOG_FLAG_BLOCK options)
- Adapting to changes in changelog timestamp (secs+nano instead of jiffies)
- Use fid as primary key in database schema (for better performance)
- Added calls to llapi_hsm_request() to trigger migration, release, removal
in HSM.
- Customizable migration hints to be passed to the copytool
- Command line options to trigger manual migrations (by user, by OST...)
- Deferred removal in HSM
- Taking HSM file status into account (dirty, released, ...)
- HSM event support
- Changelog flag support (for UNLINK and HSM event)
- Added '--ignore-policies' option to perform migration/purge to all eligible
files without checking policy conditions.
Changes between v2.0-beta2 and v2.0.1:
- New policy definition semantics, using filesets
- Multiple fileset/policy associations
- Several changes in configuration syntax, to avoid confusions
- Support of OST pool names (on Lustre) for fileset definition and policies
- Optimizations of policy application
- Added features for Lustre-HSM
================================================
FILE: LICENSE.en.txt
================================================
Copyright CEA/DAM (2004-2016)
CeCILL-C FREE SOFTWARE LICENSE AGREEMENT
Notice
This Agreement is a Free Software license agreement that is the result
of discussions between its authors in order to ensure compliance with
the two main principles guiding its drafting:
* firstly, compliance with the principles governing the distribution
of Free Software: access to source code, broad rights granted to
users,
* secondly, the election of a governing law, French law, with which
it is conformant, both as regards the law of torts and
intellectual property law, and the protection that it offers to
both authors and holders of the economic rights over software.
The authors of the CeCILL-C (for Ce[a] C[nrs] I[nria] L[ogiciel] L[ibre])
license are:
Commissariat l'Energie Atomique - CEA, a public scientific, technical
and industrial research establishment, having its principal place of
business at 25 rue Leblanc, immeuble Le Ponant D, 75015 Paris, France.
Centre National de la Recherche Scientifique - CNRS, a public scientific
and technological establishment, having its principal place of business
at 3 rue Michel-Ange, 75794 Paris cedex 16, France.
Institut National de Recherche en Informatique et en Automatique -
INRIA, a public scientific and technological establishment, having its
principal place of business at Domaine de Voluceau, Rocquencourt, BP
105, 78153 Le Chesnay cedex, France.
Preamble
The purpose of this Free Software license agreement is to grant users
the right to modify and re-use the software governed by this license.
The exercising of this right is conditional upon the obligation to make
available to the community the modifications made to the source code of
the software so as to contribute to its evolution.
In consideration of access to the source code and the rights to copy,
modify and redistribute granted by the license, users are provided only
with a limited warranty and the software's author, the holder of the
economic rights, and the successive licensors only have limited liability.
In this respect, the risks associated with loading, using, modifying
and/or developing or reproducing the software by the user are brought to
the user's attention, given its Free Software status, which may make it
complicated to use, with the result that its use is reserved for
developers and experienced professionals having in-depth computer
knowledge. Users are therefore encouraged to load and test the
suitability of the software as regards their requirements in conditions
enabling the security of their systems and/or data to be ensured and,
more generally, to use and operate it in the same conditions of
security. This Agreement may be freely reproduced and published,
provided it is not altered, and that no provisions are either added or
removed herefrom.
This Agreement may apply to any or all software for which the holder of
the economic rights decides to submit the use thereof to its provisions.
Article 1 - DEFINITIONS
For the purpose of this Agreement, when the following expressions
commence with a capital letter, they shall have the following meaning:
Agreement: means this license agreement, and its possible subsequent
versions and annexes.
Software: means the software in its Object Code and/or Source Code form
and, where applicable, its documentation, "as is" when the Licensee
accepts the Agreement.
Initial Software: means the Software in its Source Code and possibly its
Object Code form and, where applicable, its documentation, "as is" when
it is first distributed under the terms and conditions of the Agreement.
Modified Software: means the Software modified by at least one
Integrated Contribution.
Source Code: means all the Software's instructions and program lines to
which access is required so as to modify the Software.
Object Code: means the binary files originating from the compilation of
the Source Code.
Holder: means the holder(s) of the economic rights over the Initial
Software.
Licensee: means the Software user(s) having accepted the Agreement.
Contributor: means a Licensee having made at least one Integrated
Contribution.
Licensor: means the Holder, or any other individual or legal entity, who
distributes the Software under the Agreement.
Integrated Contribution: means any or all modifications, corrections,
translations, adaptations and/or new functions integrated into the
Source Code by any or all Contributors.
Related Module: means a set of sources files including their
documentation that, without modification to the Source Code, enables
supplementary functions or services in addition to those offered by the
Software.
Derivative Software: means any combination of the Software, modified or
not, and of a Related Module.
Parties: mean both the Licensee and the Licensor.
These expressions may be used both in singular and plural form.
Article 2 - PURPOSE
The purpose of the Agreement is the grant by the Licensor to the
Licensee of a non-exclusive, transferable and worldwide license for the
Software as set forth in Article 5 hereinafter for the whole term of the
protection granted by the rights over said Software.
Article 3 - ACCEPTANCE
3.1 The Licensee shall be deemed as having accepted the terms and
conditions of this Agreement upon the occurrence of the first of the
following events:
* (i) loading the Software by any or all means, notably, by
downloading from a remote server, or by loading from a physical
medium;
* (ii) the first time the Licensee exercises any of the rights
granted hereunder.
3.2 One copy of the Agreement, containing a notice relating to the
characteristics of the Software, to the limited warranty, and to the
fact that its use is restricted to experienced users has been provided
to the Licensee prior to its acceptance as set forth in Article 3.1
hereinabove, and the Licensee hereby acknowledges that it has read and
understood it.
Article 4 - EFFECTIVE DATE AND TERM
4.1 EFFECTIVE DATE
The Agreement shall become effective on the date when it is accepted by
the Licensee as set forth in Article 3.1.
4.2 TERM
The Agreement shall remain in force for the entire legal term of
protection of the economic rights over the Software.
Article 5 - SCOPE OF RIGHTS GRANTED
The Licensor hereby grants to the Licensee, who accepts, the following
rights over the Software for any or all use, and for the term of the
Agreement, on the basis of the terms and conditions set forth hereinafter.
Besides, if the Licensor owns or comes to own one or more patents
protecting all or part of the functions of the Software or of its
components, the Licensor undertakes not to enforce the rights granted by
these patents against successive Licensees using, exploiting or
modifying the Software. If these patents are transferred, the Licensor
undertakes to have the transferees subscribe to the obligations set
forth in this paragraph.
5.1 RIGHT OF USE
The Licensee is authorized to use the Software, without any limitation
as to its fields of application, with it being hereinafter specified
that this comprises:
1. permanent or temporary reproduction of all or part of the Software
by any or all means and in any or all form.
2. loading, displaying, running, or storing the Software on any or
all medium.
3. entitlement to observe, study or test its operation so as to
determine the ideas and principles behind any or all constituent
elements of said Software. This shall apply when the Licensee
carries out any or all loading, displaying, running, transmission
or storage operation as regards the Software, that it is entitled
to carry out hereunder.
5.2 RIGHT OF MODIFICATION
The right of modification includes the right to translate, adapt,
arrange, or make any or all modifications to the Software, and the right
to reproduce the resulting software. It includes, in particular, the
right to create a Derivative Software.
The Licensee is authorized to make any or all modification to the
Software provided that it includes an explicit notice that it is the
author of said modification and indicates the date of the creation thereof.
5.3 RIGHT OF DISTRIBUTION
In particular, the right of distribution includes the right to publish,
transmit and communicate the Software to the general public on any or
all medium, and by any or all means, and the right to market, either in
consideration of a fee, or free of charge, one or more copies of the
Software by any means.
The Licensee is further authorized to distribute copies of the modified
or unmodified Software to third parties according to the terms and
conditions set forth hereinafter.
5.3.1 DISTRIBUTION OF SOFTWARE WITHOUT MODIFICATION
The Licensee is authorized to distribute true copies of the Software in
Source Code or Object Code form, provided that said distribution
complies with all the provisions of the Agreement and is accompanied by:
1. a copy of the Agreement,
2. a notice relating to the limitation of both the Licensor's
warranty and liability as set forth in Articles 8 and 9,
and that, in the event that only the Object Code of the Software is
redistributed, the Licensee allows effective access to the full Source
Code of the Software at a minimum during the entire period of its
distribution of the Software, it being understood that the additional
cost of acquiring the Source Code shall not exceed the cost of
transferring the data.
5.3.2 DISTRIBUTION OF MODIFIED SOFTWARE
When the Licensee makes an Integrated Contribution to the Software, the
terms and conditions for the distribution of the resulting Modified
Software become subject to all the provisions of this Agreement.
The Licensee is authorized to distribute the Modified Software, in
source code or object code form, provided that said distribution
complies with all the provisions of the Agreement and is accompanied by:
1. a copy of the Agreement,
2. a notice relating to the limitation of both the Licensor's
warranty and liability as set forth in Articles 8 and 9,
and that, in the event that only the object code of the Modified
Software is redistributed, the Licensee allows effective access to the
full source code of the Modified Software at a minimum during the entire
period of its distribution of the Modified Software, it being understood
that the additional cost of acquiring the source code shall not exceed
the cost of transferring the data.
5.3.3 DISTRIBUTION OF DERIVATIVE SOFTWARE
When the Licensee creates Derivative Software, this Derivative Software
may be distributed under a license agreement other than this Agreement,
subject to compliance with the requirement to include a notice
concerning the rights over the Software as defined in Article 6.4.
In the event the creation of the Derivative Software required modification
of the Source Code, the Licensee undertakes that:
1. the resulting Modified Software will be governed by this Agreement,
2. the Integrated Contributions in the resulting Modified Software
will be clearly identified and documented,
3. the Licensee will allow effective access to the source code of the
Modified Software, at a minimum during the entire period of
distribution of the Derivative Software, such that such
modifications may be carried over in a subsequent version of the
Software; it being understood that the additional cost of
purchasing the source code of the Modified Software shall not
exceed the cost of transferring the data.
5.3.4 COMPATIBILITY WITH THE CeCILL LICENSE
When a Modified Software contains an Integrated Contribution subject to
the CeCILL license agreement, or when a Derivative Software contains a
Related Module subject to the CeCILL license agreement, the provisions
set forth in the third item of Article 6.4 are optional.
Article 6 - INTELLECTUAL PROPERTY
6.1 OVER THE INITIAL SOFTWARE
The Holder owns the economic rights over the Initial Software. Any or
all use of the Initial Software is subject to compliance with the terms
and conditions under which the Holder has elected to distribute its work
and no one shall be entitled to modify the terms and conditions for the
distribution of said Initial Software.
The Holder undertakes that the Initial Software will remain ruled at
least by this Agreement, for the duration set forth in Article 4.2.
6.2 OVER THE INTEGRATED CONTRIBUTIONS
The Licensee who develops an Integrated Contribution is the owner of the
intellectual property rights over this Contribution as defined by
applicable law.
6.3 OVER THE RELATED MODULES
The Licensee who develops a Related Module is the owner of the
intellectual property rights over this Related Module as defined by
applicable law and is free to choose the type of agreement that shall
govern its distribution under the conditions defined in Article 5.3.3.
6.4 NOTICE OF RIGHTS
The Licensee expressly undertakes:
1. not to remove, or modify, in any manner, the intellectual property
notices attached to the Software;
2. to reproduce said notices, in an identical manner, in the copies
of the Software modified or not;
3. to ensure that use of the Software, its intellectual property
notices and the fact that it is governed by the Agreement is
indicated in a text that is easily accessible, specifically from
the interface of any Derivative Software.
The Licensee undertakes not to directly or indirectly infringe the
intellectual property rights of the Holder and/or Contributors on the
Software and to take, where applicable, vis--vis its staff, any and all
measures required to ensure respect of said intellectual property rights
of the Holder and/or Contributors.
Article 7 - RELATED SERVICES
7.1 Under no circumstances shall the Agreement oblige the Licensor to
provide technical assistance or maintenance services for the Software.
However, the Licensor is entitled to offer this type of services. The
terms and conditions of such technical assistance, and/or such
maintenance, shall be set forth in a separate instrument. Only the
Licensor offering said maintenance and/or technical assistance services
shall incur liability therefor.
7.2 Similarly, any Licensor is entitled to offer to its licensees, under
its sole responsibility, a warranty, that shall only be binding upon
itself, for the redistribution of the Software and/or the Modified
Software, under terms and conditions that it is free to decide. Said
warranty, and the financial terms and conditions of its application,
shall be subject of a separate instrument executed between the Licensor
and the Licensee.
Article 8 - LIABILITY
8.1 Subject to the provisions of Article 8.2, the Licensee shall be
entitled to claim compensation for any direct loss it may have suffered
from the Software as a result of a fault on the part of the relevant
Licensor, subject to providing evidence thereof.
8.2 The Licensor's liability is limited to the commitments made under
this Agreement and shall not be incurred as a result of in particular:
(i) loss due the Licensee's total or partial failure to fulfill its
obligations, (ii) direct or consequential loss that is suffered by the
Licensee due to the use or performance of the Software, and (iii) more
generally, any consequential loss. In particular the Parties expressly
agree that any or all pecuniary or business loss (i.e. loss of data,
loss of profits, operating loss, loss of customers or orders,
opportunity cost, any disturbance to business activities) or any or all
legal proceedings instituted against the Licensee by a third party,
shall constitute consequential loss and shall not provide entitlement to
any or all compensation from the Licensor.
Article 9 - WARRANTY
9.1 The Licensee acknowledges that the scientific and technical
state-of-the-art when the Software was distributed did not enable all
possible uses to be tested and verified, nor for the presence of
possible defects to be detected. In this respect, the Licensee's
attention has been drawn to the risks associated with loading, using,
modifying and/or developing and reproducing the Software which are
reserved for experienced users.
The Licensee shall be responsible for verifying, by any or all means,
the suitability of the product for its requirements, its good working
order, and for ensuring that it shall not cause damage to either persons
or properties.
9.2 The Licensor hereby represents, in good faith, that it is entitled
to grant all the rights over the Software (including in particular the
rights set forth in Article 5).
9.3 The Licensee acknowledges that the Software is supplied "as is" by
the Licensor without any other express or tacit warranty, other than
that provided for in Article 9.2 and, in particular, without any warranty
as to its commercial value, its secured, safe, innovative or relevant
nature.
Specifically, the Licensor does not warrant that the Software is free
from any error, that it will operate without interruption, that it will
be compatible with the Licensee's own equipment and software
configuration, nor that it will meet the Licensee's requirements.
9.4 The Licensor does not either expressly or tacitly warrant that the
Software does not infringe any third party intellectual property right
relating to a patent, software or any other property right. Therefore,
the Licensor disclaims any and all liability towards the Licensee
arising out of any or all proceedings for infringement that may be
instituted in respect of the use, modification and redistribution of the
Software. Nevertheless, should such proceedings be instituted against
the Licensee, the Licensor shall provide it with technical and legal
assistance for its defense. Such technical and legal assistance shall be
decided on a case-by-case basis between the relevant Licensor and the
Licensee pursuant to a memorandum of understanding. The Licensor
disclaims any and all liability as regards the Licensee's use of the
name of the Software. No warranty is given as regards the existence of
prior rights over the name of the Software or as regards the existence
of a trademark.
Article 10 - TERMINATION
10.1 In the event of a breach by the Licensee of its obligations
hereunder, the Licensor may automatically terminate this Agreement
thirty (30) days after notice has been sent to the Licensee and has
remained ineffective.
10.2 A Licensee whose Agreement is terminated shall no longer be
authorized to use, modify or distribute the Software. However, any
licenses that it may have granted prior to termination of the Agreement
shall remain valid subject to their having been granted in compliance
with the terms and conditions hereof.
Article 11 - MISCELLANEOUS
11.1 EXCUSABLE EVENTS
Neither Party shall be liable for any or all delay, or failure to
perform the Agreement, that may be attributable to an event of force
majeure, an act of God or an outside cause, such as defective
functioning or interruptions of the electricity or telecommunications
networks, network paralysis following a virus attack, intervention by
government authorities, natural disasters, water damage, earthquakes,
fire, explosions, strikes and labor unrest, war, etc.
11.2 Any failure by either Party, on one or more occasions, to invoke
one or more of the provisions hereof, shall under no circumstances be
interpreted as being a waiver by the interested Party of its right to
invoke said provision(s) subsequently.
11.3 The Agreement cancels and replaces any or all previous agreements,
whether written or oral, between the Parties and having the same
purpose, and constitutes the entirety of the agreement between said
Parties concerning said purpose. No supplement or modification to the
terms and conditions hereof shall be effective as between the Parties
unless it is made in writing and signed by their duly authorized
representatives.
11.4 In the event that one or more of the provisions hereof were to
conflict with a current or future applicable act or legislative text,
said act or legislative text shall prevail, and the Parties shall make
the necessary amendments so as to comply with said act or legislative
text. All other provisions shall remain effective. Similarly, invalidity
of a provision of the Agreement, for any reason whatsoever, shall not
cause the Agreement as a whole to be invalid.
11.5 LANGUAGE
The Agreement is drafted in both French and English and both versions
are deemed authentic.
Article 12 - NEW VERSIONS OF THE AGREEMENT
12.1 Any person is authorized to duplicate and distribute copies of this
Agreement.
12.2 So as to ensure coherence, the wording of this Agreement is
protected and may only be modified by the authors of the License, who
reserve the right to periodically publish updates or new versions of the
Agreement, each with a separate number. These subsequent versions may
address new issues encountered by Free Software.
12.3 Any Software distributed under a given version of the Agreement may
only be subsequently distributed under the same version of the Agreement
or a subsequent version.
Article 13 - GOVERNING LAW AND JURISDICTION
13.1 The Agreement is governed by French law. The Parties agree to
endeavor to seek an amicable solution to any disagreements or disputes
that may arise during the performance of the Agreement.
13.2 Failing an amicable solution within two (2) months as from their
occurrence, and unless emergency proceedings are necessary, the
disagreements or disputes shall be referred to the Paris Courts having
jurisdiction, by the more diligent Party.
Version 1.0 dated 2006-09-05.
================================================
FILE: LICENSE.fr.txt
================================================
Copyright CEA/DAM (2004-2013)
CONTRAT DE LICENCE DE LOGICIEL LIBRE CeCILL-C
Avertissement
Ce contrat est une licence de logiciel libre issue d'une concertation
entre ses auteurs afin que le respect de deux grands principes prside
sa rdaction:
* d'une part, le respect des principes de diffusion des logiciels
libres: accs au code source, droits tendus confrs aux
utilisateurs,
* d'autre part, la dsignation d'un droit applicable, le droit
franais, auquel elle est conforme, tant au regard du droit de la
responsabilit civile que du droit de la proprit intellectuelle
et de la protection qu'il offre aux auteurs et titulaires des
droits patrimoniaux sur un logiciel.
Les auteurs de la licence CeCILL-C (pour Ce[a] C[nrs] I[nria] L[ogiciel]
L[ibre]) sont:
Commissariat l'Energie Atomique - CEA, tablissement public de
recherche caractre scientifique, technique et industriel, dont le
sige est situ 25 rue Leblanc, immeuble Le Ponant D, 75015 Paris.
Centre National de la Recherche Scientifique - CNRS, tablissement
public caractre scientifique et technologique, dont le sige est
situ 3 rue Michel-Ange, 75794 Paris cedex 16.
Institut National de Recherche en Informatique et en Automatique -
INRIA, tablissement public caractre scientifique et technologique,
dont le sige est situ Domaine de Voluceau, Rocquencourt, BP 105, 78153
Le Chesnay cedex.
Prambule
Ce contrat est une licence de logiciel libre dont l'objectif est de
confrer aux utilisateurs la libert de modifier et de rutiliser le
logiciel rgi par cette licence.
L'exercice de cette libert est assorti d'une obligation de remettre
la disposition de la communaut les modifications apportes au code
source du logiciel afin de contribuer son volution.
L'accessibilit au code source et les droits de copie, de modification
et de redistribution qui dcoulent de ce contrat ont pour contrepartie
de n'offrir aux utilisateurs qu'une garantie limite et de ne faire
peser sur l'auteur du logiciel, le titulaire des droits patrimoniaux et
les concdants successifs qu'une responsabilit restreinte.
A cet gard l'attention de l'utilisateur est attire sur les risques
associs au chargement, l'utilisation, la modification et/ou au
dveloppement et la reproduction du logiciel par l'utilisateur tant
donn sa spcificit de logiciel libre, qui peut le rendre complexe
manipuler et qui le rserve donc des dveloppeurs ou des
professionnels avertis possdant des connaissances informatiques
approfondies. Les utilisateurs sont donc invits charger et tester
l'adquation du logiciel leurs besoins dans des conditions permettant
d'assurer la scurit de leurs systmes et/ou de leurs donnes et, plus
gnralement, l'utiliser et l'exploiter dans les mmes conditions de
scurit. Ce contrat peut tre reproduit et diffus librement, sous
rserve de le conserver en l'tat, sans ajout ni suppression de clauses.
Ce contrat est susceptible de s'appliquer tout logiciel dont le
titulaire des droits patrimoniaux dcide de soumettre l'exploitation aux
dispositions qu'il contient.
Article 1 - DEFINITIONS
Dans ce contrat, les termes suivants, lorsqu'ils seront crits avec une
lettre capitale, auront la signification suivante:
Contrat: dsigne le prsent contrat de licence, ses ventuelles versions
postrieures et annexes.
Logiciel: dsigne le logiciel sous sa forme de Code Objet et/ou de Code
Source et le cas chant sa documentation, dans leur tat au moment de
l'acceptation du Contrat par le Licenci.
Logiciel Initial: dsigne le Logiciel sous sa forme de Code Source et
ventuellement de Code Objet et le cas chant sa documentation, dans
leur tat au moment de leur premire diffusion sous les termes du Contrat.
Logiciel Modifi: dsigne le Logiciel modifi par au moins une
Contribution Intgre.
Code Source: dsigne l'ensemble des instructions et des lignes de
programme du Logiciel et auquel l'accs est ncessaire en vue de
modifier le Logiciel.
Code Objet: dsigne les fichiers binaires issus de la compilation du
Code Source.
Titulaire: dsigne le ou les dtenteurs des droits patrimoniaux d'auteur
sur le Logiciel Initial.
Licenci: dsigne le ou les utilisateurs du Logiciel ayant accept le
Contrat.
Contributeur: dsigne le Licenci auteur d'au moins une Contribution
Intgre.
Concdant: dsigne le Titulaire ou toute personne physique ou morale
distribuant le Logiciel sous le Contrat.
Contribution Intgre: dsigne l'ensemble des modifications,
corrections, traductions, adaptations et/ou nouvelles fonctionnalits
intgres dans le Code Source par tout Contributeur.
Module Li: dsigne un ensemble de fichiers sources y compris leur
documentation qui, sans modification du Code Source, permet de raliser
des fonctionnalits ou services supplmentaires ceux fournis par le
Logiciel.
Logiciel Driv: dsigne toute combinaison du Logiciel, modifi ou non,
et d'un Module Li.
Parties: dsigne collectivement le Licenci et le Concdant.
Ces termes s'entendent au singulier comme au pluriel.
Article 2 - OBJET
Le Contrat a pour objet la concession par le Concdant au Licenci d'une
licence non exclusive, cessible et mondiale du Logiciel telle que
dfinie ci-aprs l'article 5 pour toute la dure de protection des droits
portant sur ce Logiciel.
Article 3 - ACCEPTATION
3.1 L'acceptation par le Licenci des termes du Contrat est rpute
acquise du fait du premier des faits suivants:
* (i) le chargement du Logiciel par tout moyen notamment par
tlchargement partir d'un serveur distant ou par chargement
partir d'un support physique;
* (ii) le premier exercice par le Licenci de l'un quelconque des
droits concds par le Contrat.
3.2 Un exemplaire du Contrat, contenant notamment un avertissement
relatif aux spcificits du Logiciel, la restriction de garantie et
la limitation un usage par des utilisateurs expriments a t mis
disposition du Licenci pralablement son acceptation telle que
dfinie l'article 3.1 ci dessus et le Licenci reconnat en avoir pris
connaissance.
Article 4 - ENTREE EN VIGUEUR ET DUREE
4.1 ENTREE EN VIGUEUR
Le Contrat entre en vigueur la date de son acceptation par le Licenci
telle que dfinie en 3.1.
4.2 DUREE
Le Contrat produira ses effets pendant toute la dure lgale de
protection des droits patrimoniaux portant sur le Logiciel.
Article 5 - ETENDUE DES DROITS CONCEDES
Le Concdant concde au Licenci, qui accepte, les droits suivants sur
le Logiciel pour toutes destinations et pour la dure du Contrat dans
les conditions ci-aprs dtailles.
Par ailleurs, si le Concdant dtient ou venait dtenir un ou
plusieurs brevets d'invention protgeant tout ou partie des
fonctionnalits du Logiciel ou de ses composants, il s'engage ne pas
opposer les ventuels droits confrs par ces brevets aux Licencis
successifs qui utiliseraient, exploiteraient ou modifieraient le
Logiciel. En cas de cession de ces brevets, le Concdant s'engage
faire reprendre les obligations du prsent alina aux cessionnaires.
5.1 DROIT D'UTILISATION
Le Licenci est autoris utiliser le Logiciel, sans restriction quant
aux domaines d'application, tant ci-aprs prcis que cela comporte:
1. la reproduction permanente ou provisoire du Logiciel en tout ou
partie par tout moyen et sous toute forme.
2. le chargement, l'affichage, l'excution, ou le stockage du
Logiciel sur tout support.
3. la possibilit d'en observer, d'en tudier, ou d'en tester le
fonctionnement afin de dterminer les ides et principes qui sont
la base de n'importe quel lment de ce Logiciel; et ceci,
lorsque le Licenci effectue toute opration de chargement,
d'affichage, d'excution, de transmission ou de stockage du
Logiciel qu'il est en droit d'effectuer en vertu du Contrat.
5.2 DROIT DE MODIFICATION
Le droit de modification comporte le droit de traduire, d'adapter,
d'arranger ou d'apporter toute autre modification au Logiciel et le
droit de reproduire le logiciel en rsultant. Il comprend en particulier
le droit de crer un Logiciel Driv.
Le Licenci est autoris apporter toute modification au Logiciel sous
rserve de mentionner, de faon explicite, son nom en tant qu'auteur de
cette modification et la date de cration de celle-ci.
5.3 DROIT DE DISTRIBUTION
Le droit de distribution comporte notamment le droit de diffuser, de
transmettre et de communiquer le Logiciel au public sur tout support et
par tout moyen ainsi que le droit de mettre sur le march titre
onreux ou gratuit, un ou des exemplaires du Logiciel par tout procd.
Le Licenci est autoris distribuer des copies du Logiciel, modifi ou
non, des tiers dans les conditions ci-aprs dtailles.
5.3.1 DISTRIBUTION DU LOGICIEL SANS MODIFICATION
Le Licenci est autoris distribuer des copies conformes du Logiciel,
sous forme de Code Source ou de Code Objet, condition que cette
distribution respecte les dispositions du Contrat dans leur totalit et
soit accompagne:
1. d'un exemplaire du Contrat,
2. d'un avertissement relatif la restriction de garantie et de
responsabilit du Concdant telle que prvue aux articles 8
et 9,
et que, dans le cas o seul le Code Objet du Logiciel est redistribu,
le Licenci permette un accs effectif au Code Source complet du
Logiciel pendant au moins toute la dure de sa distribution du Logiciel,
tant entendu que le cot additionnel d'acquisition du Code Source ne
devra pas excder le simple cot de transfert des donnes.
5.3.2 DISTRIBUTION DU LOGICIEL MODIFIE
Lorsque le Licenci apporte une Contribution Intgre au Logiciel, les
conditions de distribution du Logiciel Modifi en rsultant sont alors
soumises l'intgralit des dispositions du Contrat.
Le Licenci est autoris distribuer le Logiciel Modifi sous forme de
code source ou de code objet, condition que cette distribution
respecte les dispositions du Contrat dans leur totalit et soit
accompagne:
1. d'un exemplaire du Contrat,
2. d'un avertissement relatif la restriction de garantie et de
responsabilit du Concdant telle que prvue aux articles 8
et 9,
et que, dans le cas o seul le code objet du Logiciel Modifi est
redistribu, le Licenci permette un accs effectif son code source
complet pendant au moins toute la dure de sa distribution du Logiciel
Modifi, tant entendu que le cot additionnel d'acquisition du code
source ne devra pas excder le simple cot de transfert des donnes.
5.3.3 DISTRIBUTION DU LOGICIEL DERIVE
Lorsque le Licenci cre un Logiciel Driv, ce Logiciel Driv peut
tre distribu sous un contrat de licence autre que le prsent Contrat
condition de respecter les obligations de mention des droits sur le
Logiciel telles que dfinies l'article 6.4. Dans le cas o la cration du
Logiciel Driv a ncessit une modification du Code Source le licenci
s'engage ce que:
1. le Logiciel Modifi correspondant cette modification soit rgi
par le prsent Contrat,
2. les Contributions Intgres dont le Logiciel Modifi rsulte
soient clairement identifies et documentes,
3. le Licenci permette un accs effectif au code source du Logiciel
Modifi, pendant au moins toute la dure de la distribution du
Logiciel Driv, de telle sorte que ces modifications puissent
tre reprises dans une version ultrieure du Logiciel, tant
entendu que le cot additionnel d'acquisition du code source du
Logiciel Modifi ne devra pas excder le simple cot du transfert
des donnes.
5.3.4 COMPATIBILITE AVEC LA LICENCE CeCILL
Lorsqu'un Logiciel Modifi contient une Contribution Intgre soumise au
contrat de licence CeCILL, ou lorsqu'un Logiciel Driv contient un
Module Li soumis au contrat de licence CeCILL, les stipulations prvues
au troisime item de l'article 6.4 sont facultatives.
Article 6 - PROPRIETE INTELLECTUELLE
6.1 SUR LE LOGICIEL INITIAL
Le Titulaire est dtenteur des droits patrimoniaux sur le Logiciel
Initial. Toute utilisation du Logiciel Initial est soumise au respect
des conditions dans lesquelles le Titulaire a choisi de diffuser son
oeuvre et nul autre n'a la facult de modifier les conditions de
diffusion de ce Logiciel Initial.
Le Titulaire s'engage ce que le Logiciel Initial reste au moins rgi
par le Contrat et ce, pour la dure vise l'article 4.2.
6.2 SUR LES CONTRIBUTIONS INTEGREES
Le Licenci qui a dvelopp une Contribution Intgre est titulaire sur
celle-ci des droits de proprit intellectuelle dans les conditions
dfinies par la lgislation applicable.
6.3 SUR LES MODULES LIES
Le Licenci qui a dvelopp un Module Li est titulaire sur celui-ci des
droits de proprit intellectuelle dans les conditions dfinies par la
lgislation applicable et reste libre du choix du contrat rgissant sa
diffusion dans les conditions dfinies l'article 5.3.3.
6.4 MENTIONS DES DROITS
Le Licenci s'engage expressment:
1. ne pas supprimer ou modifier de quelque manire que ce soit les
mentions de proprit intellectuelle apposes sur le Logiciel;
2. reproduire l'identique lesdites mentions de proprit
intellectuelle sur les copies du Logiciel modifi ou non;
3. faire en sorte que l'utilisation du Logiciel, ses mentions de
proprit intellectuelle et le fait qu'il est rgi par le Contrat
soient indiqus dans un texte facilement accessible notamment
depuis l'interface de tout Logiciel Driv.
Le Licenci s'engage ne pas porter atteinte, directement ou
indirectement, aux droits de proprit intellectuelle du Titulaire et/ou
des Contributeurs sur le Logiciel et prendre, le cas chant,
l'gard de son personnel toutes les mesures ncessaires pour assurer le
respect des dits droits de proprit intellectuelle du Titulaire et/ou
des Contributeurs.
Article 7 - SERVICES ASSOCIES
7.1 Le Contrat n'oblige en aucun cas le Concdant la ralisation de
prestations d'assistance technique ou de maintenance du Logiciel.
Cependant le Concdant reste libre de proposer ce type de services. Les
termes et conditions d'une telle assistance technique et/ou d'une telle
maintenance seront alors dtermins dans un acte spar. Ces actes de
maintenance et/ou assistance technique n'engageront que la seule
responsabilit du Concdant qui les propose.
7.2 De mme, tout Concdant est libre de proposer, sous sa seule
responsabilit, ses licencis une garantie, qui n'engagera que lui,
lors de la redistribution du Logiciel et/ou du Logiciel Modifi et ce,
dans les conditions qu'il souhaite. Cette garantie et les modalits
financires de son application feront l'objet d'un acte spar entre le
Concdant et le Licenci.
Article 8 - RESPONSABILITE
8.1 Sous rserve des dispositions de l'article 8.2, le Licenci a la
facult, sous rserve de prouver la faute du Concdant concern, de
solliciter la rparation du prjudice direct qu'il subirait du fait du
Logiciel et dont il apportera la preuve.
8.2 La responsabilit du Concdant est limite aux engagements pris en
application du Contrat et ne saurait tre engage en raison notamment:
(i) des dommages dus l'inexcution, totale ou partielle, de ses
obligations par le Licenci, (ii) des dommages directs ou indirects
dcoulant de l'utilisation ou des performances du Logiciel subis par le
Licenci et (iii) plus gnralement d'un quelconque dommage indirect. En
particulier, les Parties conviennent expressment que tout prjudice
financier ou commercial (par exemple perte de donnes, perte de
bnfices, perte d'exploitation, perte de clientle ou de commandes,
manque gagner, trouble commercial quelconque) ou toute action dirige
contre le Licenci par un tiers, constitue un dommage indirect et
n'ouvre pas droit rparation par le Concdant.
Article 9 - GARANTIE
9.1 Le Licenci reconnat que l'tat actuel des connaissances
scientifiques et techniques au moment de la mise en circulation du
Logiciel ne permet pas d'en tester et d'en vrifier toutes les
utilisations ni de dtecter l'existence d'ventuels dfauts. L'attention
du Licenci a t attire sur ce point sur les risques associs au
chargement, l'utilisation, la modification et/ou au dveloppement et
la reproduction du Logiciel qui sont rservs des utilisateurs avertis.
Il relve de la responsabilit du Licenci de contrler, par tous
moyens, l'adquation du produit ses besoins, son bon fonctionnement et
de s'assurer qu'il ne causera pas de dommages aux personnes et aux biens.
9.2 Le Concdant dclare de bonne foi tre en droit de concder
l'ensemble des droits attachs au Logiciel (comprenant notamment les
droits viss l'article 5).
9.3 Le Licenci reconnat que le Logiciel est fourni "en l'tat" par le
Concdant sans autre garantie, expresse ou tacite, que celle prvue
l'article 9.2 et notamment sans aucune garantie sur sa valeur commerciale,
son caractre scuris, innovant ou pertinent.
En particulier, le Concdant ne garantit pas que le Logiciel est exempt
d'erreur, qu'il fonctionnera sans interruption, qu'il sera compatible
avec l'quipement du Licenci et sa configuration logicielle ni qu'il
remplira les besoins du Licenci.
9.4 Le Concdant ne garantit pas, de manire expresse ou tacite, que le
Logiciel ne porte pas atteinte un quelconque droit de proprit
intellectuelle d'un tiers portant sur un brevet, un logiciel ou sur tout
autre droit de proprit. Ainsi, le Concdant exclut toute garantie au
profit du Licenci contre les actions en contrefaon qui pourraient tre
diligentes au titre de l'utilisation, de la modification, et de la
redistribution du Logiciel. Nanmoins, si de telles actions sont
exerces contre le Licenci, le Concdant lui apportera son aide
technique et juridique pour sa dfense. Cette aide technique et
juridique est dtermine au cas par cas entre le Concdant concern et
le Licenci dans le cadre d'un protocole d'accord. Le Concdant dgage
toute responsabilit quant l'utilisation de la dnomination du
Logiciel par le Licenci. Aucune garantie n'est apporte quant
l'existence de droits antrieurs sur le nom du Logiciel et sur
l'existence d'une marque.
Article 10 - RESILIATION
10.1 En cas de manquement par le Licenci aux obligations mises sa
charge par le Contrat, le Concdant pourra rsilier de plein droit le
Contrat trente (30) jours aprs notification adresse au Licenci et
reste sans effet.
10.2 Le Licenci dont le Contrat est rsili n'est plus autoris
utiliser, modifier ou distribuer le Logiciel. Cependant, toutes les
licences qu'il aura concdes antrieurement la rsiliation du Contrat
resteront valides sous rserve qu'elles aient t effectues en
conformit avec le Contrat.
Article 11 - DISPOSITIONS DIVERSES
11.1 CAUSE EXTERIEURE
Aucune des Parties ne sera responsable d'un retard ou d'une dfaillance
d'excution du Contrat qui serait d un cas de force majeure, un cas
fortuit ou une cause extrieure, telle que, notamment, le mauvais
fonctionnement ou les interruptions du rseau lectrique ou de
tlcommunication, la paralysie du rseau lie une attaque
informatique, l'intervention des autorits gouvernementales, les
catastrophes naturelles, les dgts des eaux, les tremblements de terre,
le feu, les explosions, les grves et les conflits sociaux, l'tat de
guerre...
11.2 Le fait, par l'une ou l'autre des Parties, d'omettre en une ou
plusieurs occasions de se prvaloir d'une ou plusieurs dispositions du
Contrat, ne pourra en aucun cas impliquer renonciation par la Partie
intresse s'en prvaloir ultrieurement.
11.3 Le Contrat annule et remplace toute convention antrieure, crite
ou orale, entre les Parties sur le mme objet et constitue l'accord
entier entre les Parties sur cet objet. Aucune addition ou modification
aux termes du Contrat n'aura d'effet l'gard des Parties moins
d'tre faite par crit et signe par leurs reprsentants dment habilits.
11.4 Dans l'hypothse o une ou plusieurs des dispositions du Contrat
s'avrerait contraire une loi ou un texte applicable, existants ou
futurs, cette loi ou ce texte prvaudrait, et les Parties feraient les
amendements ncessaires pour se conformer cette loi ou ce texte.
Toutes les autres dispositions resteront en vigueur. De mme, la
nullit, pour quelque raison que ce soit, d'une des dispositions du
Contrat ne saurait entraner la nullit de l'ensemble du Contrat.
11.5 LANGUE
Le Contrat est rdig en langue franaise et en langue anglaise, ces
deux versions faisant galement foi.
Article 12 - NOUVELLES VERSIONS DU CONTRAT
12.1 Toute personne est autorise copier et distribuer des copies de
ce Contrat.
12.2 Afin d'en prserver la cohrence, le texte du Contrat est protg
et ne peut tre modifi que par les auteurs de la licence, lesquels se
rservent le droit de publier priodiquement des mises jour ou de
nouvelles versions du Contrat, qui possderont chacune un numro
distinct. Ces versions ultrieures seront susceptibles de prendre en
compte de nouvelles problmatiques rencontres par les logiciels libres.
12.3 Tout Logiciel diffus sous une version donne du Contrat ne pourra
faire l'objet d'une diffusion ultrieure que sous la mme version du
Contrat ou une version postrieure.
Article 13 - LOI APPLICABLE ET COMPETENCE TERRITORIALE
13.1 Le Contrat est rgi par la loi franaise. Les Parties conviennent
de tenter de rgler l'amiable les diffrends ou litiges qui
viendraient se produire par suite ou l'occasion du Contrat.
13.2 A dfaut d'accord amiable dans un dlai de deux (2) mois compter
de leur survenance et sauf situation relevant d'une procdure d'urgence,
les diffrends ou litiges seront ports par la Partie la plus diligente
devant les Tribunaux comptents de Paris.
Version 1.0 du 2006-09-05.
================================================
FILE: Makefile.am
================================================
ACLOCAL_AMFLAGS = -I autotools/m4
check-valgrind:
make -C src/tests check-valgrind
SUBDIRS=src scripts tests web_gui man doc
rpm_dir=`pwd`/rpms
if LUSTRE
rpmbuild_opt=--with lustre @LDEFINES@
if USER_LOVEA
# Lustre 2.x only
rpmbuild_opt += --with recovtools
endif
else
rpmbuild_opt=--without lustre
endif
if !COMMON_RPMS
rpmbuild_opt+=--without common_rpms
endif
if USE_MYSQL_DB
rpmbuild_opt += --with mysql
dbname=mysql
dbversion=`mysql_config --version | cut -d "." -f 1-2`
else
rpmbuild_opt += --with sqlite
dbname=sqlite
dbversion=`rpm -qa "sqlite-devel*" --qf "%{Version}\n" | tail -1 | cut -d "." -f 1-2`
endif
if LUSTRE_HSM
rpmbuild_opt += --with lhsm
else
rpmbuild_opt += --without lhsm
endif
if SHOOK
rpmbuild_opt += --with shook
else
rpmbuild_opt += --without shook
endif
if HSM_LITE
rpmbuild_opt += --with backup
else
rpmbuild_opt += --without backup
endif
if USE_JEMALLOC
rpmbuild_opt += --with jemalloc
else
rpmbuild_opt += --without jemalloc
endif
rpmbuild_opt += --define="configure_flags @ac_configure_args@"
new: clean all
mydist:
umask 022; \
TAR_OPTIONS='--owner=0 --group=0 --numeric-owner --mode=u+rw,go+r-ws' $(MAKE) dist-gzip
rpms: robinhood.spec mydist
mkdir -p $(rpm_dir)/BUILD $(rpm_dir)/SPECS $(rpm_dir)/SRPMS $(rpm_dir)/RPMS
rpmbuild $(rpmbuild_opt) --define="_topdir $(rpm_dir)" \
--define="dbversion $(dbversion)" --define="_prefix $(prefix)" \
--define="_sysconfdir @CONFDIR@" \
-ta $(distdir).tar.gz
rpm: robinhood.spec mydist
mkdir -p $(rpm_dir)/BUILD $(rpm_dir)/SPECS $(rpm_dir)/SRPMS $(rpm_dir)/RPMS
rpmbuild $(rpmbuild_opt) --define="_topdir $(rpm_dir)" --define="_prefix $(prefix)" \
--define="dbversion $(dbversion)" --define="_sysconfdir @CONFDIR@" \
--define="_prefix $(prefix)" -tb $(distdir).tar.gz
srpm: robinhood.spec mydist
mkdir -p $(rpm_dir)/SRPMS $(rpm_dir)/SOURCES
cp -f $(distdir).tar.gz $(rpm_dir)/SOURCES/.
rpmbuild --without lustre --define="_topdir $(rpm_dir)" -bs robinhood.spec
cppcheck:
cppcheck -j12 -v --force --enable=all -I`pwd`/src/include -DHAVE_CONFIG_H @PURPOSE_CFLAGS@ @DB_CFLAGS@ src/
lcov:
lcov --capture --directory . --output-file rbh_cov.info && genhtml rbh_cov.info --output-directory rbh_cov
mans:
chmod +x ./scripts/make_mans.sh && ./scripts/make_mans.sh
# Wildcard paths need to be prefixed with $(srcdir) for out-of-tree make dist
EXTRA_DIST= robinhood.spec robinhood.spec.in \
autogen.sh \
LICENSE.fr.txt LICENSE.en.txt README.md \
doc/admin_guides \
doc/install_webgui.txt \
ChangeLog \
$(srcdir)/man/*.1
# goodies/vim/robinhood.vim
================================================
FILE: README.md
================================================
##  Robinhood Policy Engine
Robinhood Policy Engine is a versatile tool to manage contents of large file systems. It maintains a replicate of filesystem medatada in a database that can be queried at will. It makes it possible to schedule mass action on filesystem entries by defining attribute-based policies, provides fast 'find' and 'du' enhanced clones, gives to administrators an overall view of filesystem contents through its web UI and command line tools.
It supports any POSIX filesystem and implements advanced features for [Lustre](https://www.lustre.org) filesystems (list/purge files per OST or pool, read MDT changelogs...)
Originally developped for HPC, it has been designed to perform all its tasks in parallel, so it is particularly adapted for running on large filesystems with millions of entries and petabytes of data. But of course, you can take benefits of all its features for managing smaller filesystems.
Robinhood is distributed under the [CeCILL-C](http://www.cecill.info/licences/Licence_CeCILL-C_V1-en.html) license, which is a French transposition of the [GNU LGPL](http://www.gnu.org/licenses/lgpl.html) and is fully LGPL-compatible.
### Main features
* Policy Engine: schedule actions on filesystem entries according to admin-defined criteria, based on entry attributes.
* User/group usage accounting, including file size profiling.
* Fast 'du' and 'find' clones.
* Customizable alerts on filesystem entries.
* Aware of Lustre OSTs, pools and projects.
For more information, refer to the [online documentation](https://github.com/cea-hpc/robinhood/wiki).
I - License
===========
Copyright (C) 2004-2017 CEA/DAM.
Copyright 2013-2016 Cray Inc. All Rights Reserved.
This program is free software; you can redistribute it and/or modify
it under the terms of the CeCILL-C License.
The fact that you are presently reading this means that you have had
knowledge of the CeCILL-C license (http://www.cecill.info) and that you
accept its terms.
II - Compiling
==============
2.1 - From source tarball
-------------------------
It is advised to build RobinHood on your target system, to ensure the best
compatibility with your Lustre and MySQL versions.
Build requirements: glib2-devel, libattr-devel, mysql-devel or mariadb-devel,
s-nail, bison, flex, jemalloc, jemalloc-devel.
For lustre support: lustre or lustre-client, lustre-devel (Lustre >= 2.15)
For running RobinHood's CI: lustre-tests (Lustre >= 2.15)
Unzip and untar the source distribution:
```
tar zxvf robinhood-3.x.x.tar.gz
cd robinhood-3.x.x
```
Configure and build:
```
./configure
make rpm
```
RPMs are generated in the 'rpms/RPMS/*arch*' directory.
2.2 - From git repository
-------------------------
Install git, and autotools stuff:
```
yum install git automake autoconf libtool
```
Retrieve robinhood sources
```
git clone https://github.com/cea-hpc/robinhood.git
cd robinhood
git checkout master *(or other branch)*
sh autogen.sh
```
Then refer to section 2.1 for next compilation steps.
2.3 - Build using src rpm
---------------------------
### 2.3.1 - Creating src rpm
Only requirements: rpm-build, gcc, flex, bison
To create src rpm on a host with minimal requirements, run:
```
./configure --enable-dist
make srpm
```
### 2.3.2 - Building from src rpm
By default, the src rpm builds robinhood for POSIX filesystems:
```
rpmbuild --rebuild robinhood-3.0*.src.rpm
```
To build robinhood binary RPM for a Lustre filsystem, run:
```
rpmbuild --rebuild robinhood-3.0*.src.rpm --with lustre --define "lversion x.y"
```
where x.y is your target lustre version (e.g. 2.7).
Note: if lustre-client is not installed on your target system, you can specify
an alternative lustre package by defining "lpackage", e.g.
```
rpmbuild [...] --define "lpackage lustre"
```
Note: 'lversion' can be omitted, by it is strongly recommanded to prevent
incompatibility issues between lustreapi versions.
III - Install
=============
For installing robinhood on your target system, install **robinhood-adm** RPM.
It includes configuration helper for DB, changelogs, ...
* For lustre filesystems install **robinhood-lustre** RPM.
* For other filesystems install **robinhood-posix** RPM.
IV - Database Configuration
===========================
Robinhood needs a MySQL database for storing information about files.
This database can run on a different node from Robinhood daemon.
* Install MySQL server on the machine (mysql-server and mysql packages).
* Start the DB engine:
* systemctl start mariadb
* Run the configuration helper script as root on the database host to create
the database:
```
rbh-config create_db
```
* Write the DB password to a file with read access for root only (600)
e.g. to /etc/robinhood.d/.dbpassword
Note: initially, the database schema is empty. Robinhood will create it the first time it is launched.
V - Lustre 2.x Filesystems only: enabling changelogs
====================================================
For Lustre, you must register robinhood as a MDT changelog consumer.
* Run the configuration helper script on Lustre MDS:
```
rbh-config enable_chglogs
```
This registers a changelog consumer and activate required changelog records.
Note: by default, the script checks for a 'cl1' consumer.
If you need to register several changelog consumers on your file system,
refer to lustre documentation.
VI - Configuration file
=======================
Examples of config files are installed in /etc/robinhood.d/templates/
You can also use the '--template' option to generate a documented configuration file template:
```
robinhood --template=<template_file>
```
For more details, refer to [Robinhood v3 admin guide](https://github.com/cea-hpc/robinhood/wiki/robinhood_v3_admin_doc).
Note: by default, robinhood searches configuration files in "/etc/robinhood.d".
VII - First run
===============
Even if your filesystem is empty, you need to perform an initial scan in order to initialize robinhood database.
This prevents from having entries in filesystem that it wouldn't know about.
```
robinhood --scan --once
```
VIII - Start the daemon
=======================
* Configure per-filesystem daemon options in **/etc/sysconfig/robinhood.\<fsname\>**
Example: to read lustre changelogs and run all policies:
```
RBH_OPT="--readlog --run=all"
```
Example: to regularly scan filesystem and run all policies:
```
RBH_OPT="--scan --run=all"
```
Start the daemon:
```
systemctl start robinhood@*fsname*
```
================================================
FILE: autogen.sh
================================================
#!/bin/bash
function install_hook
{
local src_file="$1"
local tgt_file="$2"
test ! -d "$wdir/.git/" && return 0
if [ ! -e "$wdir/.git/hooks/$tgt_file" ]; then
echo "installing git hook: $tgt_file"
ln -s "../../scripts/$src_file" "$wdir/.git/hooks/$tgt_file"
fi
if [ ! -x "$wdir/.git/hooks/$tgt_file" ]; then
chmod +x "$wdir/.git/hooks/$tgt_file"
fi
}
wdir=$(dirname $(readlink -m "$0"))
install_hook git_prepare_hook prepare-commit-msg
install_hook pre-commit pre-commit
install_hook commit-msg commit-msg
autoreconf --install
================================================
FILE: autotools/m4/args_mgmt.m4
================================================
#
# This macro is for features that are disabled by default
# and we want a CFLAG to be set if it is explicitely enabled
# on "configure" command line (with --enable-...)
#
# AX_ENABLE_FLAG( FEATURE_NAME, HELP_STRING, CFLAGS_IF_ENABLED )
#
# Example:
# AX_ENABLE_FLAG( [debug-memalloc], [enable debug traces for memory allocator], [-D_DEBUG_MEMALLOC] )
#
AC_DEFUN([AX_ENABLE_FLAG],
[
AC_MSG_CHECKING($1 option)
AC_ARG_ENABLE( [$1], AS_HELP_STRING([--enable-$1],[$2]),
[enable_]m4_bpatsubst([$1], -, _)=$enableval, [enable_]m4_bpatsubst([$1], -, _)='no' )
if test "[$enable_]m4_bpatsubst([$1], -, _)" == yes ; then
CFLAGS="$CFLAGS $3"
AC_MSG_RESULT(enabled)
else
AC_MSG_RESULT(disabled)
fi
])
#
# This macro is for features that are disabled by default
# and we want a CFLAG to be set if it is explicitely enabled
# on "configure" command line (with --enable-...)
#
# AX_ENABLE_FLAG_COND( FEATURE_NAME, HELP_STRING, CFLAGS_IF_ENABLED, COND )
#
# Example:
# AX_ENABLE_FLAG_COND( [debug-memalloc], [enable debug traces for memory allocator], [-D_DEBUG_MEMALLOC], DEBUG_MEMALLOC )
#
AC_DEFUN([AX_ENABLE_FLAG_COND],
[
AC_MSG_CHECKING($1 option)
AC_ARG_ENABLE( [$1], AS_HELP_STRING([--enable-$1],[$2]),
[enable_]m4_bpatsubst([$1], -, _)=$enableval, [enable_]m4_bpatsubst([$1], -, _)='no' )
AM_CONDITIONAL( $4, test "[$enable_]m4_bpatsubst([$1], -, _)" == "yes" )
if test "[$enable_]m4_bpatsubst([$1], -, _)" == yes ; then
CFLAGS="$CFLAGS $3"
AC_MSG_RESULT(enabled)
else
AC_MSG_RESULT(disabled)
fi
])
#
# This macro is for features that are enabled by default
# and we want a CFLAG to be set if it is explicitely disabled
# on "configure" command line (with --disable-...)
#
# AX_DISABLE_FLAG( FEATURE_NAME, HELP_STRING, CFLAGS_IF_DISABLED )
#
# Example:
# AX_DISABLE_FLAG( [tcp-register], [disable registration of tcp services on portmapper], [-D_NO_TCP_REGISTER] )
#
AC_DEFUN([AX_DISABLE_FLAG],
[
AC_MSG_CHECKING($1 option)
AC_ARG_ENABLE( [$1], AS_HELP_STRING([--disable-$1],[$2]),
[enable_]m4_bpatsubst([$1], -, _)=$enableval, [enable_]m4_bpatsubst([$1], -, _)='yes' )
if test "[$enable_]m4_bpatsubst([$1], -, _)" != yes ; then
CFLAGS="$CFLAGS $3"
AC_MSG_RESULT(disabled)
else
AC_MSG_RESULT(enabled)
fi
])
================================================
FILE: autotools/m4/as-ac-expand.m4
================================================
dnl as-ac-expand.m4 0.2.0
dnl autostars m4 macro for expanding directories using configure's prefix
dnl thomas@apestaart.org
dnl
dnl AS_AC_EXPAND(VAR, CONFIGURE_VAR)
dnl example
dnl AS_AC_EXPAND(SYSCONFDIR, $sysconfdir)
dnl will set SYSCONFDIR to /usr/local/etc if prefix=/usr/local
AC_DEFUN([AS_AC_EXPAND],
[
EXP_VAR=[$1]
FROM_VAR=[$2]
dnl first expand prefix and exec_prefix if necessary
prefix_save=$prefix
exec_prefix_save=$exec_prefix
dnl if no prefix given, then use /usr/local, the default prefix
if test "x$prefix" = "xNONE"; then
prefix="$ac_default_prefix"
fi
dnl if no exec_prefix given, then use prefix
if test "x$exec_prefix" = "xNONE"; then
exec_prefix=$prefix
fi
full_var="$FROM_VAR"
dnl loop until it doesn't change anymore
while true; do
new_full_var="`eval echo $full_var`"
if test "x$new_full_var" = "x$full_var"; then break; fi
full_var=$new_full_var
done
dnl clean up
full_var=$new_full_var
AC_SUBST([$1], "$full_var")
dnl restore prefix and exec_prefix
prefix=$prefix_save
exec_prefix=$exec_prefix_save
])
================================================
FILE: autotools/m4/ax_valgrind_check.m4
================================================
# ===========================================================================
# http://www.gnu.org/software/autoconf-archive/ax_valgrind_check.html
# ===========================================================================
#
# SYNOPSIS
#
# AX_VALGRIND_CHECK()
#
# DESCRIPTION
#
# Checks whether Valgrind is present and, if so, allows running `make
# check` under a variety of Valgrind tools to check for memory and
# threading errors.
#
# Defines VALGRIND_CHECK_RULES which should be substituted in your
# Makefile; and $enable_valgrind which can be used in subsequent configure
# output. VALGRIND_ENABLED is defined and substituted, and corresponds to
# the value of the --enable-valgrind option, which defaults to being
# enabled if Valgrind is installed and disabled otherwise.
#
# If unit tests are written using a shell script and automake's
# LOG_COMPILER system, the $(VALGRIND) variable can be used within the
# shell scripts to enable Valgrind, as described here:
#
# https://www.gnu.org/software/gnulib/manual/html_node/Running-self_002dtests-under-valgrind.html
#
# Usage example:
#
# configure.ac:
#
# AX_VALGRIND_CHECK
#
# Makefile.am:
#
# @VALGRIND_CHECK_RULES@
# VALGRIND_SUPPRESSIONS_FILES = my-project.supp
# EXTRA_DIST = my-project.supp
#
# This results in a "check-valgrind" rule being added to any Makefile.am
# which includes "@VALGRIND_CHECK_RULES@" (assuming the module has been
# configured with --enable-valgrind). Running `make check-valgrind` in
# that directory will run the module's test suite (`make check`) once for
# each of the available Valgrind tools (out of memcheck, helgrind, drd and
# sgcheck), and will output results to test-suite-$toolname.log for each.
# The target will succeed if there are zero errors and fail otherwise.
#
# The macro supports running with and without libtool.
#
# LICENSE
#
# Copyright (c) 2014, 2015 Philip Withnall <philip.withnall@collabora.co.uk>
#
# Copying and distribution of this file, with or without modification, are
# permitted in any medium without royalty provided the copyright notice
# and this notice are preserved. This file is offered as-is, without any
# warranty.
#serial 3
AC_DEFUN([AX_VALGRIND_CHECK],[
dnl Check for --enable-valgrind
AC_MSG_CHECKING([whether to enable Valgrind on the unit tests])
AC_ARG_ENABLE([valgrind],
[AS_HELP_STRING([--enable-valgrind], [Whether to enable Valgrind on the unit tests])],
[enable_valgrind=$enableval],[enable_valgrind=])
# Check for Valgrind.
AC_CHECK_PROG([VALGRIND],[valgrind],[valgrind])
AS_IF([test "$enable_valgrind" = "yes" -a "$VALGRIND" = ""],[
AC_MSG_ERROR([Could not find valgrind; either install it or reconfigure with --disable-valgrind])
])
AS_IF([test "$enable_valgrind" != "no"],[enable_valgrind=yes])
AM_CONDITIONAL([VALGRIND_ENABLED],[test "$enable_valgrind" = "yes"])
AC_SUBST([VALGRIND_ENABLED],[$enable_valgrind])
AC_MSG_RESULT([$enable_valgrind])
# Check for Valgrind tools we care about.
m4_define([valgrind_tool_list],[[memcheck], [helgrind], [drd], [exp-sgcheck]])
AS_IF([test "$VALGRIND" != ""],[
m4_foreach([vgtool],[valgrind_tool_list],[
m4_define([vgtooln],AS_TR_SH(vgtool))
m4_define([ax_cv_var],[ax_cv_valgrind_tool_]vgtooln)
AC_CACHE_CHECK([for Valgrind tool ]vgtool,ax_cv_var,[
ax_cv_var=
AS_IF([`$VALGRIND --tool=vgtool --help 2&>/dev/null`],[
ax_cv_var="vgtool"
])
])
AC_SUBST([VALGRIND_HAVE_TOOL_]vgtooln,[$ax_cv_var])
])
])
VALGRIND_CHECK_RULES='
# Valgrind check
#
# Optional:
# - VALGRIND_SUPPRESSIONS_FILES: Space-separated list of Valgrind suppressions
# files to load. (Default: empty)
# - VALGRIND_FLAGS: General flags to pass to all Valgrind tools.
# (Default: --num-callers=30)
# - VALGRIND_$toolname_FLAGS: Flags to pass to Valgrind $toolname (one of:
# memcheck, helgrind, drd, sgcheck). (Default: various)
# Optional variables
VALGRIND_SUPPRESSIONS ?= $(addprefix --suppressions=,$(VALGRIND_SUPPRESSIONS_FILES))
VALGRIND_FLAGS ?= --num-callers=30
VALGRIND_memcheck_FLAGS ?= --leak-check=full --show-reachable=no
VALGRIND_helgrind_FLAGS ?= --history-level=approx
VALGRIND_drd_FLAGS ?=
VALGRIND_sgcheck_FLAGS ?=
# Internal use
valgrind_tools = memcheck helgrind drd sgcheck
valgrind_log_files = $(addprefix test-suite-,$(addsuffix .log,$(valgrind_tools)))
valgrind_memcheck_flags = --tool=memcheck $(VALGRIND_memcheck_FLAGS)
valgrind_helgrind_flags = --tool=helgrind $(VALGRIND_helgrind_FLAGS)
valgrind_drd_flags = --tool=drd $(VALGRIND_drd_FLAGS)
valgrind_sgcheck_flags = --tool=exp-sgcheck $(VALGRIND_sgcheck_FLAGS)
valgrind_quiet = $(valgrind_quiet_$(V))
valgrind_quiet_ = $(valgrind_quiet_$(AM_DEFAULT_VERBOSITY))
valgrind_quiet_0 = --quiet
# Support running with and without libtool.
ifneq ($(LIBTOOL),)
valgrind_lt = $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=execute
else
valgrind_lt =
endif
# Use recursive makes in order to ignore errors during check
check-valgrind:
ifeq ($(VALGRIND_ENABLED),yes)
-$(foreach tool,$(valgrind_tools), \
$(if $(VALGRIND_HAVE_TOOL_$(tool))$(VALGRIND_HAVE_TOOL_exp_$(tool)), \
$(MAKE) $(AM_MAKEFLAGS) -k check-valgrind-tool VALGRIND_TOOL=$(tool); \
) \
)
else
@echo "Need to reconfigure with --enable-valgrind"
endif
# Valgrind running
VALGRIND_TESTS_ENVIRONMENT = \
$(TESTS_ENVIRONMENT) \
env VALGRIND=$(VALGRIND) \
G_SLICE=always-malloc,debug-blocks \
G_DEBUG=fatal-warnings,fatal-criticals,gc-friendly
VALGRIND_LOG_COMPILER = \
$(valgrind_lt) \
$(VALGRIND) $(VALGRIND_SUPPRESSIONS) --error-exitcode=1 $(VALGRIND_FLAGS)
check-valgrind-tool:
ifeq ($(VALGRIND_ENABLED),yes)
$(MAKE) check-TESTS \
TESTS_ENVIRONMENT="$(VALGRIND_TESTS_ENVIRONMENT)" \
LOG_COMPILER="$(VALGRIND_LOG_COMPILER)" \
LOG_FLAGS="$(valgrind_$(VALGRIND_TOOL)_flags)" \
TEST_SUITE_LOG=test-suite-$(VALGRIND_TOOL).log
else
@echo "Need to reconfigure with --enable-valgrind"
endif
DISTCHECK_CONFIGURE_FLAGS ?=
DISTCHECK_CONFIGURE_FLAGS += --disable-valgrind
MOSTLYCLEANFILES ?=
MOSTLYCLEANFILES += $(valgrind_log_files)
.PHONY: check-valgrind check-valgrind-tool
'
AC_SUBST([VALGRIND_CHECK_RULES])
m4_ifdef([_AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE([VALGRIND_CHECK_RULES])])
])
================================================
FILE: autotools/m4/db.m4
================================================
#
# This macro test for MySQL config program and version
#
AC_DEFUN([AX_MYSQL_INFO],
[
AC_CHECK_PROGS(MYSQL_CONFIG, mysql_config)
if test -z "$MYSQL_CONFIG"; then
AC_MSG_ERROR(MySQL must be installed)
fi
AC_MSG_CHECKING(for MySQL version)
MYSQL_VERSION=`$MYSQL_CONFIG --version 2>/dev/null | cut -d "." -f 1`
if test -z "$MYSQL_VERSION"; then
MYSQL_VERSION="none"
fi
AC_MSG_RESULT($MYSQL_VERSION)
])
================================================
FILE: autotools/m4/lustre.m4
================================================
#
# This macro test installed lustre version and package name
#
AC_DEFUN([AX_LUSTRE_VERSION],
[
# Check if any package provides 'lustre-client'
# Since lustre 2.8, this symbol is provided by both 'lustre' and 'lustre-client'
# so robinhood only needs to require it.
AC_MSG_CHECKING(if any package provides lustre-client)
if rpm -q --whatprovides lustre-client >/dev/null 2>/dev/null; then
AC_MSG_RESULT(yes)
LPACKAGE=lustre-client
# Assume we want the same version as this package,
# whatever 'lustre' or 'lustre-client'
#
# Added pipe to `head -1` to properly handle cases of multiple packages; lustre-client and lustre-client-dkms
#
AC_MSG_CHECKING(Lustre version)
LVERSION=`rpm -q --whatprovides lustre-client --qf "%{Version}\n" 2>/dev/null | grep -v "no package" | cut -d "." -f 1-2 | head -1`
AC_MSG_RESULT($LVERSION)
else
AC_MSG_RESULT(no)
AC_MSG_CHECKING(if lustre is installed)
# fallback to lustre package
LPACKAGE=`rpm -q --whatprovides lustre --qf "%{Name}\n" 2>/dev/null | grep -v "no package"`
if test -n "$LPACKAGE"; then
LVERSION=`rpm -q $LPACKAGE --qf "%{Version}\n" 2>/dev/null | cut -d "." -f 1-2`
AC_MSG_RESULT(found version $LVERSION)
else
AC_MSG_RESULT(no)
fi
fi
])
# Get lustre version from sources
# AX_LUSTRE_SRC_VERSION(LUSTRE_SRC_DIR)
AC_DEFUN([AX_LUSTRE_SRC_VERSION],
[
AC_MSG_CHECKING(Lustre source version)
if test -f $1/config.h ; then
LVERSION=`grep "define VERSION " $1/config.h | awk '{print $(NF)}' | sed -e 's/"//g' | cut -d "." -f 1-2`
# default RPM dependancy to lustre-client
LPACKAGE="lustre-client"
if test -z "$LVERSION"; then
AC_MSG_RESULT(none installed)
else
AC_MSG_RESULT(source version $LVERSION)
fi
else
AX_LUSTRE_EXPORT_VERSION([$1])
fi
])
# Get lustre version from exported src directory
# AX_LUSTRE_EXPORT_VERSION(LUSTRE_SRC_DIR)
AC_DEFUN([AX_LUSTRE_EXPORT_VERSION],
[
AC_MSG_CHECKING(Lustre exported src version)
LVERSION=$([awk -F',' '/m._define\(\[LUSTRE_MINOR\]/ { minver=gensub( /[\[\]\)]/, "", "g", $(NF)) ; } /m._define\(\[LUSTRE_MAJOR\]/ { majver=gensub( /[\[\]\)]/, "", "g", $(NF)) ; } END { print majver "." minver ; }' $$1/usr/src/lustre-*/lustre/autoconf/lustre-version.ac])
# default RPM dependancy to lustre-client
LPACKAGE="lustre-client"
if test -z "$LVERSION"; then
AC_MSG_RESULT(none installed)
else
AC_MSG_RESULT(exported src version $LVERSION)
fi
])
# -*- mode: shell; sh-basic-offset: 4; indent-tabs-mode: nil; -*-
# vim:expandtab:shiftwidth=4:tabstop=4:
================================================
FILE: configure.ac
================================================
# -*- mode: c; c-basic-offset: 4; indent-tabs-mode: nil; -*-
# vim:expandtab:shiftwidth=4:tabstop=4:
# Process this file with autoconf to produce a configure script.
AC_PREREQ(2.59)
AC_INIT( [robinhood], [3.2.0], [robinhood-support@lists.sourceforge.net])
RELEASE="3"
AC_DEFINE_UNQUOTED(RELEASE, "$RELEASE", [release info])
AC_SUBST(RELEASE)
AC_CONFIG_AUX_DIR([autotools])
AC_CONFIG_MACRO_DIR([autotools/m4])
AC_CONFIG_HEADER([src/include/config.h])
AC_CONFIG_SRCDIR([src/list_mgr/listmgr_init.c])
AM_INIT_AUTOMAKE([-Wall -Werror tar-pax foreign subdir-objects])
m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])])
AC_PREFIX_DEFAULT([/usr])
AC_GNU_SOURCE
AC_CONFIG_FILES([Makefile
src/Makefile
src/include/Makefile
src/common/Makefile
src/cfg_parsing/Makefile
src/list_mgr/Makefile
src/entry_processor/Makefile
src/fs_scan/Makefile
src/chglog_reader/Makefile
src/modules/Makefile
src/policies/Makefile
src/robinhood/Makefile
src/tools/Makefile
src/tests/Makefile
doc/Makefile
doc/templates/Makefile
scripts/Makefile
scripts/robinhood.init
scripts/robinhood.init.sles
scripts/robinhood.service
scripts/robinhood@.service
scripts/sysconfig_robinhood
scripts/ld.so.robinhood.conf
scripts/rbh_cksum.sh
tests/Makefile
tests/test_suite/Makefile
web_gui/Makefile
man/Makefile
robinhood.spec
doc/doxygen/doxygen.cfg])
AC_ARG_ENABLE([dist],
AC_HELP_STRING([--enable-dist], [Only configure enough for make dist]),
[],
[enable_dist="no"])
AM_PROG_LEX
AC_PATH_PROG(LEX_INST, $LEX)
if test -z "$LEX_INST" -a "x$enable_dist" = xyes; then
AC_MSG_ERROR([lex/flex not found])
fi
AC_PROG_YACC
AC_PATH_PROG(YACC_INST, $YACC)
if test -z "$YACC_INST" -a "x$enable_dist" = xyes; then
AC_MSG_ERROR([yacc/bison not found])
fi
AS_IF([test "x$enable_dist" = xyes], [
AC_OUTPUT
exit
])
# required for automake 1.12 (since fedora 18)
m4_ifdef([AM_PROG_AR], [AM_PROG_AR])
AC_PROG_LIBTOOL
AC_PROG_CC
# required for automake 1.12 (since fedora 18)
m4_ifdef([AM_PROG_CC_C_O], [AM_PROG_CC_C_O])
AC_C_INLINE
# define everything necessary for accessing large files (64bits offset)
AC_SYS_LARGEFILE
# gcc options
CC_OPT="-Wall -Werror -Wstrict-prototypes -Wmissing-prototypes -Wmissing-declarations -std=gnu99 -Wno-variadic-macros"
AC_SUBST(CC_OPT)
AC_CHECK_SIZEOF([nlink_t])
AC_CHECK_SIZEOF([off_t])
AC_CHECK_SIZEOF([ino_t])
AC_CHECK_SIZEOF([dev_t])
AC_CHECK_SIZEOF([time_t])
AC_CHECK_SIZEOF([size_t])
AC_CHECK_SIZEOF([pthread_t])
AX_ENABLE_FLAG([strict], [Compile with -Wall -Werror], [-Wall -Werror])
AC_CHECK_LIB(z, gzflush,
[LIBS="-lz $LIBS"
AC_DEFINE(HAVE_LIBZ, 1, [define if you have zlib])],
[AC_MSG_WARN([zlib is required])])
PKG_CHECK_MODULES(GLIB2, [glib-2.0 >= 2.16])
PKG_CHECK_MODULES(GTHREAD2, [gthread-2.0])
CFLAGS="$CFLAGS $GLIB2_CFLAGS $GTHREAD2_CFLAGS"
LDFLAGS="$LDFLAGS $GLIB2_LIBS $GTHREAD2_LIBS"
# debug flags
AX_ENABLE_FLAG([debug-db], [enables debug traces for database operations], [-D_DEBUG_DB])
AX_ENABLE_FLAG([debug-parsing], [enables debug traces for configuration file parsing], [-D_DEBUG_PARSING])
AM_CONDITIONAL(DEBUG_PARSING, test "x$enable_debug_parsing" == "xyes" )
AX_ENABLE_FLAG([debug-pipeline], [enables debug traces for entry processor pipeline], [-D_DEBUG_ENTRYPROC])
AX_ENABLE_FLAG([debug-policies], [enables debug traces for entry processor pipeline], [-D_DEBUG_POLICIES])
AX_ENABLE_FLAG([debug-hash], [enables debug traces internal hash tables], [-D_DEBUG_HASH])
AX_ENABLE_FLAG([bench-scan], [test only: build special version for scan benchmarking], [-D_BENCH_SCAN])
AX_ENABLE_FLAG([bench-db], [test only: build special version for DB benchmarking], [-D_BENCH_DB])
AX_ENABLE_FLAG([bench-pipeline], [test only: build special version for pipeline benchmarking], [-D_BENCH_PIPELINE -D_BENCH_DB])
AX_ENABLE_FLAG([gprof], [test only: add gprof info to the binaries], [-g -pg])
AX_ENABLE_FLAG([gcov], [test only: add gcov info to the binaries], [--coverage])
AX_VALGRIND_CHECK
# behavior flags
AX_DISABLE_FLAG([atfunc], [Don't use 'at' functions for scanning], [-D_NO_AT_FUNC])
AX_ENABLE_FLAG( [fid2path-leading-slash], [must be enabled if fid2path() returns a leading slash], [-D_FID2PATH_LEADING_SLASH] )
AC_ARG_ENABLE( [data-version], AS_HELP_STRING([--disable-data-version],
[Disable the use of llapi_get_data_version()]),
[support_dv="$enableval"],[support_dv="yes"] )
DV_CMD="stat -c %Y-%s"
AC_ARG_ENABLE([common-rpms], AS_HELP_STRING([--disable-common-rpms],
[Disable build of common RPMs, only build FS specific packages]),
[common_rpms="$enableval"],[common_rpms="yes"])
AM_CONDITIONAL(COMMON_RPMS,test "x$common_rpms" = "xyes")
build_lustre="OFF"
build_backup="OFF"
build_lhsm="OFF"
build_shook="OFF"
AC_ARG_ENABLE([lustre], AS_HELP_STRING([--disable-lustre],
[Disable all lustre specific features]),
[support_lustre="$enableval"],[support_lustre="yes"])
AC_ARG_ENABLE([shook], AS_HELP_STRING([--disable-shook],
[Disable build of shook specific modules]),
[support_shook="$enableval"],[support_shook="yes"])
# default input option is --scan
INPUT_OPT="--scan"
# shook requires Lustre + FID support + shook library
# hsm_lite requires Lustre + FID support
# lustre_hsm requires Lustre >= 2.5
if test "x$support_lustre" = "xyes" ; then
# Lustre location
AC_ARG_WITH( [lustre], AS_HELP_STRING([--with-lustre=<lustre_src_dir>],[indicate alternative location for lustre]),
LDIR="$withval")
if test -n "$LDIR"; then
CFLAGS="$CFLAGS -I$LDIR/lustre/include"
LDFLAGS="$LDFLAGS -L$LDIR/lustre/utils"
fi
AC_CHECK_LIB([lustreapi], [llapi_obd_statfs], [have_liblustre_api="yes"])
AM_CONDITIONAL( LUSTRE, test "x$have_liblustre_api" = "xyes" )
AC_SUBST(LUSTRE)
# lustre relative information and checks
if test "x$have_liblustre_api" = "xyes" ; then
AC_DEFINE(_LUSTRE, 1, [liblustreapi is available])
build_lustre="ON"
AC_CHECK_HEADER([lustre/lustreapi.h], have_new_lustre_header="true", have_new_lustre_header="false")
if test "$have_new_lustre_header" = "true"; then
AC_DEFINE(_LUSTRE_API_HEADER, 1, [New lustreapi header])
# this comes with Lustre 2.4, so disable features of Lustre < 2.4 at the same time
AC_DEFINE(_MDT_SPECIFIC_LOVEA, 1, [MDT LOV EA is no longer the same as lov_user_md])
fi
AC_CHECK_HEADER([lustre/lustre_idl.h], have_lustre_idl="true", have_lustre_idl="false", [
#define LPX64 "%#llx"
#include <sys/types.h>
#include <asm/types.h>
#include <lustre/lustre_user.h>
])
if test "$have_lustre_idl" = "true"; then
AC_DEFINE(_LUSTRE_IDL_HEADER, 1, [lustre_idl header exists])
fi
# this defines LVERSION variable
if test -z "$LDIR" ; then
AX_LUSTRE_VERSION
else
# get version from sources
AX_LUSTRE_SRC_VERSION("$LDIR")
fi
LDEFINES=""
if test -n "$LVERSION"; then
LDEFINES="--define=\"lversion $LVERSION\""
AC_DEFINE_UNQUOTED(LUSTRE_VERSION, "$LVERSION", [Lustre version])
fi
if test -n "$LPACKAGE"; then
LDEFINES="$LDEFINES --define=\"lpackage $LPACKAGE\""
fi
AC_SUBST(LDEFINES)
FS_LDFLAGS="-llustreapi"
AC_SUBST(FS_LDFLAGS)
# log functions
AC_CHECK_LIB([lustreapi], [llapi_msg_set_level], [have_llapi_msg_level="yes"])
test "x$have_llapi_msg_level" = "xyes" && AC_DEFINE(HAVE_LLAPI_MSG_LEVEL, 1, [llapi_msg_set_level is available])
AC_CHECK_LIB([lustreapi], [llapi_error_callback_set],
[have_llapi_error_callback_set="yes"])
test "x$have_llapi_error_callback_set" = "xyes" &&
AC_DEFINE(HAVE_LLAPI_LOG_CALLBACKS, 1, [llapi log callbacks are available])
AC_CHECK_LIB([lustreapi], [llapi_get_mdt_index_by_fid],
[have_llapi_get_mdt_index_by_fid="yes"])
test "x$have_llapi_get_mdt_index_by_fid" = "xyes" &&
AC_DEFINE(HAVE_LLAPI_GET_MDT_INDEX_BY_FID, 1,
[llapi_get_mdt_index_by_fid available])
# check if struct statfs is defined in lustre user
AC_CHECK_TYPE(struct obd_statfs,[have_obd_statfs="yes"],[have_obd_statfs="no"],[
#define LPX64 "%#llx"
#include <sys/types.h>
#include <asm/types.h>
#include <lustre/lustre_user.h>
])
test "x$have_obd_statfs" = "xyes" && AC_DEFINE(HAVE_OBD_STATFS, 1, [struct obd_stafs is defined])
AC_ARG_ENABLE( [fid-support], AS_HELP_STRING([--disable-fid-support],
[Don't address files by fid]),
fid_support="$enableval", fid_support="yes" )
# only check for fid if fid support is not disabled
if test "x$fid_support" = "xyes" ; then
AC_CHECK_LIB([lustreapi], [llapi_fid2path], [have_fid="yes"])
if test "x$have_fid" = "xyes"; then
AC_DEFINE(_HAVE_FID, 1, [lustre supports fids])
AC_DEFINE(_HSM_LITE, 1, [HSM lite support])
build_backup="ON"
fi
fi
# check if fd2fid function exists
AC_CHECK_LIB([lustreapi], [llapi_fd2fid], [have_fd2fid="yes"])
test "x$have_fd2fid" = "xyes" && AC_DEFINE(HAVE_FD2FID, 1, [llapi_fd2fid function is available])
# check for DNE support
AC_CHECK_LIB([lustreapi], [llapi_file_fget_mdtidx], [have_dne_support="yes"])
test "x$have_dne_support" = "xyes" && AC_DEFINE(HAVE_DNE, 1, [this version of Lustre supports DNE]) # FIXME wrong test (works with 2.1!)
AC_ARG_ENABLE( [changelogs], AS_HELP_STRING([--disable-changelogs],[Don't use ChangeLogs]),
use_changelogs=$enableval, use_changelogs='yes' )
if test "x$use_changelogs" == "xyes" ; then
# test changelog functions
AC_CHECK_LIB([lustreapi],[llapi_changelog_start],[have_llapi_changelog_start="yes"])
if test "x$have_llapi_changelog_start" = "xyes"; then
AC_DEFINE(HAVE_CHANGELOGS, 1, [Lustre changelogs records are structures])
AC_CHECK_DECL([CL_IOCTL],AC_DEFINE(_HAVE_CL_IOCTL,1,[CL_IOCTL is defined]),[],[
#define LPX64 "%#llx"
#include <sys/types.h>
#include <asm/types.h>
#include <lustre/lustre_user.h>
])
AC_CHECK_DECL([CL_LAYOUT],AC_DEFINE(HAVE_CL_LAYOUT,1,[Layout change emit changelog records]),[],[
#define LPX64 "%#llx"
#include <sys/types.h>
#include <asm/types.h>
#include <lustre/lustre_user.h>
])
# changelog_ext_rec was removed by commit 0f22e4,
# which added the flexible changelog format. That
# commit added CLF_RENAME, so check for that symbol.
AC_CHECK_DECLS([CLF_RENAME],[],[],[
#define LPX64 "%#llx"
#include <sys/types.h>
#include <asm/types.h>
#include <lustre/lustre_user.h>
])
# default option for sysconfig
INPUT_OPT="--readlog"
fi
if test "x$have_llapi_changelog_start" = "xyes" && \
test "x$have_fid" != "xyes"; then
AC_MSG_ERROR([Conflicting options: fid must be enabled for enabling MDT changelogs management])
fi
fi
if test "x$support_dv" = "xyes" ; then
AC_CHECK_LIB([lustreapi], [llapi_get_data_version], [have_data_version="yes"])
fi
test "x$have_data_version" = "xyes" && DV_CMD="lfs data_version"
# llapi_swap_layouts exists since Lustre2.4 release
# since then, entry striping can change so scanning must update file stripe information
AC_CHECK_LIB([lustreapi], [llapi_fswap_layouts], [have_llapi_fswap_layouts="yes"])
test "x$have_llapi_fswap_layouts" = "xyes" && AC_DEFINE(HAVE_LLAPI_FSWAP_LAYOUTS, 1, [llapi_fswap_layouts is available])
AX_ENABLE_FLAG( [llapi-fork-support], [Must be enabled if liblustreapi uses fork()], [-D_LLAPI_FORKS] )
AX_ENABLE_FLAG( [mds-stat], [ioctl() to MDC instead of POSIX stat()], [-D_MDS_STAT_SUPPORT] )
# pool functions
AC_CHECK_LIB([lustreapi], [llapi_get_poollist], [have_llapi_poollist="yes"])
AC_CHECK_LIB([lustreapi], [llapi_get_poolmembers], [have_llapi_poolmembers="yes"])
test "x$have_llapi_poollist" = "xyes" && test "x$have_llapi_poolmembers" = "xyes" && \
AC_DEFINE(HAVE_LLAPI_GETPOOL_INFO, 1, [llapi_getpool functions are available])
AC_CHECK_MEMBER([struct lov_user_ost_data_v1.l_object_seq], [have_obj_seq="yes"], [have_obj_seq="no"], [
#define LPX64 "%#llx"
#include <sys/types.h>
#include <asm/types.h>
#include <lustre/lustre_user.h>
])
test "x$have_obj_seq" = "xyes" && AC_DEFINE(HAVE_OBJ_SEQ, 1, [lov_user_ost_data_v1 has l_object_seq field])
AC_CHECK_MEMBER([struct lov_user_ost_data_v1.l_object_id], [have_obj_id="yes"], [have_obj_id="no"], [
#define LPX64 "%#llx"
#include <sys/types.h>
#include <asm/types.h>
#include <lustre/lustre_user.h>
])
test "x$have_obj_id" = "xyes" && AC_DEFINE(HAVE_OBJ_ID, 1, [lov_user_ost_data_v1 has l_object_id field])
# Lustre/HSM feature needs Lustre 2.5.0. As some hsm calls were already landed as empty nutshells in 2.4
# we rely on this new call of 2.5.0: llapi_hsm_state_get_fd().
AC_CHECK_LIB([lustreapi], llapi_hsm_state_get_fd, [have_lustre_hsm="yes"])
if test "x$have_lustre_hsm" = "xyes"; then
AC_DEFINE([_LUSTRE_HSM], [1], [Lustre/HSM feature is present])
build_lhsm="ON"
fi
if test "x$support_shook" = "xyes" ; then
# test if library is available for shook mode
AC_CHECK_LIB([shooksvr], [shook_release], [have_shook="yes"])
# fix with dynamic module management
if test "x$have_shook" = "xyes"; then
build_shook="ON"
fi
# check shook to lhsm conversion functions
AC_CHECK_LIB([shooksvr], [shook_lhsmify], [have_shook_lhsmify="yes"])
test "x$have_shook_lhsmify" = "xyes" && \
AC_DEFINE([HAVE_SHOOK_LHSMIFY], [1], [shook_lhsmify function available])
fi
fi
AM_CONDITIONAL(CHANGELOGS, test "x$have_llapi_changelog_start" = "xyes" )
AM_CONDITIONAL(USER_LOVEA, [test "x$have_new_lustre_header" != "xtrue" && test "x$have_llapi_changelog_start" = "xyes"])
AM_CONDITIONAL(LUSTRE_HSM, test "x$have_lustre_hsm" = "xyes")
AM_CONDITIONAL(SHOOK, test "x$have_shook" = "xyes")
# XXX HSM-LITE tagged sections of the code require Lustre 2.x
AM_CONDITIONAL(HSM_LITE, test "x$have_fid" = "xyes")
else
AM_CONDITIONAL(LUSTRE, test 0 = 1 )
AM_CONDITIONAL(CHANGELOGS, test 0 = 1 )
AM_CONDITIONAL(USER_LOVEA, test 0 = 1 )
AM_CONDITIONAL(LUSTRE_HSM, test 0 = 1)
AM_CONDITIONAL(SHOOK, test 0 = 1)
AM_CONDITIONAL(HSM_LITE, test 0 = 1)
fi # end of Lustre support
AC_SUBST(DV_CMD)
AC_SUBST(INPUT_OPT)
AC_CHECK_HEADERS([sys/xattr.h],[],[AC_MSG_ERROR([glibc-devel is not installed.])])
AC_CHECK_LIB([pthread], [pthread_getsequence_np], [have_pthread_getsequence_np="yes"],[have_pthread_getsequence_np="no"])
test "x$have_pthread_getsequence_np" = "xyes" && AC_DEFINE(HAVE_PTHREAD_GETSEQUENCE_NP, 1, [pthread_getsequence_np function exists])
AC_ARG_ENABLE([jemalloc], AS_HELP_STRING([--disable-jemalloc],
[Use standard memory allocator instead of jemalloc]),
[use_jemalloc="$enableval"],[use_jemalloc="yes"])
AM_CONDITIONAL(USE_JEMALLOC, test "x$use_jemalloc" == "xyes" )
if test "x$use_jemalloc" = "xyes" ; then
AC_CHECK_LIB([jemalloc], [malloc_stats_print], LDFLAGS="$LDFLAGS -ljemalloc", \
AC_MSG_ERROR([jemalloc library not found (needs jemalloc and jemalloc-devel)]))
fi
AC_SUBST(PURPOSE_CFLAGS)
AC_SUBST(PURPOSE_LDFLAGS)
CFLAGS="$CFLAGS -I\$(top_srcdir)/src/include"
# Db ?
#AC_ARG_WITH( [db], AS_HELP_STRING([--with-db=MYSQL|SQLITE (default=MYSQL)],[type of database engine] ),
# DB="$withval", DB="MYSQL")
# SQLITE support is deprecated
DB="MYSQL"
AM_CONDITIONAL(USE_MYSQL_DB, test "$DB" = "MYSQL")
AM_CONDITIONAL(USE_SQLITE_DB, test "$DB" = "SQLITE")
# @TODO check database libraries and path
# Db dependent checks and flags
case $DB in
MYSQL)
# check mysql version and mysql_config program
AX_MYSQL_INFO
AC_CHECK_HEADERS([mysql/mysql.h])
AC_CHECK_HEADER([mysql/mysql.h], HAVE_MYSQLCLNT="true",
AC_MSG_ERROR([MySQL client header not found (mysql/mysql.h). mysql-devel may not be installed.]))
DB_CFLAGS="-D_MYSQL `$MYSQL_CONFIG --include`"
DB_LDFLAGS=`mysql_config --libs_r`
if test "$MYSQL_VERSION" -lt "5" ; then
AC_MSG_WARN([MySQL version is too old (<5), optimized accounting won't be supported.])
else
DB_CFLAGS="$DB_CFLAGS -D_MYSQL5"
fi
;;
SQLITE)
# check lib and headers
AC_CHECK_HEADER([sqlite3.h], HAVE_SQLITE_HEADER="true",
AC_MSG_ERROR([sqlite-devel not installed]))
AC_CHECK_LIB([sqlite3], [sqlite3_exec], HAVE_SQLITE_LIB="true",
AC_MSG_ERROR([sqlite3 library not found]))
DB_CFLAGS="-D_SQLITE"
DB_LDFLAGS="-lsqlite3"
;;
*)
AC_MSG_ERROR([This Database is not supported yet])
;;
esac
AC_SUBST(DB_CFLAGS)
AC_SUBST(DB_LDFLAGS)
# Checks for header files.
AC_HEADER_STDC
AC_CHECK_HEADERS([string.h sys/param.h])
# Checks for typedefs, structures, and compiler characteristics.
AC_C_CONST
AC_TYPE_UID_T
AC_TYPE_SIZE_T
# Check if getmntent_r exists
AC_CHECK_FUNC([getmntent_r],[getmntent_r=yes],[getmntent_r=no])
test "$getmntent_r" = "yes" && AC_DEFINE(HAVE_GETMNTENT_R, 1, [Reentrant version of getmntent exists])
AM_CONDITIONAL(MNTENTCOMPAT, test "$getmntent_r" = "no" )
# Check if fallocate(2) exists.
AC_CHECK_FUNC([fallocate],[fallocate=yes],[fallocate=no])
test "$fallocate" = "yes" && AC_DEFINE(HAVE_FALLOCATE, 1, [File preallocation available])
AS_AC_EXPAND(CONFDIR, $sysconfdir)
if test $prefix = NONE && test "$CONFDIR" = "/usr/etc" ; then
CONFDIR="/etc"
fi
AC_MSG_NOTICE([Using config dir $CONFDIR])
AC_DEFINE_UNQUOTED([SYSCONFDIR],"$CONFDIR", [Configuration directory])
AC_SUBST(CONFDIR)
AS_AC_EXPAND(SBINDIR, $sbindir)
AC_SUBST(SBINDIR)
AS_AC_EXPAND(LIBDIR, $libdir)
AC_SUBST(LIBDIR)
if test "$ac_configure_args" = "" ; then
ac_configure_args="''"
fi
# for exporting to Makefile.in
AC_SUBST(ac_configure_args)
AC_OUTPUT
AC_MSG_NOTICE([Summary:])
AC_MSG_NOTICE([Lustre support is $build_lustre])
AC_MSG_NOTICE([Backup support is $build_backup])
AC_MSG_NOTICE([Lustre/HSM support is $build_lhsm])
test -d "/ccc" && AC_MSG_NOTICE([Shook support is $build_shook])
exit 0
================================================
FILE: doc/Makefile.am
================================================
SUBDIRS = templates
================================================
FILE: doc/admin_guides/MOVED_TO
================================================
Documentation is now managed as wiki pages on project web site.
It is available here:
https://github.com/cea-hpc/robinhood/wiki/Documentation
To edit it:
git clone https://github.com/cea-hpc/robinhood.wiki.git
================================================
FILE: doc/doxygen/doxygen.cfg.in
================================================
# Doxyfile 1.4.7
# This file describes the settings to be used by the documentation system
# doxygen (www.doxygen.org) for a project
#
# All text after a hash (#) is considered a comment and will be ignored
# The format is:
# TAG = value [value, ...]
# For lists items can also be appended using:
# TAG += value [value, ...]
# Values that contain spaces should be placed between quotes (" ")
#---------------------------------------------------------------------------
# Project related configuration options
#---------------------------------------------------------------------------
# The PROJECT_NAME tag is a single word (or a sequence of words surrounded
# by quotes) that should identify the project.
PROJECT_NAME = @PACKAGE@
# The PROJECT_NUMBER tag can be used to enter a project or revision number.
# This could be handy for archiving the generated documentation or
# if some version control system is used.
PROJECT_NUMBER = @VERSION@
# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute)
# base path where the generated documentation will be put.
# If a relative path is entered, it will be relative to the location
# where doxygen was started. If left blank the current directory will be used.
OUTPUT_DIRECTORY = .
# If the CREATE_SUBDIRS tag is set to YES, then doxygen will create
# 4096 sub-directories (in 2 levels) under the output directory of each output
# format and will distribute the generated files over these directories.
# Enabling this option can be useful when feeding doxygen a huge amount of
# source files, where putting all generated files in the same directory would
# otherwise cause performance problems for the file system.
CREATE_SUBDIRS = NO
# The OUTPUT_LANGUAGE tag is used to specify the language in which all
# documentation generated by doxygen is written. Doxygen will use this
# information to generate all constant output in the proper language.
# The default language is English, other supported languages are:
# Brazilian, Catalan, Chinese, Chinese-Traditional, Croatian, Czech, Danish,
# Dutch, Finnish, French, German, Greek, Hungarian, Italian, Japanese,
# Japanese-en (Japanese with English messages), Korean, Korean-en, Norwegian,
# Polish, Portuguese, Romanian, Russian, Serbian, Slovak, Slovene, Spanish,
# Swedish, and Ukrainian.
OUTPUT_LANGUAGE = English
# This tag can be used to specify the encoding used in the generated output.
# The encoding is not always determined by the language that is chosen,
# but also whether or not the output is meant for Windows or non-Windows users.
# In case there is a difference, setting the USE_WINDOWS_ENCODING tag to YES
# forces the Windows encoding (this is the default for the Windows binary),
# whereas setting the tag to NO uses a Unix-style encoding (the default for
# all platforms other than Windows).
USE_WINDOWS_ENCODING = NO
# If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will
# include brief member descriptions after the members that are listed in
# the file and class documentation (similar to JavaDoc).
# Set to NO to disable this.
BRIEF_MEMBER_DESC = YES
# If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend
# the brief description of a member or function before the detailed description.
# Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the
# brief descriptions will be completely suppressed.
REPEAT_BRIEF = YES
# This tag implements a quasi-intelligent brief description abbreviator
# that is used to form the text in various listings. Each string
# in this list, if found as the leading text of the brief description, will be
# stripped from the text and the result after processing the whole list, is
# used as the annotated text. Otherwise, the brief description is used as-is.
# If left blank, the following values are used ("$name" is automatically
# replaced with the name of the entity): "The $name class" "The $name widget"
# "The $name file" "is" "provides" "specifies" "contains"
# "represents" "a" "an" "the"
ABBREVIATE_BRIEF =
# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then
# Doxygen will generate a detailed section even if there is only a brief
# description.
ALWAYS_DETAILED_SEC = NO
# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all
# inherited members of a class in the documentation of that class as if those
# members were ordinary class members. Constructors, destructors and assignment
# operators of the base classes will not be shown.
INLINE_INHERITED_MEMB = NO
# If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full
# path before files name in the file list and in the header files. If set
# to NO the shortest path that makes the file name unique will be used.
FULL_PATH_NAMES = NO
# If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag
# can be used to strip a user-defined part of the path. Stripping is
# only done if one of the specified strings matches the left-hand part of
# the path. The tag can be used to show relative paths in the file list.
# If left blank the directory from which doxygen is run is used as the
# path to strip.
STRIP_FROM_PATH =
# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of
# the path mentioned in the documentation of a class, which tells
# the reader which header file to include in order to use a class.
# If left blank only the name of the header file containing the class
# definition is used. Otherwise one should specify the include paths that
# are normally passed to the compiler using the -I flag.
STRIP_FROM_INC_PATH =
# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter
# (but less readable) file names. This can be useful is your file systems
# doesn't support long names like on DOS, Mac, or CD-ROM.
SHORT_NAMES = NO
# If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen
# will interpret the first line (until the first dot) of a JavaDoc-style
# comment as the brief description. If set to NO, the JavaDoc
# comments will behave just like the Qt-style comments (thus requiring an
# explicit @brief command for a brief description.
JAVADOC_AUTOBRIEF = YES
# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen
# treat a multi-line C++ special comment block (i.e. a block of //! or ///
# comments) as a brief description. This used to be the default behaviour.
# The new default is to treat a multi-line C++ comment block as a detailed
# description. Set this tag to YES if you prefer the old behaviour instead.
MULTILINE_CPP_IS_BRIEF = NO
# If the DETAILS_AT_TOP tag is set to YES then Doxygen
# will output the detailed description near the top, like JavaDoc.
# If set to NO, the detailed description appears after the member
# documentation.
DETAILS_AT_TOP = NO
# If the INHERIT_DOCS tag is set to YES (the default) then an undocumented
# member inherits the documentation from any documented member that it
# re-implements.
INHERIT_DOCS = YES
# If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce
# a new page for each member. If set to NO, the documentation of a member will
# be part of the file/class/namespace that contains it.
SEPARATE_MEMBER_PAGES = NO
# The TAB_SIZE tag can be used to set the number of spaces in a tab.
# Doxygen uses this value to replace tabs by spaces in code fragments.
TAB_SIZE = 4
# This tag can be used to specify a number of aliases that acts
# as commands in the documentation. An alias has the form "name=value".
# For example adding "sideeffect=\par Side Effects:\n" will allow you to
# put the command \sideeffect (or @sideeffect) in the documentation, which
# will result in a user-defined paragraph with heading "Side Effects:".
# You can put \n's in the value part of an alias to insert newlines.
ALIASES = "TODO=@todo"
# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C
# sources only. Doxygen will then generate output that is more tailored for C.
# For instance, some of the names that are used will be different. The list
# of all members will be omitted, etc.
OPTIMIZE_OUTPUT_FOR_C = YES
# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java
# sources only. Doxygen will then generate output that is more tailored for Java.
# For instance, namespaces will be presented as packages, qualified scopes
# will look different, etc.
OPTIMIZE_OUTPUT_JAVA = NO
# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want to
# include (a tag file for) the STL sources as input, then you should
# set this tag to YES in order to let doxygen match functions declarations and
# definitions whose arguments contain STL classes (e.g. func(std::string); v.s.
# func(std::string) {}). This also make the inheritance and collaboration
# diagrams that involve STL classes more complete and accurate.
BUILTIN_STL_SUPPORT = NO
# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC
# tag is set to YES, then doxygen will reuse the documentation of the first
# member in the group (if any) for the other members of the group. By default
# all members of a group must be documented explicitly.
DISTRIBUTE_GROUP_DOC = NO
# Set the SUBGROUPING tag to YES (the default) to allow class member groups of
# the same type (for instance a group of public functions) to be put as a
# subgroup of that type (e.g. under the Public Functions section). Set it to
# NO to prevent subgrouping. Alternatively, this can be done per class using
# the \nosubgrouping command.
SUBGROUPING = YES
#---------------------------------------------------------------------------
# Build related configuration options
#---------------------------------------------------------------------------
# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in
# documentation are documented, even if no documentation was available.
# Private class members and static file members will be hidden unless
# the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES
EXTRACT_ALL = YES
# If the EXTRACT_PRIVATE tag is set to YES all private members of a class
# will be included in the documentation.
EXTRACT_PRIVATE = NO
# If the EXTRACT_STATIC tag is set to YES all static members of a file
# will be included in the documentation.
EXTRACT_STATIC = YES
# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs)
# defined locally in source files will be included in the documentation.
# If set to NO only classes defined in header files are included.
EXTRACT_LOCAL_CLASSES = YES
# This flag is only useful for Objective-C code. When set to YES local
# methods, which are defined in the implementation section but not in
# the interface are included in the documentation.
# If set to NO (the default) only methods in the interface are included.
EXTRACT_LOCAL_METHODS = NO
# If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all
# undocumented members of documented classes, files or namespaces.
# If set to NO (the default) these members will be included in the
# various overviews, but no documentation section is generated.
# This option has no effect if EXTRACT_ALL is enabled.
HIDE_UNDOC_MEMBERS = NO
# If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all
# undocumented classes that are normally visible in the class hierarchy.
# If set to NO (the default) these classes will be included in the various
# overviews. This option has no effect if EXTRACT_ALL is enabled.
HIDE_UNDOC_CLASSES = NO
# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all
# friend (class|struct|union) declarations.
# If set to NO (the default) these declarations will be included in the
# documentation.
HIDE_FRIEND_COMPOUNDS = NO
# If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any
# documentation blocks found inside the body of a function.
# If set to NO (the default) these blocks will be appended to the
# function's detailed documentation block.
HIDE_IN_BODY_DOCS = NO
# The INTERNAL_DOCS tag determines if documentation
# that is typed after a \internal command is included. If the tag is set
# to NO (the default) then the documentation will be excluded.
# Set it to YES to include the internal documentation.
INTERNAL_DOCS = NO
# If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate
# file names in lower-case letters. If set to YES upper-case letters are also
# allowed. This is useful if you have classes or files whose names only differ
# in case and if your file system supports case sensitive file names. Windows
# and Mac users are advised to set this option to NO.
CASE_SENSE_NAMES = YES
# If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen
# will show members with their full class and namespace scopes in the
# documentation. If set to YES the scope will be hidden.
HIDE_SCOPE_NAMES = NO
# If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen
# will put a list of the files that are included by a file in the documentation
# of that file.
SHOW_INCLUDE_FILES = YES
# If the INLINE_INFO tag is set to YES (the default) then a tag [inline]
# is inserted in the documentation for inline members.
INLINE_INFO = YES
# If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen
# will sort the (detailed) documentation of file and class members
# alphabetically by member name. If set to NO the members will appear in
# declaration order.
SORT_MEMBER_DOCS = YES
# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the
# brief documentation of file, namespace and class members alphabetically
# by member name. If set to NO (the default) the members will appear in
# declaration order.
SORT_BRIEF_DOCS = NO
# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be
# sorted by fully-qualified names, including namespaces. If set to
# NO (the default), the class list will be sorted only by class name,
# not including the namespace part.
# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES.
# Note: This option applies only to the class list, not to the
# alphabetical list.
SORT_BY_SCOPE_NAME = NO
# The GENERATE_TODOLIST tag can be used to enable (YES) or
# disable (NO) the todo list. This list is created by putting \todo
# commands in the documentation.
GENERATE_TODOLIST = YES
# The GENERATE_TESTLIST tag can be used to enable (YES) or
# disable (NO) the test list. This list is created by putting \test
# commands in the documentation.
GENERATE_TESTLIST = YES
# The GENERATE_BUGLIST tag can be used to enable (YES) or
# disable (NO) the bug list. This list is created by putting \bug
# commands in the documentation.
GENERATE_BUGLIST = YES
# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or
# disable (NO) the deprecated list. This list is created by putting
# \deprecated commands in the documentation.
GENERATE_DEPRECATEDLIST= YES
# The ENABLED_SECTIONS tag can be used to enable conditional
# documentation sections, marked by \if sectionname ... \endif.
ENABLED_SECTIONS =
# The MAX_INITIALIZER_LINES tag determines the maximum number of lines
# the initial value of a variable or define consists of for it to appear in
# the documentation. If the initializer consists of more lines than specified
# here it will be hidden. Use a value of 0 to hide initializers completely.
# The appearance of the initializer of individual variables and defines in the
# documentation can be controlled using \showinitializer or \hideinitializer
# command in the documentation regardless of this setting.
MAX_INITIALIZER_LINES = 30
# Set the SHOW_USED_FILES tag to NO to disable the list of files generated
# at the bottom of the documentation of classes and structs. If set to YES the
# list will mention the files that were used to generate the documentation.
SHOW_USED_FILES = YES
# If the sources in your project are distributed over multiple directories
# then setting the SHOW_DIRECTORIES tag to YES will show the directory hierarchy
# in the documentation. The default is NO.
SHOW_DIRECTORIES = YES
# The FILE_VERSION_FILTER tag can be used to specify a program or script that
# doxygen should invoke to get the current version for each file (typically from the
# version control system). Doxygen will invoke the program by executing (via
# popen()) the command <command> <input-file>, where <command> is the value of
# the FILE_VERSION_FILTER tag, and <input-file> is the name of an input file
# provided by doxygen. Whatever the program writes to standard output
# is used as the file version. See the manual for examples.
FILE_VERSION_FILTER =
#---------------------------------------------------------------------------
# configuration options related to warning and progress messages
#---------------------------------------------------------------------------
# The QUIET tag can be used to turn on/off the messages that are generated
# by doxygen. Possible values are YES and NO. If left blank NO is used.
QUIET = NO
# The WARNINGS tag can be used to turn on/off the warning messages that are
# generated by doxygen. Possible values are YES and NO. If left blank
# NO is used.
WARNINGS = YES
# If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings
# for undocumented members. If EXTRACT_ALL is set to YES then this flag will
# automatically be disabled.
WARN_IF_UNDOCUMENTED = YES
# If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for
# potential errors in the documentation, such as not documenting some
# parameters in a documented function, or documenting parameters that
# don't exist or using markup commands wrongly.
WARN_IF_DOC_ERROR = YES
# This WARN_NO_PARAMDOC option can be abled to get warnings for
# functions that are documented, but have no documentation for their parameters
# or return value. If set to NO (the default) doxygen will only warn about
# wrong or incomplete parameter documentation, but not about the absence of
# documentation.
WARN_NO_PARAMDOC = NO
# The WARN_FORMAT tag determines the format of the warning messages that
# doxygen can produce. The string should contain the $file, $line, and $text
# tags, which will be replaced by the file and line number from which the
# warning originated and the warning text. Optionally the format may contain
# $version, which will be replaced by the version of the file (if it could
# be obtained via FILE_VERSION_FILTER)
WARN_FORMAT = "$file:$line: $text"
# The WARN_LOGFILE tag can be used to specify a file to which warning
# and error messages should be written. If left blank the output is written
# to stderr.
WARN_LOGFILE =
#---------------------------------------------------------------------------
# configuration options related to the input files
#---------------------------------------------------------------------------
# The INPUT tag can be used to specify the files and/or directories that contain
# documented source files. You may enter file names like "myfile.cpp" or
# directories like "/usr/src/myproject". Separate the files or directories
# with spaces.
INPUT = @top_srcdir@/src/include
# If the value of the INPUT tag contains directories, you can use the
# FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp
# and *.h) to filter out the source-files in the directories. If left
# blank the following patterns are tested:
# *.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh *.hxx
# *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.py
FILE_PATTERNS = *.h
# The RECURSIVE tag can be used to turn specify whether or not subdirectories
# should be searched for input files as well. Possible values are YES and NO.
# If left blank NO is used.
RECURSIVE = NO
# The EXCLUDE tag can be used to specify files and/or directories that should
# excluded from the INPUT source files. This way you can easily exclude a
# subdirectory from a directory tree whose root is specified with the INPUT tag.
EXCLUDE =
# The EXCLUDE_SYMLINKS tag can be used select whether or not files or
# directories that are symbolic links (a Unix filesystem feature) are excluded
# from the input.
EXCLUDE_SYMLINKS = NO
# If the value of the INPUT tag contains directories, you can use the
# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude
# certain files from those directories. Note that the wildcards are matched
# against the file with absolute path, so to exclude all test directories
# for example use the pattern */test/*
EXCLUDE_PATTERNS = config.h
# The EXAMPLE_PATH tag can be used to specify one or more files or
# directories that contain example code fragments that are included (see
# the \include command).
EXAMPLE_PATH =
# If the value of the EXAMPLE_PATH tag contains directories, you can use the
# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp
# and *.h) to filter out the source-files in the directories. If left
# blank all files are included.
EXAMPLE_PATTERNS =
# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be
# searched for input files to be used with the \include or \dontinclude
# commands irrespective of the value of the RECURSIVE tag.
# Possible values are YES and NO. If left blank NO is used.
EXAMPLE_RECURSIVE = NO
# The IMAGE_PATH tag can be used to specify one or more files or
# directories that contain image that are included in the documentation (see
# the \image command).
IMAGE_PATH =
# The INPUT_FILTER tag can be used to specify a program that doxygen should
# invoke to filter for each input file. Doxygen will invoke the filter program
# by executing (via popen()) the command <filter> <input-file>, where <filter>
# is the value of the INPUT_FILTER tag, and <input-file> is the name of an
# input file. Doxygen will then use the output that the filter program writes
# to standard output. If FILTER_PATTERNS is specified, this tag will be
# ignored.
INPUT_FILTER =
# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern
# basis. Doxygen will compare the file name with each pattern and apply the
# filter if there is a match. The filters are a list of the form:
# pattern=filter (like *.cpp=my_cpp_filter). See INPUT_FILTER for further
# info on how filters are used. If FILTER_PATTERNS is empty, INPUT_FILTER
# is applied to all files.
FILTER_PATTERNS =
# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using
# INPUT_FILTER) will be used to filter the input files when producing source
# files to browse (i.e. when SOURCE_BROWSER is set to YES).
FILTER_SOURCE_FILES = NO
#---------------------------------------------------------------------------
# configuration options related to source browsing
#---------------------------------------------------------------------------
# If the SOURCE_BROWSER tag is set to YES then a list of source files will
# be generated. Documented entities will be cross-referenced with these sources.
# Note: To get rid of all source code in the generated output, make sure also
# VERBATIM_HEADERS is set to NO.
SOURCE_BROWSER = NO
# Setting the INLINE_SOURCES tag to YES will include the body
# of functions and classes directly in the documentation.
INLINE_SOURCES = NO
# Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct
# doxygen to hide any special comment blocks from generated source code
# fragments. Normal C and C++ comments will always remain visible.
STRIP_CODE_COMMENTS = YES
# If the REFERENCED_BY_RELATION tag is set to YES (the default)
# then for each documented function all documented
# functions referencing it will be listed.
REFERENCED_BY_RELATION = YES
# If the REFERENCES_RELATION tag is set to YES (the default)
# then for each documented function all documented entities
# called/used by that function will be listed.
REFERENCES_RELATION = YES
# If the REFERENCES_LINK_SOURCE tag is set to YES (the default)
# and SOURCE_BROWSER tag is set to YES, then the hyperlinks from
# functions in REFERENCES_RELATION and REFERENCED_BY_RELATION lists will
# link to the source code. Otherwise they will link to the documentstion.
REFERENCES_LINK_SOURCE = YES
# If the USE_HTAGS tag is set to YES then the references to source code
# will point to the HTML generated by the htags(1) tool instead of doxygen
# built-in source browser. The htags tool is part of GNU's global source
# tagging system (see http://www.gnu.org/software/global/global.html). You
# will need version 4.8.6 or higher.
USE_HTAGS = NO
# If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen
# will generate a verbatim copy of the header file for each class for
# which an include is specified. Set to NO to disable this.
VERBATIM_HEADERS = YES
#---------------------------------------------------------------------------
# configuration options related to the alphabetical class index
#---------------------------------------------------------------------------
# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index
# of all compounds will be generated. Enable this if the project
# contains a lot of classes, structs, unions or interfaces.
ALPHABETICAL_INDEX = NO
# If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then
# the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns
# in which this list will be split (can be a number in the range [1..20])
COLS_IN_ALPHA_INDEX = 5
# In case all classes in a project start with a common prefix, all
# classes will be put under the same header in the alphabetical index.
# The IGNORE_PREFIX tag can be used to specify one or more prefixes that
# should be ignored while generating the index headers.
IGNORE_PREFIX =
#---------------------------------------------------------------------------
# configuration options related to the HTML output
#---------------------------------------------------------------------------
# If the GENERATE_HTML tag is set to YES (the default) Doxygen will
# generate HTML output.
GENERATE_HTML = YES
# The HTML_OUTPUT tag is used to specify where the HTML docs will be put.
# If a relative path is entered the value of OUTPUT_DIRECTORY will be
# put in front of it. If left blank `html' will be used as the default path.
HTML_OUTPUT = html
# The HTML_FILE_EXTENSION tag can be used to specify the file extension for
# each generated HTML page (for example: .htm,.php,.asp). If it is left blank
# doxygen will generate files with .html extension.
HTML_FILE_EXTENSION = .html
# The HTML_HEADER tag can be used to specify a personal HTML header for
# each generated HTML page. If it is left blank doxygen will generate a
# standard header.
HTML_HEADER =
# The HTML_FOOTER tag can be used to specify a personal HTML footer for
# each generated HTML page. If it is left blank doxygen will generate a
# standard footer.
HTML_FOOTER =
# The HTML_STYLESHEET tag can be used to specify a user-defined cascading
# style sheet that is used by each HTML page. It can be used to
# fine-tune the look of the HTML output. If the tag is left blank doxygen
# will generate a default style sheet. Note that doxygen will try to copy
# the style sheet file to the HTML output directory, so don't put your own
# stylesheet in the HTML output directory as well, or it will be erased!
HTML_STYLESHEET =
# If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes,
# files or namespaces will be aligned in HTML using tables. If set to
# NO a bullet list will be used.
HTML_ALIGN_MEMBERS = YES
# If the GENERATE_HTMLHELP tag is set to YES, additional index files
# will be generated that can be used as input for tools like the
# Microsoft HTML help workshop to generate a compressed HTML help file (.chm)
# of the generated HTML documentation.
GENERATE_HTMLHELP = NO
# If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can
# be used to specify the file name of the resulting .chm file. You
# can add a path in front of the file if the result should not be
# written to the html output directory.
CHM_FILE =
# If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can
# be used to specify the location (absolute path including file name) of
# the HTML help compiler (hhc.exe). If non-empty doxygen will try to run
# the HTML help compiler on the generated index.hhp.
HHC_LOCATION =
# If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag
# controls if a separate .chi index file is generated (YES) or that
# it should be included in the master .chm file (NO).
GENERATE_CHI = NO
# If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag
# controls whether a binary table of contents is generated (YES) or a
# normal table of contents (NO) in the .chm file.
BINARY_TOC = NO
# The TOC_EXPAND flag can be set to YES to add extra items for group members
# to the contents of the HTML help documentation and to the tree view.
TOC_EXPAND = NO
# The DISABLE_INDEX tag can be used to turn on/off the condensed index at
# top of each HTML page. The value NO (the default) enables the index and
# the value YES disables it.
DISABLE_INDEX = NO
# This tag can be used to set the number of enum values (range [1..20])
# that doxygen will group on one line in the generated HTML documentation.
ENUM_VALUES_PER_LINE = 4
# If the GENERATE_TREEVIEW tag is set to YES, a side panel will be
# generated containing a tree-like index structure (just like the one that
# is generated for HTML Help). For this to work a browser that supports
# JavaScript, DHTML, CSS and frames is required (for instance Mozilla 1.0+,
# Netscape 6.0+, Internet explorer 5.0+, or Konqueror). Windows users are
# probably better off using the HTML help feature.
GENERATE_TREEVIEW = NO
# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be
# used to set the initial width (in pixels) of the frame in which the tree
# is shown.
TREEVIEW_WIDTH = 250
#---------------------------------------------------------------------------
# configuration options related to the LaTeX output
#---------------------------------------------------------------------------
# If the GENERATE_LATEX tag is set to YES (the default) Doxygen will
# generate Latex output.
GENERATE_LATEX = NO
# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put.
# If a relative path is entered the value of OUTPUT_DIRECTORY will be
# put in front of it. If left blank `latex' will be used as the default path.
LATEX_OUTPUT = latex
# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be
# invoked. If left blank `latex' will be used as the default command name.
LATEX_CMD_NAME = latex
# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to
# generate index for LaTeX. If left blank `makeindex' will be used as the
# default command name.
MAKEINDEX_CMD_NAME = makeindex
# If the COMPACT_LATEX tag is set to YES Doxygen generates more compact
# LaTeX documents. This may be useful for small projects and may help to
# save some trees in general.
COMPACT_LATEX = NO
# The PAPER_TYPE tag can be used to set the paper type that is used
# by the printer. Possible values are: a4, a4wide, letter, legal and
# executive. If left blank a4wide will be used.
PAPER_TYPE = a4wide
# The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX
# packages that should be included in the LaTeX output.
EXTRA_PACKAGES =
# The LATEX_HEADER tag can be used to specify a personal LaTeX header for
# the generated latex document. The header should contain everything until
# the first chapter. If it is left blank doxygen will generate a
# standard header. Notice: only use this tag if you know what you are doing!
LATEX_HEADER =
# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated
# is prepared for conversion to pdf (using ps2pdf). The pdf file will
# contain links (just like the HTML output) instead of page references
# This makes the output suitable for online browsing using a pdf viewer.
PDF_HYPERLINKS = NO
# If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of
# plain latex in the generated Makefile. Set this option to YES to get a
# higher quality PDF documentation.
USE_PDFLATEX = NO
# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode.
# command to the generated LaTeX files. This will instruct LaTeX to keep
# running if errors occur, instead of asking the user for help.
# This option is also used when generating formulas in HTML.
LATEX_BATCHMODE = NO
# If LATEX_HIDE_INDICES is set to YES then doxygen will not
# include the index chapters (such as File Index, Compound Index, etc.)
# in the output.
LATEX_HIDE_INDICES = NO
#---------------------------------------------------------------------------
# configuration options related to the RTF output
#---------------------------------------------------------------------------
# If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output
# The RTF output is optimized for Word 97 and may not look very pretty with
# other RTF readers or editors.
GENERATE_RTF = NO
# The RTF_OUTPUT tag is used to specify where the RTF docs will be put.
# If a relative path is entered the value of OUTPUT_DIRECTORY will be
# put in front of it. If left blank `rtf' will be used as the default path.
RTF_OUTPUT = rtf
# If the COMPACT_RTF tag is set to YES Doxygen generates more compact
# RTF documents. This may be useful for small projects and may help to
# save some trees in general.
COMPACT_RTF = NO
# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated
# will contain hyperlink fields. The RTF file will
# contain links (just like the HTML output) instead of page references.
# This makes the output suitable for online browsing using WORD or other
# programs which support those fields.
# Note: wordpad (write) and others do not support links.
RTF_HYPERLINKS = NO
# Load stylesheet definitions from file. Syntax is similar to doxygen's
# config file, i.e. a series of assignments. You only have to provide
# replacements, missing definitions are set to their default value.
RTF_STYLESHEET_FILE =
# Set optional variables used in the generation of an rtf document.
# Syntax is similar to doxygen's config file.
RTF_EXTENSIONS_FILE =
#---------------------------------------------------------------------------
# configuration options related to the man page output
#---------------------------------------------------------------------------
# If the GENERATE_MAN tag is set to YES (the default) Doxygen will
# generate man pages
GENERATE_MAN = NO
# The MAN_OUTPUT tag is used to specify where the man pages will be put.
# If a relative path is entered the value of OUTPUT_DIRECTORY will be
# put in front of it. If left blank `man' will be used as the default path.
MAN_OUTPUT = man
# The MAN_EXTENSION tag determines the extension that is added to
# the generated man pages (default is the subroutine's section .3)
MAN_EXTENSION = .3
# If the MAN_LINKS tag is set to YES and Doxygen generates man output,
# then it will generate one additional man file for each entity
# documented in the real man page(s). These additional files
# only source the real man page, but without them the man command
# would be unable to find the correct page. The default is NO.
MAN_LINKS = NO
#---------------------------------------------------------------------------
# configuration options related to the XML output
#---------------------------------------------------------------------------
# If the GENERATE_XML tag is set to YES Doxygen will
# generate an XML file that captures the structure of
# the code including all documentation.
GENERATE_XML = NO
# The XML_OUTPUT tag is used to specify where the XML pages will be put.
# If a relative path is entered the value of OUTPUT_DIRECTORY will be
# put in front of it. If left blank `xml' will be used as the default path.
XML_OUTPUT = xml
# The XML_SCHEMA tag can be used to specify an XML schema,
# which can be used by a validating XML parser to check the
# syntax of the XML files.
XML_SCHEMA =
# The XML_DTD tag can be used to specify an XML DTD,
# which can be used by a validating XML parser to check the
# syntax of the XML files.
XML_DTD =
# If the XML_PROGRAMLISTING tag is set to YES Doxygen will
# dump the program listings (including syntax highlighting
# and cross-referencing information) to the XML output. Note that
# enabling this will significantly increase the size of the XML output.
XML_PROGRAMLISTING = YES
#---------------------------------------------------------------------------
# configuration options for the AutoGen Definitions output
#---------------------------------------------------------------------------
# If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will
# generate an AutoGen Definitions (see autogen.sf.net) file
# that captures the structure of the code including all
# documentation. Note that this feature is still experimental
# and incomplete at the moment.
GENERATE_AUTOGEN_DEF = NO
#---------------------------------------------------------------------------
# configuration options related to the Perl module output
#---------------------------------------------------------------------------
# If the GENERATE_PERLMOD tag is set to YES Doxygen will
# generate a Perl module file that captures the structure of
# the code including all documentation. Note that this
# feature is still experimental and incomplete at the
# moment.
GENERATE_PERLMOD = NO
# If the PERLMOD_LATEX tag is set to YES Doxygen will generate
# the necessary Makefile rules, Perl scripts and LaTeX code to be able
# to generate PDF and DVI output from the Perl module output.
PERLMOD_LATEX = NO
# If the PERLMOD_PRETTY tag is set to YES the Perl module output will be
# nicely formatted so it can be parsed by a human reader. This is useful
# if you want to understand what is going on. On the other hand, if this
# tag is set to NO the size of the Perl module output will be much smaller
# and Perl will parse it just the same.
PERLMOD_PRETTY = YES
# The names of the make variables in the generated doxyrules.make file
# are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX.
# This is useful so different doxyrules.make files included by the same
# Makefile don't overwrite each other's variables.
PERLMOD_MAKEVAR_PREFIX =
#---------------------------------------------------------------------------
# Configuration options related to the preprocessor
#---------------------------------------------------------------------------
# If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will
# evaluate all C-preprocessor directives found in the sources and include
# files.
ENABLE_PREPROCESSING = NO
# If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro
# names in the source code. If set to NO (the default) only conditional
# compilation will be performed. Macro expansion can be done in a controlled
# way by setting EXPAND_ONLY_PREDEF to YES.
MACRO_EXPANSION = NO
# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES
# then the macro expansion is limited to the macros specified with the
# PREDEFINED and EXPAND_AS_DEFINED tags.
EXPAND_ONLY_PREDEF = NO
# If the SEARCH_INCLUDES tag is set to YES (the default) the includes files
# in the INCLUDE_PATH (see below) will be search if a #include is found.
SEARCH_INCLUDES = NO
# The INCLUDE_PATH tag can be used to specify one or more directories that
# contain include files that are not input files but should be processed by
# the preprocessor.
INCLUDE_PATH =
# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard
# patterns (like *.h and *.hpp) to filter out the header-files in the
# directories. If left blank, the patterns specified with FILE_PATTERNS will
# be used.
INCLUDE_FILE_PATTERNS =
# The PREDEFINED tag can be used to specify one or more macro names that
# are defined before the preprocessor is started (similar to the -D option of
# gcc). The argument of the tag is a list of macros of the form: name
# or name=definition (no spaces). If the definition and the = are
# omitted =1 is assumed. To prevent a macro definition from being
# undefined via #undef or recursively expanded use the := operator
# instead of the = operator.
PREDEFINED =
# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then
# this tag can be used to specify a list of macro names that should be expanded.
# The macro definition that is found in the sources will be used.
# Use the PREDEFINED tag if you want to use a different macro definition.
EXPAND_AS_DEFINED =
# If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then
# doxygen's preprocessor will remove all function-like macros that are alone
# on a line, have an all uppercase name, and do not end with a semicolon. Such
# function macros are typically used for boiler-plate code, and will confuse
# the parser if not removed.
SKIP_FUNCTION_MACROS = YES
#---------------------------------------------------------------------------
# Configuration::additions related to external references
#---------------------------------------------------------------------------
# The TAGFILES option can be used to specify one or more tagfiles.
# Optionally an initial location of the external documentation
# can be added for each tagfile. The format of a tag file without
# this location is as follows:
# TAGFILES = file1 file2 ...
# Adding location for the tag files is done as follows:
# TAGFILES = file1=loc1 "file2 = loc2" ...
# where "loc1" and "loc2" can be relative or absolute paths or
# URLs. If a location is present for each tag, the installdox tool
# does not have to be run to correct the links.
# Note that each tag file must have a unique name
# (where the name does NOT include the path)
# If a tag file is not located in the directory in which doxygen
# is run, you must also specify the path to the tagfile here.
TAGFILES =
# When a file name is specified after GENERATE_TAGFILE, doxygen will create
# a tag file that is based on the input files it reads.
GENERATE_TAGFILE =
# If the ALLEXTERNALS tag is set to YES all external classes will be listed
# in the class index. If set to NO only the inherited external classes
# will be listed.
ALLEXTERNALS = NO
# If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed
# in the modules index. If set to NO, only the current project's groups will
# be listed.
EXTERNAL_GROUPS = YES
# The PERL_PATH should be the absolute path and name of the perl script
# interpreter (i.e. the result of `which perl').
PERL_PATH = /usr/bin/perl
#---------------------------------------------------------------------------
# Configuration options related to the dot tool
#---------------------------------------------------------------------------
# If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will
# generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base
# or super classes. Setting the tag to NO turns the diagrams off. Note that
# this option is superseded by the HAVE_DOT option below. This is only a
# fallback. It is recommended to install and use dot, since it yields more
# powerful graphs.
CLASS_DIAGRAMS = YES
# If set to YES, the inheritance and collaboration graphs will hide
# inheritance and usage relations if the target is undocumented
# or is not a class.
HIDE_UNDOC_RELATIONS = YES
# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is
# available from the path. This tool is part of Graphviz, a graph visualization
# toolkit from AT&T and Lucent Bell Labs. The other options in this section
# have no effect if this option is set to NO (the default)
HAVE_DOT = NO
# If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen
# will generate a graph for each documented class showing the direct and
# indirect inheritance relations. Setting this tag to YES will force the
# the CLASS_DIAGRAMS tag to NO.
CLASS_GRAPH = YES
# If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen
# will generate a graph for each documented class showing the direct and
# indirect implementation dependencies (inheritance, containment, and
# class references variables) of the class with other documented classes.
COLLABORATION_GRAPH = YES
# If the GROUP_GRAPHS and HAVE_DOT tags are set to YES then doxygen
# will generate a graph for groups, showing the direct groups dependencies
GROUP_GRAPHS = YES
# If the UML_LOOK tag is set to YES doxygen will generate inheritance and
# collaboration diagrams in a style similar to the OMG's Unified Modeling
# Language.
UML_LOOK = NO
# If set to YES, the inheritance and collaboration graphs will show the
# relations between templates and their instances.
TEMPLATE_RELATIONS = NO
# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT
# tags are set to YES then doxygen will generate a graph for each documented
# file showing the direct and indirect include dependencies of the file with
# other documented files.
INCLUDE_GRAPH = YES
# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and
# HAVE_DOT tags are set to YES then doxygen will generate a graph for each
# documented header file showing the documented files that directly or
# indirectly include this file.
INCLUDED_BY_GRAPH = YES
# If the CALL_GRAPH and HAVE_DOT tags are set to YES then doxygen will
# generate a call dependency graph for every global function or class method.
# Note that enabling this option will significantly increase the time of a run.
# So in most cases it will be better to enable call graphs for selected
# functions only using the \callgraph command.
CALL_GRAPH = NO
# If the CALLER_GRAPH and HAVE_DOT tags are set to YES then doxygen will
# generate a caller dependency graph for every global function or class method.
# Note that enabling this option will significantly increase the time of a run.
# So in most cases it will be better to enable caller graphs for selected
# functions only using the \callergraph command.
CALLER_GRAPH = NO
# If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen
# will graphical hierarchy of all classes instead of a textual one.
GRAPHICAL_HIERARCHY = YES
# If the DIRECTORY_GRAPH, SHOW_DIRECTORIES and HAVE_DOT tags are set to YES
# then doxygen will show the dependencies a directory has on other directories
# in a graphical way. The dependency relations are determined by the #include
# relations between the files in the directories.
DIRECTORY_GRAPH = YES
# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images
# generated by dot. Possible values are png, jpg, or gif
# If left blank png will be used.
DOT_IMAGE_FORMAT = png
# The tag DOT_PATH can be used to specify the path where the dot tool can be
# found. If left blank, it is assumed the dot tool can be found in the path.
DOT_PATH =
# The DOTFILE_DIRS tag can be used to specify one or more directories that
# contain dot files that are included in the documentation (see the
# \dotfile command).
DOTFILE_DIRS =
# The MAX_DOT_GRAPH_WIDTH tag can be used to set the maximum allowed width
# (in pixels) of the graphs generated by dot. If a graph becomes larger than
# this value, doxygen will try to truncate the graph, so that it fits within
# the specified constraint. Beware that most browsers cannot cope with very
# large images.
MAX_DOT_GRAPH_WIDTH = 1024
# The MAX_DOT_GRAPH_HEIGHT tag can be used to set the maximum allows height
# (in pixels) of the graphs generated by dot. If a graph becomes larger than
# this value, doxygen will try to truncate the graph, so that it fits within
# the specified constraint. Beware that most browsers cannot cope with very
# large images.
MAX_DOT_GRAPH_HEIGHT = 1024
# The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the
# graphs generated by dot. A depth value of 3 means that only nodes reachable
# from the root by following a path via at most 3 edges will be shown. Nodes
# that lay further from the root node will be omitted. Note that setting this
# option to 1 or 2 may greatly reduce the computation time needed for large
# code bases. Also note that a graph may be further truncated if the graph's
# image dimensions are not sufficient to fit the graph (see MAX_DOT_GRAPH_WIDTH
# and MAX_DOT_GRAPH_HEIGHT). If 0 is used for the depth value (the default),
# the graph is not depth-constrained.
MAX_DOT_GRAPH_DEPTH = 0
# Set the DOT_TRANSPARENT tag to YES to generate images with a transparent
# background. This is disabled by default, which results in a white background.
# Warning: Depending on the platform used, enabling this option may lead to
# badly anti-aliased labels on the edges of a graph (i.e. they become hard to
# read).
DOT_TRANSPARENT = NO
# Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output
# files in one run (i.e. multiple -o and -T options on the command line). This
# makes dot run faster, but since only newer versions of dot (>1.8.10)
# support this, this feature is disabled by default.
DOT_MULTI_TARGETS = NO
# If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will
# generate a legend page explaining the meaning of the various boxes and
# arrows in the dot generated graphs.
GENERATE_LEGEND = YES
# If the DOT_CLEANUP tag is set to YES (the default) Doxygen will
# remove the intermediate dot files that are used to generate
# the various graphs.
DOT_CLEANUP = YES
#---------------------------------------------------------------------------
# Configuration::additions related to the search engine
#---------------------------------------------------------------------------
# The SEARCHENGINE tag specifies whether or not a search engine should be
# used. If set to NO the values of all tags below this one will be ignored.
SEARCHENGINE = NO
================================================
FILE: doc/templates/Makefile.am
================================================
configdir = @CONFDIR@/robinhood.d
templatesdir = $(configdir)/templates
includesdir = $(configdir)/includes
dist_templates_DATA = basic.conf example_alerts.conf example_checksum.conf \
example_cleanup.conf example_lhsm.conf example_modeguard.conf \
example_rmdir.conf example_shook.conf
dist_includes_DATA = includes/alerts.inc includes/backup.inc includes/check.inc \
includes/lhsm.inc includes/modeguard.inc includes/rmdir.inc \
includes/rmdir_old.inc includes/shook.inc includes/tmpfs.inc
================================================
FILE: doc/templates/basic.conf
================================================
General {
fs_path = "/path/to/fs";
# filesystem type, as displayed by 'mount' (e.g. ext4, xfs, lustre, ...)
fs_type = xfs;
}
Log {
log_file = "/var/log/robinhood.log";
report_file = "/var/log/robinhood_actions.log";
alert_file = "/var/log/robinhood_alerts.log";
}
ListManager {
MySQL {
server = localhost;
db = rbh_test;
user = robinhood;
password_file = /etc/robinhood.d/.dbpassword;
}
}
# Lustre 2.x only
ChangeLog {
MDT {
mdt_name = "MDT0000";
reader_id = "cl1";
}
}
# -*- mode: c; c-basic-offset: 4; indent-tabs-mode: nil; -*-
# vim:expandtab:shiftwidth=4:tabstop=4:
================================================
FILE: doc/templates/example_alerts.conf
================================================
# -*- mode: c; c-basic-offset: 4; indent-tabs-mode: nil; -*-
# vim:expandtab:shiftwidth=4:tabstop=4:
General {
fs_path = /mnt/lustre;
fs_type = lustre;
}
#### policy definitions ####
# include template for alerts
%include "includes/alerts.inc"
#### fileclass definitions ####
FileClass small_files {
definition { type == file and size > 0 and size <= 16MB }
# report = yes (default)
}
FileClass std_files {
definition { type == file and size > 16MB and size <= 1GB }
}
FileClass big_files {
definition { type == file and size > 1GB }
}
FileClass largedir {
definition { type == directory and dircount > 10000 }
}
FileClass f1 {
definition { type == file and name == "file.1" }
}
FileClass f2 {
definition { type == file and name == "file.2" }
}
### Alerts specification
alert_rules {
# don't check entries more frequently than daily
ignore { last_check < 1d }
# don't check entries while they are modified
ignore { last_mod < 1h }
rule raise_alert {
## List all fileclasses that would raise alerts HERE:
target_fileclass = f1;
target_fileclass = f2;
target_fileclass = largedir;
# customize alert title:
action_params { title = "entry matches '{fileclass}' ({rule})"; }
# apply to all matching fileclasses in the policy scope
condition = true;
}
# clear alert status
rule default {
action = none;
action_params { alert = clear; }
# apply to all entries that don't match 'raise_alert'
condition = true;
}
}
# trigger alert check hourly
alert_trigger {
trigger_on = periodic;
check_interval = 1h;
}
########### end of policy rules ############
# ChangeLog Reader configuration
# Parameters for processing MDT changelogs :
ChangeLog {
# 1 MDT block for each MDT :
MDT {
# name of the first MDT
mdt_name = "MDT0000" ;
# id of the persistent changelog reader
# as returned by "lctl changelog_register" command
reader_id = "cl1" ;
}
polling_interval = 1s;
}
Log {
# Log verbosity level
# Possible values are: CRIT, MAJOR, EVENT, VERB, DEBUG, FULL
debug_level = EVENT;
# Log file
log_file = "/var/log/robinhood/lustre.log";
# File for reporting purge events
report_file = "/var/log/robinhood/lustre_actions.log";
# set alert_file, alert_mail or both depending on the alert method you wish
alert_file = "/var/log/robinhood/lustre_alerts.log";
alert_show_attrs = yes;
}
ListManager {
MySQL {
server = "localhost";
db = "robinhood_lustre";
user = "robinhood";
# password or password_file are mandatory
password = "robinhood";
engine = innodb;
}
}
================================================
FILE: doc/templates/example_checksum.conf
================================================
# -*- mode: c; c-basic-offset: 4; indent-tabs-mode: nil; -*-
# vim:expandtab:shiftwidth=4:tabstop=4:
General {
fs_path = /mnt/lustre;
fs_type = lustre;
}
#### policy definitions ####
# include template for checksuming
%include "includes/check.inc"
########### checksum rules ############
fileclass never_checked {
# never checked or no successful check
definition { checksum.last_success == 0 }
# don't display this fileclass in --classinfo reports.
report = no;
}
checksum_parameters {
# max number of checksum computed in parallel
nb_threads = 4;
# limit checksuming throughput
schedulers = common.rate_limit;
rate_limit {
# max count per period
#max_count = 1000;
# max size per period: 1GB/s
max_size = 10GB;
# period, in milliseconds: 10s
period_ms = 10000;
}
}
checksum_rules {
ignore { last_check < 7d }
ignore { last_mod < 1d }
rule initial_check {
target_fileclass = never_checked;
condition { last_mod > 1d }
}
rule default {
condition { last_mod > 1d and last_check > 7d }
}
}
# start checksum hourly
checksum_trigger {
trigger_on = periodic;
check_interval = 1h;
}
########### end of policy rules ############
# ChangeLog Reader configuration
# Parameters for processing MDT changelogs :
ChangeLog {
# 1 MDT block for each MDT :
MDT {
# name of the first MDT
mdt_name = "MDT0000" ;
# id of the persistent changelog reader
# as returned by "lctl changelog_register" command
reader_id = "cl1" ;
}
polling_interval = 1s;
}
Log {
# Log verbosity level
# Possible values are: CRIT, MAJOR, EVENT, VERB, DEBUG, FULL
debug_level = EVENT;
# Log file
log_file = "/var/log/robinhood/lustre.log";
# File for reporting purge events
report_file = "/var/log/robinhood/lustre_actions.log";
# set alert_file, alert_mail or both depending on the alert method you wish
alert_file = "/var/log/robinhood/lustre_alerts.log";
alert_show_attrs = yes;
}
ListManager {
MySQL {
server = "localhost";
db = "robinhood_lustre";
user = "robinhood";
# password or password_file are mandatory
password = "robinhood";
engine = innodb;
}
}
================================================
FILE: doc/templates/example_cleanup.conf
================================================
# -*- mode: c; c-basic-offset: 4; indent-tabs-mode: nil; -*-
# vim:expandtab:shiftwidth=4:tabstop=4:
General {
fs_path = /mnt/lustre;
fs_type = lustre;
}
#### policy definitions ####
# include template policy definitions for legacy TMPFS flavor
%include "includes/tmpfs.inc"
#### fileclass definitions ####
cleanup_parameters {
#action_params {
# # set to true if entries should be removed from DB by
# # changelog or Garbage collection
# invalidate_dbentry = false; # default behaviour
#}
}
FileClass even_files {
definition { type == file and name == "*[02468]" }
# only for policy matching, not to display in reports
report = no;
}
FileClass odd_files {
definition { type == file and name == "*[13579]" }
report = no;
}
# fileclasses to display in reports (can still be used in policies)
FileClass empty_files {
definition { type == file and size == 0 }
# report = yes (default)
}
FileClass small_files {
definition { type == file and size > 0 and size <= 16MB }
# report = yes (default)
}
FileClass std_files {
definition { type == file and size > 16MB and size <= 1GB }
}
FileClass big_files {
definition { type == file and size > 1GB }
}
FileClass largedir {
definition { type == directory and dircount > 10000 }
}
FileClass f1 {
definition { type == file and name == "file.1" }
}
FileClass f2 {
definition { type == file and name == "file.2" }
}
#### Deleting old unused files #######
cleanup_rules {
ignore { last_mod < 1d }
ignore_fileclass = empty_files;
rule clean_f {
target_fileclass = f1;
target_fileclass = f2;
condition { last_access > 100d }
}
# rule for other entries
rule default {
condition { last_access > 30d }
}
}
# clean when inode count > 100M
cleanup_trigger {
trigger_on = global_usage;
high_threshold_cnt = 100M;
low_threshold_cnt = 100M;
check_interval = 5min;
}
########### end of policy rules ############
# ChangeLog Reader configuration
# Parameters for processing MDT changelogs :
ChangeLog {
# 1 MDT block for each MDT :
MDT {
# name of the first MDT
mdt_name = "MDT0000" ;
# id of the persistent changelog reader
# as returned by "lctl changelog_register" command
reader_id = "cl1" ;
}
polling_interval = 1s;
}
Log {
# Log verbosity level
# Possible values are: CRIT, MAJOR, EVENT, VERB, DEBUG, FULL
debug_level = EVENT;
# Log file
log_file = "/var/log/robinhood/lustre.log";
# File for reporting purge events
report_file = "/var/log/robinhood/lustre_actions.log";
# set alert_file, alert_mail or both depending on the alert method you wish
alert_file = "/var/log/robinhood/lustre_alerts.log";
alert_show_attrs = yes;
}
ListManager {
MySQL {
server = "localhost";
db = "robinhood_lustre";
user = "robinhood";
# password or password_file are mandatory
password = "robinhood";
engine = innodb;
}
}
================================================
FILE: doc/templates/example_lhsm.conf
================================================
# -*- mode: c; c-basic-offset: 4; indent-tabs-mode: nil; -*-
# vim:expandtab:shiftwidth=4:tabstop=4:
General {
fs_path = /mnt/lustre;
fs_type = lustre;
}
#### policy definitions ####
# include template policy definitions for Lustre/HSM
%include "includes/lhsm.inc"
#### fileclass definitions ####
FileClass even_files {
definition { type == file and name == "*[02468]" }
# only for policy matching, not to display in reports
report = no;
}
FileClass odd_files {
definition { type == file and name == "*[13579]" }
lhsm_archive_action_params { archive_id = 2; }
report = no;
}
# fileclasses to display in reports (can still be used in policies)
FileClass empty_files {
definition { type == file and size == 0 }
# report = yes (default)
}
FileClass small_files {
definition { type == file and size > 0 and size <= 16MB }
# report = yes (default)
}
FileClass std_files {
definition { type == file and size > 16MB and size <= 1GB }
}
FileClass big_files {
definition { type == file and size > 1GB }
}
FileClass largedir {
definition { type == directory and dircount > 10000 }
}
FileClass f1 {
definition { type == file and name == "file.1" }
}
FileClass f2 {
definition { type == file and name == "file.2" }
}
#### Common Lustre/HSM parameters ####
lhsm_config {
# used for 'undelete': command to change the fid of an entry in archive
rebind_cmd = "/usr/sbin/lhsmtool_posix --hsm_root=/tmp/backend --archive {archive_id} --rebind {oldfid} {newfid} {fsroot}";
}
#### Lustre/HSM archive configuration ####
lhsm_archive_parameters {
nb_threads = 1;
# limit archive rate to avoid flooding the MDT coordinator
schedulers = common.rate_limit;
rate_limit {
# max count per period
max_count = 1000;
# max size per period: 1GB/s
#max_size = 10GB;
# period, in milliseconds: 10s
period_ms = 10000;
}
# suspend policy run if action error rate > 50% (after 100 errors)
suspend_error_pct = 50%;
suspend_error_min= 100;
# overrides policy default action
action = cmd("lfs hsm_archive --archive {archive_id} /mnt/lustre/.lustre/fid/{fid}");
# default action parameters
action_params {
archive_id = 1;
}
}
lhsm_archive_rules {
ignore_fileclass = empty_files;
rule archive_small {
target_fileclass = small_files;
condition { last_mod >= 30min }
# overrides policy action
action = cmd("lfs hsm_archive {fullpath}");
action_params { archive_id = 2; }
}
rule archive_std {
target_fileclass = std_files;
target_fileclass = big_files;
action_params { archive_id = 1; }
condition { last_mod >= 30min }
}
# fallback rule
rule default {
action_params { archive_id = 3; }
condition { last_mod >= 30min }
}
}
# run every 5 min
lhsm_archive_trigger {
trigger_on = periodic;
check_interval = 5min;
}
#### Lustre/HSM release configuration ####
lhsm_release_rules {
ignore_fileclass = empty_files;
# keep small files on disk as long as possible
rule release_small {
target_fileclass = small_files;
condition { last_access > 1y }
}
rule release_std {
target_fileclass = std_files;
target_fileclass = big_files;
condition { last_access > 1d }
}
# fallback rule
rule default {
condition { last_access > 6h }
}
}
# run 'lhsm_release' on full OSTs
lhsm_release_trigger {
trigger_on = ost_usage;
high_threshold_pct = 85%;
low_threshold_pct = 80%;
check_interval = 5min;
}
lhsm_release_parameters {
nb_threads = 4;
## purge 1000 files max at once
# max_action_count = 1000;
# max_action_volume = 1TB;
# suspend policy run if action error rate > 50% (after 100 errors)
suspend_error_pct = 50%;
suspend_error_min= 100;
}
#### Lustre/HSM remove configuration ####
lhsm_remove_rules
{
# cleanup backend files after 30d
rule default {
condition { rm_time >= 30d }
}
}
# run daily
lhsm_remove_trigger
{
trigger_on = periodic;
check_interval = 1d;
}
########### end of policy rules ############
# ChangeLog Reader configuration
# Parameters for processing MDT changelogs :
ChangeLog {
# 1 MDT block for each MDT :
MDT {
# name of the first MDT
mdt_name = "MDT0000" ;
# id of the persistent changelog reader
# as returned by "lctl changelog_register" command
reader_id = "cl1" ;
}
polling_interval = 1s;
}
Log {
# Log verbosity level
# Possible values are: CRIT, MAJOR, EVENT, VERB, DEBUG, FULL
debug_level = EVENT;
# Log file
log_file = "/var/log/robinhood/lustre.log";
# File for reporting purge events
report_file = "/var/log/robinhood/lustre_actions.log";
# set alert_file, alert_mail or both depending on the alert method you wish
alert_file = "/var/log/robinhood/lustre_alerts.log";
alert_show_attrs = yes;
}
ListManager {
MySQL {
server = "localhost";
db = "robinhood_lustre";
user = "robinhood";
# password or password_file are mandatory
password = "robinhood";
engine = innodb;
}
}
================================================
FILE: doc/templates/example_modeguard.conf
================================================
# -*- mode: c; c-basic-offset: 4; indent-tabs-mode: nil; -*-
# vim:expandtab:shiftwidth=4:tabstop=4:
General {
fs_path = /mnt/lustre;
fs_type = lustre;
}
#### policy definitions ####
# include template for modeguard
%include "includes/modeguard.inc"
# Make modeguard enforce setgid bit on directories.
# Directory setgid is inherited from parent but a user or some copy
# tool might remove it. This is just an example, you can easily
# modify the set/clear masks below using the octal notation.
#
modeguard_config {
set_mask = "2000";
# clear_mask = "0002";
}
#### fileclass definitions ####
#
# fileclasses to display in reports (can still be used in policies)
FileClass empty_files {
definition { type == file and size == 0 }
# report = yes (default)
}
FileClass small_files {
definition { type == file and size > 0 and size <= 16MB }
# report = yes (default)
}
FileClass std_files {
definition { type == file and size > 16MB and size <= 1GB }
}
FileClass big_files {
definition { type == file and size > 1GB }
}
FileClass f1 {
definition { type == file and name == "file.1" }
}
FileClass f2 {
definition { type == file and name == "file.2" }
}
############# modeguard rules ############
modeguard_rules {
ignore_fileclass = f1;
rule default {
condition { modeguard.status != ok }
}
}
# Run often, using Lustre changelogs is recommended.
modeguard_trigger {
trigger_on = scheduled;
check_interval = 1h;
}
########### end of policy rules ############
# ChangeLog Reader configuration
# Parameters for processing MDT changelogs :
ChangeLog {
# 1 MDT block for each MDT :
MDT {
# name of the first MDT
mdt_name = "MDT0000" ;
# id of the persistent changelog reader
# as returned by "lctl changelog_register" command
reader_id = "cl1" ;
}
polling_interval = 1s;
}
Log {
# Log verbosity level
# Possible values are: CRIT, MAJOR, EVENT, VERB, DEBUG, FULL
debug_level = EVENT;
# Log file
log_file = "/var/log/robinhood/lustre.log";
# File for reporting purge events
report_file = "/var/log/robinhood/lustre_actions.log";
# set alert_file, alert_mail or both depending on the alert method you wish
alert_file = "/var/log/robinhood/lustre_alerts.log";
alert_show_attrs = yes;
}
ListManager {
MySQL {
server = "localhost";
db = "robinhood_lustre";
user = "robinhood";
# password or password_file are mandatory
password = "robinhood";
engine = innodb;
}
}
================================================
FILE: doc/templates/example_rmdir.conf
================================================
# -*- mode: c; c-basic-offset: 4; indent-tabs-mode: nil; -*-
# vim:expandtab:shiftwidth=4:tabstop=4:
General {
fs_path = /mnt/lustre;
fs_type = lustre;
}
#### policy definitions ####
# include template policy definitions for removing directories
%include "includes/rmdir.inc"
#### fileclasses definition ####
fileclass empty_dir {
definition { type == directory and dircount == 0 }
}
fileclass batch_dir {
definition { type == directory
and path == "/mnt/lustre/jobs/*/batch.*" }
}
fileclass tmp_dirs {
definition { type == directory
and name == "tmp.*" }
}
fileclass log_dirs {
definition { type == directory
and path == "/mnt/lustre/system/logs/node*" }
}
############# rmdir rules ############
rmdir_parameters {
lru_sort_attr = none;
}
rmdir_trigger {
trigger_on = periodic;
check_interval = 1h;
}
rmdir_rules {
# preserve root directories
ignore { depth < 4 }
# remove empty directories after 30d
rule rmdir_empty {
target_fileclass = empty_dir;
action = common.rmdir;
condition { last_mod > 30d }
}
# remove some directories recursively after 1d
rule rmdir_recurse1d {
target_fileclass = batch_dir;
target_fileclass = tmp_dirs;
action = cmd("rm -rf {fullpath}");
condition { last_mod > 1d }
}
# remove some other directories after 30d
rule rmdir_recurse30d {
target_fileclass = log_dirs;
action = cmd("rm -rf {fullpath}");
condition { last_mod > 30d }
}
}
########### end of policy rules ############
# ChangeLog Reader configuration
# Parameters for processing MDT changelogs :
ChangeLog {
# 1 MDT block for each MDT :
MDT {
# name of the first MDT
mdt_name = "MDT0000" ;
# id of the persistent changelog reader
# as returned by "lctl changelog_register" command
reader_id = "cl1" ;
}
polling_interval = 1s;
}
Log {
# Log verbosity level
# Possible values are: CRIT, MAJOR, EVENT, VERB, DEBUG, FULL
debug_level = EVENT;
# Log file
log_file = "/var/log/robinhood/lustre.log";
# File for reporting purge events
report_file = "/var/log/robinhood/lustre_actions.log";
# set alert_file, alert_mail or both depending on the alert method you wish
alert_file = "/var/log/robinhood/lustre_alerts.log";
alert_show_attrs = yes;
}
ListManager {
MySQL {
server = "localhost";
db = "robinhood_lustre";
user = "robinhood";
# password or password_file are mandatory
password = "robinhood";
engine = innodb;
}
}
================================================
FILE: doc/templates/example_shook.conf
================================================
# -*- mode: c; c-basic-offset: 4; indent-tabs-mode: nil; -*-
# vim:expandtab:shiftwidth=4:tabstop=4:
%include "includes/shook.inc"
######## simple migration policy ##########
shook_archive_parameters {
action = cmd("/usr/sbin/rbhext_tool ARCHIVE /mnt/lustre/.lustre/fid/{fid} {targetpath}");
}
shook_archive_rules
{
policy default
{
# Archive 'dirty' files that have not been modified
# for more than 6 hours, or backup them daily
# if they are continuously appended.
condition { last_mod > 6h }
}
}
shook_release_rules
{
policy default
{
# Archive 'dirty' files that have not been modified
# for more than 6 hours, or backup them daily
# if they are continuously appended.
condition { last_mod > 6h }
}
}
# purge based on OST_levels
shook_release_trigger
{
trigger_on = OST_usage ;
high_threshold_pct = 92% ;
low_threshold_pct = 90% ;
check_interval = 5min;
}
##### basic HSM remove policy ######
shook_remove_rules
{
# cleanup backend files after 30d
rule default {
condition { rm_time >= 30d }
}
}
# run daily
shook_remove_trigger
{
trigger_on = periodic;
check_interval = 1d;
}
##### general Filesystem info ####
General
{
fs_path = /mnt/lustre;
}
#### Backend configuration ####
shook_config
{
root = "/tmp/backend";
check_mounted = false;
mnt_type = xfs;
# set newly created file to the right status
recovery_action = shook.recover;
}
# ChangeLog Reader configuration
# Parameters for processing MDT changelogs :
ChangeLog
{
# 1 MDT block for each MDT :
MDT
{
# name of the first MDT
mdt_name = "MDT0000" ;
# id of the persistent changelog reader
# as returned by "lctl changelog_register" command
reader_id = "cl1" ;
}
dump_file = "/tmp/changelogs.log";
queue_max
gitextract_8lphqcmv/
├── .commit-template
├── .gitignore
├── ChangeLog
├── LICENSE.en.txt
├── LICENSE.fr.txt
├── Makefile.am
├── README.md
├── autogen.sh
├── autotools/
│ └── m4/
│ ├── args_mgmt.m4
│ ├── as-ac-expand.m4
│ ├── ax_valgrind_check.m4
│ ├── db.m4
│ └── lustre.m4
├── configure.ac
├── doc/
│ ├── Makefile.am
│ ├── admin_guides/
│ │ ├── MOVED_TO
│ │ └── rbh25-disaster_recovery.odt
│ ├── doxygen/
│ │ └── doxygen.cfg.in
│ └── templates/
│ ├── Makefile.am
│ ├── basic.conf
│ ├── example_alerts.conf
│ ├── example_checksum.conf
│ ├── example_cleanup.conf
│ ├── example_lhsm.conf
│ ├── example_modeguard.conf
│ ├── example_rmdir.conf
│ ├── example_shook.conf
│ └── includes/
│ ├── alerts.inc
│ ├── backup.inc
│ ├── check.inc
│ ├── lhsm.inc
│ ├── modeguard.inc
│ ├── rmdir.inc
│ ├── rmdir_old.inc
│ ├── shook.inc
│ └── tmpfs.inc
├── man/
│ ├── Makefile.am
│ ├── lhsmtool_cmd.1
│ ├── lhsmtool_cmd.rst
│ ├── rbh-diff.1
│ ├── rbh-du.1
│ ├── rbh-find.1
│ ├── rbh-report.1
│ └── robinhood.1
├── robinhood.spec.in
├── scripts/
│ ├── Makefile.am
│ ├── bestiaire.sh
│ ├── cfg_25to30.sh
│ ├── check_commit.sh
│ ├── check_rpm_reloc.sh
│ ├── checkpatch.pl
│ ├── cmd2man.sh
│ ├── code_format.sh
│ ├── commit-msg
│ ├── demo/
│ │ ├── disk_usage.sh
│ │ ├── migr_purge.sh
│ │ ├── mkplot.sh
│ │ ├── populate_backend.sh
│ │ ├── rh.migr_purge.conf
│ │ ├── trace_usage.gp
│ │ └── write_data.sh
│ ├── exafs.sh
│ ├── fill_fs.sh
│ ├── fix_man_options.sh
│ ├── git_prepare_hook
│ ├── indent.sh
│ ├── ld.so.robinhood.conf.in
│ ├── pre-commit
│ ├── rbh-config
│ ├── rbh_cksum.sh.in
│ ├── rbhext_tool
│ ├── rbhext_tool_clnt
│ ├── rbhext_tool_svr
│ ├── rewrite.sh
│ ├── robinhood.init.in
│ ├── robinhood.init.sles.in
│ ├── robinhood.service.in
│ ├── robinhood@.service.in
│ ├── sanity-lhsm/
│ │ ├── repro_time.sh
│ │ ├── rh-hsm.conf.in
│ │ └── sanity.sh
│ ├── sysconfig_robinhood.in
│ └── type_gen.pl
├── src/
│ ├── Makefile.am
│ ├── cfg_parsing/
│ │ ├── Makefile.am
│ │ ├── analyze.c
│ │ ├── analyze.h
│ │ ├── conf_lex.c
│ │ ├── conf_lex.l
│ │ ├── conf_yacc.c
│ │ ├── conf_yacc.h
│ │ ├── conf_yacc.y
│ │ ├── config_parsing.c
│ │ ├── rbh_boolexpr.c
│ │ ├── rbh_cfg.c
│ │ └── rbh_cfg_helpers.c
│ ├── chglog_reader/
│ │ ├── Makefile.am
│ │ ├── chglog_reader.c
│ │ └── chglog_reader_config.c
│ ├── common/
│ │ ├── Makefile.am
│ │ ├── RW_Lock.c
│ │ ├── basename.c
│ │ ├── global_config.c
│ │ ├── lustre_tools.c
│ │ ├── mntent_compat.c
│ │ ├── mntent_compat.h
│ │ ├── param_utils.c
│ │ ├── queue.c
│ │ ├── rbh_cmd.c
│ │ ├── rbh_logs.c
│ │ ├── rbh_misc.c
│ │ ├── rbh_modules.c
│ │ ├── rbh_params.c
│ │ ├── uidgidcache.c
│ │ └── update_params.c
│ ├── entry_processor/
│ │ ├── Makefile.am
│ │ ├── diff_pipeline.c
│ │ ├── entry_proc_hash.c
│ │ ├── entry_proc_impl.c
│ │ ├── entry_proc_tools.c
│ │ ├── entry_proc_tools.h
│ │ ├── std_pipeline.c
│ │ └── test_hash.c
│ ├── fs_scan/
│ │ ├── Makefile.am
│ │ ├── fs_scan.c
│ │ ├── fs_scan.h
│ │ ├── fs_scan_main.c
│ │ ├── fs_scan_types.h
│ │ ├── task_stack_mngmt.c
│ │ ├── task_stack_mngmt.h
│ │ ├── task_tree_mngmt.c
│ │ └── task_tree_mngmt.h
│ ├── include/
│ │ ├── Makefile.am
│ │ ├── Memory.h
│ │ ├── RW_Lock.h
│ │ ├── chglog_reader.h
│ │ ├── config_parsing.h
│ │ ├── db_schema.def
│ │ ├── db_types.h
│ │ ├── entry_proc_hash.h
│ │ ├── entry_processor.h
│ │ ├── fs_scan_main.h
│ │ ├── global_config.h
│ │ ├── list.h
│ │ ├── list_mgr.h
│ │ ├── lustre/
│ │ │ └── lustre_errno.h
│ │ ├── lustre_extended_types.h
│ │ ├── pipeline_types.h
│ │ ├── policy_rules.h
│ │ ├── policy_run.h
│ │ ├── queue.h
│ │ ├── rbh_basename.h
│ │ ├── rbh_boolexpr.h
│ │ ├── rbh_cfg.h
│ │ ├── rbh_cfg_helpers.h
│ │ ├── rbh_const.h
│ │ ├── rbh_logs.h
│ │ ├── rbh_misc.h
│ │ ├── rbh_modules.h
│ │ ├── rbh_params.h
│ │ ├── rbh_types.h
│ │ ├── status_manager.h
│ │ ├── uidgidcache.h
│ │ ├── update_params.h
│ │ └── xplatform_print.h
│ ├── list_mgr/
│ │ ├── Makefile.am
│ │ ├── database.h
│ │ ├── listmgr_common.c
│ │ ├── listmgr_common.h
│ │ ├── listmgr_config.c
│ │ ├── listmgr_filters.c
│ │ ├── listmgr_get.c
│ │ ├── listmgr_init.c
│ │ ├── listmgr_insert.c
│ │ ├── listmgr_internal.h
│ │ ├── listmgr_iterators.c
│ │ ├── listmgr_ns.c
│ │ ├── listmgr_recov.c
│ │ ├── listmgr_remove.c
│ │ ├── listmgr_reports.c
│ │ ├── listmgr_stripe.c
│ │ ├── listmgr_stripe.h
│ │ ├── listmgr_tags.c
│ │ ├── listmgr_update.c
│ │ ├── listmgr_vars.c
│ │ ├── mysql_wrapper.c
│ │ └── sqlite_wrapper.c
│ ├── modules/
│ │ ├── Makefile.am
│ │ ├── alerter.c
│ │ ├── backup.c
│ │ ├── backup.h
│ │ ├── basic.c
│ │ ├── checker.c
│ │ ├── common_actions.c
│ │ ├── common_sched.c
│ │ ├── lhsm.c
│ │ ├── mod_internal.c
│ │ ├── mod_internal.h
│ │ ├── modeguard.c
│ │ ├── sched_ratelimit.c
│ │ ├── shook.c
│ │ └── test_sched.c
│ ├── policies/
│ │ ├── Makefile.am
│ │ ├── policy_loader.c
│ │ ├── policy_matching.c
│ │ ├── policy_run.c
│ │ ├── policy_run_cfg.c
│ │ ├── policy_sched.c
│ │ ├── policy_sched.h
│ │ ├── policy_triggers.c
│ │ ├── run_policies.h
│ │ └── status_manager.c
│ ├── robinhood/
│ │ ├── Makefile.am
│ │ ├── cmd_helpers.c
│ │ ├── cmd_helpers.h
│ │ ├── rbh_daemon.c
│ │ ├── rbh_diff.c
│ │ ├── rbh_du.c
│ │ ├── rbh_find.c
│ │ ├── rbh_find.h
│ │ ├── rbh_find_printf.c
│ │ ├── rbh_import.c
│ │ ├── rbh_rebind.c
│ │ ├── rbh_recov.c
│ │ ├── rbh_report.c
│ │ └── rbh_undelete.c
│ ├── tests/
│ │ ├── Makefile.am
│ │ ├── create_nostripe.c
│ │ ├── path.sql
│ │ ├── test_confparam.c
│ │ ├── test_forcestripe.c
│ │ ├── test_params.c
│ │ ├── test_parse.c
│ │ ├── test_parsing.sh
│ │ ├── test_uidgidcache.c
│ │ └── tst.data/
│ │ ├── bad.conf
│ │ ├── inc2.inc
│ │ ├── ok.conf
│ │ ├── test.conf
│ │ └── test.inc
│ └── tools/
│ ├── Makefile.am
│ ├── gen_lov_objid.c
│ ├── lhsmtool_cmd.c
│ ├── ost_fids_remap.c
│ ├── read_lovea.c
│ └── set_lovea.c
├── tests/
│ ├── Makefile.am
│ ├── completion.sh
│ ├── create_files.sh
│ ├── fill_fs.sh
│ ├── gprof-helper.c
│ ├── huge_posix/
│ │ ├── 1-test_setup.sh
│ │ ├── 2-run-tests.sh
│ │ └── cfg/
│ │ ├── common.conf
│ │ └── innodb.conf
│ ├── shook_configure.sh
│ ├── test_compil_switches.sh
│ ├── test_rpmbuild.sh
│ └── test_suite/
│ ├── 1-test_setup_lustre.sh
│ ├── 1-test_setup_posix.sh
│ ├── 2-run-tests.sh
│ ├── 3-tests-lustre.sh
│ ├── Makefile.am
│ ├── README.rst
│ ├── bench_rpc.sh
│ ├── cfg/
│ │ ├── Generation_Report_1.conf
│ │ ├── MigrationClass_ExtendedAttribut.conf
│ │ ├── MigrationClass_LastAccess.conf
│ │ ├── MigrationClass_LastModification.conf
│ │ ├── MigrationClass_OST.conf
│ │ ├── MigrationClass_Owner.conf
│ │ ├── MigrationClass_Path_Name.conf
│ │ ├── MigrationClass_Size.conf
│ │ ├── MigrationClass_Type.conf
│ │ ├── MigrationFile_ExtendedAttribut.conf
│ │ ├── MigrationFile_LastAccess.conf
│ │ ├── MigrationFile_LastModification.conf
│ │ ├── MigrationFile_OST.conf
│ │ ├── MigrationFile_Owner.conf
│ │ ├── MigrationFile_Path_Name.conf
│ │ ├── MigrationFile_Size.conf
│ │ ├── MigrationFile_Type.conf
│ │ ├── MigrationGroup.conf
│ │ ├── MigrationOST.conf
│ │ ├── MigrationStd_ExtendedAttribut.conf
│ │ ├── MigrationStd_LastAccess.conf
│ │ ├── MigrationStd_LastModification.conf
│ │ ├── MigrationStd_OST.conf
│ │ ├── MigrationStd_Owner.conf
│ │ ├── MigrationStd_Path_Name.conf
│ │ ├── MigrationStd_Size.conf
│ │ ├── MigrationStd_Type.conf
│ │ ├── MigrationUser.conf
│ │ ├── OtherParameters_1.conf
│ │ ├── OtherParameters_2.conf
│ │ ├── OtherParameters_3.conf
│ │ ├── OtherParameters_4.conf
│ │ ├── OtherParameters_5.conf
│ │ ├── PurgeClass_ExtendedAttribut.conf
│ │ ├── PurgeClass_LastAccess.conf
│ │ ├── PurgeClass_LastModification.conf
│ │ ├── PurgeClass_OST.conf
│ │ ├── PurgeClass_Owner.conf
│ │ ├── PurgeClass_Path_Name.conf
│ │ ├── PurgeClass_Size.conf
│ │ ├── PurgeClass_Type.conf
│ │ ├── PurgeOST.conf
│ │ ├── PurgeStd_ExtendedAttribut.conf
│ │ ├── PurgeStd_LastAccess.conf
│ │ ├── PurgeStd_LastModification.conf
│ │ ├── PurgeStd_OST.conf
│ │ ├── PurgeStd_Owner.conf
│ │ ├── PurgeStd_Path_Name.conf
│ │ ├── PurgeStd_Size.conf
│ │ ├── PurgeStd_Type.conf
│ │ ├── RemovingDir_Dircount.conf
│ │ ├── RemovingDir_ExtendedAttribute.conf
│ │ ├── RemovingDir_LastAccess.conf
│ │ ├── RemovingDir_LastModification.conf
│ │ ├── RemovingDir_Mixed.conf
│ │ ├── RemovingDir_OST.conf
│ │ ├── RemovingDir_Owner.conf
│ │ ├── RemovingDir_Path_Name.conf
│ │ ├── RemovingEmptyDir.conf
│ │ ├── TriggerPurge_GroupQuotaExceeded.conf
│ │ ├── TriggerPurge_OstQuotaExceeded.conf
│ │ ├── TriggerPurge_QuotaExceeded.conf
│ │ ├── TriggerPurge_UserQuotaExceeded.conf
│ │ ├── acct.conf
│ │ ├── alert.conf
│ │ ├── alert_ost.conf
│ │ ├── cl_batch.conf
│ │ ├── commit_update.conf
│ │ ├── common.conf
│ │ ├── common_noclass.conf
│ │ ├── compress.conf
│ │ ├── info_collect.conf
│ │ ├── info_collect2.conf
│ │ ├── log1.conf
│ │ ├── log1b.conf
│ │ ├── log2.conf
│ │ ├── log2b.conf
│ │ ├── log3.conf
│ │ ├── log3b.conf
│ │ ├── log_common.conf
│ │ ├── lru_purge.conf
│ │ ├── lru_sort_access.conf
│ │ ├── lru_sort_archive.conf
│ │ ├── lru_sort_creat_last_arch.conf
│ │ ├── lru_sort_creation.conf
│ │ ├── lru_sort_mod.conf
│ │ ├── lru_sort_mod_2pass.conf
│ │ ├── lru_sort_size_asc.conf
│ │ ├── lru_sort_size_desc.conf
│ │ ├── migr_fail.conf
│ │ ├── migr_failer.sh
│ │ ├── overflow.conf
│ │ ├── rbh25.sql
│ │ ├── rmdir.conf
│ │ ├── test1.conf
│ │ ├── test2.conf
│ │ ├── test3.conf
│ │ ├── test_action_params.conf
│ │ ├── test_basic.conf
│ │ ├── test_check_migr.conf
│ │ ├── test_check_purge.conf
│ │ ├── test_checker.conf
│ │ ├── test_checker_invert.conf
│ │ ├── test_completion.conf
│ │ ├── test_copy.conf
│ │ ├── test_custom_purge.conf
│ │ ├── test_default_case.conf
│ │ ├── test_fileclass.conf
│ │ ├── test_hsm_invalidate.conf
│ │ ├── test_hsm_remove_noorder.conf
│ │ ├── test_hsm_remove_order.conf
│ │ ├── test_iname.conf
│ │ ├── test_lhsm1.conf
│ │ ├── test_limits.conf
│ │ ├── test_maintenance.conf
│ │ ├── test_mnt_point.conf
│ │ ├── test_modeguard_dir.conf
│ │ ├── test_modeguard_file.conf
│ │ ├── test_move.conf
│ │ ├── test_multirule.conf
│ │ ├── test_multirule_migr.conf
│ │ ├── test_nlink.conf
│ │ ├── test_path.conf
│ │ ├── test_pipeline.conf
│ │ ├── test_pools.conf
│ │ ├── test_prepost_cmd.conf
│ │ ├── test_prepost_sched.conf
│ │ ├── test_purge.conf
│ │ ├── test_purge2.conf
│ │ ├── test_ratelim.conf
│ │ ├── test_recov.conf
│ │ ├── test_recov2.conf
│ │ ├── test_rm1.conf
│ │ ├── test_rmdir_depth.conf
│ │ ├── test_run.conf
│ │ ├── test_scan_only.conf
│ │ ├── test_sched1.conf
│ │ ├── test_trig.conf
│ │ ├── test_trig2.conf
│ │ ├── test_trig3.conf
│ │ ├── test_trig4.conf
│ │ ├── test_trig_cntpct.conf
│ │ ├── test_updt.conf
│ │ ├── test_uuid.conf
│ │ ├── test_xattr.conf
│ │ ├── tokudb1.conf
│ │ ├── tokudb2.conf
│ │ └── uidgidnum.conf
│ ├── cleanup.sh
│ ├── create-random.c
│ ├── lsetup.sh
│ ├── prepost_cmd.sh
│ ├── rm_script
│ └── valgrind.supp
└── web_gui/
├── Makefile.am
├── gui_v3/
│ ├── README.txt
│ ├── api/
│ │ ├── .htaccess
│ │ ├── index.php
│ │ ├── rest.class.php
│ │ └── robinhood.php
│ ├── common.php
│ ├── config.php
│ ├── config_local.php.template
│ ├── cron.php
│ ├── css/
│ │ ├── bootstrap-datetimepicker.css
│ │ ├── bootstrap-slider.css
│ │ ├── bootstrap-theme.css
│ │ ├── bootstrap.css
│ │ ├── dashboard.css
│ │ ├── dataTables.bootstrap.css
│ │ ├── dataTables.bootstrap4.css
│ │ ├── dataTables.foundation.css
│ │ ├── dataTables.jqueryui.css
│ │ ├── dataTables.material.css
│ │ ├── dataTables.semanticui.css
│ │ ├── dataTables.uikit.css
│ │ ├── jquery.dataTables.css
│ │ └── jquery.dataTables_themeroller.css
│ ├── customjs/
│ │ ├── newgui.js
│ │ └── param.php
│ ├── images/
│ │ └── Sorting icons.psd
│ ├── index.php
│ ├── js/
│ │ ├── Chart.bundle.js
│ │ ├── bootstrap-slider.js
│ │ ├── bootstrap.js
│ │ ├── dataTables.bootstrap.js
│ │ ├── dataTables.bootstrap4.js
│ │ ├── dataTables.foundation.js
│ │ ├── dataTables.jqueryui.js
│ │ ├── dataTables.material.js
│ │ ├── dataTables.semanticui.js
│ │ ├── dataTables.uikit.js
│ │ ├── filesize.dataTables.js
│ │ ├── jquery.dataTables.js
│ │ ├── jquery.js
│ │ ├── moment.js
│ │ └── npm.js
│ ├── lang/
│ │ ├── en.php
│ │ ├── fr.php
│ │ └── sys.php
│ ├── plugin.php
│ └── plugins/
│ ├── README.txt
│ ├── browser/
│ │ ├── css/
│ │ │ └── bootstrap-treeview.css
│ │ ├── help.html
│ │ ├── js/
│ │ │ └── bootstrap-treeview.js
│ │ ├── plugin.php
│ │ └── script.js
│ ├── colorgraph/
│ │ └── plugin.php
│ ├── console/
│ │ ├── plugin.php
│ │ └── script.js
│ ├── customgraph/
│ │ ├── help.html
│ │ ├── plugin.php
│ │ └── script.js
│ ├── internalstats/
│ │ ├── plugin.php
│ │ └── script.js
│ ├── ldapauth/
│ │ ├── plugin.php
│ │ └── script.js
│ ├── netauth/
│ │ ├── help.html
│ │ └── plugin.php
│ ├── output/
│ │ ├── help.html
│ │ └── plugin.php
│ ├── plugdisplay/
│ │ ├── help.html
│ │ ├── plugin.php
│ │ └── script.js
│ ├── stackgraph/
│ │ └── plugin.php
│ └── tasks/
│ ├── help.html
│ ├── plugin.php
│ └── script.js
├── robinhood.conf
├── scripts/
│ └── check_robinhood.py
└── tests/
├── nonreg.bash
└── nonreg.php
Showing preview only (246K chars total). Download the full file or copy to clipboard to get everything.
SYMBOL INDEX (2885 symbols across 166 files)
FILE: src/cfg_parsing/analyze.c
function list_items (line 37) | list_items *rh_config_CreateItemsList(void)
function generic_item (line 48) | generic_item *rh_config_CreateBlock(char *blockname, char *blockid,
function rh_config_AddItem (line 77) | void rh_config_AddItem(list_items *list, generic_item *item)
function generic_item (line 93) | generic_item *rh_config_CreateKeyValueExpr(char *varname, operator_t op,
function generic_item (line 117) | generic_item *rh_config_CreateAffect(char *varname, char *varval)
function generic_item (line 136) | generic_item *rh_config_CreateBoolExpr(char *blockname, char *title,
function generic_item (line 161) | generic_item *rh_config_CreateBoolExpr_Unary(bool_operator_t op,
function generic_item (line 201) | generic_item *rh_config_CreateBoolExpr_Binary(bool_operator_t op,
function generic_item (line 238) | generic_item *rh_config_CreateSet(char *blockname, char *label,
function generic_item (line 260) | generic_item *rh_config_CreateSet_Unary(set_operator_t op, generic_item ...
function generic_item (line 303) | generic_item *rh_config_CreateSet_Binary(set_operator_t op,
function generic_item (line 351) | generic_item *rh_config_CreateSet_Singleton(char *set_name)
function arg_list_t (line 364) | arg_list_t *rh_config_CreateArgList(void)
function rh_config_AddArg (line 372) | void rh_config_AddArg(arg_list_t *p_list, char *arg)
function rh_config_SetArglist (line 386) | void rh_config_SetArglist(generic_item *item, arg_list_t *arglist)
function print_bool_expr (line 416) | static void print_bool_expr(FILE *output, type_bool_expr *bool_expr)
function print_set (line 469) | static void print_set(FILE *output, type_set *set)
type _type_set_ (line 493) | struct _type_set_
type _type_set_ (line 494) | struct _type_set_
function print_list_ident (line 501) | static void print_list_ident(FILE *output, list_items *list,
function rh_config_print_list (line 563) | void rh_config_print_list(FILE *output, list_items *list)
function free_key_value (line 570) | static void free_key_value(type_key_value *p_keyval)
function free_bool_expr_recurse (line 585) | static void free_bool_expr_recurse(type_bool_expr *p_expr)
function free_set_recurse (line 608) | static void free_set_recurse(type_set *p_set)
function free_list_items_recurse (line 627) | static void free_list_items_recurse(list_items *list)
function rh_config_free_list (line 662) | void rh_config_free_list(list_items *list)
function rh_config_resolv_var (line 673) | void rh_config_resolv_var(char *dstvalue, char *var)
FILE: src/cfg_parsing/analyze.h
type _generic_item_ (line 51) | struct _generic_item_
type type_item (line 53) | typedef enum {
type operator_t (line 60) | typedef enum {
type arg_list_t (line 70) | typedef struct _arg_list_ {
type type_key_value (line 75) | typedef struct _type_key_value_ {
type type_block (line 82) | typedef struct _type_block_ {
type expr_type_t (line 88) | typedef enum {
type bool_operator_t (line 94) | typedef enum {
type set_operator_t (line 101) | typedef enum {
type type_bool_expr (line 107) | typedef struct _type_bool_expr_ {
type type_set (line 122) | typedef struct _type_set_ {
type generic_item (line 136) | typedef struct _generic_item_ {
type generic_item (line 157) | typedef generic_item *list_items;
FILE: src/cfg_parsing/conf_lex.c
type flex_int8_t (line 43) | typedef int8_t flex_int8_t;
type flex_uint8_t (line 44) | typedef uint8_t flex_uint8_t;
type flex_int16_t (line 45) | typedef int16_t flex_int16_t;
type flex_uint16_t (line 46) | typedef uint16_t flex_uint16_t;
type flex_int32_t (line 47) | typedef int32_t flex_int32_t;
type flex_uint32_t (line 48) | typedef uint32_t flex_uint32_t;
type flex_int8_t (line 50) | typedef signed char flex_int8_t;
type flex_int16_t (line 51) | typedef short int flex_int16_t;
type flex_int32_t (line 52) | typedef int flex_int32_t;
type flex_uint8_t (line 53) | typedef unsigned char flex_uint8_t;
type flex_uint16_t (line 54) | typedef unsigned short int flex_uint16_t;
type flex_uint32_t (line 55) | typedef unsigned int flex_uint32_t;
type yy_buffer_state (line 149) | struct yy_buffer_state
type yy_size_t (line 154) | typedef size_t yy_size_t;
type yy_buffer_state (line 186) | struct yy_buffer_state
type YY_CHAR (line 332) | typedef unsigned char YY_CHAR;
type yy_state_type (line 336) | typedef int yy_state_type;
type yy_trans_info (line 367) | struct yy_trans_info
function YY_BUFFER_APPEND (line 623) | void YY_BUFFER_APPEND(const char *s) {
function YY_BUFFER_RESET (line 627) | void YY_BUFFER_RESET(void) {
function DEBUG_LEX (line 667) | static void DEBUG_LEX( char * format, ... ) { return ; }
function YY_RESTORE_YY_MORE_OFFSET (line 1477) | YY_RESTORE_YY_MORE_OFFSET
function yy_get_next_buffer (line 1607) | static int yy_get_next_buffer (void)
function yy_state_type (line 1741) | static yy_state_type yy_get_previous_state (void)
function yy_state_type (line 1773) | static yy_state_type yy_try_NUL_trans (yy_state_type yy_current_state )
function yyunput (line 1798) | static void yyunput (int c, char * yy_bp )
function input (line 1841) | static int input (void)
function yyrestart (line 1916) | void yyrestart (FILE * input_file )
function yy_switch_to_buffer (line 1933) | void yy_switch_to_buffer (YY_BUFFER_STATE new_buffer )
function yy_load_buffer_state (line 1964) | static void yy_load_buffer_state (void)
function YY_BUFFER_STATE (line 1978) | YY_BUFFER_STATE yy_create_buffer (FILE * file, int size )
function yy_delete_buffer (line 2006) | void yy_delete_buffer (YY_BUFFER_STATE b )
function yy_init_buffer (line 2025) | static void yy_init_buffer (YY_BUFFER_STATE b, FILE * file )
function yy_flush_buffer (line 2053) | void yy_flush_buffer (YY_BUFFER_STATE b )
function yypush_buffer_state (line 2082) | void yypush_buffer_state (YY_BUFFER_STATE new_buffer )
function yypop_buffer_state (line 2112) | void yypop_buffer_state (void)
function yyensure_buffer_stack (line 2131) | static void yyensure_buffer_stack (void)
function YY_BUFFER_STATE (line 2180) | YY_BUFFER_STATE yy_scan_buffer (char * base, yy_size_t size )
function YY_BUFFER_STATE (line 2217) | YY_BUFFER_STATE yy_scan_string (yyconst char * yystr )
function YY_BUFFER_STATE (line 2230) | YY_BUFFER_STATE yy_scan_bytes (yyconst char * yybytes, int _yybytes_len )
function yy_fatal_error (line 2264) | static void yynoreturn yy_fatal_error (yyconst char* msg )
function yyget_lineno (line 2292) | int yyget_lineno (void)
function FILE (line 2301) | FILE *yyget_in (void)
function FILE (line 2309) | FILE *yyget_out (void)
function yyget_leng (line 2317) | int yyget_leng (void)
function yyset_lineno (line 2335) | void yyset_lineno (int _line_number )
function yyset_in (line 2347) | void yyset_in (FILE * _in_str )
function yyset_out (line 2352) | void yyset_out (FILE * _out_str )
function yyget_debug (line 2357) | int yyget_debug (void)
function yyset_debug (line 2362) | void yyset_debug (int _bdebug )
function yy_init_globals (line 2367) | static int yy_init_globals (void)
function yylex_destroy (line 2396) | int yylex_destroy (void)
function yy_flex_strncpy (line 2422) | static void yy_flex_strncpy (char* s1, yyconst char * s2, int n )
function yy_flex_strlen (line 2432) | static int yy_flex_strlen (yyconst char * s )
function yyfree (line 2460) | void yyfree (void * ptr )
function yywrap (line 2471) | int yywrap(void){
function yyreset (line 2475) | void yyreset(void){
function yy_set_current_file (line 2480) | void yy_set_current_file(const char *file)
FILE: src/cfg_parsing/conf_yacc.c
function DEBUG_YACC (line 109) | static void DEBUG_YACC( FILE * output, list_items * list ) {return ;}
type yytokentype (line 147) | enum yytokentype
type YYSTYPE (line 216) | typedef union YYSTYPE YYSTYPE;
type YYTYPE_UINT8 (line 237) | typedef YYTYPE_UINT8 yytype_uint8;
type yytype_uint8 (line 239) | typedef unsigned char yytype_uint8;
type YYTYPE_INT8 (line 243) | typedef YYTYPE_INT8 yytype_int8;
type yytype_int8 (line 245) | typedef signed char yytype_int8;
type YYTYPE_UINT16 (line 249) | typedef YYTYPE_UINT16 yytype_uint16;
type yytype_uint16 (line 251) | typedef unsigned short int yytype_uint16;
type YYTYPE_INT16 (line 255) | typedef YYTYPE_INT16 yytype_int16;
type yytype_int16 (line 257) | typedef short int yytype_int16;
function yy_symbol_value_print (line 765) | static void
function yy_symbol_print (line 784) | static void
function yy_stack_print (line 799) | static void
function yy_reduce_print (line 822) | static void
function YYSIZE_T (line 883) | static YYSIZE_T
function YYSIZE_T (line 922) | static YYSIZE_T
function yysyntax_error (line 970) | static int
function yydestruct (line 1102) | static void
function yyparse (line 1131) | int
function yyerror (line 1838) | void yyerror(const char *s)
function set_error (line 1862) | void set_error(const char * s)
FILE: src/cfg_parsing/conf_yacc.h
type yytokentype (line 46) | enum yytokentype
type YYSTYPE (line 115) | typedef union YYSTYPE YYSTYPE;
FILE: src/cfg_parsing/config_parsing.c
type config_struct_t (line 30) | typedef struct config_struct_t {
function config_file_t (line 65) | config_file_t rh_config_ParseFile(char *file_path)
function rh_config_Print (line 136) | void rh_config_Print(FILE *output, config_file_t config)
function rh_config_Free (line 150) | void rh_config_Free(config_file_t config)
function rh_config_GetNbBlocks (line 168) | int rh_config_GetNbBlocks(config_file_t config)
function config_item_t (line 195) | config_item_t rh_config_GetBlockByIndex(config_file_t config,
function rh_config_GetNbItems (line 240) | int rh_config_GetNbItems(config_item_t block)
function rh_config_CountItemNames (line 269) | int rh_config_CountItemNames(config_item_t block, const char *name)
function rh_config_CountBlockNames (line 308) | int rh_config_CountBlockNames(config_file_t cfg, const char *name)
function config_item_t (line 328) | config_item_t rh_config_GetItemByIndex(config_item_t block,
function config_item_type (line 349) | config_item_type rh_config_ItemType(config_item_t item)
function config_item_type (line 368) | config_item_type rh_config_ContentType(config_item_t block)
function rh_config_GetKeyValue (line 382) | int rh_config_GetKeyValue(config_item_t item,
function rh_config_GetExtraArgs (line 405) | int rh_config_GetExtraArgs(config_item_t item, char ***p_extra_arg_array)
function generic_item (line 445) | static generic_item *GetItemFromList(generic_item *list, const char *name,
function config_item_t (line 480) | config_item_t rh_config_FindItemByName(config_file_t config, const char ...
function config_item_t (line 553) | config_item_t rh_config_GetItemByName(config_item_t block, const char *n...
function rh_config_GetItemLine (line 626) | int rh_config_GetItemLine(config_item_t item)
function rh_config_IsRead (line 634) | bool rh_config_IsRead(config_item_t item)
FILE: src/cfg_parsing/rbh_boolexpr.c
function compare_direction_t (line 31) | static inline compare_direction_t syntax2conf_comparator(operator_t op)
function bool_op_t (line 56) | static inline bool_op_t syntax2conf_boolop(bool_operator_t boolop)
function process_any_level_condition (line 70) | static int process_any_level_condition(char *regexpr, char *err_msg)
type criteria_descr_t (line 128) | struct criteria_descr_t {
function compare_criteria_t (line 199) | compare_criteria_t str2criteria(const char *str, const struct sm_instanc...
function str2lru_attr (line 220) | unsigned int str2lru_attr(const char *str, const struct sm_instance *smi)
function criteria2condition (line 263) | static int criteria2condition(const type_key_value *key_value,
function interpret_condition (line 475) | static int interpret_condition(type_key_value *key_value,
function set_attr_value_from_strings (line 520) | int set_attr_value_from_strings(const char *name, const char *val,
function build_bool_expr (line 601) | static int build_bool_expr(type_bool_expr *p_in_bool_expr,
function CreateBoolCond (line 719) | int CreateBoolCond(bool_node_t *p_out_node, compare_direction_t compar,
function AppendBoolCond (line 737) | int AppendBoolCond(bool_node_t *p_in_out_node, compare_direction_t compar,
function ConstantBoolExpr (line 780) | int ConstantBoolExpr(bool constant, bool_node_t *p_bool_node)
function GetBoolExpr (line 795) | int GetBoolExpr(config_item_t block, const char *block_name,
function FreeBoolExpr (line 851) | int FreeBoolExpr(bool_node_t *p_expr, bool free_top_node)
function build_set_expr (line 888) | static int build_set_expr(type_set *p_in_set,
function GetSetExpr (line 988) | int GetSetExpr(config_item_t block, const char *block_name,
function print_condition (line 1065) | static int print_condition(const compare_triplet_t *p_triplet, char *out...
function BoolExpr2str (line 1144) | int BoolExpr2str(bool_node_t *p_bool_node, char *out_str, size_t str_size)
function compare_boolexpr (line 1205) | int compare_boolexpr(const bool_node_t *expr1, const bool_node_t *expr2)
function update_boolexpr (line 1264) | bool update_boolexpr(bool_node_t *tgt, const bool_node_t *src)
FILE: src/cfg_parsing/rbh_cfg.c
type mod_cfgs (line 39) | struct mod_cfgs {
function rbh_cfg_read_set (line 63) | static int rbh_cfg_read_set(int module_mask, char *file_path, char *err_...
function rbh_cfg_load (line 161) | int rbh_cfg_load(int module_mask, char *file_path, char *err_msg_out)
function rbh_cfg_reload (line 171) | int rbh_cfg_reload(int curr_module_mask)
function rbh_cfg_write_template (line 188) | int rbh_cfg_write_template(FILE *stream)
function rbh_cfg_write_default (line 205) | int rbh_cfg_write_default(FILE *stream)
function print_begin_block (line 220) | void print_begin_block(FILE *output, unsigned int indent,
function print_end_block (line 234) | void print_end_block(FILE *output, unsigned int indent)
function print_line (line 240) | void print_line(FILE *output, unsigned int indent, const char *format, ...)
FILE: src/cfg_parsing/rbh_cfg_helpers.c
function is_stdname (line 25) | static inline bool is_stdname(const char *name)
function get_cfg_param (line 33) | static int get_cfg_param(config_item_t block, const char *block_name,
function GetStringParam (line 68) | int GetStringParam(config_item_t block, const char *block_name,
function GetCommandParam (line 155) | int GetCommandParam(config_item_t block, const char *block_name,
function GetBoolParam (line 230) | int GetBoolParam(config_item_t block, const char *block_name,
function GetDurationParam (line 277) | int GetDurationParam(config_item_t block, const char *block_name,
function GetSizeParam (line 341) | int GetSizeParam(config_item_t block, const char *block_name,
function GetIntParam (line 401) | int GetIntParam(config_item_t block, const char *block_name,
function GetInt64Param (line 473) | int GetInt64Param(config_item_t block, const char *block_name,
function GetFloatParam (line 551) | int GetFloatParam(config_item_t block, const char *block_name,
function CheckUnknownParameters (line 626) | void CheckUnknownParameters(config_item_t block, const char *block_name,
function read_scalar_params (line 686) | int read_scalar_params(config_item_t block, const char *block_name,
function _check_and_set_return_block (line 782) | static int _check_and_set_return_block(config_item_t check_item,
function get_cfg_block (line 806) | int get_cfg_block(config_file_t config, const char *name, config_item_t ...
function get_cfg_subblock (line 815) | int get_cfg_subblock(config_item_t block, const char *name,
FILE: src/chglog_reader/chglog_reader.c
type rec_stats (line 50) | struct rec_stats {
function timeval_from_rec (line 64) | static void timeval_from_rec(struct timeval *tv, CL_REC_TYPE *logrec)
function update_rec_stats (line 71) | static void update_rec_stats(struct rec_stats *rs, CL_REC_TYPE *logrec)
type reader_thr_info_t (line 85) | typedef struct reader_thr_info_t {
function log_close (line 161) | static int log_close(reader_thr_info_t *p_info)
function free_extra_info (line 178) | static void free_extra_info(void *ptr)
function free_extra_info2 (line 187) | static void free_extra_info2(void *ptr)
function clear_changelog_records (line 201) | static int clear_changelog_records(reader_thr_info_t *p_info)
function store_rec_stats (line 245) | static int store_rec_stats(lmgr_t *lmgr, const reader_thr_info_t *info,
function store_last_commit (line 290) | static bool store_last_commit(lmgr_t *lmgr, reader_thr_info_t *info, boo...
function drop_deprecated_changelog_vars (line 313) | static void drop_deprecated_changelog_vars(lmgr_t *lmgr, const char *mdt)
function retrieve_old_commit (line 351) | static uint64_t retrieve_old_commit(lmgr_t *lmgr, const reader_thr_info_...
function retrieve_last_commit (line 388) | static uint64_t retrieve_last_commit(lmgr_t *lmgr,
function log_record_callback (line 424) | static int log_record_callback(lmgr_t *lmgr, struct entry_proc_op_t *pop,
function dump_record (line 507) | static void dump_record(int debug_level, const char *mdt,
function dump_op_queue (line 594) | static void dump_op_queue(reader_thr_info_t *p_info, int debug_level, in...
function set_name (line 614) | static void set_name(CL_REC_TYPE *logrec, entry_proc_op_t *p_op)
function process_op_queue (line 642) | static void process_op_queue(reader_thr_info_t *p_info, bool push_all)
function insert_into_hash (line 687) | static int insert_into_hash(reader_thr_info_t *p_info, CL_REC_TYPE *p_rec,
function can_ignore_hsm_record (line 790) | static bool can_ignore_hsm_record(reader_thr_info_t *p_info,
function can_ignore_record (line 834) | static bool can_ignore_record(reader_thr_info_t *p_info,
function cl_rename2unlink_flags (line 939) | static uint16_t cl_rename2unlink_flags(uint16_t flags,
function CL_REC_TYPE (line 983) | static CL_REC_TYPE *create_fake_unlink_record(const reader_thr_info_t *p...
function CL_REC_TYPE (line 1034) | static CL_REC_TYPE *create_fake_rename_record(const reader_thr_info_t *p...
function process_log_rec (line 1081) | static int process_log_rec(reader_thr_info_t *p_info, CL_REC_TYPE *p_rec)
type cl_status_e (line 1268) | typedef enum { cl_ok, cl_continue, cl_stop } cl_status_e;
function cl_status_e (line 1270) | static cl_status_e cl_get_one(reader_thr_info_t *info, CL_REC_TYPE **pp_...
function action_sigchld (line 1395) | static void action_sigchld(int sig)
function cl_reader_start (line 1409) | int cl_reader_start(run_flags_t flags, int mdt_index)
function cl_reader_terminate (line 1556) | int cl_reader_terminate(void)
function cl_reader_wait (line 1574) | int cl_reader_wait(void)
function cl_reader_done (line 1589) | int cl_reader_done(void)
function show_rec_stats (line 1617) | static void show_rec_stats(const char *verb, const char *verb_ed,
function cl_reader_dump_stats (line 1661) | int cl_reader_dump_stats(void)
function store_thread_info (line 1743) | static void store_thread_info(lmgr_t *lmgr, reader_thr_info_t *info)
function cl_reader_store_stats (line 1805) | void cl_reader_store_stats(lmgr_t *lmgr)
FILE: src/chglog_reader/chglog_reader_config.c
function cl_reader_set_default_cfg (line 47) | static void cl_reader_set_default_cfg(void *module_config)
function cl_reader_write_default (line 70) | static void cl_reader_write_default(FILE *output)
function cl_reader_write_template (line 93) | static void cl_reader_write_template(FILE *output)
function parse_mdt_block (line 155) | static int parse_mdt_block(config_item_t config_blk, const char *block_n...
function cl_reader_read_cfg (line 216) | static int cl_reader_read_cfg(config_file_t config, void *module_config,
function cl_reader_reload_cfg (line 341) | static int cl_reader_reload_cfg(chglog_reader_config_t *cfg)
function cl_reader_cfg_set (line 387) | static int cl_reader_cfg_set(void *arg, bool reload)
function cl_reader_cfg_free (line 403) | static void cl_reader_cfg_free(void *arg)
FILE: src/common/RW_Lock.c
function print_lock (line 33) | static inline void print_lock(char *s, rw_lock_t *plock)
function P_r (line 48) | int P_r(rw_lock_t *plock)
function V_r (line 74) | int V_r(rw_lock_t *plock)
function P_w (line 100) | int P_w(rw_lock_t *plock)
function V_w (line 125) | int V_w(rw_lock_t *plock)
function rw_lock_downgrade (line 161) | int rw_lock_downgrade(rw_lock_t *plock)
function rw_lock_init (line 195) | int rw_lock_init(rw_lock_t *plock)
function rw_lock_destroy (line 226) | int rw_lock_destroy(rw_lock_t *plock)
FILE: src/common/global_config.c
function fs_key_t (line 30) | static inline fs_key_t name2fskey(const char *name)
function global_cfg_set_default (line 42) | static void global_cfg_set_default(void *module_config)
function global_cfg_write_default (line 67) | static void global_cfg_write_default(FILE *output)
function global_cfg_read (line 91) | static int global_cfg_read(config_file_t config, void *module_config,
function global_cfg_set (line 175) | static int global_cfg_set(void *module_config, bool reload)
function global_cfg_write_template (line 248) | static void global_cfg_write_template(FILE *output)
function global_cfg_free (line 302) | static void global_cfg_free(void *cfg)
FILE: src/common/lustre_tools.c
function lustre_msg_level_convert (line 55) | static inline int lustre_msg_level_convert(enum llapi_message_level level)
function display_llapi_msg (line 75) | static void display_llapi_msg(enum llapi_message_level lvl, int err,
function Lustre_Init (line 83) | int Lustre_Init(void)
function set_empty_stripe (line 97) | static void set_empty_stripe(stripe_info_t *p_stripe_info,
function objects2stripe_items (line 114) | static void objects2stripe_items(stripe_items_t *stripe_items,
function stripe_info_lumv1 (line 136) | static int stripe_info_lumv1(struct lov_user_md *lum,
function stripe_info_lumv3 (line 178) | static int stripe_info_lumv3(struct lov_user_md_v3 *lum,
type lov_user_md (line 217) | struct lov_user_md
type lov_comp_md_v1 (line 218) | struct lov_comp_md_v1
type lov_user_md (line 220) | struct lov_user_md
type lov_user_md (line 228) | struct lov_user_md
function stripe_info_compv1 (line 238) | static int stripe_info_compv1(struct lov_comp_md_v1 *lcm,
function fill_stripe_info (line 274) | static int fill_stripe_info(struct lov_user_md *lum,
function File_GetStripeByPath (line 307) | int File_GetStripeByPath(const char *entry_path, stripe_info_t *p_stripe...
function File_GetStripeByDirFd (line 342) | int File_GetStripeByDirFd(int dirfd, const char *fname,
function DataOnOST (line 382) | bool DataOnOST(size_t fsize, unsigned int ost_index,
function blkcnt_t (line 423) | blkcnt_t BlocksOnOST(blkcnt_t blocks, unsigned int ost_index,
function CreateStriped (line 474) | int CreateStriped(const char *path, const stripe_info_t *old_stripe,
function CreateWithoutStripe (line 505) | int CreateWithoutStripe(const char *path, mode_t mode, int overwrite)
function BuildFidPath (line 540) | int BuildFidPath(const entry_id_t *p_id, /* IN */
function str_shift (line 556) | static void str_shift(char *str)
function Lustre_GetFullPath (line 566) | int Lustre_GetFullPath(const entry_id_t *p_id, char *fullpath,
function Lustre_GetFidFromPath (line 625) | int Lustre_GetFidFromPath(const char *fullpath, entry_id_t *p_id)
function Lustre_GetFidByFd (line 639) | int Lustre_GetFidByFd(int fd, entry_id_t *p_id)
function Lustre_GetNameParent (line 662) | int Lustre_GetNameParent(const char *path, int linkno,
function Get_OST_usage (line 715) | int Get_OST_usage(const char *fs_path, unsigned int ost_index,
function Get_pool_usage (line 767) | int Get_pool_usage(const char *poolname, struct statfs *pool_statfs)
function lustre_mds_stat (line 874) | int lustre_mds_stat(const char *fullpath, int parentfd, struct stat *inode)
function lustre_mds_stat_by_fid (line 941) | int lustre_mds_stat_by_fid(const entry_id_t *p_id, struct stat *inode)
function append_stripe_list (line 1004) | void append_stripe_list(GString *str, const stripe_items_t *p_stripe_items,
function BuildLovEA (line 1032) | ssize_t BuildLovEA(const entry_id_t *p_id, const attr_set_t *p_attrs,
function project_get_xattr (line 1162) | static int project_get_xattr(const char *pathname, struct fsxattr *fsx)
function lustre_project_get_id (line 1192) | int lustre_project_get_id(const char *pathname)
FILE: src/common/mntent_compat.c
type statfs (line 9) | struct statfs
type mntent (line 13) | struct mntent
function FILE (line 15) | FILE *setmntent(char *filep, char *type)
function getmntent_addopt (line 22) | void getmntent_addopt(char **c, const char *s)
type mntent (line 30) | struct mntent
type fstab (line 33) | struct fstab
function endmntent (line 97) | int endmntent(FILE *filep)
FILE: src/common/mntent_compat.h
type mntent (line 21) | struct mntent {
type mntent (line 31) | struct mntent
FILE: src/common/param_utils.c
function match_varname (line 39) | static bool match_varname(const char *str, int len)
type ph_flags_t (line 59) | typedef enum {
function placeholder_foreach (line 75) | static int placeholder_foreach(const char *str, const char *str_descr,
type param_descr (line 186) | struct param_descr {
type param_descr (line 276) | struct param_descr
type param_descr (line 296) | struct param_descr
type param_descr (line 298) | struct param_descr
type set_param_mask_args (line 308) | struct set_param_mask_args {
function set_param_mask (line 316) | static int set_param_mask(const char *name, int begin_idx, int end_idx,
function attr_mask_t (line 336) | attr_mask_t params_mask(const char *str, const char *str_descr, bool *err)
type build_cmd_args (line 354) | struct build_cmd_args {
function build_cmd (line 424) | static int build_cmd(const char *name, int begin_idx, int end_idx, void ...
type sm_instance (line 524) | struct sm_instance
type build_cmd_args (line 527) | struct build_cmd_args
function subst_shell_params (line 572) | int subst_shell_params(char **cmd_in,
function compare_cmd (line 637) | int compare_cmd(char **c1, char **c2)
FILE: src/common/queue.c
function CreateQueue (line 44) | int CreateQueue(entry_queue_t *p_queue, unsigned int queue_size,
function Reset_StatusCount (line 101) | void Reset_StatusCount(entry_queue_t *p_queue)
function Reset_Feedback (line 116) | void Reset_Feedback(entry_queue_t *p_queue, unsigned int feedback_index)
function Queue_Insert (line 137) | int Queue_Insert(entry_queue_t *p_queue, void *entry)
function Queue_Get (line 177) | int Queue_Get(entry_queue_t *p_queue, void **p_ptr)
function Queue_Acknowledge (line 218) | void Queue_Acknowledge(entry_queue_t *p_queue, unsigned int status,
function RetrieveQueueStats (line 246) | void RetrieveQueueStats(entry_queue_t *p_queue, unsigned int *p_nb_thr_w...
FILE: src/common/rbh_cmd.c
type io_chan_arg (line 35) | struct io_chan_arg {
type exec_ctx (line 49) | struct exec_ctx {
function ctx_incref (line 56) | static inline void ctx_incref(struct exec_ctx *ctx)
function ctx_decref (line 62) | static inline void ctx_decref(struct exec_ctx *ctx)
function child_status2errno (line 70) | static int child_status2errno(int status, const char **msg)
function watch_child_cb (line 109) | static void watch_child_cb(GPid pid, gint status, gpointer data)
function gboolean (line 131) | static gboolean readline_cb(GIOChannel *channel, GIOCondition cond,
function iochan_null_enc (line 166) | static int iochan_null_enc(GIOChannel *chan)
function g_child_watch_add_tothread (line 193) | static int g_child_watch_add_tothread(GPid pid,
function g_io_add_watch_tothread (line 211) | static int g_io_add_watch_tothread(GIOChannel *channel,
function execute_shell_command (line 234) | int execute_shell_command(char **cmd, parse_cb_t cb_func, void *cb_arg)
function cb_stderr_to_log (line 330) | int cb_stderr_to_log(void *arg, char *line, size_t size, int stream)
FILE: src/common/rbh_logs.c
type log_stream_t (line 64) | typedef struct _log_stream_ {
type alert_type_t (line 104) | typedef struct alert_type {
function log_init_check (line 134) | static inline void log_init_check(void)
function init_keys (line 143) | static void init_keys(void)
function GetThreadIndex (line 150) | static unsigned int GetThreadIndex(void)
function rbh_msg_level_convert (line 174) | static inline enum llapi_message_level rbh_msg_level_convert(int level)
function rbh_adjust_log_level_external (line 197) | void rbh_adjust_log_level_external(void)
function init_log_descr (line 205) | static int init_log_descr(const char *logname, log_stream_t *p_log)
function check_syslog_facility (line 249) | static int check_syslog_facility(const char *descriptor, int *p_fac,
function InitializeLogs (line 296) | int InitializeLogs(const char *program_name)
function TestDisplayLevel (line 350) | int TestDisplayLevel(log_level level)
function flush_log_descr (line 356) | static void flush_log_descr(log_stream_t *p_log)
function FlushLogs (line 369) | void FlushLogs(void)
function test_log_descr (line 381) | static void test_log_descr(const char *logname, log_stream_t *p_log)
function test_file_names (line 422) | static void test_file_names(void)
function log_level (line 441) | log_level str2debuglevel(char *str)
function clean_str (line 459) | static void clean_str(char *str)
function display_line_log (line 469) | static void display_line_log(log_stream_t *p_log, const char *tag,
function display_line_log_ (line 553) | static void display_line_log_(log_stream_t *p_log, const char *tag,
function DisplayLogFn (line 566) | void DisplayLogFn(log_level debug_level, const char *tag, const char *fo...
function vDisplayLogFn (line 576) | void vDisplayLogFn(log_level debug_level, const char *tag, const char *f...
function DisplayReport (line 596) | void DisplayReport(const char *format, ...)
function DisplayChangelogs (line 610) | void DisplayChangelogs(const char *format, ...)
function Alert_StartBatching (line 624) | void Alert_StartBatching()
function FlushAlerts (line 640) | static void FlushAlerts(bool release_mutex_asap)
function Alert_Add (line 767) | static void Alert_Add(const char *title, const char *entry, const char *...
function Alert_EndBatching (line 842) | void Alert_EndBatching()
function RaiseEntryAlert (line 852) | void RaiseEntryAlert(const char *alert_name, /* alert name (if set) */
function RaiseAlert (line 908) | void RaiseAlert(const char *title, const char *format, ...)
function WaitStatsInterval (line 963) | void WaitStatsInterval(void)
function log_cfg_set_default (line 972) | static void log_cfg_set_default(void *module_config)
function log_cfg_write_default (line 1001) | static void log_cfg_write_default(FILE *output)
function log_cfg_write_template (line 1019) | static void log_cfg_write_template(FILE *output)
function log_cfg_read (line 1064) | static int log_cfg_read(config_file_t config, void *module_config,
function log_cfg_reload (line 1173) | static int log_cfg_reload(log_config_t *conf)
function force_debug_level (line 1292) | void force_debug_level(log_level level)
function force_log_file (line 1302) | void force_log_file(const char *file)
function log_cfg_set (line 1309) | static int log_cfg_set(void *cfg, bool reload)
function log_cfg_free (line 1346) | static void log_cfg_free(void *cfg)
FILE: src/common/rbh_misc.c
function Exit (line 63) | void Exit(int error_code)
function hash_name (line 108) | static uint64_t hash_name(const char *str)
function fsidto64 (line 119) | static uint64_t fsidto64(fsid_t fsid)
function _set_mount_point (line 146) | static int _set_mount_point(char *mntpnt)
function set_fs_info (line 195) | static int set_fs_info(char *name, char *mountp, dev_t dev, fsid_t fsid)
function entry_id_t (line 266) | const entry_id_t *get_dot_lustre_fid(void)
function entry_id_t (line 272) | const entry_id_t *get_fid_fid(void)
function dev_t (line 285) | dev_t get_fsdev(void)
function get_fskey (line 290) | uint64_t get_fskey(void)
function entry_id_t (line 295) | const entry_id_t *get_root_id(void)
function SendMail (line 303) | int SendMail(const char *recipient, const char *subject, const char *mes...
function SearchConfig (line 334) | int SearchConfig(const char *cfg_in, char *cfg_out, bool *changed,
type passwd (line 433) | struct passwd
type group (line 445) | struct group
function stat2rbh_attrs (line 475) | void stat2rbh_attrs(const struct stat *p_inode, attr_set_t *p_attr_set,
function rbh_attrs2stat (line 537) | void rbh_attrs2stat(const attr_set_t *p_attr_set, struct stat *p_inode)
function copy_mntent (line 620) | static int copy_mntent(struct mntent *mntout, char *buf, int buflen,
type mntent (line 655) | struct mntent
type mntent (line 655) | struct mntent
type mntent (line 658) | struct mntent
function match_mount_path (line 679) | static bool match_mount_path(const char *in_path, const struct mntent *p...
function check_fs_info (line 711) | int check_fs_info(const char *path, const char *expected_type,
function InitFS (line 910) | int InitFS(void)
function ResetFS (line 946) | int ResetFS(void)
function CheckLastFS (line 1034) | int CheckLastFS(void)
function TerminateThread (line 1120) | int TerminateThread(pthread_t thread_id)
function str2bigint (line 1239) | long long str2bigint(const char *str)
function str2bool (line 1263) | int str2bool(const char *str)
function str2duration (line 1285) | int str2duration(const char *str)
function str2size (line 1321) | uint64_t str2size(const char *str)
function extract_digits (line 1367) | static inline int extract_digits(const char *src, char *dest,
function time_t (line 1381) | time_t str2date(const char *str)
function print_attrs (line 1515) | void print_attrs(GString *str, const attr_set_t *p_attr_set,
function ApplyAttrs (line 1807) | int ApplyAttrs(const entry_id_t *p_id, const attr_set_t *p_attr_new,
function gcd (line 1980) | unsigned int gcd(unsigned int x, unsigned int y)
function rh_sleep (line 1998) | void rh_sleep(unsigned int seconds)
function str_subst (line 2018) | int str_subst(char *str_in_out, const char *to_be_replaced,
function str_escape_charset (line 2072) | int str_escape_charset(char *dest, size_t dest_size, const char *src,
function relative_path (line 2109) | int relative_path(const char *fullpath, const char *root, char *rel_path)
function upperstr (line 2143) | void upperstr(char *str)
function lowerstr (line 2151) | void lowerstr(char *str)
function path2id (line 2159) | int path2id(const char *path, entry_id_t *id, const struct stat *st)
function mkdir_recurse (line 2187) | int mkdir_recurse(const char *full_path, mode_t mode, entry_id_t *dir_id)
function create_parent_of (line 2274) | int create_parent_of(const char *child_path, entry_id_t *p_parent_id)
function create_from_attrs (line 2295) | int create_from_attrs(const attr_set_t *attrs_in,
function path_check_update (line 2550) | enum path_check_return path_check_update(const entry_id_t *p_id,
function set_uid_val (line 2603) | int set_uid_val(const char *username, db_type_u *val)
function set_gid_val (line 2659) | int set_gid_val(const char *groupname, db_type_u *val)
FILE: src/common/rbh_modules.c
function module_get_version (line 61) | static int module_get_version(const rbh_module_t *mod)
function module_sym_load (line 80) | static int module_sym_load(rbh_module_t *mod, const char *sym_name,
function module_load_from_file (line 112) | static int module_load_from_file(const char *libfile, rbh_module_t *mod)
function module_fullname_build (line 184) | static int module_fullname_build(char *dst, const char *name)
function module_load (line 209) | static int module_load(const char *name)
function module_unload (line 250) | static int module_unload(rbh_module_t *mod)
function module_unload_all (line 270) | int module_unload_all(void)
function rbh_module_t (line 298) | static rbh_module_t *module_get(const char *mod_name)
function action_func_t (line 318) | action_func_t module_get_action(const char *name)
function status_manager_t (line 338) | status_manager_t *module_get_status_manager(const char *name)
function action_scheduler_t (line 349) | action_scheduler_t *module_get_scheduler(const char *name)
FILE: src/common/rbh_params.c
function rbh_params_free (line 34) | void rbh_params_free(struct rbh_params *params)
type rbh_params (line 43) | struct rbh_params
function rbh_param_set (line 51) | int rbh_param_set(struct rbh_params *params, const char *key,
function rbh_list2params (line 70) | int rbh_list2params(struct rbh_params *params, const char **list,
type serialize_args (line 100) | struct serialize_args {
function param2csv (line 133) | static int param2csv(const char *key, const char *val, void *udata)
function rbh_params_serialize (line 163) | int rbh_params_serialize(const struct rbh_params *params,
function rbh_params_foreach (line 180) | int rbh_params_foreach(const struct rbh_params *params, rbh_params_iter_...
function add_cb (line 205) | static int add_cb(const char *key, const char *val, void *udata)
function rbh_params_copy (line 210) | int rbh_params_copy(struct rbh_params *tgt, const struct rbh_params *src)
FILE: src/common/uidgidcache.c
type pw_cacheent_t (line 57) | typedef struct pw_cacheent__ {
type gr_cacheent_t (line 61) | typedef struct gr_cacheent__ {
function InitUidGid_Cache (line 86) | int InitUidGid_Cache(void)
type passwd (line 115) | struct passwd
type passwd (line 117) | struct passwd
type group (line 210) | struct group
type group (line 212) | struct group
FILE: src/common/update_params.c
function set_default_update_params (line 33) | static void set_default_update_params(void *module_config)
function write_default_update_params (line 46) | static void write_default_update_params(FILE *output)
function write_update_params_template (line 57) | static void write_update_params_template(FILE *output)
function read_update_item (line 110) | static int read_update_item(updt_param_item_t *item, const char *str,
function read_update_params (line 172) | static int read_update_params(config_file_t config, void *module_config,
function reload_update_params (line 262) | static int reload_update_params(void *module_config)
function update_params_set (line 302) | static int update_params_set(void *module_config, bool reload)
function updt_param_free (line 318) | static void updt_param_free(void *cfg)
function need_fileclass_update (line 339) | bool need_fileclass_update(const attr_set_t *p_attrs)
function need_info_update (line 385) | bool need_info_update(const attr_set_t *p_attrs, bool *update_if_event,
FILE: src/entry_processor/diff_pipeline.c
function err_missing (line 33) | static inline bool err_missing(int rc)
type entry_proc_op_t (line 45) | struct entry_proc_op_t
type entry_proc_op_t (line 46) | struct entry_proc_op_t
type entry_proc_op_t (line 47) | struct entry_proc_op_t
type entry_proc_op_t (line 48) | struct entry_proc_op_t
type entry_proc_op_t (line 49) | struct entry_proc_op_t
type entry_proc_op_t (line 50) | struct entry_proc_op_t
type entry_proc_op_t (line 51) | struct entry_proc_op_t
type entry_proc_op_t (line 54) | struct entry_proc_op_t
type entry_proc_op_t (line 55) | struct entry_proc_op_t
function EntryProc_get_fid (line 101) | int EntryProc_get_fid(struct entry_proc_op_t *p_op, lmgr_t *lmgr)
function EntryProc_get_info_db (line 165) | int EntryProc_get_info_db(struct entry_proc_op_t *p_op, lmgr_t *lmgr)
function EntryProc_get_info_fs (line 395) | int EntryProc_get_info_fs(struct entry_proc_op_t *p_op, lmgr_t *lmgr)
function EntryProc_report_diff (line 564) | int EntryProc_report_diff(struct entry_proc_op_t *p_op, lmgr_t *lmgr)
FILE: src/entry_processor/entry_proc_hash.c
function max_count_to_hash_size (line 41) | unsigned int max_count_to_hash_size(unsigned int max_count)
type id_hash (line 54) | struct id_hash
type id_hash (line 57) | struct id_hash
type id_hash (line 60) | struct id_hash
type id_hash_slot (line 61) | struct id_hash_slot
type id_hash_slot (line 68) | struct id_hash_slot
function id_hash_stats (line 81) | void id_hash_stats(struct id_hash *id_hash, const char *log_str)
function id_hash_dump (line 127) | void id_hash_dump(struct id_hash *id_hash, bool parent)
FILE: src/entry_processor/entry_proc_impl.c
type list_by_stage_t (line 35) | typedef struct __list_by_stage__ {
type worker_info_t (line 84) | typedef struct worker_info__ {
function dump_entry_op (line 93) | static void dump_entry_op(entry_proc_op_t *p_op)
function EntryProc_noop (line 195) | static int EntryProc_noop(struct entry_proc_op_t *p_op, lmgr_t *lmgr)
function mk_bench_pipeline (line 211) | static int mk_bench_pipeline(unsigned int stages)
function EntryProcessor_Init (line 239) | int EntryProcessor_Init(pipeline_flavor_e flavor, run_flags_t flags, voi...
function EntryProcessor_Push (line 353) | void EntryProcessor_Push(entry_proc_op_t *p_entry)
function move_stage_entries (line 426) | static int move_stage_entries(const unsigned int source_stage_index)
function entry_proc_op_t (line 573) | static entry_proc_op_t **next_work_avail(bool *p_empty, int *op_count)
function entry_proc_op_t (line 836) | static entry_proc_op_t **EntryProcessor_GetNextOp(int *count)
function EntryProcessor_Release (line 885) | void EntryProcessor_Release(entry_proc_op_t *p_op)
function EntryProcessor_AcknowledgeBatch (line 905) | int EntryProcessor_AcknowledgeBatch(entry_proc_op_t **ops, unsigned int ...
function EntryProcessor_Acknowledge (line 1003) | int EntryProcessor_Acknowledge(entry_proc_op_t *p_op, unsigned int next_...
function print_op_stats (line 1023) | static void print_op_stats(entry_proc_op_t *p_op, unsigned int stage,
function EntryProcessor_DumpCurrentStages (line 1050) | void EntryProcessor_DumpCurrentStages(void)
function entry_proc_op_t (line 1157) | entry_proc_op_t *EntryProcessor_Get(void)
function count_nb_ops (line 1177) | static unsigned int count_nb_ops(void)
function EntryProcessor_Terminate (line 1195) | int EntryProcessor_Terminate(bool flush_ops)
function EntryProcessor_Unblock (line 1243) | void EntryProcessor_Unblock(int stage)
FILE: src/entry_processor/entry_proc_tools.c
type id_hash (line 37) | struct id_hash
type id_hash (line 39) | struct id_hash
function id_constraint_init (line 42) | int id_constraint_init(void)
function id_constraint_register (line 61) | int id_constraint_register(entry_proc_op_t *p_op, int at_head)
function id_constraint_is_first_op (line 116) | bool id_constraint_is_first_op(entry_proc_op_t *p_op_in)
function id_constraint_unregister (line 192) | int id_constraint_unregister(entry_proc_op_t *p_op)
function id_constraint_stats (line 236) | void id_constraint_stats(void)
function id_constraint_dump (line 242) | void id_constraint_dump(void)
function entry_proc_cfg_set_default (line 253) | static void entry_proc_cfg_set_default(void *module_config)
function entry_proc_cfg_write_default (line 269) | static void entry_proc_cfg_write_default(FILE *output)
function std_pipeline_arg_names (line 295) | static int std_pipeline_arg_names(char **list, char *buffer)
function load_pipeline_config (line 310) | static int load_pipeline_config(const pipeline_descr_t *descr,
function set_default_pipeline_config (line 370) | static void set_default_pipeline_config(const pipeline_descr_t *descr,
function entry_proc_cfg_read (line 417) | static int entry_proc_cfg_read(config_file_t config, void *module_config,
function entry_proc_cfg_reload (line 533) | static int entry_proc_cfg_reload(entry_proc_config_t *conf)
function entry_proc_cfg_set (line 579) | static int entry_proc_cfg_set(void *cfg, bool reload)
function entry_proc_cfg_write_template (line 590) | static void entry_proc_cfg_write_template(FILE *output)
function time2human_helper (line 650) | void time2human_helper(time_t t, const char *attr_name, char *str,
function check_and_warn_fake_mtime (line 670) | void check_and_warn_fake_mtime(const struct entry_proc_op_t *p_op)
function check_stripe_info (line 711) | void check_stripe_info(struct entry_proc_op_t *p_op, lmgr_t *lmgr)
function entry_proc_cfg_free (line 769) | static void entry_proc_cfg_free(void *cfg)
FILE: src/entry_processor/entry_proc_tools.h
type entry_proc_config_t (line 22) | typedef struct entry_proc_config_t {
type entry_proc_op_t (line 69) | struct entry_proc_op_t
type entry_proc_op_t (line 71) | struct entry_proc_op_t
type entry_proc_op_t (line 74) | struct entry_proc_op_t
FILE: src/entry_processor/std_pipeline.c
function err_missing (line 35) | static inline bool err_missing(int rc)
type entry_proc_op_t (line 45) | struct entry_proc_op_t
type entry_proc_op_t (line 46) | struct entry_proc_op_t
type entry_proc_op_t (line 47) | struct entry_proc_op_t
type entry_proc_op_t (line 48) | struct entry_proc_op_t
type entry_proc_op_t (line 49) | struct entry_proc_op_t
type entry_proc_op_t (line 50) | struct entry_proc_op_t
type entry_proc_op_t (line 52) | struct entry_proc_op_t
type entry_proc_op_t (line 54) | struct entry_proc_op_t
type entry_proc_op_t (line 57) | struct entry_proc_op_t
type entry_proc_op_t (line 58) | struct entry_proc_op_t
function EntryProc_get_fid (line 128) | int EntryProc_get_fid(struct entry_proc_op_t *p_op, lmgr_t *lmgr)
function obj_type_t (line 190) | static obj_type_t cl2type_clue(CL_REC_TYPE *logrec)
function check_path_info (line 214) | static inline void check_path_info(struct entry_proc_op_t *p_op,
function EntryProc_FillFromLogRec (line 232) | static int EntryProc_FillFromLogRec(struct entry_proc_op_t *p_op,
function EntryProc_ProcessLogRec (line 432) | static int EntryProc_ProcessLogRec(struct entry_proc_op_t *p_op)
function check_fullpath (line 620) | static void check_fullpath(attr_set_t *attrs, const entry_id_t *id,
function is_lustre_special (line 687) | static bool is_lustre_special(const struct entry_proc_op_t *p_op)
function logrec2dbneed (line 738) | static void logrec2dbneed(struct entry_proc_op_t *p_op)
function scan2dbneed (line 839) | static void scan2dbneed(struct entry_proc_op_t *p_op)
type entry_proc_op_t (line 903) | struct entry_proc_op_t
function skip_record (line 1188) | static int skip_record(struct entry_proc_op_t *p_op)
function rm_record (line 1209) | static int rm_record(struct entry_proc_op_t *p_op)
function EntryProc_get_info_fs (line 1286) | int EntryProc_get_info_fs(struct entry_proc_op_t *p_op, lmgr_t *lmgr)
function dbop_is_batchable (line 1520) | static bool dbop_is_batchable(struct entry_proc_op_t *first,
function EntryProc_pre_apply (line 1545) | int EntryProc_pre_apply(struct entry_proc_op_t *p_op, lmgr_t *lmgr)
function EntryProc_db_apply (line 1680) | int EntryProc_db_apply(struct entry_proc_op_t *p_op, lmgr_t *lmgr)
function EntryProc_db_batch_apply (line 1771) | int EntryProc_db_batch_apply(struct entry_proc_op_t **ops, int count,
function EntryProc_chglog_clr (line 1843) | int EntryProc_chglog_clr(struct entry_proc_op_t *p_op, lmgr_t *lmgr)
function mass_rm_cb (line 1875) | static void mass_rm_cb(const entry_id_t *p_id)
function EntryProc_rm_old_entries (line 1880) | int EntryProc_rm_old_entries(struct entry_proc_op_t *p_op, lmgr_t *lmgr)
FILE: src/entry_processor/test_hash.c
function main (line 21) | int main(int argc, char **argv)
FILE: src/fs_scan/fs_scan.c
type thread_scan_info_t (line 60) | typedef struct thread_scan_info__ {
type timeval (line 102) | struct timeval
function set_db_wait_flag (line 124) | static inline void set_db_wait_flag(void)
function wait_for_db_callback (line 131) | static void wait_for_db_callback(void)
function db_special_op_callback (line 139) | static int db_special_op_callback(lmgr_t *lmgr, struct entry_proc_op_t *...
function signal_scan_finished (line 165) | static inline void signal_scan_finished(void)
function all_threads_idle (line 173) | static inline bool all_threads_idle(void)
function wait_scan_finished (line 183) | void wait_scan_finished(void)
function ResetScanStats (line 194) | static void ResetScanStats(bool do_lock)
function ignore_entry (line 212) | static bool ignore_entry(char *fullpath, char *name, unsigned int depth,
function TerminateScan (line 300) | static int TerminateScan(int scan_complete, time_t end)
function RecursiveTaskTermination (line 481) | static int RecursiveTaskTermination(thread_scan_info_t *p_info,
function check_entry_dev (line 595) | static inline int check_entry_dev(dev_t entry_dev, dev_t *root_dev,
function openat_noatime (line 668) | static int openat_noatime(int pfd, const char *name, int rddir)
function open_noatime (line 699) | static int open_noatime(const char *path, int rddir)
function check_dir_error (line 733) | static void check_dir_error(int rc)
function create_child_task (line 744) | static int create_child_task(const char *childpath, struct stat *inode,
function stat_entry (line 790) | static int stat_entry(const char *path, const char *name, int parentfd,
type stat (line 822) | struct stat
function DIR_T (line 1043) | static inline DIR_T dir_open(const char *path, int pfd, const char *relp...
function process_one_dir (line 1055) | static int process_one_dir(robinhood_task_t *p_task,
function push_dir_list (line 1180) | static int push_dir_list(robinhood_task_t *parent_task)
type id_map (line 1244) | struct id_map {
function else (line 1323) | else if (p_task->depth == 0)
type id_map (line 1358) | struct id_map
type timeval (line 1477) | struct timeval
type timeval (line 1478) | struct timeval
type timeval (line 1479) | struct timeval
function Robinhood_InitScanModule (line 1583) | int Robinhood_InitScanModule(void)
function Robinhood_StopScanModule (line 1658) | void Robinhood_StopScanModule(void)
function StartScan (line 1703) | static int StartScan(void)
function UpdateMaxUsage (line 1861) | static void UpdateMaxUsage(void)
function Robinhood_CheckScanDeadlines (line 1892) | int Robinhood_CheckScanDeadlines(void)
function Robinhood_StatsScan (line 2116) | void Robinhood_StatsScan(robinhood_fsscan_stat_t *p_stats)
FILE: src/fs_scan/fs_scan.h
type robinhood_fsscan_stat_t (line 38) | typedef struct robinhood_fsscan_stat__ {
FILE: src/fs_scan/fs_scan_main.c
function FSScan_Start (line 66) | int FSScan_Start(run_flags_t flags, const char *partial_root)
function FSScan_Wait (line 102) | void FSScan_Wait(void)
function FSScan_Terminate (line 108) | void FSScan_Terminate(void)
function FSScan_StoreStats (line 116) | void FSScan_StoreStats(lmgr_t *lmgr)
function FSScan_DumpStats (line 150) | void FSScan_DumpStats(void)
function fs_scan_cfg_set_default (line 242) | static void fs_scan_cfg_set_default(void *module_config)
function fs_scan_cfg_write_default (line 268) | static void fs_scan_cfg_write_default(FILE *output)
function add_ignore_item (line 291) | static int add_ignore_item(fs_scan_config_t *conf, config_item_t item,
function add_scan_dir (line 309) | static int add_scan_dir(fs_scan_config_t *conf, const char *val,
function fs_scan_cfg_read (line 330) | static int fs_scan_cfg_read(config_file_t config, void *module_config,
function update_ignore (line 461) | static void update_ignore(whitelist_item_t *old_items, unsigned int old_...
function free_ignore (line 504) | static void free_ignore(whitelist_item_t *p_items, int count)
function free_scan_dirs (line 517) | static void free_scan_dirs(char **list, int count)
function fs_scan_cfg_reload (line 531) | static int fs_scan_cfg_reload(fs_scan_config_t *conf)
function fs_scan_cfg_set (line 608) | static int fs_scan_cfg_set(void *cfg, bool reload)
function fs_scan_cfg_write_template (line 619) | static void fs_scan_cfg_write_template(FILE *output)
function fs_scan_cfg_free (line 684) | static void fs_scan_cfg_free(void *cfg)
FILE: src/fs_scan/fs_scan_types.h
type robinhood_task_t (line 29) | typedef struct robinhood_task__ {
type task_stack_t (line 94) | typedef struct tasks_stack__ {
FILE: src/fs_scan/task_stack_mngmt.c
function InitTaskStack (line 29) | int InitTaskStack(task_stack_t *p_stack)
function InsertTask_to_Stack (line 57) | void InsertTask_to_Stack(task_stack_t *p_stack, robinhood_task_t *p_task)
function robinhood_task_t (line 85) | robinhood_task_t *GetTask_from_Stack(task_stack_t *p_stack)
FILE: src/fs_scan/task_tree_mngmt.c
function SetNbPreallocTasks (line 43) | void SetNbPreallocTasks(size_t nb_prealloc)
function TasksMemInfo (line 48) | void TasksMemInfo(mem_stat_t *p_mem_stat)
function robinhood_task_t (line 54) | robinhood_task_t *CreateTask()
function FreeTask (line 75) | int FreeTask(robinhood_task_t *p_task)
function AddChildTask (line 88) | void AddChildTask(robinhood_task_t *p_parent_task,
function RemoveChildTask (line 117) | int RemoveChildTask(robinhood_task_t *p_parent_task,
function FlagTaskAsFinished (line 152) | bool FlagTaskAsFinished(robinhood_task_t *p_task)
function TestTaskTermination (line 171) | bool TestTaskTermination(robinhood_task_t *p_task)
FILE: src/include/Memory.h
type mem_stat_t (line 50) | typedef struct mem_stat_t {
FILE: src/include/RW_Lock.h
type rw_lock_t (line 41) | typedef struct _RW_LOCK {
FILE: src/include/chglog_reader.h
type mdt_def_t (line 36) | typedef struct mdt_def_t {
type chglog_reader_config_t (line 42) | typedef struct chglog_reader_config_t {
FILE: src/include/config_parsing.h
type caddr_t (line 33) | typedef caddr_t config_file_t;
type caddr_t (line 34) | typedef caddr_t config_item_t;
type config_item_type (line 36) | typedef enum {
FILE: src/include/db_types.h
type MYSQL (line 36) | typedef MYSQL db_conn_t;
type MYSQL_RES (line 37) | typedef MYSQL_RES *result_handle_t;
type db_config_t (line 40) | typedef struct db_config_t {
type sqlite3 (line 57) | typedef sqlite3 *db_conn_t;
type result_handle_t (line 59) | typedef struct result_handle_t {
type db_config_t (line 66) | typedef struct db_config_t {
FILE: src/include/entry_proc_hash.h
type id_hash_slot (line 25) | struct id_hash_slot {
type id_hash (line 32) | struct id_hash {
type id_hash (line 44) | struct id_hash
type id_hash (line 47) | struct id_hash
type id_hash (line 50) | struct id_hash
function __hash64 (line 56) | static inline uint64_t __hash64(uint64_t k)
function id_hash64 (line 66) | static inline uint64_t id_hash64(const entry_id_t *p_id)
function hash_id (line 75) | static inline unsigned int hash_id(const entry_id_t *p_id, unsigned int ...
function hash_name (line 80) | static inline unsigned int hash_name(const entry_id_t *p_id,
type id_hash_slot (line 87) | struct id_hash_slot
type id_hash (line 87) | struct id_hash
type id_hash_slot (line 94) | struct id_hash_slot
type id_hash (line 94) | struct id_hash
FILE: src/include/entry_processor.h
type entry_proc_op_t (line 56) | struct entry_proc_op_t
type entry_proc_op_t (line 61) | struct entry_proc_op_t
type entry_proc_op_t (line 62) | struct entry_proc_op_t
type entry_proc_op_t (line 68) | struct entry_proc_op_t
type entry_proc_op_t (line 69) | struct entry_proc_op_t
type pipeline_stage_t (line 75) | typedef struct pipeline_stage_t {
type pipeline_descr_t (line 91) | typedef struct pipeline_descr_t {
type entry_proc_op_t (line 118) | struct entry_proc_op_t
type entry_proc_op_t (line 126) | typedef struct entry_proc_op_t {
function EntryProcessor_SetEntryId (line 260) | static void inline EntryProcessor_SetEntryId(entry_proc_op_t *p_op,
FILE: src/include/fs_scan_main.h
type fs_scan_config_t (line 48) | typedef struct fs_scan_config_t {
FILE: src/include/global_config.h
type fs_key_t (line 28) | typedef enum {
type global_config_t (line 38) | typedef struct global_config_t {
FILE: src/include/list.h
type rh_list_head (line 28) | struct rh_list_head {
function rh_list_init (line 34) | static inline void rh_list_init(struct rh_list_head *head)
function rh_list_add (line 41) | static inline void rh_list_add(struct rh_list_head *l,
function rh_list_add_tail (line 51) | static inline void rh_list_add_tail(struct rh_list_head *l,
function rh_list_del (line 61) | static inline void rh_list_del(struct rh_list_head *l)
function rh_list_del_init (line 68) | static inline void rh_list_del_init(struct rh_list_head *l)
function rh_list_splice_tail (line 76) | static inline void rh_list_splice_tail(struct rh_list_head *list1,
function rh_list_cut_head (line 90) | static inline void rh_list_cut_head(struct rh_list_head *list1,
function rh_list_empty (line 105) | static inline int rh_list_empty(const struct rh_list_head *head)
FILE: src/include/list_mgr.h
type recov_status_t (line 107) | typedef enum {
type db_type_u (line 146) | typedef union {
type db_value_t (line 159) | typedef struct db_value_t {
type db_tables_t (line 165) | typedef enum {
type op_idx_e (line 174) | typedef enum {
type lmgr_t (line 184) | typedef struct lmgr_t {
type lmgr_config_t (line 200) | typedef struct lmgr_config_t {
type wagon_t (line 225) | typedef struct wagon {
type lmgr_iterator_t (line 231) | struct lmgr_iterator_t
type lmgr_report_t (line 232) | struct lmgr_report_t
type lmgr_profile_t (line 233) | struct lmgr_profile_t
type lmgr_rm_list_t (line 234) | struct lmgr_rm_list_t
type lmgr_iter_opt_t (line 237) | typedef struct lmgr_iter_opt_t {
type attr_mask_t (line 248) | typedef struct attr_mask {
function attr_mask_is_null (line 264) | static inline bool attr_mask_is_null(const attr_mask_t mask)
function attr_mask_equal (line 270) | static inline bool attr_mask_equal(const attr_mask_t *mask1,
function attr_mask_t (line 278) | static inline attr_mask_t attr_mask_and(const attr_mask_t *mask1,
function attr_mask_t (line 291) | static inline attr_mask_t attr_mask_and_not(const attr_mask_t *mask1,
function attr_mask_t (line 304) | static inline attr_mask_t attr_mask_or_not(const attr_mask_t *mask1,
function attr_mask_t (line 317) | static inline attr_mask_t attr_mask_or(const attr_mask_t *mask1,
function attr2status_index (line 340) | static inline unsigned int attr2status_index(unsigned int index)
function attr2sminfo_index (line 347) | static inline unsigned int attr2sminfo_index(unsigned int index)
type attr_set_t (line 354) | typedef struct attr_set_t {
function ATTR_MASK_INIT (line 367) | static inline void ATTR_MASK_INIT(attr_set_t *p_set)
function attr_mask_test_index (line 390) | static inline bool attr_mask_test_index(const attr_mask_t *p_mask,
function attr_mask_set_index (line 411) | static inline void attr_mask_set_index(attr_mask_t *mask, unsigned int i...
function attr_mask_unset_index (line 431) | static inline void attr_mask_unset_index(attr_mask_t *mask, unsigned int...
type filter_comparator_t (line 490) | typedef enum {
type value_list_t (line 509) | typedef struct value_list {
type filter_value_t (line 514) | typedef union filter_value {
type lmgr_simple_filter_t (line 522) | typedef struct lmgr_simple_filter_t {
type sort_order_t (line 535) | typedef enum {
function obj_type_t (line 564) | static inline obj_type_t db2type(const char *str)
type lmgr_filter_t (line 576) | typedef struct lmgr_filter_t {
type lmgr_sort_type_t (line 590) | typedef struct lmgr_sort_type_t {
type lmgr_init_flags (line 597) | enum lmgr_init_flags {
type lmgr_init_flags (line 604) | enum lmgr_init_flags
type lmgr_rm_list_t (line 746) | struct lmgr_rm_list_t
type lmgr_rm_list_t (line 752) | struct lmgr_rm_list_t
type lmgr_rm_list_t (line 758) | struct lmgr_rm_list_t
type lmgr_iterator_t (line 786) | struct lmgr_iterator_t
type lmgr_recov_stat_t (line 798) | typedef struct _lmgr_recov_stat {
type recov_type_e (line 831) | typedef enum { RT_ALL, RT_TODO, RT_DONE, RT_FAILED } recov_type_e;
type lmgr_iterator_t (line 832) | struct lmgr_iterator_t
type lmgr_iterator_t (line 839) | struct lmgr_iterator_t
type lmgr_iterator_t (line 844) | struct lmgr_iterator_t
type lmgr_iterator_t (line 872) | struct lmgr_iterator_t
type lmgr_iterator_t (line 879) | struct lmgr_iterator_t
type lmgr_iterator_t (line 885) | struct lmgr_iterator_t
type report_type_t (line 922) | typedef enum {
type report_field_descr_t (line 934) | typedef struct report_field_descr_t {
type size_range_t (line 950) | typedef struct size_range__ {
type size_profile_t (line 970) | typedef struct size_profile__ {
type profile_u (line 974) | typedef union {
type profile_field_descr_t (line 980) | typedef struct profile_field_descr_t {
type lmgr_report_t (line 993) | struct lmgr_report_t
type lmgr_report_t (line 1005) | struct lmgr_report_t
type lmgr_report_t (line 1012) | struct lmgr_report_t
type lmgr_profile_t (line 1027) | struct lmgr_profile_t
type lmgr_profile_t (line 1041) | struct lmgr_profile_t
type lmgr_profile_t (line 1048) | struct lmgr_profile_t
type filter_flags (line 1147) | enum filter_flags {
type filter_flags (line 1175) | enum filter_flags
type filter_flags (line 1189) | enum filter_flags
type filter_flags (line 1198) | enum filter_flags
type sm_instance (line 1203) | struct sm_instance
type time_modifier (line 1204) | struct time_modifier
type bool_node_t (line 1219) | struct bool_node_t
type sm_instance (line 1221) | struct sm_instance
type time_modifier (line 1222) | struct time_modifier
type filter_flags (line 1223) | enum filter_flags
type bool_node_t (line 1228) | struct bool_node_t
type filter_flags (line 1287) | enum filter_flags
type sm_instance (line 1293) | struct sm_instance
type time_modifier (line 1294) | struct time_modifier
FILE: src/include/lustre_extended_types.h
type obd_statfs (line 76) | struct obd_statfs {
function rh_is_rename_one_record (line 130) | static inline bool rh_is_rename_one_record(const struct changelog_rec *rec)
type changelog_rec (line 135) | struct changelog_rec
type changelog_rec (line 137) | struct changelog_rec
function rh_is_rename_one_record (line 148) | static inline bool rh_is_rename_one_record(const struct changelog_ext_re...
type changelog_ext_rec (line 153) | struct changelog_ext_rec
function rh_is_rename_one_record (line 165) | static inline bool rh_is_rename_one_record(const struct changelog_rec *rec)
type changelog_rec (line 170) | struct changelog_rec
type time_t (line 196) | typedef time_t cfs_time_t;
type link_ea_header (line 216) | struct link_ea_header {
type link_ea_entry (line 228) | struct link_ea_entry {
function fid_be_to_cpu (line 235) | static inline void fid_be_to_cpu(struct lu_fid *dst, const struct lu_fid...
type fid_seq (line 242) | enum fid_seq {
function fid_seq_is_rsvd (line 265) | static inline int fid_seq_is_rsvd(const __u64 seq)
function fid_seq_is_idif (line 270) | static inline int fid_seq_is_idif(const __u64 seq)
function fid_is_idif (line 275) | static inline int fid_is_idif(const struct lu_fid *fid)
function fid_seq_is_igif (line 280) | static inline int fid_seq_is_igif(const __u64 seq)
function fid_is_igif (line 285) | static inline int fid_is_igif(const struct lu_fid *fid)
function fid_is_sane (line 290) | static inline int fid_is_sane(const struct lu_fid *fid)
type lu_buf (line 298) | struct lu_buf {
type linkea_data (line 303) | struct linkea_data {
FILE: src/include/pipeline_types.h
type changelog_record_t (line 24) | typedef struct changelog_record {
type op_extra_info_t (line 31) | typedef struct op_extra_info_t {
function extra_info_init (line 41) | static void inline extra_info_init(op_extra_info_t *p_extra_info)
type pipeline_flavor_e (line 52) | typedef enum {
type diff_arg_t (line 58) | typedef struct _diff_arg {
FILE: src/include/policy_rules.h
type whitelist_item_t (line 29) | typedef struct whitelist_item_t {
type action_params_t (line 40) | typedef struct rbh_params action_params_t;
type fileset_item_t (line 43) | typedef struct fileset_item_t {
type post_action_e (line 75) | typedef enum {
type action_type_e (line 90) | typedef enum {
type action_func_info (line 97) | struct action_func_info {
type policy_action_t (line 102) | typedef struct policy_action {
type rule_item_t (line 112) | typedef struct rule_item_t {
type policy_rules_t (line 133) | typedef struct policy_rules_t {
function has_default_policy (line 151) | static bool inline has_default_policy(policy_rules_t *list)
type policy_descr_t (line 170) | typedef struct policy_descr_t {
type policies_t (line 199) | typedef struct policies_t {
type policies_t (line 214) | struct policies_t
function has_deletion_policy (line 224) | static inline bool has_deletion_policy(void)
type policy_match_t (line 234) | typedef enum {
type time_modifier_t (line 242) | typedef struct time_modifier {
type sm_instance (line 317) | struct sm_instance
type sm_instance (line 339) | struct sm_instance
type sm_instance (line 343) | struct sm_instance
FILE: src/include/policy_run.h
type trigger_type_t (line 32) | typedef enum {
type policy_target_t (line 39) | typedef enum {
type trigger_value_type_t (line 59) | typedef enum {
type threshold_u (line 67) | typedef union {
type trigger_item_t (line 73) | typedef struct trigger_item_t {
type match_source_t (line 141) | typedef enum {
type policy_run_config_t (line 155) | typedef struct policy_run_config_t {
type counters_t (line 233) | typedef struct counters_t {
function counters_add (line 241) | static inline void counters_add(counters_t *dst, const counters_t *src)
function counter_is_set (line 250) | static inline bool counter_is_set(const counters_t *c)
function counter_reached_limit (line 259) | static inline bool counter_reached_limit(const counters_t *c,
function counter_not_reached (line 269) | static inline bool counter_not_reached(const counters_t *c,
type action_summary_t (line 278) | typedef struct __action_summary {
type trigger_status_t (line 286) | typedef enum {
type trigger_info_t (line 299) | typedef struct trigger_status__ {
type policy_info_t (line 315) | typedef struct policy_info_t {
type sched_status_e (line 354) | typedef enum {
type action_scheduler_t (line 396) | typedef struct action_scheduler {
type policy_run_config_list_t (line 409) | typedef struct policy_run_config_list_t {
type target_u (line 420) | typedef union {
type policy_opt_t (line 425) | typedef struct policy_opt_t {
FILE: src/include/queue.h
type entry_queue_t (line 27) | typedef struct entry_queue_t {
FILE: src/include/rbh_boolexpr.h
type compare_direction_t (line 31) | typedef enum {
type compare_criteria_t (line 43) | typedef enum {
type sm_instance (line 83) | struct sm_instance
type sm_info_def (line 84) | struct sm_info_def
type sm_instance (line 85) | struct sm_instance
type sm_info_def (line 86) | struct sm_info_def
type sm_instance (line 100) | struct sm_instance
type bool_op_t (line 102) | typedef enum {
type obj_type_t (line 109) | typedef enum {
function obj_type_t (line 140) | static inline obj_type_t str2type(const char *str)
type compare_value_t (line 151) | typedef union {
type compare_flags (line 160) | enum compare_flags {
type compare_triplet_t (line 169) | typedef struct compare_triplet_t {
type node_type_t (line 179) | typedef enum {
type bool_node_t (line 187) | typedef struct bool_node_t {
type compare_flags (line 211) | enum compare_flags
type compare_flags (line 216) | enum compare_flags
type attr_set_t (line 253) | struct attr_set_t
type attr_set_t (line 255) | struct attr_set_t
type sm_instance (line 255) | struct sm_instance
FILE: src/include/rbh_cfg.h
type mod_cfg_funcs_t (line 40) | typedef struct mod_cfg_funcs {
type ctx_cfg_funcs_t (line 61) | typedef struct ctx_cfg_funcs {
type run_flags_t (line 87) | typedef enum run_flags {
FILE: src/include/rbh_cfg_helpers.h
type param_flags_t (line 29) | typedef enum param_flags {
type cfg_param_type (line 151) | typedef enum {
type cfg_param_t (line 165) | typedef struct cfg_param_t {
type sm_instance (line 184) | struct sm_instance
type sm_instance (line 187) | struct sm_instance
type policies_t (line 192) | struct policies_t
type policies_t (line 195) | struct policies_t
FILE: src/include/rbh_logs.h
type log_level (line 30) | typedef enum {
type log_config_t (line 39) | typedef struct log_config__ {
FILE: src/include/rbh_misc.h
type stat (line 149) | struct stat
type stat (line 155) | struct stat
type path_check_return (line 231) | enum path_check_return {
type path_check_return (line 240) | enum path_check_return
function time_t (line 292) | static inline time_t cltime2sec(uint64_t cltime)
function cltime2nsec (line 298) | static inline unsigned int cltime2nsec(uint64_t cltime)
type statfs (line 307) | struct statfs
type statfs (line 311) | struct statfs
type stat (line 318) | struct stat
type stat (line 320) | struct stat
function str2int (line 381) | static inline int str2int(const char *str)
function sem_wait_safe (line 452) | static inline void sem_wait_safe(sem_t *sem)
function sem_post_safe (line 461) | static inline void sem_post_safe(sem_t *sem)
function subst_char (line 488) | static inline void subst_char(char *str, char c1, char c2)
type sm_instance (line 548) | struct sm_instance
type sm_instance (line 575) | struct sm_instance
type sm_instance (line 604) | struct sm_instance
type stat (line 628) | struct stat
FILE: src/include/rbh_modules.h
type rbh_module_operations (line 36) | struct rbh_module_operations {
type rbh_module_t (line 47) | typedef struct rbh_module {
FILE: src/include/rbh_params.h
type rbh_params (line 28) | struct rbh_params {
type rbh_params (line 38) | struct rbh_params
type rbh_params (line 42) | struct rbh_params
type rbh_params (line 45) | struct rbh_params
type rbh_param_flags_e (line 48) | typedef enum {
type rbh_params (line 62) | struct rbh_params
type rbh_params (line 75) | struct rbh_params
type rbh_params (line 76) | struct rbh_params
type rbh_params (line 90) | struct rbh_params
type rbh_params (line 97) | struct rbh_params
type rbh_params (line 97) | struct rbh_params
FILE: src/include/rbh_types.h
type ull_t (line 20) | typedef unsigned long long ull_t;
type stripe_item_t (line 25) | typedef struct stripe_item_t {
type stripe_info_t (line 32) | typedef struct stripe_info_t {
type stripe_items_t (line 41) | typedef struct stripe_items_t {
type stripe_items_t (line 46) | typedef int stripe_items_t;
type stripe_info_t (line 47) | typedef int stripe_info_t;
type db_type_e (line 51) | typedef enum {
type field_info_t (line 75) | typedef struct field_info_t {
type operation_type_e (line 99) | typedef enum operation_type_e {
FILE: src/include/status_manager.h
type sm_instance (line 27) | struct sm_instance
type sm_instance (line 30) | struct sm_instance
type proc_action_e (line 40) | typedef enum {
type sm_instance (line 49) | struct sm_instance
type sm_instance (line 57) | struct sm_instance
type sm_instance (line 75) | struct sm_instance
type proc_action_e (line 83) | typedef proc_action_e (*softrm_filter_func_t)(struct sm_instance *smi,
type recov_status_t (line 99) | typedef recov_status_t (*undelete_func_t)(struct sm_instance *smi,
type sm_instance (line 106) | struct sm_instance
type sm_flags (line 110) | typedef enum {
type sm_info_def_t (line 120) | typedef struct sm_info_def {
type status_manager_t (line 131) | typedef struct status_manager {
type sm_instance_t (line 199) | typedef struct sm_instance {
function is_std_attr (line 241) | static inline bool is_std_attr(unsigned int index)
function is_status (line 246) | static inline bool is_status(unsigned int index)
function is_sm_info (line 252) | static inline bool is_sm_info(unsigned int index)
type _sm_attr_info (line 259) | struct _sm_attr_info {
type _sm_attr_info (line 265) | struct _sm_attr_info
function bit_range (line 341) | static inline uint64_t bit_range(unsigned int offset, unsigned int bits)
function all_status_mask (line 347) | static inline uint32_t all_status_mask(void)
function all_sm_info_mask (line 353) | static inline uint64_t all_sm_info_mask(void)
function smi_status_index (line 367) | static inline unsigned int smi_status_index(const sm_instance_t *smi)
function smi_info_index (line 373) | static inline unsigned int smi_info_index(const sm_instance_t *smi,
function smi_info_bit (line 380) | static inline uint64_t smi_info_bit(const sm_instance_t *smi, unsigned i...
function smi_info_bits (line 386) | static inline uint64_t smi_info_bits(const sm_instance_t *smi)
function attr_mask_t (line 406) | static inline attr_mask_t smi_needed_attrs(const sm_instance_t *smi,
function attr_mask_t (line 423) | static inline attr_mask_t attrs_for_status_mask(uint32_t status_mask,
function smi_manage_deleted (line 442) | static inline bool smi_manage_deleted(sm_instance_t *smi)
function smi_multi_action (line 451) | static inline bool smi_multi_action(sm_instance_t *smi)
function smi_support_action (line 460) | static inline bool smi_support_action(sm_instance_t *smi, const char *name)
function attr_mask_t (line 472) | static inline attr_mask_t sm_softrm_fields(void)
function attr_mask_t (line 491) | static inline attr_mask_t sm_softrm_mask(void)
FILE: src/include/uidgidcache.h
type passwd (line 37) | struct passwd
type group (line 38) | struct group
FILE: src/include/update_params.h
type updt_when (line 35) | enum updt_when {
type updt_param_item_t (line 47) | typedef struct updt_param_item_t {
type updt_params_t (line 56) | typedef struct updt_params_t {
type type_info_t (line 74) | typedef enum { UPDT_PATH, UPDT_MD } type_info_t;
FILE: src/list_mgr/database.h
type db_object_e (line 92) | typedef enum {DBOBJ_TABLE, DBOBJ_TRIGGER, DBOBJ_FUNCTION, DBOBJ_PROC, DB...
type what_trans_e (line 139) | typedef enum { TRANS_NEXT, TRANS_SESSION } what_trans_e;
type tx_level_e (line 140) | typedef enum { TXL_SERIALIZABLE,
FILE: src/list_mgr/listmgr_common.c
function printdbtype (line 31) | void printdbtype(db_conn_t *pconn, GString *str, db_type_e type,
function ListMgr_PrintAttr (line 106) | int ListMgr_PrintAttr(GString *str, db_type_e type,
function ListMgr_PrintAttrPtr (line 167) | int ListMgr_PrintAttrPtr(GString *str, db_type_e type, void *value_ptr,
function parsedbtype (line 177) | int parsedbtype(char *str_in, db_type_e type, db_type_u *value_out)
function separated_list2db (line 236) | static void separated_list2db(const char *list, char *db, int size)
function separated_list2match (line 241) | static void separated_list2match(const char *list, char *db, int size)
function separated_db2list (line 247) | static void separated_db2list(const char *db, char *list, int size)
function separated_db2list_inplace (line 254) | void separated_db2list_inplace(char *list)
function match_table (line 263) | bool match_table(table_enum t, unsigned int attr_index)
function table_enum (line 278) | static inline table_enum field2table(int i)
function init_attrset_masks (line 309) | void init_attrset_masks(const lmgr_config_t *lmgr_config)
function add_source_fields_for_gen (line 399) | void add_source_fields_for_gen(uint32_t *std_mask)
function generate_fields (line 416) | void generate_fields(attr_set_t *p_set)
function ListMgr_GenerateFields (line 473) | int ListMgr_GenerateFields(attr_set_t *p_set, attr_mask_t target_mask)
type function_def_t (line 501) | typedef struct function_def {
function function_def_t (line 514) | static const function_def_t *get_function_by_attr(int attr_index)
function print_func_call (line 525) | static void print_func_call(GString *str, int func_index, const char *pr...
function _check_read_only_fields (line 548) | static bool _check_read_only_fields(const attr_mask_t *mask,
function attrmask2fieldlist (line 573) | int attrmask2fieldlist(GString *str, attr_mask_t attr_mask, table_enum t...
function attrmask2fieldoperation (line 627) | int attrmask2fieldoperation(GString *str, attr_mask_t attr_mask,
function attrmask2fieldcomparison (line 667) | int attrmask2fieldcomparison(GString *str, attr_mask_t attr_mask,
function print_attr_value (line 690) | static void print_attr_value(lmgr_t *p_mgr, GString *str,
function attrset2valuelist (line 726) | int attrset2valuelist(lmgr_t *p_mgr, GString *str, const attr_set_t *p_set,
function attrset2updatelist (line 755) | int attrset2updatelist(lmgr_t *p_mgr, GString *str, const attr_set_t *p_...
function fullpath_attr2db (line 789) | int fullpath_attr2db(const char *attr, char *db)
function fullpath_db2attr (line 807) | void fullpath_db2attr(const char *db, char *attr)
function result2attrset (line 842) | int result2attrset(table_enum table, char **result_tab,
function filter_dir_e (line 1004) | filter_dir_e dir_filter(lmgr_t *p_mgr, GString *filter_str,
function func_filter (line 1067) | int func_filter(lmgr_t *p_mgr, GString *filter_str,
function attr2filter_field (line 1195) | static void attr2filter_field(GString *str, table_enum table,
function find_my_table_idx (line 1239) | static int find_my_table_idx(const lmgr_filter_t *p_filter, int cur_index)
function filter2str (line 1276) | int filter2str(lmgr_t *p_mgr, GString *str, const lmgr_filter_t *p_filter,
function filter_where (line 1535) | int filter_where(lmgr_t *p_mgr, const lmgr_filter_t *p_filter,
function append_from_clause (line 1591) | static inline void append_from_clause(table_enum tab, GString *from,
function filter_from (line 1616) | void filter_from(lmgr_t *p_mgr, const struct field_count *counts,
function entry_id2pk (line 1644) | void entry_id2pk(const entry_id_t *p_id, PK_PARG_T p_pk)
function pk2entry_id (line 1654) | int pk2entry_id(lmgr_t *p_mgr, PK_ARG_T pk, entry_id_t *p_id)
function append_size_range_fields (line 1673) | void append_size_range_fields(GString *str, bool leading_comma,
function _lmgr_begin (line 1684) | int _lmgr_begin(lmgr_t *p_mgr, int behavior)
function _lmgr_rollback (line 1708) | void _lmgr_rollback(lmgr_t *p_mgr, int behavior)
function _lmgr_commit (line 1721) | int _lmgr_commit(lmgr_t *p_mgr, int behavior)
function ListMgr_ForceCommitFlag (line 1744) | void ListMgr_ForceCommitFlag(lmgr_t *p_mgr, bool force_commit)
function ListMgr_GetCommitStatus (line 1753) | bool ListMgr_GetCommitStatus(lmgr_t *p_mgr)
function _lmgr_flush_commit (line 1763) | int _lmgr_flush_commit(lmgr_t *p_mgr, int behavior)
function lmgr_table_count (line 1777) | int lmgr_table_count(db_conn_t *pconn, const char *table, uint64_t *count)
function ListMgr_MergeAttrSets (line 1810) | void ListMgr_MergeAttrSets(attr_set_t *p_target_attrset,
function ListMgr_FreeAttrs (line 1886) | void ListMgr_FreeAttrs(attr_set_t *p_set)
function attr_mask_t (line 1907) | attr_mask_t ListMgr_WhatDiff(const attr_set_t *p_tgt, const attr_set_t *...
function lmgr_range2list (line 1996) | int lmgr_range2list(const char *set, db_type_e type, value_list_t *p_list)
function _lmgr_delayed_retry (line 2072) | int _lmgr_delayed_retry(lmgr_t *lmgr, int errcode, const char *func, int...
function table_mask_compat (line 2132) | static inline bool table_mask_compat(attr_mask_t m1, attr_mask_t m2)
function lmgr_batch_compat (line 2142) | bool lmgr_batch_compat(attr_mask_t m1, attr_mask_t m2)
function parse_entry_id (line 2160) | int parse_entry_id(lmgr_t *p_mgr, const char *str, PK_PARG_T p_pk,
function attr_index_iter (line 2178) | int attr_index_iter(unsigned int init, int *cookie)
function attr_mask_unset_readonly (line 2214) | void attr_mask_unset_readonly(attr_mask_t *mask)
function str2sort_order (line 2219) | int str2sort_order(const char *str)
FILE: src/list_mgr/listmgr_common.h
function assign_union (line 26) | static inline void assign_union(db_type_u *const tgt, db_type_e type,
function union_get_value (line 71) | static inline void union_get_value(void *tgt, db_type_e type,
function diff_union (line 116) | static inline int diff_union(db_type_e type, const void *addr1,
function main_fields (line 232) | static inline bool main_fields(attr_mask_t attr_mask)
function names_fields (line 238) | static inline bool names_fields(attr_mask_t attr_mask)
function annex_fields (line 244) | static inline bool annex_fields(attr_mask_t attr_mask)
function attr_mask_t (line 250) | static inline attr_mask_t gen_fields(attr_mask_t attr_mask)
function stripe_fields (line 256) | static inline bool stripe_fields(attr_mask_t attr_mask)
function readonly_fields (line 262) | static inline bool readonly_fields(attr_mask_t attr_mask)
function dirattr_fields (line 268) | static inline bool dirattr_fields(attr_mask_t attr_mask)
function attr_mask_t (line 274) | static inline attr_mask_t slinkattr_fields(attr_mask_t attr_mask)
function generated_fields (line 280) | static inline bool generated_fields(attr_mask_t attr_mask)
function funcattr_fields (line 286) | static inline bool funcattr_fields(attr_mask_t attr_mask)
function is_acct_field (line 295) | static inline bool is_acct_field(unsigned int attr_index)
function is_acct_pk (line 304) | static inline bool is_acct_pk(unsigned int attr_index)
function is_softrm_field (line 313) | static inline bool is_softrm_field(unsigned int attr_index)
function is_status_field (line 321) | static inline bool is_status_field(unsigned int attr_index)
function is_sm_info_field (line 326) | static inline bool is_sm_info_field(unsigned int attr_index)
function test_field_flag (line 332) | static inline bool test_field_flag(unsigned int attr_index, int flags)
function is_read_only_field (line 341) | static inline bool is_read_only_field(unsigned int attr_index)
function is_stripe_field (line 349) | static inline bool is_stripe_field(unsigned int attr_index)
function is_names_field (line 357) | static inline bool is_names_field(unsigned int attr_index)
function is_main_field (line 363) | static inline bool is_main_field(unsigned int attr_index)
function is_gen_field (line 374) | static inline bool is_gen_field(unsigned int attr_index)
function is_indexed_field (line 379) | static inline bool is_indexed_field(unsigned int attr_index)
function is_annex_field (line 384) | static inline bool is_annex_field(unsigned int attr_index)
function is_funcattr (line 393) | static inline bool is_funcattr(unsigned int attr_index)
function is_dirattr (line 398) | static inline bool is_dirattr(unsigned int attr_index)
function is_slinkattr (line 403) | static inline bool is_slinkattr(unsigned int attr_index)
function is_sepdlist (line 408) | static inline bool is_sepdlist(unsigned int attr_index)
function is_recov_field (line 413) | static inline bool is_recov_field(unsigned int attr_index)
type table_enum (line 430) | typedef enum {
type operation_type (line 464) | typedef enum {
type attrset_op_flag_e (line 486) | typedef enum {
type field_count (line 523) | struct field_count {
type field_count (line 532) | struct field_count
type field_count (line 534) | struct field_count
function nb_field_tables (line 539) | static inline unsigned int nb_field_tables(const struct field_count *cou...
type filter_dir_e (line 547) | typedef enum {
function lmgr_begin (line 575) | static inline int lmgr_begin(lmgr_t *p_mgr)
function lmgr_rollback (line 579) | static inline void lmgr_rollback(lmgr_t *p_mgr)
function lmgr_commit (line 583) | static inline int lmgr_commit(lmgr_t *p_mgr)
function lmgr_flush_commit (line 589) | static inline int lmgr_flush_commit(lmgr_t *p_mgr)
function attr_mask_t (line 609) | static inline attr_mask_t sum_masks(attr_set_t **p_attrs, unsigned int c...
function db_type_e (line 641) | static inline db_type_e field_type(unsigned int index)
function no_filter (line 658) | static inline bool no_filter(const lmgr_filter_t *p_filter)
FILE: src/list_mgr/listmgr_config.c
function lmgr_cfg_set_default (line 35) | static void lmgr_cfg_set_default(void *module_config)
function lmgr_cfg_write_default (line 66) | static void lmgr_cfg_write_default(FILE *output)
function lmgr_cfg_read (line 96) | static int lmgr_cfg_read(config_file_t config, void *module_config,
function lmgr_cfg_reload (line 316) | static int lmgr_cfg_reload(lmgr_config_t *conf)
function lmgr_cfg_set (line 381) | static int lmgr_cfg_set(void *cfg, bool reload)
function lmgr_cfg_write_template (line 392) | static void lmgr_cfg_write_template(FILE *output)
function lmgr_cfg_free (line 443) | static void lmgr_cfg_free(void *cfg)
function lmgr_parallel_batches (line 460) | bool lmgr_parallel_batches(void)
FILE: src/list_mgr/listmgr_filters.c
function lmgr_simple_filter_init (line 27) | int lmgr_simple_filter_init(lmgr_filter_t *p_filter)
function convert_regexp (line 48) | static int convert_regexp(const char *in_string, char *db_string)
function lmgr_simple_filter_dup_buffers (line 80) | static int lmgr_simple_filter_dup_buffers(lmgr_filter_t *p_filter,
function lmgr_simple_filter_free_buffers (line 131) | static void lmgr_simple_filter_free_buffers(lmgr_filter_t *p_filter,
function lmgr_simple_filter_add (line 149) | int lmgr_simple_filter_add(lmgr_filter_t *p_filter, unsigned int attr_in...
function lmgr_filter_check_field (line 192) | int lmgr_filter_check_field(const lmgr_filter_t *p_filter,
function lmgr_simple_filter_add_or_replace (line 208) | int lmgr_simple_filter_add_or_replace(lmgr_filter_t *p_filter,
function lmgr_simple_filter_add_if_not_exist (line 251) | int lmgr_simple_filter_add_if_not_exist(lmgr_filter_t *p_filter,
function lmgr_simple_filter_free (line 275) | int lmgr_simple_filter_free(lmgr_filter_t *p_filter)
function lmgr_simple_filter_add_block (line 301) | int lmgr_simple_filter_add_block(lmgr_filter_t *p_filter,
function is_simple_expr (line 312) | static bool is_simple_expr(bool_node_t *boolexpr, int depth, bool_op_t o...
function allow_null (line 369) | static bool allow_null(unsigned int attr_index,
function cond2sql_ok (line 404) | bool cond2sql_ok(bool_node_t *boolexpr,
function append_simple_expr (line 467) | static int append_simple_expr(bool_node_t *boolexpr, lmgr_filter_t *filter,
function convert_boolexpr_to_simple_filter (line 651) | int convert_boolexpr_to_simple_filter(bool_node_t *boolexpr,
function lmgr_set_filter_expression (line 692) | int lmgr_set_filter_expression(lmgr_filter_t *p_filter,
function lmgr_check_filter_fields (line 705) | int lmgr_check_filter_fields(lmgr_filter_t *p_filter, attr_mask_t attr_m...
FILE: src/list_mgr/listmgr_get.c
function ListMgr_Exists (line 31) | int ListMgr_Exists(lmgr_t *p_mgr, const entry_id_t *p_id)
function listmgr_get_dirattrs (line 84) | int listmgr_get_dirattrs( lmgr_t * p_mgr, PK_ARG_T dir_pk, attr_set_t * ...
function supported_bits_only (line 190) | static void supported_bits_only(attr_mask_t *p_mask)
function clean_std_table_bits (line 209) | static void clean_std_table_bits(attr_mask_t *p_mask)
function listmgr_get_by_pk (line 222) | int listmgr_get_by_pk( lmgr_t * p_mgr, PK_ARG_T pk, attr_set_t * p_info )
function ListMgr_Get (line 447) | int ListMgr_Get( lmgr_t * p_mgr, const entry_id_t * p_id, attr_set_t * p...
function ListMgr_Get_FID_from_Path (line 466) | int ListMgr_Get_FID_from_Path( lmgr_t * p_mgr, const entry_id_t * parent...
FILE: src/list_mgr/listmgr_init.c
type lmgr_init_flags (line 31) | enum lmgr_init_flags
function append_status_sql_type (line 39) | static void append_status_sql_type(GString *str, const sm_instance_t *smi)
function append_status_def (line 53) | static void append_status_def(const sm_instance_t *smi, GString *str,
function append_sql_type (line 64) | static void append_sql_type(GString *str, db_type_e type, unsigned int s...
function append_field (line 122) | static void append_field(db_conn_t *pconn, GString *str, bool is_first,
function init_default_field_values (line 145) | static void init_default_field_values(void)
function db_type_u (line 181) | static const db_type_u *default_field_value(int attr_index)
function field_size (line 218) | static int field_size(int i)
function append_field_def (line 231) | static void append_field_def(db_conn_t *pconn, int i, GString *str,
function _check_field_name (line 262) | static int _check_field_name(const char *name, int *curr_field_index,
function check_field_name (line 287) | static int check_field_name(const char *name, int *curr_field_index,
function drop_chars (line 297) | static void drop_chars(char *str, int start_off, int end_off)
function drop_parenthesis_for (line 309) | static inline void drop_parenthesis_for(char *str, const char *pattern)
function type_cmp (line 323) | static int type_cmp(const char *db_type, const char *expected)
function time_t (line 350) | static time_t estimated_time(db_conn_t *pconn, const char *table,
function convert_field_type (line 373) | static int convert_field_type(db_conn_t *pconn, const char *table,
function check_field_default (line 404) | static int check_field_default(int attr_index, const char *val)
function check_field_type (line 454) | static int check_field_type(int attr_index, const char *val)
function change_field_type (line 486) | static int change_field_type(db_conn_t *pconn, table_enum table,
function change_field_default (line 541) | static int change_field_default(db_conn_t *pconn, table_enum table,
function change_field_name (line 603) | static int change_field_name(db_conn_t *pconn, const char *table,
function change_id_field (line 644) | static int change_id_field(db_conn_t *pconn, const char *table,
function insert_field (line 674) | static int insert_field(db_conn_t *pconn, const char *table, int def_index,
function drop_field (line 733) | static int drop_field(db_conn_t *pconn, const char *table, const char *f...
function is_next_expected (line 780) | static bool is_next_expected(table_enum table, const char *db_field_name,
type name_compat (line 807) | struct name_compat {
function check_renamed_db_field (line 818) | static int check_renamed_db_field(db_conn_t *pconn, table_enum table,
type name_compat (line 871) | struct name_compat
function is_next_db_field (line 890) | static bool is_next_db_field(const char *field_def_name,
function swap_db_fields (line 905) | static inline void swap_db_fields(char **field_tab, int i1, int i2)
function check_field_name_type (line 916) | static int check_field_name_type(const char *name, const char *type,
function check_field (line 931) | static int check_field(int i, int *curr_field_index, const char *table,
function has_extra_field (line 950) | static inline int has_extra_field(int curr_field_index, const char *table,
function check_and_fix_def (line 965) | static int check_and_fix_def(db_conn_t *pconn, table_enum table, int def...
function check_and_fix_field (line 1004) | static int check_and_fix_field(db_conn_t *pconn,
function drop_extra_fields (line 1125) | static int drop_extra_fields(db_conn_t *pconn, int curr_field_index,
function append_size_range_val (line 1162) | static void append_size_range_val(GString *request, bool leading_comma,
function append_size_range_op (line 1186) | static void append_size_range_op(GString *request, bool leading_comma,
function check_table_vars (line 1275) | static int check_table_vars(db_conn_t *pconn, bool *affects_trig)
function run_create_table (line 1301) | static int run_create_table(db_conn_t *pconn, const char *table_name,
function run_create_index (line 1321) | static int run_create_index(db_conn_t *pconn, const char *table_name,
function append_engine (line 1340) | static void append_engine(GString *request)
function create_table_vars (line 1351) | static int create_table_vars(db_conn_t *pconn, bool *affects_trig)
type name_compat (line 1363) | struct name_compat
function check_table_main (line 1382) | static int check_table_main(db_conn_t *pconn, bool *affects_trig)
function create_table_main (line 1430) | static int create_table_main(db_conn_t *pconn, bool *affects_trig)
function check_table_dnames (line 1472) | static int check_table_dnames(db_conn_t *pconn, bool *affects_trig)
function create_table_dnames (line 1508) | static int create_table_dnames(db_conn_t *pconn, bool *affects_trig)
function check_table_annex (line 1551) | static int check_table_annex(db_conn_t *pconn, bool *affects_trig)
function create_table_annex (line 1594) | static int create_table_annex(db_conn_t *pconn, bool *affects_trig)
function check_table_stripe_info (line 1637) | static int check_table_stripe_info(db_conn_t *pconn, bool *affects_trig)
function create_table_stripe_info (line 1701) | static int create_table_stripe_info(db_conn_t *pconn, bool *affects_trig)
function check_table_stripe_items (line 1718) | static int check_table_stripe_items(db_conn_t *pconn, bool *affects_trig)
function create_table_stripe_items (line 1756) | static int create_table_stripe_items(db_conn_t *pconn, bool *affects_trig)
function disable_acct (line 1786) | static void disable_acct(void)
function acct_drop_or_warn (line 1794) | static int acct_drop_or_warn(db_conn_t *pconn, bool *affects_trig)
function check_table_acct (line 1824) | static int check_table_acct(db_conn_t *pconn, bool *affects_trig)
function populate_acct_table (line 1919) | static int populate_acct_table(db_conn_t *pconn)
function create_table_acct (line 1982) | static int create_table_acct(db_conn_t *pconn, bool *affects_trig)
function check_table_softrm (line 2047) | static int check_table_softrm(db_conn_t *pconn, bool *affects_trig)
function create_table_softrm (line 2110) | static int create_table_softrm(db_conn_t *pconn, bool *affects_trig)
function check_functions_version (line 2158) | static int check_functions_version(db_conn_t *conn)
function set_functions_version (line 2193) | static int set_functions_version(db_conn_t *conn)
function check_triggers_version (line 2205) | static int check_triggers_version(db_conn_t *pconn, bool *affects_trig)
function set_triggers_version (line 2245) | static int set_triggers_version(db_conn_t *pconn, bool *affects_trig)
function check_trig_acct_insert (line 2257) | static int check_trig_acct_insert(db_conn_t *pconn, bool *affects_trig)
function check_trig_acct_delete (line 2287) | static int check_trig_acct_delete(db_conn_t *pconn, bool *affects_trig)
function check_trig_acct_update (line 2316) | static int check_trig_acct_update(db_conn_t *pconn, bool *affects_trig)
function create_trig_acct_insert (line 2345) | static int create_trig_acct_insert(db_conn_t *pconn, bool *affects_trig)
function create_trig_acct_delete (line 2402) | static int create_trig_acct_delete(db_conn_t *pconn, bool *affects_trig)
function create_trig_acct_update (line 2449) | static int create_trig_acct_update(db_conn_t *pconn, bool *affects_trig)
function check_func_szrange (line 2578) | static int check_func_szrange(db_conn_t *pconn, bool *affects_trig)
function create_func_szrange (line 2586) | static int create_func_szrange(db_conn_t *pconn, bool *affects_trig)
function check_func_onepath (line 2613) | static int check_func_onepath(db_conn_t *pconn, bool *affects_trig)
function create_func_onepath (line 2621) | static int create_func_onepath(db_conn_t *pconn, bool *affects_trig)
function check_func_thispath (line 2674) | static int check_func_thispath(db_conn_t *pconn, bool *affects_trig)
function create_func_thispath (line 2679) | static int create_func_thispath(db_conn_t *pconn, bool *affects_trig)
type dbobj_descr_t (line 2738) | typedef struct dbobj_descr {
function ListMgr_Init (line 2784) | int ListMgr_Init(enum lmgr_init_flags flags)
function ListMgr_InitAccess (line 2883) | int ListMgr_InitAccess(lmgr_t *p_mgr)
function ListMgr_CloseAccess (line 2916) | int ListMgr_CloseAccess(lmgr_t *p_mgr)
FILE: src/list_mgr/listmgr_insert.c
function no_name_warning (line 28) | static void no_name_warning(const PK_PARG_T pk, const attr_set_t *p_attrs,
function entry_filter (line 54) | static bool entry_filter(table_enum table, bool update,
function run_batch_insert (line 91) | static int run_batch_insert(lmgr_t *p_mgr,
function listmgr_batch_insert_no_tx (line 162) | int listmgr_batch_insert_no_tx(lmgr_t * p_mgr, entry_id_t **p_ids,
function ListMgr_Insert (line 260) | int ListMgr_Insert(lmgr_t *p_mgr, entry_id_t *p_id, attr_set_t *p_info,
function ListMgr_BatchInsert (line 308) | int ListMgr_BatchInsert(lmgr_t * p_mgr, entry_id_t ** p_ids,
FILE: src/list_mgr/listmgr_internal.h
type DEF_PK (line 47) | typedef DEF_PK(pktype);
type DEF_PK (line 67) | typedef DEF_PK(pktype);
type lmgr_iterator_t (line 90) | typedef struct lmgr_iterator_t {
function buf2hex (line 105) | static inline int buf2hex(char *out, size_t out_sz, const unsigned char ...
FILE: src/list_mgr/listmgr_iterators.c
function append_dirattr_select (line 35) | static int append_dirattr_select(GString *str, unsigned int dirattr_index,
function append_dir_req (line 62) | static void append_dir_req(GString *from, GString *where,
function check_sort (line 140) | static inline void check_sort(const lmgr_sort_type_t *p_sort_type,
function do_sort (line 173) | static inline bool do_sort(table_enum t_sort, unsigned int sort_dirattr)
function select_all_request (line 178) | static int select_all_request(lmgr_t *p_mgr, GString *req,
type lmgr_iterator_t (line 200) | struct lmgr_iterator_t
type field_count (line 211) | struct field_count
function ListMgr_GetNext (line 380) | int ListMgr_GetNext(struct lmgr_iterator_t *p_iter, entry_id_t *p_id,
function ListMgr_CloseIterator (line 440) | void ListMgr_CloseIterator(struct lmgr_iterator_t *p_iter)
FILE: src/list_mgr/listmgr_ns.c
function append_parent_cond (line 37) | static int append_parent_cond(lmgr_t *p_mgr, GString *str, const wagon_t...
function ListMgr_GetChild (line 77) | int ListMgr_GetChild(lmgr_t *p_mgr, const lmgr_filter_t *p_filter,
FILE: src/list_mgr/listmgr_recov.c
function expected_recov_status (line 45) | static int expected_recov_status(lmgr_t *p_mgr, lmgr_recov_stat_t *p_stats)
function ListMgr_RecovStatus (line 135) | int ListMgr_RecovStatus(lmgr_t *p_mgr, lmgr_recov_stat_t *p_stats)
function ListMgr_RecovInit (line 194) | int ListMgr_RecovInit(lmgr_t *p_mgr, const lmgr_filter_t *p_filter,
function ListMgr_RecovReset (line 374) | int ListMgr_RecovReset(lmgr_t *p_mgr)
type lmgr_iterator_t (line 387) | struct lmgr_iterator_t
type lmgr_iterator_t (line 440) | struct lmgr_iterator_t
function ListMgr_RecovGetNext (line 482) | int ListMgr_RecovGetNext(struct lmgr_iterator_t *p_iter,
function ListMgr_RecovComplete (line 519) | int ListMgr_RecovComplete(lmgr_t *p_mgr, lmgr_recov_stat_t *p_stats)
function ListMgr_RecovSetState (line 545) | int ListMgr_RecovSetState(lmgr_t *p_mgr, const entry_id_t *p_id,
FILE: src/list_mgr/listmgr_remove.c
function clean_names (line 32) | static int clean_names(lmgr_t *p_mgr, const lmgr_filter_t *p_filter,
function append_table_join (line 52) | static inline void append_table_join(GString *fields, GString *tables, G...
function listmgr_remove_single (line 72) | static int listmgr_remove_single(lmgr_t *p_mgr, PK_ARG_T pk, table_enum ...
function listmgr_remove_no_tx (line 111) | int listmgr_remove_no_tx(lmgr_t *p_mgr, const entry_id_t *p_id,
function ListMgr_Remove (line 183) | int ListMgr_Remove(lmgr_t *p_mgr, const entry_id_t *p_id,
function listmgr_softrm_all (line 223) | static int listmgr_softrm_all(lmgr_t *p_mgr, time_t rm_time)
function listmgr_rm_all (line 249) | static int listmgr_rm_all(lmgr_t * p_mgr)
function set_fullpath (line 280) | static void set_fullpath(lmgr_t *p_mgr, attr_set_t *attrs)
function listmgr_softrm_single (line 323) | static int listmgr_softrm_single(lmgr_t *p_mgr, const entry_id_t *p_id,
function create_tmp_table_rm (line 370) | static int create_tmp_table_rm(lmgr_t *p_mgr, const lmgr_filter_t *p_fil...
function listmgr_mass_remove_no_tx (line 478) | static int listmgr_mass_remove_no_tx(lmgr_t *p_mgr, const lmgr_filter_t ...
function listmgr_mass_remove (line 707) | static int listmgr_mass_remove(lmgr_t *p_mgr, const lmgr_filter_t *p_fil...
function ListMgr_MassRemove (line 742) | int ListMgr_MassRemove(lmgr_t * p_mgr, const lmgr_filter_t * p_filter,
function ListMgr_MassSoftRemove (line 749) | int ListMgr_MassSoftRemove(lmgr_t *p_mgr, const lmgr_filter_t *p_filter,
function ListMgr_SoftRemove (line 764) | int ListMgr_SoftRemove(lmgr_t *p_mgr, const entry_id_t *p_id,
type lmgr_rm_list_t (line 838) | typedef struct lmgr_rm_list_t
type lmgr_rm_list_t (line 846) | struct lmgr_rm_list_t
function ListMgr_GetNextRmEntry (line 942) | int ListMgr_GetNextRmEntry(struct lmgr_rm_list_t *p_iter,
function ListMgr_CloseRmList (line 978) | void ListMgr_CloseRmList(struct lmgr_rm_list_t *p_iter)
function ListMgr_GetRmEntry (line 987) | int ListMgr_GetRmEntry(lmgr_t * p_mgr,
function ListMgr_SoftRemove_Discard (line 1049) | int ListMgr_SoftRemove_Discard(lmgr_t * p_mgr, const entry_id_t * p_id)
FILE: src/list_mgr/listmgr_reports.c
type result (line 30) | struct result {
type lmgr_report_t (line 35) | typedef struct lmgr_report_t {
function field_flag (line 60) | static inline int field_flag(unsigned int index)
function append_filter_cond (line 70) | static inline void append_filter_cond(GString *str, lmgr_t *p_mgr,
function listmgr_fieldfilter (line 88) | static void listmgr_fieldfilter(const lmgr_report_t *p_report, lmgr_t *p...
function coma_if_needed (line 109) | static inline void coma_if_needed(GString *str)
function append_sort_order (line 115) | static inline void append_sort_order(GString *order_by, const char *name,
function listmgr_optimizedstat (line 127) | static void listmgr_optimizedstat(lmgr_report_t *p_report, lmgr_t *p_mgr,
function full_acct (line 255) | static bool full_acct(const report_field_descr_t *report_desc_array,
type lmgr_report_t (line 284) | struct lmgr_report_t
type field_count (line 303) | struct field_count
type result (line 333) | struct result
type result (line 335) | struct result
function ListMgr_GetNextReportItem (line 646) | int ListMgr_GetNextReportItem(struct lmgr_report_t *p_iter,
function ListMgr_CloseReport (line 721) | void ListMgr_CloseReport(struct lmgr_report_t *p_iter)
function ListMgr_EntryCount (line 732) | int ListMgr_EntryCount(lmgr_t *p_mgr, uint64_t *count)
FILE: src/list_mgr/listmgr_stripe.c
function update_stripe_info (line 36) | int update_stripe_info(lmgr_t *p_mgr, PK_ARG_T pk, int validator,
function insert_stripe_info (line 59) | int insert_stripe_info(lmgr_t *p_mgr, PK_ARG_T pk,
function batch_insert_stripe_info (line 83) | int batch_insert_stripe_info(lmgr_t *p_mgr, pktype *pklist, int *validat...
function get_stripe_info (line 196) | int get_stripe_info(lmgr_t *p_mgr, PK_ARG_T pk, stripe_info_t *p_stripe_...
function free_stripe_items (line 321) | void free_stripe_items(stripe_items_t *p_stripe_items)
function dup_stripe_items (line 330) | int dup_stripe_items(stripe_items_t *p_stripe_out,
function ListMgr_CheckStripe (line 354) | int ListMgr_CheckStripe(lmgr_t *p_mgr, const entry_id_t *p_id, int valid...
FILE: src/list_mgr/listmgr_tags.c
function ListMgr_CreateTag (line 32) | int ListMgr_CreateTag(lmgr_t * p_mgr, const char *tag_name,
function ListMgr_DestroyTag (line 116) | int ListMgr_DestroyTag(lmgr_t * p_mgr, const char *tag_name)
function ListMgr_TagEntry (line 127) | int ListMgr_TagEntry(lmgr_t * p_mgr, const char *tag_name, const entry_i...
type lmgr_iterator_t (line 162) | struct lmgr_iterator_t
type lmgr_iterator_t (line 168) | struct lmgr_iterator_t
FILE: src/list_mgr/listmgr_update.c
function ListMgr_Update (line 30) | int ListMgr_Update(lmgr_t *p_mgr, const entry_id_t *p_id,
function ListMgr_Replace (line 159) | int ListMgr_Replace(lmgr_t *p_mgr, entry_id_t *old_id, attr_set_t *old_a...
FILE: src/list_mgr/listmgr_vars.c
function lmgr_get_var (line 28) | int lmgr_get_var(db_conn_t *pconn, const char *varname, char *value,
function lmgr_set_var (line 75) | int lmgr_set_var(db_conn_t *pconn, const char *varname, const char *value)
function ListMgr_GetVar (line 111) | int ListMgr_GetVar(lmgr_t *p_mgr, const char *varname, char *value,
function ListMgr_SetVar (line 127) | int ListMgr_SetVar(lmgr_t *p_mgr, const char *varname, const char *value)
FILE: src/list_mgr/mysql_wrapper.c
function mysql_error_convert (line 33) | static int mysql_error_convert(int err, bool verb)
function db_is_retryable (line 104) | bool db_is_retryable(int db_err)
function db_connect (line 116) | int db_connect(db_conn_t *conn)
function db_close_conn (line 183) | int db_close_conn(db_conn_t *conn)
function _db_exec_sql (line 204) | static int _db_exec_sql(db_conn_t *conn, const char *query,
function db_exec_sql_quiet (line 251) | int db_exec_sql_quiet(db_conn_t *conn, const char *query,
function db_exec_sql (line 257) | int db_exec_sql(db_conn_t *conn, const char *query, result_handle_t *p_r...
function db_result_free (line 263) | int db_result_free(db_conn_t *conn, result_handle_t *p_result)
function db_next_record (line 271) | int db_next_record(db_conn_t *conn, result_handle_t *p_result,
function db_result_nb_records (line 302) | int db_result_nb_records(db_conn_t *conn, result_handle_t *p_result)
function db_list_table_info (line 307) | int db_list_table_info(db_conn_t *conn, const char *table,
function db_last_id (line 363) | unsigned long long db_last_id(db_conn_t *conn)
function db_escape_string (line 369) | int db_escape_string(db_conn_t *conn, char *str_out, size_t out_size,
function db_drop_component (line 384) | int db_drop_component(db_conn_t *conn, db_object_e obj_type, const char ...
function db_check_component (line 430) | int db_check_component(db_conn_t *conn, db_object_e obj_type, const char...
function db_create_trigger (line 516) | int db_create_trigger(db_conn_t *conn, const char *name, const char *event,
function db_transaction_level (line 553) | int db_transaction_level(db_conn_t *conn, what_trans_e what_tx,
FILE: src/list_mgr/sqlite_wrapper.c
function sqlite_error_convert (line 25) | static int sqlite_error_convert(int err)
function db_is_busy_err (line 42) | static int db_is_busy_err(int rc)
function set_cache_size (line 48) | static int set_cache_size(sqlite3 *conn)
function db_connect (line 64) | int db_connect(db_conn_t *conn)
function db_exec_sql (line 106) | int db_exec_sql(db_conn_t *conn, const char *query, result_handle_t *p_r...
function db_exec_sql_quiet (line 163) | int db_exec_sql_quiet(db_conn_t *conn, const char *query,
function db_next_record (line 170) | int db_next_record(db_conn_t *conn,
function db_result_free (line 193) | int db_result_free(db_conn_t *conn, result_handle_t *p_result)
function db_result_nb_records (line 203) | int db_result_nb_records(db_conn_t *conn, result_handle_t *p_result)
function db_close_conn (line 208) | int db_close_conn(db_conn_t *conn)
function db_list_table_fields (line 215) | int db_list_table_fields(db_conn_t *conn, const char *table,
function db_last_id (line 268) | unsigned long long db_last_id(db_conn_t *conn)
function db_escape_string (line 274) | void db_escape_string(db_conn_t *conn, char *str_out, size_t out_size,
FILE: src/modules/alerter.c
type alert_status_t (line 31) | typedef enum {
type alerter_info_e (line 55) | enum alerter_info_e {
function alerter_executor (line 71) | static int alerter_executor(struct sm_instance *smi,
function alerter_alert (line 126) | static int alerter_alert(const entry_id_t *p_entry_id, attr_set_t *p_attrs,
function status_manager_t (line 193) | status_manager_t *mod_get_status_manager(void)
function action_func_t (line 198) | action_func_t mod_get_action(const char *action_name)
FILE: src/modules/backup.c
type backup_config_t (line 63) | typedef struct backup_config_t {
function backup_cfg_set_default (line 88) | static void backup_cfg_set_default(void *module_config)
function backup_cfg_write_default (line 107) | static void backup_cfg_write_default(FILE *output)
function backup_cfg_read (line 126) | static int backup_cfg_read(config_file_t config, void *module_config,
function backup_cfg_write_template (line 199) | static void backup_cfg_write_template(FILE *output)
function backup_cfg_free (line 225) | static void backup_cfg_free(void *cfg)
function backup_cfg_set (line 231) | static int backup_cfg_set(void *cfg, bool reload)
type backup_info_e (line 284) | enum backup_info_e {
function status_equal (line 302) | static bool status_equal(struct sm_instance *smi, const attr_set_t *attrs,
function is_shell_special (line 314) | static inline bool is_shell_special(char c)
function clean_bad_chars (line 331) | static void clean_bad_chars(char *path)
function backup_init (line 350) | static int backup_init(struct sm_instance *smi, run_flags_t flags)
type what_for_e (line 376) | typedef enum {
function entry2backend_path (line 393) | static void entry2backend_path(sm_instance_t *smi,
function entry_is_archiving (line 529) | static int entry_is_archiving(const char *backend_path)
function transfer_cleanup (line 550) | static int transfer_cleanup(const char *backend_path)
function move_orphan (line 566) | static int move_orphan(const char *path)
function check_running_copy (line 609) | static int check_running_copy(const char *bkpath)
function bk_lstat (line 641) | static int bk_lstat(const char *bkpath, struct stat *bkmd,
function set_backup_status (line 678) | static inline int set_backup_status(sm_instance_t *smi, attr_set_t *pattrs,
function set_backend_path (line 688) | static inline int set_backend_path(sm_instance_t *smi, attr_set_t *pattrs,
function set_last_archive (line 705) | static inline int set_last_archive(sm_instance_t *smi, attr_set_t *pattrs,
function entry_fs_path (line 712) | static int entry_fs_path(const entry_id_t *p_id, const attr_set_t *p_attrs,
function backup_ignore (line 732) | static bool backup_ignore(const entry_id_t *p_id, const attr_set_t *attrs)
function backup_status (line 822) | static int backup_status(struct sm_instance *smi,
function proc_action_e (line 1025) | static proc_action_e backup_softrm_filter(struct sm_instance *smi,
function backup_ignore_2attrs (line 1062) | static bool backup_ignore_2attrs(const entry_id_t *id,
function backup_cl_cb (line 1082) | static int backup_cl_cb(struct sm_instance *smi, const CL_REC_TYPE *logrec,
type target_e (line 1154) | typedef enum { TO_FS, TO_BACKEND } target_e;
function get_orig_dir_md (line 1160) | static int get_orig_dir_md(const char *target_dir, struct stat *st,
function mkdir_recurse_clone_attrs (line 1201) | static int mkdir_recurse_clone_attrs(const char *full_path, mode_t defau...
function create_parent (line 1338) | static int create_parent(const char *child_path, target_e target,
function create_parent_in_fs (line 1368) | static inline int create_parent_in_fs(const char *child_path,
function create_parent_in_backend (line 1375) | static int create_parent_in_backend(const char *child_path)
function copy_action_precheck (line 1381) | static int copy_action_precheck(sm_instance_t *smi, const entry_id_t *p_id,
function backup_symlink (line 1460) | static int backup_symlink(sm_instance_t *smi, attr_set_t *p_attrs,
type attr_save (line 1504) | struct attr_save {
function path_replace (line 1513) | static void path_replace(struct attr_save *save, attr_set_t *p_attrs,
function path_restore (line 1530) | static void path_restore(struct attr_save *save, attr_set_t *p_attrs)
function wrap_file_copy (line 1542) | static int wrap_file_copy(sm_instance_t *smi,
function backup_check_action_name (line 1705) | static bool backup_check_action_name(const char *name)
function copy_executor (line 1719) | static int copy_executor(sm_instance_t *smi, const policy_action_t *action,
function remove_executor (line 1762) | static int remove_executor(sm_instance_t *smi, const policy_action_t *ac...
function release_executor (line 1806) | static int release_executor(sm_instance_t *smi, const policy_action_t *a...
function backup_common_executor (line 1843) | static int backup_common_executor(sm_instance_t *smi, const char *implem...
function backup_rebind (line 1877) | static int backup_rebind(sm_instance_t *smi, const char *fs_path,
function recov_status_t (line 2001) | static recov_status_t recov_dir(const char *backend_path, const char *fs...
function recov_status_t (line 2025) | static recov_status_t recov_symlink(const char *backend_path,
type stat (line 2072) | struct stat
type utimbuf (line 2074) | struct utimbuf
type stat (line 2075) | struct stat
type attr_save (line 2168) | struct attr_save
function recov_status_t (line 2258) | static recov_status_t backup_recover(struct sm_instance *smi,
function rbh_shook_recov_file (line 2634) | static int rbh_shook_recov_file(const entry_id_t *p_entry_id, attr_set_t...
function rbh_shook_release (line 2682) | static int rbh_shook_release(const entry_id_t *p_entry_id, attr_set_t *p...
function rbh_shook_release_lhsmify (line 2704) | static int rbh_shook_release_lhsmify(const entry_id_t *p_entry_id,
function rbh_shook_lhsmify (line 2726) | static int rbh_shook_lhsmify(const entry_id_t *p_entry_id,
function status_manager_t (line 2805) | status_manager_t *mod_get_status_manager(void)
function action_func_t (line 2810) | action_func_t mod_get_action(const char *action_name)
FILE: src/modules/backup.h
type file_status_t (line 18) | typedef enum {
FILE: src/modules/basic.c
function basic_sm_action_cb (line 31) | static int basic_sm_action_cb(struct sm_instance *smi, const char *imple...
function status_manager_t (line 56) | status_manager_t *mod_get_status_manager(void)
FILE: src/modules/checker.c
type check_status_t (line 43) | typedef enum {
type check_info_e (line 67) | enum check_info_e {
function check_executor (line 87) | static int check_executor(struct sm_instance *smi,
function status_manager_t (line 170) | status_manager_t *mod_get_status_manager(void)
function action_func_t (line 175) | action_func_t mod_get_action(const char *action_name)
FILE: src/modules/common_actions.c
function common_unlink (line 35) | static int common_unlink(const entry_id_t *p_entry_id, attr_set_t *p_attrs,
function common_rmdir (line 78) | static int common_rmdir(const entry_id_t *p_entry_id, attr_set_t *p_attrs,
function common_log (line 100) | static int common_log(const entry_id_t *p_entry_id, attr_set_t *p_attrs,
function common_copy (line 122) | static int common_copy(const entry_id_t *p_entry_id, attr_set_t *p_attrs,
function common_sendfile (line 149) | static int common_sendfile(const entry_id_t *p_entry_id, attr_set_t *p_a...
function common_gzip (line 176) | static int common_gzip(const entry_id_t *p_entry_id, attr_set_t *p_attrs,
function common_move (line 206) | static int common_move(const entry_id_t *p_entry_id, attr_set_t *p_attrs,
function action_func_t (line 261) | action_func_t mod_get_action(const char *action_name)
FILE: src/modules/common_sched.c
type sched_mpr_config_t (line 22) | typedef struct sched_mpr_config {
type sched_mpr_state (line 28) | struct sched_mpr_state {
function sched_mpr_init (line 34) | static int sched_mpr_init(void *config, void **p_sched_data)
function sched_mpr_reset (line 50) | static int sched_mpr_reset(void *sched_data)
function sched_mpr_schedule (line 61) | static int sched_mpr_schedule(void *sched_data, const entry_id_t *id,
function sched_mpr_cfg_free (line 107) | static void sched_mpr_cfg_free(void *cfg)
function sched_mpr_cfg_set_default (line 112) | static void sched_mpr_cfg_set_default(void *module_config)
function sched_mpr_cfg_write_default (line 119) | static void sched_mpr_cfg_write_default(int indent, FILE *output)
function sched_mpr_cfg_write_template (line 127) | static void sched_mpr_cfg_write_template(int indent, FILE *output)
function sched_mpr_cfg_read_from_block (line 138) | static int sched_mpr_cfg_read_from_block(config_item_t parent, void *cfg,
function sched_mpr_cfg_update (line 170) | static int sched_mpr_cfg_update(void *sched_data, void *cfg)
function action_scheduler_t (line 205) | action_scheduler_t *mod_get_scheduler(const char *sched_name)
FILE: src/modules/lhsm.c
type lhsm_config_t (line 47) | typedef struct lhsm_config_t {
type rbh_params (line 60) | struct rbh_params
function get_archive_id (line 66) | static int get_archive_id(const action_params_t *params)
function init_action_global_info (line 87) | static int init_action_global_info(void)
function lhsm_init (line 111) | static int lhsm_init(struct sm_instance *smi, run_flags_t flags)
function lhsm_action (line 117) | static int lhsm_action(enum hsm_user_action action, const entry_id_t *p_id,
function lhsm_release (line 212) | static int lhsm_release(const entry_id_t *p_entry_id, attr_set_t *p_attrs,
function lhsm_archive (line 221) | static int lhsm_archive(const entry_id_t *p_entry_id, attr_set_t *p_attrs,
function lhsm_remove (line 230) | static int lhsm_remove(const entry_id_t *p_entry_id, attr_set_t *p_attrs,
type hsm_status_t (line 240) | typedef enum {
type lhsm_info_e (line 270) | enum lhsm_info_e {
function cfg_has_uuid (line 303) | static bool cfg_has_uuid(const lhsm_config_t *cfg)
function get_uuid (line 311) | static int get_uuid(const entry_id_t *id, char *uuid)
function set_uuid_info (line 353) | static void set_uuid_info(struct sm_instance *smi, const entry_id_t *id,
function lhsm_get_status (line 372) | static int lhsm_get_status(const char *path, hsm_status_t *p_status,
function set_lhsm_status (line 455) | static inline int set_lhsm_status(struct sm_instance *smi, attr_set_t *a...
function lhsm_status (line 462) | static int lhsm_status(struct sm_instance *smi,
function status_equal (line 517) | static bool status_equal(struct sm_instance *smi, const attr_set_t *attrs,
function lhsm_check_action_name (line 524) | static bool lhsm_check_action_name(const char *name)
function lhsm_action_callback (line 534) | static int lhsm_action_callback(struct sm_instance *smi,
function lhsm_cl_cb (line 573) | static int lhsm_cl_cb(struct sm_instance *smi, const CL_REC_TYPE *logrec,
function proc_action_e (line 718) | static proc_action_e lhsm_softrm_filter(struct sm_instance *smi,
function lhsm_rebind (line 741) | static int lhsm_rebind(const entry_id_t *old_id, const entry_id_t *new_id,
function recov_status_t (line 801) | static recov_status_t lhsm_undelete(struct sm_instance *smi,
function lhsm_cfg_set_default (line 919) | static void lhsm_cfg_set_default(void *module_config)
function lhsm_cfg_write_default (line 945) | static void lhsm_cfg_write_default(FILE *output)
function lhsm_cfg_read (line 957) | static int lhsm_cfg_read(config_file_t config, void *module_config,
function lhsm_cfg_write_template (line 1019) | static void lhsm_cfg_write_template(FILE *output)
function lhsm_cfg_free (line 1039) | static void lhsm_cfg_free(void *cfg)
function lhsm_cfg_set (line 1045) | static int lhsm_cfg_set(void *cfg, bool reload)
function status_manager_t (line 1126) | status_manager_t *mod_get_status_manager(void)
function action_func_t (line 1131) | action_func_t mod_get_action(const char *action_name)
FILE: src/modules/mod_internal.c
type copy_params_t (line 32) | struct copy_params_t {
function file_clone_attrs (line 44) | static int file_clone_attrs(const char *tgt, const struct stat *st)
function copy_flags_e (line 62) | copy_flags_e cp_params2flags(const action_params_t *params)
type copy_info (line 79) | struct copy_info {
function flush_data (line 87) | static int flush_data(int srcfd, int dstfd, copy_flags_e flags)
function compress_src (line 98) | static inline bool compress_src(copy_flags_e flags)
function uncompress_src (line 103) | static inline bool uncompress_src(copy_flags_e flags)
function builtin_copy_standard (line 108) | static int builtin_copy_standard(const struct copy_info *cp_nfo,
function builtin_copy_sendfile (line 233) | static int builtin_copy_sendfile(const struct copy_info *cp_nfo,
function builtin_copy (line 267) | int builtin_copy(const char *src, const char *dst, int dst_oflags,
function cb_collect_stdout (line 333) | static int cb_collect_stdout(void *arg, char *line, size_t size, int str...
function run_command (line 368) | static int run_command(const char *name, char **cmd_in,
function action_helper (line 404) | int action_helper(const policy_action_t *action, const char *name,
function mod_get_version (line 447) | int mod_get_version(void)
FILE: src/modules/mod_internal.h
type copy_flags_e (line 27) | typedef enum {
function set_status_attr (line 43) | static inline int set_status_attr(const sm_instance_t *smi,
function set_bool_info (line 77) | static inline int set_bool_info(const sm_instance_t *smi, attr_set_t *pa...
function set_uint_info (line 97) | static inline int set_uint_info(const sm_instance_t *smi, attr_set_t *pa...
type sm_instance (line 119) | struct sm_instance
FILE: src/modules/modeguard.c
type modeguard_config_t (line 44) | typedef struct modeguard_config_t {
type modeguard_status_t (line 56) | typedef enum {
function set_modeguard_status (line 80) | static int set_modeguard_status(sm_instance_t *smi, attr_set_t *pattrs,
function modeguard_status (line 92) | static int modeguard_status(struct sm_instance *smi,
function modeguard_enforce_mode (line 122) | static int modeguard_enforce_mode(const entry_id_t *p_entry_id,
function modeguard_cl_cb (line 169) | static int modeguard_cl_cb(struct sm_instance *smi, const CL_REC_TYPE *l...
function parse_param_octal (line 185) | static int parse_param_octal(const char *str, const char *param_name,
function modeguard_cfg_write_template (line 201) | static void modeguard_cfg_write_template(FILE *output)
function modeguard_cfg_free (line 215) | static void modeguard_cfg_free(void *cfg)
function modeguard_cfg_set_default (line 220) | static void modeguard_cfg_set_default(void *module_config)
function modeguard_cfg_set (line 228) | static int modeguard_cfg_set(void *cfg, bool reload)
function modeguard_cfg_write_default (line 236) | static void modeguard_cfg_write_default(FILE *output)
function modeguard_cfg_read (line 244) | static int modeguard_cfg_read(config_file_t config, void *module_config,
function status_manager_t (line 325) | status_manager_t *mod_get_status_manager(void)
function action_func_t (line 330) | action_func_t mod_get_action(const char *action_name)
FILE: src/modules/sched_ratelimit.c
type sched_tbf_config_t (line 40) | typedef struct sched_tbf_config {
type sched_tbf_state (line 48) | struct sched_tbf_state {
function getclock (line 61) | static int getclock(struct timespec *clk)
function sched_tbf_init (line 72) | static int sched_tbf_init(void *config, void **p_sched_data)
function sched_tbf_reset (line 105) | static int sched_tbf_reset(void *sched_data)
function timediff (line 124) | static long timediff(const struct timespec *start, const struct timespec...
function sched_tbf_schedule (line 135) | static int sched_tbf_schedule(void *sched_data, const entry_id_t *id,
function sched_tbf_cfg_free (line 216) | static void sched_tbf_cfg_free(void *cfg)
function sched_tbf_cfg_set_default (line 221) | static void sched_tbf_cfg_set_default(void *module_config)
function sched_tbf_cfg_write_default (line 230) | static void sched_tbf_cfg_write_default(int indent, FILE *output)
function sched_tbf_cfg_write_template (line 241) | static void sched_tbf_cfg_write_template(int indent, FILE *output)
function sched_tbf_cfg_read_from_block (line 256) | static int sched_tbf_cfg_read_from_block(config_item_t parent, void *cfg,
function sched_tbf_cfg_update (line 288) | static int sched_tbf_cfg_update(void *sched_data, void *cfg)
FILE: src/modules/shook.c
function file_status_t (line 25) | static file_status_t shook2rbh_status(shook_state st)
function rbh_shook_status (line 51) | int rbh_shook_status(const char *path, file_status_t *p_status)
function rbh_shook_recov_by_id (line 78) | int rbh_shook_recov_by_id(const entry_id_t *p_id, file_status_t *p_status)
FILE: src/modules/test_sched.c
type sched_sleep_config_t (line 27) | typedef struct sched_sleep_config {
type sched_sleep_state (line 31) | struct sched_sleep_state {
function sched_sleep_init (line 35) | static int sched_sleep_init(void *config, void **p_sched_data)
function sched_sleep_reset (line 52) | static int sched_sleep_reset(void *sched_data)
function sched_sleep_schedule (line 57) | static int sched_sleep_schedule(void *sched_data, const entry_id_t *id,
function sched_sleep_cfg_free (line 80) | static void sched_sleep_cfg_free(void *cfg)
function sched_sleep_cfg_set_default (line 85) | static void sched_sleep_cfg_set_default(void *module_config)
function sched_sleep_cfg_write_default (line 92) | static void sched_sleep_cfg_write_default(int indent, FILE *output)
function sched_sleep_cfg_write_template (line 99) | static void sched_sleep_cfg_write_template(int indent, FILE *output)
function sched_sleep_cfg_read_from_block (line 108) | static int sched_sleep_cfg_read_from_block(config_item_t parent, void *cfg,
function sched_sleep_cfg_update (line 139) | static int sched_sleep_cfg_update(void *sched_data, void *cfg)
function action_scheduler_t (line 171) | action_scheduler_t *mod_get_scheduler(const char *sched_name)
FILE: src/policies/policy_loader.c
function update_whitelist (line 85) | static void __attribute__ ((__unused__))
function free_whitelist (line 128) | static void free_whitelist(whitelist_item_t *p_items, unsigned int count)
function parse_policy_action (line 152) | int parse_policy_action(const char *name, const char *value,
function _policy_exists (line 240) | static bool _policy_exists(const policies_t *p_pols, const char *name,
function policy_exists (line 256) | bool policy_exists(const char *name, int *index)
function parse_policy_decl (line 261) | static int parse_policy_decl(config_item_t config_blk, const char *block...
function read_policy_definitions (line 505) | static int read_policy_definitions(config_file_t config, policies_t *pol,
function write_default_filesets (line 557) | static int write_default_filesets(FILE *output)
function write_default_policy (line 567) | static int write_default_policy(FILE *output, policy_type_t policy_type)
function write_template_filesets (line 580) | static int write_template_filesets(FILE *output)
function write_migration_policy_template (line 672) | static int write_migration_policy_template(FILE *output)
function write_purge_policy_template (line 757) | static int write_purge_policy_template(FILE *output)
function write_purge_policy_template (line 833) | static int write_purge_policy_template(FILE *output)
function action_params_t (line 916) | action_params_t *get_fileset_policy_params(const fileset_item_t *fileset,
function action_params_t (line 942) | static action_params_t *alloc_policy_params(fileset_item_t *fset,
function read_action_params (line 983) | int read_action_params(config_item_t param_block, action_params_t *params,
function read_fset_action_params (line 1048) | static int read_fset_action_params(config_item_t param_block,
function read_policy_action_params (line 1117) | static int read_policy_action_params(config_item_t param_block,
function match_policy_action_hints (line 1152) | static inline bool match_policy_action_hints(const char *s)
function match_policy_action_params (line 1159) | static inline bool match_policy_action_params(const char *s)
function free_fileclass (line 1165) | static void free_fileclass(fileset_item_t *fset)
function free_filesets (line 1177) | static void free_filesets(policies_t *p_policies)
function fileset_item_t (line 1190) | static fileset_item_t *_get_fileset_by_name_max(const policies_t *p_poli...
function fileset_item_t (line 1202) | fileset_item_t *get_fileset_by_name(const policies_t *p_policies,
function read_fileclass_definition (line 1210) | static int read_fileclass_definition(config_item_t cfg_item,
function read_fileclass_block (line 1260) | static int read_fileclass_block(config_item_t class_cfg,
function add_fileset_slots (line 1412) | static int add_fileset_slots(policies_t *p_policies, int count)
function read_filesets (line 1429) | static int read_filesets(config_file_t config, policies_t *p_policies,
function parse_rule_block (line 1534) | static int parse_rule_block(config_item_t config_item,
function free_policy_action (line 1780) | static void free_policy_action(policy_action_t *action)
function free_rules_list (line 1795) | static void free_rules_list(rule_item_t *items, int count)
function free_policy_rules (line 1809) | static void free_policy_rules(policy_rules_t *rules)
function free_policy_descr (line 1826) | static void free_policy_descr(policy_descr_t *descr)
function read_policy (line 1853) | static int read_policy(config_file_t config, const policies_t *p_policies,
function reload_policies (line 2053) | static int reload_policies(policies_t *p_policies)
function set_policies (line 2091) | static int set_policies(void *cfg, bool reload)
function set_default_policies (line 2106) | static void set_default_policies(void *module_config)
function read_policies (line 2113) | static int read_policies(config_file_t config, void *cfg, char *msg_out)
function write_policy_template (line 2146) | static void write_policy_template(FILE *output)
function write_policy_default (line 2186) | static void write_policy_default(FILE *output)
function policies_cfg_free (line 2197) | static void policies_cfg_free(void *arg)
FILE: src/policies/policy_matching.c
type regexp_flags (line 68) | enum regexp_flags {
function TestRegexp (line 75) | static bool TestRegexp(const char *regexp, const char *to_be_tested,
function TestPathRegexp (line 86) | static bool TestPathRegexp(const char *regexp, const char *to_be_tested,
function size_compare (line 133) | static inline int size_compare(unsigned long long size1,
function int_compare (line 157) | static inline int int_compare(int int1, compare_direction_t comp, int int2)
function policy_match_t (line 179) | static inline policy_match_t bool2policy_match(int rc)
function negate_match (line 184) | static inline int negate_match(int rc)
function filter_comparator_t (line 218) | static filter_comparator_t Policy2FilterComparator(compare_direction_t c...
function compare_direction_t (line 247) | static compare_direction_t oppose_compare(compare_direction_t comp)
function time_t (line 273) | static inline time_t time_modify(time_t orig, const time_modifier_t *p_p...
function compare_generic (line 297) | static int compare_generic(const sm_info_def_t *def,
function set_filter_value_generic (line 458) | static int set_filter_value_generic(const sm_info_def_t *def,
function criteria2filter (line 546) | int criteria2filter(const compare_triplet_t *p_comp,
function cmpflg2regexpflg (line 803) | static enum regexp_flags cmpflg2regexpflg(enum compare_flags flags)
function policy_match_t (line 822) | static policy_match_t match_fileclass_list(const char *regexp,
function policy_match_t (line 851) | static policy_match_t eval_condition(const entry_id_t *p_entry_id,
function policy_match_t (line 1295) | static policy_match_t _entry_matches(const entry_id_t *p_entry_id,
function policy_match_t (line 1358) | policy_match_t entry_matches(const entry_id_t *p_entry_id,
function policy_match_t (line 1368) | static policy_match_t _is_whitelisted(const policy_descr_t *policy,
function policy_match_t (line 1477) | policy_match_t is_whitelisted(const policy_descr_t *policy,
function class_is_whitelisted (line 1486) | bool class_is_whitelisted(const policy_descr_t *policy, const char *clas...
function match_classes (line 1505) | int match_classes(const entry_id_t *id, attr_set_t *p_attrs_new,
function rule_item_t (line 1578) | rule_item_t *policy_case(const policy_descr_t *policy,
function rule_item_t (line 1674) | rule_item_t *class_policy_case(const policy_descr_t *policy,
function policy_match_t (line 1726) | policy_match_t policy_match_all(const policy_descr_t *policy,
function policy_match_t (line 1932) | policy_match_t match_scope(const policy_descr_t *pol, const entry_id_t *id,
function add_matching_scopes_mask (line 1962) | void add_matching_scopes_mask(const entry_id_t *id, const attr_set_t *at...
FILE: src/policies/policy_run.c
type queue_item_t (line 48) | typedef struct queue_item__ {
function queue_item_t (line 57) | static queue_item_t *entry2queue_item(entry_id_t *p_entry_id,
function free_queue_item (line 77) | static void free_queue_item(queue_item_t *item)
type subst_args_t (line 83) | typedef struct subst_args {
function subst_one_param (line 92) | static int subst_one_param(const char *key, const char *val, void *udata)
function set_addl_params (line 116) | static void set_addl_params(const char *addl_params[], unsigned int size,
type entry_context_t (line 149) | typedef struct entry_context {
function build_action_params (line 175) | static int build_action_params(entry_context_t *ectx)
function policy_action (line 246) | static int policy_action(entry_context_t *ectx, match_source_t check_met...
function get_sort_attr (line 372) | static inline int get_sort_attr(policy_info_t *p, const attr_set_t *p_at...
function set_max_time_attrs (line 403) | static inline void set_max_time_attrs(policy_info_t *p, attr_set_t *p_at...
function heuristic_end_of_list (line 512) | static bool heuristic_end_of_list(policy_info_t *policy, time_t last_time)
function ack_count (line 562) | static inline unsigned int ack_count(const unsigned int *status_tab)
function skipped_count (line 576) | static inline unsigned int skipped_count(const unsigned int *status_tab)
function error_count (line 594) | static inline unsigned int error_count(const unsigned int *status_tab)
function queue_stats2counters (line 609) | static void queue_stats2counters(const unsigned long long *feedback_before,
function check_limit (line 665) | static bool check_limit(policy_info_t *policy,
function adaptive_check_delay_us (line 709) | static unsigned long adaptive_check_delay_us(time_t policy_start,
function check_queue_limit (line 759) | static bool check_queue_limit(policy_info_t *pol,
function count_valid_rules (line 831) | static int count_valid_rules(policy_info_t *policy, const policy_rules_t...
function set_rule_filters (line 861) | static void set_rule_filters(policy_info_t *policy,
function set_ignore_filters (line 967) | static void set_ignore_filters(policy_info_t *policy, lmgr_filter_t *fil...
function filter_comparator_t (line 1013) | static filter_comparator_t policy_order_to_listmgr_comp(sort_order_t order)
function set_optim_filter (line 1028) | static void set_optim_filter(policy_info_t *policy, lmgr_filter_t *filter)
function report_progress (line 1065) | static void report_progress(policy_info_t *policy,
function wait_queue_empty (line 1111) | static int wait_queue_empty(policy_info_t *policy,
function attr_mask_t (line 1177) | static attr_mask_t db_attr_mask(policy_info_t *policy,
function attr_mask_t (line 1252) | static attr_mask_t updt_attr_mask(const policy_info_t *policy)
function entry2tgt_amount (line 1282) | static int entry2tgt_amount(const policy_param_t *p_param,
function check_scan_done (line 1341) | static int check_scan_done(const policy_info_t *pol, lmgr_t *lmgr)
function set_target_filter (line 1372) | static int set_target_filter(const policy_info_t *pol,
function init_pass_stats (line 1481) | static void init_pass_stats(policy_info_t *pol, counters_t *pushed_ctr,
function update_pass_stats (line 1501) | static void update_pass_stats(policy_info_t *pol,
type it_type_e (line 1524) | typedef enum { IT_LIST, IT_RMD } it_type_e;
type policy_iter (line 1526) | struct policy_iter {
function iter_next (line 1534) | static inline int iter_next(struct policy_iter *it, entry_id_t *p_id,
function iter_close (line 1546) | static inline void iter_close(struct policy_iter *it)
function iter_open (line 1564) | static inline int iter_open(lmgr_t *lmgr,
type pass_status_e (line 1589) | typedef enum {
function pass_status_e (line 1604) | static pass_status_e fill_workers_queue(policy_info_t *pol,
function single_file_run (line 1801) | static int single_file_run(policy_info_t *pol, lmgr_t *lmgr,
function execute_prepost_run_command (line 1856) | static int execute_prepost_run_command(const policy_info_t *policy,
function add_scope_filter (line 1907) | static void add_scope_filter(policy_info_t *pol, lmgr_filter_t *filter)
function run_policy (line 1932) | int run_policy(policy_info_t *p_pol_info, const policy_param_t *p_param,
function invalidate_entry (line 2128) | static inline int invalidate_entry(const policy_info_t *pol, lmgr_t *lmgr,
function update_entry (line 2146) | static inline int update_entry(lmgr_t *lmgr, const entry_id_t *p_entry_id,
function need_update (line 2176) | static inline bool need_update(match_source_t check_method, uint32_t std...
function check_posix_id (line 2211) | static bool check_posix_id(const entry_id_t *id, struct stat *md,
function check_entry (line 2240) | static int check_entry(const policy_info_t *policy, lmgr_t *lmgr,
function action_status_t (line 2395) | static action_status_t check_entry_times(policy_info_t *pol, lmgr_t *lmgr,
function log_action_success (line 2459) | static void log_action_success(const policy_info_t *pol,
function free_entry_context (line 2548) | static void free_entry_context(entry_context_t *ectx)
function action_fini (line 2564) | static void action_fini(int action_rc, lmgr_t *lmgr,
function refresh_and_match_entry (line 2663) | static int refresh_and_match_entry(lmgr_t *lmgr, entry_context_t *ectx,
function init_sched_thread_conn (line 2827) | static int init_sched_thread_conn(void)
function run_sched_cb (line 2856) | static void run_sched_cb(void *udata, sched_status_e st)
function update_first_eligible (line 2949) | static void update_first_eligible(policy_info_t *pol, int val)
function process_entry (line 2962) | static void process_entry(policy_info_t *pol, lmgr_t *lmgr,
function start_worker_threads (line 3079) | int start_worker_threads(policy_info_t *pol)
function check_current_actions (line 3111) | int check_current_actions(policy_info_t *pol, lmgr_t *lmgr,
FILE: src/policies/policy_run_cfg.c
function polrun_set_default (line 35) | static int polrun_set_default(const policy_descr_t *pol,
function policy_run_cfg_set_default (line 91) | static void policy_run_cfg_set_default(void *module_config)
function policy_run_cfg_write_default (line 119) | static void policy_run_cfg_write_default(FILE *output)
function policy_run_cfg_write_template (line 149) | static void policy_run_cfg_write_template(FILE *output)
type trig_target_def (line 283) | struct trig_target_def {
type trig_target_def (line 291) | struct trig_target_def
type trig_target_def (line 307) | struct trig_target_def
type trig_target_def (line 309) | struct trig_target_def
function set_trigger_target (line 319) | static int set_trigger_target(trigger_item_t *p_trigger,
function read_threshold_params (line 366) | static int read_threshold_params(config_item_t config_blk,
function parse_trigger_block (line 450) | static int parse_trigger_block(config_item_t config_blk, const char *blo...
function skip_spaces (line 573) | static void skip_spaces(const char **c)
function load_sched_cfg (line 585) | static int load_sched_cfg(const ctx_cfg_funcs_t *funcs,
function parse_schedulers (line 623) | static int parse_schedulers(config_item_t cfg_block, char *param_value,
function match_source_t (line 672) | static match_source_t str2match_source(const char *tmp)
function polrun_read_config (line 697) | static int polrun_read_config(config_file_t config, const char *policy_n...
function polrun_read_triggers (line 917) | static int polrun_read_triggers(config_file_t config, const char *policy...
function policy_run_cfg_read (line 964) | static int policy_run_cfg_read(config_file_t config, void *module_config,
function no_trig_updt_msg (line 992) | static inline void no_trig_updt_msg(const char *what)
function update_triggers (line 998) | static void update_triggers(trigger_item_t *trigger_tgt,
function free_triggers (line 1187) | static void free_triggers(trigger_item_t *p_triggers, unsigned int count)
function no_param_updt_msg (line 1211) | static inline void no_param_updt_msg(const char *blk, const char *name)
function polrun_reload (line 1222) | static int polrun_reload(const char *blkname, policy_run_config_t *cfg_tgt,
function policy_run_cfg_reload (line 1337) | static int policy_run_cfg_reload(policy_run_config_list_t *conf)
function policy_run_cfg_set (line 1376) | static int policy_run_cfg_set(void *config, bool reload)
function policy_run_cfg_free (line 1387) | static void policy_run_cfg_free(void *config)
FILE: src/policies/policy_sched.c
type sched_q_item (line 22) | struct sched_q_item {
type sched_res_t (line 32) | struct sched_res_t
type sched_q_item (line 35) | struct sched_q_item
function sched_init (line 104) | int sched_init(struct sched_res_t *sched_res,
function sched_reinit (line 143) | int sched_reinit(struct sched_res_t *sched_res)
function sched_push (line 168) | int sched_push(struct sched_res_t *sched_res,
type sched_res_t (line 209) | struct sched_res_t
function sched_flush (line 214) | int sched_flush(struct sched_res_t *sched_res)
FILE: src/policies/policy_sched.h
type sched_res_t (line 22) | struct sched_res_t {
type sched_res_t (line 40) | struct sched_res_t
type sched_res_t (line 45) | struct sched_res_t
type sched_res_t (line 50) | struct sched_res_t
type sched_res_t (line 57) | struct sched_res_t
FILE: src/policies/policy_triggers.c
function update_trigger_status (line 48) | static void update_trigger_status(policy_info_t *pol, int i,
function CheckFSDevice (line 63) | static bool CheckFSDevice(policy_info_t *pol)
function FSInfo2Blocs512 (line 91) | static unsigned long long FSInfo2Blocs512(unsigned long long nb_blocks,
function statfs2usage (line 115) | static inline int statfs2usage(const struct statfs *p_statfs,
function check_blocks_thresholds (line 150) | static int check_blocks_thresholds(trigger_item_t *p_trigger,
function check_inode_count (line 274) | static
function check_count_thresholds (line 331) | static int check_count_thresholds(trigger_item_t *p_trigger,
function total_blocks (line 386) | static int total_blocks(unsigned long long *total_user_blocks,
function get_fs_usage (line 425) | static int get_fs_usage(policy_info_t *pol, struct statfs *stfs)
function check_maintenance_mode (line 455) | static bool check_maintenance_mode(policy_info_t *pol, time_modifier_t *...
function check_trigger_type (line 507) | static int check_trigger_type(trigger_item_t *t)
function set_limits (line 526) | static void set_limits(const policy_info_t *pol, const trigger_item_t *t...
type ost_list (line 584) | struct ost_list {
function ost_list_init (line 588) | static inline void ost_list_init(struct ost_list *l)
function ost_list_add (line 594) | static inline int ost_list_add(struct ost_list *l, unsigned int ost_idx)
function ost_list_free (line 605) | static inline void ost_list_free(struct ost_list *l)
function ost_list_is_member (line 613) | static inline bool ost_list_is_member(struct ost_list *l,
function get_ost_max (line 624) | static int get_ost_max(struct statfs *df, trigger_value_type_t tr_type,
function build_user_report_descr (line 702) | static void build_user_report_descr(report_field_descr_t info[],
function build_user_report_filter (line 732) | static int build_user_report_filter(lmgr_filter_t *filter,
function check_statfs_thresholds (line 782) | static int check_statfs_thresholds(trigger_item_t *trig, const char *tgt...
function check_report_thresholds (line 813) | static int check_report_thresholds(trigger_item_t *p_trigger,
type target_iterator_t (line 902) | typedef struct target_iterator_t {
function compute_user_blocks (line 924) | static int compute_user_blocks(trigger_item_t *trig, target_iterator_t *it)
function trig_target_it (line 953) | static int trig_target_it(target_iterator_t *it, policy_info_t *pol,
function trig_target_next (line 1028) | static int trig_target_next(target_iterator_t *it, target_u *tgt,
function trig_target_end (line 1174) | static void trig_target_end(target_iterator_t *it)
function sprint_ctr (line 1199) | static void sprint_ctr(char *str, int size,
function print_ctr (line 1224) | static void print_ctr(int level, const char *tag, const char *header,
function print_done_vs_target (line 1249) | static void print_done_vs_target(char *str, int size, const counters_t *...
function store_policy_run_stats (line 1285) | static void store_policy_run_stats(policy_info_t *pol, time_t start,
function store_policy_start_stats (line 1321) | static void store_policy_start_stats(policy_info_t *pol, time_t start,
function report_policy_run (line 1340) | static void report_policy_run(policy_info_t *pol, policy_param_t *param,
function check_trigger (line 1513) | static int check_trigger(policy_info_t *pol, unsigned trigger_index)
function mk_fake_trigger (line 1615) | static inline void mk_fake_trigger(trigger_item_t *trig, policy_target_t...
function targeted_run (line 1631) | static int targeted_run(policy_info_t *pol, const policy_opt_t *opt)
type targeted_run_arg (line 1761) | struct targeted_run_arg {
type targeted_run_arg (line 1767) | struct targeted_run_arg
type targeted_run_arg (line 1767) | struct targeted_run_arg
function policy_module_update_check_interval (line 1922) | void policy_module_update_check_interval(policy_info_t *policy)
function policy_module_start (line 1951) | int policy_module_start(policy_info_t *policy, /* out */
function policy_module_stop (line 2080) | int policy_module_stop(policy_info_t *policy)
function policy_module_wait (line 2087) | int policy_module_wait(policy_info_t *policy)
function policy_module_dump_stats (line 2117) | void policy_module_dump_stats(policy_info_t *policy)
FILE: src/policies/run_policies.h
type policy_runs_t (line 24) | typedef struct policy_runs_t {
type action_status_t (line 33) | typedef enum {
type action_feedback_t (line 68) | typedef enum {
type policy_param_t (line 84) | typedef struct policy_param_t {
FILE: src/policies/status_manager.c
type _sm_attr_info (line 31) | struct _sm_attr_info
function sm_status_ensure_alloc (line 34) | void sm_status_ensure_alloc(char const ***p_tab)
function sm_status_free (line 42) | void sm_status_free(char const ***p_tab)
function sm_info_ensure_alloc (line 52) | void sm_info_ensure_alloc(void ***p_tab)
function sm_info_free (line 61) | void sm_info_free(void ***p_tab)
function set_sm_info (line 75) | int set_sm_info(const sm_instance_t *smi, attr_set_t *pattrs,
function sm_instance_t (line 124) | sm_instance_t *smi_by_name(const char *smi_name)
function get_smi_attr (line 147) | static int get_smi_attr(const sm_instance_t *smi, const attr_set_t *p_at...
function sm_attr_get (line 200) | int sm_attr_get(const sm_instance_t *smi, const attr_set_t *p_attrs,
function status_manager_t (line 243) | static status_manager_t *load_status_manager(const char *name)
function sm_instance_exists (line 249) | static bool sm_instance_exists(bool is_shared, const char *sm_name,
function attr_mask_t (line 271) | static attr_mask_t actual_mask(sm_instance_t *smi, attr_mask_t mask)
function attr_mask_t (line 298) | attr_mask_t translate_all_status_mask(attr_mask_t mask)
function sm_instance_t (line 323) | sm_instance_t *create_sm_instance(const char *pol_name, const char *sm_n...
function sm_instance_t (line 441) | sm_instance_t *get_sm_instance(unsigned int n)
function run_all_cl_cb (line 487) | int run_all_cl_cb(const CL_REC_TYPE *logrec, const entry_id_t *id,
function proc_action_e (line 535) | proc_action_e match_all_softrm_filters(const entry_id_t *id,
function smi_update_masks (line 559) | void smi_update_masks(void)
function smi_init_all (line 584) | int smi_init_all(run_flags_t flags)
function smi_cfg_free (line 652) | static void smi_cfg_free(void *arg)
function smi_cfg_set_default (line 667) | static void smi_cfg_set_default(void *arg)
function smi_cfg_read (line 681) | static int smi_cfg_read(config_file_t config, void *cfg, char *msg_out)
function smi_cfg_set (line 702) | static int smi_cfg_set(void *cfg, bool reload)
function smi_cfg_write_default (line 721) | static void smi_cfg_write_default(FILE *f)
function smi_cfg_write_template (line 734) | static void smi_cfg_write_template(FILE *f)
FILE: src/robinhood/cmd_helpers.c
function what_2_power (line 49) | static size_t what_2_power(size_t s)
function copy_arrays (line 58) | static void copy_arrays(const wagon_t *src,
function add_id_list (line 74) | static int add_id_list(const wagon_t *list, unsigned int count)
function rbh_scrub_release_list (line 136) | static inline void rbh_scrub_release_list(unsigned int first,
function rbh_scrub (line 155) | int rbh_scrub(lmgr_t *p_mgr, const wagon_t *id_list,
function Path2Id (line 244) | int Path2Id(const char *path, entry_id_t *id)
type __diffattr (line 288) | struct __diffattr {
function parse_diff_mask (line 316) | int parse_diff_mask(const char *arg, attr_mask_t *diff_mask, char *msg)
function parse_status_arg (line 350) | int parse_status_arg(const char *option, char *arg, char **p_st_name,
function check_status_args (line 393) | int check_status_args(const char *status_name, const char *status_value,
type tm (line 448) | struct tm
type tm (line 495) | struct tm
type attr_display_spec (line 752) | struct attr_display_spec {
type attr_display_spec (line 800) | struct attr_display_spec
type attr_display_spec (line 803) | struct attr_display_spec
function rec_len (line 844) | static inline int rec_len(struct attr_display_spec *rec, bool csv)
function attrindex2len (line 865) | unsigned int attrindex2len(unsigned int index, int csv)
function print_attr_list_custom (line 885) | void print_attr_list_custom(int rank_field, unsigned int *attr_list,
function print_attr_values_custom (line 948) | void print_attr_values_custom(int rank, unsigned int *attr_list, int att...
type attr_display_spec (line 986) | struct attr_display_spec
function display_report (line 1012) | void display_report(const report_field_descr_t *descr,
function rbh_init_internals (line 1109) | int rbh_init_internals(void)
function attr_mask_t (line 1135) | attr_mask_t list2mask(unsigned int *attr_list, int attr_count)
function cb_redirect_all (line 1151) | int cb_redirect_all(void *arg, char *line, size_t size, int stream)
function load_single_smi (line 1186) | int load_single_smi(sm_instance_t **smi)
function load_smi (line 1217) | int load_smi(const char *sm_name, sm_instance_t **smi)
FILE: src/robinhood/cmd_helpers.h
function free_wagon (line 56) | static inline void free_wagon(wagon_t *ids, int first, int last)
function print_attr_list (line 130) | static inline void print_attr_list(int rank_field, unsigned int *attr_list,
function print_attr_values (line 138) | static inline void print_attr_values(int rank, unsigned int *attr_list,
FILE: src/robinhood/rbh_daemon.c
type option (line 99) | struct option
type rbh_options (line 199) | typedef struct rbh_options {
function zero_options (line 223) | static inline void zero_options(struct rbh_options *opts)
type rbh_options (line 232) | struct rbh_options
function display_help (line 359) | static inline void display_help(const char *bin_name)
function display_version (line 373) | static inline void display_version(const char *bin_name)
function running_mask2str (line 427) | static void running_mask2str(int mask, uint64_t pol_mask, char *str)
function dump_stats (line 472) | static void dump_stats(lmgr_t *lmgr, const int *module_mask,
type tm (line 528) | struct tm
function terminate_handler (line 550) | static void terminate_handler(int sig)
function reload_handler (line 556) | static void reload_handler(int sig)
function usr_handler (line 561) | static void usr_handler(int sig)
function action2parsing_mask (line 566) | static int action2parsing_mask(int act_mask)
type sigaction (line 585) | struct sigaction
type sigaction (line 586) | struct sigaction
type sigaction (line 587) | struct sigaction
type timespec (line 633) | struct timespec
function do_write_template (line 774) | static inline int do_write_template(const char *file)
function create_pid_file (line 805) | static void create_pid_file(const char *pid_file)
function parse_target_usage (line 833) | static int parse_target_usage(const char *str, double *val)
function rh_read_parameters (line 855) | static int rh_read_parameters(const char *bin, int argc, char **argv,
function policyopt_set_target (line 1200) | static int policyopt_set_target(char *opt_string, policy_opt_t *opt)
type run_item_t (line 1272) | typedef struct run_item {
function add_policy_run (line 1278) | static int add_policy_run(run_item_t **runs, unsigned int *count,
function parse_policy_single_arg (line 1327) | static int parse_policy_single_arg(policy_opt_t *opts, char *arg,
function parse_policy_args (line 1382) | static int parse_policy_args(policy_opt_t *opts, char *args, const char ...
function parse_policy_runs (line 1532) | static int parse_policy_runs(run_item_t **runs, unsigned int *count,
function main (line 1574) | int main(int argc, char **argv)
FILE: src/robinhood/rbh_diff.c
type option (line 60) | struct option
type diff_options (line 98) | typedef struct diff_options {
function zero_options (line 109) | static inline void zero_options(struct diff_options *opts)
type diff_options (line 118) | struct diff_options
function display_help (line 171) | static inline void display_help(const char *bin_name)
function display_version (line 176) | static inline void display_version(const char *bin_name)
function ensure_db_access (line 227) | static inline int ensure_db_access(void)
function dump_stats (line 237) | static void dump_stats(lmgr_t *lmgr)
type tm (line 260) | struct tm
function terminate_handler (line 282) | static void terminate_handler(int sig)
function usr_handler (line 287) | static void usr_handler(int sig)
type sigaction (line 294) | struct sigaction
type sigaction (line 295) | struct sigaction
function main (line 391) | int main(int argc, char **argv)
FILE: src/robinhood/rbh_du.c
type option (line 41) | struct option
type display_mode (line 78) | typedef enum { disp_usage, disp_count, disp_size, disp_details } display...
type display_unit (line 79) | typedef enum { disp_byte, disp_kilo, disp_mega, disp_human } display_unit;
type du_opt (line 82) | struct du_opt {
type stats_du_t (line 120) | typedef struct stats_du_t {
function reset_stats (line 139) | static void reset_stats(stats_du_t *stats)
function print_stats (line 185) | static void print_stats(const char *name, stats_du_t *stats)
function mkfilters (line 223) | static int mkfilters(void)
function display_help (line 348) | static inline void display_help(const char *bin_name)
function display_version (line 353) | static inline void display_version(const char *bin_name)
function retrieve_root_id (line 426) | static int retrieve_root_id(entry_id_t *root_id)
function dircb (line 453) | static int dircb(wagon_t *id_list, attr_set_t *attr_list,
function list_all (line 502) | static int list_all(stats_du_t *stats, bool display_stats)
function list_content (line 566) | static int list_content(char **id_list, int id_count)
function main (line 700) | int main(int argc, char **argv)
FILE: src/robinhood/rbh_find.c
type option (line 51) | struct option
type find_opt (line 118) | struct find_opt
function mkfilters (line 155) | static int mkfilters(bool exclude_dirs)
function display_help (line 553) | static inline void display_help(const char *bin_name)
function display_version (line 558) | static inline void display_version(const char *bin_name)
function type2onechar (line 623) | const char type2onechar(const char *type)
function compare_direction_t (line 667) | static compare_direction_t prefix2comp(char **curr, bool neg)
function set_size_filter (line 682) | static int set_size_filter(char *str, bool neg)
type e_time (line 737) | typedef enum { atime, rh_crtime, mtime, rh_ctime } e_time;
function set_time_filter (line 739) | static int set_time_filter(char *str, unsigned int multiplier,
function print_entry (line 841) | static void print_entry(const wagon_t *id, const attr_set_t *attrs)
function dircb (line 1030) | static int dircb(wagon_t *id_list, attr_set_t *attr_list,
function retrieve_root_id (line 1084) | static int retrieve_root_id(entry_id_t *root_id)
function set_root_attrs (line 1106) | static void set_root_attrs(attr_set_t *root_attrs)
function list_bulk (line 1136) | static int list_bulk(void)
function list_contents (line 1225) | static int list_contents(char **id_list, int id_count)
function main (line 1337) | int main(int argc, char **argv)
FILE: src/robinhood/rbh_find.h
type find_opt (line 21) | struct find_opt {
type find_opt (line 117) | struct find_opt
FILE: src/robinhood/rbh_find_printf.c
type fchunk (line 47) | struct fchunk {
type fchunk (line 118) | struct fchunk
type fchunk (line 169) | struct fchunk
function parse_escaped_int (line 217) | static int parse_escaped_int(const char *str, struct fchunk *chunk, int ...
type fchunk (line 264) | struct fchunk
function printf_date (line 562) | static void printf_date(const struct fchunk *chunk, time_t date)
function printf_entry (line 597) | void printf_entry(GArray *chunks, const wagon_t *id, const attr_set_t *a...
function free_printf_formats (line 840) | void free_printf_formats(GArray *chunks)
function GArray (line 862) | GArray *prepare_printf_format(const char *format)
FILE: src/robinhood/rbh_import.c
type option (line 41) | struct option
function display_help (line 97) | static inline void display_help(const char *bin_name)
function display_version (line 102) | static inline void display_version(const char *bin_name)
function import_helper (line 158) | static int import_helper(const char *backend_path, char *tgt_path, /* i...
function perform_import (line 253) | static int perform_import(const char *src_path, const char *tgt_path,
function terminate_handler (line 381) | static void terminate_handler(int sig)
function main (line 391) | int main(int argc, char **argv)
FILE: src/robinhood/rbh_rebind.c
type option (line 41) | struct option
function display_help (line 111) | static inline void display_help(const char *bin_name)
function display_version (line 116) | static inline void display_version(const char *bin_name)
function read_fid (line 161) | static int read_fid(const char *fid_str, entry_id_t *fid)
function parse_bk_id (line 200) | static int parse_bk_id(attr_set_t *attrs, const char *str, entry_id_t *id,
function rebind_helper (line 229) | static inline int rebind_helper(const char *old_bk_id,
function main (line 296) | int main(int argc, char **argv)
FILE: src/robinhood/rbh_recov.c
type option (line 41) | struct option
function display_help (line 153) | static inline void display_help(const char *bin_name)
function display_version (line 158) | static inline void display_version(const char *bin_name)
function terminate_handler (line 203) | static void terminate_handler(int sig)
function print_recov_stats (line 213) | static void print_recov_stats(bool forecast, const lmgr_recov_stat_t *p_...
function recov_start (line 257) | static int recov_start(void)
function recov_reset (line 328) | static int recov_reset(int force)
function recov_resume (line 369) | static int recov_resume(int retry_errors)
function recov_complete (line 456) | static int recov_complete(void)
function recov_status (line 480) | static int recov_status(void)
function recov_list (line 498) | static int recov_list(recov_type_e state)
function main (line 572) | int main(int argc, char **argv)
FILE: src/robinhood/rbh_report.c
type option (line 102) | struct option
function display_help (line 324) | static inline void display_help(const char *bin_name)
function display_version (line 337) | static inline void display_version(const char *bin_name)
function szrange_val2index (line 395) | static int szrange_val2index(uint64_t val, bool exact)
function parse_size_range (line 422) | static int parse_size_range(const char *str, profile_field_descr_t *p_pr...
function getvar_helper (line 553) | static int getvar_helper(lmgr_t *p_mgr, const char *varname, char *value,
function display_policy_stats (line 575) | static void display_policy_stats(const char *name, int flags)
function read_int64_helper (line 656) | static int64_t read_int64_helper(const char *str)
function str2timeval (line 668) | static void str2timeval(struct timeval *tv, char *str)
function str2rec_info (line 685) | static void str2rec_info(char *str, uint64_t *rec_id, struct timeval *re...
function display_rec_stats (line 711) | static int display_rec_stats(lmgr_t *lmgr, const char *name, const char ...
function display_cl_type_stats (line 760) | static void display_cl_type_stats(lmgr_t *lmgr, int index, int flags)
function display_changelog_stats (line 837) | static int display_changelog_stats(lmgr_t *lmgr, int index, int flags)
function report_activity (line 861) | static void report_activity(int flags)
type type_dump (line 1089) | typedef enum { DUMP_ALL, DUMP_USR, DUMP_GROUP, DUMP_OST,
function append_path_filter (line 1096) | static int append_path_filter(lmgr_filter_t *filter, bool *initialized)
function append_class_filter (line 1179) | static int append_class_filter(lmgr_filter_t *filter, bool *initialized)
function append_project_filter (line 1198) | static int append_project_filter(lmgr_filter_t *filter, bool *initialized)
function mk_global_filters (line 1218) | static int mk_global_filters(lmgr_filter_t *filter, bool do_display,
function TryId2path (line 1257) | static int TryId2path(lmgr_t *p_mgr, const entry_id_t *p_id, char *path)
type stat (line 1303) | struct stat
function dump_entries (line 1337) | static void dump_entries(type_dump type, int int_arg, char *str_arg,
function report_fs_info (line 1556) | static void report_fs_info(int flags)
function report_entry (line 1665) | static int report_entry(const char *entry, int flags)
function set_report_rec_nofilter (line 1723) | static inline void set_report_rec_nofilter(report_field_descr_t *ent,
function report_usergroup_info (line 1735) | static void report_usergroup_info(char *name, int flags)
function report_topdirs (line 1914) | static void report_topdirs(unsigned int count, int flags)
function report_topsize (line 2010) | static void report_topsize(unsigned int count, int flags)
function report_oldest (line 2088) | static void report_oldest(obj_type_t type, unsigned int count, int flags)
function report_topuser (line 2196) | static void report_topuser(unsigned int count, int flags)
function report_deferred_rm (line 2301) | static void report_deferred_rm(int flags)
function report_groupby (line 2379) | static void report_groupby(int attr_index, int flags)
function report_status_info (line 2463) | static void report_status_info(int smi_index, const char *val, int flags)
function maintenance_get (line 2575) | static void maintenance_get(int flags)
function maintenance_set (line 2610) | static void maintenance_set(int flags, time_t when)
function main (line 2646) | int main(int argc, char **argv)
FILE: src/robinhood/rbh_undelete.c
type option (line 40) | struct option
function display_help (line 108) | static inline void display_help(const char *bin_name)
function display_version (line 113) | static inline void display_version(const char *bin_name)
function mk_path_filter (line 163) | static int mk_path_filter(lmgr_filter_t *filter, bool do_display,
function is_id_filter (line 211) | static bool is_id_filter(entry_id_t *id)
function list_rm (line 227) | static int list_rm(void)
function undelete_helper (line 320) | static void undelete_helper(const entry_id_t *id, const attr_set_t *attrs)
function undelete (line 383) | static int undelete(void)
function main (line 457) | int main(int argc, char **argv)
FILE: src/tests/create_nostripe.c
function main (line 21) | int main(int argc, char ** argv)
FILE: src/tests/test_confparam.c
function DisplayLogFn (line 32) | void DisplayLogFn(log_level debug_level, const char *tag, const char *fo...
function ListMgr_PrintAttrPtr (line 49) | int ListMgr_PrintAttrPtr(GString *str, db_type_e type,
function assert_str_equal (line 76) | static inline void assert_str_equal(const char *s1, const char *s2)
function test_braces (line 89) | static void test_braces(const char *cmd, const char* weak_res)
function test_subst_params (line 103) | static void test_subst_params(void)
function test_param_mask (line 418) | static void test_param_mask(void)
function main (line 485) | int main(int argc, char **argv)
FILE: src/tests/test_forcestripe.c
function lum_size (line 22) | static inline int lum_size(struct lov_user_md *p_lum)
function main (line 34) | int main(int argc, char **argv)
FILE: src/tests/test_params.c
function DisplayLogFn (line 17) | void DisplayLogFn(log_level debug_level, const char *tag, const char *fo...
function main (line 30) | int main(int argc, char **argv)
FILE: src/tests/test_parse.c
function main (line 21) | int main(int argc, char **argv)
FILE: src/tests/test_uidgidcache.c
function getpwuid_r (line 43) | int getpwuid_r(uid_t uid, struct passwd *pwd,
function getgrgid_r (line 59) | int getgrgid_r(gid_t gid, struct group *grp,
function DisplayLogFn (line 77) | void DisplayLogFn(log_level debug_level, const char *tag, const char *fo...
function main (line 90) | int main(int argc, char **argv)
FILE: src/tools/gen_lov_objid.c
function display_help (line 45) | static inline void display_help(const char *bin_name)
function main (line 55) | int main( int argc, char **argv )
FILE: src/tools/lhsmtool_cmd.c
type hai_desc (line 108) | struct hai_desc {
type options (line 114) | struct options {
type options (line 132) | struct options
type hsm_copytool_private (line 153) | struct hsm_copytool_private
function ct_now (line 162) | static inline double ct_now(void)
function pid_t (line 170) | static inline pid_t sys_gettid(void)
function usage (line 185) | static void usage(const char *name, int rc)
function ct_parseopts (line 202) | static int ct_parseopts(int argc, char * const *argv)
function ct_path_lustre (line 290) | static int ct_path_lustre(char *buf, int sz, const char *mnt,
function ct_begin_restore (line 297) | static int ct_begin_restore(struct hsm_copyaction_private **phcp,
function ct_begin (line 314) | static int ct_begin(struct hsm_copyaction_private **phcp,
function ct_fini (line 322) | static int ct_fini(struct hsm_copyaction_private **phcp,
function hai_data_expandable (line 358) | static bool hai_data_expandable(const struct hsm_action_item *hai)
function ct_build_cmd (line 370) | static int ct_build_cmd(const enum hsm_copytool_action hsma, gchar **cmd,
type cmd_cb_args (line 427) | struct cmd_cb_args {
function gboolean (line 442) | static gboolean cmd_progress_timer_cb(gpointer ud)
function cmd_termination_cb (line 472) | static void cmd_termination_cb(GPid pid, gint status, gpointer ud)
function GSource (line 499) | static GSource *timer_subscribe(GMainLoop *loop, GSourceFunc func,
function GSource (line 514) | static GSource *term_subscribe(GMainLoop *loop, GPid pid, GChildWatchFun...
function ct_hsm_io_cmd (line 530) | static int ct_hsm_io_cmd(const enum hsm_copytool_action hsma, GMainLoop ...
function handler (line 653) | static void handler(int signal)
function ct_run (line 670) | static int ct_run(void)
function gpointer (line 795) | static gpointer subproc_mgr_main(gpointer data)
function ct_producer_setup (line 845) | static int ct_producer_setup(void)
function ct_load_cfg_file (line 876) | static int ct_load_cfg_file(void)
function ct_setup (line 921) | static int ct_setup(void)
function ct_cleanup (line 960) | static int ct_cleanup(void)
function main (line 976) | int main(int argc, char **argv)
FILE: src/tools/ost_fids_remap.c
function usage (line 37) | static void usage(const char *argv0)
function str2int (line 48) | static int str2int(const char *str)
function main (line 67) | int main(int argc, char ** argv)
FILE: src/tools/read_lovea.c
function print_lov (line 22) | static int print_lov(struct lov_user_md * p_lum)
function usage (line 121) | static void usage(const char * bin)
function main (line 126) | int main(int argc, char ** argv)
FILE: src/tools/set_lovea.c
function hex2bin (line 30) | static ssize_t hex2bin(const char * hex, void * buff)
function set_lov_ea (line 47) | static int set_lov_ea(struct lov_user_md * p_lum, size_t sz_in, const ch...
function main (line 94) | int main(int argc, char ** argv)
FILE: tests/gprof-helper.c
function wooinit (line 36) | void wooinit(void)
type wrapper_t (line 53) | typedef struct wrapper_s
function pthread_create (line 85) | int pthread_create(pthread_t *__restrict thread,
FILE: tests/test_suite/cfg/rbh25.sql
type `ACCT_STAT` (line 25) | CREATE TABLE `ACCT_STAT` (
type `ANNEX_INFO` (line 64) | CREATE TABLE `ANNEX_INFO` (
type `ENTRIES` (line 91) | CREATE TABLE `ENTRIES` (
type `NAMES` (line 185) | CREATE TABLE `NAMES` (
type `SOFT_RM` (line 213) | CREATE TABLE `SOFT_RM` (
type `STRIPE_INFO` (line 241) | CREATE TABLE `STRIPE_INFO` (
type `STRIPE_ITEMS` (line 267) | CREATE TABLE `STRIPE_ITEMS` (
type `VARS` (line 293) | CREATE TABLE `VARS` (
FILE: tests/test_suite/create-random.c
function main (line 57) | int main(int argc, char *argv[])
FILE: web_gui/gui_v3/api/rest.class.php
class API (line 11) | abstract class API
method __construct (line 46) | public function __construct($request) {
method processAPI (line 87) | public function processAPI() {
method _response (line 95) | private function _response($data, $status = 200) {
method _cleanInputs (line 107) | private function _cleanInputs($data) {
method _requestStatus (line 119) | private function _requestStatus($code) {
FILE: web_gui/gui_v3/api/robinhood.php
class MyAPI (line 19) | class MyAPI extends API
method robinhood (line 25) | protected function robinhood() {
method test (line 36) | protected function test() {
method current_auth (line 47) | protected function current_auth() {
method db_info (line 59) | protected function db_info() {
method native (line 75) | protected function native() {
method graph (line 166) | protected function graph() {
method data (line 320) | protected function data() {
FILE: web_gui/gui_v3/common.php
function is_assoc (line 13) | function is_assoc($var)
function startsWith (line 26) | function startsWith($haystack, $needle) {
function endsWith (line 39) | function endsWith($haystack, $needle) {
function formatSizeNumber (line 52) | function formatSizeNumber( $number, $precision=2 )
function get_acct_columns (line 70) | function get_acct_columns($all=false) {
function get_user (line 106) | function get_user()
function check_access (line 124) | function check_access($part)
function build_sql_access (line 150) | function build_sql_access($part)
function check_self_access (line 168) | function check_self_access($part)
function rand_color (line 188) | function rand_color() {
function string_color (line 199) | function string_color($str){
function get_filter_from_list (line 204) | function get_filter_from_list($datalist, $term)
function build_filter (line 227) | function build_filter($args, $filter, $self='$SELF') {
function build_advanced_filter (line 291) | function build_advanced_filter($args, $access = '$SELF', $table, $join =...
function l (line 528) | function l($text)
function getFilePermission (line 546) | function getFilePermission($file) {
function setFormValues (line 558) | function setFormValues() {
function callGraph (line 577) | function callGraph() {
function getDB (line 597) | function getDB($filter)
FILE: web_gui/gui_v3/customjs/newgui.js
function formatBytes (line 73) | function formatBytes(bytes,decimals) {
function formatCount (line 82) | function formatCount(bytes,decimals) {
function getRGB (line 91) | function getRGB(str){
function msg_warning (line 112) | function msg_warning(str){
function msg_danger (line 120) | function msg_danger(str){
function msg_clean (line 129) | function msg_clean() {
function logout (line 178) | function logout() {
function loadDataTable (line 186) | function loadDataTable(item, queryString, taskID) {
function loadDataGraph (line 209) | function loadDataGraph(item, queryString, taskID) {
function GetGraph (line 234) | function GetGraph(item){
function CleanForm (line 346) | function CleanForm() {
FILE: web_gui/gui_v3/js/Chart.bundle.js
function e (line 10) | function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof requi...
function getRgba (line 33) | function getRgba(string) {
function getHsla (line 93) | function getHsla(string) {
function getHwb (line 109) | function getHwb(string) {
function getRgb (line 125) | function getRgb(string) {
function getHsl (line 130) | function getHsl(string) {
function getAlpha (line 135) | function getAlpha(string) {
function hexString (line 149) | function hexString(rgb) {
function rgbString (line 154) | function rgbString(rgba, alpha) {
function rgbaString (line 161) | function rgbaString(rgba, alpha) {
function percentString (line 169) | function percentString(rgba, alpha) {
function percentaString (line 180) | function percentaString(rgba, alpha) {
function hslString (line 187) | function hslString(hsla, alpha) {
function hslaString (line 194) | function hslaString(hsla, alpha) {
function hwbString (line 204) | function hwbString(hwb, alpha) {
function keyword (line 212) | function keyword(rgb) {
function scale (line 217) | function scale(num, min, max) {
function hexDouble (line 221) | function hexDouble(num) {
function rgb2hsl (line 779) | function rgb2hsl(rgb) {
function rgb2hsv (line 814) | function rgb2hsv(rgb) {
function rgb2hwb (line 847) | function rgb2hwb(rgb) {
function rgb2cmyk (line 858) | function rgb2cmyk(rgb) {
function rgb2keyword (line 871) | function rgb2keyword(rgb) {
function rgb2xyz (line 875) | function rgb2xyz(rgb) {
function rgb2lab (line 892) | function rgb2lab(rgb) {
function rgb2lch (line 914) | function rgb2lch(args) {
function hsl2rgb (line 918) | function hsl2rgb(hsl) {
function hsl2hsv (line 956) | function hsl2hsv(hsl) {
function hsl2hwb (line 975) | function hsl2hwb(args) {
function hsl2cmyk (line 979) | function hsl2cmyk(args) {
function hsl2keyword (line 983) | function hsl2keyword(args) {
function hsv2rgb (line 988) | function hsv2rgb(hsv) {
function hsv2hsl (line 1016) | function hsv2hsl(hsv) {
function hsv2hwb (line 1030) | function hsv2hwb(args) {
function hsv2cmyk (line 1034) | function hsv2cmyk(args) {
function hsv2keyword (line 1038) | function hsv2keyword(args) {
function hwb2rgb (line 1043) | function hwb2rgb(hwb) {
function hwb2hsl (line 1078) | function hwb2hsl(args) {
function hwb2hsv (line 1082) | function hwb2hsv(args) {
function hwb2cmyk (line 1086) | function hwb2cmyk(args) {
function hwb2keyword (line 1090) | function hwb2keyword(args) {
function cmyk2rgb (line 1094) | function cmyk2rgb(cmyk) {
function cmyk2hsl (line 1107) | function cmyk2hsl(args) {
function cmyk2hsv (line 1111) | function cmyk2hsv(args) {
function cmyk2hwb (line 1115) | function cmyk2hwb(args) {
function cmyk2keyword (line 1119) | function cmyk2keyword(args) {
function xyz2rgb (line 1124) | function xyz2rgb(xyz) {
function xyz2lab (line 1151) | function xyz2lab(xyz) {
function xyz2lch (line 1172) | function xyz2lch(args) {
function lab2xyz (line 1176) | function lab2xyz(lab) {
function lab2lch (line 1197) | function lab2lch(lab) {
function lab2rgb (line 1212) | function lab2rgb(args) {
function lch2lab (line 1216) | function lch2lab(lch) {
function lch2xyz (line 1228) | function lch2xyz(args) {
function lch2rgb (line 1232) | function lch2rgb(args) {
function keyword2rgb (line 1236) | function keyword2rgb(keyword) {
function keyword2hsl (line 1240) | function keyword2hsl(args) {
function keyword2hsv (line 1244) | function keyword2hsv(args) {
function keyword2hwb (line 1248) | function keyword2hwb(args) {
function keyword2cmyk (line 1252) | function keyword2cmyk(args) {
function keyword2lab (line 1256) | function keyword2lab(args) {
function keyword2xyz (line 1260) | function keyword2xyz(args) {
function hooks (line 1682) | function hooks () {
function setHookCallback (line 1688) | function setHookCallback (callback) {
function isArray (line 1692) | function isArray(input) {
function isObject (line 1696) | function isObject(input) {
function isObjectEmpty (line 1702) | function isObjectEmpty(obj) {
function isUndefined (line 1716) | function isUndefined(input) {
function isNumber (line 1720) | function isNumber(input) {
function isDate (line 1724) | function isDate(input) {
function map (line 1728) | function map(arr, fn) {
function hasOwnProp (line 1736) | function hasOwnProp(a, b) {
function extend (line 1740) | function extend(a, b) {
function createUTC (line 1758) | function createUTC (input, format, locale, strict) {
function defaultParsingFlags (line 1762) | function defaultParsingFlags() {
function getParsingFlags (line 1782) | function getParsingFlags(m) {
function isValid (line 1807) | function isValid(m) {
function createInvalid (line 1841) | function createInvalid (flags) {
function copyConfig (line 1857) | function copyConfig(to, from) {
function Moment (line 1907) | function Moment(config) {
function isMoment (line 1922) | function isMoment (obj) {
function absFloor (line 1926) | function absFloor (number) {
function toInt (line 1935) | function toInt(argumentForCoercion) {
function compareArrays (line 1947) | function compareArrays(array1, array2, dontConvert) {
function warn (line 1961) | function warn(msg) {
function deprecate (line 1968) | function deprecate(msg, fn) {
function deprecateSimple (line 2000) | function deprecateSimple(name, msg) {
function isFunction (line 2013) | function isFunction(input) {
function set (line 2017) | function set (config) {
function mergeConfigs (line 2036) | function mergeConfigs(parentConfig, childConfig) {
function Locale (line 2062) | function Locale(config) {
function calendar (line 2093) | function calendar (key, mom, now) {
function longDateFormat (line 2107) | function longDateFormat (key) {
function invalidDate (line 2124) | function invalidDate () {
function ordinal (line 2131) | function ordinal (number) {
function relativeTime (line 2152) | function relativeTime (number, withoutSuffix, string, isFuture) {
function pastFuture (line 2159) | function pastFuture (diff, output) {
function addUnitAlias (line 2166) | function addUnitAlias (unit, shorthand) {
function normalizeUnits (line 2171) | function normalizeUnits(units) {
function normalizeObjectUnits (line 2175) | function normalizeObjectUnits(inputObject) {
function addUnitPriority (line 2194) | function addUnitPriority(unit, priority) {
function getPrioritizedUnits (line 2198) | function getPrioritizedUnits(unitsObj) {
function zeroFill (line 2209) | function zeroFill(number, targetLength, forceSign) {
function addFormatToken (line 2229) | function addFormatToken (token, padded, ordinal, callback) {
function removeFormattingTokens (line 2251) | function removeFormattingTokens(input) {
function makeFormatFunction (line 2258) | function makeFormatFunction(format) {
function formatMoment (line 2279) | function formatMoment(m, format) {
function expandFormat (line 2290) | function expandFormat(format, locale) {
function addRegexToken (line 2334) | function addRegexToken (token, regex, strictRegex) {
function getParseRegexForToken (line 2340) | function getParseRegexForToken (token, config) {
function unescapeFormat (line 2349) | function unescapeFormat(s) {
function regexEscape (line 2355) | function regexEscape(s) {
function addParseToken (line 2361) | function addParseToken (token, callback) {
function addWeekParseToken (line 2376) | function addWeekParseToken (token, callback) {
function addTimeToArrayFromToken (line 2383) | function addTimeToArrayFromToken(token, input, config) {
function daysInYear (line 2443) | function daysInYear(year) {
function isLeapYear (line 2447) | function isLeapYear(year) {
function getIsLeapYear (line 2461) | function getIsLeapYear () {
function makeGetSet (line 2465) | function makeGetSet (unit, keepTime) {
function get (line 2477) | function get (mom, unit) {
function set$1 (line 2482) | function set$1 (mom, unit, value) {
function stringGet (line 2495) | function stringGet (units) {
function stringSet (line 2504) | function stringSet (units, value) {
function mod (line 2520) | function mod(n, x) {
function daysInMonth (line 2541) | function daysInMonth(year, month) {
function localeMonths (line 2601) | function localeMonths (m, format) {
function localeMonthsShort (line 2611) | function localeMonthsShort (m, format) {
function handleStrictParse (line 2620) | function handleStrictParse(monthName, format, strict) {
function localeMonthsParse (line 2661) | function localeMonthsParse (monthName, format, strict) {
function setMonth (line 2701) | function setMonth (mom, value) {
function getSetMonth (line 2726) | function getSetMonth (value) {
function getDaysInMonth (line 2736) | function getDaysInMonth () {
function monthsShortRegex (line 2741) | function monthsShortRegex (isStrict) {
function monthsRegex (line 2761) | function monthsRegex (isStrict) {
function computeMonthsParse (line 2780) | function computeMonthsParse () {
function createDate (line 2814) | function createDate (y, m, d, h, M, s, ms) {
function createUTCDate (line 2826) | function createUTCDate (y) {
function firstWeekOffset (line 2837) | function firstWeekOffset(year, dow, doy) {
function dayOfYearFromWeeks (line 2847) | function dayOfYearFromWeeks(year, week, weekday, dow, doy) {
function weekOfYear (line 2870) | function weekOfYear(mom, dow, doy) {
function weeksInYear (line 2892) | function weeksInYear(year, dow, doy) {
function localeWeek (line 2928) | function localeWeek (mom) {
function localeFirstDayOfWeek (line 2937) | function localeFirstDayOfWeek () {
function localeFirstDayOfYear (line 2941) | function localeFirstDayOfYear () {
function getSetWeek (line 2947) | function getSetWeek (input) {
function getSetISOWeek (line 2952) | function getSetISOWeek (input) {
function parseWeekday (line 3018) | function parseWeekday(input, locale) {
function parseIsoWeekday (line 3035) | function parseIsoWeekday(input, locale) {
function localeWeekdays (line 3045) | function localeWeekdays (m, format) {
function localeWeekdaysShort (line 3055) | function localeWeekdaysShort (m) {
function localeWeekdaysMin (line 3060) | function localeWeekdaysMin (m) {
function handleStrictParse$1 (line 3064) | function handleStrictParse$1(weekdayName, format, strict) {
function localeWeekdaysParse (line 3128) | function localeWeekdaysParse (weekdayName, format, strict) {
function getSetDayOfWeek (line 3170) | function getSetDayOfWeek (input) {
function getSetLocaleDayOfWeek (line 3183) | function getSetLocaleDayOfWeek (input) {
function getSetISODayOfWeek (line 3191) | function getSetISODayOfWeek (input) {
function weekdaysRegex (line 3209) | function weekdaysRegex (isStrict) {
function weekdaysShortRegex (line 3229) | function weekdaysShortRegex (isStrict) {
function weekdaysMinRegex (line 3249) | function weekdaysMinRegex (isStrict) {
function computeWeekdaysParse (line 3269) | function computeWeekdaysParse () {
function hFormat (line 3312) | function hFormat() {
function kFormat (line 3316) | function kFormat() {
function meridiem (line 3342) | function meridiem (token, lowercase) {
function matchMeridiem (line 3360) | function matchMeridiem (isStrict, locale) {
function localeIsPM (line 3420) | function localeIsPM (input) {
function localeMeridiem (line 3427) | function localeMeridiem (hours, minutes, isLower) {
function normalizeLocale (line 3473) | function normalizeLocale(key) {
function chooseLocale (line 3480) | function chooseLocale(names) {
function loadLocale (line 3504) | function loadLocale(name) {
function getSetGlobalLocale (line 3522) | function getSetGlobalLocale (key, values) {
function defineLocale (line 3541) | function defineLocale (name, config) {
function updateLocale (line 3588) | function updateLocale(name, config) {
function getLocale (line 3617) | function getLocale (key) {
function listLocales (line 3640) | function listLocales() {
function checkOverflow (line 3644) | function checkOverflow (m) {
function defaults (line 3675) | function defaults(a, b, c) {
function currentDateArray (line 3685) | function currentDateArray(config) {
function configFromArray (line 3698) | function configFromArray (config) {
function dayOfYearFromWeekInfo (line 3767) | function dayOfYearFromWeekInfo(config) {
function configFromISO (line 3862) | function configFromISO(config) {
function extractFromRFC2822Strings (line 3917) | function extractFromRFC2822Strings(yearStr, monthStr, dayStr, hourStr, m...
function untruncateYear (line 3933) | function untruncateYear(yearStr) {
function preprocessRFC2822 (line 3943) | function preprocessRFC2822(s) {
function checkWeekday (line 3948) | function checkWeekday(weekdayStr, parsedInput, config) {
function calculateOffset (line 3975) | function calculateOffset(obsOffset, militaryOffset, numOffset) {
function configFromRFC2822 (line 3989) | function configFromRFC2822(config) {
function configFromString (line 4010) | function configFromString(config) {
function configFromStringAndFormat (line 4053) | function configFromStringAndFormat(config) {
function meridiemFixWrap (line 4125) | function meridiemFixWrap (locale, hour, meridiem) {
function configFromStringAndArray (line 4151) | function configFromStringAndArray(config) {
function configFromObject (line 4195) | function configFromObject(config) {
function createFromConfig (line 4208) | function createFromConfig (config) {
function prepareConfig (line 4219) | function prepareConfig (config) {
function configFromInput (line 4252) | function configFromInput(config) {
function createLocalOrUTC (line 4275) | function createLocalOrUTC (input, format, locale, strict, isUTC) {
function createLocal (line 4299) | function createLocal (input, format, locale, strict) {
function pickBy (line 4332) | function pickBy(fn, moments) {
function min (line 4350) | function min () {
function max (line 4356) | function max () {
function isDurationValid (line 4368) | function isDurationValid(m) {
function isValid$1 (line 4390) | function isValid$1() {
function createInvalid$1 (line 4394) | function createInvalid$1() {
function Duration (line 4398) | function Duration (duration) {
function isDuration (line 4435) | function isDuration (obj) {
function absRound (line 4439) | function absRound (number) {
function offset (line 4449) | function offset (token, separator) {
function offsetFromString (line 4480) | function offsetFromString(matcher, string) {
function cloneWithOffset (line 4497) | function cloneWithOffset(input, model) {
function getDateOffset (line 4511) | function getDateOffset (m) {
function getSetOffset (line 4535) | function getSetOffset (input, keepLocalTime, keepMinutes) {
function getSetZone (line 4573) | function getSetZone (input, keepLocalTime) {
function setOffsetToUTC (line 4587) | function setOffsetToUTC (keepLocalTime) {
function setOffsetToLocal (line 4591) | function setOffsetToLocal (keepLocalTime) {
function setOffsetToParsedOffset (line 4603) | function setOffsetToParsedOffset () {
function hasAlignedHourOffset (line 4618) | function hasAlignedHourOffset (input) {
function isDaylightSavingTime (line 4627) | function isDaylightSavingTime () {
function isDaylightSavingTimeShifted (line 4634) | function isDaylightSavingTimeShifted () {
function isLocal (line 4655) | function isLocal () {
function isUtcOffset (line 4659) | function isUtcOffset () {
function isUtc (line 4663) | function isUtc () {
function createDuration (line 4675) | function createDuration (input, key) {
function parseIso (line 4739) | function parseIso (inp, sign) {
function positiveMomentsDifference (line 4748) | function positiveMomentsDifference(base, other) {
function momentsDifference (line 4762) | function momentsDifference(base, other) {
function createAdder (line 4781) | function createAdder(direction, name) {
function addSubtract (line 4798) | function addSubtract (mom, duration, isAdding, updateOffset) {
function getCalendarFormat (line 4827) | function getCalendarFormat(myMoment, now) {
function calendar$1 (line 4837) | function calendar$1 (time, formats) {
function clone (line 4849) | function clone () {
function isAfter (line 4853) | function isAfter (input, units) {
function isBefore (line 4866) | function isBefore (input, units) {
function isBetween (line 4879) | function isBetween (from, to, units, inclusivity) {
function isSame (line 4885) | function isSame (input, units) {
function isSameOrAfter (line 4900) | function isSameOrAfter (input, units) {
function isSameOrBefore (line 4904) | function isSameOrBefore (input, units) {
function diff (line 4908) | function diff (input, units, asFloat) {
function monthDiff (line 4942) | function monthDiff (a, b) {
function toString (line 4966) | function toString () {
function toISOString (line 4970) | function toISOString(keepOffset) {
function inspect (line 4996) | function inspect () {
function format (line 5014) | function format (inputString) {
function from (line 5022) | function from (time, withoutSuffix) {
function fromNow (line 5032) | function fromNow (withoutSuffix) {
function to (line 5036) | function to (time, withoutSuffix) {
function toNow (line 5046) | function toNow (withoutSuffix) {
function locale (line 5053) | function locale (key) {
function localeData (line 5078) | function localeData () {
function startOf (line 5082) | function startOf (units) {
function endOf (line 5126) | function endOf (units) {
function valueOf (line 5140) | function valueOf () {
function unix (line 5144) | function unix () {
function toDate (line 5148) | function toDate () {
function toArray (line 5152) | function toArray () {
function toObject (line 5157) | function toObject () {
function toJSON (line 5170) | function toJSON () {
function isValid$2 (line 5175) | function isValid$2 () {
function parsingFlags (line 5179) | function parsingFlags () {
function invalidAt (line 5183) | function invalidAt () {
function creationData (line 5187) | function creationData() {
function addWeekYearFormatToken (line 5207) | function addWeekYearFormatToken (token, getter) {
function getSetWeekYear (line 5248) | function getSetWeekYear (input) {
function getSetISOWeekYear (line 5257) | function getSetISOWeekYear (input) {
function getISOWeeksInYear (line 5262) | function getISOWeeksInYear () {
function getWeeksInYear (line 5266) | function getWeeksInYear () {
function getSetWeekYearHelper (line 5271) | function getSetWeekYearHelper(input, week, weekday, dow, doy) {
function setWeekAll (line 5284) | function setWeekAll(weekYear, week, weekday, dow, doy) {
function getSetQuarter (line 5315) | function getSetQuarter (input) {
function getSetDayOfYear (line 5373) | function getSetDayOfYear (input) {
function parseMs (line 5472) | function parseMs(input, array) {
function getZoneAbbr (line 5490) | function getZoneAbbr () {
function getZoneName (line 5494) | function getZoneName () {
function createUnix (line 5602) | function createUnix (input) {
function createInZone (line 5606) | function createInZone () {
function preParsePostFormat (line 5610) | function preParsePostFormat (string) {
function get$1 (line 5652) | function get$1 (format, index, field, setter) {
function listMonthsImpl (line 5658) | function listMonthsImpl (format, index, field) {
function listWeekdaysImpl (line 5686) | function listWeekdaysImpl (localeSorted, format, index, field) {
function listMonths (line 5722) | function listMonths (format, index) {
function listMonthsShort (line 5726) | function listMonthsShort (format, index) {
function listWeekdays (line 5730) | function listWeekdays (localeSorted, format, index) {
function listWeekdaysShort (line 5734) | function listWeekdaysShort (localeSorted, format, index) {
function listWeekdaysMin (line 5738) | function listWeekdaysMin (localeSorted, format, index) {
function abs (line 5760) | function abs () {
function addSubtract$1 (line 5777) | function addSubtract$1 (duration, input, value, direction) {
function add$1 (line 5788) | function add$1 (input, value) {
function subtract$1 (line 5793) | function subtract$1 (input, value) {
function absCeil (line 5797) | function absCeil (number) {
function bubble (line 5805) | function bubble () {
function daysToMonths (line 5852) | function daysToMonths (days) {
function monthsToDays (line 5858) | function monthsToDays (months) {
function as (line 5863) | function as (units) {
function valueOf$1 (line 5894) | function valueOf$1 () {
function makeAs (line 5906) | function makeAs (alias) {
function clone$1 (line 5921) | function clone$1 () {
function get$2 (line 5925) | function get$2 (units) {
function makeGetter (line 5930) | function makeGetter(name) {
function weeks (line 5944) | function weeks () {
function substituteTimeAgo (line 5959) | function substituteTimeAgo(string, number, withoutSuffix, isFuture, loca...
function relativeTime$1 (line 5963) | function relativeTime$1 (posNegDuration, withoutSuffix, locale) {
function getSetRelativeTimeRounding (line 5991) | function getSetRelativeTimeRounding (roundingFunction) {
function getSetRelativeTimeThreshold (line 6003) | function getSetRelativeTimeThreshold (threshold, limit) {
function humanize (line 6017) | function humanize (withSuffix) {
function sign (line 6034) | function sign(x) {
function toISOString$1 (line 6038) | function toISOString$1() {
function computeMinSampleSize (line 6517) | function computeMinSampleSize(scale, pixels) {
function computeFitCategoryTraits (line 6541) | function computeFitCategoryTraits(index, ruler, options) {
function computeFlexCategoryTraits (line 6571) | function computeFlexCategoryTraits(index, ruler, options) {
function lineEnabled (line 7433) | function lineEnabled(dataset, options) {
function capControlPoint (line 7649) | function capControlPoint(pt, min, max) {
function initConfig (line 8376) | function initConfig(config) {
function updateConfig (line 8397) | function updateConfig(chart) {
function positionIsHorizontal (line 8417) | function positionIsHorizontal(position) {
function listenArrayEvents (line 9314) | function listenArrayEvents(array, listener) {
function unlistenArrayEvents (line 9355) | function unlistenArrayEvents(array, listener) {
function interpolate (line 9652) | function interpolate(start, view, model, ease) {
function parseMaxStyle (line 10184) | function parseMaxStyle(styleValue, node, parentProperty) {
function isConstrainedValue (line 10204) | function isConstrainedValue(value) {
function getConstraintDimension (line 10213) | function getConstraintDimension(domNode, maxStyle, percentageProperty) {
function getRelativePosition (line 10387) | function getRelativePosition(e, chart) {
function parseVisibleItems (line 10403) | function parseVisibleItems(chart, handler) {
function getIntersectItems (line 10428) | function getIntersectItems(chart, position) {
function getNearestItems (line 10448) | function getNearestItems(chart, position, intersect, distanceMetric) {
function getDistanceMetricForAxis (line 10477) | function getDistanceMetricForAxis(axis) {
function indexMode (line 10488) | function indexMode(chart, e, options) {
function filterByPosition (line 10764) | function filterByPosition(array, position) {
function sortByWeight (line 10770) | function sortByWeight(array, reverse) {
function getMinimumBoxSize (line 10946) | function getMinimumBoxSize(box) {
function fitBox (line 10998) | function fitBox(box) {
function finalFitVerticalBox (line 11044) | function finalFitVerticalBox(box) {
function placeBox (line 11129) | function placeBox(box) {
function labelsFromTicks (line 11632) | function labelsFromTicks(ticks) {
function getLineValue (line 11643) | function getLineValue(scale, index, offsetGridLines) {
function computeTextSize (line 11658) | function computeTextSize(context, tick, font) {
function parseFontOptions (line 11664) | function parseFontOptions(options) {
function parseLineHeight (line 11679) | function parseLineHeight(options) {
function mergeOpacity (line 12726) | function mergeOpacity(colorString, opacity) {
function pushOrConcat (line 12732) | function pushOrConcat(base, toPush) {
function createTooltipItem (line 12748) | function createTooltipItem(element) {
function getBaseModel (line 12768) | function getBaseModel(tooltipOpts) {
function getTooltipSize (line 12820) | function getTooltipSize(tooltip, model) {
function determineAlignment (line 12888) | function determineAlignment(tooltip, size) {
function getBa
Condensed preview — 497 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (6,099K chars).
[
{
"path": ".commit-template",
"chars": 213,
"preview": "# Please use the following format for the commit message:\n#\n# <module>: short description of the change.\n#\n# More detail"
},
{
"path": ".gitignore",
"chars": 2047,
"preview": ".deps\n.libs\n.dirstamp\nMakefile.in\nMakefile\n*.o\n*.lo\n*.la\n*.diff\n*.orig\n*.rej\n*.gcda\n*.gcno\n*~\n\\#*\\#\nTAGS\ncscope.*\n\n/auto"
},
{
"path": "ChangeLog",
"chars": 33881,
"preview": "Summary of changes in versions 3.x:\n\n3.2:\n- Add features for Lustre's project quota:\n\t- Retrieve project id when scannin"
},
{
"path": "LICENSE.en.txt",
"chars": 21892,
"preview": "Copyright CEA/DAM (2004-2016)\n\nCeCILL-C FREE SOFTWARE LICENSE AGREEMENT\n\n\n Notice\n\nThis Agreement is a Free Software"
},
{
"path": "LICENSE.fr.txt",
"chars": 21511,
"preview": "Copyright CEA/DAM (2004-2013)\n\nCONTRAT DE LICENCE DE LOGICIEL LIBRE CeCILL-C\n\n\n Avertissement\n\nCe contrat est une li"
},
{
"path": "Makefile.am",
"chars": 2598,
"preview": "ACLOCAL_AMFLAGS = -I autotools/m4\n\ncheck-valgrind:\n\tmake -C src/tests check-valgrind\n\nSUBDIRS=src scripts tests web_gui "
},
{
"path": "README.md",
"chars": 7141,
"preview": "##  Robinhood Policy Engine\n "
},
{
"path": "autogen.sh",
"chars": 584,
"preview": "#!/bin/bash\n\nfunction install_hook\n{\n local src_file=\"$1\"\n local tgt_file=\"$2\"\n\n test ! -d \"$wdir/.git/\" && ret"
},
{
"path": "autotools/m4/args_mgmt.m4",
"chars": 2305,
"preview": "\n#\n# This macro is for features that are disabled by default\n# and we want a CFLAG to be set if it is explicitely enable"
},
{
"path": "autotools/m4/as-ac-expand.m4",
"chars": 1166,
"preview": "dnl as-ac-expand.m4 0.2.0\ndnl autostars m4 macro for expanding directories using configure's prefix\ndnl thomas@apestaart"
},
{
"path": "autotools/m4/ax_valgrind_check.m4",
"chars": 6292,
"preview": "# ===========================================================================\n# http://www.gnu.org/software/autoconf"
},
{
"path": "autotools/m4/db.m4",
"chars": 501,
"preview": "#\n# This macro test for MySQL config program and version\n#\nAC_DEFUN([AX_MYSQL_INFO],\n[\n AC_CHECK_PROGS(MYSQL_CONF"
},
{
"path": "autotools/m4/lustre.m4",
"chars": 2973,
"preview": "#\n# This macro test installed lustre version and package name\n#\nAC_DEFUN([AX_LUSTRE_VERSION],\n[\n # Check if any p"
},
{
"path": "configure.ac",
"chars": 19720,
"preview": "# -*- mode: c; c-basic-offset: 4; indent-tabs-mode: nil; -*-\n# vim:expandtab:shiftwidth=4:tabstop=4:\n# Process this file"
},
{
"path": "doc/Makefile.am",
"chars": 21,
"preview": "\nSUBDIRS = templates\n"
},
{
"path": "doc/admin_guides/MOVED_TO",
"chars": 219,
"preview": "Documentation is now managed as wiki pages on project web site.\nIt is available here:\n https://github.com/cea-hpc/rob"
},
{
"path": "doc/doxygen/doxygen.cfg.in",
"chars": 51865,
"preview": "# Doxyfile 1.4.7\n\n# This file describes the settings to be used by the documentation system\n# doxygen (www.doxygen.org) "
},
{
"path": "doc/templates/Makefile.am",
"chars": 525,
"preview": "\nconfigdir = @CONFDIR@/robinhood.d\ntemplatesdir = $(configdir)/templates\nincludesdir = $(configdir)/includes\n\ndist_templ"
},
{
"path": "doc/templates/basic.conf",
"chars": 663,
"preview": "General {\n fs_path = \"/path/to/fs\";\n # filesystem type, as displayed by 'mount' (e.g. ext4, xfs, lustre, ...)\n "
},
{
"path": "doc/templates/example_alerts.conf",
"chars": 2753,
"preview": "# -*- mode: c; c-basic-offset: 4; indent-tabs-mode: nil; -*-\n# vim:expandtab:shiftwidth=4:tabstop=4:\n\nGeneral {\n\tfs_path"
},
{
"path": "doc/templates/example_checksum.conf",
"chars": 2305,
"preview": "# -*- mode: c; c-basic-offset: 4; indent-tabs-mode: nil; -*-\n# vim:expandtab:shiftwidth=4:tabstop=4:\n\nGeneral {\n\tfs_path"
},
{
"path": "doc/templates/example_cleanup.conf",
"chars": 3055,
"preview": "# -*- mode: c; c-basic-offset: 4; indent-tabs-mode: nil; -*-\n# vim:expandtab:shiftwidth=4:tabstop=4:\n\nGeneral {\n\tfs_path"
},
{
"path": "doc/templates/example_lhsm.conf",
"chars": 5267,
"preview": "# -*- mode: c; c-basic-offset: 4; indent-tabs-mode: nil; -*-\n# vim:expandtab:shiftwidth=4:tabstop=4:\n\nGeneral {\n\tfs_path"
},
{
"path": "doc/templates/example_modeguard.conf",
"chars": 2570,
"preview": "# -*- mode: c; c-basic-offset: 4; indent-tabs-mode: nil; -*-\n# vim:expandtab:shiftwidth=4:tabstop=4:\n\nGeneral {\n\tfs_path"
},
{
"path": "doc/templates/example_rmdir.conf",
"chars": 2660,
"preview": "# -*- mode: c; c-basic-offset: 4; indent-tabs-mode: nil; -*-\n# vim:expandtab:shiftwidth=4:tabstop=4:\n\nGeneral {\n\tfs_path"
},
{
"path": "doc/templates/example_shook.conf",
"chars": 2612,
"preview": "# -*- mode: c; c-basic-offset: 4; indent-tabs-mode: nil; -*-\n# vim:expandtab:shiftwidth=4:tabstop=4:\n\n%include \"includes"
},
{
"path": "doc/templates/includes/alerts.inc",
"chars": 432,
"preview": "# new implementation of alerts as policies in robinhood v3\n\ndefine_policy alert {\n status_manager = alerter;\n scop"
},
{
"path": "doc/templates/includes/backup.inc",
"chars": 667,
"preview": "# used to be rbh 2.5 \"migration\" policy for backup mode\ndefine_policy backup_archive {\n scope { (type == file or type"
},
{
"path": "doc/templates/includes/check.inc",
"chars": 272,
"preview": "define_policy checksum {\n status_manager = checker;\n scope { type == file }\n default_lru_sort_attr = last_check"
},
{
"path": "doc/templates/includes/lhsm.inc",
"chars": 1108,
"preview": "#####################################################\n# Policy definitions for Lustre/HSM\n# Do not modify without th"
},
{
"path": "doc/templates/includes/modeguard.inc",
"chars": 220,
"preview": "# Robinhood Policy definition for modeguard\n\ndefine_policy modeguard {\n status_manager = modeguard;\n scope { type "
},
{
"path": "doc/templates/includes/rmdir.inc",
"chars": 555,
"preview": "# This rmdir policy applies to all directories (empty or non-empty)\n# This allow applying policies to both empty and non"
},
{
"path": "doc/templates/includes/rmdir_old.inc",
"chars": 464,
"preview": "# definition of 2 rmdir policies:\n# 1 for empty directories\n# 1 for non-empty directories (recursive removal)\n\ndefine_po"
},
{
"path": "doc/templates/includes/shook.inc",
"chars": 822,
"preview": "define_policy shook_archive {\n scope { (type == file or type == symlink)\n and (status == new or status == "
},
{
"path": "doc/templates/includes/tmpfs.inc",
"chars": 212,
"preview": "# used to be rbh 2.5 \"purge\" policy in TMPFS mode\ndefine_policy cleanup {\n scope { type != directory }\n status_man"
},
{
"path": "man/Makefile.am",
"chars": 242,
"preview": "dist_man_MANS=robinhood.1 rbh-report.1 rbh-find.1 rbh-du.1 rbh-diff.1\n\nif LUSTRE_HSM\ndist_man_MANS+=lhsmtool_cmd.1\nendif"
},
{
"path": "man/lhsmtool_cmd.1",
"chars": 4086,
"preview": ".\\\" Man page generated from reStructuredText.\n.\n.TH LHSMTOOL_CMD 1 \"2017-12-13\" \"0.1\" \"\"\n.SH NAME\nlhsmtool_cmd \\- Turn a"
},
{
"path": "man/lhsmtool_cmd.rst",
"chars": 3207,
"preview": "==============\n lhsmtool_cmd\n==============\n\n------------------------------------------------------\nTurn any data copy c"
},
{
"path": "man/rbh-diff.1",
"chars": 1626,
"preview": ".\\\" Text automatically generated by txt2man\n.TH rbh-diff 1 \"07 July 2016\" \"\" \"Robinhood 3.0\"\n.SH NAME\n\\fBrbh-diff \\fP- l"
},
{
"path": "man/rbh-du.1",
"chars": 1375,
"preview": ".\\\" Text automatically generated by txt2man\n.TH rbh-du 1 \"07 July 2016\" \"\" \"Robinhood 3.0\"\n.SH NAME\n\\fBrbh-du \\fP- du cl"
},
{
"path": "man/rbh-find.1",
"chars": 5058,
"preview": ".\\\" Text automatically generated by txt2man\n.TH rbh-find 1 \"07 July 2016\" \"\" \"Robinhood 3.0\"\n.SH NAME\n\\fBrbh-find \\fP- f"
},
{
"path": "man/rbh-report.1",
"chars": 5220,
"preview": ".\\\" Text automatically generated by txt2man\n.TH rbh-report 1 \"07 July 2016\" \"\" \"Robinhood 3.0\"\n.SH NAME\n\\fBrbh-report \\f"
},
{
"path": "man/robinhood.1",
"chars": 4911,
"preview": ".\\\" Text automatically generated by txt2man\n.TH robinhood 1 \"07 July 2016\" \"\" \"Robinhood 3.0\"\n.SH NAME\n\\fBrobinhood \\fP-"
},
{
"path": "robinhood.spec.in",
"chars": 11871,
"preview": "#default ON\n%bcond_without mysql\n%bcond_without common_rpms\n%bcond_without jemalloc\n\n#default OFF\n%bcond_with lustre\n\n%i"
},
{
"path": "scripts/Makefile.am",
"chars": 809,
"preview": "\nEXTRA_DIST= robinhood.init\t\t\t\\\n\trobinhood.init.in\t\t\t\\\n\trobinhood.init.sles \t\t\\\n\trobinhood.init.sles.in \t\t\\"
},
{
"path": "scripts/bestiaire.sh",
"chars": 888,
"preview": "#!/bin/sh\n#\n# create a filesystem with various object types etc...\n#\n# usage: bestiaire.sh <root>\n#\n\nTESTDIR=$1\n\nif [ ! "
},
{
"path": "scripts/cfg_25to30.sh",
"chars": 657,
"preview": "#!/bin/bash\n#\n# helper to convert robinhood 2.5 to robinhood 3.0 config file.\n#\n\nfunction error\n{\n echo \"$*\"\n exi"
},
{
"path": "scripts/check_commit.sh",
"chars": 372,
"preview": "#!/bin/bash\n\ndir=$(dirname $(readlink -m $0))\n\nopt=\"\"\n\nfunction check_file\n{\n\texec git diff --cached --format=email $1 |"
},
{
"path": "scripts/check_rpm_reloc.sh",
"chars": 3400,
"preview": "#!/bin/bash\n\n# without option:\n# expected:\n# rpm to install config to /etc/robinhood.d\n# rpm to install binaries to /usr"
},
{
"path": "scripts/checkpatch.pl",
"chars": 95797,
"preview": "#!/usr/bin/perl -w\n# (c) 2001, Dave Jones. (the file handling bit)\n# (c) 2005, Joel Schopp <jschopp@austin.ibm.com> (the"
},
{
"path": "scripts/cmd2man.sh",
"chars": 1025,
"preview": "#!/bin/bash\n\ncmd=$1\ndescr=$2\nseealso=$3\n\nif [[ -z $2 ]]; then\n echo \"Missing command description\" >&2\n exit 1\nfi\n\n"
},
{
"path": "scripts/code_format.sh",
"chars": 152,
"preview": "f=$1\n\nif [ ! -f $f ]; then\n echo \"$f: file not found\"\n exit 1\nfi\n\n# remove extra space after parenthesis\nsed -e 's"
},
{
"path": "scripts/commit-msg",
"chars": 4361,
"preview": "#!/bin/sh\n# From Gerrit Code Review 2.8.5\n#\n# Part of Gerrit Code Review (http://code.google.com/p/gerrit/)\n#\n# Copyrigh"
},
{
"path": "scripts/demo/disk_usage.sh",
"chars": 540,
"preview": "#/!bin/sh\n\n# -*- mode: c; c-basic-offset: 4; indent-tabs-mode: nil; -*-\n# vim:expandtab:shiftwidth=4:tabstop=4:\n\nFS1=$1\n"
},
{
"path": "scripts/demo/migr_purge.sh",
"chars": 735,
"preview": "#/!bin/sh\n\n# -*- mode: c; c-basic-offset: 4; indent-tabs-mode: nil; -*-\n# vim:expandtab:shiftwidth=4:tabstop=4:\n\n# 1) RH"
},
{
"path": "scripts/demo/mkplot.sh",
"chars": 166,
"preview": "#!/bin/sh\n\n# convert output data\nsed -e \"s/;/ /g\" usage.csv | grep -v ost | awk '{print $1\" \"$2\" \"$3\" \"$2+$3\" \"$4}' > us"
},
{
"path": "scripts/demo/populate_backend.sh",
"chars": 1485,
"preview": "#/!bin/sh\n\n# -*- mode: c; c-basic-offset: 4; indent-tabs-mode: nil; -*-\n# vim:expandtab:shiftwidth=4:tabstop=4:\n\n# this "
},
{
"path": "scripts/demo/rh.migr_purge.conf",
"chars": 2124,
"preview": "General {\n\tfs_path = \"/mnt/lustre\";\n}\n\ndb_update_policy\n{\n\tmd_update = on_event_periodic(1sec,1min);\n\tpath_update = on"
},
{
"path": "scripts/demo/trace_usage.gp",
"chars": 370,
"preview": "set term png\nset out \"usage.png\"\nset xlabel \"time(sec)\"\nset ylabel \"space used(MB)\"\nset key left top\nplot \"usage.dat\" us"
},
{
"path": "scripts/demo/write_data.sh",
"chars": 987,
"preview": "#/!bin/sh\n\n# -*- mode: c; c-basic-offset: 4; indent-tabs-mode: nil; -*-\n# vim:expandtab:shiftwidth=4:tabstop=4:\n\n# this "
},
{
"path": "scripts/exafs.sh",
"chars": 2136,
"preview": "#!/bin/bash\n\n# creates 1.7+ billion entries filesystem\n# with a namespace similar to production systems\nNB_CONT=10 "
},
{
"path": "scripts/fill_fs.sh",
"chars": 2340,
"preview": "#!/bin/sh\n\n# -*- mode: c; c-basic-offset: 4; indent-tabs-mode: nil; -*-\n# vim:expandtab:shiftwidth=4:tabstop=4:\n\n# this "
},
{
"path": "scripts/fix_man_options.sh",
"chars": 108,
"preview": "#!/bin/bash\nsed -e \"s#\\\\\\fP-\\\\\\fI\\([A-Za-z]*\\)\\\\\\fP#-\\1\\\\\\fP#g\" | sed -e \"s#-\\\\\\fI\\([A-Za-z]*\\)\\\\\\fP#-\\1#g\"\n"
},
{
"path": "scripts/git_prepare_hook",
"chars": 1490,
"preview": "#!/bin/sh\n#\n# An example hook script to prepare the commit log message.\n# Called by git-commit with the name of the file"
},
{
"path": "scripts/indent.sh",
"chars": 1849,
"preview": "f=$1\nscript_dir=$(dirname $(readlink -m $0))\n\n[ -f \"$f\" ] || exit 1\n\nIGNORE_LIST=\"DEPRECATED_FUNCTION,INITIALISED_STATIC"
},
{
"path": "scripts/ld.so.robinhood.conf.in",
"chars": 20,
"preview": "@LIBDIR@/robinhood/\n"
},
{
"path": "scripts/pre-commit",
"chars": 223,
"preview": "#!/bin/bash\n\n# Run nonreg script if a file from the webgui is modified\n\nSRC_PATTERN=\"web_gui\"\nif git diff --cached --nam"
},
{
"path": "scripts/rbh-config",
"chars": 20731,
"preview": "#!/bin/bash\n# -*- mode: c; c-basic-offset: 4; indent-tabs-mode: nil; -*-\n# vim:expandtab:shiftwidth=4:tabstop=4:\n#\n# Rob"
},
{
"path": "scripts/rbh_cksum.sh.in",
"chars": 2548,
"preview": "#!/bin/bash\n\n\n[[ -e /etc/sysconfig/rbh_cksum ]] && . /etc/sysconfig/rbh_cksum\n\n# \"defaults\" section\nRBH_CKSUM_CMD=${RBH_"
},
{
"path": "scripts/rbhext_tool",
"chars": 342,
"preview": "#!/bin/sh\n#\n# Simple cp command wrapper for robinhood\n#\n\nVERB=$1\nSRC=$2\nDEST=$3\n\nBIN=`basename $0`\n\nif [[ -z \"$VERB\" || "
},
{
"path": "scripts/rbhext_tool_clnt",
"chars": 1919,
"preview": "#!/bin/bash\n#\n# Client script to call remote file copy operations\n#\n# 20110325 <kilian.cavalotti@cea.fr>\n# 20120628 <die"
},
{
"path": "scripts/rbhext_tool_svr",
"chars": 1530,
"preview": "#!/bin/bash\n#\n# Server script to handle remotely initiated file copy operations\n#\n# 20110325 <kilian.cavalotti@cea.fr>\n#"
},
{
"path": "scripts/rewrite.sh",
"chars": 1341,
"preview": "#!/bin/bash\n\nd=$(dirname $0)\n\nfunction process_lines\n{\n local l1\n local l2\n local l3\n local l4\n local ln\n"
},
{
"path": "scripts/robinhood.init.in",
"chars": 6988,
"preview": "#!/bin/bash\n##\n# robinhood.init 1.0 2008/02/07 Ph. Gregoire philippe.gregoire@cea.fr\n##\n# chkconfig:\t- 95 5\n# descriptio"
},
{
"path": "scripts/robinhood.init.sles.in",
"chars": 8213,
"preview": "#!/bin/bash\n##\n# robinhood.init 1.0 2008/02/07 Ph. Gregoire philippe.gregoire@cea.fr\n# SLES port \t 2009/09/29 I Hail"
},
{
"path": "scripts/robinhood.service.in",
"chars": 249,
"preview": "[Unit]\nDescription=Robinhood server\n#only works if config file is unique\n\n[Service]\nType=simple\nKillMode=mixed\nEnvironme"
},
{
"path": "scripts/robinhood@.service.in",
"chars": 302,
"preview": "[Unit]\nDescription=Robinhood server for %I\n\n[Service]\nType=simple\nKillMode=mixed\nEnvironmentFile=-@CONFDIR@/sysconfig/ro"
},
{
"path": "scripts/sanity-lhsm/repro_time.sh",
"chars": 3244,
"preview": "#/!bin/bash\n\n# -*- mode: c; c-basic-offset: 4; indent-tabs-mode: nil; -*-\n# vim:expandtab:shiftwidth=4:tabstop=4:\n\nfunct"
},
{
"path": "scripts/sanity-lhsm/rh-hsm.conf.in",
"chars": 2152,
"preview": "# -*- mode: c; c-basic-offset: 4; indent-tabs-mode: nil; -*-\n# vim:expandtab:shiftwidth=4:tabstop=4:\n\nGeneral {\n\tfs_path"
},
{
"path": "scripts/sanity-lhsm/sanity.sh",
"chars": 4436,
"preview": "#/!bin/bash\n\n# -*- mode: c; c-basic-offset: 4; indent-tabs-mode: nil; -*-\n# vim:expandtab:shiftwidth=4:tabstop=4:\n\nfunct"
},
{
"path": "scripts/sysconfig_robinhood.in",
"chars": 325,
"preview": "\n# directory of configuration files for this service\n#RH_CONF_DIR=/etc/robinhood.d/\n# current directory where the daemon"
},
{
"path": "scripts/type_gen.pl",
"chars": 5112,
"preview": "#!/usr/bin/env perl\n#\n# Process a definition file and generate a header with:\n# - entry_info_t\n# - field_infos array\n# -"
},
{
"path": "src/Makefile.am",
"chars": 232,
"preview": "SUBDIRS=include common list_mgr entry_processor fs_scan cfg_parsing modules policies\n\nif CHANGELOGS\nSUBDIRS+=chglog_read"
},
{
"path": "src/cfg_parsing/Makefile.am",
"chars": 707,
"preview": "AM_YFLAGS\t\t = --defines\nAM_LFLAGS\t\t = -i\nAM_CFLAGS= -Wall -Werror $(DB_CFLAGS) $(PURPOSE_CFLAGS)\n\nif DEBUG_PARSING"
},
{
"path": "src/cfg_parsing/analyze.c",
"chars": 18576,
"preview": "/* -*- mode: c; c-basic-offset: 4; indent-tabs-mode: nil; -*-\n * vim:expandtab:shiftwidth=4:tabstop=4:\n */\n/*\n * Copyrig"
},
{
"path": "src/cfg_parsing/analyze.h",
"chars": 5680,
"preview": "/* -*- mode: c; c-basic-offset: 4; indent-tabs-mode: nil; -*-\n * vim:expandtab:shiftwidth=4:tabstop=4:\n */\n/*\n * Copyrig"
},
{
"path": "src/cfg_parsing/conf_lex.c",
"chars": 70116,
"preview": "\n#line 3 \"conf_lex.c\"\n\n#define YY_INT_ALIGNED short int\n\n/* A lexical scanner generated by flex */\n\n#define FLEX_SCANNE"
},
{
"path": "src/cfg_parsing/conf_lex.l",
"chars": 15873,
"preview": "%{\n/* -*- mode: c; c-basic-offset: 4; indent-tabs-mode: nil; -*-\n * vim:expandtab:shiftwidth=4:tabstop=4:\n */\n/*\n * Copy"
},
{
"path": "src/cfg_parsing/conf_yacc.c",
"chars": 58823,
"preview": "/* A Bison parser, made by GNU Bison 3.0.4. */\n\n/* Bison implementation for Yacc-like parsers in C\n\n Copyright (C) 19"
},
{
"path": "src/cfg_parsing/conf_yacc.h",
"chars": 3311,
"preview": "/* A Bison parser, made by GNU Bison 3.0.4. */\n\n/* Bison interface for Yacc-like parsers in C\n\n Copyright (C) 1984, 1"
},
{
"path": "src/cfg_parsing/conf_yacc.y",
"chars": 6236,
"preview": "%{\n\n/* -*- mode: c; c-basic-offset: 4; indent-tabs-mode: nil; -*-\n * vim:expandtab:shiftwidth=4:tabstop=4:\n */\n/*\n * Cop"
},
{
"path": "src/cfg_parsing/config_parsing.c",
"chars": 16580,
"preview": "/* -*- mode: c; c-basic-offset: 4; indent-tabs-mode: nil; -*-\n * vim:expandtab:shiftwidth=4:tabstop=4:\n */\n/*\n * Copyrig"
},
{
"path": "src/cfg_parsing/rbh_boolexpr.c",
"chars": 48927,
"preview": "/* -*- mode: c; c-basic-offset: 4; indent-tabs-mode: nil; -*-\n * vim:expandtab:shiftwidth=4:tabstop=4:\n */\n/*\n * Copyrig"
},
{
"path": "src/cfg_parsing/rbh_cfg.c",
"chars": 7380,
"preview": "/* -*- mode: c; c-basic-offset: 4; indent-tabs-mode: nil; -*-\n * vim:expandtab:shiftwidth=4:tabstop=4:\n */\n/*\n * Copyrig"
},
{
"path": "src/cfg_parsing/rbh_cfg_helpers.c",
"chars": 26712,
"preview": "/* -*- mode: c; c-basic-offset: 4; indent-tabs-mode: nil; -*-\n * vim:expandtab:shiftwidth=4:tabstop=4:\n */\n/*\n * Copyrig"
},
{
"path": "src/chglog_reader/Makefile.am",
"chars": 196,
"preview": "AM_CFLAGS= $(CC_OPT) $(DB_CFLAGS) $(PURPOSE_CFLAGS)\n\nnoinst_LTLIBRARIES=libchglog_rd.la\n\nlibchglog_rd_la_SOURCES= chglog"
},
{
"path": "src/chglog_reader/chglog_reader.c",
"chars": 62230,
"preview": "/* -*- mode: c; c-basic-offset: 4; indent-tabs-mode: nil; -*-\n * vim:expandtab:shiftwidth=4:tabstop=4:\n */\n/*\n * Copyrig"
},
{
"path": "src/chglog_reader/chglog_reader_config.c",
"chars": 15443,
"preview": "/* -*- mode: c; c-basic-offset: 4; indent-tabs-mode: nil; -*-\n * vim:expandtab:shiftwidth=4:tabstop=4:\n */\n/*\n * Copyrig"
},
{
"path": "src/common/Makefile.am",
"chars": 540,
"preview": "AM_CFLAGS= $(CC_OPT) $(DB_CFLAGS) $(PURPOSE_CFLAGS)\nAM_LDFLAGS=-ldl\n\nnoinst_LTLIBRARIES=libcommontools.la\n\nif LUSTRE\nFS_"
},
{
"path": "src/common/RW_Lock.c",
"chars": 5531,
"preview": "/* -*- mode: c; c-basic-offset: 4; indent-tabs-mode: nil; -*-\n * vim:expandtab:shiftwidth=4:tabstop=4:\n */\n/*\n * Copyrig"
},
{
"path": "src/common/basename.c",
"chars": 677,
"preview": "/* -*- mode: c; c-basic-offset: 4; indent-tabs-mode: nil; -*-\n * vim:expandtab:shiftwidth=4:tabstop=4:\n */\n/*\n * Copyrig"
},
{
"path": "src/common/global_config.c",
"chars": 10677,
"preview": "/* -*- mode: c; c-basic-offset: 4; indent-tabs-mode: nil; -*-\n * vim:expandtab:shiftwidth=4:tabstop=4:\n */\n/*\n * Copyrig"
},
{
"path": "src/common/lustre_tools.c",
"chars": 36157,
"preview": "/* -*- mode: c; c-basic-offset: 4; indent-tabs-mode: nil; -*-\n * vim:expandtab:shiftwidth=4:tabstop=4:\n */\n/*\n * Copyrig"
},
{
"path": "src/common/mntent_compat.c",
"chars": 3513,
"preview": "/**\n * This file has been extracted from FreeBSD fam package.\n */\n#include \"mntent_compat.h\"\n#include <sys/param.h>\n#inc"
},
{
"path": "src/common/mntent_compat.h",
"chars": 808,
"preview": "/**\n * This file has been extracted from FreeBSD fam package.\n */\n#ifdef HAVE_MNTENT_H\n#include <mntent.h>\n#else\n\n#ifnde"
},
{
"path": "src/common/param_utils.c",
"chars": 19321,
"preview": "/* -*- mode: c; c-basic-offset: 4; indent-tabs-mode: nil; -*-\n * vim:expandtab:shiftwidth=4:tabstop=4:\n */\n/*\n * Copyrig"
},
{
"path": "src/common/queue.c",
"chars": 7306,
"preview": "/* -*- mode: c; c-basic-offset: 4; indent-tabs-mode: nil; -*-\n * vim:expandtab:shiftwidth=4:tabstop=4:\n */\n/*\n * Copyrig"
},
{
"path": "src/common/rbh_cmd.c",
"chars": 10118,
"preview": "/* -*- mode: c; c-basic-offset: 4; indent-tabs-mode: nil; -*-\n * vim:expandtab:shiftwidth=4:tabstop=4:\n */\n/*\n * Copyrig"
},
{
"path": "src/common/rbh_logs.c",
"chars": 42125,
"preview": "/* -*- mode: c; c-basic-offset: 4; indent-tabs-mode: nil; -*-\n * vim:expandtab:shiftwidth=4:tabstop=4:\n */\n/*\n * Copyrig"
},
{
"path": "src/common/rbh_misc.c",
"chars": 81527,
"preview": "/* -*- mode: c; c-basic-offset: 4; indent-tabs-mode: nil; -*-\n * vim:expandtab:shiftwidth=4:tabstop=4:\n */\n/*\n * Copyrig"
},
{
"path": "src/common/rbh_modules.c",
"chars": 9250,
"preview": "/* -*- mode: c; c-basic-offset: 4; indent-tabs-mode: nil; -*-\n * vim:expandtab:shiftwidth=4:tabstop=4:\n */\n/*\n * Copyrig"
},
{
"path": "src/common/rbh_params.c",
"chars": 5784,
"preview": "/* -*- mode: c; c-basic-offset: 4; indent-tabs-mode: nil; -*-\n * vim:expandtab:shiftwidth=4:tabstop=4:\n */\n/*\n * Copyrig"
},
{
"path": "src/common/uidgidcache.c",
"chars": 8184,
"preview": "/* -*- mode: c; c-basic-offset: 4; indent-tabs-mode: nil; -*-\n * vim:expandtab:shiftwidth=4:tabstop=4:\n */\n/*\n * Copyrig"
},
{
"path": "src/common/update_params.c",
"chars": 15678,
"preview": "/* -*- mode: c; c-basic-offset: 4; indent-tabs-mode: nil; -*-\n * vim:expandtab:shiftwidth=4:tabstop=4:\n */\n/*\n * Copyrig"
},
{
"path": "src/entry_processor/Makefile.am",
"chars": 683,
"preview": "AM_CFLAGS= $(CC_OPT) $(DB_CFLAGS) $(PURPOSE_CFLAGS)\n\nnoinst_LTLIBRARIES=libentryproc.la\n\nlibentryproc_la_SOURCES=entry_p"
},
{
"path": "src/entry_processor/diff_pipeline.c",
"chars": 49512,
"preview": "/* -*- mode: c; c-basic-offset: 4; indent-tabs-mode: nil; -*-\n * vim:expandtab:shiftwidth=4:tabstop=4:\n */\n/*\n * Copyrig"
},
{
"path": "src/entry_processor/entry_proc_hash.c",
"chars": 4284,
"preview": "/* -*- mode: c; c-basic-offset: 4; indent-tabs-mode: nil; -*-\n * vim:expandtab:shiftwidth=4:tabstop=4:\n */\n/*\n * Copyrig"
},
{
"path": "src/entry_processor/entry_proc_impl.c",
"chars": 44586,
"preview": "/* -*- mode: c; c-basic-offset: 4; indent-tabs-mode: nil; -*-\n * vim:expandtab:shiftwidth=4:tabstop=4:\n */\n/*\n * Copyrig"
},
{
"path": "src/entry_processor/entry_proc_tools.c",
"chars": 28210,
"preview": "/* -*- mode: c; c-basic-offset: 4; indent-tabs-mode: nil; -*-\n * vim:expandtab:shiftwidth=4:tabstop=4:\n */\n/*\n * Copyrig"
},
{
"path": "src/entry_processor/entry_proc_tools.h",
"chars": 2142,
"preview": "/* -*- mode: c; c-basic-offset: 4; indent-tabs-mode: nil; -*-\n * vim:expandtab:shiftwidth=4:tabstop=4:\n */\n/*\n * Copyrig"
},
{
"path": "src/entry_processor/std_pipeline.c",
"chars": 75798,
"preview": "/* -*- mode: c; c-basic-offset: 4; indent-tabs-mode: nil; -*-\n * vim:expandtab:shiftwidth=4:tabstop=4:\n */\n/*\n * Copyrig"
},
{
"path": "src/entry_processor/test_hash.c",
"chars": 824,
"preview": "/* -*- mode: c; c-basic-offset: 4; indent-tabs-mode: nil; -*-\n *\n * vim:expandtab:shiftwidth=4:tabstop=4:\n */\n/*\n * Copy"
},
{
"path": "src/fs_scan/Makefile.am",
"chars": 289,
"preview": "AM_CFLAGS= $(CC_OPT) $(DB_CFLAGS) $(PURPOSE_CFLAGS)\n\nnoinst_LTLIBRARIES=libfsscan.la\n\nlibfsscan_la_SOURCES= fs_scan.c f"
},
{
"path": "src/fs_scan/fs_scan.c",
"chars": 68986,
"preview": "/* -*- mode: c; c-basic-offset: 4; indent-tabs-mode: nil; -*-\n * vim:expandtab:shiftwidth=4:tabstop=4:\n */\n/*\n * Copyrig"
},
{
"path": "src/fs_scan/fs_scan.h",
"chars": 2355,
"preview": "/* -*- mode: c; c-basic-offset: 4; indent-tabs-mode: nil; -*-\n * vim:expandtab:shiftwidth=4:tabstop=4:\n */\n/*\n * Copyrig"
},
{
"path": "src/fs_scan/fs_scan_main.c",
"chars": 24008,
"preview": "/* -*- mode: c; c-basic-offset: 4; indent-tabs-mode: nil; -*-\n * vim:expandtab:shiftwidth=4:tabstop=4:\n */\n/*\n * Copyrig"
},
{
"path": "src/fs_scan/fs_scan_types.h",
"chars": 2890,
"preview": "/* -*- mode: c; c-basic-offset: 4; indent-tabs-mode: nil; -*-\n * vim:expandtab:shiftwidth=4:tabstop=4:\n */\n/*\n * Copyrig"
},
{
"path": "src/fs_scan/task_stack_mngmt.c",
"chars": 3477,
"preview": "/* -*- mode: c; c-basic-offset: 4; indent-tabs-mode: nil; -*-\n * vim:expandtab:shiftwidth=4:tabstop=4:\n */\n/*\n * Copyrig"
},
{
"path": "src/fs_scan/task_stack_mngmt.h",
"chars": 899,
"preview": "/* -*- mode: c; c-basic-offset: 4; indent-tabs-mode: nil; -*-\n * vim:expandtab:shiftwidth=4:tabstop=4:\n */\n/*\n * Copyrig"
},
{
"path": "src/fs_scan/task_tree_mngmt.c",
"chars": 4736,
"preview": "/* -*- mode: c; c-basic-offset: 4; indent-tabs-mode: nil; -*-\n * vim:expandtab:shiftwidth=4:tabstop=4:\n */\n/*\n * Copyrig"
},
{
"path": "src/fs_scan/task_tree_mngmt.h",
"chars": 1765,
"preview": "/* -*- mode: c; c-basic-offset: 4; indent-tabs-mode: nil; -*-\n * vim:expandtab:shiftwidth=4:tabstop=4:\n */\n/*\n * Copyrig"
},
{
"path": "src/include/Makefile.am",
"chars": 766,
"preview": "\nSUFFIXES = .def\n\nTYPEGEN=$(top_srcdir)/scripts/type_gen.pl\n\n.def.h:\n\t$(TYPEGEN) $< $*.h\n\nnoinst_HEADERS=db_types.h lis"
},
{
"path": "src/include/Memory.h",
"chars": 6756,
"preview": "/* -*- mode: c; c-basic-offset: 4; indent-tabs-mode: nil; -*-\n * vim:expandtab:shiftwidth=4:tabstop=4:\n */\n/*\n * Copyrig"
},
{
"path": "src/include/RW_Lock.h",
"chars": 1670,
"preview": "/* -*- mode: c; c-basic-offset: 4; indent-tabs-mode: nil; -*-\n * vim:expandtab:shiftwidth=4:tabstop=4:\n */\n/*\n * Copyrig"
},
{
"path": "src/include/chglog_reader.h",
"chars": 2756,
"preview": "/* -*- mode: c; c-basic-offset: 4; indent-tabs-mode: nil; -*-\n * vim:expandtab:shiftwidth=4:tabstop=4:\n */\n/*\n * Copyrig"
},
{
"path": "src/include/config_parsing.h",
"chars": 5942,
"preview": "/* -*- mode: c; c-basic-offset: 4; indent-tabs-mode: nil; -*-\n * vim:expandtab:shiftwidth=4:tabstop=4:\n */\n/*\n * Copyrig"
},
{
"path": "src/include/db_schema.def",
"chars": 4026,
"preview": "%header\n\n/* -*- mode: c; c-basic-offset: 4; indent-tabs-mode: nil; -*-\n * vim:expandtab:shiftwidth=4:tabstop=4:\n */\n/*\n "
},
{
"path": "src/include/db_types.h",
"chars": 1614,
"preview": "/* -*- mode: c; c-basic-offset: 4; indent-tabs-mode: nil; -*-\n * vim:expandtab:shiftwidth=4:tabstop=4:\n */\n/*\n * Copyrig"
},
{
"path": "src/include/entry_proc_hash.h",
"chars": 2821,
"preview": "/* -*- mode: c; c-basic-offset: 4; indent-tabs-mode: nil; -*-\n * vim:expandtab:shiftwidth=4:tabstop=4:\n */\n/*\n * Copyrig"
},
{
"path": "src/include/entry_processor.h",
"chars": 9302,
"preview": "/* -*- mode: c; c-basic-offset: 4; indent-tabs-mode: nil; -*-\n * vim:expandtab:shiftwidth=4:tabstop=4:\n */\n/*\n * Copyrig"
},
{
"path": "src/include/fs_scan_main.h",
"chars": 1984,
"preview": "/* -*- mode: c; c-basic-offset: 4; indent-tabs-mode: nil; -*-\n * vim:expandtab:shiftwidth=4:tabstop=4:\n */\n/*\n * Copyrig"
},
{
"path": "src/include/global_config.h",
"chars": 1613,
"preview": "/* -*- mode: c; c-basic-offset: 4; indent-tabs-mode: nil; -*-\n * vim:expandtab:shiftwidth=4:tabstop=4:\n */\n/*\n * Copyrig"
},
{
"path": "src/include/list.h",
"chars": 4728,
"preview": "/* -*- mode: c; c-basic-offset: 4; indent-tabs-mode: nil; -*-\n * vim:expandtab:shiftwidth=4:tabstop=4:\n */\n/*\n * Copyrig"
},
{
"path": "src/include/list_mgr.h",
"chars": 42470,
"preview": "/* -*- mode: c; c-basic-offset: 4; indent-tabs-mode: nil; -*-\n * vim:expandtab:shiftwidth=4:tabstop=4:\n */\n/*\n * Copyrig"
},
{
"path": "src/include/lustre/lustre_errno.h",
"chars": 0,
"preview": ""
},
{
"path": "src/include/lustre_extended_types.h",
"chars": 8368,
"preview": "/* -*- mode: c; c-basic-offset: 4; indent-tabs-mode: nil; -*-\n * vim:expandtab:shiftwidth=4:tabstop=4:\n */\n/*\n * Copyrig"
},
{
"path": "src/include/pipeline_types.h",
"chars": 1735,
"preview": "/* -*- mode: c; c-basic-offset: 4; indent-tabs-mode: nil; -*-\n * vim:expandtab:shiftwidth=4:tabstop=4:\n */\n/*\n * Copyrig"
},
{
"path": "src/include/policy_rules.h",
"chars": 11843,
"preview": "/* -*- mode: c; c-basic-offset: 4; indent-tabs-mode: nil; -*-\n * vim:expandtab:shiftwidth=4:tabstop=4:\n */\n/*\n * Copyrig"
},
{
"path": "src/include/policy_run.h",
"chars": 17002,
"preview": "/* -*- mode: c; c-basic-offset: 4; indent-tabs-mode: nil; -*-\n * vim:expandtab:shiftwidth=4:tabstop=4:\n */\n/*\n * Copyrig"
},
{
"path": "src/include/queue.h",
"chars": 3146,
"preview": "/* -*- mode: c; c-basic-offset: 4; indent-tabs-mode: nil; -*-\n * vim:expandtab:shiftwidth=4:tabstop=4:\n */\n/*\n * Copyrig"
},
{
"path": "src/include/rbh_basename.h",
"chars": 630,
"preview": "/* -*- mode: c; c-basic-offset: 4; indent-tabs-mode: nil; -*-\n * vim:expandtab:shiftwidth=4:tabstop=4:\n */\n/*\n * Copyrig"
},
{
"path": "src/include/rbh_boolexpr.h",
"chars": 7636,
"preview": "/* -*- mode: c; c-basic-offset: 4; indent-tabs-mode: nil; -*-\n * vim:expandtab:shiftwidth=4:tabstop=4:\n */\n/*\n * Copyrig"
},
{
"path": "src/include/rbh_cfg.h",
"chars": 4941,
"preview": "/* -*- mode: c; c-basic-offset: 4; indent-tabs-mode: nil; -*-\n * vim:expandtab:shiftwidth=4:tabstop=4:\n */\n/*\n * Copyrig"
},
{
"path": "src/include/rbh_cfg_helpers.h",
"chars": 7138,
"preview": "/* -*- mode: c; c-basic-offset: 4; indent-tabs-mode: nil; -*-\n * vim:expandtab:shiftwidth=4:tabstop=4:\n */\n/*\n * Copyrig"
},
{
"path": "src/include/rbh_const.h",
"chars": 282,
"preview": "#ifndef _RBH_CONST_H\n#define _RBH_CONST_H\n\n#include <limits.h>\n\n#define RBH_PATH_MAX PATH_MAX\n#define RBH_NAME_MAX "
},
{
"path": "src/include/rbh_logs.h",
"chars": 5290,
"preview": "/* -*- mode: c; c-basic-offset: 4; indent-tabs-mode: nil; -*-\n * vim:expandtab:shiftwidth=4:tabstop=4:\n */\n/*\n * Copyrig"
},
{
"path": "src/include/rbh_misc.h",
"chars": 19173,
"preview": "/* -*- mode: c; c-basic-offset: 4; indent-tabs-mode: nil; -*-\n * vim:expandtab:shiftwidth=4:tabstop=4:\n */\n/*\n * Copyrig"
},
{
"path": "src/include/rbh_modules.h",
"chars": 3272,
"preview": "/* -*- mode: c; c-basic-offset: 4; indent-tabs-mode: nil; -*-\n * vim:expandtab:shiftwidth=4:tabstop=4:\n */\n/*\n * Copyrig"
},
{
"path": "src/include/rbh_params.h",
"chars": 3303,
"preview": "/* -*- mode: c; c-basic-offset: 4; indent-tabs-mode: nil; -*-\n * vim:expandtab:shiftwidth=4:tabstop=4:\n */\n/*\n * Copyrig"
},
{
"path": "src/include/rbh_types.h",
"chars": 3939,
"preview": "/* -*- mode: c; c-basic-offset: 4; indent-tabs-mode: nil; -*-\n * vim:expandtab:shiftwidth=4:tabstop=4:\n */\n/*\n * Copyrig"
},
{
"path": "src/include/status_manager.h",
"chars": 18688,
"preview": "/* -*- mode: c; c-basic-offset: 4; indent-tabs-mode: nil; -*-\n * vim:expandtab:shiftwidth=4:tabstop=4:\n */\n/*\n * Copyrig"
},
{
"path": "src/include/uidgidcache.h",
"chars": 1038,
"preview": "/* -*- mode: c; c-basic-offset: 4; indent-tabs-mode: nil; -*-\n * vim:expandtab:shiftwidth=4:tabstop=4:\n */\n/*\n * Copyrig"
},
{
"path": "src/include/update_params.h",
"chars": 2385,
"preview": "/* -*- mode: c; c-basic-offset: 4; indent-tabs-mode: nil; -*-\n * vim:expandtab:shiftwidth=4:tabstop=4:\n */\n/*\n * Copyrig"
},
{
"path": "src/include/xplatform_print.h",
"chars": 1119,
"preview": "/* -*- mode: c; c-basic-offset: 4; indent-tabs-mode: nil; -*-\n * vim:expandtab:shiftwidth=4:tabstop=4:\n */\n/*\n * Copyrig"
},
{
"path": "src/list_mgr/Makefile.am",
"chars": 704,
"preview": "AM_CFLAGS= $(CC_OPT) $(DB_CFLAGS) $(PURPOSE_CFLAGS)\n\nnoinst_LTLIBRARIES=liblistmgr.la\n\nif USE_MYSQL_DB\nDB_WRAPPER_SRC=my"
},
{
"path": "src/list_mgr/database.h",
"chars": 5028,
"preview": "/* -*- mode: c; c-basic-offset: 4; indent-tabs-mode: nil; -*-\n * vim:expandtab:shiftwidth=4:tabstop=4:\n */\n/*\n * Copyrig"
},
{
"path": "src/list_mgr/listmgr_common.c",
"chars": 78257,
"preview": "/* -*- mode: c; c-basic-offset: 4; indent-tabs-mode: nil; -*-\n * vim:expandtab:shiftwidth=4:tabstop=4:\n */\n/*\n * Copyrig"
},
{
"path": "src/list_mgr/listmgr_common.h",
"chars": 21162,
"preview": "/* -*- mode: c; c-basic-offset: 4; indent-tabs-mode: nil; -*-\n * vim:expandtab:shiftwidth=4:tabstop=4:\n */\n/*\n * Copyrig"
},
{
"path": "src/list_mgr/listmgr_config.c",
"chars": 16907,
"preview": "/* -*- mode: c; c-basic-offset: 4; indent-tabs-mode: nil; -*-\n * vim:expandtab:shiftwidth=4:tabstop=4:\n */\n/*\n * Copyrig"
},
{
"path": "src/list_mgr/listmgr_filters.c",
"chars": 26407,
"preview": "/* -*- mode: c; c-basic-offset: 4; indent-tabs-mode: nil; -*-\n * vim:expandtab:shiftwidth=4:tabstop=4:\n */\n/*\n * Copyrig"
},
{
"path": "src/list_mgr/listmgr_get.c",
"chars": 15646,
"preview": "/* -*- mode: c; c-basic-offset: 4; indent-tabs-mode: nil; -*-\n * vim:expandtab:shiftwidth=4:tabstop=4:\n */\n/*\n * Copyrig"
},
{
"path": "src/list_mgr/listmgr_init.c",
"chars": 101820,
"preview": "/* -*- mode: c; c-basic-offset: 4; indent-tabs-mode: nil; -*-\n * vim:expandtab:shiftwidth=4:tabstop=4:\n */\n/*\n * Copyrig"
},
{
"path": "src/list_mgr/listmgr_insert.c",
"chars": 11941,
"preview": "/* -*- mode: c; c-basic-offset: 4; indent-tabs-mode: nil; -*-\n * vim:expandtab:shiftwidth=4:tabstop=4:\n */\n/*\n * Copyrig"
},
{
"path": "src/list_mgr/listmgr_internal.h",
"chars": 3233,
"preview": "/* -*- mode: c; c-basic-offset: 4; indent-tabs-mode: nil; -*-\n * vim:expandtab:shiftwidth=4:tabstop=4:\n */\n/*\n * Copyrig"
},
{
"path": "src/list_mgr/listmgr_iterators.c",
"chars": 16210,
"preview": "/* -*- mode: c; c-basic-offset: 4; indent-tabs-mode: nil; -*-\n * vim:expandtab:shiftwidth=4:tabstop=4:\n */\n/*\n * Copyrig"
},
{
"path": "src/list_mgr/listmgr_ns.c",
"chars": 10816,
"preview": "/* -*- mode: c; c-basic-offset: 4; indent-tabs-mode: nil; -*-\n * vim:expandtab:shiftwidth=4:tabstop=4:\n */\n/*\n * Copyrig"
},
{
"path": "src/list_mgr/listmgr_recov.c",
"chars": 18095,
"preview": "/* -*- mode: c; c-basic-offset: 4; indent-tabs-mode: nil; -*-\n * vim:expandtab:shiftwidth=4:tabstop=4:\n */\n/*\n * Copyrig"
},
{
"path": "src/list_mgr/listmgr_remove.c",
"chars": 35075,
"preview": "/* -*- mode: c; c-basic-offset: 4; indent-tabs-mode: nil; -*-\n * vim:expandtab:shiftwidth=4:tabstop=4:\n */\n/*\n * Copyrig"
},
{
"path": "src/list_mgr/listmgr_reports.c",
"chars": 27329,
"preview": "/* -*- mode: c; c-basic-offset: 4; indent-tabs-mode: nil; -*-\n * vim:expandtab:shiftwidth=4:tabstop=4:\n */\n/*\n * Copyrig"
},
{
"path": "src/list_mgr/listmgr_stripe.c",
"chars": 13281,
"preview": "/* -*- mode: c; c-basic-offset: 4; indent-tabs-mode: nil; -*-\n * vim:expandtab:shiftwidth=4:tabstop=4:\n */\n/*\n * Copyrig"
},
{
"path": "src/list_mgr/listmgr_stripe.h",
"chars": 1467,
"preview": "/* -*- mode: c; c-basic-offset: 4; indent-tabs-mode: nil; -*-\n * vim:expandtab:shiftwidth=4:tabstop=4:\n */\n/*\n * Copyrig"
},
{
"path": "src/list_mgr/listmgr_tags.c",
"chars": 5397,
"preview": "/* -*- mode: c; c-basic-offset: 4; indent-tabs-mode: nil; -*-\n * vim:expandtab:shiftwidth=4:tabstop=4:\n */\n/*\n * Copyrig"
},
{
"path": "src/list_mgr/listmgr_update.c",
"chars": 6583,
"preview": "/* -*- mode: c; c-basic-offset: 4; indent-tabs-mode: nil; -*-\n * vim:expandtab:shiftwidth=4:tabstop=4:\n */\n/*\n * Copyrig"
},
{
"path": "src/list_mgr/listmgr_vars.c",
"chars": 3197,
"preview": "/* -*- mode: c; c-basic-offset: 4; indent-tabs-mode: nil; -*-\n * vim:expandtab:shiftwidth=4:tabstop=4:\n */\n/*\n * Copyrig"
},
{
"path": "src/list_mgr/mysql_wrapper.c",
"chars": 17210,
"preview": "/* -*- mode: c; c-basic-offset: 4; indent-tabs-mode: nil; -*-\n * vim:expandtab:shiftwidth=4:tabstop=4:\n */\n/*\n * Copyrig"
},
{
"path": "src/list_mgr/sqlite_wrapper.c",
"chars": 7673,
"preview": "/* -*- mode: c; c-basic-offset: 4; indent-tabs-mode: nil; -*-\n * vim:expandtab:shiftwidth=4:tabstop=4:\n */\n/*\n * Copyrig"
},
{
"path": "src/modules/Makefile.am",
"chars": 1807,
"preview": "AM_CFLAGS= $(CC_OPT) $(DB_CFLAGS) $(PURPOSE_CFLAGS)\n\npkglib_LTLIBRARIES=\n\npkglib_LTLIBRARIES+=librbh_mod_common.la\nlibrb"
},
{
"path": "src/modules/alerter.c",
"chars": 5930,
"preview": "/* -*- mode: c; c-basic-offset: 4; indent-tabs-mode: nil; -*-\n * vim:expandtab:shiftwidth=4:tabstop=4:\n */\n/*\n * Copyrig"
},
{
"path": "src/modules/backup.c",
"chars": 94961,
"preview": "/* -*- mode: c; c-basic-offset: 4; indent-tabs-mode: nil; -*-\n * vim:expandtab:shiftwidth=4:tabstop=4:\n */\n/*\n * Copyrig"
},
{
"path": "src/modules/backup.h",
"chars": 1300,
"preview": "/* -*- mode: c; c-basic-offset: 4; indent-tabs-mode: nil; -*-\n * vim:expandtab:shiftwidth=4:tabstop=4:\n */\n/*\n * Copyrig"
},
{
"path": "src/modules/basic.c",
"chars": 1590,
"preview": "/* -*- mode: c; c-basic-offset: 4; indent-tabs-mode: nil; -*-\n * vim:expandtab:shiftwidth=4:tabstop=4:\n */\n/*\n * Copyrig"
},
{
"path": "src/modules/checker.c",
"chars": 5666,
"preview": "/* -*- mode: c; c-basic-offset: 4; indent-tabs-mode: nil; -*-\n * vim:expandtab:shiftwidth=4:tabstop=4:\n */\n/*\n * Copyrig"
},
{
"path": "src/modules/common_actions.c",
"chars": 8889,
"preview": "/* -*- mode: c; c-basic-offset: 4; indent-tabs-mode: nil; -*-\n * vim:expandtab:shiftwidth=4:tabstop=4:\n */\n/*\n * Copyrig"
},
{
"path": "src/modules/common_sched.c",
"chars": 6224,
"preview": "/* -*- mode: c; c-basic-offset: 4; indent-tabs-mode: nil; -*-\n * vim:expandtab:shiftwidth=4:tabstop=4:\n */\n/*\n * Copyrig"
},
{
"path": "src/modules/lhsm.c",
"chars": 38311,
"preview": "/* -*- mode: c; c-basic-offset: 4; indent-tabs-mode: nil; -*-\n * vim:expandtab:shiftwidth=4:tabstop=4:\n */\n/*\n * Copyrig"
},
{
"path": "src/modules/mod_internal.c",
"chars": 12259,
"preview": "/* -*- mode: c; c-basic-offset: 4; indent-tabs-mode: nil; -*-\n * vim:expandtab:shiftwidth=4:tabstop=4:\n */\n/*\n * Copyrig"
},
{
"path": "src/modules/mod_internal.h",
"chars": 3536,
"preview": "/* -*- mode: c; c-basic-offset: 4; indent-tabs-mode: nil; -*-\n * vim:expandtab:shiftwidth=4:tabstop=4:\n */\n/*\n * Copyrig"
},
{
"path": "src/modules/modeguard.c",
"chars": 9938,
"preview": "/* -*- mode: c; c-basic-offset: 4; indent-tabs-mode: nil; -*-\n * vim:expandtab:shiftwidth=4:tabstop=4:\n */\n/*\n * Copyrig"
},
{
"path": "src/modules/sched_ratelimit.c",
"chars": 9812,
"preview": "/* -*- mode: c; c-basic-offset: 4; indent-tabs-mode: nil; -*-\n * vim:expandtab:shiftwidth=4:tabstop=4:\n */\n/*\n * Copyrig"
},
{
"path": "src/modules/shook.c",
"chars": 2542,
"preview": "/* -*- mode: c; c-basic-offset: 4; indent-tabs-mode: nil; -*-\n * vim:expandtab:shiftwidth=4:tabstop=4:\n */\n/*\n * Copyrig"
}
]
// ... and 297 more files (download for full content)
About this extraction
This page contains the full source code of the cea-hpc/robinhood GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 497 files (5.5 MB), approximately 1.5M tokens, and a symbol index with 2885 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.
Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.