add api.http.default_method to help with GCP load balancers dropping GET requests (use PUT instead)

This commit is contained in:
allegroai 2022-09-15 15:58:18 +03:00
parent 721569bb77
commit 3e5d50e15d
3 changed files with 19 additions and 7 deletions

View File

@ -46,6 +46,9 @@
pool_maxsize: 512 pool_maxsize: 512
pool_connections: 512 pool_connections: 512
# Override the default http method, use "put" if working behind GCP load balancer (default: "get")
# default_method: "get"
} }
auth { auth {

View File

@ -8,13 +8,14 @@ from .datamodel import DataModel
from .defs import ENV_API_DEFAULT_REQ_METHOD from .defs import ENV_API_DEFAULT_REQ_METHOD
if ENV_API_DEFAULT_REQ_METHOD.exists() and ENV_API_DEFAULT_REQ_METHOD.get().upper() not in ("GET", "POST"): if ENV_API_DEFAULT_REQ_METHOD.exists() and ENV_API_DEFAULT_REQ_METHOD.get().upper() not in ("GET", "POST", "PUT"):
raise ValueError( raise ValueError(
"CLEARML_API_DEFAULT_REQ_METHOD environment variable must be 'get' or 'post' (any case is allowed)." "CLEARML_API_DEFAULT_REQ_METHOD environment variable must be 'get' or 'post' (any case is allowed)."
) )
class Request(ApiModel): class Request(ApiModel):
def_method = ENV_API_DEFAULT_REQ_METHOD.get(default="get")
_method = ENV_API_DEFAULT_REQ_METHOD.get(default="get") _method = ENV_API_DEFAULT_REQ_METHOD.get(default="get")
def __init__(self, **kwargs): def __init__(self, **kwargs):

View File

@ -25,8 +25,7 @@ from .defs import (
ENV_DISABLE_VAULT_SUPPORT, ENV_DISABLE_VAULT_SUPPORT,
ENV_ENABLE_ENV_CONFIG_SECTION, ENV_ENABLE_ENV_CONFIG_SECTION,
ENV_ENABLE_FILES_CONFIG_SECTION, ENV_ENABLE_FILES_CONFIG_SECTION,
ENV_API_DEFAULT_REQ_METHOD, ENV_API_EXTRA_RETRY_CODES, ENV_API_DEFAULT_REQ_METHOD,
ENV_API_EXTRA_RETRY_CODES,
) )
from .request import Request, BatchRequest # noqa: F401 from .request import Request, BatchRequest # noqa: F401
from .token_manager import TokenManager from .token_manager import TokenManager
@ -142,6 +141,15 @@ class Session(TokenManager):
self._logger = logger self._logger = logger
self.__auth_token = None self.__auth_token = None
if not ENV_API_DEFAULT_REQ_METHOD.get(default=None) and self.config.get("api.http.default_method", None):
def_method = str(self.config.get("api.http.default_method", None)).strip()
if def_method.upper() not in ("GET", "POST", "PUT"):
raise ValueError(
"api.http.default_method variable must be 'get' or 'post' (any case is allowed)."
)
Request.def_method = def_method
Request._method = Request.def_method
if ENV_AUTH_TOKEN.get(): if ENV_AUTH_TOKEN.get():
self.__access_key = self.__secret_key = None self.__access_key = self.__secret_key = None
self.__auth_token = ENV_AUTH_TOKEN.get() self.__auth_token = ENV_AUTH_TOKEN.get()
@ -313,7 +321,7 @@ class Session(TokenManager):
service, service,
action, action,
version=None, version=None,
method="get", method=Request.def_method,
headers=None, headers=None,
auth=None, auth=None,
data=None, data=None,
@ -402,7 +410,7 @@ class Session(TokenManager):
service, service,
action, action,
version=None, version=None,
method="get", method=Request.def_method,
headers=None, headers=None,
data=None, data=None,
json=None, json=None,
@ -445,7 +453,7 @@ class Session(TokenManager):
headers=None, headers=None,
data=None, data=None,
json=None, json=None,
method="get", method=Request.def_method,
): ):
""" """
Send a raw batch API request. Batch requests always use application/json-lines content type. Send a raw batch API request. Batch requests always use application/json-lines content type.
@ -734,7 +742,7 @@ class Session(TokenManager):
try: try:
data = {"expiration_sec": exp} if exp else {} data = {"expiration_sec": exp} if exp else {}
res = self._send_request( res = self._send_request(
method=ENV_API_DEFAULT_REQ_METHOD.get(default="get"), method=Request.def_method,
service="auth", service="auth",
action="login", action="login",
auth=auth, auth=auth,