Procházet zdrojové kódy

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 před 8 roky
rodič
revize
c26b0cdfd1
1 změnil soubory, kde provedl 14 přidání a 0 odebrání
  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
 }