conf: Add support for setting timeout and readahead size for network disks

Some disk backends support configuring the readahead buffer or timeout
for requests. Add the knobs to the XML.

Signed-off-by: Peter Krempa <pkrempa@redhat.com>
Reviewed-by: Ján Tomko <jtomko@redhat.com>
This commit is contained in:
Peter Krempa 2020-03-05 16:50:46 +01:00
parent 3b076391be
commit 63fd461773
6 changed files with 65 additions and 0 deletions

View File

@ -2852,6 +2852,8 @@
&lt;cookies&gt;
&lt;cookie name="test"&gt;somevalue&lt;/cookie&gt;
&lt;/cookies&gt;
&lt;readahead size='65536'/&gt;
&lt;timeout seconds='6'/&gt;
&lt;/source&gt;
&lt;target dev='hde' bus='ide' tray='open'/&gt;
&lt;readonly/&gt;
@ -3402,6 +3404,20 @@
must conform to the HTTP specification.
<span class="since">Since 6.2.0</span>
</dd>
<dt><code>readahead</code></dt>
<dd>
Specifies the size of the readahead buffer for protocols
which support it. (all 'curl' based drivers in qemu). The size
is in bytes. Note that '0' is considered as if the value is not
provided.
<span class="since">Since 6.2.0</span>
</dd>
<dt><code>timeout</code></dt>
<dd>
Specifies the connection timeout for protocols which support it.
Note that '0' is considered as if the value is not provided.
<span class="since">Since 6.2.0</span>
</dd>
</dl>
<p>

View File

@ -1808,6 +1808,25 @@
</element>
</define>
<define name="diskSourceNetworkProtocolPropsCommon">
<optional>
<element name="readahead">
<attribute name="size">
<ref name="positiveInteger"/>
</attribute>
<empty/>
</element>
</optional>
<optional>
<element name="timeout">
<attribute name="seconds">
<ref name="positiveInteger"/>
</attribute>
<empty/>
</element>
</optional>
</define>
<define name="diskSourceNetworkProtocolSSLVerify">
<element name="ssl">
<attribute name="verify">
@ -1854,6 +1873,7 @@
<optional>
<ref name="diskSourceNetworkProtocolHTTPCookies"/>
</optional>
<ref name="diskSourceNetworkProtocolPropsCommon"/>
</element>
</define>
@ -1873,6 +1893,7 @@
<optional>
<ref name="diskSourceNetworkProtocolHTTPCookies"/>
</optional>
<ref name="diskSourceNetworkProtocolPropsCommon"/>
</element>
</define>
@ -1892,6 +1913,7 @@
<optional>
<ref name="diskSourceNetworkProtocolSSLVerify"/>
</optional>
<ref name="diskSourceNetworkProtocolPropsCommon"/>
</element>
</define>
@ -1910,6 +1932,7 @@
<optional>
<ref name="encryption"/>
</optional>
<ref name="diskSourceNetworkProtocolPropsCommon"/>
</element>
</define>

View File

@ -9500,6 +9500,19 @@ virDomainDiskSourceNetworkParse(xmlNodePtr node,
return -1;
}
if (src->protocol == VIR_STORAGE_NET_PROTOCOL_HTTP ||
src->protocol == VIR_STORAGE_NET_PROTOCOL_HTTPS ||
src->protocol == VIR_STORAGE_NET_PROTOCOL_FTP ||
src->protocol == VIR_STORAGE_NET_PROTOCOL_FTPS) {
if (virXPathULongLong("string(./readahead/@size)", ctxt, &src->readahead) == -2 ||
virXPathULongLong("string(./timeout/@seconds)", ctxt, &src->timeout) == -2) {
virReportError(VIR_ERR_XML_ERROR, "%s",
_("invalid readahead size or timeout"));
return -1;
}
}
return 0;
}
@ -24632,6 +24645,12 @@ virDomainDiskSourceFormatNetwork(virBufferPtr attrBuf,
virDomainDiskSourceFormatNetworkCookies(childBuf, src);
if (src->readahead)
virBufferAsprintf(childBuf, "<readahead size='%llu'/>\n", src->readahead);
if (src->timeout)
virBufferAsprintf(childBuf, "<timeout seconds='%llu'/>\n", src->timeout);
return 0;
}

View File

@ -2383,6 +2383,8 @@ virStorageSourceCopy(const virStorageSource *src,
def->discard = src->discard;
def->detect_zeroes = src->detect_zeroes;
def->sslverify = src->sslverify;
def->readahead = src->readahead;
def->timeout = src->timeout;
/* storage driver metadata are not copied */
def->drv = NULL;

View File

@ -295,6 +295,9 @@ struct _virStorageSource {
bool encryptionInherited;
virStoragePRDefPtr pr;
virTristateBool sslverify;
/* both values below have 0 as default value */
unsigned long long readahead; /* size of the readahead buffer in bytes */
unsigned long long timeout; /* connection timeout in seconds */
virStorageSourceNVMeDefPtr nvme; /* type == VIR_STORAGE_TYPE_NVME */

View File

@ -49,6 +49,8 @@
<cookie name='test'>testcookievalue</cookie>
<cookie name='test2'>blurb</cookie>
</cookies>
<readahead size='65536'/>
<timeout seconds='10'/>
</source>
<target dev='vdd' bus='virtio'/>
</disk>