Fix wrong graphdb refs paths purging
Signed-off-by: Antonio Murdaca <me@runcom.ninja>
This commit is contained in:
parent
504425a9ff
commit
b12971703d
2 changed files with 53 additions and 5 deletions
|
@ -378,12 +378,22 @@ func (db *Database) Purge(id string) (int, error) {
|
||||||
tx.Rollback()
|
tx.Rollback()
|
||||||
return -1, err
|
return -1, err
|
||||||
}
|
}
|
||||||
|
|
||||||
changes, err := rows.RowsAffected()
|
changes, err := rows.RowsAffected()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return -1, err
|
return -1, err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Clear who's using this id as parent
|
||||||
|
refs, err := tx.Exec("DELETE FROM edge WHERE parent_id = ?;", id)
|
||||||
|
if err != nil {
|
||||||
|
tx.Rollback()
|
||||||
|
return -1, err
|
||||||
|
}
|
||||||
|
refsCount, err := refs.RowsAffected()
|
||||||
|
if err != nil {
|
||||||
|
return -1, err
|
||||||
|
}
|
||||||
|
|
||||||
// Delete entity
|
// Delete entity
|
||||||
if _, err := tx.Exec("DELETE FROM entity where id = ?;", id); err != nil {
|
if _, err := tx.Exec("DELETE FROM entity where id = ?;", id); err != nil {
|
||||||
tx.Rollback()
|
tx.Rollback()
|
||||||
|
@ -394,7 +404,7 @@ func (db *Database) Purge(id string) (int, error) {
|
||||||
return -1, err
|
return -1, err
|
||||||
}
|
}
|
||||||
|
|
||||||
return int(changes), nil
|
return int(changes + refsCount), nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// Rename an edge for a given path
|
// Rename an edge for a given path
|
||||||
|
|
|
@ -472,8 +472,8 @@ func TestPurgeId(t *testing.T) {
|
||||||
|
|
||||||
db.Set("/webapp", "1")
|
db.Set("/webapp", "1")
|
||||||
|
|
||||||
if db.Refs("1") != 1 {
|
if c := db.Refs("1"); c != 1 {
|
||||||
t.Fatal("Expect reference count to be 1")
|
t.Fatalf("Expect reference count to be 1, got %d", c)
|
||||||
}
|
}
|
||||||
|
|
||||||
db.Set("/db", "2")
|
db.Set("/db", "2")
|
||||||
|
@ -484,7 +484,45 @@ func TestPurgeId(t *testing.T) {
|
||||||
t.Fatal(err)
|
t.Fatal(err)
|
||||||
}
|
}
|
||||||
if count != 2 {
|
if count != 2 {
|
||||||
t.Fatal("Expected 2 references to be removed")
|
t.Fatalf("Expected 2 references to be removed, got %d", count)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Regression test https://github.com/docker/docker/issues/12334
|
||||||
|
func TestPurgeIdRefPaths(t *testing.T) {
|
||||||
|
db, dbpath := newTestDb(t)
|
||||||
|
defer destroyTestDb(dbpath)
|
||||||
|
|
||||||
|
db.Set("/webapp", "1")
|
||||||
|
db.Set("/db", "2")
|
||||||
|
|
||||||
|
db.Set("/db/webapp", "1")
|
||||||
|
|
||||||
|
if c := db.Refs("1"); c != 2 {
|
||||||
|
t.Fatalf("Expected 2 reference for webapp, got %d", c)
|
||||||
|
}
|
||||||
|
if c := db.Refs("2"); c != 1 {
|
||||||
|
t.Fatalf("Expected 1 reference for db, got %d", c)
|
||||||
|
}
|
||||||
|
|
||||||
|
if rp := db.RefPaths("2"); len(rp) != 1 {
|
||||||
|
t.Fatalf("Expected 1 reference path for db, got %d", len(rp))
|
||||||
|
}
|
||||||
|
|
||||||
|
count, err := db.Purge("2")
|
||||||
|
if err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
if count != 2 {
|
||||||
|
t.Fatalf("Expected 2 rows to be removed, got %d", count)
|
||||||
|
}
|
||||||
|
|
||||||
|
if c := db.Refs("2"); c != 0 {
|
||||||
|
t.Fatalf("Expected 0 reference for db, got %d", c)
|
||||||
|
}
|
||||||
|
if c := db.Refs("1"); c != 1 {
|
||||||
|
t.Fatalf("Expected 1 reference for webapp, got %d", c)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue