Example #1
0
def reprocess_minidump(data):
    project = Project.objects.get_from_cache(id=data['project'])

    minidump_is_reprocessed_cache_key = minidump_reprocessed_cache_key_for_event(data)
    if default_cache.get(minidump_is_reprocessed_cache_key):
        return

    if not _is_symbolicator_enabled(project, data):
        rv = reprocess_minidump_with_cfi(data)
        default_cache.set(minidump_is_reprocessed_cache_key, True, 3600)
        return rv

    minidump = get_attached_minidump(data)

    if not minidump:
        logger.error("Missing minidump for minidump event")
        return

    request_id_cache_key = request_id_cache_key_for_event(data)

    response = run_symbolicator(
        project=project,
        request_id_cache_key=request_id_cache_key,
        create_task=create_minidump_task,
        minidump=make_buffered_slice_reader(minidump.data, None)
    )

    if handle_symbolicator_response_status(data, response):
        merge_symbolicator_minidump_response(data, response)

    event_cache_key = cache_key_for_event(data)
    default_cache.set(event_cache_key, dict(data), 3600)
    default_cache.set(minidump_is_reprocessed_cache_key, True, 3600)

    return data
Example #2
0
def reprocess_minidump(data):
    project = Project.objects.get_from_cache(id=data['project'])

    minidump_is_reprocessed_cache_key = minidump_reprocessed_cache_key_for_event(
        data)
    if default_cache.get(minidump_is_reprocessed_cache_key):
        return

    if not _is_symbolicator_enabled(project, data):
        rv = reprocess_minidump_with_cfi(data)
        default_cache.set(minidump_is_reprocessed_cache_key, True, 3600)
        return rv

    minidump = get_attached_minidump(data)

    if not minidump:
        logger.error("Missing minidump for minidump event")
        return

    request_id_cache_key = request_id_cache_key_for_event(data)

    response = run_symbolicator(project=project,
                                request_id_cache_key=request_id_cache_key,
                                create_task=create_minidump_task,
                                minidump=make_buffered_slice_reader(
                                    minidump.data, None))

    if handle_symbolicator_response_status(data, response):
        merge_symbolicator_minidump_response(data, response)

    event_cache_key = cache_key_for_event(data)
    default_cache.set(event_cache_key, dict(data), 3600)
    default_cache.set(minidump_is_reprocessed_cache_key, True, 3600)

    return data
Example #3
0
    def test_cfi_reprocessing(self, mock_cache_get, mock_cache_set, mock_attachment_get):
        dif = self.create_dif_file(
            debug_id='c0bcc3f1-9827-fe65-3058-404b2831d9e6',
            features=['unwind']
        )

        cache_file = self.create_file_from_path(
            path=os.path.join(os.path.dirname(__file__), 'fixtures', 'linux.cficache'),
            type='project.cficache'
        )

        ProjectCfiCacheFile.objects.create(
            project=self.project,
            cache_file=cache_file,
            debug_file=dif,
            checksum=dif.file.checksum,
            version=CFICACHE_LATEST_VERSION,
        )

        mock_attachment_get.return_value = self.mock_attachments()
        data = self.get_mock_event(reprocessed=False)
        result = reprocess_minidump_with_cfi(data)

        cache_key = 'e:9dac1e3a7ea043818ba6f0685e258c09:%s' % self.project.id
        mock_attachment_get.assert_called_once_with(cache_key)
        mock_cache_set.assert_called_with('st:b4eeed5c7008d0003cc5549c36dba6b7', CFI_CACHE)

        assert result == self.get_mock_event(reprocessed=True)
Example #4
0
    def test_cfi_reprocessing(self, mock_cache_get, mock_attachment_get):
        dif = self.create_dif_file(
            debug_id='c0bcc3f1-9827-fe65-3058-404b2831d9e6',
            features=['unwind'])

        cache_file = self.create_file_from_path(path=os.path.join(
            os.path.dirname(__file__), 'fixtures', 'linux.cficache'),
                                                type='project.cficache')

        ProjectCfiCacheFile.objects.create(
            project=self.project,
            cache_file=cache_file,
            debug_file=dif,
            checksum=dif.file.checksum,
            version=CFICACHE_LATEST_VERSION,
        )

        mock_attachment_get.return_value = self.mock_attachments()
        data = self.get_mock_event(reprocessed=False)
        result = reprocess_minidump_with_cfi(data)

        cache_key = 'e:9dac1e3a7ea043818ba6f0685e258c09:%s' % self.project.id
        mock_attachment_get.assert_called_once_with(cache_key)

        assert result == self.get_mock_event(reprocessed=True)
