|
@@ -84,28 +84,34 @@ func (nDB *NetworkDB) handleTableEvent(tEvent *TableEvent) bool {
|
|
|
return true
|
|
|
}
|
|
|
|
|
|
- if entry, err := nDB.getEntry(tEvent.TableName, tEvent.NetworkID, tEvent.Key); err == nil {
|
|
|
+ e, err := nDB.getEntry(tEvent.TableName, tEvent.NetworkID, tEvent.Key)
|
|
|
+ if err != nil && tEvent.Type == TableEventTypeDelete {
|
|
|
+ // If it is a delete event and we don't have the entry here nothing to do.
|
|
|
+ return false
|
|
|
+ }
|
|
|
+
|
|
|
+ if err == nil {
|
|
|
// We have the latest state. Ignore the event
|
|
|
// since it is stale.
|
|
|
- if entry.ltime >= tEvent.LTime {
|
|
|
+ if e.ltime >= tEvent.LTime {
|
|
|
return false
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- entry := &entry{
|
|
|
+ e = &entry{
|
|
|
ltime: tEvent.LTime,
|
|
|
node: tEvent.NodeName,
|
|
|
value: tEvent.Value,
|
|
|
deleting: tEvent.Type == TableEventTypeDelete,
|
|
|
}
|
|
|
|
|
|
- if entry.deleting {
|
|
|
- entry.deleteTime = time.Now()
|
|
|
+ if e.deleting {
|
|
|
+ e.deleteTime = time.Now()
|
|
|
}
|
|
|
|
|
|
nDB.Lock()
|
|
|
- nDB.indexes[byTable].Insert(fmt.Sprintf("/%s/%s/%s", tEvent.TableName, tEvent.NetworkID, tEvent.Key), entry)
|
|
|
- nDB.indexes[byNetwork].Insert(fmt.Sprintf("/%s/%s/%s", tEvent.NetworkID, tEvent.TableName, tEvent.Key), entry)
|
|
|
+ nDB.indexes[byTable].Insert(fmt.Sprintf("/%s/%s/%s", tEvent.TableName, tEvent.NetworkID, tEvent.Key), e)
|
|
|
+ nDB.indexes[byNetwork].Insert(fmt.Sprintf("/%s/%s/%s", tEvent.NetworkID, tEvent.TableName, tEvent.Key), e)
|
|
|
nDB.Unlock()
|
|
|
|
|
|
var op opType
|