From 43dc8e0ea817f80d3ceef51983c626f104823479 Mon Sep 17 00:00:00 2001 From: Jeff Ortel Date: Tue, 6 Aug 2024 14:08:35 -0500 Subject: [PATCH] :bug: Fix transaction deadlock in dep builder. (#122) closes #121 The `addon.Activity()` reports addon activity which is appended to the TaskReport.Activity using a PUT. This will briefly acquire a DB transaction (in the hub). The builder MUST not report activity because the addon already has a transaction open in the hub because of the POST of the analysis report. This creates a DEADLOCK. **There is a race-condition**: This only happens when the hub begins the transaction before the dep writer reports the dep.yaml not found. I can force this by adding a sleep to where the writer reports this. I suspect the hub can be busy enough with UI GET requests to delay it beginning the analysis POST until after the builder reports the file not found. Flow: ``` addon hub | post analysis ----- >| | | begin tx | writer <-------------| read | writer: put task --> | begin tx (deadlock) ``` Regression added PR #97 Signed-off-by: Jeff Ortel Signed-off-by: Cherry Picker --- builder/deps.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/builder/deps.go b/builder/deps.go index 64f86ac..12e2b65 100644 --- a/builder/deps.go +++ b/builder/deps.go @@ -63,7 +63,7 @@ func (b *Deps) read() (input []output.DepsFlatItem, err error) { f, err := os.Open(b.Path) if err != nil { if os.IsNotExist(err) { - addon.Activity(err.Error()) + addon.Log.Info(err.Error()) err = nil } return