Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(223)

Unified Diff: testing/legion/rpc_server.py

Issue 951673002: Revert "Pull chromium at 2c3ffb2355a27c32f45e508ef861416b820c823b" (Closed) Base URL: git@github.com:domokit/mojo.git@master
Patch Set: Created 5 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « testing/legion/rpc_methods.py ('k') | testing/legion/run_task.py » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: testing/legion/rpc_server.py
diff --git a/testing/legion/rpc_server.py b/testing/legion/rpc_server.py
deleted file mode 100644
index 43b431707e851c0601058c401a3dcf3d0201c255..0000000000000000000000000000000000000000
--- a/testing/legion/rpc_server.py
+++ /dev/null
@@ -1,128 +0,0 @@
-# Copyright 2015 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-"""The task RPC server code.
-
-This server is an XML-RPC server which serves code from
-rpc_methods.RPCMethods.
-
-This server will run until shutdown is called on the server object. This can
-be achieved in 2 ways:
-
-- Calling the Quit RPC method defined in RPCMethods
-- Not receiving any calls within the idle_timeout_secs time.
-"""
-
-import logging
-import threading
-import time
-import xmlrpclib
-import SimpleXMLRPCServer
-import SocketServer
-
-#pylint: disable=relative-import
-import common_lib
-import rpc_methods
-
-
-class RequestHandler(SimpleXMLRPCServer.SimpleXMLRPCRequestHandler):
- """Restricts access to only specified IP address.
-
- This call assumes the server is RPCServer.
- """
-
- def do_POST(self):
- """Verifies the task is authorized to perform RPCs."""
- if self.client_address[0] != self.server.authorized_address:
- logging.error('Received unauthorized RPC request from %s',
- self.task_address[0])
- self.send_response(403)
- response = 'Forbidden'
- self.send_header('Content-type', 'text/plain')
- self.send_header('Content-length', str(len(response)))
- self.end_headers()
- self.wfile.write(response)
- else:
- return SimpleXMLRPCServer.SimpleXMLRPCRequestHandler.do_POST(self)
-
-
-class RPCServer(SimpleXMLRPCServer.SimpleXMLRPCServer,
- SocketServer.ThreadingMixIn):
- """Restricts all endpoints to only specified IP addresses."""
-
- def __init__(self, authorized_address,
- idle_timeout_secs=common_lib.DEFAULT_TIMEOUT_SECS):
- SimpleXMLRPCServer.SimpleXMLRPCServer.__init__(
- self, (common_lib.SERVER_ADDRESS, common_lib.SERVER_PORT),
- allow_none=True, logRequests=False,
- requestHandler=RequestHandler)
-
- self.authorized_address = authorized_address
- self.idle_timeout_secs = idle_timeout_secs
- self.register_instance(rpc_methods.RPCMethods(self))
-
- self._shutdown_requested_event = threading.Event()
- self._rpc_received_event = threading.Event()
- self._idle_thread = threading.Thread(target=self._CheckForIdleQuit)
-
- def shutdown(self):
- """Shutdown the server.
-
- This overloaded method sets the _shutdown_requested_event to allow the
- idle timeout thread to quit.
- """
- self._shutdown_requested_event.set()
- SimpleXMLRPCServer.SimpleXMLRPCServer.shutdown(self)
- logging.info('Server shutdown complete')
-
- def serve_forever(self, poll_interval=0.5):
- """Serve forever.
-
- This overloaded method starts the idle timeout thread before calling
- serve_forever. This ensures the idle timer thread doesn't get started
- without the server running.
-
- Args:
- poll_interval: The interval to poll for shutdown.
- """
- logging.info('RPC server starting')
- self._idle_thread.start()
- SimpleXMLRPCServer.SimpleXMLRPCServer.serve_forever(self, poll_interval)
-
- def _dispatch(self, method, params):
- """Dispatch the call to the correct method with the provided params.
-
- This overloaded method adds logging to help trace connection and
- call problems.
-
- Args:
- method: The method name to call.
- params: A tuple of parameters to pass.
-
- Returns:
- The result of the parent class' _dispatch method.
- """
- logging.debug('Calling %s%s', method, params)
- self._rpc_received_event.set()
- return SimpleXMLRPCServer.SimpleXMLRPCServer._dispatch(self, method, params)
-
- def _CheckForIdleQuit(self):
- """Check for, and exit, if the server is idle for too long.
-
- This method must be run in a separate thread to avoid a deadlock when
- calling server.shutdown.
- """
- timeout = time.time() + self.idle_timeout_secs
- while time.time() < timeout:
- if self._shutdown_requested_event.is_set():
- # An external source called shutdown()
- return
- elif self._rpc_received_event.is_set():
- logging.debug('Resetting the idle timeout')
- timeout = time.time() + self.idle_timeout_secs
- self._rpc_received_event.clear()
- time.sleep(1)
- # We timed out, kill the server
- logging.warning('Shutting down the server due to the idle timeout')
- self.shutdown()
« no previous file with comments | « testing/legion/rpc_methods.py ('k') | testing/legion/run_task.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698