proxy-pool/internal/adapters/redisprovider/keys.go
2026-07-30 14:15:48 +08:00

52 lines
1.2 KiB
Go

package redisprovider
import (
"crypto/sha256"
"encoding/hex"
"strconv"
"strings"
controllerProvider "proxy-pool/internal/controller/provider"
)
type keyBuilder struct {
namespace string
}
type upstreamKeys struct {
generation string
epoch string
leader string
next string
inflight string
}
func (builder keyBuilder) forUpstream(upstreamID string) (upstreamKeys, error) {
if strings.TrimSpace(upstreamID) != upstreamID || upstreamID == "" {
return upstreamKeys{}, controllerProvider.ErrInvalidCoordination
}
digest := digestParts(upstreamID)
prefix := "pp:" + builder.namespace + ":{provider:" + digest + "}"
return upstreamKeys{
generation: prefix + ":generation",
epoch: prefix + ":epoch",
leader: prefix + ":leader",
next: prefix + ":next-request",
inflight: prefix + ":inflight",
}, nil
}
func (keys upstreamKeys) all() []string {
return []string{keys.generation, keys.epoch, keys.leader, keys.next, keys.inflight}
}
func digestParts(values ...string) string {
digest := sha256.New()
for _, value := range values {
_, _ = digest.Write([]byte(strconv.Itoa(len(value))))
_, _ = digest.Write([]byte{':'})
_, _ = digest.Write([]byte(value))
}
return hex.EncodeToString(digest.Sum(nil))
}