Skip to content

[BUG] Job Scheduler plugin can no longer access .opendistro-job-scheduler-lock index. #865

@msoler8785

Description

@msoler8785

Describe the bug

After I upgraded OpenSearch from 2.9.1 to 3.3.2 I started observing errors about not being able to access the .opendistro-job-scheduler-lock system table.

I decided to reinstall and restore indices from snapshots. Then I restored my ISM policies. I started getting similar errors that the plugin cannot create the index.

Error

[2025-12-05T15:49:06,791][ERROR][o.o.b.OpenSearchUncaughtExceptionHandler] [node10] uncaught exception in thread [DefaultDispatcher-worker-2]
org.opensearch.OpenSearchSecurityException: no permissions for [] and User [name=plugin:org.opensearch.jobscheduler.JobSchedulerPlugin, backend_roles=[], requestedTenant=null]

Stacktrace

[2025-12-05T15:49:06,790][INFO ][o.o.j.t.PluginClient     ] [node10] Running transport action with subject: plugin:org.opensearch.jobscheduler.JobSchedulerPlugin
[2025-12-05T15:49:06,791][INFO ][o.o.s.p.SystemIndexAccessEvaluator] [node10] No indices:admin/create permission for user roles [] to System Indices .opendistro-job-scheduler-lock
[2025-12-05T15:49:06,791][ERROR][o.o.b.OpenSearchUncaughtExceptionHandler] [node10] uncaught exception in thread [DefaultDispatcher-worker-2]
org.opensearch.OpenSearchSecurityException: no permissions for [] and User [name=plugin:org.opensearch.jobscheduler.JobSchedulerPlugin, backend_roles=[], requestedTenant=null]
        at org.opensearch.security.filter.SecurityFilter.lambda$apply0$3(SecurityFilter.java:415) ~[?:?]
        at org.opensearch.security.filter.SecurityFilter.apply0(SecurityFilter.java:509) ~[?:?]
        at org.opensearch.security.filter.SecurityFilter.apply(SecurityFilter.java:175) ~[?:?]
        at org.opensearch.action.support.TransportAction$RequestFilterChain.proceed(TransportAction.java:218) ~[opensearch-3.3.2.jar:3.3.2]
        at org.opensearch.performanceanalyzer.action.PerformanceAnalyzerActionFilter.apply(PerformanceAnalyzerActionFilter.java:81) ~[?:?]
        at org.opensearch.action.support.TransportAction$RequestFilterChain.proceed(TransportAction.java:218) ~[opensearch-3.3.2.jar:3.3.2]
        at org.opensearch.action.support.TransportAction.execute(TransportAction.java:190) ~[opensearch-3.3.2.jar:3.3.2]
        at org.opensearch.action.support.TransportAction.execute(TransportAction.java:109) ~[opensearch-3.3.2.jar:3.3.2]
        at org.opensearch.transport.client.node.NodeClient.executeLocally(NodeClient.java:113) ~[opensearch-3.3.2.jar:3.3.2]
        at org.opensearch.transport.client.node.NodeClient.doExecute(NodeClient.java:100) ~[opensearch-3.3.2.jar:3.3.2]
        at org.opensearch.transport.client.support.AbstractClient.execute(AbstractClient.java:501) ~[opensearch-3.3.2.jar:3.3.2]
        at org.opensearch.transport.client.FilterClient.doExecute(FilterClient.java:83) ~[opensearch-3.3.2.jar:3.3.2]
        at org.opensearch.jobscheduler.transport.PluginClient.lambda$doExecute$0(PluginClient.java:56) ~[?:?]
        at org.opensearch.security.identity.SecurePluginSubject.runAs(SecurePluginSubject.java:52) ~[?:?]
        at org.opensearch.jobscheduler.transport.PluginClient.doExecute(PluginClient.java:54) ~[?:?]
        at org.opensearch.transport.client.support.AbstractClient.execute(AbstractClient.java:501) ~[opensearch-3.3.2.jar:3.3.2]
        at org.opensearch.transport.client.support.AbstractClient$IndicesAdmin.execute(AbstractClient.java:1610) ~[opensearch-3.3.2.jar:3.3.2]
        at org.opensearch.transport.client.support.AbstractClient$IndicesAdmin.create(AbstractClient.java:1700) ~[opensearch-3.3.2.jar:3.3.2]
        at org.opensearch.jobscheduler.utils.LockServiceImpl.createLockIndex(LockServiceImpl.java:108) ~[opensearch-job-scheduler-3.3.2.0.jar:3.3.2.0]
        at org.opensearch.jobscheduler.utils.LockServiceImpl.acquireLockWithId(LockServiceImpl.java:177) ~[opensearch-job-scheduler-3.3.2.0.jar:3.3.2.0]
        at org.opensearch.jobscheduler.utils.LockServiceImpl.acquireLock(LockServiceImpl.java:138) ~[opensearch-job-scheduler-3.3.2.0.jar:3.3.2.0]
        at org.opensearch.indexmanagement.indexstatemanagement.ManagedIndexRunner$runJob$1.invokeSuspend$lambda$0(ManagedIndexRunner.kt:244) ~[opensearch-index-management-3.3.2.0.jar:3.3.2.0]
        at org.opensearch.indexmanagement.opensearchapi.OpenSearchExtensionsKt.suspendUntil(OpenSearchExtensions.kt:230) ~[opensearch-index-management-3.3.2.0.jar:3.3.2.0]
        at org.opensearch.indexmanagement.indexstatemanagement.ManagedIndexRunner$runJob$1.invokeSuspend(ManagedIndexRunner.kt:244) ~[opensearch-index-management-3.3.2.0.jar:3.3.2.0]
        at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:33) [kotlin-stdlib-2.2.0.jar:2.2.0-release-294]
        at kotlinx.coroutines.DispatchedTask.run(DispatchedTask.kt:108) [kotlinx-coroutines-core-jvm-1.7.3.jar:?]
        at kotlinx.coroutines.scheduling.CoroutineScheduler.runSafely(CoroutineScheduler.kt:584) [kotlinx-coroutines-core-jvm-1.7.3.jar:?]
        at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.executeTask(CoroutineScheduler.kt:793) [kotlinx-coroutines-core-jvm-1.7.3.jar:?]
        at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.runWorker(CoroutineScheduler.kt:697) [kotlinx-coroutines-core-jvm-1.7.3.jar:?]
        at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.run(CoroutineScheduler.kt:684) [kotlinx-coroutines-core-jvm-1.7.3.jar:?]
        Suppressed: kotlinx.coroutines.internal.DiagnosticCoroutineContextException

