30 lines
977 B
Go
30 lines
977 B
Go
package leaderelection
|
|
|
|
import (
|
|
"github.com/redis/go-redis/v9"
|
|
"go.uber.org/zap"
|
|
|
|
"codeberg.org/mapleopentech/monorepo/cloud/maplefile-backend/config"
|
|
"codeberg.org/mapleopentech/monorepo/cloud/maplefile-backend/pkg/distributedmutex"
|
|
)
|
|
|
|
// ProvideLeaderElection provides a LeaderElection instance for Wire DI.
|
|
func ProvideLeaderElection(
|
|
cfg *config.Config,
|
|
mutex distributedmutex.Adapter,
|
|
redisClient redis.UniversalClient,
|
|
logger *zap.Logger,
|
|
) (LeaderElection, error) {
|
|
// Create configuration from app config
|
|
leConfig := &Config{
|
|
RedisKeyName: "maplefile:leader:lock",
|
|
RedisInfoKeyName: "maplefile:leader:info",
|
|
LockTTL: cfg.LeaderElection.LockTTL,
|
|
HeartbeatInterval: cfg.LeaderElection.HeartbeatInterval,
|
|
RetryInterval: cfg.LeaderElection.RetryInterval,
|
|
InstanceID: cfg.LeaderElection.InstanceID,
|
|
Hostname: cfg.LeaderElection.Hostname,
|
|
}
|
|
|
|
return NewMutexLeaderElection(leConfig, mutex, redisClient, logger)
|
|
}
|