Issue
When using any SDK, and calling the get treatment method, the call returns a correct treatment value, however, the impression is not getting sent to Split server and does not show up in Results page.
Root Cause
There are few possible root causes:
When using Redis and Split Synchronizer:
- Synchronizer not able to read the Impression key in redis, check for any errors in Synchronizer debug log or Synchronizer admin console (http://[Synchronizer host]:3010//admin/dashboard) to determine root cause.
- Synchronizer is not keeping up with the Impressions flowing from SDK, check the KB article for solution.
When SDK connect directly to Split Cloud:
- All SDKs have a thread that runs frequently and checks the SDK cache for unpublished events and impressions. The frequency time is controlled by impressionsRefreshRate parameter for Impressions, and eventsPushRate for Events. If the SDK code exited while there is still unpublished cache, they will not be posted to Split Cloud.
- The Key Id (Customer, account, etc) used for the Impression has a character length higher than 256 bytes.
- If the SDK is running in a application environment that do not support multi-threading (like Ruby Unicorn and Python gunicorn), then only the main thread will run to calculate the treatments, but the post Impressions thread will not run.
Solution
- For Mobile SDKs (Android and iOS), use client.Flush() method which will post impressions on demand, the method can be used when the Application is set to background mode.
- Make sure to call the Destroy() for the client object before existing the code. Please refer to each SDK language section in our SDK documentation link for the method syntax. While the Destroy method will flush all the unpublished Impressions and Events, it is also recommended to add a delay or wait command for enough time to have the internal Impression posting thread run.
- Make sure the Key Id string used in get treatment method is less than 256 characters.
- Verify if the application server supports multi-threading, if not, install Synchronizer and Redis and configure the SDK to connect to Redis for cache management.
Comments
0 comments
Please sign in to leave a comment.