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.
@@ -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
}
