Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
test: Revert unrelated universal test changes
Signed-off-by: Le Xuan An <anlx@viettel.com.vn>
  • Loading branch information
XuananLe authored and Le Xuan An committed Jun 7, 2026
commit 8ef7bbb43a5026ae882b19ee7925ea724c52fdae
6 changes: 3 additions & 3 deletions .secrets.baseline

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
import logging
import os.path
import shutil
import signal
import subprocess
import tempfile
import uuid
Expand Down Expand Up @@ -42,50 +41,6 @@
logger = logging.getLogger(__name__)


def _start_offline_server_process(cmd: list[str]) -> Popen[bytes]:
kwargs: dict[str, Any] = {
"stdout": subprocess.DEVNULL,
"stderr": subprocess.DEVNULL,
}
if os.name == "posix":
kwargs["start_new_session"] = True
return subprocess.Popen(cmd, **kwargs)


def _stop_offline_server_process(proc: Popen[bytes], port: int) -> None:
_signal_offline_server_process(proc, signal.SIGTERM)
try:
proc.wait(timeout=10)
except subprocess.TimeoutExpired:
_signal_offline_server_process(proc, signal.SIGKILL)
proc.wait(timeout=10)

wait_retry_backoff(
lambda: (
None,
not check_port_open("localhost", port),
),
timeout_secs=30,
timeout_msg=f"Timed out waiting for remote offline server port {port} to close.",
)


def _signal_offline_server_process(proc: Popen[bytes], sig: signal.Signals) -> None:
if os.name == "posix":
try:
os.killpg(proc.pid, sig)
return
except ProcessLookupError:
return

if proc.poll() is not None:
return
if sig == signal.SIGTERM:
proc.terminate()
else:
proc.kill()


class FileDataSourceCreator(DataSourceCreator):
files: List[Any]
dirs: List[Any]
Expand Down Expand Up @@ -417,7 +372,6 @@ def setup(self, registry: RegistryConfig):

self.server_port = free_port()
host = "0.0.0.0"
client_host = "localhost"
cmd = [
"feast",
"-c" + str(repo_path),
Expand All @@ -427,21 +381,32 @@ def setup(self, registry: RegistryConfig):
"--port",
str(self.server_port),
]
self.proc = _start_offline_server_process(cmd)
self.proc = subprocess.Popen(
cmd, stdout=subprocess.PIPE, stderr=subprocess.DEVNULL
)

_time_out_sec: int = 60
# Wait for server to start
wait_retry_backoff(
lambda: (None, check_port_open(client_host, self.server_port)),
lambda: (None, check_port_open(host, self.server_port)),
timeout_secs=_time_out_sec,
timeout_msg=f"Unable to start the feast remote offline server in {_time_out_sec} seconds at port={self.server_port}",
)
return "grpc+tcp://{}:{}".format(client_host, self.server_port)
return "grpc+tcp://{}:{}".format(host, self.server_port)

def teardown(self):
super().teardown()
if self.proc is not None:
_stop_offline_server_process(self.proc, self.server_port)
self.proc.kill()

# wait server to free the port
wait_retry_backoff(
lambda: (
None,
not check_port_open("localhost", self.server_port),
),
timeout_secs=30,
)


class RemoteOfflineTlsStoreDataSourceCreator(FileDataSourceCreator):
Expand Down Expand Up @@ -476,7 +441,6 @@ def setup(self, registry: RegistryConfig):

self.server_port = free_port()
host = "0.0.0.0"
client_host = "localhost"
cmd = [
"feast",
"-c" + str(repo_path),
Expand All @@ -490,21 +454,23 @@ def setup(self, registry: RegistryConfig):
"--cert",
str(self.tls_cert_path),
]
self.proc = _start_offline_server_process(cmd)
self.proc = subprocess.Popen(
cmd, stdout=subprocess.PIPE, stderr=subprocess.DEVNULL
)

_time_out_sec: int = 60
# Wait for server to start
wait_retry_backoff(
lambda: (None, check_port_open(client_host, self.server_port)),
lambda: (None, check_port_open(host, self.server_port)),
timeout_secs=_time_out_sec,
timeout_msg=f"Unable to start the feast remote offline server in {_time_out_sec} seconds at port={self.server_port}",
)
return "grpc+tls://{}:{}".format(client_host, self.server_port)
return "grpc+tls://{}:{}".format(host, self.server_port)

def create_offline_store_config(self) -> FeastConfigBaseModel:
remote_offline_store_config = RemoteOfflineStoreConfig(
type="remote",
host="localhost",
host="0.0.0.0",
port=self.server_port,
scheme="https",
cert=self.tls_cert_path,
Expand All @@ -514,7 +480,16 @@ def create_offline_store_config(self) -> FeastConfigBaseModel:
def teardown(self):
super().teardown()
if self.proc is not None:
_stop_offline_server_process(self.proc, self.server_port)
self.proc.kill()

# wait server to free the port
wait_retry_backoff(
lambda: (
None,
not check_port_open("localhost", self.server_port),
),
timeout_secs=30,
)


class RemoteOfflineOidcAuthStoreDataSourceCreator(FileDataSourceCreator):
Expand All @@ -535,7 +510,7 @@ def __init__(self, project_name: str, *args, **kwargs):
"""
self.auth_config = auth_config_template.format(keycloak_url=self.keycloak_url)
self.server_port: int = 0
self.proc: Optional[Popen[bytes]] = None
self.proc = None

@staticmethod
def xdist_groups() -> list[str]:
Expand Down Expand Up @@ -566,7 +541,6 @@ def setup(self, registry: RegistryConfig):

self.server_port = free_port()
host = "0.0.0.0"
client_host = "localhost"
cmd = [
"feast",
"-c" + repo_path,
Expand All @@ -576,20 +550,22 @@ def setup(self, registry: RegistryConfig):
"--port",
str(self.server_port),
]
self.proc = _start_offline_server_process(cmd)
self.proc = subprocess.Popen(
cmd, stdout=subprocess.PIPE, stderr=subprocess.DEVNULL
) # type: ignore

_time_out_sec: int = 60
# Wait for server to start
wait_retry_backoff(
lambda: (None, check_port_open(client_host, self.server_port)),
lambda: (None, check_port_open(host, self.server_port)),
timeout_secs=_time_out_sec,
timeout_msg=f"Unable to start the feast remote offline server in {_time_out_sec} seconds at port={self.server_port}",
)
return "grpc+tcp://{}:{}".format(client_host, self.server_port)
return "grpc+tcp://{}:{}".format(host, self.server_port)

def create_offline_store_config(self) -> FeastConfigBaseModel:
remote_offline_store_config = RemoteOfflineStoreConfig(
type="remote", host="localhost", port=self.server_port
type="remote", host="0.0.0.0", port=self.server_port
)
return remote_offline_store_config

Expand All @@ -599,4 +575,13 @@ def get_keycloak_url(self):
def teardown(self):
super().teardown()
if self.proc is not None:
_stop_offline_server_process(self.proc, self.server_port)
self.proc.kill()

# wait server to free the port
wait_retry_backoff(
lambda: (
None,
not check_port_open("localhost", self.server_port),
),
timeout_secs=30,
)
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ def create_online_store(self) -> dict[str, Any]:
return {
"type": "milvus",
"path": self.db_path,
"index_type": "FLAT",
"index_type": "IVF_FLAT",
"metric_type": "L2",
"embedding_dim": 2,
"vector_enabled": True,
Expand Down
Loading