Zo los je REQUEST_LIMIT_EXCEEDED op bij Salesforce-deployments

De organisatie heeft haar API-verzoektoewijzing verbruikt, waardoor verdere aanroepen, inclusief deploymentbewerkingen, worden geweigerd totdat deze wordt gereset.

Treedt op tijdens: elke API-aanroep, zodra de doorlopende 24-uurstoewijzing van de organisatie is uitgeput

Wat het betekent

REQUEST_LIMIT_EXCEEDED betekent dat de organisatie haar API-verzoeklimiet heeft uitgeput, doorgaans de doorlopende 24-uurstoewijzing, waardoor verdere aanroepen via REST, SOAP of Bulk API worden geweigerd totdat het gebruik wordt gereset of de limiet wordt verhoogd. Het is een limiet die voor de hele organisatie geldt, dus kan deze door elke combinatie van integraties worden veroorzaakt, niet alleen door de deploymentpipeline zelf.

De toewijzing schaalt mee met de edition en het aantal gelicentieerde gebruikers, dus een scratch org of Developer Edition-sandbox met een kleine, vaste toewijzing kan deze limiet bereiken via een CI-pipeline die op productie is afgestemd, ruim voordat productie dat ooit zou doen.

Diagnose

Veelvoorkomende oorzaken

CI-pipeline polt status met veel kleine aanroepen
Een pipeline controleert de deployment- of jobstatus met frequente individuele API-verzoeken in plaats van deze te bundelen of te spreiden.
Andere integraties delen dezelfde daglimiet
Andere systemen die met de organisatie zijn verbonden, verbruiken het grootste deel van de gedeelde API-toewijzing voordat de eigen aanroepen van de deployment plaatsvinden.
Scratch org of sandbox heeft een lagere limiet dan productie
De kleinere dagelijkse API-toewijzing van een lagere omgeving raakt uitgeput door een pipeline die is afgestemd op productiegebruik.

De oplossing

  1. Bundel aanroepen met Bulk API of composite requests
    Vervang veelvuldige individuele REST-aanroepen door de Bulk API of de Composite API om het totale aantal verzoeken te verlagen.
  2. Monitor het gebruik en spreid zware jobs
    Controleer het API-gebruik onder Setup, System Overview, en plan zware jobs zodat ze niet bovenop andere integraties stapelen.
    sf data query --query "SELECT ApiCurrentUsage, ApiRequestsPerDay FROM OrganizationLimits" --target-org myOrgAlias --use-tooling-api
  3. Vraag een limietverhoging aan waar het gebruik legitiem hoog is
    Vraag voor organisaties waar oprecht, aanhoudend gebruik regelmatig de limiet nadert een API-limietverhoging aan bij Salesforce.
In de praktijk

Hoe Serpent dit voorkomt

Serpent bundelt en hergebruikt verbindingen tussen de omgevingen van een team in plaats van per taak een nieuwe, spraakzame sessie te openen, waardoor het API-gebruik lager blijft dan bij een reeks onafhankelijk gescripte CI-jobs die dezelfde organisatie aanroepen. Zie de bibliotheek met Salesforce-deploymentfouten.

Releasedashboard met conflictmeldingen in Serpent

Preventie

Pol de deploymentstatus met exponentiële backoff, niet met vaste korte intervallen
Spreid statuscontroleaanroepen met oplopende vertraging in plaats van elke paar seconden te pollen, wat de dagelijkse toewijzing bij langlopende deploys snel opsoupeert.
Volg API-gebruik per integratie, niet alleen organisatiebreed
Breng in kaart welke connected app of welk serviceaccount de meeste aanroepen verbruikt, zodat een op hol geslagen integratie wordt opgemerkt voordat deze de deploymentpipeline uithongert.
Stem het CI-aanroepvolume af op de werkelijke toewijzing van de omgeving
Controleer de specifieke dagelijkse API-limiet van een scratch org of sandbox voordat je aanneemt dat een op productie afgestemde pipeline erin past.
Veelgestelde vragen

REQUEST_LIMIT_EXCEEDED, uitgelegd

Wordt deze limiet om middernacht in de tijdzone van mijn organisatie gereset?
Het is een doorlopend venster van 24 uur op basis van gebruik, geen vaste reset om middernacht, dus het exacte resetmoment hangt af van wanneer de aanroepen oorspronkelijk zijn gedaan.
Telt de Metadata API die voor deployments wordt gebruikt mee tegen dezelfde limiet als REST API-aanroepen?
Ja. Aanroepen via Metadata API, REST, SOAP, Bulk en Tooling API putten allemaal uit dezelfde organisatiebrede dagelijkse toewijzing, dus een zware data-integratie kan de limiet uitputten die een deployment vervolgens niet meer kan gebruiken.
Kan ik het resterende aantal API-aanroepen controleren voordat een deployment start?
Ja, bevraag het OrganizationLimits-object via de Tooling API, of controleer Setup, System Overview, voor het huidige gebruik en de dagelijkse toewijzing voordat je een grote job start.

Start gratis. Geen creditcard, geen installatie, geen verplichting.

Ingericht in minder dan 15 minuten. Geen DevOps-engineer nodig.

Benieuwd naar sneller releasen voordat je instapt? Laten we praten

Vrijblijvend.