Xu He Jie has uploaded a new change for review.

Change subject: add server_once for CrabRPCServer
......................................................................

add server_once for CrabRPCServer

server_once is convenient for integrating CrabRPCServer into
the event loop of other program.

example: I want to use CrabRPC in consoleServer, but console have
loop in its code. It can join read side of pipe into select(). After
select() return, we can call server_once() for processing rpc
message.

Change-Id: I7a24477d905c88ce174131cbd78b1cdd518c686d
Signed-off-by: Xu He Jie <[email protected]>
---
M vdsm/storage/remoteFileHandler.py
1 file changed, 20 insertions(+), 17 deletions(-)


  git pull ssh://gerrit.ovirt.org:29418/vdsm refs/changes/52/7452/1

diff --git a/vdsm/storage/remoteFileHandler.py 
b/vdsm/storage/remoteFileHandler.py
index 913e219..622ea5d 100644
--- a/vdsm/storage/remoteFileHandler.py
+++ b/vdsm/storage/remoteFileHandler.py
@@ -79,27 +79,30 @@
     def serve_forever(self):
         while True:
             try:
-                rawLength = self.rfile.read(LENGTH_STRUCT_LENGTH)
-                length = unpack(LENGTH_STRUCT_FMT, rawLength)[0]
-                pickledCall = self.rfile.read(length)
-                if len(pickledCall) < length:
-                    raise Exception("Pipe broke")
-
-                name, args, kwargs = pickle.loads(pickledCall)
-                err = res = None
-                try:
-                    res = self.callRegisteredFunction(name, args, kwargs)
-                except Exception, ex:
-                    err = ex
-
-                resp = pickle.dumps((res, err))
-                self.wfile.write(pack(LENGTH_STRUCT_FMT, len(resp)))
-                self.wfile.write(resp)
-                self.wfile.flush()
+                self.serve_once()
             except:
                 self.log.warn("Could not complete operation", exc_info=True)
                 return
 
+    def serve_once(self):
+        rawLength = self.rfile.read(LENGTH_STRUCT_LENGTH)
+        length = unpack(LENGTH_STRUCT_FMT, rawLength)[0]
+        pickledCall = self.rfile.read(length)
+        if len(pickledCall) < length:
+            raise Exception("Pipe broke")
+
+        name, args, kwargs = pickle.loads(pickledCall)
+        err = res = None
+        try:
+            res = self.callRegisteredFunction(name, args, kwargs)
+        except Exception, ex:
+            err = ex
+
+        resp = pickle.dumps((res, err))
+        self.wfile.write(pack(LENGTH_STRUCT_FMT, len(resp)))
+        self.wfile.write(resp)
+        self.wfile.flush()
+
     def callRegisteredFunction(self, name, args, kwargs):
         if "." not in name:
             func = self.registeredFunctions[name]


--
To view, visit http://gerrit.ovirt.org/7452
To unsubscribe, visit http://gerrit.ovirt.org/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: I7a24477d905c88ce174131cbd78b1cdd518c686d
Gerrit-PatchSet: 1
Gerrit-Project: vdsm
Gerrit-Branch: master
Gerrit-Owner: Xu He Jie <[email protected]>
_______________________________________________
vdsm-patches mailing list
[email protected]
https://lists.fedorahosted.org/mailman/listinfo/vdsm-patches

Reply via email to