I needed the following patch to use debug console.

>From 56e7c458273d5acf7a9202df39ae4e8617875c56 Mon Sep 17 00:00:00 2001
Message-Id: 
<56e7c458273d5acf7a9202df39ae4e8617875c56.1365057932.git.yamah...@valinux.co.jp>
From: Isaku Yamahata <[email protected]>
Date: Thu, 4 Apr 2013 15:40:37 +0900
Subject: [PATCH] debug_console: monkey patch
 code.InterractiveConsole.raw_input

By default code.InteractiveConsole.raw_input uses builtin raw_input
which is written in C. So it may not yeild thread execution, and other
threads aren't scheduled.
replace code.InteractiveConsole.raw_input with thread friendly one.
Thus Ryu works as expected with debug_console app.

Signed-off-by: Isaku Yamahata <[email protected]>
---
 ryu/app/debug_console.py |    8 +++++++-
 1 file changed, 7 insertions(+), 1 deletion(-)

diff --git a/ryu/app/debug_console.py b/ryu/app/debug_console.py
index ab9d3a2..e0cacec 100644
--- a/ryu/app/debug_console.py
+++ b/ryu/app/debug_console.py
@@ -25,13 +25,19 @@ import signal
 from ryu.base import app_manager
 
 
+# builtin raw_input() is written by C and doesn't yeild execution.
+def _raw_input(message):
+    sys.stdout.write(message)
+    gevent.socket.wait_read(sys.stdin.fileno())
+    return sys.stdin.readline()
+
 class DebugConsole(app_manager.RyuApp):
     def __init__(self, *args, **kwargs):
         super(DebugConsole, self).__init__(*args, **kwargs)
         gevent.spawn(self.__thread)
 
     def __thread(self):
-        code.InteractiveConsole().interact("Ryu Debug Console")
+        code.interact(banner="Ryu Debug Console", readfunc=_raw_input)
 
         # XXX should be a graceful shutdown
         os.kill(os.getpid(), signal.SIGTERM)
-- 
1.7.10.4




On Mon, Mar 11, 2013 at 02:18:26PM +0900, YAMAMOTO Takashi wrote:
> 
> Signed-off-by: YAMAMOTO Takashi <[email protected]>
> ---
>  ryu/app/debug_console.py | 37 +++++++++++++++++++++++++++++++++++++
>  1 file changed, 37 insertions(+)
>  create mode 100644 ryu/app/debug_console.py
> 
> diff --git a/ryu/app/debug_console.py b/ryu/app/debug_console.py
> new file mode 100644
> index 0000000..ab9d3a2
> --- /dev/null
> +++ b/ryu/app/debug_console.py
> @@ -0,0 +1,37 @@
> +# Copyright (C) 2013 Nippon Telegraph and Telephone Corporation.
> +# Copyright (C) 2013 YAMAMOTO Takashi <yamamoto at valinux co jp>
> +#
> +# Licensed under the Apache License, Version 2.0 (the "License");
> +# you may not use this file except in compliance with the License.
> +# You may obtain a copy of the License at
> +#
> +#    http://www.apache.org/licenses/LICENSE-2.0
> +#
> +# Unless required by applicable law or agreed to in writing, software
> +# distributed under the License is distributed on an "AS IS" BASIS,
> +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
> +# implied.
> +# See the License for the specific language governing permissions and
> +# limitations under the License.
> +
> +# a RyuApp to provide a python interactive console for debugging
> +
> +import code
> +import gevent
> +import os
> +import sys
> +import signal
> +
> +from ryu.base import app_manager
> +
> +
> +class DebugConsole(app_manager.RyuApp):
> +    def __init__(self, *args, **kwargs):
> +        super(DebugConsole, self).__init__(*args, **kwargs)
> +        gevent.spawn(self.__thread)
> +
> +    def __thread(self):
> +        code.InteractiveConsole().interact("Ryu Debug Console")
> +
> +        # XXX should be a graceful shutdown
> +        os.kill(os.getpid(), signal.SIGTERM)
> -- 
> 1.8.0.1
> 
> 
> ------------------------------------------------------------------------------
> Symantec Endpoint Protection 12 positioned as A LEADER in The Forrester  
> Wave(TM): Endpoint Security, Q1 2013 and "remains a good choice" in the  
> endpoint security space. For insight on selecting the right partner to 
> tackle endpoint security challenges, access the full report. 
> http://p.sf.net/sfu/symantec-dev2dev
> _______________________________________________
> Ryu-devel mailing list
> [email protected]
> https://lists.sourceforge.net/lists/listinfo/ryu-devel
> 

-- 
yamahata

------------------------------------------------------------------------------
Minimize network downtime and maximize team effectiveness.
Reduce network management and security costs.Learn how to hire 
the most talented Cisco Certified professionals. Visit the 
Employer Resources Portal
http://www.cisco.com/web/learning/employer_resources/index.html
_______________________________________________
Ryu-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/ryu-devel

Reply via email to