Add multiple remotes and round robin

This commit is contained in:
Pablu23
2025-05-19 09:30:07 +02:00
parent 403c89b068
commit 55a2d2b708
5 changed files with 73 additions and 36 deletions

36
constmap.go Normal file
View File

@@ -0,0 +1,36 @@
package domainrouter
import "sync"
// ThreadMap for disallowing change of elements during runtime, for threadsafty
type ThreadMap[K comparable, V any] struct {
dirty map[K]V
rwMutex sync.RWMutex
}
func NewThreadMap[K comparable, V any](m map[K]V) *ThreadMap[K, V] {
return &ThreadMap[K, V]{
dirty: m,
rwMutex: sync.RWMutex{},
}
}
func (m *ThreadMap[K, V]) Get(key K) (value V, ok bool) {
m.rwMutex.RLock()
defer m.rwMutex.RUnlock()
value, ok = m.dirty[key]
return value, ok
}
func (m *ThreadMap[K, V]) SetValue(key K, change func(old V) V) bool {
m.rwMutex.Lock()
defer m.rwMutex.Unlock()
value, ok := m.dirty[key]
if !ok {
return ok
}
m.dirty[key] = change(value)
return ok
}