Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
Commits on Apr 24, 2013
  1. @slfritchie @Vagabond

    Disable I/O to the console if the old-style Erlang console is used

    slfritchie authored Vagabond committed
    There's a nasty problem with the Erlang VM + lager when the old-style
    Erlang console is used.  You can use the "-oldshell" flag to explicitly
    get the old-style shell.  However, if the Erlang VM is started when
    *not* associated with a pseudo-tty, the VM will silently use the
    old-style shell (because the new-style shell requires a pty to
    support command line editing, etc.).  The most common way of starting
    the Erlang VM without a pty is to start it via a non-interactive
    SSH session.
    
    This patch is opinionated in what to do in the case when the old-
    style shell is detected.  My opinion is:
    
    1. Shout loudly to the console log (in a separate Erlang process, so
       that the main lager event handler proc won't be blocked by any
       problems with the old-style console).  It's almost certainly
       likely that you really don't want to run Erlang with the old-style
       shell.  But many sysadmins don't look closely at their systems'
       log files, so (for example) shouting the same message 10x in a row
       is legit.  Reviewers: YMMV.
    2. Set a SASL alarm.  Again, many sysadmins' are bad at looking at
       log messages.  Setting a SASL alarm is another method to try to
       get their attention.
    
    To test, create a test script called `/tmp/testit.sh`, changing the
    `-pz` parameter to point to the correct place for lager's `ebin`
    subdirectory:
    
        #!/bin/sh
    
        erl -pz /Users/fritchie/b/src/lager/ebin -eval '{application:start(sasl), lager_console_backend:init([error, true]), timer:sleep(5*1000), io:format("\n\nInfo: ~p\n\n", [{{alarms, alarm_handler:get_alarms()}, {user_drv, whereis(user_drv)}}]), erlang:halt()}.'
    
    Then run it twice, using the following:
    
        First time: ssh -t localhost sh /tmp/testit.sh
        Second time: ssh localhost sh /tmp/testit.sh
    
    The last lines of the first time should look like:
    
        Info: {{alarms,[]},{user_drv,<0.22.0>}}
    
    The last lines of the second time should look like:
    
        Info: {{alarms,
                   [{lager_console_backend,
                        "WARNING: old-style console is in use, so lager_console_backend log output to the console is disabled.  Restart the VM on a pseudo-tty to ensure use of the new-style VM console."}]},
               {user_drv,undefined}}
Commits on Aug 24, 2011
  1. @slfritchie
Something went wrong with that request. Please try again.