Jelajahi Sumber

[core] Spawning server should not be blocked by network calls
(cherry picked from commit 575205b18048d1467a3fb6709f28e790535d2b8d)

Romain Rigaux 13 tahun lalu
induk
melakukan
5c5141e

+ 0 - 1
apps/filebrowser/src/filebrowser/views.py

@@ -25,7 +25,6 @@ import logging
 import mimetypes
 import posixpath
 import stat as stat_module
-import urllib
 import os
 import simplejson
 

+ 2 - 0
apps/jobbrowser/src/jobbrowser/__init__.py

@@ -15,6 +15,8 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
+import desktop.lib.eventlet_util
+
 import sys
 import os
 from desktop.supervisor import DjangoCommandSupervisee

+ 36 - 0
desktop/core/src/desktop/lib/eventlet_util.py

@@ -0,0 +1,36 @@
+#!/usr/bin/env python
+# Licensed to Cloudera, Inc. under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  Cloudera, Inc. licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+import eventlet
+
+# Magically solves the Thrift/REST connection blocking problem
+# by monkey patching socket (http://eventlet.net/doc/patching.html).
+#
+# A cleaner solution would be to avoid this magic and find a way to have
+# the eventlet.green imports done at the very beginning (i.e. before 'socket').
+eventlet.monkey_patch(socket=True)
+
+from eventlet.green import Queue
+from eventlet.green import SocketServer
+
+from eventlet.green import os
+from eventlet.green import select
+from eventlet.green import ssl
+from eventlet.green import thread
+from eventlet.green import threading
+from eventlet.green import time
+from eventlet.green import socket

+ 2 - 0
desktop/core/src/desktop/lib/rest/__init__.py

@@ -0,0 +1,2 @@
+
+import desktop.lib.eventlet_util

+ 5 - 4
desktop/core/src/desktop/lib/thrift_util.py

@@ -16,15 +16,16 @@
 # limitations under the License.
 #
 # Utilities for Thrift
+import desktop.lib.eventlet_util
 
-import socket
-import logging
 import Queue
-import sasl
+import logging
 import select
-import sys
+import socket
 import threading
 import time
+import sasl
+import sys
 
 from thrift.Thrift import TType
 from thrift.transport.TSocket import TSocket

+ 5 - 2
desktop/core/src/desktop/management/commands/runspawningserver.py

@@ -15,9 +15,12 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-import sys
-from eventlet.green import os
+import desktop.lib.eventlet_util
+
+
 import logging
+import os
+
 from django.core.management.base import BaseCommand
 from desktop import conf
 import spawning.spawning_controller