Example #5
0
    def test_cfi_reprocessing_no_cfi_caches(self, mock_attachment_get):
        mock_attachment_get.return_value = self.mock_attachments()

        data = self.get_mock_event(reprocessed=False)
        result = reprocess_minidump_with_cfi(data)

        assert result is None
Example #6
0
    def test_cfi_reprocessing_cached(self, mock_cache_get,
                                     mock_attachment_get):
        mock_cache_get.return_value = [
            ('c0bcc3f1-9827-fe65-3058-404b2831d9e6', '0x1dc0', 'scan'),
            (None, '0x7f5140cdc000', 'scan'),
            ('c0bcc3f1-9827-fe65-3058-404b2831d9e6', '0x0040', 'scan'),
            (None, '0x7fff5aef1000', 'scan'),
            (None, '0x7fff5ae4ac88', 'cfi'),
            ('c0bcc3f1-9827-fe65-3058-404b2831d9e6', '0x1de9', 'scan'),
            ('c0bcc3f1-9827-fe65-3058-404b2831d9e6', '0x1dc0', 'scan'),
            ('c0bcc3f1-9827-fe65-3058-404b2831d9e6', '0x14ca0', 'scan'),
            ('c0bcc3f1-9827-fe65-3058-404b2831d9e6', '0x1c70', 'scan'),
            ('c0bcc3f1-9827-fe65-3058-404b2831d9e6', '0x1dc0', 'scan'),
            ('c0bcc3f1-9827-fe65-3058-404b2831d9e6', '0x1c70', 'scan'),
            ('451a38b5-0679-79d2-0738-22a5ceb24c4b', '0x20830', 'cfi'),
            ('c0bcc3f1-9827-fe65-3058-404b2831d9e6', '0x1d72', 'context'),
        ]

        data = self.get_mock_event(reprocessed=False)
        result = reprocess_minidump_with_cfi(data)

        mock_cache_get.assert_called_once_with(
            'st:a996085d85a6793c0f4c377630965675')
        assert mock_attachment_get.call_count == 0
        assert result == self.get_mock_event(reprocessed=True)
Example #7
0
    def test_cfi_reprocessing_no_cfi_caches(self, mock_attachment_get):
        mock_attachment_get.return_value = self.mock_attachments()

        data = self.get_mock_event(reprocessed=False)
        result = reprocess_minidump_with_cfi(data)

        assert result is None
Example #8
0
    def test_cfi_reprocessing_no_minidump(self, mock_cache_get, mock_attachment_get):
        data = self.get_mock_event(reprocessed=False)
        result = reprocess_minidump_with_cfi(data)

        # mock_cache_get.assert_called_with('st:86e3a22f05a287eeeca681ecbeef3067')
        cache_key = 'e:9dac1e3a7ea043818ba6f0685e258c09:%s' % self.project.id
        mock_attachment_get.assert_called_once_with(cache_key)
        assert result is None
Example #9
0
    def test_cfi_reprocessing_no_minidump(self, mock_cache_get,
                                          mock_attachment_get):
        data = self.get_mock_event(reprocessed=False)
        result = reprocess_minidump_with_cfi(data)

        # mock_cache_get.assert_called_with('st:86e3a22f05a287eeeca681ecbeef3067')
        cache_key = 'e:9dac1e3a7ea043818ba6f0685e258c09:%s' % self.project.id
        mock_attachment_get.assert_called_once_with(cache_key)
        assert result is None
Example #10
0
    def test_cfi_unchanged(self, mock_cache_get, mock_attachment_get):
        mock_cache_get.return_value = '__no_cfi__'

        data = self.get_mock_event(reprocessed=False)
        result = reprocess_minidump_with_cfi(data)

        mock_cache_get.assert_called_once_with('st:b4eeed5c7008d0003cc5549c36dba6b7')
        assert mock_attachment_get.call_count == 0
        assert result is None
Example #11
0
    def test_cfi_reprocessing_cached(self, mock_cache_get, mock_attachment_get):
        mock_cache_get.return_value = CFI_CACHE

        data = self.get_mock_event(reprocessed=False)
        result = reprocess_minidump_with_cfi(data)

        mock_cache_get.assert_called_once_with('st:b4eeed5c7008d0003cc5549c36dba6b7')
        assert mock_attachment_get.call_count == 0
        assert result == self.get_mock_event(reprocessed=True)
