zotregistry.io/zot@v1.4.4-0.20231124084042-02a8ed785457/pkg/storage/cache.go (about)

     1  package storage
     2  
     3  import (
     4  	zerr "zotregistry.io/zot/errors"
     5  	"zotregistry.io/zot/pkg/api/config"
     6  	zlog "zotregistry.io/zot/pkg/log"
     7  	"zotregistry.io/zot/pkg/storage/cache"
     8  	"zotregistry.io/zot/pkg/storage/constants"
     9  )
    10  
    11  func CreateCacheDatabaseDriver(storageConfig config.StorageConfig, log zlog.Logger) (cache.Cache, error) {
    12  	if !storageConfig.Dedupe && storageConfig.StorageDriver == nil {
    13  		return nil, nil
    14  	}
    15  
    16  	// local cache
    17  	if !storageConfig.RemoteCache {
    18  		params := cache.BoltDBDriverParameters{}
    19  		params.RootDir = storageConfig.RootDirectory
    20  		params.Name = constants.BoltdbName
    21  		params.UseRelPaths = getUseRelPaths(&storageConfig)
    22  
    23  		return Create("boltdb", params, log)
    24  	}
    25  
    26  	// remote cache
    27  	if storageConfig.CacheDriver != nil {
    28  		name, ok := storageConfig.CacheDriver["name"].(string)
    29  		if !ok {
    30  			log.Warn().Msg("remote cache driver name missing!")
    31  
    32  			return nil, nil
    33  		}
    34  
    35  		if name != constants.DynamoDBDriverName {
    36  			log.Warn().Str("driver", name).Msg("remote cache driver unsupported!")
    37  
    38  			return nil, nil
    39  		}
    40  
    41  		// dynamodb
    42  		dynamoParams := cache.DynamoDBDriverParameters{}
    43  		dynamoParams.Endpoint, _ = storageConfig.CacheDriver["endpoint"].(string)
    44  		dynamoParams.Region, _ = storageConfig.CacheDriver["region"].(string)
    45  		dynamoParams.TableName, _ = storageConfig.CacheDriver["cachetablename"].(string)
    46  
    47  		return Create("dynamodb", dynamoParams, log)
    48  	}
    49  
    50  	return nil, nil
    51  }
    52  
    53  func Create(dbtype string, parameters interface{}, log zlog.Logger) (cache.Cache, error) {
    54  	switch dbtype {
    55  	case "boltdb":
    56  		{
    57  			return cache.NewBoltDBCache(parameters, log)
    58  		}
    59  	case "dynamodb":
    60  		{
    61  			return cache.NewDynamoDBCache(parameters, log)
    62  		}
    63  	default:
    64  		{
    65  			return nil, zerr.ErrBadConfig
    66  		}
    67  	}
    68  }
    69  
    70  func getUseRelPaths(storageConfig *config.StorageConfig) bool {
    71  	return storageConfig.StorageDriver == nil
    72  }