public string UploadBlobWithRetry(Request request) { int blobId = request.Blob; //int remainingTries = Constants.MaxTrial; int remainingTries = 10; var exceptions = new List <Exception>(); string jsonRequest = new JavaScriptSerializer().Serialize(request); while (remainingTries > 0) { try { //Get blob storage account connection string randomly var blob = new WEP.GSP.CacheManager.CacheManager().GetBlob(blobId); //Upload gstn response to blobstorage var blobStorage = new BlobStorage(blob.Connection, Constants.GstnResponseContainer, request.RequestToken, new Dictionary <string, string>(), blob.Id); var blobPath = blobStorage.UploadBlob(request); blobId = (blobId + 1) % 10; //blobId += 1 % 10; return(blobPath); } catch (TimeoutException e) { exceptions.Add(e); } catch (CustomException cex) { exceptions.Add(cex); } catch (Exception ex) { throw ex; } Thread.Sleep(Constants.DelayTrialms); remainingTries--; if (remainingTries == 0) //Circit breaker { new RequestData().InsertBacklogRequest(request.RequestToken, request.Username, jsonRequest); } } throw new AggregateException("Could not process request. Will be re-attempt after some time", exceptions); }
/// <summary> /// ProcessGSTR3BFileData /// </summary> /// <param name="request"></param> /// <returns></returns> internal ServiceResponse <string> ProcessGSTR3BFileData(Request request) { #region Download from blob storage // ConfigData configData = new ConfigData(); var blob = new WEP.GSP.CacheManager.CacheManager().GetBlob(request.Blob); var blobStorageRetry = new BlobWithRetry(blob.Connection, Constants.CotainerPayload , request.BlobFile, new Dictionary <string, string>(), request.Blob); Attrbute attribute = blobStorageRetry.DownloadBlobRetry(); #endregion //Serialize to string string jsonReqst = new JavaScriptSerializer().Serialize(request); //log to table storage => P2 started TableStorage objTableStorage = new TableStorage(Constants.PartitionKey, Constants.RowKey , request.RequestToken , Constants.GSTNStageP2Table , Constants.actualTime); Task.Factory.StartNew(() => objTableStorage.InsertStageToTableStorage(blob.Keys, (int)WEP.GSP.Document.Stage.Response_Invoke_BEGIN)); //Sends request GSTN request.Response = new GSTR3B(request.Clientid , request.Statecd , request.Username , request.Txn , request.AuthToken , request.ClientSecret , request.IpUsr , request.RetPeriod , request.Gstin , request.RequestToken , request.ApiAction) .ExecuteGSTR3BFileDataWithRetry(attribute); request.ModifiedOn = System.DateTime.UtcNow.ToString(); //Upload response to blob var gstnStorageRespBlob = CommonFunction.GetGstnRespBlob(); var blobStorageGstn = new BlobStorage(gstnStorageRespBlob.Connection, Constants.GstnResponseContainer , request.BlobFile, new Dictionary <string, string>(), gstnStorageRespBlob.Id); var results = JsonConvert.DeserializeObject <GstnResponse>(request.Response); var blobPath = blobStorageGstn.UploadBlob(results); results.reqtoken = request.RequestToken; results.username = request.Username; results.apiAction = request.ApiAction; results.blobUrl = blobPath; results.respBlobId = gstnStorageRespBlob.Id; //save response blob url to database table new RequestData().InsertResponseLog(results); //Pipeline Handler //log to table storage => P2 end Task.Factory.StartNew(() => objTableStorage.InsertStageToTableStorage(blob.Keys, (int)WEP.GSP.Document.Stage.Response_Invoke_SUCCESS)); var respone = new ServiceResponse <string> { ResponseObject = request.Response, IsError = false }; return(respone); }