I created the index manually based on the plugin settings:

PUT .opendistro-job-scheduler-lock
{
  "mappings": {
    "dynamic": "strict",
    "properties": {
      "job_id": {
        "type": "keyword"
      },
      "job_index_name": {
        "type": "keyword"
      },
      "lock_duration_seconds": {
        "type": "long"
      },
      "lock_time": {
        "type": "date",
        "format": "epoch_second"
      },
      "released": {
        "type": "boolean"
      }
    }
  },
  "settings": {
    "index": {
      "number_of_shards": "1",
      "number_of_replicas": "1"
    }
  }
}

And I started getting the same error as before:

Error

[2025-12-05T15:59:15,241][ERROR][o.o.j.u.LockServiceImpl  ] [node10] Exception occurred finding lock
org.opensearch.OpenSearchSecurityException: no permissions for [] and User [name=plugin:org.opensearch.jobscheduler.JobSchedulerPlugin, backend_roles=[], requestedTenant=null]

Stacktrace

[2025-12-05T15:59:15,240][INFO ][o.o.j.t.PluginClient     ] [node10] Running transport action with subject: plugin:org.opensearch.jobscheduler.JobSchedulerPlugin
[2025-12-05T15:59:15,241][INFO ][o.o.s.p.SystemIndexAccessEvaluator] [node10] No indices:data/read/get permission for user roles [] to System Indices .opendistro-job-scheduler-lock
[2025-12-05T15:59:15,241][ERROR][o.o.j.u.LockServiceImpl  ] [node10] Exception occurred finding lock
org.opensearch.OpenSearchSecurityException: no permissions for [] and User [name=plugin:org.opensearch.jobscheduler.JobSchedulerPlugin, backend_roles=[], requestedTenant=null]
        at org.opensearch.security.filter.SecurityFilter.lambda$apply0$3(SecurityFilter.java:415) [opensearch-security-3.3.2.0.jar:3.3.2.0]
        at org.opensearch.security.filter.SecurityFilter.apply0(SecurityFilter.java:509) [opensearch-security-3.3.2.0.jar:3.3.2.0]
        at org.opensearch.security.filter.SecurityFilter.apply(SecurityFilter.java:175) [opensearch-security-3.3.2.0.jar:3.3.2.0]
        at org.opensearch.action.support.TransportAction$RequestFilterChain.proceed(TransportAction.java:218) [opensearch-3.3.2.jar:3.3.2]
        at org.opensearch.performanceanalyzer.action.PerformanceAnalyzerActionFilter.apply(PerformanceAnalyzerActionFilter.java:81) [opensearch-performance-analyzer-3.3.2.0.jar:3.3.2.0]
        at org.opensearch.action.support.TransportAction$RequestFilterChain.proceed(TransportAction.java:218) [opensearch-3.3.2.jar:3.3.2]
        at org.opensearch.action.support.TransportAction.execute(TransportAction.java:190) [opensearch-3.3.2.jar:3.3.2]
        at org.opensearch.action.support.TransportAction.execute(TransportAction.java:109) [opensearch-3.3.2.jar:3.3.2]
        at org.opensearch.transport.client.node.NodeClient.executeLocally(NodeClient.java:113) [opensearch-3.3.2.jar:3.3.2]
        at org.opensearch.transport.client.node.NodeClient.doExecute(NodeClient.java:100) [opensearch-3.3.2.jar:3.3.2]
        at org.opensearch.transport.client.support.AbstractClient.execute(AbstractClient.java:501) [opensearch-3.3.2.jar:3.3.2]
        at org.opensearch.transport.client.FilterClient.doExecute(FilterClient.java:83) [opensearch-3.3.2.jar:3.3.2]
        at org.opensearch.jobscheduler.transport.PluginClient.lambda$doExecute$0(PluginClient.java:56) [opensearch-job-scheduler-3.3.2.0.jar:3.3.2.0]
        at org.opensearch.security.identity.SecurePluginSubject.runAs(SecurePluginSubject.java:52) [opensearch-security-3.3.2.0.jar:3.3.2.0]
        at org.opensearch.jobscheduler.transport.PluginClient.doExecute(PluginClient.java:54) [opensearch-job-scheduler-3.3.2.0.jar:3.3.2.0]
        at org.opensearch.transport.client.support.AbstractClient.execute(AbstractClient.java:501) [opensearch-3.3.2.jar:3.3.2]
        at org.opensearch.transport.client.support.AbstractClient.get(AbstractClient.java:597) [opensearch-3.3.2.jar:3.3.2]
        at org.opensearch.jobscheduler.utils.LockServiceImpl.findLock(LockServiceImpl.java:282) [opensearch-job-scheduler-3.3.2.0.jar:3.3.2.0]
        at org.opensearch.jobscheduler.utils.LockServiceImpl.lambda$acquireLockWithId$0(LockServiceImpl.java:180) [opensearch-job-scheduler-3.3.2.0.jar:3.3.2.0]
        at org.opensearch.core.action.ActionListener$1.onResponse(ActionListener.java:82) [opensearch-core-3.3.2.jar:3.3.2]
        at org.opensearch.jobscheduler.utils.LockServiceImpl.createLockIndex(LockServiceImpl.java:102) [opensearch-job-scheduler-3.3.2.0.jar:3.3.2.0]
        at org.opensearch.jobscheduler.utils.LockServiceImpl.acquireLockWithId(LockServiceImpl.java:177) [opensearch-job-scheduler-3.3.2.0.jar:3.3.2.0]
        at org.opensearch.jobscheduler.utils.LockServiceImpl.acquireLock(LockServiceImpl.java:138) [opensearch-job-scheduler-3.3.2.0.jar:3.3.2.0]
        at org.opensearch.indexmanagement.indexstatemanagement.ManagedIndexRunner$runJob$1.invokeSuspend$lambda$0(ManagedIndexRunner.kt:244) [opensearch-index-management-3.3.2.0.jar:3.3.2.0]
        at org.opensearch.indexmanagement.opensearchapi.OpenSearchExtensionsKt.suspendUntil(OpenSearchExtensions.kt:230) [opensearch-index-management-3.3.2.0.jar:3.3.2.0]
        at org.opensearch.indexmanagement.indexstatemanagement.ManagedIndexRunner$runJob$1.invokeSuspend(ManagedIndexRunner.kt:244) [opensearch-index-management-3.3.2.0.jar:3.3.2.0]
        at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:33) [kotlin-stdlib-2.2.0.jar:2.2.0-release-294]
        at kotlinx.coroutines.DispatchedTask.run(DispatchedTask.kt:108) [kotlinx-coroutines-core-jvm-1.7.3.jar:?]
        at kotlinx.coroutines.scheduling.CoroutineScheduler.runSafely(CoroutineScheduler.kt:584) [kotlinx-coroutines-core-jvm-1.7.3.jar:?]
        at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.executeTask(CoroutineScheduler.kt:793) [kotlinx-coroutines-core-jvm-1.7.3.jar:?]
        at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.runWorker(CoroutineScheduler.kt:697) [kotlinx-coroutines-core-jvm-1.7.3.jar:?]
        at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.run(CoroutineScheduler.kt:684) [kotlinx-coroutines-core-jvm-1.7.3.jar:?]
[2025-12-05T15:59:15,243][ERROR][o.o.b.OpenSearchUncaughtExceptionHandler] [node10] uncaught exception in thread [DefaultDispatcher-worker-2]
org.opensearch.OpenSearchSecurityException: no permissions for [] and User [name=plugin:org.opensearch.jobscheduler.JobSchedulerPlugin, backend_roles=[], requestedTenant=null]
        at org.opensearch.security.filter.SecurityFilter.lambda$apply0$3(SecurityFilter.java:415) ~[?:?]
        at org.opensearch.security.filter.SecurityFilter.apply0(SecurityFilter.java:509) ~[?:?]
        at org.opensearch.security.filter.SecurityFilter.apply(SecurityFilter.java:175) ~[?:?]
        at org.opensearch.action.support.TransportAction$RequestFilterChain.proceed(TransportAction.java:218) ~[opensearch-3.3.2.jar:3.3.2]
        at org.opensearch.performanceanalyzer.action.PerformanceAnalyzerActionFilter.apply(PerformanceAnalyzerActionFilter.java:81) ~[?:?]
        at org.opensearch.action.support.TransportAction$RequestFilterChain.proceed(TransportAction.java:218) ~[opensearch-3.3.2.jar:3.3.2]
        at org.opensearch.action.support.TransportAction.execute(TransportAction.java:190) ~[opensearch-3.3.2.jar:3.3.2]
        at org.opensearch.action.support.TransportAction.execute(TransportAction.java:109) ~[opensearch-3.3.2.jar:3.3.2]
        at org.opensearch.transport.client.node.NodeClient.executeLocally(NodeClient.java:113) ~[opensearch-3.3.2.jar:3.3.2]
        at org.opensearch.transport.client.node.NodeClient.doExecute(NodeClient.java:100) ~[opensearch-3.3.2.jar:3.3.2]
        at org.opensearch.transport.client.support.AbstractClient.execute(AbstractClient.java:501) ~[opensearch-3.3.2.jar:3.3.2]
        at org.opensearch.transport.client.FilterClient.doExecute(FilterClient.java:83) ~[opensearch-3.3.2.jar:3.3.2]
        at org.opensearch.jobscheduler.transport.PluginClient.lambda$doExecute$0(PluginClient.java:56) ~[?:?]
        at org.opensearch.security.identity.SecurePluginSubject.runAs(SecurePluginSubject.java:52) ~[?:?]
        at org.opensearch.jobscheduler.transport.PluginClient.doExecute(PluginClient.java:54) ~[?:?]
        at org.opensearch.transport.client.support.AbstractClient.execute(AbstractClient.java:501) ~[opensearch-3.3.2.jar:3.3.2]
        at org.opensearch.transport.client.support.AbstractClient.get(AbstractClient.java:597) ~[opensearch-3.3.2.jar:3.3.2]
        at org.opensearch.jobscheduler.utils.LockServiceImpl.findLock(LockServiceImpl.java:282) ~[opensearch-job-scheduler-3.3.2.0.jar:3.3.2.0]
        at org.opensearch.jobscheduler.utils.LockServiceImpl.lambda$acquireLockWithId$0(LockServiceImpl.java:180) ~[opensearch-job-scheduler-3.3.2.0.jar:3.3.2.0]
        at org.opensearch.core.action.ActionListener$1.onResponse(ActionListener.java:82) ~[opensearch-core-3.3.2.jar:3.3.2]
        at org.opensearch.jobscheduler.utils.LockServiceImpl.createLockIndex(LockServiceImpl.java:102) ~[opensearch-job-scheduler-3.3.2.0.jar:3.3.2.0]
        at org.opensearch.jobscheduler.utils.LockServiceImpl.acquireLockWithId(LockServiceImpl.java:177) ~[opensearch-job-scheduler-3.3.2.0.jar:3.3.2.0]
        at org.opensearch.jobscheduler.utils.LockServiceImpl.acquireLock(LockServiceImpl.java:138) ~[opensearch-job-scheduler-3.3.2.0.jar:3.3.2.0]
        at org.opensearch.indexmanagement.indexstatemanagement.ManagedIndexRunner$runJob$1.invokeSuspend$lambda$0(ManagedIndexRunner.kt:244) ~[opensearch-index-management-3.3.2.0.jar:3.3.2.0]
        at org.opensearch.indexmanagement.opensearchapi.OpenSearchExtensionsKt.suspendUntil(OpenSearchExtensions.kt:230) ~[opensearch-index-management-3.3.2.0.jar:3.3.2.0]
        at org.opensearch.indexmanagement.indexstatemanagement.ManagedIndexRunner$runJob$1.invokeSuspend(ManagedIndexRunner.kt:244) ~[opensearch-index-management-3.3.2.0.jar:3.3.2.0]
        at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:33) [kotlin-stdlib-2.2.0.jar:2.2.0-release-294]
        at kotlinx.coroutines.DispatchedTask.run(DispatchedTask.kt:108) [kotlinx-coroutines-core-jvm-1.7.3.jar:?]
        at kotlinx.coroutines.scheduling.CoroutineScheduler.runSafely(CoroutineScheduler.kt:584) [kotlinx-coroutines-core-jvm-1.7.3.jar:?]
        at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.executeTask(CoroutineScheduler.kt:793) [kotlinx-coroutines-core-jvm-1.7.3.jar:?]
        at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.runWorker(CoroutineScheduler.kt:697) [kotlinx-coroutines-core-jvm-1.7.3.jar:?]
        at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.run(CoroutineScheduler.kt:684) [kotlinx-coroutines-core-jvm-1.7.3.jar:?]
        Suppressed: kotlinx.coroutines.internal.DiagnosticCoroutineContextException

Additional Information

All the policy managed indices are in the initializing state.

Related component

Plugins

To Reproduce

  1. Install OS 3.3.2
  2. Create an index
  3. Apply an ISM policy to the index
  4. Observe the logs for the aforementioned error.

Expected behavior

The plugin is able to access the indices it needs.

Additional Details

Plugins
Default

Screenshots
NA

Host/Environment (please complete the following information):

  • OS: Ubuntu
  • Version 20.04.6 LTS

Additional context
Installed using Debian .dpkg.

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Type

    No type
    No fields configured for issues without a type.

    Projects

    Status
    🆕 New

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions