diff --git a/setup.py b/setup.py index 6ae3bd78..af42de74 100644 --- a/setup.py +++ b/setup.py @@ -6,7 +6,7 @@ if sys.version_info < (3, 7): raise RuntimeError("skyflow requires Python 3.7+") -current_version = '2.1.0b1.dev0+8efd1cd' +current_version = '1.15.4.dev0+ef26f0d' setup( name='skyflow', diff --git a/skyflow/vault/_client.py b/skyflow/vault/_client.py index e426f59f..fb249b77 100644 --- a/skyflow/vault/_client.py +++ b/skyflow/vault/_client.py @@ -5,6 +5,8 @@ import types import requests import asyncio +from urllib3.util.retry import Retry +from requests.adapters import HTTPAdapter from skyflow.vault._insert import getInsertRequestBody, processResponse, convertResponse from skyflow.vault._update import sendUpdateRequests, createUpdateResponseBody from skyflow.vault._config import Configuration, ConnectionConfig, DeleteOptions, DetokenizeOptions, GetOptions, InsertOptions, UpdateOptions, QueryOptions @@ -36,6 +38,18 @@ def __init__(self, config: Configuration): raise SkyflowError(SkyflowErrorCodes.INVALID_INPUT, SkyflowErrorMessages.TOKEN_PROVIDER_ERROR.value % ( str(type(config.tokenProvider))), interface=interface) + retry_strategy = Retry( + total=3, + connect=5, + backoff_factor=0.5, + status_forcelist=[500, 502, 503, 504], + raise_on_status=True, + ) + + self.session = requests.Session() + adapter = HTTPAdapter(pool_connections=1, pool_maxsize=20, pool_block=False, max_retries=retry_strategy) + self.session.mount("https://", adapter) + self.vaultID = config.vaultID self.vaultURL = config.vaultURL.rstrip('/') self.tokenProvider = config.tokenProvider @@ -45,7 +59,6 @@ def __init__(self, config: Configuration): def insert(self, records: dict, options: InsertOptions = InsertOptions()): interface = InterfaceName.INSERT.value log_info(InfoMessages.INSERT_TRIGGERED.value, interface=interface) - self._checkConfig(interface) jsonBody = getInsertRequestBody(records, options) @@ -54,11 +67,19 @@ def insert(self, records: dict, options: InsertOptions = InsertOptions()): self.storedToken, self.tokenProvider, interface) headers = { "Authorization": "Bearer " + self.storedToken, - "sky-metadata": json.dumps(getMetrics()) + "sky-metadata": json.dumps(getMetrics()), + # "User-Agent": 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36' } - - response = requests.post(requestURL, data=jsonBody, headers=headers) + # response = requests.post(requestURL, data=jsonBody, headers=headers) + response = self.session.post( + requestURL, + data=jsonBody, + headers=headers, + # timeout=(5, 300), + ) + print(">>> raw response: ", response.history) processedResponse = processResponse(response) + print(">>> processedResponse local: ", processedResponse) result, partial = convertResponse(records, processedResponse, options) if partial: log_error(SkyflowErrorMessages.BATCH_INSERT_PARTIAL_SUCCESS.value, interface) diff --git a/skyflow/version.py b/skyflow/version.py index 70fdf1c4..37d07012 100644 --- a/skyflow/version.py +++ b/skyflow/version.py @@ -1 +1 @@ -SDK_VERSION = '2.1.0b1.dev0+8efd1cd' \ No newline at end of file +SDK_VERSION = '1.15.4.dev0+ef26f0d'