Merge pull request #3544 from matrix-org/erikj/fixup_stream_cache
Fix perf regression in PR #3530pull/3551/head
						commit
						c7320a5564
					
				| 
						 | 
				
			
			@ -74,12 +74,14 @@ class StreamChangeCache(object):
 | 
			
		|||
        assert type(stream_pos) is int
 | 
			
		||||
 | 
			
		||||
        if stream_pos >= self._earliest_known_stream_pos:
 | 
			
		||||
            result = {
 | 
			
		||||
            changed_entities = {
 | 
			
		||||
                self._cache[k] for k in self._cache.islice(
 | 
			
		||||
                    start=self._cache.bisect_right(stream_pos),
 | 
			
		||||
                )
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            result = changed_entities.intersection(entities)
 | 
			
		||||
 | 
			
		||||
            self.metrics.inc_hits()
 | 
			
		||||
        else:
 | 
			
		||||
            result = set(entities)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -178,6 +178,22 @@ class StreamChangeCacheTests(unittest.TestCase):
 | 
			
		|||
            ),
 | 
			
		||||
        )
 | 
			
		||||
 | 
			
		||||
        # Query a subset of the entries mid-way through the stream. We should
 | 
			
		||||
        # only get back the subset.
 | 
			
		||||
        self.assertEqual(
 | 
			
		||||
            cache.get_entities_changed(
 | 
			
		||||
                [
 | 
			
		||||
                    "bar@baz.net",
 | 
			
		||||
                ],
 | 
			
		||||
                stream_pos=2,
 | 
			
		||||
            ),
 | 
			
		||||
            set(
 | 
			
		||||
                [
 | 
			
		||||
                    "bar@baz.net",
 | 
			
		||||
                ]
 | 
			
		||||
            ),
 | 
			
		||||
        )
 | 
			
		||||
 | 
			
		||||
    def test_max_pos(self):
 | 
			
		||||
        """
 | 
			
		||||
        StreamChangeCache.get_max_pos_of_last_change will return the most
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue