Federico Simoncelli has uploaded a new change for review.

Change subject: task: support task id in client request
......................................................................

task: support task id in client request

Change-Id: Ib5034e6c3466d5a663699d4f924975b7e067c768
Signed-off-by: Federico Simoncelli <[email protected]>
---
M vdsm/BindingXMLRPC.py
M vdsm/clientIF.py
M vdsm/storage/dispatcher.py
3 files changed, 16 insertions(+), 1 deletion(-)


  git pull ssh://gerrit.ovirt.org:29418/vdsm refs/changes/09/26809/1

diff --git a/vdsm/BindingXMLRPC.py b/vdsm/BindingXMLRPC.py
index 76251f5..d449088 100644
--- a/vdsm/BindingXMLRPC.py
+++ b/vdsm/BindingXMLRPC.py
@@ -98,6 +98,7 @@
         Create xml-rpc server over http or https.
         """
         HTTP_HEADER_FLOWID = "FlowID"
+        HTTP_HEADER_TASKID = "TaskID"
 
         threadLocal = self.cif.threadLocal
 
@@ -200,6 +201,7 @@
             def parse_request(self):
                 r = basehandler.parse_request(self)
                 threadLocal.flowID = self.headers.get(HTTP_HEADER_FLOWID)
+                threadLocal.taskID = self.headers.get(HTTP_HEADER_TASKID)
                 return r
 
             def finish(self):
@@ -207,6 +209,7 @@
                 threadLocal.client = None
                 threadLocal.server = None
                 threadLocal.flowID = None
+                threadLocal.taskID = None
 
             if sys.version_info[:2] == (2, 6):
                 # Override BaseHTTPServer.BaseRequestHandler implementation to
@@ -246,6 +249,10 @@
                     fmt += " flowID [%s]"
                     logargs.append(self.cif.threadLocal.flowID)
 
+                if getattr(self.cif.threadLocal, 'taskID', None) is not None:
+                    fmt += " taskID [%s]"
+                    logargs.append(self.cif.threadLocal.taskID)
+
                 self.log.debug(fmt, *logargs)
 
                 try:
diff --git a/vdsm/clientIF.py b/vdsm/clientIF.py
index eac7950..21e3c71 100644
--- a/vdsm/clientIF.py
+++ b/vdsm/clientIF.py
@@ -99,6 +99,7 @@
             self.channelListener.start()
             self.threadLocal = threading.local()
             self.threadLocal.client = ''
+            self.irs.setClientThreadLocal(self.threadLocal)
         except:
             self.log.error('failed to init clientIF, '
                            'shutting down storage dispatcher')
diff --git a/vdsm/storage/dispatcher.py b/vdsm/storage/dispatcher.py
index 6586492..3e2bf0a 100644
--- a/vdsm/storage/dispatcher.py
+++ b/vdsm/storage/dispatcher.py
@@ -45,10 +45,14 @@
         self.storage_repository = config.get('irs', 'repository')
         self._exposeFunctions(obj)
         self.log.info("Starting StorageDispatcher...")
+        self._clientThreadLocal = None
 
     @property
     def ready(self):
         return getattr(self._obj, 'ready', True)
+
+    def setClientThreadLocal(self, clientThreadLocal):
+        self._clientThreadLocal = clientThreadLocal
 
     def _exposeFunctions(self, obj):
         for funcName in dir(obj):
@@ -66,7 +70,10 @@
         @wraps(func)
         def wrapper(*args, **kwargs):
             try:
-                ctask = task.Task(id=None, name=name)
+                ctaskid = getattr(self._clientThreadLocal, 'taskID', None)
+                if ctaskid is not None:
+                    self.log.info('using client requested taskID %s', ctaskid)
+                ctask = task.Task(id=ctaskid, name=name)
                 try:
                     response = self.STATUS_OK.copy()
                     result = ctask.prepare(func, *args, **kwargs)


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

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

Reply via email to