storage: flush/sync contents to disk on file close

Behavior controlled by configuration (default=off)
It is a trade-off between performance and consistency.

References:
[1] https://github.com/golang/go/issues/20599

Signed-off-by: Ramkumar Chinchani <rchincha@cisco.com>
This commit is contained in:
Ramkumar Chinchani
2022-01-21 04:11:44 +00:00
committed by Ramkumar Chinchani
parent c73e71b018
commit d2aa016cdb
20 changed files with 621 additions and 113 deletions
+3 -3
View File
@@ -123,7 +123,7 @@ func TestImageFormat(t *testing.T) {
dbDir := "../../../../test/data"
metrics := monitoring.NewMetricsServer(false, log)
defaultStore := storage.NewImageStore(dbDir, false, false, log, metrics)
defaultStore := storage.NewImageStore(dbDir, false, false, false, log, metrics)
storeController := storage.StoreController{DefaultStore: defaultStore}
olu := common.NewOciLayoutUtils(storeController, log)
@@ -411,9 +411,9 @@ func TestUtilsMethod(t *testing.T) {
defer os.RemoveAll(subRootDir)
metrics := monitoring.NewMetricsServer(false, log)
defaultStore := storage.NewImageStore(rootDir, false, false, log, metrics)
defaultStore := storage.NewImageStore(rootDir, false, false, false, log, metrics)
subStore := storage.NewImageStore(subRootDir, false, false, log, metrics)
subStore := storage.NewImageStore(subRootDir, false, false, false, log, metrics)
subStoreMap := make(map[string]storage.ImageStore)
+4 -4
View File
@@ -90,7 +90,7 @@ func testSetup() error {
log := log.NewLogger("debug", "")
metrics := monitoring.NewMetricsServer(false, log)
storeController := storage.StoreController{DefaultStore: storage.NewImageStore(dir, false, false, log, metrics)}
storeController := storage.StoreController{DefaultStore: storage.NewImageStore(dir, false, false, false, log, metrics)}
layoutUtils := common.NewOciLayoutUtils(storeController, log)
@@ -347,11 +347,11 @@ func TestMultipleStoragePath(t *testing.T) {
metrics := monitoring.NewMetricsServer(false, log)
// Create ImageStore
firstStore := storage.NewImageStore(firstRootDir, false, false, log, metrics)
firstStore := storage.NewImageStore(firstRootDir, false, false, false, log, metrics)
secondStore := storage.NewImageStore(secondRootDir, false, false, log, metrics)
secondStore := storage.NewImageStore(secondRootDir, false, false, false, log, metrics)
thirdStore := storage.NewImageStore(thirdRootDir, false, false, log, metrics)
thirdStore := storage.NewImageStore(thirdRootDir, false, false, false, log, metrics)
storeController := storage.StoreController{}
+3 -1
View File
@@ -97,7 +97,9 @@ func testSetup() error {
log := log.NewLogger("debug", "")
metrics := monitoring.NewMetricsServer(false, log)
storeController := storage.StoreController{DefaultStore: storage.NewImageStore(rootDir, false, false, log, metrics)}
storeController := storage.StoreController{
DefaultStore: storage.NewImageStore(rootDir, false, false, false, log, metrics),
}
digestInfo = digestinfo.NewDigestInfo(storeController, log)
+2 -2
View File
@@ -268,7 +268,7 @@ func TestSyncInternal(t *testing.T) {
log := log.Logger{Logger: zerolog.New(os.Stdout)}
metrics := monitoring.NewMetricsServer(false, log)
imageStore := storage.NewImageStore(storageDir, false, false, log, metrics)
imageStore := storage.NewImageStore(storageDir, false, false, false, log, metrics)
storeController := storage.StoreController{}
storeController.DefaultStore = imageStore
@@ -289,7 +289,7 @@ func TestSyncInternal(t *testing.T) {
panic(err)
}
testImageStore := storage.NewImageStore(testRootDir, false, false, log, metrics)
testImageStore := storage.NewImageStore(testRootDir, false, false, false, log, metrics)
manifestContent, _, _, err := testImageStore.GetImageManifest(testImage, testImageTag)
So(err, ShouldBeNil)
+1 -1
View File
@@ -442,7 +442,7 @@ func pushSyncedLocalImage(repo, tag, localCachePath string,
imageStore := storeController.GetImageStore(repo)
metrics := monitoring.NewMetricsServer(false, log)
cacheImageStore := storage.NewImageStore(localCachePath, false, false, log, metrics)
cacheImageStore := storage.NewImageStore(localCachePath, false, false, false, log, metrics)
manifestContent, _, _, err := cacheImageStore.GetImageManifest(repo, tag)
if err != nil {