From a9e52d5362d6e124cc8de53be33e9b663ee498ee Mon Sep 17 00:00:00 2001 From: Ruchira Date: Thu, 20 Aug 2020 14:10:48 +0530 Subject: [PATCH] added logic for backoff when dataplane wrong --- Example/Rudder/_AppDelegate.m | 4 ++-- Rudder/Classes/RSEventRepository.m | 30 +++++++++++++++++++++++------- 2 files changed, 25 insertions(+), 9 deletions(-) diff --git a/Example/Rudder/_AppDelegate.m b/Example/Rudder/_AppDelegate.m index d27fb1c7..657c63bb 100644 --- a/Example/Rudder/_AppDelegate.m +++ b/Example/Rudder/_AppDelegate.m @@ -12,7 +12,7 @@ static NSString *DATA_PLANE_URL = @"https://7203f5894e2f.ngrok.io"; static NSString *CONTROL_PLANE_URL = @"https://98a1db41.ngrok.io"; -static NSString *WRITE_KEY = @"1ZTkZgCMnZyXeWsFbcjGsOx4jnv"; +static NSString *WRITE_KEY = @"1fG4PQTMJpujRfSmAhgv3IcN9Cb"; //static WKWebView *webView; @implementation _AppDelegate @@ -21,7 +21,7 @@ - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:( { // Override point for customization after application launch. RSConfigBuilder *builder = [[RSConfigBuilder alloc] init]; - [builder withDataPlaneURL:[[NSURL alloc] initWithString:DATA_PLANE_URL]]; + // [builder withDataPlaneURL:[[NSURL alloc] initWithString:DATA_PLANE_URL]]; [builder withLoglevel:RSLogLevelDebug]; [builder withTrackLifecycleEvens:YES]; [builder withRecordScreenViews:YES]; diff --git a/Rudder/Classes/RSEventRepository.m b/Rudder/Classes/RSEventRepository.m index b3c9a457..87e953ac 100644 --- a/Rudder/Classes/RSEventRepository.m +++ b/Rudder/Classes/RSEventRepository.m @@ -15,6 +15,11 @@ static RSEventRepository* _instance; @implementation RSEventRepository +typedef enum { + NETWORKERROR =1, + NETWORKSUCCESS =0, + WRONGWRITEKEY =2 +} NETWORKSTATE; + (instancetype)initiate:(NSString *)writeKey config:(RSConfig *) config { if (_instance == nil) { @@ -160,7 +165,7 @@ - (void) __initiateFactories : (NSArray*) destinations { - (void) __initiateProcessor { dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ [RSLogger logDebug:@"processor started"]; - + int errResp = 0; int sleepCount = 0; while (YES) { @@ -180,18 +185,25 @@ - (void) __initiateProcessor { [RSLogger logDebug:[[NSString alloc] initWithFormat:@"Payload: %@", payload]]; [RSLogger logInfo:[[NSString alloc] initWithFormat:@"EventCount: %lu", (unsigned long)dbMessage.messageIds.count]]; if (payload != nil) { - NSString* response = [self __flushEventsToServer:payload]; - [RSLogger logInfo:[[NSString alloc] initWithFormat:@"Response: %@", response]]; - if (response != nil && [response isEqual: @"OK"]) { + int response = [self __flushEventsToServer:payload]; + if (response == 0) { [RSLogger logDebug:@"clearing events from DB"]; [self->dbpersistenceManager clearEventsFromDB:dbMessage.messageIds]; sleepCount = 0; } + else if(response == 1){ + errResp = 1; + } } } [RSLogger logDebug:[[NSString alloc] initWithFormat:@"SleepCount: %d", sleepCount]]; sleepCount += 1; + if (errResp == 1){ + [RSLogger logDebug:[[NSString alloc] initWithFormat:@"Retrying in: %d", sleepCount*1000000]]; + usleep(sleepCount*1000000); + }else{ usleep(1000000); + } } }); } @@ -237,7 +249,7 @@ - (NSString*) __getPayloadFromMessages: (RSDBMessage*)dbMessage{ return [json copy]; } -- (NSString* _Nullable) __flushEventsToServer: (NSString*) payload { +- (int) __flushEventsToServer: (NSString*) payload { if (self->authToken == nil || [self->authToken isEqual:@""]) { [RSLogger logError:@"WriteKey was not correct. Aborting flush to server"]; return nil; @@ -245,7 +257,7 @@ - (NSString* _Nullable) __flushEventsToServer: (NSString*) payload { dispatch_semaphore_t semaphore = dispatch_semaphore_create(0); - __block NSString *responseStr = nil; + int __block responseStr = NETWORKSUCCESS; NSString *dataPlaneEndPoint = [self->config.dataPlaneUrl stringByAppendingString:@"/v1/batch"]; [RSLogger logDebug:[[NSString alloc] initWithFormat:@"endPointToFlush %@", dataPlaneEndPoint]]; @@ -265,10 +277,14 @@ - (NSString* _Nullable) __flushEventsToServer: (NSString*) payload { if (httpResponse.statusCode == 200) { if (data != nil) { - responseStr = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]; + NSString *response = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]; + if([response isEqual:@"OK"]){ + responseStr = NETWORKSUCCESS; + } } } else { NSString *errorResponse = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]; + responseStr = NETWORKERROR; [RSLogger logError:[[NSString alloc] initWithFormat:@"ServerError: %@", errorResponse]]; }