Saggi Mizrahi has uploaded a new change for review.
Change subject: asyncproc: make read synchronous
......................................................................
asyncproc: make read synchronous
Buffered reader assumes the stream has been closed if we return an empty
string more than a certain amount of times. This makes it so that we
keep processing the streams until valid input arrives so we never return
an empty stream.
Change-Id: Id406249bfd63f59f273d27614a38a43595f1d7e1
Signed-off-by: Saggi Mizrahi <smizrahi(a)redhat.com>
---
M lib/vdsm/utils.py
1 file changed, 13 insertions(+), 11 deletions(-)
git pull ssh://gerrit.ovirt.org:29418/vdsm refs/changes/97/21897/1
diff --git a/lib/vdsm/utils.py b/lib/vdsm/utils.py
index ebd36b8..214e350 100644
--- a/lib/vdsm/utils.py
+++ b/lib/vdsm/utils.py
@@ -332,19 +332,21 @@
return True
def read(self, length):
- hasNewData = (self._stream.len - self._stream.pos)
- if hasNewData < length and not self._streamClosed:
- self._parent._processStreams()
+ res = ""
+ while res == "" and not self._closed:
+ hasNewData = (self._stream.len - self._stream.pos)
+ if hasNewData < length and not self._streamClosed:
+ self._parent._processStreams()
- with self._parent._streamLock:
- res = self._stream.read(length)
- if self._stream.pos == self._stream.len:
- if self._streamClosed and res == "":
- self._emptyCounter += 1
- if self._emptyCounter > 2:
- self._closed = True
+ with self._parent._streamLock:
+ res = self._stream.read(length)
+ if self._stream.pos == self._stream.len:
+ if self._streamClosed and res == "":
+ self._emptyCounter += 1
+ if self._emptyCounter > 2:
+ self._closed = True
- self._stream.truncate(0)
+ self._stream.truncate(0)
return res
--
To view, visit
http://gerrit.ovirt.org/21897
To unsubscribe, visit
http://gerrit.ovirt.org/settings
Gerrit-MessageType: newchange
Gerrit-Change-Id: Id406249bfd63f59f273d27614a38a43595f1d7e1
Gerrit-PatchSet: 1
Gerrit-Project: vdsm
Gerrit-Branch: master
Gerrit-Owner: Saggi Mizrahi <smizrahi(a)redhat.com>