mirror of
https://github.com/vale981/ray
synced 2025-03-06 02:21:39 -05:00
Patch redis-py bug for Windows (#8386)
This commit is contained in:
parent
a3b95d4664
commit
ac1ed293e3
3 changed files with 27 additions and 2 deletions
|
@ -1505,7 +1505,6 @@ genrule(
|
|||
name = "redis",
|
||||
srcs = [
|
||||
] + select({
|
||||
# Windows is not supported yet, so make stubs for it
|
||||
"@bazel_tools//src/conditions:windows": [
|
||||
"@com_github_tporadowski_redis_bin//file",
|
||||
],
|
||||
|
@ -1519,7 +1518,6 @@ genrule(
|
|||
"redis-cli",
|
||||
],
|
||||
cmd = select({
|
||||
# Windows is not supported yet, so make stubs for it
|
||||
"@bazel_tools//src/conditions:windows": """
|
||||
unzip -q -o -- $(location @com_github_tporadowski_redis_bin//file) redis-server.exe redis-cli.exe &&
|
||||
mv -f -- redis-server.exe $(location redis-server) &&
|
||||
|
|
|
@ -30,6 +30,10 @@ thirdparty_files = os.path.join(
|
|||
os.path.abspath(os.path.dirname(__file__)), "thirdparty_files")
|
||||
sys.path.insert(0, thirdparty_files)
|
||||
|
||||
if sys.platform == "win32":
|
||||
import ray.compat # noqa: E402
|
||||
ray.compat.patch_redis_empty_recv()
|
||||
|
||||
# Expose ray ABI symbols which may be dependent by other shared
|
||||
# libraries such as _streaming.so. See BUILD.bazel:_raylet
|
||||
python_shared_lib_suffix = ".so" if sys.platform != "win32" else ".pyd"
|
||||
|
|
23
python/ray/compat.py
Normal file
23
python/ray/compat.py
Normal file
|
@ -0,0 +1,23 @@
|
|||
import errno
|
||||
import socket
|
||||
import sys
|
||||
|
||||
|
||||
def patch_redis_empty_recv():
|
||||
"""On Windows, socket disconnect result in errors rather than empty reads.
|
||||
redis-py does not handle these errors correctly.
|
||||
This patch translates connection resets to empty reads as in POSIX.
|
||||
"""
|
||||
assert sys.platform == "win32"
|
||||
import redis
|
||||
|
||||
def redis_recv(sock, *args, **kwargs):
|
||||
result = b""
|
||||
try:
|
||||
result = redis._compat.recv(sock, *args, **kwargs)
|
||||
except socket.error as ex:
|
||||
if ex.errno not in [errno.ECONNRESET, errno.ECONNREFUSED]:
|
||||
raise
|
||||
return result
|
||||
|
||||
redis.connection.recv = redis_recv
|
Loading…
Add table
Reference in a new issue