Files
minio/docs/investigations/r8/evidence/s3_capacity_probe.py
Feng Ruohang 055030ea53 fix(http): honor configured request header deadlines
Signed-off-by: Feng Ruohang <rh@vonng.com>
(cherry picked from commit 0d48d32d7e038ae1ea5966f3d7e0cb86780a6311)
Signed-off-by: Feng Ruohang <rh@vonng.com>
2026-09-16 00:37:56 +08:00

28 lines
1.7 KiB
Python

from pathlib import Path
import os,subprocess,socket,tempfile,time,urllib.request,urllib.error,signal,json
root=Path('/Users/vonng/tmp/silo-r8-01a0a5b9/capacity-probe');root.mkdir(exist_ok=True)
with socket.socket() as reservation:
reservation.bind(('127.0.0.1',0));port=reservation.getsockname()[1]
env={k:v for k,v in os.environ.items() if not k.startswith(('MINIO_','MC_','SILO_'))}
env.update(MINIO_ROOT_USER='silo',MINIO_ROOT_PASSWORD='silo1234',MINIO_BROWSER='off',MINIO_CI_CD='1',MC_HOST_silo=f'http://silo:silo1234@127.0.0.1:{port}/')
url=f'http://127.0.0.1:{port}'
with (root/'server.log').open('w') as log:
proc=subprocess.Popen(['/Users/vonng/tmp/silo-r8-01a0a5b9/silo-v2','server',f'--address=127.0.0.1:{port}','--read-header-timeout=5s','--idle-timeout=5s',str(root/'data')],env=env,stdout=log,stderr=subprocess.STDOUT)
try:
for _ in range(100):
try:
with urllib.request.urlopen(url+'/minio/health/live',timeout=1):break
except Exception:time.sleep(.1)
cli=['/opt/homebrew/bin/mcli','--config-dir',str(root/'mcli')]
for args in [['mb','silo/testbucket'],['anonymous','set','public','silo/testbucket']]:
r=subprocess.run(cli+args,env=env,text=True,stdout=subprocess.PIPE,stderr=subprocess.STDOUT);assert r.returncode==0,r.stdout
req=urllib.request.Request(url+'/testbucket/testobject',data=b'x'*30,method='PUT')
try:
with urllib.request.urlopen(req,timeout=10) as response:result={'status':response.status,'body':response.read().decode()}
except urllib.error.HTTPError as error:result={'status':error.code,'body':error.read().decode()}
print(json.dumps(result,indent=2))
finally:
proc.send_signal(signal.SIGTERM)
try:proc.wait(timeout=10)
except subprocess.TimeoutExpired:proc.kill();proc.wait()