Skip to content

Commit ca49862

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

File tree

3 files changed

+37
-1
lines changed

3 files changed

+37
-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: 26 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -220,7 +220,9 @@ 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 ("TRANSFORMER_CACHE_PREFIX" in current_app.config
224+
or "TRANSFORMER_CACHE_VPS_SITE" in current_app.config):
225+
TransformerManager.validate_caches()
224226
env += [
225227
client.V1EnvVar(
226228
"CACHE_PREFIX", value=current_app.config["TRANSFORMER_CACHE_PREFIX"]
@@ -410,6 +412,29 @@ def persistent_volume_claim_exists(self, claim_name, namespace):
410412
return False
411413
return False
412414

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

0 commit comments

Comments
 (0)