~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/fifo_cache.py

  • Committer: John Arbash Meinel
  • Date: 2008-12-10 22:26:54 UTC
  • mto: This revision was merged to the branch mainline in revision 3912.
  • Revision ID: john@arbash-meinel.com-20081210222654-7sem2ud7397cd8vg
Add resize() functionality to the FIFO Cache.

Show diffs side-by-side

added added

removed removed

Lines of Context:
73
73
        if len(self) > self._max_cache:
74
74
            self.cleanup()
75
75
 
 
76
    def cache_size(self):
 
77
        """Get the number of entries we will cache."""
 
78
        return self._max_cache
 
79
 
76
80
    def cleanup(self):
77
81
        """Clear the cache until it shrinks to the requested size.
78
82
 
108
112
        key = self._queue.popleft()
109
113
        self._remove(key)
110
114
 
 
115
    def resize(self, max_cache, after_cleanup_count=None):
 
116
        """Increase/decrease the number of cached entries.
 
117
 
 
118
        :param max_cache: The maximum number of entries to cache.
 
119
        :param after_cleanup_count: After cleanup, we should have at most this
 
120
            many entries. This defaults to 80% of max_cache.
 
121
        """
 
122
        self._max_cache = max_cache
 
123
        if after_cleanup_count is None:
 
124
            self._after_cleanup_count = max_cache * 8 / 10
 
125
        else:
 
126
            self._after_cleanup_count = min(max_cache, after_cleanup_count)
 
127
        if len(self) > self._max_cache:
 
128
            self.cleanup()
 
129
 
111
130
    # raise NotImplementedError on dict functions that would mutate the cache
112
131
    # which have not been properly implemented yet.
113
132
    def copy(self):
211
230
            # Time to cleanup
212
231
            self.cleanup()
213
232
 
 
233
    def cache_size(self):
 
234
        """Get the number of bytes we will cache."""
 
235
        return self._max_size
 
236
 
214
237
    def cleanup(self):
215
238
        """Clear the cache until it shrinks to the requested size.
216
239
 
226
249
        val = FIFOCache._remove(self, key)
227
250
        self._value_size -= self._compute_size(val)
228
251
        return val
 
252
 
 
253
    def resize(self, max_size, after_cleanup_size=None):
 
254
        """Increase/decrease the amount of cached data.
 
255
 
 
256
        :param max_size: The maximum number of bytes to cache.
 
257
        :param after_cleanup_size: After cleanup, we should have at most this
 
258
            many bytes cached. This defaults to 80% of max_size.
 
259
        """
 
260
        FIFOCache.resize(self, max_size)
 
261
        self._max_size = max_size
 
262
        if after_cleanup_size is None:
 
263
            self._after_cleanup_size = max_size * 8 / 10
 
264
        else:
 
265
            self._after_cleanup_size = min(max_size, after_cleanup_size)
 
266
        if self._value_size > self._max_size:
 
267
            self.cleanup()
 
268