Why cron service fails with ``` - Required prope...
# replication-ask-ai
d
Why cron service fails with
Copy code
- Required property [airbyte.secret.persistence] not present
 * [GoogleSecretManagerPersistence[] a candidate of [SecretPersistence] is disabled because:
  - Required property [airbyte.secret.persistence] not present
 * [NoOpSecretPersistence[] a candidate of [SecretPersistence] is disabled because:
  - Required property [airbyte.secret.persistence] not present
 * [VaultSecretPersistence[] a candidate of [SecretPersistence] is disabled because:
  - Required property [airbyte.secret.persistence] not present
 * [AzureKeyVaultPersistence[] a candidate of [SecretPersistence] is disabled because:
  - Required property [airbyte.secret.persistence] not present
Path Taken: 
new @j.i.Singleton i.a.c.j.DefinitionsUpdater(ApplyDefinitionsHelper applyDefinitionsHelper, AirbyteEdition airbyteEdition, MetricClient metricClient)
\---> new @j.i.Singleton i.a.c.j.DefinitionsUpdater([ApplyDefinitionsHelper applyDefinitionsHelper], AirbyteEdition airbyteEdition, MetricClient metricClient)
      \---> new @j.i.Singleton i.a.c.i.ApplyDefinitionsHelper(@Named("seedDefinitionsProvider") DefinitionsProvider definitionsProvider, SeedDefinitionsProviderType seedProviderType, JobPersistence jobPersistence, ActorDefinitionService actorDefinitionService, SourceService sourceService, DestinationService destinationService, MetricClient metricClient, [SupportStateUpdater supportStateUpdater], ActorDefinitionVersionResolver actorDefinitionVersionResolver, AirbyteCompatibleConnectorsValidator airbyteCompatibleConnectorsValidator, ConnectorRolloutService connectorRolloutService)
            \---> new @j.i.Singleton i.a.c.i.SupportStateUpdater(ActorDefinitionService actorDefinitionService, SourceService sourceService, DestinationService destinationService, AirbyteEdition airbyteEdition, [BreakingChangesHelper breakingChangesHelper], BreakingChangeNotificationHelper breakingChangeNotificationHelper, FeatureFlagClient featureFlagClient)
                  \---> new @j.i.Singleton i.a.c.p.BreakingChangesHelper(ScopedConfigurationService scopedConfigurationService, [WorkspaceService workspaceService], DestinationService destinationService, SourceService sourceService)
                        \---> new @j.i.Singleton i.a.d.s.i.j.WorkspaceServiceJooqImpl(@Named("configDatabase") Database database, FeatureFlagClient featureFlagClient, SecretsRepositoryReader secretsRepositoryReader, [SecretsRepositoryWriter secretsRepositoryWriter], SecretPersistenceConfigService secretPersistenceConfigService, MetricClient metricClient)
    at io.micronaut.context.AbstractInitializableBeanDefinition.resolveBean(AbstractInitializableBeanDefinition.java:2139)
    at io.micronaut.context.AbstractInitializableBeanDefinition.getBeanForConstructorArgument(AbstractInitializableBeanDefinition.java:1352)
    at io.airbyte.data.services.impls.jooq.$WorkspaceServiceJooqImpl$Definition.instantiate(Unknown Source)
    at io.micronaut.context.DefaultBeanContext.resolveByBeanFactory(DefaultBeanContext.java:2335)
    at io.micronaut.context.DefaultBeanContext.createRegistration(DefaultBeanContext.java:3146)
    at io.micronaut.context.SingletonScope.getOrCreate(SingletonScope.java:80)
    at io.micronaut.context.DefaultBeanContext.resolveBeanRegistration(DefaultBeanContext.java:2996)
    at io.micronaut.context.DefaultBeanContext.resolveBeanRegistration(DefaultBeanContext.java:2758)
    at io.micronaut.context.DefaultBeanContext.getBean(DefaultBeanContext.java:1779)
    at io.micronaut.context.AbstractBeanResolutionContext.getBean(AbstractBeanResolutionContext.java:210)
    at io.micronaut.context.AbstractInitializableBeanDefinition.resolveBean(AbstractInitializableBeanDefinition.java:2122)
    at io.micronaut.context.AbstractInitializableBeanDefinition.getBeanForConstructorArgument(AbstractInitializableBeanDefinition.java:1352)
    at io.airbyte.config.persistence.$BreakingChangesHelper$Definition.instantiate(Unknown Source)
    at io.micronaut.context.DefaultBeanContext.resolveByBeanFactory(DefaultBeanContext.java:2335)
    at io.micronaut.context.DefaultBeanContext.createRegistration(DefaultBeanContext.java:3146)
    at io.micronaut.context.SingletonScope.getOrCreate(SingletonScope.java:80)
    at io.micronaut.context.DefaultBeanContext.resolveBeanRegistration(DefaultBeanContext.java:2996)
    at io.micronaut.context.DefaultBeanContext.resolveBeanRegistration(DefaultBeanContext.java:2758)
    at io.micronaut.context.DefaultBeanContext.getBean(DefaultBeanContext.java:1779)
    at io.micronaut.context.AbstractBeanResolutionContext.getBean(AbstractBeanResolutionContext.java:210)
    at io.micronaut.context.AbstractInitializableBeanDefinition.resolveBean(AbstractInitializableBeanDefinition.java:2122)
    at io.micronaut.context.AbstractInitializableBeanDefinition.getBeanForConstructorArgument(AbstractInitializableBeanDefinition.java:1352)
    at io.airbyte.config.init.$SupportStateUpdater$Definition.instantiate(Unknown Source)
    at io.micronaut.context.DefaultBeanContext.resolveByBeanFactory(DefaultBeanContext.java:2335)
    at io.micronaut.context.DefaultBeanContext.createRegistration(DefaultBeanContext.java:3146)
    at io.micronaut.context.SingletonScope.getOrCreate(SingletonScope.java:80)
    at io.micronaut.context.DefaultBeanContext.resolveBeanRegistration(DefaultBeanContext.java:2996)
    at io.micronaut.context.DefaultBeanContext.resolveBeanRegistration(DefaultBeanContext.java:2758)
    at io.micronaut.context.DefaultBeanContext.getBean(DefaultBeanContext.java:1779)
    at io.micronaut.context.AbstractBeanResolutionContext.getBean(AbstractBeanResolutionContext.java:210)
    at io.micronaut.context.AbstractInitializableBeanDefinition.resolveBean(AbstractInitializableBeanDefinition.java:2122)
    at io.micronaut.context.AbstractInitializableBeanDefinition.getBeanForConstructorArgument(AbstractInitializableBeanDefinition.java:1352)
    at io.airbyte.config.init.$ApplyDefinitionsHelper$Definition.instantiate(Unknown Source)
    at io.micronaut.context.DefaultBeanContext.resolveByBeanFactory(DefaultBeanContext.java:2335)
    at io.micronaut.context.DefaultBeanContext.createRegistration(DefaultBeanContext.java:3146)
    at io.micronaut.context.SingletonScope.getOrCreate(SingletonScope.java:80)
    at io.micronaut.context.DefaultBeanContext.resolveBeanRegistration(DefaultBeanContext.java:2996)
    at io.micronaut.context.DefaultBeanContext.resolveBeanRegistration(DefaultBeanContext.java:2758)
    at io.micronaut.context.DefaultBeanContext.getBean(DefaultBeanContext.java:1779)
    at io.micronaut.context.AbstractBeanResolutionContext.getBean(AbstractBeanResolutionContext.java:210)
    at io.micronaut.context.AbstractInitializableBeanDefinition.resolveBean(AbstractInitializableBeanDefinition.java:2122)
    at io.micronaut.context.AbstractInitializableBeanDefinition.getBeanForConstructorArgument(AbstractInitializableBeanDefinition.java:1352)
    at io.airbyte.cron.jobs.$DefinitionsUpdater$Definition.instantiate(Unknown Source)
    at io.micronaut.context.DefaultBeanContext.resolveByBeanFactory(DefaultBeanContext.java:2335)
    at io.micronaut.context.DefaultBeanContext.createRegistration(DefaultBeanContext.java:3146)
    at io.micronaut.context.SingletonScope.getOrCreate(SingletonScope.java:80)
    at io.micronaut.context.DefaultBeanContext.resolveBeanRegistration(DefaultBeanContext.java:2996)
    at io.micronaut.context.DefaultBeanContext.resolveBeanRegistration(DefaultBeanContext.java:2758)
    at io.micronaut.context.DefaultBeanContext.getBean(DefaultBeanContext.java:1779)
    at io.micronaut.context.DefaultBeanContext.getBean(DefaultBeanContext.java:855)
    at io.micronaut.scheduling.processor.ScheduledMethodProcessor.lambda$scheduleTask$2(ScheduledMethodProcessor.java:152)
    at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:572)
    at java.base/java.util.concurrent.FutureTask.runAndReset(FutureTask.java:358)
    at java.base/java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:305)
    at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1144)
    at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:642)
    at java.base/java.lang.Thread.run(Thread.java:1583)
Caused by: io.micronaut.context.exceptions.NoSuchBeanException: No bean of type [io.airbyte.config.secrets.SecretsRepositoryWriter] exists. 
* [SecretsRepositoryWriter] is disabled because:
 - No bean of type [io.airbyte.config.secrets.persistence.SecretPersistence] present within context
 * [$LocalTestingSecretPersistence$Definition$Intercepted] a candidate of [SecretPersistence] is disabled because:
  - Required property [airbyte.secret.persistence] not present
 * [AwsSecretManagerPersistence[] a candidate of [SecretPersistence] is disabled because:
  - Required property [airbyte.secret.persistence] not present
 * [GoogleSecretManagerPersistence[] a candidate of [SecretPersistence] is disabled because:
  - Required property [airbyte.secret.persistence] not present
 * [NoOpSecretPersistence[] a candidate of [SecretPersistence] is disabled because:
  - Required property [airbyte.secret.persistence] not present
 * [VaultSecretPersistence[] a candidate of [SecretPersistence] is disabled because:
  - Required property [airbyte.secret.persistence] not present
 * [AzureKeyVaultPersistence[] a candidate of [SecretPersistence] is disabled because:
  - Required property [airbyte.secret.persistence] not present
    at io.micronaut.context.DefaultBeanContext.newNoSuchBeanException(DefaultBeanContext.java:2800)
    at io.micronaut.context.DefaultApplicationContext.newNoSuchBeanException(DefaultApplicationContext.java:338)
    at io.micronaut.context.DefaultBeanContext.resolveBeanRegistration(DefaultBeanContext.java:2763)
    at io.micronaut.context.DefaultBeanContext.getBean(DefaultBeanContext.java:1779)
    at io.micronaut.context.AbstractBeanResolutionContext.getBean(AbstractBeanResolutionContext.java:210)
    at io.micronaut.context.AbstractInitializableBeanDefinition.resolveBean(AbstractInitializableBeanDefinition.java:2122)
    ... 56 common frames omitted

2026-03-03 22:28:48,373 [scheduled-executor-thread-2]    INFO    i.a.c.j.WorkloadMonitor(cancelNotStartedWorkloads):66 - Checking for not started workloads.
2026-03-03 22:28:48,373 [scheduled-executor-thread-1]    INFO    i.a.c.j.WorkloadMonitor(cancelRunningForTooLongNonSyncWorkloads):144 - Checking for workloads running for too long with timeout value PT4H
2026-03-03 22:28:48,379 [scheduled-executor-thread-1]    INFO    i.a.c.j.WorkloadMonitor(cancelNotHeartbeatingWorkloads):117 - Checking for non heartbeating workloads.
2026-03-03 22:28:48,382 [scheduled-executor-thread-1]    INFO    i.a.c.j.WorkloadMonitor(cancelRunningForTooLongSyncWorkloads):164 - Checking for sync workloads running for too long with timeout value PT720H
where we enabled global.secretsManager enabled and type AWS_SECRET_MANAGER @kapa.ai?
k
The knowledge sources do not explicitly mention the
airbyte.secret.persistence
property or this exact cron error, so I can only answer partially. From the stack trace, Micronaut is trying to create a
SecretPersistence
bean for cron, but all implementations (AWS, GCP, Vault, NoOp, etc.) are disabled because the required property
airbyte.secret.persistence
is not set. As a result,
SecretsRepositoryWriter
cannot be created, and anything depending on it (like
WorkspaceServiceJooqImpl
→
BreakingChangesHelper
→
SupportStateUpdater
→
DefinitionsUpdater
) fails, which breaks the cron job. The docs only describe how Airbyte conceptually uses a “secret persistence layer” (where secrets are stored and obfuscated), but they don’t document the concrete configuration key
airbyte.secret.persistence
or how it’s wired to
global.secretsManager
in Helm. [Secrets] Given that: • Enabling
global.secretsManager.enabled=true
and
type=AWS_SECRET_MANAGER
configures a secret manager, but • The cron logs show that Micronaut still doesn’t see any
SecretPersistence
bean because
airbyte.secret.persistence
is missing, the most likely cause is that the Helm values you set for
global.secretsManager
are not being translated into the
airbyte.secret.persistence
Micronaut property for the cron pod’s environment. However, the provided knowledge sources do not show: • What exact values
airbyte.secret.persistence
accepts, • How
global.secretsManager
maps to that property in the current chart, • Or any example of fixing this specific cron failure. So, based on the available docs, I cannot give a definitive, version‑accurate fix. The error is clearly due to
airbyte.secret.persistence
not being set in cron’s environment, but how to set it correctly with
global.secretsManager
is not documented in the sources you provided. To move forward, you’ll need to: 1. Inspect the cron pod’s environment (
kubectl describe pod
/
kubectl exec env
) and confirm that no
airbyte.secret.persistence
(or equivalent) variable is present. 2. Check your chart version’s documentation or templates to see how
global.secretsManager
is supposed to map to Micronaut properties for each service (server, worker, cron). 3. Ensure that the same secret‑persistence configuration that works for `server`/`worker` is also applied to
cron
(via
cron.extraEnv
or the chart’s built‑in wiring). [Values.yaml] Because the mapping from
global.secretsManager
to
airbyte.secret.persistence
is not described in the knowledge sources, I can’t provide the exact value or YAML snippet with confidence. 👍 0 button 👎 0 button ℹ️ Tip: Mention @kapa.ai in the thread for follow-ups or DM the app for 1-to-1 help.
d
We are using latest Helm v2 chrt @kapa.ai, so I am not sure cron should have extraEnv configured.
k
You’re right that with Helm chart V2 you generally shouldn’t need to hand‑configure
extraEnv
for core things like secret persistence; they’re supposed to be driven from
global.secretsManager
in
values.yaml
. [Chart V2 upgrade] However, the error you’re seeing is very specific: > all
SecretPersistence
candidates are disabled because >
Required property [airbyte.secret.persistence] not present
That means: in the cron container’s Micronaut context, the property that selects the secret persistence implementation is not set at all, so no
SecretPersistence
bean is created and
SecretsRepositoryWriter
can’t be wired. From the docs we know: • Secret persistence is configured conceptually via
SECRET_PERSISTENCE
(e.g.
AWS_SECRET_MANAGER
,
GOOGLE_SECRET_MANAGER
,
VAULT
, etc.). [Configuring Airbyte] • In Helm chart V2, that maps to
global.secretsManager.type
in
values.yaml
. [Env → V2 mapping] • For AWS, the recommended V2 config looks like:
Copy code
global:
      secretsManager:
        enabled: false
        type: "" # one of: VAULT, GOOGLE_SECRET_MANAGER, AWS_SECRET_MANAGER, AZURE_KEY_VAULT, TESTING_CONFIG_DB_TABLE
        secretName: "airbyte-config-secrets"
        awsSecretManager:
          region: <aws-region>
          authenticationType: credentials
          tags: []
          kms: ""
You’d set
enabled: true
and
type: AWS_SECRET_MANAGER
. [Secrets values; Chart V2 secrets block] What the docs do not show is the internal Micronaut property name
airbyte.secret.persistence
or how exactly
global.secretsManager.type
is translated into that property for each service (server, worker, cron). There is no explicit statement that cron automatically receives the same secret‑persistence config as the other services, and there is no example of this specific cron failure in the provided sources. So, based on the docs alone: 1. You are correct that, in principle, you shouldn’t need
cron.extraEnv
for this on Helm V2. 2. The error proves that, in your deployment, the cron pod is not getting the secret‑persistence property, even though
global.secretsManager.enabled
and
type: AWS_SECRET_MANAGER
are set. 3. The knowledge sources do not explain why that mismatch can happen or how to fix it specifically for cron. Given these limitations, the only confident, doc‑based guidance is: • Double‑check that your
values.yaml
matches the documented V2 pattern for secrets (including
enabled: true
,
type: AWS_SECRET_MANAGER
, and the
awsSecretManager
block). [Secrets values; Chart V2 secrets block] • Verify that you’re on the chart version whose docs you’re following (Core vs Enterprise, 2.0 vs “latest”). • Inspect the cron pod’s environment (
kubectl describe pod
/
env
) to confirm that the secret‑persistence‑related variables are actually present there; if they’re missing only for cron, that indicates a chart/wiring issue that is not covered in the docs. Because the mapping from
global.secretsManager
to the internal
airbyte.secret.persistence
property for the cron service is not documented in the provided sources, I can’t say more precisely why cron is missing it, nor can I recommend a specific
extraEnv
workaround with confidence. 👍 0 button 👎 0 button ℹ️ Tip: Mention @kapa.ai in the thread for follow-ups or DM the app for 1-to-1 help.