Skip to content

[BUG] infinite loop in restxq in exist 6.4.0 with circular dependency #6011

@line-o

Description

@line-o

Describe the bug

A XAR with modules that have circular dependencies

  • module A imports module B
  • module B imports module A

can be installed.
Deinstalling this package and reinstalling this will lead to an infinite loop in hot-code that cannot be aborted.
In my testing this could lead to database corruption!

restxq.log will be full of lines similar to

2026-01-15 15:35:03,471 [qtp394019287-33] INFO  (ExistXqueryRegistry.java [reexamineModulesWithResolvedDependencies]:321) - Missing dependency '/db/apps/my-app/a.xqm' has been added to the database, re-examining '/db/apps/my-app/b.xqm'... 
2026-01-15 15:35:04,311 [qtp394019287-33] INFO  (ExistXqueryRegistry.java [reexamineModulesWithResolvedDependencies]:321) - Missing dependency '/db/apps/my-app/b.xqm' has been added to the database, re-examining '/db/apps/my-app/a.xqm'... 
2026-01-15 15:35:05,097 [qtp394019287-33] INFO  (ExistXqueryRegistry.java [reexamineModulesWithResolvedDependencies]:321) - Missing dependency '/db/apps/my-app/a.xqm' has been added to the database, re-examining '/db/apps/my-app/b.xqm'... 
2026-01-15 15:35:05,939 [qtp394019287-33] INFO  (ExistXqueryRegistry.java [reexamineModulesWithResolvedDependencies]:321) - Missing dependency '/db/apps/my-app/b.xqm' has been added to the database, re-examining '/db/apps/my-app/a.xqm'... 
2026-01-15 15:35:06,751 [qtp394019287-33] INFO  (ExistXqueryRegistry.java [reexamineModulesWithResolvedDependencies]:321) - Missing dependency '/db/apps/my-app/a.xqm' has been added to the database, re-examining '/db/apps/my-app/b.xqm'... 
2026-01-15 15:35:07,586 [qtp394019287-33] INFO  (ExistXqueryRegistry.java [reexamineModulesWithResolvedDependencies]:321) - Missing dependency '/db/apps/my-app/b.xqm' has been added to the database, re-examining '/db/apps/my-app/a.xqm'... 
2026-01-15 15:35:08,405 [qtp394019287-33] INFO  (ExistXqueryRegistry.java [reexamineModulesWithResolvedDependencies]:321) - Missing dependency '/db/apps/my-app/a.xqm' has been added to the database, re-examining '/db/apps/my-app/b.xqm'... 
2026-01-15 15:35:09,259 [qtp394019287-33] INFO  (ExistXqueryRegistry.java [reexamineModulesWithResolvedDependencies]:321) - Missing dependency '/db/apps/my-app/b.xqm' has been added to the database, re-examining '/db/apps/my-app/a.xqm'... 
2026-01-15 15:35:10,102 [qtp394019287-33] INFO  (ExistXqueryRegistry.java [reexamineModulesWithResolvedDependencies]:321) - Missing dependency '/db/apps/my-app/a.xqm' has been added to the database, re-examining '/db/apps/my-app/b.xqm'... 
2026-01-15 15:35:10,982 [qtp394019287-33] INFO  (ExistXqueryRegistry.java [reexamineModulesWithResolvedDependencies]:321) - Missing dependency '/db/apps/my-app/b.xqm' has been added to the database, re-examining '/db/apps/my-app/a.xqm'... 
2026-01-15 15:35:11,813 [qtp394019287-33] INFO  (ExistXqueryRegistry.java [reexamineModulesWithResolvedDependencies]:321) - Missing dependency '/db/apps/my-app/a.xqm' has been added to the database, re-examining '/db/apps/my-app/b.xqm'... 
2026-01-15 15:35:12,695 [qtp394019287-33] INFO  (ExistXqueryRegistry.java [reexamineModulesWithResolvedDependencies]:321) - Missing dependency '/db/apps/my-app/b.xqm' has been added to the database, re-examining '/db/apps/my-app/a.xqm'... 
2026-01-15 15:35:13,529 [qtp394019287-33] INFO  (ExistXqueryRegistry.java [reexamineModulesWithResolvedDependencies]:321) - Missing dependency '/db/apps/my-app/a.xqm' has been added to the database, re-examining '/db/apps/my-app/b.xqm'... 
2026-01-15 15:35:14,398 [qtp394019287-33] INFO  (ExistXqueryRegistry.java [reexamineModulesWithResolvedDependencies]:321) - Missing dependency '/db/apps/my-app/b.xqm' has been added to the database, re-examining '/db/apps/my-app/a.xqm'... 
2026-01-15 15:35:15,241 [qtp394019287-33] INFO  (ExistXqueryRegistry.java [reexamineModulesWithResolvedDependencies]:321) - Missing dependency '/db/apps/my-app/a.xqm' has been added to the database, re-examining '/db/apps/my-app/b.xqm'... 
2026-01-15 15:35:16,125 [qtp394019287-33] INFO  (ExistXqueryRegistry.java [reexamineModulesWithResolvedDependencies]:321) - Missing dependency '/db/apps/my-app/b.xqm' has been added to the database, re-examining '/db/apps/my-app/a.xqm'... 
2026-01-15 15:35:16,955 [qtp394019287-33] INFO  (ExistXqueryRegistry.java [reexamineModulesWithResolvedDependencies]:321) - Missing dependency '/db/apps/my-app/a.xqm' has been added to the database, re-examining '/db/apps/my-app/b.xqm'... 
2026-01-15 15:35:17,858 [qtp394019287-33] INFO  (ExistXqueryRegistry.java [reexamineModulesWithResolvedDependencies]:321) - Missing dependency '/db/apps/my-app/b.xqm' has been added to the database, re-examining '/db/apps/my-app/a.xqm'... 
2026-01-15 15:35:18,700 [qtp394019287-33] INFO  (ExistXqueryRegistry.java [reexamineModulesWithResolvedDependencies]:321) - Missing dependency '/db/apps/my-app/a.xqm' has been added to the database, re-examining '/db/apps/my-app/b.xqm'... 
2026-01-15 15:35:19,587 [qtp394019287-33] INFO  (ExistXqueryRegistry.java [reexamineModulesWithResolvedDependencies]:321) - Missing dependency '/db/apps/my-app/b.xqm' has been added to the database, re-examining '/db/apps/my-app/a.xqm'... 

Important findings:

  1. There are restxq handlers defined in module C which itself depends on module A
  2. The routes annotated in module C are not registered after installation of the package. They had to be re-registered by saving module C in eXide

Expected behavior

  1. XAR packages with restxq annotations to be immediately available after installation.
  2. restxq routes to be de-registered reliably after XAR package removal
  3. XAR packages with circular dependencies to not create an infinite loop on re-installation.

To Reproduce

  1. Install xar package with a module with restxq annotations that depends on a module with a circular dependency
  2. deinstall package
  3. re-install package
  4. database rendered unusable as the infinite loop blocks the entire instance

Context (please always complete the following information)

  • Build: eXist-6.4.0 (2e41828)
  • Java: 1.8.0_452 (Temurin)
  • OS: Linux 6.12.54-linuxkit (aarch64)

Additional context

  • How is eXist-db installed? Docker
  • Any custom changes in e.g. conf.xml? none

Metadata

Metadata

Assignees

No one assigned

    Type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions