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

    Projects

    Status

    🆕 New

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions