Ticket #15825: patch_for_15825.diff

File patch_for_15825.diff, 2.7 KB (added by desh, 4 years ago)

Initial patch against trunk (r16347)

  • django/core/cache/backends/filebased.py

    diff --git a/django/core/cache/backends/filebased.py b/django/core/cache/backends/filebased.py
    index 57bb63e..9cbd8b0 100644
    a b import hashlib 
    44import os
    55import shutil
    66import time
     7import random
    78try:
    89    import cPickle as pickle
    910except ImportError:
    class FileBasedCache(BaseCache): 
    113114            return
    114115
    115116        try:
    116             filelist = sorted(os.listdir(self._dir))
     117            filelist = os.listdir(self._dir)
    117118        except (IOError, OSError):
    118119            return
    119120
    120121        if self._cull_frequency == 0:
    121             doomed = filelist
    122         else:
    123             doomed = [os.path.join(self._dir, k) for (i, k) in enumerate(filelist) if i % self._cull_frequency == 0]
     122            self.clear()
     123            return
     124
     125        ranno = random.randint(0, self._cull_frequency)
     126        doomed = [
     127            os.path.join(self._dir, k)
     128            for (i, k) in enumerate(filelist)
     129            if i % self._cull_frequency == ranno]
    124130
    125131        for topdir in doomed:
    126132            try:
    127                 for root, _, files in os.walk(topdir):
    128                     for f in files:
    129                         self._delete(os.path.join(root, f))
     133                shutil.rmtree(topdir)
    130134            except (IOError, OSError):
    131135                pass
    132136
  • tests/regressiontests/cache/tests.py

    diff --git a/tests/regressiontests/cache/tests.py b/tests/regressiontests/cache/tests.py
    index c5349d5..fd9d7c8 100644
    a b class BaseCacheTests(object): 
    414414        number of entries will vary between backends"""
    415415        # Create initial cache key entries. This will overflow the cache, causing a cull
    416416        for i in range(1, initial_count):
    417             self.cache.set('cull%d' % i, 'value', 1000)
     417            self.cache.set('cull-%d' % i, 'value', 1000)
    418418        count = 0
    419419        # Count how many keys are left in the cache.
    420420        for i in range(1, initial_count):
    421             if self.cache.has_key('cull%d' % i):
     421            if self.cache.has_key('cull-%d' % i):
    422422                count = count + 1
    423423        self.assertEqual(count, final_count)
    424424
    class FileBasedCacheTests(unittest.TestCase, BaseCacheTests): 
    880880        self.assertTrue(not os.path.exists(os.path.dirname(os.path.dirname(keypath))))
    881881
    882882    def test_cull(self):
    883         self.perform_cull_test(50, 29)
     883        self.perform_cull_test(35, 24)
    884884
    885885    def test_old_initialization(self):
    886886        self.cache = get_cache('file://%s?max_entries=30' % self.dirname)
    887         self.perform_cull_test(50, 29)
     887        self.perform_cull_test(35, 24)
    888888
    889889class CustomCacheKeyValidationTests(unittest.TestCase):
    890890    """
Back to Top