Implement since=ID logic in mem cache; add tests; still failing

This commit is contained in:
Philipp Heckel
2022-02-26 20:19:28 -05:00
parent 4af9c07577
commit 8b32cfaaff
5 changed files with 128 additions and 8 deletions

View File

@@ -60,6 +60,19 @@ func (c *memCache) Messages(topic string, since sinceMarker, scheduled bool) ([]
if _, ok := c.messages[topic]; !ok || since.IsNone() {
return make([]*message, 0), nil
}
var messages []*message
if since.IsID() {
messages = c.messagesSinceID(topic, since, scheduled)
} else {
messages = c.messagesSinceTime(topic, since, scheduled)
}
sort.Slice(messages, func(i, j int) bool {
return messages[i].Time < messages[j].Time
})
return messages, nil
}
func (c *memCache) messagesSinceTime(topic string, since sinceMarker, scheduled bool) []*message {
messages := make([]*message, 0)
for _, m := range c.messages[topic] {
_, messageScheduled := c.scheduled[m.ID]
@@ -68,10 +81,40 @@ func (c *memCache) Messages(topic string, since sinceMarker, scheduled bool) ([]
messages = append(messages, m)
}
}
sort.Slice(messages, func(i, j int) bool {
return messages[i].Time < messages[j].Time
})
return messages, nil
return messages
}
func (c *memCache) messagesSinceID(topic string, since sinceMarker, scheduled bool) []*message {
messages := make([]*message, 0)
foundID := false
for _, m := range c.messages[topic] {
_, messageScheduled := c.scheduled[m.ID]
if foundID {
if !messageScheduled || scheduled {
messages = append(messages, m)
}
} else if m.ID == since.ID() {
foundID = true
}
}
// Return all messages if no message was found
if !foundID {
for _, m := range c.messages[topic] {
_, messageScheduled := c.scheduled[m.ID]
if !messageScheduled || scheduled {
messages = append(messages, m)
}
}
}
return messages
}
func (c *memCache) maybeAppendMessage(messages []*message, m *message, since sinceMarker, scheduled bool) {
_, messageScheduled := c.scheduled[m.ID]
include := m.Time >= since.Time().Unix() && (!messageScheduled || scheduled)
if include {
messages = append(messages, m)
}
}
func (c *memCache) MessagesDue() ([]*message, error) {