Skip to content

2.0.0

Choose a tag to compare

@thomaskrause thomaskrause released this 29 Mar 12:23
· 742 commits to main since this release

While this is a new major release with breaking changes in the internal Rust and external C-API, graphANNIS 2.x can read all existing data directories. No data migration is needed, and you should be able to just run the updated binary file. Also, there are no changes in how AQL is interpreted.

Changed

  • Refactored the basic GraphStorage and AnnotationStorage APIs to handle
    errors. Previously, we used mostly main memory containers which had an API
    that could not fail. This was reflected in the GraphStorage and
    AnnotationStorage APIs, which directly returned the result or an iterator
    over the non-fallible results. With the addition of disk-based
    implementations, this API model was not possible to implement without using
    panics when repeated access to the disk failed. Some of the API that was
    changed was user visible when using the graphannis-core crate (and thus the
    C-API), so this release is not technically backwards-compatible. Adapting to
    the updated API should be restricted to handle the errors returned by the
    functions.
  • The changes to the error handling also affects the C-API. These following
    functions have now a ErrorList argument:
    • annis_cs_list_node_annotations
    • annis_cs_list_edge_annotations
    • annis_cs_list_components_by_type
    • annis_cs_unload
    • annis_iter_nodeid_next
    • annis_graph_annotations_for_node
    • annis_graph_outgoing_edges
    • annis_graph_annotations_for_edge
  • Renamed the Criterion-based benchmark CLI to bench_queries and synchronize
    its arguments to the current version of Criterion.

Fixed

  • More efficient node path extraction in count_extra function and when sorting
    the matches.
  • Avoid large memory consumption when importing GraphML files by resetting an
    internal buffer on each XML event.
  • Limit the number of disk maps for the GraphUpdate so there are less issues
    with large corpora where the maximum number of open files per process might be
    reached.
  • Performance improvements when importing large corpora in disk-based mode. This
    optimizes the DiskMap to use a C0 (normal in memory BTree), a C1 (on disk
    BTree) and a C2 map when serialized to disk. On compacting, the entries are
    only written to C1 in O(n*log(n)). Before, multiple on disk maps might need to
    be merged, which had a much worse complexity. The C1 file uses the
    transient-btree-index crate.
  • Trim mapping entries when importing relANNIS resolver files (#222).
  • Fixed schema errors in the Webservice OpenAPI file.