make the statsdb backend eventlet safe. without the lock, you get

multiple concurrent write errors.
This commit is contained in:
Tim Daly, Jr
2013-04-16 19:47:46 +00:00
parent 46106d181a
commit faf56db3fd
2 changed files with 10 additions and 5 deletions

View File

@@ -8,12 +8,14 @@
# OR CONDITIONS OF ANY KIND, either express or implied. See the
# License for the specific language governing permissions and
# limitations under the License. See accompanying LICENSE file.
import eventlet
from tomograph import config
from tomograph import cache
import logging
import socket
logging = eventlet.import_patched('logging')
socket = eventlet.import_patched('socket')
threading = eventlet.import_patched('threading')
logger = logging.getLogger(__name__)
@@ -21,12 +23,15 @@ udp_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
hostname_cache = cache.Cache(socket.gethostbyname)
lock = threading.Lock()
def send(span):
def statsd_send(name, value, units):
stat = str(name).replace(' ', '-') + ':' + str(int(value)) + '|' + str(units)
#logger.info('sending stat {0}'.format(stat))
udp_socket.sendto(stat, (hostname_cache.get(config.statsd_host), config.statsd_port))
with lock:
udp_socket.sendto(stat, (hostname_cache.get(config.statsd_host), config.statsd_port))
def server_name(note):
address = note.address.replace('.', '-')

View File

@@ -103,13 +103,13 @@ def before_execute(name):
port = conn.connection.connection.port
#print >>sys.stderr, 'connection is {0}:{1}'.format(h, port)
#print >>sys.stderr, 'sql statement is {0}'.format(clauseelement)
#start(str(name) + 'db client', 'execute', h, port)
start(str(name) + 'db client', 'execute', h, port)
return handler
def after_execute(name):
# name isn't used, at least not yet...
def handler(conn, clauseelement, multiparams, params, result):
#stop('execute')
stop('execute')
pass
return handler