iptables_manager: Fix get_binary_name for eventlet

The inspect trick used by get_binary_name does not work for
eventlet non-main threads.  It's actually the case for ofagent
and in that case it yields something like "greenthread.py",
which is not desirable because this module assumes it different
for each programs.  This commit fixes the problem by switching
to use sys.argv.

Closes-Bug: #1367075
Change-Id: I8e765882c58d9991a37f0bbb52cdccc406e287bd
This commit is contained in:
YAMAMOTO Takashi 2014-09-09 12:20:23 +09:00
parent ab8d6756eb
commit 2c5b6391c0
2 changed files with 5 additions and 5 deletions

View File

@ -18,9 +18,9 @@
"""Implements iptables rules using linux utilities."""
import inspect
import os
import re
import sys
from oslo.config import cfg
from oslo.utils import excutils
@ -42,7 +42,7 @@ LOG = logging.getLogger(__name__)
# (max_chain_name_length - len('-POSTROUTING') == 16)
def get_binary_name():
"""Grab the name of the binary we're running in."""
return os.path.basename(inspect.stack()[-1][1])[:16]
return os.path.basename(sys.argv[0])[:16]
binary_name = get_binary_name()

View File

@ -13,8 +13,8 @@
# See the License for the specific language governing permissions and
# limitations under the License.
import inspect
import os
import sys
import mock
from oslo.config import cfg
@ -190,8 +190,8 @@ class IptablesManagerStateFulTestCase(base.BaseTestCase):
self.execute = mock.patch.object(self.iptables, "execute").start()
def test_binary_name(self):
self.assertEqual(iptables_manager.binary_name,
os.path.basename(inspect.stack()[-1][1])[:16])
expected = os.path.basename(sys.argv[0])[:16]
self.assertEqual(expected, iptables_manager.binary_name)
def test_get_chain_name(self):
name = '0123456789' * 5