diff options
| author | Jürg Billeter <j@bitron.ch> | 2017-07-27 12:24:38 +0100 |
|---|---|---|
| committer | Jürg Billeter <j@bitron.ch> | 2017-07-27 15:10:02 +0100 |
| commit | f44da295a33f09a9294d6aa0b7782361cd7d288c (patch) | |
| tree | 0b66af5f9d2c11ed4a2fa42348ab5396cc03b00d | |
| parent | a56d9efba5a0095234ee5c26b7bb80c3eaa11958 (diff) | |
| download | buildstream-f44da295a33f09a9294d6aa0b7782361cd7d288c.tar.gz | |
_artifactcache/pushreceive.py: Add handshake after sending objects
Ensure all objects have been sent before moving them into the repository
and do not terminate pusher while receiver is still processing.
| -rw-r--r-- | buildstream/_artifactcache/pushreceive.py | 14 |
1 files changed, 13 insertions, 1 deletions
diff --git a/buildstream/_artifactcache/pushreceive.py b/buildstream/_artifactcache/pushreceive.py index fd5b1d96d..058bd5fc6 100644 --- a/buildstream/_artifactcache/pushreceive.py +++ b/buildstream/_artifactcache/pushreceive.py @@ -40,7 +40,7 @@ gi.require_version('OSTree', '1.0') from gi.repository import GLib, Gio, OSTree # nopep8 -PROTO_VERSION = 0 +PROTO_VERSION = 1 HEADER_SIZE = 5 @@ -496,6 +496,12 @@ class OSTreePusher(object): # Send all the objects to receiver, checking status after each self.writer.send_putobjects(self.repo, objects) + # Inform receiver that all objects have been sent + self.writer.send_done() + + # Wait until receiver has completed + self.reader.receive_done() + return self.close() @@ -562,6 +568,9 @@ class OSTreeReceiver(object): # Receive the actual objects received_objects = self.reader.receive_putobjects(self.repo) + # Ensure that pusher has sent all objects + self.reader.receive_done() + # If we didn't get any objects, we're done if len(received_objects) == 0: return 0 @@ -579,6 +588,9 @@ class OSTreeReceiver(object): logging.debug('Setting ref {} to {}'.format(branch, revs[1])) self.repo.set_ref_immediate(None, branch, revs[1], None) + # Inform pusher that everything is in place + self.writer.send_done() + return 0 |
