Version 1.1.1 is possibly not working for old keys? (need confirmation) #183

Description

@vantheshark

Hi,

We've updated from 0.8.0 to 1.1.1 and found many issues, unfortunately on our Production >.<
CacheManager.Core
CacheManager.StackExchange.Redis

"# Server
redis_version:3.0.7
redis_build_id:f7cfd70bacad9a98
redis_mode:cluster
os:Linux 3.10.0-327.13.1.el7.x86_64 x86_64
gcc_version:4.8.5

1/ There are suddenly a lot of errors: Update failed on ':' because of too many retries. There are many old key created by previous version but when running with the version 1.1.1, the problem seems to start to occur and the old key staying there undeleted/unexpired.

More info
The hashvalue of the key (probably created by the old version)
HasValue

The code that read the key probably check the expiration mode incorrectly, please confirm
Code version 1.1.1

When comparing the version, it's getting obvious that my theory is correct 😠

Breaking change

usesDefaultExpiration is true in this case however, the expirationMode was sliding as created by the old version. I think the cacheItem creation should use the existing expirationMode unless it's "None" and usesDefaultExpiration == true.

// Current codevarcacheItem=usesDefaultExpiration?string.IsNullOrWhiteSpace(region)?newCacheItem<TCacheValue>(key,value):newCacheItem<TCacheValue>(key,region,value):string.IsNullOrWhiteSpace(region)?newCacheItem<TCacheValue>(key,value,expirationMode,expirationTimeout):newCacheItem<TCacheValue>(key,region,value,expirationMode,expirationTimeout);

Finally, i saw the code EvictFromOtherHandles if the version is conflicted but for some reasons the key is not deleted from the other Handle.

2/ OutOfMemoryException thrown From BackplaneMessage.ReadBytes

OutOfMemoryException

And it came from here
DeserializeMessage

I tried to debug but I'm not really familiar with the code so it might be better for the author to have a look.

Rollback to 0.8.0 and the problem gone.
Thanks

Metadata

Metadata

Assignees

Labels

No labels
No labels

Type

No type

Projects

