瀏覽代碼

container: Handle failed memdb lookups

If a container doesn't exist in the memdb, First will return nil, not an
error. This should be checked for before using the result.

Signed-off-by: Aaron Lehmann <aaron.lehmann@docker.com>
Aaron Lehmann 8 年之前
父節點
當前提交
c26b0cdfd1
共有 1 個文件被更改,包括 14 次插入0 次删除
  1. 14 0
      container/view.go

+ 14 - 0
container/view.go

@@ -73,6 +73,17 @@ type memDB struct {
 	store *memdb.MemDB
 }
 
+// NoSuchContainerError indicates that the container wasn't found in the
+// database.
+type NoSuchContainerError struct {
+	id string
+}
+
+// Error satisfies the error interface.
+func (e NoSuchContainerError) Error() string {
+	return "no such container " + e.id
+}
+
 // NewViewDB provides the default implementation, with the default schema
 func NewViewDB() (ViewDB, error) {
 	store, err := memdb.NewMemDB(schema)
@@ -134,6 +145,9 @@ func (v *memdbView) Get(id string) (*Snapshot, error) {
 	if err != nil {
 		return nil, err
 	}
+	if s == nil {
+		return nil, NoSuchContainerError{id: id}
+	}
 	return v.transform(s.(*Container)), nil
 }