// Copyright © 2022 Ettore Di Giacinto // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 2 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License along // with this program; if not, see . package utils import "hash/fnv" func hash(s string) uint32 { h := fnv.New32a() h.Write([]byte(s)) return h.Sum32() } func Leader(actives []string) string { // first get available nodes leaderboard := map[string]uint32{} leader := actives[0] // Compute who is leader at the moment for _, a := range actives { leaderboard[a] = hash(a) if leaderboard[leader] < leaderboard[a] { leader = a } } return leader }