From bdd8c7390b6a3a966aec30dbc5ca970f1c7f4f69 Mon Sep 17 00:00:00 2001 From: Iustin Pop <iustin@google.com> Date: Tue, 15 Nov 2011 18:16:36 +0100 Subject: [PATCH] htools: rework message display construction While diagnosing some (unrelated) memory usage in htools, I've stumbled upon some very bad behaviour in checkData: mapAccum is non-strict, and the tuple we use also, so that results in the list of list of messages being very bad space-wise (hundreds of MB of memory for a simulated cluster with thousands of nodes, all with errors). The new, explicit reuse of the old message list has a linear memory behaviour. The only downside is that messages are listed in the reverse order (which I'll fix on master). Signed-off-by: Iustin Pop <iustin@google.com> Reviewed-by: Michael Hanselmann <hansmi@google.com> --- htools/Ganeti/HTools/Loader.hs | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/htools/Ganeti/HTools/Loader.hs b/htools/Ganeti/HTools/Loader.hs index 58ad010c9..db08d73a5 100644 --- a/htools/Ganeti/HTools/Loader.hs +++ b/htools/Ganeti/HTools/Loader.hs @@ -318,11 +318,14 @@ checkData nl il = - nodeIdsk node il newn = Node.setFmem (Node.setXmem node delta_mem) (Node.fMem node - adj_mem) - umsg1 = [printf "node %s is missing %d MB ram \ - \and %d GB disk" - nname delta_mem (delta_dsk `div` 1024) | - delta_mem > 512 || delta_dsk > 1024]::[String] - in (msgs ++ umsg1, newn) + umsg1 = + if delta_mem > 512 || delta_dsk > 1024 + then (printf "node %s is missing %d MB ram \ + \and %d GB disk" + nname delta_mem (delta_dsk `div` 1024)): + msgs + else msgs + in (umsg1, newn) ) [] nl -- | Compute the amount of memory used by primary instances on a node. -- GitLab