1. 26 May, 2025 2 commits
  2. 21 May, 2025 1 commit
  3. 12 May, 2025 3 commits
    • Alfredo Di Napoli's avatar
      Fix bug in selectCountDocs · 6ff05ee1
      Alfredo Di Napoli authored
      The refactored DB API now has a separate building block to create an Opaleye query that
      counts the number of returned results; we do that via `countRows`, exactly like the previous version.
      
      However, I have discovered a small footgun in the Opaleye API -- if you have
      two `Select` statements both calling countRows in a chain, that will always yield a value of 1,
      because the inner `countRows` will give you the actual number of results by returning
      a single row with an integer inside (i.e. the count).
      
      However, the subsequent (outer) call to `countRows` will return the number of rows
      of the previous step .. which is always going to be one!
      
      The bug was that I had left somewhere the spurious `countRows` in the query which
      would return the number of documents needed for the TFICF field, triggering the bug
      (because then we had `it` ALWAYS equal to 1.0).
      
      In the new API, while we cannot prevent the bug at the type level we can
      easily do an audit by grepping for `countRows`, making sure we have exactly one instance,
      i.e. inside `mkOpaCountQuery`.
      6ff05ee1
    • Alfredo Di Napoli's avatar
      Make CLI compile again · b0568522
      Alfredo Di Napoli authored
      b0568522
    • Alfredo Di Napoli's avatar
      Port DB operations to transactional API · 53512f89
      Alfredo Di Napoli authored
      This gigantic commit ports the existing DB operations in GGTX to use the
      transactional API, meaning that we can now compose DB operations and
      they will all run in the same Postgres transaction using the same
      connection, which will eliminate those class of bugs where concurrent DB
      access might result in an inconsistent state.
      
      On top of that, we simplify some parts of the API, for which a summary
      is given below:
      
      1. The `NodeStoryEnv` management has been greatly simplified; in the new
         API we don't need an external connection pool to be passed and we
         don't have to pass IO actions, we can just pass DB operations,
         therefore we can greatly simplify the API to just pass mostly pure
         values;
      
      2. Due to the fact that our `DBTx` monad can't do arbitrary IO (which is
         a good thing) we cannot fire Central Exchange notifications
         immediately. Rather that happens now is that we collect the
         `CEMessage` to be sent and we fire them in the relevant concrete
         monad after we finished with the DB transaction. This means that in
         principle there would be a small delay between the DB operation
         taking place and the notification firing but in practice the latency
         should be negligible and bear in mind this is typically what we want:
         if we have a long DB Tx that triggers an error in the middle we don't
         want to be sending out CE messages prematurely if the overall
         operation didn't succeed!
      
      3. There are still a few places in the codebase where we couldn't make
         things fully compositional with regards to the DBTx API, because we
         had Servant handlers which had DB operations mixed with other IO
         effectful computations (or other things like the notification from
         the `MonadJobStatus`). For now we are splitting these functions by
         manually running the partial DB operations, and while this is not
         ideal it can be fixed in subsequent merge requests.
      
      4. The `WorkerEnv` doesn't use `IOException` as its `MonadError`
         anymore, as for consistency we can just use `BackendInternalError` by
         adding a `InternalWorkerError` data constructor accepting the
         `IOException` triggered by the Worker monad.
      
      More testing is needed, with particular attention to performance
      (regression) but this should hopefully offer a decent baseline.
      53512f89
  4. 28 Apr, 2025 3 commits
  5. 24 Apr, 2025 2 commits
  6. 07 Apr, 2025 2 commits
  7. 27 Mar, 2025 1 commit
  8. 26 Mar, 2025 1 commit
  9. 25 Mar, 2025 3 commits
  10. 18 Mar, 2025 1 commit
  11. 13 Mar, 2025 1 commit
  12. 12 Mar, 2025 1 commit
  13. 10 Mar, 2025 5 commits
    • Alexandre Delanoë's avatar
      [VERSION] +1 to 0.0.7.4.3 · 44df14d2
      Alexandre Delanoë authored
      44df14d2
    • Alfredo Di Napoli's avatar
      fix(tests): allow ctrl-c to shut down the tests cleanly · 1ad17efd
      Alfredo Di Napoli authored
      The problem was caused by the improper usage of
      `delegate_ctrl` when creating the coreNLP process. For a long
      time I was under the impression this flag was essential to allow child
      processes to shutdown cleanly without leaving zombie threads, but the
      result here in the context of the testsuite was that the coreNLP server
      was receiving the first Ctrl^C, completely starving the Haskell RTS,
      which wouldn't receive any and as a result our testsuite would be
      running forever.
      1ad17efd
    • Alfredo Di Napoli's avatar
      Turn on by default no-phylo-debug-logs · 333bfac9
      Alfredo Di Napoli authored
      By default, we shouldn't run debug logs for phylo in production, let
      alone some that runs within pure code.
      
      Debug logs will hinder performance, and showing them on the production
      server is not their place anyway.
      333bfac9
    • Alfredo Di Napoli's avatar
      refactoring(logger): Silence debug logs in tests · c448afb3
      Alfredo Di Napoli authored
      This commit correctly propagates the correct `LogConfig` in all the
      places where we were just defaulting to log everything, and this allows
      us to silence debug logs in tests, unless we want them.
      c448afb3
    • Alfredo Di Napoli's avatar
      refactoring(logging): add log_file and log_config to Toml config · 93f605d5
      Alfredo Di Napoli authored
      Furthermore, the env var we used to override (in some parts) the logging
      level from `LOG_LEVEL`  to `GGTX_LOG_LEVEL`, to avoid the env var
      `LOG_LEVEL` clashing with some other service.
      
      This will eventually allow us to properly override the logging level in
      the tests, silencing non interesting stuff.
      93f605d5
  14. 03 Mar, 2025 2 commits
  15. 27 Feb, 2025 11 commits
  16. 21 Feb, 2025 1 commit