mirror of
https://github.com/project-zot/zot.git
synced 2026-06-15 11:37:56 +08:00
da426850e7
* chore: Update golangci-lint Signed-off-by: Lars Francke <git@lars-francke.de> * chore: fix all golangci-lint issues - Remove deprecated `// +build` tags - Fix godoclint, modernize, wsl_v5, govet, lll, gci, noctx issues - Update linter configuration - Modernize code to use Go 1.22+ features (for range N, slices.Contains, etc.) - Update make check lint the privileged tests Signed-off-by: Andrei Aaron <andreifdaaron@gmail.com> --------- Signed-off-by: Lars Francke <git@lars-francke.de> Signed-off-by: Andrei Aaron <andreifdaaron@gmail.com> Co-authored-by: Lars Francke <git@lars-francke.de>
18 lines
666 B
Go
18 lines
666 B
Go
package cluster
|
|
|
|
import "github.com/dchest/siphash"
|
|
|
|
// ComputeTargetMember computes the target member using SipHash and returns the index and the member.
|
|
// SipHash was chosen to prevent against hash attacks where an attacker
|
|
// can target all requests to one given instance instead of balancing across the cluster
|
|
// resulting in a Denial-of-Service (DOS).
|
|
// ref: https://en.wikipedia.org/wiki/SipHash
|
|
func ComputeTargetMember(hashKey string, members []string, repoName string) (uint64, string) {
|
|
h := siphash.New([]byte(hashKey))
|
|
h.Write([]byte(repoName))
|
|
sum64 := h.Sum64()
|
|
targetIdx := sum64 % uint64(len(members))
|
|
|
|
return targetIdx, members[targetIdx]
|
|
}
|