Itgenclr003 "Collection was modified; enumeration operation may not execute." bij replicatie Teamleader

Het testen met de laatste productieversie connecteert terug maar levert onderstaande fout op, dit bij onder meer volgende tabellen:

  • Teamleader.V1.companies
  • Teamleader.V1.meetings

Volgende tabel lijkt geen probleem op te leveren:

  • Teamleader.V2.Users

Wordt de V1 versie voor companies & meetings nog ondersteund d.d. 02/2022?

Collection was modified; enumeration operation may not execute.
2022-02-19 10:28:33.912 Error itgenclr003: System.InvalidOperationException
ValidationException
   at System.ThrowHelper.ThrowInvalidOperationException(ExceptionResource resource)
   at System.Collections.Generic.Dictionary`2.Enumerator.MoveNext()
   at Invantive.Data.NamedArray.ConvertDateTimeKindToUtc(GlobalState owner, ExecutionOptions executionOptions)
   at Invantive.Data.Providers.Teamleader.TeamleaderProvider.ReadDataFromJsonToken(GlobalState owner, ExecutionOptions executionOptions, JToken token, ExecutionStatistics executionStatistics, String basePath, List`1 allFieldTypes, List`1 rows, ODataObjectDefinition objectDefinition, JsonDatabaseColumnDefinitionCollection fields, QueryObject queryObject, ParameterList parameters, Int32& rowsRetrieved, AdditionalResultInformation additionalInfo, String url, String partitionCode, HashSet`1 selectFields)
   at Invantive.Data.Providers.Teamleader.TeamleaderProvider.ReadDataFromJsonToken(GlobalState owner, ExecutionOptions executionOptions, JToken token, ExecutionStatistics executionStatistics, String basePath, List`1 allFieldTypes, List`1 rows, Byte[]& postData, ODataObjectDefinition objectDefinition, JsonDatabaseColumnDefinitionCollection fields, QueryObject queryObject, ParameterList parameters, Int32& rowsRetrieved, AdditionalResultInformation additionalResultInformation, String url, String partitionCode, HashSet`1 selectFields)
   at Invantive.Data.Providers.Teamleader.TeamleaderProvider.PostAndReadDataFromServiceResponse(GlobalState owner, ExecutionOptions executionOptions, List`1 rows, String basePath, List`1 allFieldTypes, String url, Dictionary`2 inHeaders, Byte[]& postData, String anonymizedPostText, String partition, ODataObjectDefinition objectDefinition, JsonDatabaseColumnDefinitionCollection fields, QueryObject queryObject, ParameterList parameters, Int32& pagesRetrieved, Int32& rowsRetrieved, Int64& bytesRetrieved, AdditionalResultInformation additionalInfo, String callSafeNameOverrule, Boolean allowRetry, HashSet`1 selectFields, String acceptMimeType, Boolean preventRetryOnAuthenticationFailure)
   at Invantive.Data.Providers.Teamleader.TeamleaderProvider.QAR.MoveNext()
   at System.Linq.Enumerable.<SelectManyIterator>d__17`2.MoveNext()
   at System.Linq.Enumerable.WhereSelectEnumerableIterator`2.MoveNext()
   at Invantive.Data.Providers.DataCache.DataCacheProvider.MaintainTablePartitionVersionFactsOnePartition(GlobalState owner, ExecutionOptions executionOptions, ObjectDefinition objectDefinition, DatabaseColumnDefinitionCollection resultFields, Lazy`1 fetchFullDataSet, Boolean mayReplaceWithCachedData, String sourceDataContainerId, String partitionCode, IDataProvider dataSourceProvider, QueryObject originalQueryObject, Nullable`1 maxAgeDataMs, Decimal version, DcTablePartitionVersion previousReadyTablePartitionVersion, String refreshOrigin, PartitionData& replacementPartitionData)
   at Invantive.Data.Providers.DataCache.DataCacheProvider.MaintainTablePartitionVersionFactsOnePartitionAllVersions(GlobalState owner, ExecutionOptions executionOptions, ObjectDefinition objectDefinition, DatabaseColumnDefinitionCollection resultFields, Boolean mayReplaceWithCachedData, String sourceDataContainerId, String partitionCode, IDataProvider dataSourceProvider, QueryObject originalQueryObject, Nullable`1 maxAgeDataMs, String refreshOrigin)
   at Invantive.Data.Providers.DataCache.DataCacheProvider.QLZ(GlobalState , ExecutionOptions , ObjectDefinition , DatabaseColumnDefinitionCollection , PartitionData , QueryObject , Nullable`1 , String )
   at Invantive.Data.Providers.DataCache.DataCacheProvider.CEG.U(PartitionData , ParallelLoopState , Int64 )
   at Invantive.Basics.ParallelUtility.<>c__DisplayClass0_0`1.<ForEachWithAggregatedExceptions>b__0(TSource tSource, ParallelLoopState parallelLoopState, Int64 index)
--- End of stack trace from previous location where exception was thrown ---
   at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
   at (Object )
   at IBC.YAF.E(Object )
   at Invantive.Basics.ErrorConstants.ThrowOneOrMoreExceptions(GlobalState owner, ExecutionOptions executionOptions, IEnumerable`1 exceptions)
   at IBC.NRU.E(GlobalState , ExecutionOptions , IEnumerable`1 )
   at Invantive.Basics.ParallelUtility.ForEachWithAggregatedExceptions[TSource](GlobalState owner, ExecutionOptions executionOptions, IEnumerable`1 source, ParallelOptions parallelOptions, Action`3 body)
   at Invantive.Data.Providers.DataCache.DataCacheProvider.ELZ(GlobalState , ExecutionOptions , IDataProvider , ObjectDefinition , QueryObject , ParameterList , YieldedResultSet , Nullable`1 , Boolean , Int32 , String )
   at Invantive.Data.Providers.DataCache.DataCacheProvider.HandleOds(GlobalState owner, ExecutionOptions executionOptions, IDataProvider dataSourceProvider, ObjectDefinition objectDefinition, QueryObject queryObject, ParameterList parameters, YieldedResultSet result, Nullable`1 maxAgeDataMs, Boolean forceUseOds, Int32 maximumNumberOfParallelRequests, String refreshOrigin)
   at Invantive.Sql.V1.OperationalDataStoreExecutionHint.Handle(GlobalState owner, ExecutionOptions executionOptions, IProviderManager manager, YieldedResultSet result, ExecutionHints executionHints, IDataProvider dataSourceProvider, ObjectDefinition objectDefinition, QueryObject queryObject, ParameterList parameters, Int32 maximumNumberOfParallelRequests, String refreshOrigin)
   at Invantive.Sql.V1.DataSourceOrFunctionTree.<GetData>d__51.MoveNext()
   at Invantive.Data.CompressedEnumerable`1.<GetEnumerator>d__10.MoveNext()
   at Invantive.Sql.V1.FirehoseResultSet.KJ.MoveNext()
   at Invantive.Sql.V1.FirehoseResultSet.NJ.MoveNext()
   at Invantive.Data.CompressedEnumerable`1.<GetEnumerator>d__10.MoveNext()
   at Invantive.Sql.V1.FirehoseResultSet.KJ.MoveNext()
   at Invantive.Sql.V1.FirehoseResultSet.NJ.MoveNext()
   at Invantive.Sql.V1.ChainedFirehose.DJ.MoveNext()
   at Invantive.Sql.V1.FirehoseResultSet.NJ.MoveNext()
   at System.Linq.Lookup`2.Create[TSource](IEnumerable`1 source, Func`2 keySelector, Func`2 elementSelector, IEqualityComparer`1 comparer)
   at System.Linq.Enumerable.ToLookup[TSource,TKey](IEnumerable`1 source, Func`2 keySelector)
   at Invantive.Sql.V1.GroupByIterator.VQ.MoveNext()
   at Invantive.Sql.V1.FirehoseResultSet.NJ.MoveNext()
   at Invantive.Sql.V1.SelectListIterator.PC.MoveNext()
   at Invantive.Sql.V1.FirehoseResultSet.NJ.MoveNext()
   at Invantive.Data.CompressedEnumerable`1.<GetEnumerator>d__10.MoveNext()
   at Invantive.Sql.V1.FirehoseResultSet.KJ.MoveNext()
   at Invantive.Sql.V1.MaterializeSparseArrayIterator.<Iterator>d__1.MoveNext()
   at Invantive.Sql.V1.QueryPlan.IQ.MoveNext()
   at Invantive.Data.ExtensionMethods.NNU`1.VNU.MoveNext()
   at System.Collections.Generic.List`1..ctor(IEnumerable`1 collection)
   at System.Linq.Enumerable.ToList[TSource](IEnumerable`1 source)
   at Invantive.Data.ConnectionManager.JV.R(QueryPlan )
   at System.Linq.Enumerable.WhereSelectArrayIterator`2.MoveNext()
   at System.Linq.Buffer`1..ctor(IEnumerable`1 source)
   at System.Linq.Enumerable.ToArray[TSource](IEnumerable`1 source)
   at Invantive.Data.ConnectionManager.ExecuteAndCombineQueryPlansV1(GlobalState owner, ExecutionOptions executionOptions, QueryPlan[] queryPlans, String sqlStatement, ParameterList parameters)
   at Invantive.Data.ConnectionManager.ExecuteProviderPassthroughSqlAction(GlobalState owner, ExecutionOptions executionOptions, String actionSql, ParameterList parameters, String callSafeNameOverrule)
--- End of stack trace from previous location where exception was thrown ---
   at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
   at Invantive.Data.ConnectionManager.ExecuteProviderPassthroughSqlAction(GlobalState owner, ExecutionOptions executionOptions, String actionSql, ParameterList parameters, String callSafeNameOverrule)
   at Invantive.Data.ConnectionManager.PassthroughSqlAction(GlobalState owner, ExecutionOptions executionOptions, String actionSql, ParameterList parameters, String callSafeNameOverrule)
--- End of stack trace from previous location where exception was thrown ---
   at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
   at Invantive.Data.ConnectionManager.PassthroughSqlAction(GlobalState owner, ExecutionOptions executionOptions, String actionSql, ParameterList parameters, String callSafeNameOverrule)
   at Invantive.Data.ActionProceduresBase.PassthroughSqlAction(GlobalState owner, ExecutionOptions executionOptions, String actionSql, ParameterList parameters, String callSafeNameOverrule)
   at IDH.J.ProcessStatement(GlobalState owner, ExecutionOptions executionOptions, String statement, ResultSet& resultSet, Action`2 fetchMoreRows, Action`9 executeStatement, Boolean isInInteractiveMode, ScriptingLanguageNextStepSpecification& nextStepSpecification)
   at IDH.J.ProcessStatements(GlobalState owner, ExecutionOptions executionOptions, Action`2 fetchMoreRows, Action`9 executeStatement, IEnumerable`1 statements, String sourceFileName, ScriptingLanguageNextStepSpecification& exitSpecification)
2022-02-19 10:28:33.912 Information itgendhb221: Einde programma-uitvoering met exitcode 6.

De V1 tabellen worden zowel door Teamleader als Invantive SQL nog ondersteund. Teamleader heeft aangegeven ze in de toekomst niet meer te gaan ondersteunen, maar dit is nog niet gebeurd.

De melding itgenclr003 heeft een andere oorzaak.

Wat is de exacte versie?

Wat is het exact SQL-statement dat deze melding opwekt?

De versie van data hub is: 22.0.46

De volgende queries worden uitgevoerd:

select /*+ ods(true, interval '1 seconds') */ count(*) from Teamleader.V1.companies@tl;
select /*+ ods(true, interval '1 seconds') */ count(*) from Teamleader.V1.meetings@tl;

Het wissen van de tabel op voorhand levert dezelfde foutmelding op:

alter persistent cache drop table … 

Dank; ik begrijp dat er wat verwarring is omdat twee naamgenoten een issue melden met een ander product op Teamleader. Het punt op Invantive Data Replicator is afgesplitst.

Inmiddels is het probleem bevestigd en reproduceerbaar gemaakt. Het treedt op bij het gebruik van datums in ieder geval de versie 1 API van Teamleader door een overstap naar expliciete UTC voor Teamleader in de CET-tijdzone.

Er zal morgen gewerkt worden aan een oplossing.

In de volgende release zal een bugfix hiervoor meegenomen worden. Deze specifieke itgenclr003 melding treedt uitsluitend op bij Teamleader V1 API’s die aangeroepen worden met Microsoft .NET 4.7.2. Op Microsoft .NET Core-platformen treedt het platform niet op, inclusief Invantive Cloud.

De release 22.0.58 is te vinden op: