Itgenclr078: Newtonsoft.Json.JsonReaderException / zorgen stabiliteit Exact Online

Streaming Data en Error Handling Down the Road

Exact Online geeft op de REST API data streaming terug, ook al werkt men met pagina’s. Streaming betekent dat de HTTP status 200 OK al teruggegeven wordt, voordat de Exact Online API server bij de database alle data voor de pagina en verwerkt opgehaald heeft.

Echter, indien blijkt dat de data uit de database corrupt is, dan zal de Exact Online API server een foutmelding opnemen in de streaming data. De reeds naar de gebruiker (in dit geval Invantive SQL) opgestuurde HTTP status blijft echter 200 en kan niet meer gewijzigd worden in 4xx of 5xx. Bij het uitpakken van de data in JSON-formaat constateert Invantive SQL dat de teruggegeven data corrupt is. Vaak is dan een error zichtbaar in de JSON-data vanuit Exact Online. Soms wordt de corrupte data zelfs verwerkt in de verdere keten, omdat het toevallig net past binnen het JSON formaat; dit komt gelukkig echter uitermate zelden voor.

Suggestie richting Exact

De Exact Online API heeft geen goede logging voor partners en eindgebruikers om de problemen op te vragen zoals Invantive Cloud dat kent met Systeemberichten of Invantive Bridge Online via monitoring of e-mails. Geconstateerde problemen worden zelden of pas na lange tijd opgelost in Exact zelf, dus vanzelf weggaan doet het meestal niet.

Suggesties richting Exact Online om de impact van dergelijke verwarrende foutmeldingen te voorkomen zijn:

  • Selectief streamen: verzamel eerst een groter deel van de pagina door de buffergrootte te verhogen voordat streaming start. Gebruik nog steeds streaming wanneer dat performancetechnisch nodig is, maar de kans wordt kleiner dat de error in een ongeldig OData formaat teruggegeven wordt.
  • Gebruik foutcodes: de foutmeldingen an sich zijn verwarrend en niet geautomatiseerd herkenbaar door het ontbreken van unieke foutcodes en vertalingen. Door unieke foutcodes toe te voegen kan de software aan de zijde van de HTTP client geautomatiseerd keuzes maken hoe om te gaan met een melding in de stream.
  • Exact Online testomgeving: dergelijke datafouten komen relatief weinig voor, maar met grote consequenties. De meeste client software biedt er geen voorzieningen voor, anders dan paar keer opnieuw proberen of stilletjes overslaan, hetgeen de kans op datacorruptie verhoogt. De Exact Online API’s kennen geen testomgeving met bekende risico’s zoals beschreven op bijvoorbeeld Impact Exact Online API aanpassingen 1 juli 2021. Een eventuele toekomstige testomgeving zou in een foutgeneratiemodus gebracht kunnen worden zodat software op dit gedrag gecertificeerd kan worden. Dit is vergelijkbaar met driveropties zoals simulate-http-400-errors-percentage op Invantive SQL.
  • Exact Online monitoring: de informatie over een opgetreden fout is vluchtig en meestal alleen beschikbaar diep in de client software. Het achteraf controleren en herleiden van de oorzaak is daardoor afhankelijk van de kwaliteit van de client software qua logging faciliteiten. Voor zover bekend biedt buiten Invantive SQL geen enkel platform een toegankelijke oplossing hiervoor en dit honderden keren implementeren is niet maatschappelijk efficient. Daarom suggestie dat Exact Online ook foutmeldingen en gebruik toont op detailniveau van bijvoorbeeld de afgelopen 8 dagen behorende bij een client ID voor ontwikkelaars.

Hoe gaat Bridge Online hiermee om?

Vergelijkbare problemen met errors bij streaming data komen ook voor bij Invantive Bridge Online. In het Bridge Online monitoring scherm en in het scherm Systeemberichten met verzamelde meldingen verschijnen deze errors wel, terwijl bijvoorbeeld vanuit Power BI alleen een vergelijkbare vage foutmelding getoond wordt. Vanuit Bridge Online wordt ook een e-mail gestuurd bij een datafout omdat de meeste startende gebruikers nog niet zo goed hun weg in Invantive Cloud kennen.

Analyseren Error in Streaming Data

De enige praktische manier om er enigszins achter te komen is om native call logging aan te zetten en de native call log te doorzoeken zoals beschreven in Collect Native Platform Call Data. Meestal bevat één van de laatste logs de echte foutmelding. Het is het overwegen waard om de laatste in- en uitgaande call logs bij Exact Online API support in te dienen. Het oplossen kan echter geruime tijd duren; doorlooptijden tot oplossing van 6 maanden zijn niet ongebruikelijk.

Van Incident naar Oplossing

Eerlijkheid gebiedt te zeggen dat we vanuit Invantive geen tijd willen steken in het opvolgen van dergelijke datafouten bij een platform aangezien het probleem ook met andere apps dan Invantive SQL optreedt en Exact zelden oplossingen realiseert binnen een acceptabele termijn van zeg een maand. Soortgelijke problemen van datacorruptie volgens de metadata gelden voor meer cloudplatformen met vergelijkbaar problematische doorlooptijden. Een andere negatieve uitschieter daarin zijn de Atlassian producten. Positieve uitschieters zijn Loket (REST API) en Visma.net Financials.