Skip to content

Fix force-routing to Gitaly primary with empty hook env

Patrick Steinhardt requested to merge pks-gitaly-fix-force-routing into master

What does this MR do?

With commit edab619a (gitaly: Fix access checks with transactions and quarantine environments, 2021-02-05), we started injecting a flag into Gitaly requests to force-route to the primary Gitaly node in case a hook environment is set in order to not break access to quarantined objects. Turns out that this change breaks read distribution though as now all requests are force-routed to the primary.

The cause of this is trivial enough: the SafeRequestStore returns an empty hash if it wasn't set up to contain anything. Given that the checks whether a HookEnv was set up only checked whether there was something in the SafeRequestStore, they thus always thought that requests were running in the context of a HookEnv.

Fix the issue by checking that the returned value is non-empty.

/cc @grantyoung Closes gitaly#3457 (closed)

Screenshots (strongly suggested)

First bump is without my fix, second bump is with my fix:

reads-distribution

Does this MR meet the acceptance criteria?

Conformity

Availability and Testing

Security

If this MR contains changes to processing or storing of credentials or tokens, authorization and authentication methods and other items described in the security review guidelines:

  • Label as security and @ mention @gitlab-com/gl-security/appsec
  • The MR includes necessary changes to maintain consistency between UI, API, email, or other methods
  • Security reports checked/validated by a reviewer from the AppSec team
Edited by Patrick Steinhardt

Merge request reports