From 255329bc137586afc2c4b0d3b188ec0159c3fc40 Mon Sep 17 00:00:00 2001 From: Bolek Kulbabinski <1416262+bolekk@users.noreply.github.com> Date: Sat, 5 Sep 2026 20:58:35 -0700 Subject: [PATCH 1/2] [CRE] OrgResolver cache Cache owner->orgID mappings in Postgres (CRE-5348). CacheEnabled now defaults to true. Requires chainlink-common with the merged caching OrgResolver refactor (#2342). --- .changeset/org-resolver-cache.md | 5 ++ core/config/cre_config.go | 2 + core/config/docs/core.toml | 2 + core/config/toml/types.go | 9 +++ core/services/chainlink/config_cre.go | 14 ++++- core/services/chainlink/config_test.go | 1 + .../testdata/config-empty-effective.toml | 1 + .../chainlink/testdata/config-full.toml | 1 + .../config-multi-chain-effective.toml | 1 + core/services/cre/cre.go | 25 +++++++-- core/services/cre/org_resolver_store.go | 56 +++++++++++++++++++ .../migrations/0307_org_resolver_cache.sql | 11 ++++ .../testdata/config-empty-effective.toml | 1 + core/web/resolver/testdata/config-full.toml | 1 + .../config-multi-chain-effective.toml | 1 + docs/CONFIG.md | 7 +++ .../scripts/config/merge_raw_configs.txtar | 1 + testdata/scripts/node/validate/default.txtar | 1 + .../node/validate/defaults-override.txtar | 1 + .../disk-based-logging-disabled.txtar | 1 + .../validate/disk-based-logging-no-dir.txtar | 1 + .../node/validate/disk-based-logging.txtar | 1 + .../node/validate/fallback-override.txtar | 1 + .../node/validate/invalid-ocr-p2p.txtar | 1 + testdata/scripts/node/validate/invalid.txtar | 1 + testdata/scripts/node/validate/valid.txtar | 1 + testdata/scripts/node/validate/warnings.txtar | 1 + 27 files changed, 142 insertions(+), 7 deletions(-) create mode 100644 .changeset/org-resolver-cache.md create mode 100644 core/services/cre/org_resolver_store.go create mode 100644 core/store/migrate/migrations/0307_org_resolver_cache.sql diff --git a/.changeset/org-resolver-cache.md b/.changeset/org-resolver-cache.md new file mode 100644 index 00000000000..72ff190cb69 --- /dev/null +++ b/.changeset/org-resolver-cache.md @@ -0,0 +1,5 @@ +--- +"chainlink": minor +--- + +#added Durable caching of OrgResolver owner->orgID mappings (backed by Postgres, `CRE.Linking.CacheEnabled`, enabled by default). diff --git a/core/config/cre_config.go b/core/config/cre_config.go index 229bd4648a8..06f422061d5 100644 --- a/core/config/cre_config.go +++ b/core/config/cre_config.go @@ -40,4 +40,6 @@ type CRELinking interface { TLSEnabled() bool // RequestTimeout bounds each organization lookup against the linking service. RequestTimeout() time.Duration + // CacheEnabled turns on durable caching of owner->orgID mappings (backed by Postgres). + CacheEnabled() bool } diff --git a/core/config/docs/core.toml b/core/config/docs/core.toml index e2292d1ff40..821ae44be8b 100644 --- a/core/config/docs/core.toml +++ b/core/config/docs/core.toml @@ -997,6 +997,8 @@ URL = "" # Default TLSEnabled = true # Default # RequestTimeout bounds each organization lookup against the linking service. RequestTimeout = '2s' # Default +# CacheEnabled turns on durable Postgres-backed caching of owner->orgID mappings. +CacheEnabled = true # Default # Billing holds settings for connecting to the billing service. [Billing] diff --git a/core/config/toml/types.go b/core/config/toml/types.go index 75629c5610c..62f6f10c65a 100644 --- a/core/config/toml/types.go +++ b/core/config/toml/types.go @@ -2058,6 +2058,8 @@ type LinkingConfig struct { URL *string `toml:",omitempty"` TLSEnabled *bool `toml:",omitempty"` RequestTimeout *commonconfig.Duration `toml:",omitempty"` + // CacheEnabled turns on durable Postgres-backed caching of owner->orgID mappings. + CacheEnabled *bool `toml:",omitempty"` } func (c *CreConfig) setFrom(f *CreConfig) { @@ -2105,6 +2107,9 @@ func (c *CreConfig) setFrom(f *CreConfig) { if v := f.Linking.RequestTimeout; v != nil { c.Linking.RequestTimeout = v } + if v := f.Linking.CacheEnabled; v != nil { + c.Linking.CacheEnabled = v + } } if f.DebugMode != nil { @@ -2158,6 +2163,10 @@ func (l *LinkingConfig) ValidateConfig() error { } else if l.RequestTimeout.Duration() <= 0 { return configutils.ErrInvalid{Name: "RequestTimeout", Value: l.RequestTimeout.String(), Msg: "must be positive"} } + if l.CacheEnabled == nil { + val := true + l.CacheEnabled = &val + } return nil } diff --git a/core/services/chainlink/config_cre.go b/core/services/chainlink/config_cre.go index f66c83b8e46..acccfe34a99 100644 --- a/core/services/chainlink/config_cre.go +++ b/core/services/chainlink/config_cre.go @@ -83,6 +83,7 @@ type linkingConfig struct { url string tlsEnabled bool requestTimeout time.Duration + cacheEnabled bool } func (l *linkingConfig) URL() string { @@ -97,9 +98,13 @@ func (l *linkingConfig) RequestTimeout() time.Duration { return l.requestTimeout } +func (l *linkingConfig) CacheEnabled() bool { + return l.cacheEnabled +} + func (c *creConfig) Linking() config.CRELinking { if c.c.Linking == nil { - return &linkingConfig{url: "", tlsEnabled: true, requestTimeout: defaultLinkingRequestTimeout} + return &linkingConfig{url: "", tlsEnabled: true, requestTimeout: defaultLinkingRequestTimeout, cacheEnabled: true} } url := "" @@ -117,7 +122,12 @@ func (c *creConfig) Linking() config.CRELinking { requestTimeout = c.c.Linking.RequestTimeout.Duration() } - return &linkingConfig{url: url, tlsEnabled: tlsEnabled, requestTimeout: requestTimeout} + cacheEnabled := true // default + if c.c.Linking.CacheEnabled != nil { + cacheEnabled = *c.c.Linking.CacheEnabled + } + + return &linkingConfig{url: url, tlsEnabled: tlsEnabled, requestTimeout: requestTimeout, cacheEnabled: cacheEnabled} } type confidentialRelayConfig struct { diff --git a/core/services/chainlink/config_test.go b/core/services/chainlink/config_test.go index 2d0eca02159..23345a5ab14 100644 --- a/core/services/chainlink/config_test.go +++ b/core/services/chainlink/config_test.go @@ -618,6 +618,7 @@ func TestConfig_Marshal(t *testing.T) { URL: new(""), TLSEnabled: new(true), RequestTimeout: commoncfg.MustNewDuration(2 * time.Second), + CacheEnabled: new(true), }, ConfidentialRelay: &toml.ConfidentialRelayConfig{ Enabled: new(bool), diff --git a/core/services/chainlink/testdata/config-empty-effective.toml b/core/services/chainlink/testdata/config-empty-effective.toml index 44af3e15812..4f78ffbe3cf 100644 --- a/core/services/chainlink/testdata/config-empty-effective.toml +++ b/core/services/chainlink/testdata/config-empty-effective.toml @@ -407,6 +407,7 @@ URL = '' URL = '' TLSEnabled = true RequestTimeout = '2s' +CacheEnabled = true [CRE.ConfidentialRelay] Enabled = false diff --git a/core/services/chainlink/testdata/config-full.toml b/core/services/chainlink/testdata/config-full.toml index bc185b6b2e9..529da791d9c 100644 --- a/core/services/chainlink/testdata/config-full.toml +++ b/core/services/chainlink/testdata/config-full.toml @@ -446,6 +446,7 @@ URL = 'https://workflow.fetcher.url' URL = '' TLSEnabled = true RequestTimeout = '2s' +CacheEnabled = true [CRE.ConfidentialRelay] Enabled = false diff --git a/core/services/chainlink/testdata/config-multi-chain-effective.toml b/core/services/chainlink/testdata/config-multi-chain-effective.toml index 8a705a5cf14..5bd46405d41 100644 --- a/core/services/chainlink/testdata/config-multi-chain-effective.toml +++ b/core/services/chainlink/testdata/config-multi-chain-effective.toml @@ -407,6 +407,7 @@ URL = '' URL = '' TLSEnabled = true RequestTimeout = '2s' +CacheEnabled = true [CRE.ConfidentialRelay] Enabled = false diff --git a/core/services/cre/cre.go b/core/services/cre/cre.go index ba1b9f2d2f7..23987f52175 100644 --- a/core/services/cre/cre.go +++ b/core/services/cre/cre.go @@ -240,13 +240,12 @@ func (s *Services) newSubservices( if cfg.CRE().Linking().URL() != "" { lggr.Debugw("Creating OrgResolver") - inner, ierr := newOrgResolver(cfg, capCfg, opts, lggr) + resolver, ierr := newOrgResolver(cfg, capCfg, opts, ds, lggr) if ierr != nil { return nil, fmt.Errorf("could not create org resolver: %w", ierr) } - fallbackResolver := orgresolver.NewOrgResolverWithFallback(inner, lggr) - s.OrgResolver = fallbackResolver - srvs = append(srvs, fallbackResolver) + s.OrgResolver = resolver + srvs = append(srvs, resolver) } else { lggr.Warn("Skipping orgResolver, no linking service configured") } @@ -631,6 +630,7 @@ func newOrgResolver( cfg Config, capCfg config.Capabilities, opts Opts, + ds sqlutil.DataSource, lggr logger.Logger, ) (orgresolver.OrgResolver, error) { var wrChainDetails chainselectors.ChainDetails @@ -661,7 +661,22 @@ func newOrgResolver( return nil, fmt.Errorf("failed to create org resolver: %w", err) } - return resolver, nil + var cache orgresolver.Cache + if cfg.CRE().Linking().CacheEnabled() { + cache = NewOrgResolverStore(ds) + } else { + cache = orgresolver.NewInMemoryCache() + } + + cachingResolver, err := orgresolver.NewCachingResolver(resolver, orgresolver.CachingResolverConfig{ + Cache: cache, + Meter: opts.Meter, + }, lggr) + if err != nil { + return nil, fmt.Errorf("failed to create caching org resolver: %w", err) + } + + return cachingResolver, nil } func newBillingClient(lggr logger.Logger, cfg Config, opts Opts) (metering.BillingClient, error) { diff --git a/core/services/cre/org_resolver_store.go b/core/services/cre/org_resolver_store.go new file mode 100644 index 00000000000..41839efdba3 --- /dev/null +++ b/core/services/cre/org_resolver_store.go @@ -0,0 +1,56 @@ +package cre + +import ( + "context" + "database/sql" + "errors" + "fmt" + "time" + + "github.com/smartcontractkit/chainlink-common/pkg/services/orgresolver" + "github.com/smartcontractkit/chainlink-common/pkg/sqlutil" +) + +// orgResolverCacheTable is the durable owner->orgID mapping table backing the +// OrgResolver cache. See migration 0307_org_resolver_cache.sql. +const orgResolverCacheTable = "cre.org_resolver_cache" + +// orgResolverStore is a Postgres-backed implementation of orgresolver.Cache. +type orgResolverStore struct { + ds sqlutil.DataSource +} + +// NewOrgResolverStore creates a durable cache store for the OrgResolver. +func NewOrgResolverStore(ds sqlutil.DataSource) *orgResolverStore { + return &orgResolverStore{ds: ds} +} + +// Get returns the cached entry for owner. ok is false if no entry exists. +func (s *orgResolverStore) Get(ctx context.Context, owner string) (orgresolver.CacheEntry, bool, error) { + const q = `SELECT org_id, updated_at FROM ` + orgResolverCacheTable + ` WHERE workflow_owner = $1` + var row struct { + OrgID string `db:"org_id"` + UpdatedAt time.Time `db:"updated_at"` + } + if err := s.ds.GetContext(ctx, &row, q, owner); err != nil { + if errors.Is(err, sql.ErrNoRows) { + return orgresolver.CacheEntry{}, false, nil + } + return orgresolver.CacheEntry{}, false, fmt.Errorf("failed to get cached org for owner %s: %w", owner, err) + } + return orgresolver.CacheEntry{OrgID: row.OrgID, RefreshedAt: row.UpdatedAt}, true, nil +} + +// Set stores or updates the mapping for owner. +func (s *orgResolverStore) Set(ctx context.Context, owner string, entry orgresolver.CacheEntry) error { + const q = ` +INSERT INTO ` + orgResolverCacheTable + ` (workflow_owner, org_id, updated_at) +VALUES ($1, $2, $3) +ON CONFLICT (workflow_owner) DO UPDATE SET org_id = EXCLUDED.org_id, updated_at = EXCLUDED.updated_at` + if _, err := s.ds.ExecContext(ctx, q, owner, entry.OrgID, entry.RefreshedAt); err != nil { + return fmt.Errorf("failed to upsert org for owner %s: %w", owner, err) + } + return nil +} + +var _ orgresolver.Cache = (*orgResolverStore)(nil) diff --git a/core/store/migrate/migrations/0307_org_resolver_cache.sql b/core/store/migrate/migrations/0307_org_resolver_cache.sql new file mode 100644 index 00000000000..d187c235f23 --- /dev/null +++ b/core/store/migrate/migrations/0307_org_resolver_cache.sql @@ -0,0 +1,11 @@ +-- +goose Up + +CREATE TABLE IF NOT EXISTS cre.org_resolver_cache ( + workflow_owner TEXT NOT NULL PRIMARY KEY, + org_id TEXT NOT NULL, + updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW() +); + +-- +goose Down + +DROP TABLE IF EXISTS cre.org_resolver_cache; diff --git a/core/web/resolver/testdata/config-empty-effective.toml b/core/web/resolver/testdata/config-empty-effective.toml index 44af3e15812..4f78ffbe3cf 100644 --- a/core/web/resolver/testdata/config-empty-effective.toml +++ b/core/web/resolver/testdata/config-empty-effective.toml @@ -407,6 +407,7 @@ URL = '' URL = '' TLSEnabled = true RequestTimeout = '2s' +CacheEnabled = true [CRE.ConfidentialRelay] Enabled = false diff --git a/core/web/resolver/testdata/config-full.toml b/core/web/resolver/testdata/config-full.toml index 06cef4f6f84..e5844935849 100644 --- a/core/web/resolver/testdata/config-full.toml +++ b/core/web/resolver/testdata/config-full.toml @@ -425,6 +425,7 @@ URL = 'https://workflow.fetcher.url' URL = '' TLSEnabled = true RequestTimeout = '2s' +CacheEnabled = true [CRE.ConfidentialRelay] Enabled = false diff --git a/core/web/resolver/testdata/config-multi-chain-effective.toml b/core/web/resolver/testdata/config-multi-chain-effective.toml index b1089686c29..c74839fe6c5 100644 --- a/core/web/resolver/testdata/config-multi-chain-effective.toml +++ b/core/web/resolver/testdata/config-multi-chain-effective.toml @@ -407,6 +407,7 @@ URL = '' URL = '' TLSEnabled = true RequestTimeout = '2s' +CacheEnabled = true [CRE.ConfidentialRelay] Enabled = false diff --git a/docs/CONFIG.md b/docs/CONFIG.md index 8e6c05fb4c6..86a87a491b5 100644 --- a/docs/CONFIG.md +++ b/docs/CONFIG.md @@ -2766,6 +2766,7 @@ URL is override URL for the workflow fetcher service. URL = "" # Default TLSEnabled = true # Default RequestTimeout = '2s' # Default +CacheEnabled = true # Default ``` @@ -2787,6 +2788,12 @@ RequestTimeout = '2s' # Default ``` RequestTimeout bounds each organization lookup against the linking service. +### CacheEnabled +```toml +CacheEnabled = true # Default +``` +CacheEnabled turns on durable Postgres-backed caching of owner->orgID mappings. + ## Billing ```toml [Billing] diff --git a/testdata/scripts/config/merge_raw_configs.txtar b/testdata/scripts/config/merge_raw_configs.txtar index 807c1a14fcf..5dd303fc677 100644 --- a/testdata/scripts/config/merge_raw_configs.txtar +++ b/testdata/scripts/config/merge_raw_configs.txtar @@ -554,6 +554,7 @@ URL = '' URL = '' TLSEnabled = true RequestTimeout = '2s' +CacheEnabled = true [CRE.ConfidentialRelay] Enabled = false diff --git a/testdata/scripts/node/validate/default.txtar b/testdata/scripts/node/validate/default.txtar index cc45943e52d..427e5b0c4c6 100644 --- a/testdata/scripts/node/validate/default.txtar +++ b/testdata/scripts/node/validate/default.txtar @@ -419,6 +419,7 @@ URL = '' URL = '' TLSEnabled = true RequestTimeout = '2s' +CacheEnabled = true [CRE.ConfidentialRelay] Enabled = false diff --git a/testdata/scripts/node/validate/defaults-override.txtar b/testdata/scripts/node/validate/defaults-override.txtar index 2c651d0a0cb..b4cca64ad3e 100644 --- a/testdata/scripts/node/validate/defaults-override.txtar +++ b/testdata/scripts/node/validate/defaults-override.txtar @@ -480,6 +480,7 @@ URL = '' URL = '' TLSEnabled = true RequestTimeout = '2s' +CacheEnabled = true [CRE.ConfidentialRelay] Enabled = false diff --git a/testdata/scripts/node/validate/disk-based-logging-disabled.txtar b/testdata/scripts/node/validate/disk-based-logging-disabled.txtar index 78761600502..7761e32afcc 100644 --- a/testdata/scripts/node/validate/disk-based-logging-disabled.txtar +++ b/testdata/scripts/node/validate/disk-based-logging-disabled.txtar @@ -463,6 +463,7 @@ URL = '' URL = '' TLSEnabled = true RequestTimeout = '2s' +CacheEnabled = true [CRE.ConfidentialRelay] Enabled = false diff --git a/testdata/scripts/node/validate/disk-based-logging-no-dir.txtar b/testdata/scripts/node/validate/disk-based-logging-no-dir.txtar index 3c868382f92..90eb63edfad 100644 --- a/testdata/scripts/node/validate/disk-based-logging-no-dir.txtar +++ b/testdata/scripts/node/validate/disk-based-logging-no-dir.txtar @@ -463,6 +463,7 @@ URL = '' URL = '' TLSEnabled = true RequestTimeout = '2s' +CacheEnabled = true [CRE.ConfidentialRelay] Enabled = false diff --git a/testdata/scripts/node/validate/disk-based-logging.txtar b/testdata/scripts/node/validate/disk-based-logging.txtar index aa7389b0620..1f26eb87b1c 100644 --- a/testdata/scripts/node/validate/disk-based-logging.txtar +++ b/testdata/scripts/node/validate/disk-based-logging.txtar @@ -463,6 +463,7 @@ URL = '' URL = '' TLSEnabled = true RequestTimeout = '2s' +CacheEnabled = true [CRE.ConfidentialRelay] Enabled = false diff --git a/testdata/scripts/node/validate/fallback-override.txtar b/testdata/scripts/node/validate/fallback-override.txtar index 0109df7b7fc..e537af2bd3a 100644 --- a/testdata/scripts/node/validate/fallback-override.txtar +++ b/testdata/scripts/node/validate/fallback-override.txtar @@ -565,6 +565,7 @@ URL = '' URL = '' TLSEnabled = true RequestTimeout = '2s' +CacheEnabled = true [CRE.ConfidentialRelay] Enabled = false diff --git a/testdata/scripts/node/validate/invalid-ocr-p2p.txtar b/testdata/scripts/node/validate/invalid-ocr-p2p.txtar index 061f537f325..8e4849ff1eb 100644 --- a/testdata/scripts/node/validate/invalid-ocr-p2p.txtar +++ b/testdata/scripts/node/validate/invalid-ocr-p2p.txtar @@ -448,6 +448,7 @@ URL = '' URL = '' TLSEnabled = true RequestTimeout = '2s' +CacheEnabled = true [CRE.ConfidentialRelay] Enabled = false diff --git a/testdata/scripts/node/validate/invalid.txtar b/testdata/scripts/node/validate/invalid.txtar index 364a068aee7..18975f38148 100644 --- a/testdata/scripts/node/validate/invalid.txtar +++ b/testdata/scripts/node/validate/invalid.txtar @@ -459,6 +459,7 @@ URL = '' URL = '' TLSEnabled = true RequestTimeout = '2s' +CacheEnabled = true [CRE.ConfidentialRelay] Enabled = false diff --git a/testdata/scripts/node/validate/valid.txtar b/testdata/scripts/node/validate/valid.txtar index 19508dd1590..7f260bff041 100644 --- a/testdata/scripts/node/validate/valid.txtar +++ b/testdata/scripts/node/validate/valid.txtar @@ -460,6 +460,7 @@ URL = '' URL = '' TLSEnabled = true RequestTimeout = '2s' +CacheEnabled = true [CRE.ConfidentialRelay] Enabled = false diff --git a/testdata/scripts/node/validate/warnings.txtar b/testdata/scripts/node/validate/warnings.txtar index 1d3bda09504..97dcc6bde65 100644 --- a/testdata/scripts/node/validate/warnings.txtar +++ b/testdata/scripts/node/validate/warnings.txtar @@ -442,6 +442,7 @@ URL = '' URL = '' TLSEnabled = true RequestTimeout = '2s' +CacheEnabled = true [CRE.ConfidentialRelay] Enabled = false From 64cf44ab58ce646b8d5d47de9c3d271643595766 Mon Sep 17 00:00:00 2001 From: Bolek Kulbabinski <1416262+bolekk@users.noreply.github.com> Date: Mon, 7 Sep 2026 08:30:10 -0700 Subject: [PATCH 2/2] rename --- .changeset/org-resolver-cache.md | 2 +- core/config/cre_config.go | 4 ++-- core/config/docs/core.toml | 4 ++-- core/config/toml/types.go | 12 +++++----- core/services/chainlink/config_cre.go | 22 +++++++++---------- core/services/chainlink/config_test.go | 2 +- .../testdata/config-empty-effective.toml | 2 +- .../chainlink/testdata/config-full.toml | 2 +- .../config-multi-chain-effective.toml | 2 +- core/services/cre/cre.go | 2 +- .../testdata/config-empty-effective.toml | 2 +- core/web/resolver/testdata/config-full.toml | 2 +- .../config-multi-chain-effective.toml | 2 +- docs/CONFIG.md | 8 +++---- .../scripts/config/merge_raw_configs.txtar | 2 +- testdata/scripts/node/validate/default.txtar | 2 +- .../node/validate/defaults-override.txtar | 2 +- .../disk-based-logging-disabled.txtar | 2 +- .../validate/disk-based-logging-no-dir.txtar | 2 +- .../node/validate/disk-based-logging.txtar | 2 +- .../node/validate/fallback-override.txtar | 2 +- .../node/validate/invalid-ocr-p2p.txtar | 2 +- testdata/scripts/node/validate/invalid.txtar | 2 +- testdata/scripts/node/validate/valid.txtar | 2 +- testdata/scripts/node/validate/warnings.txtar | 2 +- 25 files changed, 45 insertions(+), 45 deletions(-) diff --git a/.changeset/org-resolver-cache.md b/.changeset/org-resolver-cache.md index 72ff190cb69..45fd6e03ef2 100644 --- a/.changeset/org-resolver-cache.md +++ b/.changeset/org-resolver-cache.md @@ -2,4 +2,4 @@ "chainlink": minor --- -#added Durable caching of OrgResolver owner->orgID mappings (backed by Postgres, `CRE.Linking.CacheEnabled`, enabled by default). +#added Durable caching of OrgResolver owner->orgID mappings (backed by Postgres, `CRE.Linking.DurableCacheEnabled`, enabled by default). diff --git a/core/config/cre_config.go b/core/config/cre_config.go index 06f422061d5..7d6119b2a39 100644 --- a/core/config/cre_config.go +++ b/core/config/cre_config.go @@ -40,6 +40,6 @@ type CRELinking interface { TLSEnabled() bool // RequestTimeout bounds each organization lookup against the linking service. RequestTimeout() time.Duration - // CacheEnabled turns on durable caching of owner->orgID mappings (backed by Postgres). - CacheEnabled() bool + // DurableCacheEnabled turns on durable caching of owner->orgID mappings (backed by Postgres). + DurableCacheEnabled() bool } diff --git a/core/config/docs/core.toml b/core/config/docs/core.toml index 821ae44be8b..667f086d31b 100644 --- a/core/config/docs/core.toml +++ b/core/config/docs/core.toml @@ -997,8 +997,8 @@ URL = "" # Default TLSEnabled = true # Default # RequestTimeout bounds each organization lookup against the linking service. RequestTimeout = '2s' # Default -# CacheEnabled turns on durable Postgres-backed caching of owner->orgID mappings. -CacheEnabled = true # Default +# DurableCacheEnabled turns on durable Postgres-backed caching of owner->orgID mappings. +DurableCacheEnabled = true # Default # Billing holds settings for connecting to the billing service. [Billing] diff --git a/core/config/toml/types.go b/core/config/toml/types.go index 62f6f10c65a..c2949270b50 100644 --- a/core/config/toml/types.go +++ b/core/config/toml/types.go @@ -2058,8 +2058,8 @@ type LinkingConfig struct { URL *string `toml:",omitempty"` TLSEnabled *bool `toml:",omitempty"` RequestTimeout *commonconfig.Duration `toml:",omitempty"` - // CacheEnabled turns on durable Postgres-backed caching of owner->orgID mappings. - CacheEnabled *bool `toml:",omitempty"` + // DurableCacheEnabled turns on durable Postgres-backed caching of owner->orgID mappings. + DurableCacheEnabled *bool `toml:",omitempty"` } func (c *CreConfig) setFrom(f *CreConfig) { @@ -2107,8 +2107,8 @@ func (c *CreConfig) setFrom(f *CreConfig) { if v := f.Linking.RequestTimeout; v != nil { c.Linking.RequestTimeout = v } - if v := f.Linking.CacheEnabled; v != nil { - c.Linking.CacheEnabled = v + if v := f.Linking.DurableCacheEnabled; v != nil { + c.Linking.DurableCacheEnabled = v } } @@ -2163,9 +2163,9 @@ func (l *LinkingConfig) ValidateConfig() error { } else if l.RequestTimeout.Duration() <= 0 { return configutils.ErrInvalid{Name: "RequestTimeout", Value: l.RequestTimeout.String(), Msg: "must be positive"} } - if l.CacheEnabled == nil { + if l.DurableCacheEnabled == nil { val := true - l.CacheEnabled = &val + l.DurableCacheEnabled = &val } return nil } diff --git a/core/services/chainlink/config_cre.go b/core/services/chainlink/config_cre.go index acccfe34a99..c4063d4c162 100644 --- a/core/services/chainlink/config_cre.go +++ b/core/services/chainlink/config_cre.go @@ -80,10 +80,10 @@ func (c *creConfig) EnableDKGRecipient() bool { } type linkingConfig struct { - url string - tlsEnabled bool - requestTimeout time.Duration - cacheEnabled bool + url string + tlsEnabled bool + requestTimeout time.Duration + durableCacheEnabled bool } func (l *linkingConfig) URL() string { @@ -98,13 +98,13 @@ func (l *linkingConfig) RequestTimeout() time.Duration { return l.requestTimeout } -func (l *linkingConfig) CacheEnabled() bool { - return l.cacheEnabled +func (l *linkingConfig) DurableCacheEnabled() bool { + return l.durableCacheEnabled } func (c *creConfig) Linking() config.CRELinking { if c.c.Linking == nil { - return &linkingConfig{url: "", tlsEnabled: true, requestTimeout: defaultLinkingRequestTimeout, cacheEnabled: true} + return &linkingConfig{url: "", tlsEnabled: true, requestTimeout: defaultLinkingRequestTimeout, durableCacheEnabled: true} } url := "" @@ -122,12 +122,12 @@ func (c *creConfig) Linking() config.CRELinking { requestTimeout = c.c.Linking.RequestTimeout.Duration() } - cacheEnabled := true // default - if c.c.Linking.CacheEnabled != nil { - cacheEnabled = *c.c.Linking.CacheEnabled + durableCacheEnabled := true // default + if c.c.Linking.DurableCacheEnabled != nil { + durableCacheEnabled = *c.c.Linking.DurableCacheEnabled } - return &linkingConfig{url: url, tlsEnabled: tlsEnabled, requestTimeout: requestTimeout, cacheEnabled: cacheEnabled} + return &linkingConfig{url: url, tlsEnabled: tlsEnabled, requestTimeout: requestTimeout, durableCacheEnabled: durableCacheEnabled} } type confidentialRelayConfig struct { diff --git a/core/services/chainlink/config_test.go b/core/services/chainlink/config_test.go index 23345a5ab14..77171950789 100644 --- a/core/services/chainlink/config_test.go +++ b/core/services/chainlink/config_test.go @@ -618,7 +618,7 @@ func TestConfig_Marshal(t *testing.T) { URL: new(""), TLSEnabled: new(true), RequestTimeout: commoncfg.MustNewDuration(2 * time.Second), - CacheEnabled: new(true), + DurableCacheEnabled: new(true), }, ConfidentialRelay: &toml.ConfidentialRelayConfig{ Enabled: new(bool), diff --git a/core/services/chainlink/testdata/config-empty-effective.toml b/core/services/chainlink/testdata/config-empty-effective.toml index 4f78ffbe3cf..203d47dd527 100644 --- a/core/services/chainlink/testdata/config-empty-effective.toml +++ b/core/services/chainlink/testdata/config-empty-effective.toml @@ -407,7 +407,7 @@ URL = '' URL = '' TLSEnabled = true RequestTimeout = '2s' -CacheEnabled = true +DurableCacheEnabled = true [CRE.ConfidentialRelay] Enabled = false diff --git a/core/services/chainlink/testdata/config-full.toml b/core/services/chainlink/testdata/config-full.toml index 529da791d9c..571d9cf3778 100644 --- a/core/services/chainlink/testdata/config-full.toml +++ b/core/services/chainlink/testdata/config-full.toml @@ -446,7 +446,7 @@ URL = 'https://workflow.fetcher.url' URL = '' TLSEnabled = true RequestTimeout = '2s' -CacheEnabled = true +DurableCacheEnabled = true [CRE.ConfidentialRelay] Enabled = false diff --git a/core/services/chainlink/testdata/config-multi-chain-effective.toml b/core/services/chainlink/testdata/config-multi-chain-effective.toml index 5bd46405d41..e4fd45296fa 100644 --- a/core/services/chainlink/testdata/config-multi-chain-effective.toml +++ b/core/services/chainlink/testdata/config-multi-chain-effective.toml @@ -407,7 +407,7 @@ URL = '' URL = '' TLSEnabled = true RequestTimeout = '2s' -CacheEnabled = true +DurableCacheEnabled = true [CRE.ConfidentialRelay] Enabled = false diff --git a/core/services/cre/cre.go b/core/services/cre/cre.go index 23987f52175..6eabefa42bb 100644 --- a/core/services/cre/cre.go +++ b/core/services/cre/cre.go @@ -662,7 +662,7 @@ func newOrgResolver( } var cache orgresolver.Cache - if cfg.CRE().Linking().CacheEnabled() { + if cfg.CRE().Linking().DurableCacheEnabled() { cache = NewOrgResolverStore(ds) } else { cache = orgresolver.NewInMemoryCache() diff --git a/core/web/resolver/testdata/config-empty-effective.toml b/core/web/resolver/testdata/config-empty-effective.toml index 4f78ffbe3cf..203d47dd527 100644 --- a/core/web/resolver/testdata/config-empty-effective.toml +++ b/core/web/resolver/testdata/config-empty-effective.toml @@ -407,7 +407,7 @@ URL = '' URL = '' TLSEnabled = true RequestTimeout = '2s' -CacheEnabled = true +DurableCacheEnabled = true [CRE.ConfidentialRelay] Enabled = false diff --git a/core/web/resolver/testdata/config-full.toml b/core/web/resolver/testdata/config-full.toml index e5844935849..56bf14e4a69 100644 --- a/core/web/resolver/testdata/config-full.toml +++ b/core/web/resolver/testdata/config-full.toml @@ -425,7 +425,7 @@ URL = 'https://workflow.fetcher.url' URL = '' TLSEnabled = true RequestTimeout = '2s' -CacheEnabled = true +DurableCacheEnabled = true [CRE.ConfidentialRelay] Enabled = false diff --git a/core/web/resolver/testdata/config-multi-chain-effective.toml b/core/web/resolver/testdata/config-multi-chain-effective.toml index c74839fe6c5..76eb3496580 100644 --- a/core/web/resolver/testdata/config-multi-chain-effective.toml +++ b/core/web/resolver/testdata/config-multi-chain-effective.toml @@ -407,7 +407,7 @@ URL = '' URL = '' TLSEnabled = true RequestTimeout = '2s' -CacheEnabled = true +DurableCacheEnabled = true [CRE.ConfidentialRelay] Enabled = false diff --git a/docs/CONFIG.md b/docs/CONFIG.md index 86a87a491b5..b83348ca63f 100644 --- a/docs/CONFIG.md +++ b/docs/CONFIG.md @@ -2766,7 +2766,7 @@ URL is override URL for the workflow fetcher service. URL = "" # Default TLSEnabled = true # Default RequestTimeout = '2s' # Default -CacheEnabled = true # Default +DurableCacheEnabled = true # Default ``` @@ -2788,11 +2788,11 @@ RequestTimeout = '2s' # Default ``` RequestTimeout bounds each organization lookup against the linking service. -### CacheEnabled +### DurableCacheEnabled ```toml -CacheEnabled = true # Default +DurableCacheEnabled = true # Default ``` -CacheEnabled turns on durable Postgres-backed caching of owner->orgID mappings. +DurableCacheEnabled turns on durable Postgres-backed caching of owner->orgID mappings. ## Billing ```toml diff --git a/testdata/scripts/config/merge_raw_configs.txtar b/testdata/scripts/config/merge_raw_configs.txtar index 5dd303fc677..9f3974669c1 100644 --- a/testdata/scripts/config/merge_raw_configs.txtar +++ b/testdata/scripts/config/merge_raw_configs.txtar @@ -554,7 +554,7 @@ URL = '' URL = '' TLSEnabled = true RequestTimeout = '2s' -CacheEnabled = true +DurableCacheEnabled = true [CRE.ConfidentialRelay] Enabled = false diff --git a/testdata/scripts/node/validate/default.txtar b/testdata/scripts/node/validate/default.txtar index 427e5b0c4c6..4200761e10e 100644 --- a/testdata/scripts/node/validate/default.txtar +++ b/testdata/scripts/node/validate/default.txtar @@ -419,7 +419,7 @@ URL = '' URL = '' TLSEnabled = true RequestTimeout = '2s' -CacheEnabled = true +DurableCacheEnabled = true [CRE.ConfidentialRelay] Enabled = false diff --git a/testdata/scripts/node/validate/defaults-override.txtar b/testdata/scripts/node/validate/defaults-override.txtar index b4cca64ad3e..52527323753 100644 --- a/testdata/scripts/node/validate/defaults-override.txtar +++ b/testdata/scripts/node/validate/defaults-override.txtar @@ -480,7 +480,7 @@ URL = '' URL = '' TLSEnabled = true RequestTimeout = '2s' -CacheEnabled = true +DurableCacheEnabled = true [CRE.ConfidentialRelay] Enabled = false diff --git a/testdata/scripts/node/validate/disk-based-logging-disabled.txtar b/testdata/scripts/node/validate/disk-based-logging-disabled.txtar index 7761e32afcc..f00a068214c 100644 --- a/testdata/scripts/node/validate/disk-based-logging-disabled.txtar +++ b/testdata/scripts/node/validate/disk-based-logging-disabled.txtar @@ -463,7 +463,7 @@ URL = '' URL = '' TLSEnabled = true RequestTimeout = '2s' -CacheEnabled = true +DurableCacheEnabled = true [CRE.ConfidentialRelay] Enabled = false diff --git a/testdata/scripts/node/validate/disk-based-logging-no-dir.txtar b/testdata/scripts/node/validate/disk-based-logging-no-dir.txtar index 90eb63edfad..c8e7e97cd80 100644 --- a/testdata/scripts/node/validate/disk-based-logging-no-dir.txtar +++ b/testdata/scripts/node/validate/disk-based-logging-no-dir.txtar @@ -463,7 +463,7 @@ URL = '' URL = '' TLSEnabled = true RequestTimeout = '2s' -CacheEnabled = true +DurableCacheEnabled = true [CRE.ConfidentialRelay] Enabled = false diff --git a/testdata/scripts/node/validate/disk-based-logging.txtar b/testdata/scripts/node/validate/disk-based-logging.txtar index 1f26eb87b1c..07dfc6dcbae 100644 --- a/testdata/scripts/node/validate/disk-based-logging.txtar +++ b/testdata/scripts/node/validate/disk-based-logging.txtar @@ -463,7 +463,7 @@ URL = '' URL = '' TLSEnabled = true RequestTimeout = '2s' -CacheEnabled = true +DurableCacheEnabled = true [CRE.ConfidentialRelay] Enabled = false diff --git a/testdata/scripts/node/validate/fallback-override.txtar b/testdata/scripts/node/validate/fallback-override.txtar index e537af2bd3a..087f2e648c0 100644 --- a/testdata/scripts/node/validate/fallback-override.txtar +++ b/testdata/scripts/node/validate/fallback-override.txtar @@ -565,7 +565,7 @@ URL = '' URL = '' TLSEnabled = true RequestTimeout = '2s' -CacheEnabled = true +DurableCacheEnabled = true [CRE.ConfidentialRelay] Enabled = false diff --git a/testdata/scripts/node/validate/invalid-ocr-p2p.txtar b/testdata/scripts/node/validate/invalid-ocr-p2p.txtar index 8e4849ff1eb..5683aab3cde 100644 --- a/testdata/scripts/node/validate/invalid-ocr-p2p.txtar +++ b/testdata/scripts/node/validate/invalid-ocr-p2p.txtar @@ -448,7 +448,7 @@ URL = '' URL = '' TLSEnabled = true RequestTimeout = '2s' -CacheEnabled = true +DurableCacheEnabled = true [CRE.ConfidentialRelay] Enabled = false diff --git a/testdata/scripts/node/validate/invalid.txtar b/testdata/scripts/node/validate/invalid.txtar index 18975f38148..b9afc66f0a5 100644 --- a/testdata/scripts/node/validate/invalid.txtar +++ b/testdata/scripts/node/validate/invalid.txtar @@ -459,7 +459,7 @@ URL = '' URL = '' TLSEnabled = true RequestTimeout = '2s' -CacheEnabled = true +DurableCacheEnabled = true [CRE.ConfidentialRelay] Enabled = false diff --git a/testdata/scripts/node/validate/valid.txtar b/testdata/scripts/node/validate/valid.txtar index 7f260bff041..2bf9a67b3bc 100644 --- a/testdata/scripts/node/validate/valid.txtar +++ b/testdata/scripts/node/validate/valid.txtar @@ -460,7 +460,7 @@ URL = '' URL = '' TLSEnabled = true RequestTimeout = '2s' -CacheEnabled = true +DurableCacheEnabled = true [CRE.ConfidentialRelay] Enabled = false diff --git a/testdata/scripts/node/validate/warnings.txtar b/testdata/scripts/node/validate/warnings.txtar index 97dcc6bde65..175cfb53846 100644 --- a/testdata/scripts/node/validate/warnings.txtar +++ b/testdata/scripts/node/validate/warnings.txtar @@ -442,7 +442,7 @@ URL = '' URL = '' TLSEnabled = true RequestTimeout = '2s' -CacheEnabled = true +DurableCacheEnabled = true [CRE.ConfidentialRelay] Enabled = false