From 345480faebecc8c8d2e05ecf0f198996e63a105e Mon Sep 17 00:00:00 2001 From: Silvan <27845747+adlerhurst@users.noreply.github.com> Date: Fri, 31 Oct 2025 12:10:02 +0100 Subject: [PATCH] fix(projection): locking behavior based on configuration (#11014) Ensure projections await running status if configured, improving synchronization during event processing. --- internal/eventstore/handler/v2/handler.go | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/internal/eventstore/handler/v2/handler.go b/internal/eventstore/handler/v2/handler.go index bb90a07cbc2..854f88151ce 100644 --- a/internal/eventstore/handler/v2/handler.go +++ b/internal/eventstore/handler/v2/handler.go @@ -559,7 +559,12 @@ func (h *Handler) processEvents(ctx context.Context, config *triggerConfig) (add }() var hasLocked bool - err = tx.QueryRowContext(ctx, "SELECT pg_try_advisory_xact_lock(hashtext($1), hashtext($2))", h.ProjectionName(), authz.GetInstance(ctx).InstanceID()).Scan(&hasLocked) + if config.awaitRunning { + _, err = tx.ExecContext(ctx, "SELECT pg_advisory_xact_lock(hashtext($1), hashtext($2))", h.ProjectionName(), authz.GetInstance(ctx).InstanceID()) + hasLocked = true + } else { + err = tx.QueryRowContext(ctx, "SELECT pg_try_advisory_xact_lock(hashtext($1), hashtext($2))", h.ProjectionName(), authz.GetInstance(ctx).InstanceID()).Scan(&hasLocked) + } if err != nil { return false, err }