From 9ee57093f3a53110689fd38295747ce8c47a634e Mon Sep 17 00:00:00 2001 From: Vladimir Shushlin Date: Thu, 10 Feb 2022 17:58:22 +0300 Subject: WIP --- internal/config/config.go | 28 ++++++++++++++++++---------- internal/config/flags.go | 5 +++++ internal/vfs/zip/vfs.go | 20 ++++---------------- 3 files changed, 27 insertions(+), 26 deletions(-) diff --git a/internal/config/config.go b/internal/config/config.go index 3bb7b126..aafe0787 100644 --- a/internal/config/config.go +++ b/internal/config/config.go @@ -123,11 +123,15 @@ type TLS struct { // ZipServing groups settings to be used by the zip VFS opening and caching type ZipServing struct { - ExpirationInterval time.Duration - CleanupInterval time.Duration - RefreshInterval time.Duration - OpenTimeout time.Duration - AllowedPaths []string + ExpirationInterval time.Duration + CleanupInterval time.Duration + RefreshInterval time.Duration + FileOffsetCacheMaxSize int64 + FileOffsetCacheExpiration time.Duration + ReadLinkOffsetCacheMaxSize int64 + ReadLinkOffsetCacheExpiration time.Duration + OpenTimeout time.Duration + AllowedPaths []string } func internalGitlabServerFromFlags() string { @@ -221,11 +225,15 @@ func loadConfig() (*Config, error) { MaxVersion: tls.AllTLSVersions[*tlsMaxVersion], }, Zip: ZipServing{ - ExpirationInterval: *zipCacheExpiration, - CleanupInterval: *zipCacheCleanup, - RefreshInterval: *zipCacheRefresh, - OpenTimeout: *zipOpenTimeout, - AllowedPaths: []string{*pagesRoot}, + ExpirationInterval: *zipCacheExpiration, + CleanupInterval: *zipCacheCleanup, + RefreshInterval: *zipCacheRefresh, + FileOffsetCacheMaxSize: int64(*zipFileOffsetCacheMaxSize), + FileOffsetCacheExpiration: *zipFileOffsetCacheExpiration, + ReadLinkOffsetCacheMaxSize: int64(*zipReadLinkOffsetCacheMaxSize), + ReadLinkOffsetCacheExpiration: *zipReadLinkOffsetCacheExpiration, + OpenTimeout: *zipOpenTimeout, + AllowedPaths: []string{*pagesRoot}, }, // Actual listener pointers will be populated in appMain. We populate the diff --git a/internal/config/flags.go b/internal/config/flags.go index 93228827..054087ca 100644 --- a/internal/config/flags.go +++ b/internal/config/flags.go @@ -62,6 +62,11 @@ var ( zipCacheRefresh = flag.Duration("zip-cache-refresh", 30*time.Second, "Zip serving archive cache refresh interval") zipOpenTimeout = flag.Duration("zip-open-timeout", 30*time.Second, "Zip archive open timeout") + zipFileOffsetCacheMaxSize = flag.Int("zip-file-offset-cache-max-size", 50000, "TODO") + zipFileOffsetCacheExpiration = flag.Duration("zip-file-offset-expiration", time.Hour, "TODO") + zipReadLinkOffsetCacheMaxSize = flag.Int("zip-read-link-offset-cache-max-size", 10000, "TODO") + zipReadLinkOffsetCacheExpiration = flag.Duration("zip-read-link-offset-expiration", time.Hour, "TODO") + disableCrossOriginRequests = flag.Bool("disable-cross-origin-requests", false, "Disable cross-origin requests") showVersion = flag.Bool("version", false, "Show version") diff --git a/internal/vfs/zip/vfs.go b/internal/vfs/zip/vfs.go index d0608c81..ea237fd1 100644 --- a/internal/vfs/zip/vfs.go +++ b/internal/vfs/zip/vfs.go @@ -19,18 +19,6 @@ import ( "gitlab.com/gitlab-org/gitlab-pages/metrics" ) -const ( - // we assume that each item costs around 100 bytes - // this gives around 5MB of raw memory needed without acceleration structures - defaultDataOffsetItems = 50000 - defaultDataOffsetExpirationInterval = time.Hour - - // we assume that each item costs around 200 bytes - // this gives around 2MB of raw memory needed without acceleration structures - defaultReadlinkItems = 10000 - defaultReadlinkExpirationInterval = time.Hour -) - var ( errAlreadyCached = errors.New("archive already cached") errMissingCacheKey = errors.New("missing cache key") @@ -87,15 +75,15 @@ func New(cfg *config.ZipServing) vfs.VFS { // TODO: To be removed with https://gitlab.com/gitlab-org/gitlab-pages/-/issues/480 zipVFS.dataOffsetCache = lru.New( "data-offset", - lru.WithMaxSize(defaultDataOffsetItems), - lru.WithExpirationInterval(defaultDataOffsetExpirationInterval), + lru.WithMaxSize(cfg.FileOffsetCacheMaxSize), + lru.WithExpirationInterval(cfg.FileOffsetCacheExpiration), lru.WithCachedEntriesMetric(metrics.ZipCachedEntries), lru.WithCachedRequestsMetric(metrics.ZipCacheRequests), ) zipVFS.readlinkCache = lru.New( "readlink", - lru.WithMaxSize(defaultReadlinkItems), - lru.WithExpirationInterval(defaultReadlinkExpirationInterval), + lru.WithMaxSize(cfg.ReadLinkOffsetCacheMaxSize), + lru.WithExpirationInterval(cfg.ReadLinkOffsetCacheExpiration), lru.WithCachedEntriesMetric(metrics.ZipCachedEntries), lru.WithCachedRequestsMetric(metrics.ZipCacheRequests), ) -- cgit v1.2.3