Implement since=ID logic in mem cache; add tests; still failing
This commit is contained in:
@@ -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) {
|
||||
|
||||
Reference in New Issue
Block a user