On Tue, Jan 5, 2010 at 9:13 AM, Iustin Pop <[email protected]> wrote:
> This changes from submitting jobs to get the tags (in cli scripts) to
> queries, which (since the tags query is a cheap one) should be much
> faster.
>
> The tags queries are already done without locks (in the generic query
> paths for instances/nodes/cluster), so this shouldn't break tags query
> via gnt-* list-tags.
>
> On a small cluster, the runtime of gnt-cluster/gnt-instance list tags
> more than halves; on a big cluster (with many MCs) I expect it to be
> more than 5 times faster. The speed of the tags get is not the main
> gain, it is eliminating a job when a simple query is enough.
> ---
>  daemons/ganeti-masterd |    6 ++++++
>  lib/cli.py             |    5 ++---
>  lib/luxi.py            |    4 ++++
>  3 files changed, 12 insertions(+), 3 deletions(-)
>
> diff --git a/daemons/ganeti-masterd b/daemons/ganeti-masterd
> index 4d783a8..63471d9 100755
> --- a/daemons/ganeti-masterd
> +++ b/daemons/ganeti-masterd
> @@ -299,6 +299,12 @@ class ClientOps:
>       op = opcodes.OpQueryClusterInfo()
>       return self._Query(op)
>
> +    elif method == luxi.REQ_QUERY_TAGS:
> +      kind, name = args
> +      logging.info("Received tags query request")
> +      op = opcodes.OpGetTags(kind=kind, name=name)
> +      return self._Query(op)
> +
>     elif method == luxi.REQ_QUEUE_SET_DRAIN_FLAG:
>       drain_flag = args
>       logging.info("Received queue drain flag change request to %s",
> diff --git a/lib/cli.py b/lib/cli.py
> index 41bcc53..bbdb629 100644
> --- a/lib/cli.py
> +++ b/lib/cli.py
> @@ -252,7 +252,6 @@ ARGS_ONE_INSTANCE = [ArgInstance(min=1, max=1)]
>  ARGS_ONE_NODE = [ArgNode(min=1, max=1)]
>
>
> -
>  def _ExtractTagsObject(opts, args):
>   """Extract the tag type object.
>
> @@ -313,8 +312,8 @@ def ListTags(opts, args):
>
>   """
>   kind, name = _ExtractTagsObject(opts, args)
> -  op = opcodes.OpGetTags(kind=kind, name=name)
> -  result = SubmitOpCode(op)
> +  cl = GetClient()
> +  result = cl.QueryTags(kind, name)
>   result = list(result)
>   result.sort()
>   for tag in result:
> diff --git a/lib/luxi.py b/lib/luxi.py
> index e72d7d0..f062816 100644
> --- a/lib/luxi.py
> +++ b/lib/luxi.py
> @@ -56,6 +56,7 @@ REQ_QUERY_NODES = "QueryNodes"
>  REQ_QUERY_EXPORTS = "QueryExports"
>  REQ_QUERY_CONFIG_VALUES = "QueryConfigValues"
>  REQ_QUERY_CLUSTER_INFO = "QueryClusterInfo"
> +REQ_QUERY_TAGS = "QueryTags"
>  REQ_QUEUE_SET_DRAIN_FLAG = "SetDrainFlag"
>  REQ_SET_WATCHER_PAUSE = "SetWatcherPause"
>
> @@ -384,5 +385,8 @@ class Client(object):
>   def QueryConfigValues(self, fields):
>     return self.CallMethod(REQ_QUERY_CONFIG_VALUES, fields)
>
> +  def QueryTags(self, kind, name):
> +    return self.CallMethod(REQ_QUERY_TAGS, (kind, name))
> +
>
>  # TODO: class Server(object)
> --
> 1.6.5.7
>
>

LGTM

Reply via email to