No projects

    Milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions

    , 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
     blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
    }
    } catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
    })();
    (function(){
    try {
    var __m = "github.com";
    var __re = new RegExp('^' + "github\\.com" + '
    
    Skip to content

    Version 1.1.1 is possibly not working for old keys? (need confirmation) #183

    Description

    @vantheshark

    Hi,

    We've updated from 0.8.0 to 1.1.1 and found many issues, unfortunately on our Production >.<
    CacheManager.Core
    CacheManager.StackExchange.Redis

    "# Server
    redis_version:3.0.7
    redis_build_id:f7cfd70bacad9a98
    redis_mode:cluster
    os:Linux 3.10.0-327.13.1.el7.x86_64 x86_64
    gcc_version:4.8.5
    

    1/ There are suddenly a lot of errors: Update failed on ':' because of too many retries. There are many old key created by previous version but when running with the version 1.1.1, the problem seems to start to occur and the old key staying there undeleted/unexpired.

    More info
    The hashvalue of the key (probably created by the old version)
    HasValue

    The code that read the key probably check the expiration mode incorrectly, please confirm
    Code version 1.1.1

    When comparing the version, it's getting obvious that my theory is correct 😠

    Breaking change

    usesDefaultExpiration is true in this case however, the expirationMode was sliding as created by the old version. I think the cacheItem creation should use the existing expirationMode unless it's "None" and usesDefaultExpiration == true.

    // Current codevarcacheItem=usesDefaultExpiration?string.IsNullOrWhiteSpace(region)?newCacheItem<TCacheValue>(key,value):newCacheItem<TCacheValue>(key,region,value):string.IsNullOrWhiteSpace(region)?newCacheItem<TCacheValue>(key,value,expirationMode,expirationTimeout):newCacheItem<TCacheValue>(key,region,value,expirationMode,expirationTimeout);

    Finally, i saw the code EvictFromOtherHandles if the version is conflicted but for some reasons the key is not deleted from the other Handle.

    2/ OutOfMemoryException thrown From BackplaneMessage.ReadBytes

    OutOfMemoryException

    And it came from here
    DeserializeMessage

    I tried to debug but I'm not really familiar with the code so it might be better for the author to have a look.

    Rollback to 0.8.0 and the problem gone.
    Thanks

    Metadata

    Metadata

    Assignees

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions

      , 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
      Skip to content

      Version 1.1.1 is possibly not working for old keys? (need confirmation) #183

      Description

      @vantheshark

      Hi,

      We've updated from 0.8.0 to 1.1.1 and found many issues, unfortunately on our Production >.<
      CacheManager.Core
      CacheManager.StackExchange.Redis

      "# Server
      redis_version:3.0.7
      redis_build_id:f7cfd70bacad9a98
      redis_mode:cluster
      os:Linux 3.10.0-327.13.1.el7.x86_64 x86_64
      gcc_version:4.8.5
      

      1/ There are suddenly a lot of errors: Update failed on ':' because of too many retries. There are many old key created by previous version but when running with the version 1.1.1, the problem seems to start to occur and the old key staying there undeleted/unexpired.

      More info
      The hashvalue of the key (probably created by the old version)
      HasValue

      The code that read the key probably check the expiration mode incorrectly, please confirm
      Code version 1.1.1

      When comparing the version, it's getting obvious that my theory is correct 😠

      Breaking change

      usesDefaultExpiration is true in this case however, the expirationMode was sliding as created by the old version. I think the cacheItem creation should use the existing expirationMode unless it's "None" and usesDefaultExpiration == true.

      // Current codevarcacheItem=usesDefaultExpiration?string.IsNullOrWhiteSpace(region)?newCacheItem<TCacheValue>(key,value):newCacheItem<TCacheValue>(key,region,value):string.IsNullOrWhiteSpace(region)?newCacheItem<TCacheValue>(key,value,expirationMode,expirationTimeout):newCacheItem<TCacheValue>(key,region,value,expirationMode,expirationTimeout);

      Finally, i saw the code EvictFromOtherHandles if the version is conflicted but for some reasons the key is not deleted from the other Handle.

      2/ OutOfMemoryException thrown From BackplaneMessage.ReadBytes

      OutOfMemoryException

      And it came from here
      DeserializeMessage

      I tried to debug but I'm not really familiar with the code so it might be better for the author to have a look.

      Rollback to 0.8.0 and the problem gone.
      Thanks

      Metadata

      Metadata

      Assignees

      Labels

      No labels
      No labels

      Type

      No type

      Projects

      No projects

        Milestone

        Relationships

        None yet

        Development

        No branches or pull requests

        Issue actions

        , 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
        Skip to content

        Version 1.1.1 is possibly not working for old keys? (need confirmation) #183

        Description

        @vantheshark

        Hi,

        We've updated from 0.8.0 to 1.1.1 and found many issues, unfortunately on our Production >.<
        CacheManager.Core
        CacheManager.StackExchange.Redis

        "# Server
        redis_version:3.0.7
        redis_build_id:f7cfd70bacad9a98
        redis_mode:cluster
        os:Linux 3.10.0-327.13.1.el7.x86_64 x86_64
        gcc_version:4.8.5
        

        1/ There are suddenly a lot of errors: Update failed on ':' because of too many retries. There are many old key created by previous version but when running with the version 1.1.1, the problem seems to start to occur and the old key staying there undeleted/unexpired.

        More info
        The hashvalue of the key (probably created by the old version)
        HasValue

        The code that read the key probably check the expiration mode incorrectly, please confirm
        Code version 1.1.1

        When comparing the version, it's getting obvious that my theory is correct 😠

        Breaking change

        usesDefaultExpiration is true in this case however, the expirationMode was sliding as created by the old version. I think the cacheItem creation should use the existing expirationMode unless it's "None" and usesDefaultExpiration == true.

        // Current codevarcacheItem=usesDefaultExpiration?string.IsNullOrWhiteSpace(region)?newCacheItem<TCacheValue>(key,value):newCacheItem<TCacheValue>(key,region,value):string.IsNullOrWhiteSpace(region)?newCacheItem<TCacheValue>(key,value,expirationMode,expirationTimeout):newCacheItem<TCacheValue>(key,region,value,expirationMode,expirationTimeout);

        Finally, i saw the code EvictFromOtherHandles if the version is conflicted but for some reasons the key is not deleted from the other Handle.

        2/ OutOfMemoryException thrown From BackplaneMessage.ReadBytes

        OutOfMemoryException

        And it came from here
        DeserializeMessage

        I tried to debug but I'm not really familiar with the code so it might be better for the author to have a look.

        Rollback to 0.8.0 and the problem gone.
        Thanks

        Metadata

        Metadata

        Assignees

        Labels

        No labels
        No labels

        Type

        No type

        Projects

        No projects

          Milestone

          Relationships

          None yet

          Development

          No branches or pull requests

          Issue actions

          , 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
          Skip to content

          Version 1.1.1 is possibly not working for old keys? (need confirmation) #183

          Description

          @vantheshark

          Hi,

          We've updated from 0.8.0 to 1.1.1 and found many issues, unfortunately on our Production >.<
          CacheManager.Core
          CacheManager.StackExchange.Redis

          "# Server
          redis_version:3.0.7
          redis_build_id:f7cfd70bacad9a98
          redis_mode:cluster
          os:Linux 3.10.0-327.13.1.el7.x86_64 x86_64
          gcc_version:4.8.5
          

          1/ There are suddenly a lot of errors: Update failed on ':' because of too many retries. There are many old key created by previous version but when running with the version 1.1.1, the problem seems to start to occur and the old key staying there undeleted/unexpired.

          More info
          The hashvalue of the key (probably created by the old version)
          HasValue

          The code that read the key probably check the expiration mode incorrectly, please confirm
          Code version 1.1.1

          When comparing the version, it's getting obvious that my theory is correct 😠

          Breaking change

          usesDefaultExpiration is true in this case however, the expirationMode was sliding as created by the old version. I think the cacheItem creation should use the existing expirationMode unless it's "None" and usesDefaultExpiration == true.

          // Current codevarcacheItem=usesDefaultExpiration?string.IsNullOrWhiteSpace(region)?newCacheItem<TCacheValue>(key,value):newCacheItem<TCacheValue>(key,region,value):string.IsNullOrWhiteSpace(region)?newCacheItem<TCacheValue>(key,value,expirationMode,expirationTimeout):newCacheItem<TCacheValue>(key,region,value,expirationMode,expirationTimeout);

          Finally, i saw the code EvictFromOtherHandles if the version is conflicted but for some reasons the key is not deleted from the other Handle.

          2/ OutOfMemoryException thrown From BackplaneMessage.ReadBytes

          OutOfMemoryException

          And it came from here
          DeserializeMessage

          I tried to debug but I'm not really familiar with the code so it might be better for the author to have a look.

          Rollback to 0.8.0 and the problem gone.
          Thanks

          Metadata

          Metadata

          Assignees

          Labels

          No labels
          No labels

          Type

          No type

          Projects

          No projects

            Milestone

            Relationships

            None yet

            Development

            No branches or pull requests

            Issue actions

            , 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
            Skip to content

            Version 1.1.1 is possibly not working for old keys? (need confirmation) #183

            Description

            @vantheshark

            Hi,

            We've updated from 0.8.0 to 1.1.1 and found many issues, unfortunately on our Production >.<
            CacheManager.Core
            CacheManager.StackExchange.Redis

            "# Server
            redis_version:3.0.7
            redis_build_id:f7cfd70bacad9a98
            redis_mode:cluster
            os:Linux 3.10.0-327.13.1.el7.x86_64 x86_64
            gcc_version:4.8.5
            

            1/ There are suddenly a lot of errors: Update failed on ':' because of too many retries. There are many old key created by previous version but when running with the version 1.1.1, the problem seems to start to occur and the old key staying there undeleted/unexpired.

            More info
            The hashvalue of the key (probably created by the old version)
            HasValue

            The code that read the key probably check the expiration mode incorrectly, please confirm
            Code version 1.1.1

            When comparing the version, it's getting obvious that my theory is correct 😠

            Breaking change

            usesDefaultExpiration is true in this case however, the expirationMode was sliding as created by the old version. I think the cacheItem creation should use the existing expirationMode unless it's "None" and usesDefaultExpiration == true.

            // Current codevarcacheItem=usesDefaultExpiration?string.IsNullOrWhiteSpace(region)?newCacheItem<TCacheValue>(key,value):newCacheItem<TCacheValue>(key,region,value):string.IsNullOrWhiteSpace(region)?newCacheItem<TCacheValue>(key,value,expirationMode,expirationTimeout):newCacheItem<TCacheValue>(key,region,value,expirationMode,expirationTimeout);

            Finally, i saw the code EvictFromOtherHandles if the version is conflicted but for some reasons the key is not deleted from the other Handle.

            2/ OutOfMemoryException thrown From BackplaneMessage.ReadBytes

            OutOfMemoryException

            And it came from here
            DeserializeMessage

            I tried to debug but I'm not really familiar with the code so it might be better for the author to have a look.

            Rollback to 0.8.0 and the problem gone.
            Thanks

            Metadata

            Metadata

            Assignees

            Labels

            No labels
            No labels

            Type

            No type

            Projects

            No projects

              Milestone

              Relationships

              None yet

              Development

              No branches or pull requests

              Issue actions

              , 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
              Skip to content

              Version 1.1.1 is possibly not working for old keys? (need confirmation) #183

              Description

              @vantheshark

              Hi,

              We've updated from 0.8.0 to 1.1.1 and found many issues, unfortunately on our Production >.<
              CacheManager.Core
              CacheManager.StackExchange.Redis

              "# Server
              redis_version:3.0.7
              redis_build_id:f7cfd70bacad9a98
              redis_mode:cluster
              os:Linux 3.10.0-327.13.1.el7.x86_64 x86_64
              gcc_version:4.8.5
              

              1/ There are suddenly a lot of errors: Update failed on ':' because of too many retries. There are many old key created by previous version but when running with the version 1.1.1, the problem seems to start to occur and the old key staying there undeleted/unexpired.

              More info
              The hashvalue of the key (probably created by the old version)
              HasValue

              The code that read the key probably check the expiration mode incorrectly, please confirm
              Code version 1.1.1

              When comparing the version, it's getting obvious that my theory is correct 😠

              Breaking change

              usesDefaultExpiration is true in this case however, the expirationMode was sliding as created by the old version. I think the cacheItem creation should use the existing expirationMode unless it's "None" and usesDefaultExpiration == true.

              // Current codevarcacheItem=usesDefaultExpiration?string.IsNullOrWhiteSpace(region)?newCacheItem<TCacheValue>(key,value):newCacheItem<TCacheValue>(key,region,value):string.IsNullOrWhiteSpace(region)?newCacheItem<TCacheValue>(key,value,expirationMode,expirationTimeout):newCacheItem<TCacheValue>(key,region,value,expirationMode,expirationTimeout);

              Finally, i saw the code EvictFromOtherHandles if the version is conflicted but for some reasons the key is not deleted from the other Handle.

              2/ OutOfMemoryException thrown From BackplaneMessage.ReadBytes

              OutOfMemoryException

              And it came from here
              DeserializeMessage

              I tried to debug but I'm not really familiar with the code so it might be better for the author to have a look.

              Rollback to 0.8.0 and the problem gone.
              Thanks

              Metadata

              Metadata

              Assignees

              Labels

              No labels
              No labels

              Type

              No type

              Projects

              No projects

                Milestone

                Relationships

                None yet

                Development

                No branches or pull requests

                Issue actions

                , 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
                Skip to content

                Version 1.1.1 is possibly not working for old keys? (need confirmation) #183

                Description

                @vantheshark

                Hi,

                We've updated from 0.8.0 to 1.1.1 and found many issues, unfortunately on our Production >.<
                CacheManager.Core
                CacheManager.StackExchange.Redis

                "# Server
                redis_version:3.0.7
                redis_build_id:f7cfd70bacad9a98
                redis_mode:cluster
                os:Linux 3.10.0-327.13.1.el7.x86_64 x86_64
                gcc_version:4.8.5
                

                1/ There are suddenly a lot of errors: Update failed on ':' because of too many retries. There are many old key created by previous version but when running with the version 1.1.1, the problem seems to start to occur and the old key staying there undeleted/unexpired.

                More info
                The hashvalue of the key (probably created by the old version)
                HasValue

                The code that read the key probably check the expiration mode incorrectly, please confirm
                Code version 1.1.1

                When comparing the version, it's getting obvious that my theory is correct 😠

                Breaking change

                usesDefaultExpiration is true in this case however, the expirationMode was sliding as created by the old version. I think the cacheItem creation should use the existing expirationMode unless it's "None" and usesDefaultExpiration == true.

                // Current codevarcacheItem=usesDefaultExpiration?string.IsNullOrWhiteSpace(region)?newCacheItem<TCacheValue>(key,value):newCacheItem<TCacheValue>(key,region,value):string.IsNullOrWhiteSpace(region)?newCacheItem<TCacheValue>(key,value,expirationMode,expirationTimeout):newCacheItem<TCacheValue>(key,region,value,expirationMode,expirationTimeout);

                Finally, i saw the code EvictFromOtherHandles if the version is conflicted but for some reasons the key is not deleted from the other Handle.

                2/ OutOfMemoryException thrown From BackplaneMessage.ReadBytes

                OutOfMemoryException

                And it came from here
                DeserializeMessage

                I tried to debug but I'm not really familiar with the code so it might be better for the author to have a look.

                Rollback to 0.8.0 and the problem gone.
                Thanks

                Metadata

                Metadata

                Assignees

                Labels

                No labels
                No labels

                Type

                No type

                Projects

                No projects

                  Milestone

                  Relationships

                  None yet

                  Development

                  No branches or pull requests

                  Issue actions