These parts were flagged by my IDE, complaining about resources not being
closed properly. These code-paths open a bolt DB (which includes opening
the DB file, and acquiring a advisory lock on some file-descriptors).
This _probably_ is mostly cleanliness, as (AFAICS) all code paths leading
to an error would be in the daemon startup, and make the daemon exit, and
BoltDB should handle those OK, but probably won't do harm either to
explicitly close.
Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
| ... | ... |
@@ -60,12 +60,17 @@ type snapshotter struct {
|
| 60 | 60 |
} |
| 61 | 61 |
|
| 62 | 62 |
// NewSnapshotter creates a new snapshotter |
| 63 |
-func NewSnapshotter(opt Opt, prevLM leases.Manager, ns string) (snapshot.Snapshotter, *leaseutil.Manager, error) {
|
|
| 63 |
+func NewSnapshotter(opt Opt, prevLM leases.Manager, ns string) (_ snapshot.Snapshotter, _ *leaseutil.Manager, retErr error) {
|
|
| 64 | 64 |
dbPath := filepath.Join(opt.Root, "snapshots.db") |
| 65 | 65 |
db, err := bolt.Open(dbPath, 0o600, nil) |
| 66 | 66 |
if err != nil {
|
| 67 | 67 |
return nil, nil, errors.Wrapf(err, "failed to open database file %s", dbPath) |
| 68 | 68 |
} |
| 69 |
+ defer func() {
|
|
| 70 |
+ if retErr != nil {
|
|
| 71 |
+ _ = db.Close() |
|
| 72 |
+ } |
|
| 73 |
+ }() |
|
| 69 | 74 |
|
| 70 | 75 |
reg, ok := opt.LayerStore.(graphIDRegistrar) |
| 71 | 76 |
if !ok {
|
| ... | ... |
@@ -82,7 +82,7 @@ func getTraceExporter(ctx context.Context) trace.SpanExporter {
|
| 82 | 82 |
return tc |
| 83 | 83 |
} |
| 84 | 84 |
|
| 85 |
-func newSnapshotterController(ctx context.Context, rt http.RoundTripper, opt Opt) (*control.Controller, error) {
|
|
| 85 |
+func newSnapshotterController(ctx context.Context, rt http.RoundTripper, opt Opt) (_ *control.Controller, retErr error) {
|
|
| 86 | 86 |
if err := os.MkdirAll(opt.Root, 0o711); err != nil {
|
| 87 | 87 |
return nil, err |
| 88 | 88 |
} |
| ... | ... |
@@ -91,11 +91,21 @@ func newSnapshotterController(ctx context.Context, rt http.RoundTripper, opt Opt |
| 91 | 91 |
if err != nil {
|
| 92 | 92 |
return nil, err |
| 93 | 93 |
} |
| 94 |
+ defer func() {
|
|
| 95 |
+ if retErr != nil {
|
|
| 96 |
+ _ = historyDB.Close() |
|
| 97 |
+ } |
|
| 98 |
+ }() |
|
| 94 | 99 |
|
| 95 | 100 |
cacheStorage, err := bboltcachestorage.NewStore(filepath.Join(opt.Root, "cache.db")) |
| 96 | 101 |
if err != nil {
|
| 97 | 102 |
return nil, err |
| 98 | 103 |
} |
| 104 |
+ defer func() {
|
|
| 105 |
+ if retErr != nil {
|
|
| 106 |
+ _ = cacheStorage.Close() |
|
| 107 |
+ } |
|
| 108 |
+ }() |
|
| 99 | 109 |
|
| 100 | 110 |
nc := netproviders.Opt{
|
| 101 | 111 |
Mode: "host", |
| ... | ... |
@@ -234,7 +244,7 @@ func openHistoryDB(root string, fn string, cfg *config.BuilderHistoryConfig) (*b |
| 234 | 234 |
return db, conf, nil |
| 235 | 235 |
} |
| 236 | 236 |
|
| 237 |
-func newGraphDriverController(ctx context.Context, rt http.RoundTripper, opt Opt) (*control.Controller, error) {
|
|
| 237 |
+func newGraphDriverController(ctx context.Context, rt http.RoundTripper, opt Opt) (_ *control.Controller, retErr error) {
|
|
| 238 | 238 |
if err := os.MkdirAll(opt.Root, 0o711); err != nil {
|
| 239 | 239 |
return nil, err |
| 240 | 240 |
} |
| ... | ... |
@@ -272,6 +282,11 @@ func newGraphDriverController(ctx context.Context, rt http.RoundTripper, opt Opt |
| 272 | 272 |
if err != nil {
|
| 273 | 273 |
return nil, errors.WithStack(err) |
| 274 | 274 |
} |
| 275 |
+ defer func() {
|
|
| 276 |
+ if retErr != nil {
|
|
| 277 |
+ _ = db.Close() |
|
| 278 |
+ } |
|
| 279 |
+ }() |
|
| 275 | 280 |
|
| 276 | 281 |
mdb := ctdmetadata.NewDB(db, innerStore, map[string]snapshots.Snapshotter{})
|
| 277 | 282 |
|
| ... | ... |
@@ -286,6 +301,11 @@ func newGraphDriverController(ctx context.Context, rt http.RoundTripper, opt Opt |
| 286 | 286 |
if err != nil {
|
| 287 | 287 |
return nil, err |
| 288 | 288 |
} |
| 289 |
+ defer func() {
|
|
| 290 |
+ if retErr != nil {
|
|
| 291 |
+ _ = snapshotter.Close() |
|
| 292 |
+ } |
|
| 293 |
+ }() |
|
| 289 | 294 |
|
| 290 | 295 |
if err := cache.MigrateV2(context.Background(), filepath.Join(root, "metadata.db"), filepath.Join(root, "metadata_v2.db"), store, snapshotter, lm); err != nil {
|
| 291 | 296 |
return nil, err |
| ... | ... |
@@ -295,6 +315,11 @@ func newGraphDriverController(ctx context.Context, rt http.RoundTripper, opt Opt |
| 295 | 295 |
if err != nil {
|
| 296 | 296 |
return nil, err |
| 297 | 297 |
} |
| 298 |
+ defer func() {
|
|
| 299 |
+ if retErr != nil {
|
|
| 300 |
+ _ = md.Close() |
|
| 301 |
+ } |
|
| 302 |
+ }() |
|
| 298 | 303 |
|
| 299 | 304 |
layerGetter, ok := snapshotter.(imagerefchecker.LayerGetter) |
| 300 | 305 |
if !ok {
|
| ... | ... |
@@ -380,11 +405,21 @@ func newGraphDriverController(ctx context.Context, rt http.RoundTripper, opt Opt |
| 380 | 380 |
if err != nil {
|
| 381 | 381 |
return nil, err |
| 382 | 382 |
} |
| 383 |
+ defer func() {
|
|
| 384 |
+ if retErr != nil {
|
|
| 385 |
+ _ = cacheStorage.Close() |
|
| 386 |
+ } |
|
| 387 |
+ }() |
|
| 383 | 388 |
|
| 384 | 389 |
historyDB, historyConf, err := openHistoryDB(opt.Root, "history.db", opt.BuilderConfig.History) |
| 385 | 390 |
if err != nil {
|
| 386 | 391 |
return nil, err |
| 387 | 392 |
} |
| 393 |
+ defer func() {
|
|
| 394 |
+ if retErr != nil {
|
|
| 395 |
+ _ = historyDB.Close() |
|
| 396 |
+ } |
|
| 397 |
+ }() |
|
| 388 | 398 |
|
| 389 | 399 |
gcPolicy, err := getGCPolicy(opt.BuilderConfig, root) |
| 390 | 400 |
if err != nil {
|