Invalid page size specified: '1000'. Must be between 1 and 999 inclusive

Hi All,

We installed V3.1 Azure Active Directory (MSGraph Connector) on our Identity Cloud instance and started getting “Invalid page size specified: ‘1000’. Must be between 1 and 999 inclusive.” error when running reconciliation. Is there any way to update page size on the connector configuration to bypass this issue?

Here is the error trace for reference:

{
    "payload": "org.forgerock.openidm.sync.SynchronizationException: Invalid page size specified: '1000'. Must be between 1 and 999 inclusive.\n\tat org.forgerock.openidm.sync.ReconTypeBase.query(ReconTypeBase.java:324)\n\tat org.forgerock.openidm.sync.ReconTypeByQuery.querySource(ReconTypeByQuery.java:53)\n\tat org.forgerock.openidm.sync.ReconciliationContext.querySourceIter(ReconciliationContext.java:392)\n\tat org.forgerock.openidm.sync.NonClusteredRecon.dispatchRecon(NonClusteredRecon.java:140)\n\tat org.forgerock.openidm.sync.ReconciliationService.lambda$reconcile$10(ReconciliationService.java:561)\n\tat org.forgerock.openidm.metrics.MetricsCollector.time(MetricsCollector.java:112)\n\tat org.forgerock.openidm.sync.ReconciliationService.lambda$reconcile$11(ReconciliationService.java:560)\n\tat java.base/java.util.Optional.map(Unknown Source)\n\tat org.forgerock.openidm.sync.ReconciliationService.reconcile(ReconciliationService.java:560)\n\tat org.forgerock.openidm.sync.ReconciliationService.lambda$reconcileViaExecutor$9(ReconciliationService.java:539)\n\tat java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)\n\tat java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)\n\tat java.base/java.lang.Thread.run(Unknown Source)\nCaused by: org.forgerock.json.resource.BadRequestException: Invalid page size specified: '1000'. Must be between 1 and 999 inclusive.\n\tat org.forgerock.openidm.provisioner.openicf.impl.ObjectClassResourceProvider.handleQuery(ObjectClassResourceProvider.java:580)\n\tat org.forgerock.json.resource.Router.handleQuery(Router.java:314)\n\tat org.forgerock.json.resource.FilterChain$Cursor.handleQuery(FilterChain.java:94)\n\tat org.forgerock.json.resource.ResourceApiVersionRoutingFilter.filterQuery(ResourceApiVersionRoutingFilter.java:71)\n\tat org.forgerock.json.resource.FilterChain$Cursor.handleQuery(FilterChain.java:92)\n\tat org.forgerock.json.resource.FilterChain.handleQuery(FilterChain.java:249)\n\tat org.forgerock.json.resource.Router.handleQuery(Router.java:314)\n\tat org.forgerock.json.resource.FilterChain$Cursor.handleQuery(FilterChain.java:94)\n\tat org.forgerock.json.resource.Filters$ConditionalFilter.filterQuery(Filters.java:84)\n\tat org.forgerock.json.resource.FilterChain$Cursor.handleQuery(FilterChain.java:92)\n\tat org.forgerock.json.resource.Filters$ConditionalFilter.filterQuery(Filters.java:84)\n\tat org.forgerock.json.resource.FilterChain$Cursor.handleQuery(FilterChain.java:92)\n\tat org.forgerock.json.resource.Filters$ConditionalFilter.filterQuery(Filters.java:84)\n\tat org.forgerock.json.resource.FilterChain$Cursor.handleQuery(FilterChain.java:92)\n\tat org.forgerock.json.resource.Filters$ConditionalFilter.filterQuery(Filters.java:84)\n\tat org.forgerock.json.resource.FilterChain$Cursor.handleQuery(FilterChain.java:92)\n\tat org.forgerock.json.resource.Filters$ConditionalFilter.filterQuery(Filters.java:84)\n\tat org.forgerock.json.resource.FilterChain$Cursor.handleQuery(FilterChain.java:92)\n\tat org.forgerock.json.resource.Filters$ConditionalFilter.filterQuery(Filters.java:84)\n\tat org.forgerock.json.resource.FilterChain$Cursor.handleQuery(FilterChain.java:92)\n\tat org.forgerock.json.resource.Filters$ConditionalFilter.filterQuery(Filters.java:84)\n\tat org.forgerock.json.resource.FilterChain$Cursor.handleQuery(FilterChain.java:92)\n\tat org.forgerock.json.resource.Filters$ConditionalFilter.filterQuery(Filters.java:84)\n\tat org.forgerock.json.resource.FilterChain$Cursor.handleQuery(FilterChain.java:92)\n\tat org.forgerock.json.resource.Filters$ConditionalFilter.filterQuery(Filters.java:84)\n\tat org.forgerock.json.resource.FilterChain$Cursor.handleQuery(FilterChain.java:92)\n\tat org.forgerock.json.resource.Filters$ConditionalFilter.filterQuery(Filters.java:84)\n\tat org.forgerock.json.resource.FilterChain$Cursor.handleQuery(FilterChain.java:92)\n\tat org.forgerock.json.resource.Filters$ConditionalFilter.filterQuery(Filters.java:84)\n\tat org.forgerock.json.resource.FilterChain$Cursor.handleQuery(FilterChain.java:92)\n\tat org.forgerock.json.resource.Filters$ConditionalFilter.filterQuery(Filters.java:84)\n\tat org.forgerock.json.resource.FilterChain$Cursor.handleQuery(FilterChain.java:92)\n\tat org.forgerock.json.resource.Filters$ConditionalFilter.filterQuery(Filters.java:84)\n\tat org.forgerock.json.resource.FilterChain$Cursor.handleQuery(FilterChain.java:92)\n\tat org.forgerock.json.resource.Filters$ConditionalFilter.filterQuery(Filters.java:84)\n\tat org.forgerock.json.resource.FilterChain$Cursor.handleQuery(FilterChain.java:92)\n\tat org.forgerock.json.resource.Filters$ConditionalFilter.filterQuery(Filters.java:84)\n\tat org.forgerock.json.resource.FilterChain$Cursor.handleQuery(FilterChain.java:92)\n\tat org.forgerock.json.resource.Filters$ConditionalFilter.filterQuery(Filters.java:84)\n\tat org.forgerock.json.resource.FilterChain$Cursor.handleQuery(FilterChain.java:92)\n\tat org.forgerock.json.resource.Filters$ConditionalFilter.filterQuery(Filters.java:84)\n\tat org.forgerock.json.resource.FilterChain$Cursor.handleQuery(FilterChain.java:92)\n\tat org.forgerock.openidm.audit.filter.AuditFilter.lambda$filterQuery$4(AuditFilter.java:143)\n\tat org.forgerock.openidm.audit.filter.AuditFilter.logAuditAccessEntry(AuditFilter.java:175)\n\tat org.forgerock.openidm.audit.filter.AuditFilter.filterQuery(AuditFilter.java:143)\n\tat org.forgerock.openidm.router.filter.MutableFilterDecorator.filterQuery(MutableFilterDecorator.java:90)\n\tat org.forgerock.json.resource.Filters$ConditionalFilter.filterQuery(Filters.java:82)\n\tat org.forgerock.json.resource.FilterChain$Cursor.handleQuery(FilterChain.java:92)\n\tat org.forgerock.openidm.servlet.internal.DefaultApiVersionFilter.lambda$filterQuery$6(DefaultApiVersionFilter.java:201)\n\tat org.forgerock.openidm.servlet.internal.DefaultApiVersionFilter.handleRequest(DefaultApiVersionFilter.java:219)\n\tat org.forgerock.openidm.servlet.internal.DefaultApiVersionFilter.filterQuery(DefaultApiVersionFilter.java:201)\n\tat org.forgerock.openidm.router.filter.MutableFilterDecorator.filterQuery(MutableFilterDecorator.java:90)\n\tat org.forgerock.json.resource.FilterChain$Cursor.handleQuery(FilterChain.java:92)\n\tat org.forgerock.openidm.servlet.internal.ResourceFilters$3.lambda$filterQuery$4(ResourceFilters.java:197)\n\tat org.forgerock.openidm.servlet.internal.ResourceFilters$3.handleRequestWithLogging(ResourceFilters.java:225)\n\tat org.forgerock.openidm.servlet.internal.ResourceFilters$3.filterQuery(ResourceFilters.java:197)\n\tat org.forgerock.json.resource.FilterChain$Cursor.handleQuery(FilterChain.java:92)\n\tat org.forgerock.openidm.router.filter.QueryIdToQueryFilterTransformFilter.filterQuery(QueryIdToQueryFilterTransformFilter.java:258)\n\tat org.forgerock.json.resource.Filters$ConditionalFilter.filterQuery(Filters.java:82)\n\tat org.forgerock.json.resource.FilterChain$Cursor.handleQuery(FilterChain.java:92)\n\tat org.forgerock.json.resource.Filters$ConditionalFilter.filterQuery(Filters.java:84)\n\tat org.forgerock.json.resource.FilterChain$Cursor.handleQuery(FilterChain.java:92)\n\tat org.forgerock.json.resource.Filters$ConditionalFilter.filterQuery(Filters.java:84)\n\tat org.forgerock.json.resource.FilterChain$Cursor.handleQuery(FilterChain.java:92)\n\tat org.forgerock.json.resource.FilterChain.handleQuery(FilterChain.java:249)\n\tat org.forgerock.json.resource.InternalConnection.queryAsync(InternalConnection.java:74)\n\tat org.forgerock.json.resource.AbstractAsynchronousConnection.query(AbstractAsynchronousConnection.java:72)\n\tat org.forgerock.json.resource.AbstractConnectionWrapper.query(AbstractConnectionWrapper.java:165)\n\tat org.forgerock.openidm.servlet.internal.ServletConnectionFactory$InternalConnectionWrapper.lambda$query$12(ServletConnectionFactory.java:350)\n\tat org.forgerock.openidm.metrics.MetricsCollector.time(MetricsCollector.java:51)\n\tat org.forgerock.openidm.metrics.MetricsCollector.time(MetricsCollector.java:68)\n\tat org.forgerock.openidm.servlet.internal.ServletConnectionFactory$InternalConnectionWrapper.time(ServletConnectionFactory.java:265)\n\tat org.forgerock.openidm.servlet.internal.ServletConnectionFactory$InternalConnectionWrapper.query(ServletConnectionFactory.java:350)\n\tat org.forgerock.json.resource.AbstractConnectionWrapper.query(AbstractConnectionWrapper.java:165)\n\tat org.forgerock.openidm.sync.ReconTypeBase.query(ReconTypeBase.java:285)\n\t... 12 more\nCaused by: java.lang.IllegalArgumentException: Invalid page size specified: '1000'. Must be between 1 and 999 inclusive.\n\tat org.forgerock.openicf.connectors.msgraphapi.MSGraphAPIUtils.adaptedClientException(MSGraphAPIUtils.java:351)\n\tat org.forgerock.openicf.connectors.msgraphapi.MSGraphAPIConnector.executeQuery(MSGraphAPIConnector.java:301)\n\tat org.forgerock.openicf.connectors.msgraphapi.MSGraphAPIConnector.executeQuery(MSGraphAPIConnector.java:1)\n\tat org.identityconnectors.framework.impl.api.local.operations.SearchImpl.rawSearch(SearchImpl.java:162)\n\tat org.identityconnectors.framework.impl.api.local.operations.SearchImpl.search(SearchImpl.java:118)\n\tat jdk.internal.reflect.GeneratedMethodAccessor258.invoke(Unknown Source)\n\tat java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)\n\tat java.base/java.lang.reflect.Method.invoke(Unknown Source)\n\tat org.identityconnectors.framework.impl.api.local.operations.ConnectorAPIOperationRunnerProxy.invoke(ConnectorAPIOperationRunnerProxy.java:104)\n\tat jdk.proxy14/jdk.proxy14.$Proxy89.search(Unknown Source)\n\tat jdk.internal.reflect.GeneratedMethodAccessor258.invoke(Unknown Source)\n\tat java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)\n\tat java.base/java.lang.reflect.Method.invoke(Unknown Source)\n\tat org.identityconnectors.framework.impl.api.local.operations.ThreadClassLoaderManagerProxy.invoke(ThreadClassLoaderManagerProxy.java:96)\n\tat jdk.proxy14/jdk.proxy14.$Proxy89.search(Unknown Source)\n\tat jdk.internal.reflect.GeneratedMethodAccessor258.invoke(Unknown Source)\n\tat java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)\n\tat java.base/java.lang.reflect.Method.invoke(Unknown Source)\n\tat org.identityconnectors.framework.impl.api.BufferedResultsProxy$BufferedResultsHandler.run(BufferedResultsProxy.java:157)\nCaused by: com.microsoft.graph.http.GraphServiceException: Error code: Request_UnsupportedQuery",
    "timestamp": "2024-04-04T14:21:46.112000822Z",
    "type": "text/plain",
    "source": "idm-core"
}
{
    "payload": "Error message: Invalid page size specified: '1000'. Must be between 1 and 999 inclusive.",
    "timestamp": "2024-04-04T14:21:46.112664798Z",
    "type": "text/plain",
    "source": "idm-core"
}
{
    "payload": "GET https://graph.microsoft.com/v1.0/users?%24top=1000&%24select=country%2CpreferredLanguage%2Cmail%2Ccity%2CdisplayName%2CcompanyName%2CjobTitle%2CpostalCode%2CaccountEnabled%2Csurname%2Cstate%2Cdepartment%2CuserPrincipalName%2CmailNickname%2CgivenName%2ConPremisesSecurityIdentifier%2CproxyAddresses%2CotherMails%2CmobilePhone%2CstreetAddress%2ConPremisesImmutableId%2CusageLocation%2CuserType%2Cid",
    "timestamp": "2024-04-04T14:21:46.112677621Z",
    "type": "text/plain",
    "source": "idm-core"
}

Greetings Jitesh,

The configuration you need is provided with the LDAP connector:
https://backstage.forgerock.com/docs/openicf/latest/connector-reference/ldap.html

Strangely not with MSGraph. I’ll ask about.

Thanks for your reply. Are you suggesting a potential bug here with Azure connector V3.1?

Regards
Jitesh

I made no such suggestion.
As the primary service which uses paged results is the reconciler. The pages setting can be set there.
Specifically, what is the use case that inspired the error response, please.
For details on the reconciler, pages configuration please see:
https://backstage.forgerock.com/docs/idm/7.5/synchronization-guide/chap-performance.html

Cheers.

After upgrading Application template AD Azure version to 3.2, problem was resolved. It seems it was resolved in the latest application template for Azure AD.

Thanks for circling back Jitesh. It helps everyone.
FWIW, this discussion inspired a jira and the docs will be suitably updated. Thank you for raising the flag.

Cheers

1 Like