• Show log

    Commit

  • Hash : 73df75d8
    Author : Patrick Steinhardt
    Date : 2017-05-31T14:34:48

    config_file: refactor include handling
    
    Current code for configuration files uses the `reader` structure to
    parse configuration files and store additional metadata like the file's
    path and checksum. These structures are stored within an array in the
    backend itself, which causes multiple problems.
    
    First, it does not make sense to keep around the file's contents with
    the backend itself. While this data is usually free'd before being added
    to the backend, this brings along somewhat intricate lifecycle problems.
    A better solution would be to store only the file paths as well as the
    checksum of the currently parsed content only.
    
    The second problem is that the `reader` structures are stored inside an
    array. When re-parsing configuration files due to changed contents, we
    may cause this array to be reallocated, requiring us to update pointers
    hold by callers. Furthermore, we do not keep track of includes which
    are already associated to a reader inside of this array. This causes us
    to add readers multiple times to the backend, e.g. in the scenario of
    refreshing configurations.
    
    This commit fixes these shortcomings. We introduce a split between the
    parsing data and the configuration file's metadata. The `reader` will
    now only hold the file's contents and the parser state and the new
    `config_file` structure holds the file's path and checksum. Furthermore,
    the new structure is a recursive structure in that it will also hold
    references to the files it directly includes. The diskfile is changed to
    only store the top-level configuration file.
    
    These changes allow us further refactorings and greatly simplify
    understanding the code.