Example #12
0
    def test_cfi_unchanged(self, mock_cache_get, mock_attachment_get):
        mock_cache_get.return_value = '__no_cfi__'

        data = self.get_mock_event(reprocessed=False)
        result = reprocess_minidump_with_cfi(data)

        mock_cache_get.assert_called_once_with(
            'st:a996085d85a6793c0f4c377630965675')
        assert mock_attachment_get.call_count == 0
        assert result is None
Example #13
0
    def test_cfi_unchanged(self, mock_cache_get, mock_attachment_get):
        mock_cache_get.return_value = '__no_cfi__'

        data = self.get_mock_event(reprocessed=False)
        result = reprocess_minidump_with_cfi(data)

        mock_cache_get.assert_called_once_with(
            'st:80d8fdd07a3fb9639403afa33b0e930e')
        assert mock_attachment_get.call_count == 0
        assert result is None
Example #14
0
    def test_cfi_unchanged(self, mock_cache_get, mock_attachment_get):
        mock_cache_get.return_value = '__no_cfi__'

        data = self.get_mock_event(reprocessed=False)
        result = reprocess_minidump_with_cfi(data)

        mock_cache_get.assert_called_once_with(
            'st:b4eeed5c7008d0003cc5549c36dba6b7')
        assert mock_attachment_get.call_count == 0
        assert result is None
Example #15
0
    def test_cfi_reprocessing_no_scanned_frames(self, mock_cache_get, mock_attachment_get):
        data = self.get_mock_event(reprocessed=False)
        for frame in data['exception']['values'][0]['stacktrace']['frames']:
            if frame['trust'] == 'scan':
                frame['trust'] = 'cfi'
        result = reprocess_minidump_with_cfi(data)

        assert mock_cache_get.call_count == 0
        assert mock_attachment_get.call_count == 0
        assert result is None
Example #16
0
    def test_cfi_reprocessing_cached(self, mock_cache_get,
                                     mock_attachment_get):
        mock_cache_get.return_value = CFI_CACHE

        data = self.get_mock_event(reprocessed=False)
        result = reprocess_minidump_with_cfi(data)

        mock_cache_get.assert_called_once_with(
            'st:b4eeed5c7008d0003cc5549c36dba6b7')
        assert mock_attachment_get.call_count == 0
        assert result == self.get_mock_event(reprocessed=True)
Example #17
0
    def test_cfi_reprocessing_no_scanned_frames(self, mock_cache_get,
                                                mock_attachment_get):
        data = copy.deepcopy(self.get_mock_event(reprocessed=False))
        for frame in data['exception']['values'][0]['stacktrace']['frames']:
            if frame['trust'] == 'scan':
                frame['trust'] = 'cfi'
        result = reprocess_minidump_with_cfi(data)

        assert mock_cache_get.call_count == 0
        assert mock_attachment_get.call_count == 0
        assert result is None
Example #18
0
    def test_cfi_missing_stacktrace(self, mock_cache_get, mock_attachment_get):
        data = {
            'exception': {
                'values': [{
                    'stacktrace': None,
                }]
            },
        }
        result = reprocess_minidump_with_cfi(data)

        assert mock_cache_get.call_count == 0
        assert mock_attachment_get.call_count == 0
        assert result is None
Example #19
0
    def test_cfi_missing_stacktrace(self, mock_cache_get, mock_attachment_get):
        data = {
            'exception': {
                'values': [
                    {
                        'stacktrace': None,
                    }
                ]
            },
        }
        result = reprocess_minidump_with_cfi(data)

        assert mock_cache_get.call_count == 0
        assert mock_attachment_get.call_count == 0
        assert result is None
Example #20
0
    def test_cfi_reprocessing_cached(self, mock_cache_get,
                                     mock_attachment_get):
        mock_cache_get.return_value = [
            (None, '0x7f5140cdc000', 'scan'),
            (None, '0x7fff5aef1000', 'scan'),
            ('451a38b5-0679-79d2-0738-22a5ceb24c4b', '0x20830', 'cfi'),
            ('c0bcc3f1-9827-fe65-3058-404b2831d9e6', '0x1d72', 'context'),
        ]

        data = self.get_mock_event(reprocessed=False)
        result = reprocess_minidump_with_cfi(data)

        mock_cache_get.assert_called_once_with(
            'st:80d8fdd07a3fb9639403afa33b0e930e')
        assert mock_attachment_get.call_count == 0
        assert result == self.get_mock_event(reprocessed=True)