[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] [PATCH 12/22] qom-fuse: workaround for truncated proper
From: |
Anthony Liguori |
Subject: |
Re: [Qemu-devel] [PATCH 12/22] qom-fuse: workaround for truncated properties > 4096 |
Date: |
Tue, 24 Jul 2012 17:26:43 -0500 |
User-agent: |
Notmuch/0.13.2+60~g7ecf77d (http://notmuchmail.org) Emacs/23.3.1 (x86_64-pc-linux-gnu) |
Michael Roth <address@hidden> writes:
I don't think this is the most correct solution but I think it's good
enough in practice so
Reviewed-by: Anthony Liguori <address@hidden>
Regards,
Anthony Liguori
> We currently hard-code property size at 4096 for the purposes of
> getattr()/stat()/etc. For 'state' properties we can exceed this easily,
> leading to truncated responses.
>
> Instead, for a particular property, make it
> max(4096, most_recent_property_size * 2). This allows some
> head-room for properties that change size periodically (numbers,
> strings, state properties containing arrays, etc)
>
> Also, implement a simple property cache to avoid spinning on qom-get
> if an application reads beyond the actual size. This also allows us
> to use a snapshot of a single qom-get that persists across read()'s.
> Old Cache entries are evicted as soon as we attempt to read() from
> offset 0 again.
>
> Signed-off-by: Michael Roth <address@hidden>
> ---
> QMP/qom-fuse | 24 +++++++++++++++++-------
> 1 file changed, 17 insertions(+), 7 deletions(-)
>
> diff --git a/QMP/qom-fuse b/QMP/qom-fuse
> index 5c6754a..bd43f29 100755
> --- a/QMP/qom-fuse
> +++ b/QMP/qom-fuse
> @@ -26,6 +26,7 @@ class QOMFS(Fuse):
> self.qmp.connect()
> self.ino_map = {}
> self.ino_count = 1
> + self.prop_cache = {}
>
> def get_ino(self, path):
> if self.ino_map.has_key(path):
> @@ -67,12 +68,16 @@ class QOMFS(Fuse):
> if not self.is_property(path):
> return -ENOENT
>
> - path, prop = path.rsplit('/', 1)
> - try:
> - data = str(self.qmp.command('qom-get', path=path, property=prop))
> - data += '\n' # make values shell friendly
> - except:
> - return -EPERM
> + # avoid extra calls to qom-get by using cached value when offset > 0
> + if offset == 0 or not self.prop_cache.has_key(path):
> + directory, prop = path.rsplit('/', 1)
> + try:
> + resp = str(self.qmp.command('qom-get', path=directory,
> property=prop))
> + self.prop_cache[path] = resp + '\n' # make values shell
> friendly
> + except:
> + return -EPERM
> +
> + data = self.prop_cache[path]
>
> if offset > len(data):
> return ''
> @@ -111,13 +116,18 @@ class QOMFS(Fuse):
> 0,
> 0))
> elif self.is_property(path):
> + directory, prop = path.rsplit('/', 1)
> + try:
> + resp = str(self.qmp.command('qom-get', path=directory,
> property=prop))
> + except:
> + return -ENOENT
> value = posix.stat_result((0644 | stat.S_IFREG,
> self.get_ino(path),
> 0,
> 1,
> 1000,
> 1000,
> - 4096,
> + max(len(resp) * 2, 4096),
> 0,
> 0,
> 0))
> --
> 1.7.9.5
- Re: [Qemu-devel] [PATCH 07/22] qapi: qapi_visit.py, support generating static functions, (continued)
- [Qemu-devel] [PATCH 06/22] qapi: add visitor interfaces for arrays, Michael Roth, 2012/07/24
- [Qemu-devel] [PATCH 08/22] qapi: qapi_visit.py, support for visiting non-pointer/embedded structs, Michael Roth, 2012/07/24
- [Qemu-devel] [PATCH 09/22] qapi: QmpOutputVisitor, implement array handling, Michael Roth, 2012/07/24
- [Qemu-devel] [PATCH 10/22] qapi: qapi.py, make json parser more robust, Michael Roth, 2012/07/24
- [Qemu-devel] [PATCH 12/22] qom-fuse: workaround for truncated properties > 4096, Michael Roth, 2012/07/24
- Re: [Qemu-devel] [PATCH 12/22] qom-fuse: workaround for truncated properties > 4096,
Anthony Liguori <=
- [Qemu-devel] [PATCH 11/22] qapi: add open-coded visitor for struct tm types, Michael Roth, 2012/07/24
- [Qemu-devel] [PATCH 13/22] module additions for schema registration, Michael Roth, 2012/07/24
- [Qemu-devel] [PATCH 15/22] qidl: Add documentation, Michael Roth, 2012/07/24
- [Qemu-devel] [PATCH 14/22] qdev: move Property-related declarations to qdev-properties.h, Michael Roth, 2012/07/24
- [Qemu-devel] [PATCH 20/22] qemu-timer: add visit_type_QEMUTimer, Michael Roth, 2012/07/24
- [Qemu-devel] [PATCH 19/22] qidl: unit tests, Michael Roth, 2012/07/24
- [Qemu-devel] [PATCH 22/22] cirrus_vga: add QIDL annotations, Michael Roth, 2012/07/24
- [Qemu-devel] [PATCH 16/22] qidl: parser, initial import from qc.git, Michael Roth, 2012/07/24