Het lijkt er op dat hij ping-pongt tussen twee versies van het opslagformaat voor Data Hub installatie-instellingen. Hier zit ook de licentiesleutel versleuteld in opgeborgen.
Zou je eens kunnen proberen om de 20.0.11 te upgraden naar een recente 20.0 release, bijvoorbeeld 20.0.114? 20.0.11 is een van de eerste versies binnen 20.0.
En daarna nogmaals proberen.
Gebruikte RSA Implementatie
Mocht daarna nog niet werken, dan is het mogelijk dat er twee verschillende RSA-implementaties elkaar in de weg zitten.
Kijk daarom wat de waarde is van de omgevingsvariabele INVANTIVE_RSA
? Is die leeg/afwezig of gelijk aan INVANTIVE
?
Mocht de waarde van INVANTIVE_RSA
leeg zijn of anders dan INVANTIVE
, stel hem s.v.p. in op INVANTIVE
. Laad daarna de licentiesleutel nog een keer op zowel 20.0 als 20.1 BETA indien bij het opstarten een licentiesleutelerror optreedt. En draai daarna de jobs nogmaals:
- eerst willekeurige job met 20.0
- daarna een willekeurige 20.1 BETA job
- dan weer een 20.0 job
- nogmaals een 20.1 BETA
Werkt het dan?
Achtergrond
In ieder geval in de 17.32 gebruikten we de ingebouwde RSA-encryptie van Windows, maar die bleek niet betrouwbaar geïmplementeerd of te moeilijk voor onze beperkte breincapaciteit. Bij Windows server patches werden regelmatig maar onvoorspelbaar sleutels ongeldig en na patch Tuesday was het afwachten of niet massaal gebeld werd omdat de servers niet meer de jobs konden verwerken. Dit probleem trad op bij zowel on-premise als Azure en AWS servers. De meest voorkomende error was zoiets als:
Could not instantiate RSA crypto service provider for container 'InvantiveDevice' due to System.Security.Cryptography.CryptographicException: Key not valid for use in specified state.
at System.Security.Cryptography.Utils.CreateProvHandle(CspParameters parameters, Boolean randomKeyContainer)
at System.Security.Cryptography.Utils.GetKeyPairHelper(CspAlgorithmType keyType, CspParameters parameters, Boolean randomKeyContainer, Int32 dwKeySize, SafeProvHandle& safeProvHandle, SafeKeyHandle& safeKeyHandle)
at System.Security.Cryptography.RSACryptoServiceProvider.GetKeyPair()
at System.Security.Cryptography.RSACryptoServiceProvider..ctor(Int32 dwKeySize, CspParameters parameters, Boolean useDefaultKeySize)
at (Int32 , CspParameters )
at IBC.IDJ.U(Int32 , CspParameters )
at Invantive.Basics.StrongAsymmetricKey.CreateWindowsCryptoProvider(GlobalState owner, ExecutionOptions executionOptions, String keyContainerName)
Onder Linux, Mac OSX, Android en iOS zat vanaf de eerste releases al een eigen RSA-implementatie in Invantive SQL. Gezien de aanhoudende issues met Windows is de standaardinstelling ook voor Windows op enig moment gewisseld van de ingebouwde RSA-encryptie naar de eigen implementatie.
Licentiesleutel meegeven
Een alternatief is eventueel om de licentiesleutel expliciet mee te geven in elke batchjob. Dat kan via de licensekey
commandoregeloptie met Invantive Data Hub. Een voorbeeld van een batchjob:
set INVANTIVE_TRACE_FOLDER=c:\trace\xxacme
set INVANTIVE_CONFIGURATION_DATABASES_FOLDER=c:\jobs\xxacme\cfg
set INVANTIVE_PRG=C:\Program Files (x86)\Invantive Software BV\Invantive Data Hub 20.0\Invantive.Producer.QueryEngine.exe
set INVANTIVE_CONN=groep\database
set INVANTIVE_SQL_FILE=c:\jobs\xxacme\sql\job.sql
set INVANTIVE_LOG_FILE=c:\jobs\xxacme\log\job-%%Y%%m.log
set INVANTIVE_LOG_FILE_OVERWRITE=False
set INVANTIVE_INTERACTIVE=False
set INVANTIVE_LICENSE_KEY=lhGCN...CBAcg==
"%INVANTIVE_PRG%" /verbose /database:"%INVANTIVE_CONN%" /file:"%INVANTIVE_SQL_FILE%" /logfile:"%INVANTIVE_LOG_FILE%" /logoverwrite:"%INVANTIVE_LOG_FILE_OVERWRITE%" /interactive:%INVANTIVE_INTERACTIVE% /licensekey:%INVANTIVE_LICENSE_KEY%
IF %ERRORLEVEL% NEQ 0 (
echo Failed Data Hub job with exit code %ERRORLEVEL%.
exit /b %ERRORLEVEL%
)
echo Completed Data Hub job with exit code %ERRORLEVEL%.
Of dit volledig gaat werken weet ik niet op voorhand en zeker niet voor de genoemde combinatie van versies. Dat kan proefondervindelijk vastgesteld worden. Het kan zijn dat er alsnog geping-pongd wordt tussen de twee versies en dat daardoor het opstarten toch een itgenale014 foutmelding blijft geven.