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>
... | ... |
@@ -73,6 +73,17 @@ type memDB struct { |
73 | 73 |
store *memdb.MemDB |
74 | 74 |
} |
75 | 75 |
|
76 |
+// NoSuchContainerError indicates that the container wasn't found in the |
|
77 |
+// database. |
|
78 |
+type NoSuchContainerError struct { |
|
79 |
+ id string |
|
80 |
+} |
|
81 |
+ |
|
82 |
+// Error satisfies the error interface. |
|
83 |
+func (e NoSuchContainerError) Error() string { |
|
84 |
+ return "no such container " + e.id |
|
85 |
+} |
|
86 |
+ |
|
76 | 87 |
// NewViewDB provides the default implementation, with the default schema |
77 | 88 |
func NewViewDB() (ViewDB, error) { |
78 | 89 |
store, err := memdb.NewMemDB(schema) |
... | ... |
@@ -134,6 +145,9 @@ func (v *memdbView) Get(id string) (*Snapshot, error) { |
134 | 134 |
if err != nil { |
135 | 135 |
return nil, err |
136 | 136 |
} |
137 |
+ if s == nil { |
|
138 |
+ return nil, NoSuchContainerError{id: id} |
|
139 |
+ } |
|
137 | 140 |
return v.transform(s.(*Container)), nil |
138 | 141 |
} |
139 | 142 |
|