Skip to content

Commit d526651

Browse files
committed
replace fnmatch with oslo.utils.fnmatch
oslo.utils has implemented a thread safe fnmatch, we can use it instead of maintaining a private one. Change-Id: Idb8a3d9f2b0fb16ec403f2da3ad00ee0d982454e
1 parent 123fa26 commit d526651

File tree

6 files changed

+12
-40
lines changed

6 files changed

+12
-40
lines changed

ceilometer/agent/manager.py

+2-1
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@
2727
from oslo_config import cfg
2828
from oslo_log import log
2929
import oslo_messaging
30+
from oslo_utils import fnmatch
3031
from six import moves
3132
from six.moves.urllib import parse as urlparse
3233
from stevedore import extension
@@ -246,7 +247,7 @@ def __init__(self, namespaces=None, pollster_list=None):
246247

247248
def _match(pollster):
248249
"""Find out if pollster name matches to one of the list."""
249-
return any(utils.match(pollster.name, pattern) for
250+
return any(fnmatch.fnmatch(pollster.name, pattern) for
250251
pattern in pollster_list)
251252

252253
if type(namespaces) is not list:

ceilometer/dispatcher/gnocchi.py

+2-2
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626
from keystoneauth1 import session as ka_session
2727
from oslo_config import cfg
2828
from oslo_log import log
29+
from oslo_utils import fnmatch
2930
import requests
3031
import retrying
3132
import six
@@ -35,7 +36,6 @@
3536
from ceilometer import dispatcher
3637
from ceilometer.i18n import _, _LE, _LW
3738
from ceilometer import keystone_client
38-
from ceilometer import utils
3939

4040
NAME_ENCODED = __name__.encode('utf-8')
4141
CACHE_NAMESPACE = uuid.UUID(bytes=md5(NAME_ENCODED).digest())
@@ -112,7 +112,7 @@ def __init__(self, definition_cfg, default_archive_policy, plugin_manager):
112112

113113
def match(self, metric_name):
114114
for t in self.cfg['metrics']:
115-
if utils.match(metric_name, t):
115+
if fnmatch.fnmatch(metric_name, t):
116116
return True
117117
return False
118118

ceilometer/event/converter.py

+3-3
Original file line numberDiff line numberDiff line change
@@ -16,13 +16,13 @@
1616
from debtcollector import moves
1717
from oslo_config import cfg
1818
from oslo_log import log
19+
from oslo_utils import fnmatch
1920
from oslo_utils import timeutils
2021
import six
2122

2223
from ceilometer import declarative
2324
from ceilometer.event.storage import models
2425
from ceilometer.i18n import _
25-
from ceilometer import utils
2626

2727
OPTS = [
2828
cfg.StrOpt('definitions_cfg_file',
@@ -130,13 +130,13 @@ def __init__(self, definition_cfg, trait_plugin_mgr):
130130

131131
def included_type(self, event_type):
132132
for t in self._included_types:
133-
if utils.match(event_type, t):
133+
if fnmatch.fnmatch(event_type, t):
134134
return True
135135
return False
136136

137137
def excluded_type(self, event_type):
138138
for t in self._excluded_types:
139-
if utils.match(event_type, t):
139+
if fnmatch.fnmatch(event_type, t):
140140
return True
141141
return False
142142

ceilometer/meter/notifications.py

+2-2
Original file line numberDiff line numberDiff line change
@@ -19,13 +19,13 @@
1919
from oslo_config import cfg
2020
from oslo_log import log
2121
import oslo_messaging
22+
from oslo_utils import fnmatch
2223
from stevedore import extension
2324

2425
from ceilometer.agent import plugin_base
2526
from ceilometer import declarative
2627
from ceilometer.i18n import _LE, _LW
2728
from ceilometer import sample
28-
from ceilometer import utils
2929

3030
OPTS = [
3131
cfg.StrOpt('meter_definitions_cfg_file',
@@ -97,7 +97,7 @@ def __init__(self, definition_cfg, plugin_manager):
9797

9898
def match_type(self, meter_name):
9999
for t in self._event_type:
100-
if utils.match(meter_name, t):
100+
if fnmatch.fnmatch(meter_name, t):
101101
return True
102102

103103
def to_samples(self, message, all_values=False):

ceilometer/pipeline.py

+3-3
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
from oslo_config import cfg
2626
from oslo_log import log
2727
import oslo_messaging
28+
from oslo_utils import fnmatch
2829
from oslo_utils import timeutils
2930
import six
3031
from stevedore import extension
@@ -36,7 +37,6 @@
3637
from ceilometer import publisher
3738
from ceilometer.publisher import utils as publisher_utils
3839
from ceilometer import sample as sample_util
39-
from ceilometer import utils
4040

4141

4242
OPTS = [
@@ -274,11 +274,11 @@ def check_source_filtering(self, data, d_type):
274274
def is_supported(dataset, data_name):
275275
# Support wildcard like storage.* and !disk.*
276276
# Start with negation, we consider that the order is deny, allow
277-
if any(utils.match(data_name, datapoint[1:])
277+
if any(fnmatch.fnmatch(data_name, datapoint[1:])
278278
for datapoint in dataset if datapoint[0] == '!'):
279279
return False
280280

281-
if any(utils.match(data_name, datapoint)
281+
if any(fnmatch.fnmatch(data_name, datapoint)
282282
for datapoint in dataset if datapoint[0] != '!'):
283283
return True
284284

ceilometer/utils.py

-29
Original file line numberDiff line numberDiff line change
@@ -23,11 +23,8 @@
2323
import copy
2424
import datetime
2525
import decimal
26-
import fnmatch
2726
import hashlib
28-
import re
2927
import struct
30-
import sys
3128

3229
from oslo_concurrency import processutils
3330
from oslo_config import cfg
@@ -257,29 +254,3 @@ def kill_listeners(listeners):
257254
for listener in listeners:
258255
listener.stop()
259256
listener.wait()
260-
261-
262-
if sys.version_info > (2, 7, 9):
263-
match = fnmatch.fnmatch
264-
else:
265-
_MATCH_CACHE = {}
266-
_MATCH_CACHE_MAX = 100
267-
268-
def match(string, pattern):
269-
"""Thread safe fnmatch re-implementation.
270-
271-
Standard library fnmatch in Python versions <= 2.7.9 has thread safe
272-
issue, this helper function is created for such case. see:
273-
https://bugs.python.org/issue23191
274-
"""
275-
string = string.lower()
276-
pattern = pattern.lower()
277-
278-
cached_pattern = _MATCH_CACHE.get(pattern)
279-
if cached_pattern is None:
280-
translated_pattern = fnmatch.translate(pattern)
281-
cached_pattern = re.compile(translated_pattern)
282-
if len(_MATCH_CACHE) >= _MATCH_CACHE_MAX:
283-
_MATCH_CACHE.clear()
284-
_MATCH_CACHE[pattern] = cached_pattern
285-
return cached_pattern.match(string) is not None

0 commit comments

Comments
 (0)