From 7027e8862a4b40042ab782d6057e04f7fb257023 Mon Sep 17 00:00:00 2001 From: Derek McGowan Date: Thu, 11 May 2017 15:55:47 -0700 Subject: [PATCH] overlay: call rollback on commit error Rollback was not being called when the function was called with a key which does not exist. This failure to call rollback kept the database open and caused all new requests to block. Signed-off-by: Derek McGowan --- snapshot/overlay/overlay.go | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/snapshot/overlay/overlay.go b/snapshot/overlay/overlay.go index 7aaa92026..5a17a60bc 100644 --- a/snapshot/overlay/overlay.go +++ b/snapshot/overlay/overlay.go @@ -152,6 +152,14 @@ func (o *snapshotter) Commit(ctx context.Context, name, key string) error { return err } + defer func() { + if err != nil { + if rerr := t.Rollback(); rerr != nil { + log.G(ctx).WithError(rerr).Warn("Failure rolling back transaction") + } + } + }() + // grab the existing id id, _, _, err := storage.GetInfo(ctx, key) if err != nil { @@ -163,10 +171,7 @@ func (o *snapshotter) Commit(ctx context.Context, name, key string) error { return err } - if _, err := storage.CommitActive(ctx, key, name, snapshot.Usage(usage)); err != nil { - if rerr := t.Rollback(); rerr != nil { - log.G(ctx).WithError(rerr).Warn("Failure rolling back transaction") - } + if _, err = storage.CommitActive(ctx, key, name, snapshot.Usage(usage)); err != nil { return errors.Wrap(err, "failed to commit snapshot") } return t.Commit()