Patch redis-py bug for Windows (#8386)

This commit is contained in:
mehrdadn 2020-05-12 08:41:45 -07:00 committed by GitHub
parent a3b95d4664
commit ac1ed293e3
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 27 additions and 2 deletions

View file

@ -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) &&

View file

@ -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
View 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