|
|
df3bb2 |
From 1d2058c08b9eff607127d199b574273100e9ba55 Mon Sep 17 00:00:00 2001
|
|
|
df3bb2 |
From: "Richard W.M. Jones" <rjones@redhat.com>
|
|
|
df3bb2 |
Date: Tue, 19 Jun 2018 18:02:21 +0100
|
|
|
df3bb2 |
Subject: [PATCH] v2v: -o rhv-upload: Always fetch server options when opening
|
|
|
df3bb2 |
the connection.
|
|
|
df3bb2 |
MIME-Version: 1.0
|
|
|
df3bb2 |
Content-Type: text/plain; charset=UTF-8
|
|
|
df3bb2 |
Content-Transfer-Encoding: 8bit
|
|
|
df3bb2 |
|
|
|
df3bb2 |
Previously we lazily requested the server options in the can_*
|
|
|
df3bb2 |
callbacks. The can_* callbacks are always called by nbdkit straight
|
|
|
df3bb2 |
after open, so this just adds complexity for no benefit. This change
|
|
|
df3bb2 |
simply makes the code always fetch the server options during the open
|
|
|
df3bb2 |
callback.
|
|
|
df3bb2 |
|
|
|
df3bb2 |
This is — functionally at least — mostly just refactoring. However I
|
|
|
df3bb2 |
also added a useful debug message so we can see what features the
|
|
|
df3bb2 |
imageio server is offering.
|
|
|
df3bb2 |
|
|
|
df3bb2 |
(cherry picked from commit a1e1f6ec887c2a7973612d2edf7066fd3194ba0b)
|
|
|
df3bb2 |
---
|
|
|
df3bb2 |
v2v/rhv-upload-plugin.py | 63 +++++++++++++++++++---------------------
|
|
|
df3bb2 |
1 file changed, 30 insertions(+), 33 deletions(-)
|
|
|
df3bb2 |
|
|
|
df3bb2 |
diff --git a/v2v/rhv-upload-plugin.py b/v2v/rhv-upload-plugin.py
|
|
|
df3bb2 |
index 5c036c46a..f215eaecf 100644
|
|
|
df3bb2 |
--- a/v2v/rhv-upload-plugin.py
|
|
|
df3bb2 |
+++ b/v2v/rhv-upload-plugin.py
|
|
|
df3bb2 |
@@ -165,34 +165,13 @@ def open(readonly):
|
|
|
df3bb2 |
context = context
|
|
|
df3bb2 |
)
|
|
|
df3bb2 |
|
|
|
df3bb2 |
- # Save everything we need to make requests in the handle.
|
|
|
df3bb2 |
- return {
|
|
|
df3bb2 |
- 'can_flush': False,
|
|
|
df3bb2 |
- 'can_trim': False,
|
|
|
df3bb2 |
- 'can_zero': False,
|
|
|
df3bb2 |
- 'connection': connection,
|
|
|
df3bb2 |
- 'disk': disk,
|
|
|
df3bb2 |
- 'disk_service': disk_service,
|
|
|
df3bb2 |
- 'failed': False,
|
|
|
df3bb2 |
- 'got_options': False,
|
|
|
df3bb2 |
- 'highestwrite': 0,
|
|
|
df3bb2 |
- 'http': http,
|
|
|
df3bb2 |
- 'needs_auth': not params['rhv_direct'],
|
|
|
df3bb2 |
- 'path': destination_url.path,
|
|
|
df3bb2 |
- 'transfer': transfer,
|
|
|
df3bb2 |
- 'transfer_service': transfer_service,
|
|
|
df3bb2 |
- }
|
|
|
df3bb2 |
+ # The first request is to fetch the features of the server.
|
|
|
df3bb2 |
+ needs_auth = not params['rhv_direct']
|
|
|
df3bb2 |
+ can_flush = False
|
|
|
df3bb2 |
+ can_trim = False
|
|
|
df3bb2 |
+ can_zero = False
|
|
|
df3bb2 |
|
|
|
df3bb2 |
-# Can we issue zero, trim or flush requests?
|
|
|
df3bb2 |
-def get_options(h):
|
|
|
df3bb2 |
- if h['got_options']:
|
|
|
df3bb2 |
- return
|
|
|
df3bb2 |
- h['got_options'] = True
|
|
|
df3bb2 |
-
|
|
|
df3bb2 |
- http = h['http']
|
|
|
df3bb2 |
- transfer = h['transfer']
|
|
|
df3bb2 |
-
|
|
|
df3bb2 |
- http.putrequest("OPTIONS", h['path'])
|
|
|
df3bb2 |
+ http.putrequest("OPTIONS", destination_url.path)
|
|
|
df3bb2 |
http.putheader("Authorization", transfer.signed_ticket)
|
|
|
df3bb2 |
http.endheaders()
|
|
|
df3bb2 |
|
|
|
df3bb2 |
@@ -201,12 +180,12 @@ def get_options(h):
|
|
|
df3bb2 |
|
|
|
df3bb2 |
if r.status == 200:
|
|
|
df3bb2 |
# New imageio never needs authentication.
|
|
|
df3bb2 |
- h['needs_auth'] = False
|
|
|
df3bb2 |
+ needs_auth = False
|
|
|
df3bb2 |
|
|
|
df3bb2 |
j = json.loads(data)
|
|
|
df3bb2 |
- h['can_zero'] = "zero" in j['features']
|
|
|
df3bb2 |
- h['can_trim'] = "trim" in j['features']
|
|
|
df3bb2 |
- h['can_flush'] = "flush" in j['features']
|
|
|
df3bb2 |
+ can_flush = "flush" in j['features']
|
|
|
df3bb2 |
+ can_trim = "trim" in j['features']
|
|
|
df3bb2 |
+ can_zero = "zero" in j['features']
|
|
|
df3bb2 |
|
|
|
df3bb2 |
# Old imageio servers returned either 405 Method Not Allowed or
|
|
|
df3bb2 |
# 204 No Content (with an empty body). If we see that we leave
|
|
|
df3bb2 |
@@ -218,12 +197,30 @@ def get_options(h):
|
|
|
df3bb2 |
raise RuntimeError("could not use OPTIONS request: %d: %s" %
|
|
|
df3bb2 |
(r.status, r.reason))
|
|
|
df3bb2 |
|
|
|
df3bb2 |
+ debug("imageio features: flush=%r trim=%r zero=%r" %
|
|
|
df3bb2 |
+ (can_flush, can_trim, can_zero))
|
|
|
df3bb2 |
+
|
|
|
df3bb2 |
+ # Save everything we need to make requests in the handle.
|
|
|
df3bb2 |
+ return {
|
|
|
df3bb2 |
+ 'can_flush': can_flush,
|
|
|
df3bb2 |
+ 'can_trim': can_trim,
|
|
|
df3bb2 |
+ 'can_zero': can_zero,
|
|
|
df3bb2 |
+ 'connection': connection,
|
|
|
df3bb2 |
+ 'disk': disk,
|
|
|
df3bb2 |
+ 'disk_service': disk_service,
|
|
|
df3bb2 |
+ 'failed': False,
|
|
|
df3bb2 |
+ 'highestwrite': 0,
|
|
|
df3bb2 |
+ 'http': http,
|
|
|
df3bb2 |
+ 'needs_auth': needs_auth,
|
|
|
df3bb2 |
+ 'path': destination_url.path,
|
|
|
df3bb2 |
+ 'transfer': transfer,
|
|
|
df3bb2 |
+ 'transfer_service': transfer_service,
|
|
|
df3bb2 |
+ }
|
|
|
df3bb2 |
+
|
|
|
df3bb2 |
def can_trim(h):
|
|
|
df3bb2 |
- get_options(h)
|
|
|
df3bb2 |
return h['can_trim']
|
|
|
df3bb2 |
|
|
|
df3bb2 |
def can_flush(h):
|
|
|
df3bb2 |
- get_options(h)
|
|
|
df3bb2 |
return h['can_flush']
|
|
|
df3bb2 |
|
|
|
df3bb2 |
def get_size(h):
|
|
|
df3bb2 |
--
|
|
|
df3bb2 |
2.21.0
|
|
|
df3bb2 |
|