On Wed, Sep 26, 2012 at 05:50:50PM +0200, Agata Murawska wrote:
> On Wed, Sep 26, 2012 at 9:57 AM, Iustin Pop <[email protected]> wrote:
> > On Tue, Sep 25, 2012 at 06:43:54PM +0200, Agata Murawska wrote:
> >> Implementation of node version query.
> >>
> >> Signed-off-by: Agata Murawska <[email protected]>
> >> ---
> >>  htools/Ganeti/Rpc.hs |   31 +++++++++++++++++++++++++++++++
> >>  1 files changed, 31 insertions(+), 0 deletions(-)
> >>
> >> diff --git a/htools/Ganeti/Rpc.hs b/htools/Ganeti/Rpc.hs
> >> index d21b834..cb9ee54 100644
> >> --- a/htools/Ganeti/Rpc.hs
> >> +++ b/htools/Ganeti/Rpc.hs
> >> @@ -53,6 +53,9 @@ module Ganeti.Rpc
> >>    , RpcCallNodeInfo(..)
> >>    , RpcResultNodeInfo(..)
> >>
> >> +  , RpcCallVersion(..)
> >> +  , RpcResultVersion(..)
> >> +
> >>    , rpcTimeoutFromRaw -- FIXME: Not used anywhere
> >>    ) where
> >>
> >> @@ -333,3 +336,31 @@ instance RpcResult RpcResultNodeInfo where
> >>            Right $ RpcResultNodeInfo boot_id vg_info hv_info
> >>
> >>  instance Rpc RpcCallNodeInfo RpcResultNodeInfo
> >> +
> >> +-- | Version
> >> +-- Query node version.
> >> +-- Note: We can't use THH as it does not know what to do with empty dict
> >> +data RpcCallVersion = RpcCallVersion {}
> >> +  deriving (Show, Read, Eq)
> >> +
> >> +instance J.JSON RpcCallVersion where
> >> +  showJSON _ = J.JSNull
> >> +  readJSON _ = fail "Not implemented"
> >
> > For consistency, we should make this accept only JSNull and
> > fail for any other value.
> Ack, not sure if this is what you meant though

Yep, that indeed. I want to be able to use the arbitrary serialisation
helper for this, and the initial version didn't match (readJSON .
showJSON) = id (plus the Ok part)

> >> +$(buildObject "RpcResultVersion" "rpcResultVersion"
> >> +  [ simpleField "version" [t| Int |]
> >> +  ])
> >> +
> >> +instance RpcCall RpcCallVersion where
> >> +  rpcCallName _ = "version"
> >> +  rpcCallTimeout _ = rpcTimeoutToRaw Urgent
> >> +  rpcCallAcceptOffline _ = True
> >> +  rpcCallData call _ = J.encode [call]
> >
> > I wouldn't mind alignment here on "="…
> I will change that but I'd rather do it in the next series, because it
> is not aligned anywhere else

Ah, OK, leave that then.

> >> +instance RpcResult RpcResultVersion where
> >> +  rpcResultFill res =
> >> +    case J.readJSON res of
> >> +      J.Error err -> return . Left $ JsonDecodeError err
> >> +      J.Ok ver -> return . Right $ RpcResultVersion ver
> >
> > Hmm, smells of a helper here too…
> Once ERpcResult is a monad it should just be variant of "fromJResult"
> without the string part, for now I just pushed return before case.

Sounds good.

> Interdiff:
> diff --git a/htools/Ganeti/Rpc.hs b/htools/Ganeti/Rpc.hs
> index 678aefe..efa414c 100644
> --- a/htools/Ganeti/Rpc.hs
> +++ b/htools/Ganeti/Rpc.hs
> @@ -345,7 +345,8 @@ data RpcCallVersion = RpcCallVersion {}
> 
>  instance J.JSON RpcCallVersion where
>    showJSON _ = J.JSNull
> -  readJSON _ = fail "Not implemented"
> +  readJSON J.JSNull = RpcCallVersion

I believe here you need a "return RpcCallVersion"?

> +  readJSON _ = fail "Unable to read RpcCallVersion"
> 
>  $(buildObject "RpcResultVersion" "rpcResultVersion"
>    [ simpleField "version" [t| Int |]
> @@ -359,8 +360,8 @@ instance RpcCall RpcCallVersion where
> 
>  instance RpcResult RpcResultVersion where
>    rpcResultFill res =
> -    case J.readJSON res of
> -      J.Error err -> return . Left $ JsonDecodeError err
> -      J.Ok ver -> return . Right $ RpcResultVersion ver
> +    return $ case J.readJSON res of
> +      J.Error err -> Left $ JsonDecodeError err
> +      J.Ok ver -> Right $ RpcResultVersion ver

LGTM, thanks.

iustin

Reply via email to