From 47e03c07dc1b64f956a1138fac8a14f7bf9a2e50 Mon Sep 17 00:00:00 2001 From: Ching Kuo Date: Wed, 28 Oct 2020 10:39:51 +0800 Subject: [PATCH] Improve Socket for oslo.metrics This commit includes 2 improvements for oslo.metrics UDP socket - When starting oslo.metrics unlink the socket first before binding - Change the mode for file so that other OpenStack process running in other user can access and send metrics e.g. nova, neutron Change-Id: I27672f03d282acf1e9cb669998899a032fe4202a --- oslo_metrics/__main__.py | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/oslo_metrics/__main__.py b/oslo_metrics/__main__.py index 74dec0a..eabd15f 100644 --- a/oslo_metrics/__main__.py +++ b/oslo_metrics/__main__.py @@ -16,6 +16,7 @@ import os import select import socket +import stat import sys import threading from wsgiref.simple_server import make_server @@ -48,10 +49,19 @@ class MetricsListener(): def __init__(self, socket_path): self.socket_path = socket_path self.socket = socket.socket(socket.AF_UNIX, socket.SOCK_DGRAM) + self.unlink(socket_path) + self.socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) self.socket.bind(self.socket_path) self.start = True self.router = message_router.MessageRouter() + def unlink(self, socket_path): + try: + os.unlink(socket_path) + except OSError: + if os.path.exists(socket_path): + raise + def serve(self): while self.start: readable, writable, exceptional = select.select( @@ -74,7 +84,12 @@ class MetricsListener(): def main(): cfg.CONF(sys.argv[1:]) - m = MetricsListener(cfg.CONF.oslo_metrics.metrics_socket_file) + socket_path = cfg.CONF.oslo_metrics.metrics_socket_file + m = MetricsListener(socket_path) + try: + os.chmod(socket_path, stat.S_IRWXU | stat.S_IRWXO) + except OSError: + LOG.error("Changing the mode of the file failed.... continuing") mt = threading.Thread(target=m.serve) LOG.info("Start oslo.metrics") mt.start()