Reconstructor logging to omit 404 warnings

Currently, the replicator does not log warning messages
for 404 responses. We would like the reconstructor to
do the same, as 404s are not considered unusual, and
are already handled by the object server.

Change-Id: Ia927bf30362548832e9f451923ff94053e11b758
Closes-Bug: #1491883
This commit is contained in:
Minwoo Bae 2015-09-09 15:33:45 -05:00
parent cb683d391c
commit a63f70c17d
2 changed files with 18 additions and 2 deletions

View File

@ -36,7 +36,8 @@ from swift.common.bufferedhttp import http_connect
from swift.common.daemon import Daemon from swift.common.daemon import Daemon
from swift.common.ring.utils import is_local_device from swift.common.ring.utils import is_local_device
from swift.obj.ssync_sender import Sender as ssync_sender from swift.obj.ssync_sender import Sender as ssync_sender
from swift.common.http import HTTP_OK, HTTP_INSUFFICIENT_STORAGE from swift.common.http import HTTP_OK, HTTP_NOT_FOUND, \
HTTP_INSUFFICIENT_STORAGE
from swift.obj.diskfile import DiskFileRouter, get_data_dir, \ from swift.obj.diskfile import DiskFileRouter, get_data_dir, \
get_tmp_dir get_tmp_dir
from swift.common.storage_policy import POLICIES, EC_POLICY from swift.common.storage_policy import POLICIES, EC_POLICY
@ -203,12 +204,14 @@ class ObjectReconstructor(Daemon):
part, 'GET', path, headers=headers) part, 'GET', path, headers=headers)
with Timeout(self.node_timeout): with Timeout(self.node_timeout):
resp = conn.getresponse() resp = conn.getresponse()
if resp.status != HTTP_OK: if resp.status not in [HTTP_OK, HTTP_NOT_FOUND]:
self.logger.warning( self.logger.warning(
_("Invalid response %(resp)s from %(full_path)s"), _("Invalid response %(resp)s from %(full_path)s"),
{'resp': resp.status, {'resp': resp.status,
'full_path': self._full_path(node, part, path, policy)}) 'full_path': self._full_path(node, part, path, policy)})
resp = None resp = None
elif resp.status == HTTP_NOT_FOUND:
resp = None
except (Exception, Timeout): except (Exception, Timeout):
self.logger.exception( self.logger.exception(
_("Trying to GET %(full_path)s"), { _("Trying to GET %(full_path)s"), {

View File

@ -683,6 +683,19 @@ class TestGlobalSetupObjectReconstructor(unittest.TestCase):
self.assertEqual( self.assertEqual(
len(self.reconstructor.logger.log_dict['warning']), 1) len(self.reconstructor.logger.log_dict['warning']), 1)
def test_reconstructor_does_not_log_on_404(self):
part = self.part_nums[0]
node = POLICIES[0].object_ring.get_part_nodes(int(part))[0]
with mocked_http_conn(404):
self.reconstructor._get_response(node, part,
path='some_path',
headers={},
policy=POLICIES[0])
# Make sure that no warnings are emitted for a 404
len_warning_lines = len(self.logger.get_lines_for_level('warning'))
self.assertEqual(len_warning_lines, 0)
def test_reconstructor_skips_bogus_partition_dirs(self): def test_reconstructor_skips_bogus_partition_dirs(self):
# A directory in the wrong place shouldn't crash the reconstructor # A directory in the wrong place shouldn't crash the reconstructor
self.reconstructor._reset_stats() self.reconstructor._reset_stats()