Commit f74b88fa authored by Iustin Pop's avatar Iustin Pop
Browse files

Log only partial response in Luxi when in debug mode



Currently, we log the entire response (at debug level) in the Luxi
replies. This is not a good idea; the logging library operates on
strings, and as such it will use huge amounts of memory: without debug
logging, a certain gnt-job list invocation uses 295MB (+RTS -s) and
2m35s time, when in debug mode, it's 1525MB and 48m!

So we make two changes:

- first, we switch from "show (pp_value a)" to "encode a", which
  generates a non-formatted string rather than a indented one
- second we log only the first 2000 characters; this should be enough
  to understand the first part of the response

We could go for higher, or for logging in batches (that would be
faster, as well).
Signed-off-by: default avatarIustin Pop <iustin@google.com>
Reviewed-by: default avatarHelga Velroyen <helgav@google.com>
parent e21c2eec
......@@ -39,7 +39,6 @@ import Data.Maybe
import qualified Network.Socket as S
import qualified Text.JSON as J
import Text.JSON (showJSON, JSValue(..))
import Text.JSON.Pretty (pp_value)
import System.Info (arch)
import qualified Ganeti.Constants as C
......@@ -179,7 +178,8 @@ handleClientMsg client creader args = do
logWarning $ "Failed to execute request: " ++ show err
return (False, showJSON err)
Ok result -> do
logDebug $ "Result " ++ show (pp_value result)
-- only log the first 2,000 chars of the result
logDebug $ "Result (truncated): " ++ take 2000 (J.encode result)
return (True, result)
sendMsg client $ buildResponse status rval
return True
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment