in datasource/mongo/sd/mongo_cacher.go [362:395]
func (c *MongoCacher) buildCache(events []MongoEvent) {
for i, evt := range events {
key := evt.DocumentID
value := c.cache.Get(key)
ok := value != nil
switch evt.Type {
case rmodel.EVT_CREATE, rmodel.EVT_UPDATE:
switch {
case !c.IsReady():
evt.Type = rmodel.EVT_INIT
case !ok && evt.Type != rmodel.EVT_CREATE:
log.Warn(fmt.Sprintf("unexpected %s event! it should be %s key %s",
evt.Type, rmodel.EVT_CREATE, key))
evt.Type = rmodel.EVT_CREATE
case ok && evt.Type != rmodel.EVT_UPDATE:
log.Warn(fmt.Sprintf("unexpected %s event! it should be %s key %s",
evt.Type, rmodel.EVT_UPDATE, key))
evt.Type = rmodel.EVT_UPDATE
}
c.cache.ProcessUpdate(evt)
events[i] = evt
case rmodel.EVT_DELETE:
if !ok {
log.Warn(fmt.Sprintf("unexpected %s event! key %s does not cache",
evt.Type, key))
} else {
evt.Value = value
c.cache.ProcessDelete(evt)
}
events[i] = evt
}
}
}