remove way references from diff cache

master
Oliver Tonnhofer 2013-08-05 12:05:15 +02:00
parent fedb2a8914
commit 639c206b16
2 changed files with 9 additions and 4 deletions

View File

@ -74,7 +74,7 @@ func (d *Deleter) deleteRelation(id int64) {
}
}
func (d *Deleter) deleteWay(id int64) {
func (d *Deleter) deleteWay(id int64, forMod bool) {
elem, err := d.osmCache.Ways.GetWay(id)
if err != nil {
if err == cache.NotFound {
@ -96,6 +96,11 @@ func (d *Deleter) deleteWay(id int64) {
d.delDb.Delete(m.Table.Name, elem.Id)
deleted = true
}
if deleted && !forMod {
for _, n := range elem.Refs {
d.diffCache.Coords.DeleteRef(n, id)
}
}
if deleted && d.expireTiles != nil {
err := d.osmCache.Coords.FillWay(elem)
if err != nil {
@ -138,7 +143,7 @@ func (d *Deleter) Delete(delElem parser.DiffElem) {
if delElem.Rel != nil {
d.deleteRelation(delElem.Rel.Id)
} else if delElem.Way != nil {
d.deleteWay(delElem.Way.Id)
d.deleteWay(delElem.Way.Id, false)
if delElem.Mod {
dependers := d.diffCache.Ways.Get(delElem.Way.Id)
@ -151,7 +156,7 @@ func (d *Deleter) Delete(delElem parser.DiffElem) {
if delElem.Mod {
dependers := d.diffCache.Coords.Get(delElem.Node.Id)
for _, way := range dependers {
d.deleteWay(way)
d.deleteWay(way, true)
dependers := d.diffCache.Ways.Get(way)
for _, rel := range dependers {
d.deleteRelation(rel)

View File

@ -257,7 +257,7 @@ def test_node_way_ref_after_delete_2():
"""Nodes does not referece deleted way"""
data = cache_query(nodes=[20001, 20002], deps=True)
assert 'ways' not in data['nodes']['20001']
assert '20002' not in data['nodes']
assert data['nodes']['20002'] == None
assert query_row(db_conf, 'osm_roads', 20001) == None
assert query_row(db_conf, 'osm_barrierpoints', 20001)['type'] == 'block'