Skip to content

Commit a3b35cd

Browse files
committed
Update xcache list internally
1 parent 344327c commit a3b35cd

File tree

3 files changed

+41
-1
lines changed

3 files changed

+41
-1
lines changed

helm/servicex/templates/app/configmap.yaml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -94,6 +94,11 @@ data:
9494
{{- else }}
9595
TRANSFORMER_CACHE_PREFIX = ""
9696
{{- end }}
97+
{{- if .Values.transformer.cacheVPSSite }}
98+
TRANSFORMER_CACHE_VPS_SITE = "{{ .Values.transformer.cacheVPSSite }}"
99+
TRANSFORMER_CACHE_VPS_INTERVAL = {{ .Values.transformer.cacheVPSCheckInterval }}
100+
TRANSFORMER_CACHE_VPS_LIVENESS_URL = "{{ .Values.transformer.cacheVPSLivenessURL }}"
101+
{{- end }}
97102
TRANSFORMER_AUTOSCALE_ENABLED = {{- ternary "True" "False" .Values.transformer.autoscaler.enabled }}
98103
TRANSFORMER_CPU_LIMIT = {{ .Values.transformer.cpuLimit }}
99104
TRANSFORMER_MEMORY_LIMIT = "{{ .Values.transformer.memoryLimit }}"

helm/servicex/values.yaml

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -201,6 +201,12 @@ transformer:
201201
# comma-separated list of values.
202202
# Do not put root:// in these values.
203203
cachePrefix: null
204+
# Alternatively, provide the virtual placement service site name to look up
205+
# xCache servers from
206+
cacheVPSSite: null
207+
cacheVPSCheckInterval: 1800
208+
cacheVPSLivenessURL: https://vps.cern.ch/liveness
209+
204210

205211
autoscaler:
206212
cpuScaleThreshold: 30

servicex_app/servicex_app/transformer_manager.py

Lines changed: 30 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -220,7 +220,11 @@ def create_job_object(
220220
env = env + [env_var_instance_name]
221221

222222
# provide each pod with an environment var holding cache prefix path
223-
if "TRANSFORMER_CACHE_PREFIX" in current_app.config:
223+
if (
224+
"TRANSFORMER_CACHE_PREFIX" in current_app.config
225+
or "TRANSFORMER_CACHE_VPS_SITE" in current_app.config
226+
):
227+
TransformerManager.validate_caches()
224228
env += [
225229
client.V1EnvVar(
226230
"CACHE_PREFIX", value=current_app.config["TRANSFORMER_CACHE_PREFIX"]
@@ -410,6 +414,31 @@ def persistent_volume_claim_exists(self, claim_name, namespace):
410414
return False
411415
return False
412416

417+
@staticmethod
418+
def validate_caches():
419+
import time
420+
import urllib3
421+
422+
if not (thissite := current_app.config.get("TRANSFORMER_CACHE_VPS_SITE", None)):
423+
return
424+
425+
lastchecktime = current_app.config.get("TRANSFORMER_CACHE_VPS_LASTCHECK", 0)
426+
ttl = current_app.config.get("TRANSFORMER_CACHE_VPS_INTERVAL", 30 * 60)
427+
if (now := time.time()) - lastchecktime > ttl:
428+
current_app.config["TRANSFORMER_CACHE_VPS_LASTCHECK"] = now
429+
vps_server = current_app.config["TRANSFORMER_CACHE_VPS_LIVENESS_URL"]
430+
try:
431+
sitedata = urllib3.request("GET", vps_server).json()
432+
if thissite not in sitedata:
433+
current_app.logger.error(f"{thissite} is not in VPS liveness data")
434+
servers = sorted(
435+
[_["address"] for _ in sitedata[thissite].values() if _["live"]]
436+
)
437+
current_app.logger.info(f"Live xCache servers are {servers}")
438+
current_app.config["TRANSFORMER_CACHE_PREFIX"] = ",".join(servers)
439+
except Exception as e:
440+
current_app.logger.error(f"Exception retrieving site data: {e}")
441+
413442
@staticmethod
414443
def create_hpa_object(request_id, max_workers):
415444
target = client.V1CrossVersionObjectReference(

0 commit comments

Comments
 (0)