Fetch the channel when it doesn't exist
This commit is contained in:
parent
08ae30b305
commit
1b02a8181a
|
@ -215,10 +215,15 @@ func (b *memoryBackend) ChannelsGetList() ([]microsub.Channel, error) {
|
||||||
|
|
||||||
// ChannelsCreate creates a channels
|
// ChannelsCreate creates a channels
|
||||||
func (b *memoryBackend) ChannelsCreate(name string) (microsub.Channel, error) {
|
func (b *memoryBackend) ChannelsCreate(name string) (microsub.Channel, error) {
|
||||||
defer b.save()
|
// Try to fetch the channel, if it exists, we don't create it
|
||||||
|
if channel, e := b.fetchChannel(name); e {
|
||||||
|
return channel, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// Otherwise create the channel
|
||||||
channel := b.createChannel(name)
|
channel := b.createChannel(name)
|
||||||
b.setChannel(channel)
|
b.setChannel(channel)
|
||||||
|
b.save()
|
||||||
|
|
||||||
conn := b.pool.Get()
|
conn := b.pool.Get()
|
||||||
defer conn.Close()
|
defer conn.Close()
|
||||||
|
@ -834,9 +839,23 @@ func (b *memoryBackend) createChannel(name string) microsub.Channel {
|
||||||
return channel
|
return channel
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (b *memoryBackend) fetchChannel(name string) (microsub.Channel, bool) {
|
||||||
|
b.lock.RLock()
|
||||||
|
defer b.lock.RUnlock()
|
||||||
|
|
||||||
|
for _, c := range b.Channels {
|
||||||
|
if c.Name == name {
|
||||||
|
return c, true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return microsub.Channel{}, false
|
||||||
|
}
|
||||||
|
|
||||||
func (b *memoryBackend) setChannel(channel microsub.Channel) {
|
func (b *memoryBackend) setChannel(channel microsub.Channel) {
|
||||||
b.lock.Lock()
|
b.lock.Lock()
|
||||||
defer b.lock.Unlock()
|
defer b.lock.Unlock()
|
||||||
|
|
||||||
b.Channels[channel.UID] = channel
|
b.Channels[channel.UID] = channel
|
||||||
b.Feeds[channel.UID] = []microsub.Feed{}
|
b.Feeds[channel.UID] = []microsub.Feed{}
|
||||||
b.NextUID++
|
b.NextUID++
|
||||||
|
|
Loading…
Reference in New Issue
Block a user