qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-devel] [PATCH v3 1/4] util - add automated ID generation utili


From: Programmingkid
Subject: Re: [Qemu-devel] [PATCH v3 1/4] util - add automated ID generation utility
Date: Tue, 13 Oct 2015 15:25:04 -0400

On Oct 13, 2015, at 11:26 AM, Markus Armbruster wrote:

> Jeff Cody <address@hidden> writes:
> 
>> On Tue, Oct 13, 2015 at 09:37:29AM +0200, Markus Armbruster wrote:
>>> Jeff Cody <address@hidden> writes:
>>> 
>>>> Multiple sub-systems in QEMU may find it useful to generate IDs
>>>> for objects that a user may reference via QMP or HMP.  This patch
>>>> presents a standardized way to do it, so that automatic ID generation
>>>> follows the same rules.
>>>> 
>>>> This patch enforces the following rules when generating an ID:
>>>> 
>>>> 1.) Guarantee no collisions with a user-specified ID
>>>> 2.) Identify the sub-system the ID belongs to
>>>> 3.) Guarantee of uniqueness
>>>> 4.) Spoiling predictability, to avoid creating an assumption
>>>>    of object ordering and parsing (i.e., we don't want users to think
>>>>    they can guess the next ID based on prior behavior).
>>>> 
>>>> The scheme for this is as follows (no spaces):
>>>> 
>>>>                # subsys D RR
>>>> Reserved char --|    |   | |
>>>> Subsystem String ----|   | |
>>>> Unique number (64-bit) --| |
>>>> Two-digit random number ---|
>>>> 
>>>> For example, a generated node-name for the block sub-system may look
>>>> like this:
>>>> 
>>>>    #block076
>>>> 
>>>> The caller of id_generate() is responsible for freeing the generated
>>>> node name string with g_free().
>>>> 
>>>> Reviewed-by: John Snow <address@hidden>
>>>> Reviewed-by: Eric Blake <address@hidden>
>>>> Reviewed-by: Alberto Garcia <address@hidden>
>>>> Signed-off-by: Jeff Cody <address@hidden>
>>>> ---
>>>> include/qemu-common.h |  8 ++++++++
>>>> util/id.c             | 37 +++++++++++++++++++++++++++++++++++++
>>>> 2 files changed, 45 insertions(+)
>>>> 
>>>> diff --git a/include/qemu-common.h b/include/qemu-common.h
>>>> index 0bd212b..2f74540 100644
>>>> --- a/include/qemu-common.h
>>>> +++ b/include/qemu-common.h
>>>> @@ -246,6 +246,14 @@ int64_t qemu_strtosz_suffix_unit(const char *nptr, 
>>>> char **end,
>>>> #define STR_OR_NULL(str) ((str) ? (str) : "null")
>>>> 
>>>> /* id.c */
>>>> +
>>>> +typedef enum IdSubSystems {
>>>> +    ID_QDEV,
>>> 
>>> ID_QDEV is not used in this series.  Do you intend to use it in a
>>> followup-series?  Can we reasonably expect that series will be accepted?
>>> 
>> 
>> John Arbuckle has a patch on list that uses it.  I haven't reviewed
>> it, however - but I guess it depends ultimately on whether qdev will
>> allow autogeneration for its IDs or not.
> 
> Then that patch should add ID_QDEV.
> 
>>> You could sidestep these questions by making id_generate() take a string
>>> argument ;)
>>> 
>> 
>> I'd rather avoid having each system specifying a string inline in
>> their code.  It is cleaner to have the strings defined in a central
>> location, I think (not to mention, easier to reference).

I can see the benefit of using a string. The id_generate() function
could use va_args like printf() uses to allow almost any kind of 
string argument. An empty string argument could mean to default to
ID_MAX. But I also think using an enumeration is good enough, so 
either way is good.


reply via email to

[Prev in Thread] Current Thread [Next in Thread]