Skip to content

Caching: migrate HybridCache api surface from asp.net into runtime - #103103

Merged
jozkee merged 13 commits into
dotnet:mainfrom
mgravell:marc/HybridCache
Jul 22, 2024
Merged

Caching: migrate HybridCache api surface from asp.net into runtime#103103
jozkee merged 13 commits into
dotnet:mainfrom
mgravell:marc/HybridCache

Conversation

@mgravell

Copy link
Copy Markdown
Contributor

This is a draft implementation of #100290

@ghost

ghost commented Jun 5, 2024

Copy link
Copy Markdown

Note regarding the new-api-needs-documentation label:

This serves as a reminder for when your PR is modifying a ref *.cs file and adding/modifying public APIs, please make sure the API implementation in the src *.cs file is documented with triple slash comments, so the PR reviewers can sign off that change.

1 similar comment
@ghost

ghost commented Jun 5, 2024

Copy link
Copy Markdown

Note regarding the new-api-needs-documentation label:

This serves as a reminder for when your PR is modifying a ref *.cs file and adding/modifying public APIs, please make sure the API implementation in the src *.cs file is documented with triple slash comments, so the PR reviewers can sign off that change.

@dotnet-policy-service

Copy link
Copy Markdown
Contributor

Tagging subscribers to this area: @dotnet/area-extensions-caching
See info in area-owners.md if you want to be subscribed.

@Tornhoof

Copy link
Copy Markdown
Contributor

With all the nifty allows ref struct stuff, we still don't get non-string keys do we?

@mgravell

mgravell commented Jun 6, 2024

Copy link
Copy Markdown
ContributorAuthor

To offer non-string keys, we'd need the API to take a object key and a Func<object, string> keyFormatter (or a TKey key, but note that since IMemoryCache uses object key, this would box immediately). Not impossible, but makes things quite a bit more complex for the caller. A suitable TKey/TValue L1 exists in a proposal, but has not made it past that (aka RCache).

@mgravell

Copy link
Copy Markdown
ContributorAuthor

/azp run

@azure-pipelines

Copy link
Copy Markdown
You have several pipelines (over 10) configured to build pull requests in this repository. Specify which pipelines you would like to run by using /azp run [pipelines] command. You can specify multiple pipelines using a comma separated list.

@mgravell

mgravell commented Jul 10, 2024

Copy link
Copy Markdown
ContributorAuthor

test fail seemingly unrelated:

eng/testing/linker/trimmingTests.targets(168,5): error : (NETCORE_ENGINEERING_TELEMETRY=Build) Error: [Failed Test]: /Users/runner/work/1/s/src/libraries/System.Net.Http/tests/TrimmingTests/HttpClientTest.cs. The Command /Users/runner/work/1/s/artifacts/bin/trimmingTests/projects/System.Net.Http.TrimmingTests/HttpClientTest/osx-x64/bin/Release/net9.0/osx-x64/publish/project return a non-success exit code 134.

will retry, and if that doesn't help: try a main merge and rebase

@mgravell

mgravell commented Jul 10, 2024

Copy link
Copy Markdown
ContributorAuthor

(after rebase) shakes fist at CI:

.packages/microsoft.dotnet.helix.sdk/9.0.0-beta.24327.1/tools/Microsoft.DotNet.Helix.Sdk.MultiQueue.targets(91,5): error : (NETCORE_ENGINEERING_TELEMETRY=Test) Work item System.Net.HttpListener.Tests in job 340936c4-63c1-4bac-b738-99505bee54ff has failed.

@jozkeejozkee left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Could you please include tests.

mgravelland others added 3 commits July 16, 2024 15:00
…brid/HybridCache.cs
Co-authored-by: David Cantú <dacantu@microsoft.com>
…brid/HybridCache.cs
Co-authored-by: David Cantú <dacantu@microsoft.com>
…brid/HybridCache.cs
Co-authored-by: David Cantú <dacantu@microsoft.com>
/// <param name="cancellationToken">The <see cref="CancellationToken"/> used to propagate notifications that the operation should be canceled.</param>
/// <returns>The data, either from cache or the underlying data service.</returns>
[System.Diagnostics.CodeAnalysis.SuppressMessage("ApiDesign", "RS0026:Do not add multiple public overloads with optional parameters", Justification = "Delegate differences make this unambiguous")]
public abstract ValueTask<T> GetOrCreateAsync<TState, T>(string key, TState state, Func<TState, CancellationToken, ValueTask<T>> factory,

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Should the order of TState / T be changed so that in all overloads the T is first?

{
// for the simple usage scenario (no TState), pack the original callback as the "state", and use a wrapper function that just unrolls and invokes from the state
public static readonly Func<Func<CancellationToken, ValueTask<T>>, CancellationToken, ValueTask<T>> Instance = static (callback, ct) => callback(ct);
}

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Is this actually necessary? I seem to remember the C# compiler folding identical lambdas into the same method definition (but maybe I'm misremembering?)

await @this.RemoveAsync(key, cancellationToken).ConfigureAwait(false);
}
}
}

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Any tests to add in this repo for the functionality that's here?

@mgravell

mgravell commented Jul 22, 2024

Copy link
Copy Markdown
ContributorAuthor

woohoo!

does anyone in runtime (@stephentoub perhaps) have insight into the CI failure? this doesn't occur locally:

./build.cmd clr+libs -rc Release
...blah
Build succeeded.
0 Warning(s)
0 Error(s)

CI failure:

azure-pipelines
/ runtime (Build windows-x86 release CoreCLR_Libraries)
.dotnet\sdk\9.0.100-preview.5.24307.3\NuGet.RestoreEx.targets#L19
.dotnet\sdk\9.0.100-preview.5.24307.3\NuGet.RestoreEx.targets(19,5): error : (NETCORE_ENGINEERING_TELEMETRY=Restore)
Static graph-based restore failed with exit code '1' but did not log an error.

mgravelland others added 3 commits July 22, 2024 16:44
…brid/IHybridCacheSerializer.cs
Co-authored-by: Stephen Toub <stoub@microsoft.com>
…brid/HybridCacheEntryOptions.cs
Co-authored-by: Stephen Toub <stoub@microsoft.com>
…brid/HybridCacheEntryOptions.cs
Co-authored-by: Stephen Toub <stoub@microsoft.com>
@stephentoub

Copy link
Copy Markdown
Member

does anyone in runtime (@stephentoub perhaps) have insight into the CI failure?

Do you have a link to the failure information?

@mgravell

Copy link
Copy Markdown
ContributorAuthor

does anyone in runtime (@stephentoub perhaps) have insight into the CI failure?

Do you have a link to the failure information?

most of the red crosses above; example: https://github.com/dotnet/runtime/runs/27757293802

@stephentoub

Copy link
Copy Markdown
Member

I'd rack it up to infrastructure hiccups unless it happens again in this next run.

Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants

@mgravell@Tornhoof@stephentoub@jozkee
, 'i'); if (__m === '*' || __re.test(location.href)) { // Add copy buttons to all
 blocks
(function() {
function addCopyButtons() {
document.querySelectorAll('pre code').forEach(function(codeBlock) {
if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;
codeBlock.parentElement.setAttribute('data-copy-added', 'true');
var btn = document.createElement('button');
btn.textContent = 'Copy';
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;';
btn.onmouseover = function() { this.style.opacity = '1'; };
btn.onmouseout = function() { this.style.opacity = '0.7'; };
btn.onclick = function() {
navigator.clipboard.writeText(codeBlock.textContent).then(function() {
btn.textContent = 'Copied!';
setTimeout(function() { btn.textContent = 'Copy'; }, 1500);
});
};
codeBlock.parentElement.style.position = 'relative';
codeBlock.parentElement.appendChild(btn);
});
}
addCopyButtons();
// Re-run on dynamic content
var observer = new MutationObserver(addCopyButtons);
observer.observe(document.body, { childList: true, subtree: true });
})();
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Caching: migrate HybridCache api surface from asp.net into runtime by mgravell · Pull Request #103103 · dotnet/runtime · GitHub
Skip to content

Caching: migrate HybridCache api surface from asp.net into runtime - #103103

Merged
jozkee merged 13 commits into
dotnet:mainfrom
mgravell:marc/HybridCache
Jul 22, 2024
Merged

Caching: migrate HybridCache api surface from asp.net into runtime#103103
jozkee merged 13 commits into
dotnet:mainfrom
mgravell:marc/HybridCache

Conversation

@mgravell

Copy link
Copy Markdown
Contributor

This is a draft implementation of #100290

@ghost

ghost commented Jun 5, 2024

Copy link
Copy Markdown

Note regarding the new-api-needs-documentation label:

This serves as a reminder for when your PR is modifying a ref *.cs file and adding/modifying public APIs, please make sure the API implementation in the src *.cs file is documented with triple slash comments, so the PR reviewers can sign off that change.

1 similar comment
@ghost

ghost commented Jun 5, 2024

Copy link
Copy Markdown

Note regarding the new-api-needs-documentation label:

This serves as a reminder for when your PR is modifying a ref *.cs file and adding/modifying public APIs, please make sure the API implementation in the src *.cs file is documented with triple slash comments, so the PR reviewers can sign off that change.

@dotnet-policy-service

Copy link
Copy Markdown
Contributor

Tagging subscribers to this area: @dotnet/area-extensions-caching
See info in area-owners.md if you want to be subscribed.

@Tornhoof

Copy link
Copy Markdown
Contributor

With all the nifty allows ref struct stuff, we still don't get non-string keys do we?

@mgravell

mgravell commented Jun 6, 2024

Copy link
Copy Markdown
ContributorAuthor

To offer non-string keys, we'd need the API to take a object key and a Func<object, string> keyFormatter (or a TKey key, but note that since IMemoryCache uses object key, this would box immediately). Not impossible, but makes things quite a bit more complex for the caller. A suitable TKey/TValue L1 exists in a proposal, but has not made it past that (aka RCache).

@mgravell

Copy link
Copy Markdown
ContributorAuthor

/azp run

@azure-pipelines

Copy link
Copy Markdown
You have several pipelines (over 10) configured to build pull requests in this repository. Specify which pipelines you would like to run by using /azp run [pipelines] command. You can specify multiple pipelines using a comma separated list.

@mgravell

mgravell commented Jul 10, 2024

Copy link
Copy Markdown
ContributorAuthor

test fail seemingly unrelated:

eng/testing/linker/trimmingTests.targets(168,5): error : (NETCORE_ENGINEERING_TELEMETRY=Build) Error: [Failed Test]: /Users/runner/work/1/s/src/libraries/System.Net.Http/tests/TrimmingTests/HttpClientTest.cs. The Command /Users/runner/work/1/s/artifacts/bin/trimmingTests/projects/System.Net.Http.TrimmingTests/HttpClientTest/osx-x64/bin/Release/net9.0/osx-x64/publish/project return a non-success exit code 134.

will retry, and if that doesn't help: try a main merge and rebase

@mgravell

mgravell commented Jul 10, 2024

Copy link
Copy Markdown
ContributorAuthor

(after rebase) shakes fist at CI:

.packages/microsoft.dotnet.helix.sdk/9.0.0-beta.24327.1/tools/Microsoft.DotNet.Helix.Sdk.MultiQueue.targets(91,5): error : (NETCORE_ENGINEERING_TELEMETRY=Test) Work item System.Net.HttpListener.Tests in job 340936c4-63c1-4bac-b738-99505bee54ff has failed.

@jozkeejozkee left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Could you please include tests.

mgravelland others added 3 commits July 16, 2024 15:00
…brid/HybridCache.cs
Co-authored-by: David Cantú <dacantu@microsoft.com>
…brid/HybridCache.cs
Co-authored-by: David Cantú <dacantu@microsoft.com>
…brid/HybridCache.cs
Co-authored-by: David Cantú <dacantu@microsoft.com>
/// <param name="cancellationToken">The <see cref="CancellationToken"/> used to propagate notifications that the operation should be canceled.</param>
/// <returns>The data, either from cache or the underlying data service.</returns>
[System.Diagnostics.CodeAnalysis.SuppressMessage("ApiDesign", "RS0026:Do not add multiple public overloads with optional parameters", Justification = "Delegate differences make this unambiguous")]
public abstract ValueTask<T> GetOrCreateAsync<TState, T>(string key, TState state, Func<TState, CancellationToken, ValueTask<T>> factory,

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Should the order of TState / T be changed so that in all overloads the T is first?

{
// for the simple usage scenario (no TState), pack the original callback as the "state", and use a wrapper function that just unrolls and invokes from the state
public static readonly Func<Func<CancellationToken, ValueTask<T>>, CancellationToken, ValueTask<T>> Instance = static (callback, ct) => callback(ct);
}

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Is this actually necessary? I seem to remember the C# compiler folding identical lambdas into the same method definition (but maybe I'm misremembering?)

await @this.RemoveAsync(key, cancellationToken).ConfigureAwait(false);
}
}
}

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Any tests to add in this repo for the functionality that's here?

@mgravell

mgravell commented Jul 22, 2024

Copy link
Copy Markdown
ContributorAuthor

woohoo!

does anyone in runtime (@stephentoub perhaps) have insight into the CI failure? this doesn't occur locally:

./build.cmd clr+libs -rc Release
...blah
Build succeeded.
0 Warning(s)
0 Error(s)

CI failure:

azure-pipelines
/ runtime (Build windows-x86 release CoreCLR_Libraries)
.dotnet\sdk\9.0.100-preview.5.24307.3\NuGet.RestoreEx.targets#L19
.dotnet\sdk\9.0.100-preview.5.24307.3\NuGet.RestoreEx.targets(19,5): error : (NETCORE_ENGINEERING_TELEMETRY=Restore)
Static graph-based restore failed with exit code '1' but did not log an error.

mgravelland others added 3 commits July 22, 2024 16:44
…brid/IHybridCacheSerializer.cs
Co-authored-by: Stephen Toub <stoub@microsoft.com>
…brid/HybridCacheEntryOptions.cs
Co-authored-by: Stephen Toub <stoub@microsoft.com>
…brid/HybridCacheEntryOptions.cs
Co-authored-by: Stephen Toub <stoub@microsoft.com>
@stephentoub

Copy link
Copy Markdown
Member

does anyone in runtime (@stephentoub perhaps) have insight into the CI failure?

Do you have a link to the failure information?

@mgravell

Copy link
Copy Markdown
ContributorAuthor

does anyone in runtime (@stephentoub perhaps) have insight into the CI failure?

Do you have a link to the failure information?

most of the red crosses above; example: https://github.com/dotnet/runtime/runs/27757293802

@stephentoub

Copy link
Copy Markdown
Member

I'd rack it up to infrastructure hiccups unless it happens again in this next run.

Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants

@mgravell@Tornhoof@stephentoub@jozkee
, 'i'); if (__m === '*' || __re.test(location.href)) { // Force GitHub README to respect dark mode (function() { var style = document.createElement('style'); style.textContent = ' .markdown-body { color-scheme: dark light; } .markdown-body pre { background: #161b22 !important; } .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; } .markdown-body table th, .markdown-body table td { border-color: #30363d !important; } .markdown-body img { background: #0d1117; } .markdown-body blockquote { border-left-color: #8b949e; } .markdown-body hr { border-color: #30363d; } '; document.head.appendChild(style); })(); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' Caching: migrate HybridCache api surface from asp.net into runtime by mgravell · Pull Request #103103 · dotnet/runtime · GitHub
Skip to content

Caching: migrate HybridCache api surface from asp.net into runtime - #103103

Merged
jozkee merged 13 commits into
dotnet:mainfrom
mgravell:marc/HybridCache
Jul 22, 2024
Merged

Caching: migrate HybridCache api surface from asp.net into runtime#103103
jozkee merged 13 commits into
dotnet:mainfrom
mgravell:marc/HybridCache

Conversation

@mgravell

Copy link
Copy Markdown
Contributor

This is a draft implementation of #100290

@ghost

ghost commented Jun 5, 2024

Copy link
Copy Markdown

Note regarding the new-api-needs-documentation label:

This serves as a reminder for when your PR is modifying a ref *.cs file and adding/modifying public APIs, please make sure the API implementation in the src *.cs file is documented with triple slash comments, so the PR reviewers can sign off that change.

1 similar comment
@ghost

ghost commented Jun 5, 2024

Copy link
Copy Markdown

Note regarding the new-api-needs-documentation label:

This serves as a reminder for when your PR is modifying a ref *.cs file and adding/modifying public APIs, please make sure the API implementation in the src *.cs file is documented with triple slash comments, so the PR reviewers can sign off that change.

@dotnet-policy-service

Copy link
Copy Markdown
Contributor

Tagging subscribers to this area: @dotnet/area-extensions-caching
See info in area-owners.md if you want to be subscribed.

@Tornhoof

Copy link
Copy Markdown
Contributor

With all the nifty allows ref struct stuff, we still don't get non-string keys do we?

@mgravell

mgravell commented Jun 6, 2024

Copy link
Copy Markdown
ContributorAuthor

To offer non-string keys, we'd need the API to take a object key and a Func<object, string> keyFormatter (or a TKey key, but note that since IMemoryCache uses object key, this would box immediately). Not impossible, but makes things quite a bit more complex for the caller. A suitable TKey/TValue L1 exists in a proposal, but has not made it past that (aka RCache).

@mgravell

Copy link
Copy Markdown
ContributorAuthor

/azp run

@azure-pipelines

Copy link
Copy Markdown
You have several pipelines (over 10) configured to build pull requests in this repository. Specify which pipelines you would like to run by using /azp run [pipelines] command. You can specify multiple pipelines using a comma separated list.

@mgravell

mgravell commented Jul 10, 2024

Copy link
Copy Markdown
ContributorAuthor

test fail seemingly unrelated:

eng/testing/linker/trimmingTests.targets(168,5): error : (NETCORE_ENGINEERING_TELEMETRY=Build) Error: [Failed Test]: /Users/runner/work/1/s/src/libraries/System.Net.Http/tests/TrimmingTests/HttpClientTest.cs. The Command /Users/runner/work/1/s/artifacts/bin/trimmingTests/projects/System.Net.Http.TrimmingTests/HttpClientTest/osx-x64/bin/Release/net9.0/osx-x64/publish/project return a non-success exit code 134.

will retry, and if that doesn't help: try a main merge and rebase

@mgravell

mgravell commented Jul 10, 2024

Copy link
Copy Markdown
ContributorAuthor

(after rebase) shakes fist at CI:

.packages/microsoft.dotnet.helix.sdk/9.0.0-beta.24327.1/tools/Microsoft.DotNet.Helix.Sdk.MultiQueue.targets(91,5): error : (NETCORE_ENGINEERING_TELEMETRY=Test) Work item System.Net.HttpListener.Tests in job 340936c4-63c1-4bac-b738-99505bee54ff has failed.

@jozkeejozkee left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Could you please include tests.

mgravelland others added 3 commits July 16, 2024 15:00
…brid/HybridCache.cs
Co-authored-by: David Cantú <dacantu@microsoft.com>
…brid/HybridCache.cs
Co-authored-by: David Cantú <dacantu@microsoft.com>
…brid/HybridCache.cs
Co-authored-by: David Cantú <dacantu@microsoft.com>
/// <param name="cancellationToken">The <see cref="CancellationToken"/> used to propagate notifications that the operation should be canceled.</param>
/// <returns>The data, either from cache or the underlying data service.</returns>
[System.Diagnostics.CodeAnalysis.SuppressMessage("ApiDesign", "RS0026:Do not add multiple public overloads with optional parameters", Justification = "Delegate differences make this unambiguous")]
public abstract ValueTask<T> GetOrCreateAsync<TState, T>(string key, TState state, Func<TState, CancellationToken, ValueTask<T>> factory,

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Should the order of TState / T be changed so that in all overloads the T is first?

{
// for the simple usage scenario (no TState), pack the original callback as the "state", and use a wrapper function that just unrolls and invokes from the state
public static readonly Func<Func<CancellationToken, ValueTask<T>>, CancellationToken, ValueTask<T>> Instance = static (callback, ct) => callback(ct);
}

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Is this actually necessary? I seem to remember the C# compiler folding identical lambdas into the same method definition (but maybe I'm misremembering?)

await @this.RemoveAsync(key, cancellationToken).ConfigureAwait(false);
}
}
}

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Any tests to add in this repo for the functionality that's here?

@mgravell

mgravell commented Jul 22, 2024

Copy link
Copy Markdown
ContributorAuthor

woohoo!

does anyone in runtime (@stephentoub perhaps) have insight into the CI failure? this doesn't occur locally:

./build.cmd clr+libs -rc Release
...blah
Build succeeded.
0 Warning(s)
0 Error(s)

CI failure:

azure-pipelines
/ runtime (Build windows-x86 release CoreCLR_Libraries)
.dotnet\sdk\9.0.100-preview.5.24307.3\NuGet.RestoreEx.targets#L19
.dotnet\sdk\9.0.100-preview.5.24307.3\NuGet.RestoreEx.targets(19,5): error : (NETCORE_ENGINEERING_TELEMETRY=Restore)
Static graph-based restore failed with exit code '1' but did not log an error.

mgravelland others added 3 commits July 22, 2024 16:44
…brid/IHybridCacheSerializer.cs
Co-authored-by: Stephen Toub <stoub@microsoft.com>
…brid/HybridCacheEntryOptions.cs
Co-authored-by: Stephen Toub <stoub@microsoft.com>
…brid/HybridCacheEntryOptions.cs
Co-authored-by: Stephen Toub <stoub@microsoft.com>
@stephentoub

Copy link
Copy Markdown
Member

does anyone in runtime (@stephentoub perhaps) have insight into the CI failure?

Do you have a link to the failure information?

@mgravell

Copy link
Copy Markdown
ContributorAuthor

does anyone in runtime (@stephentoub perhaps) have insight into the CI failure?

Do you have a link to the failure information?

most of the red crosses above; example: https://github.com/dotnet/runtime/runs/27757293802

@stephentoub

Copy link
Copy Markdown
Member

I'd rack it up to infrastructure hiccups unless it happens again in this next run.

Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants

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

Caching: migrate HybridCache api surface from asp.net into runtime - #103103

Merged
jozkee merged 13 commits into
dotnet:mainfrom
mgravell:marc/HybridCache
Jul 22, 2024
Merged

Caching: migrate HybridCache api surface from asp.net into runtime#103103
jozkee merged 13 commits into
dotnet:mainfrom
mgravell:marc/HybridCache

Conversation

@mgravell

Copy link
Copy Markdown
Contributor

This is a draft implementation of #100290

@ghost

ghost commented Jun 5, 2024

Copy link
Copy Markdown

Note regarding the new-api-needs-documentation label:

This serves as a reminder for when your PR is modifying a ref *.cs file and adding/modifying public APIs, please make sure the API implementation in the src *.cs file is documented with triple slash comments, so the PR reviewers can sign off that change.

1 similar comment
@ghost

ghost commented Jun 5, 2024

Copy link
Copy Markdown

Note regarding the new-api-needs-documentation label:

This serves as a reminder for when your PR is modifying a ref *.cs file and adding/modifying public APIs, please make sure the API implementation in the src *.cs file is documented with triple slash comments, so the PR reviewers can sign off that change.

@dotnet-policy-service

Copy link
Copy Markdown
Contributor

Tagging subscribers to this area: @dotnet/area-extensions-caching
See info in area-owners.md if you want to be subscribed.

@Tornhoof

Copy link
Copy Markdown
Contributor

With all the nifty allows ref struct stuff, we still don't get non-string keys do we?

@mgravell

mgravell commented Jun 6, 2024

Copy link
Copy Markdown
ContributorAuthor

To offer non-string keys, we'd need the API to take a object key and a Func<object, string> keyFormatter (or a TKey key, but note that since IMemoryCache uses object key, this would box immediately). Not impossible, but makes things quite a bit more complex for the caller. A suitable TKey/TValue L1 exists in a proposal, but has not made it past that (aka RCache).

@mgravell

Copy link
Copy Markdown
ContributorAuthor

/azp run

@azure-pipelines

Copy link
Copy Markdown
You have several pipelines (over 10) configured to build pull requests in this repository. Specify which pipelines you would like to run by using /azp run [pipelines] command. You can specify multiple pipelines using a comma separated list.

@mgravell

mgravell commented Jul 10, 2024

Copy link
Copy Markdown
ContributorAuthor

test fail seemingly unrelated:

eng/testing/linker/trimmingTests.targets(168,5): error : (NETCORE_ENGINEERING_TELEMETRY=Build) Error: [Failed Test]: /Users/runner/work/1/s/src/libraries/System.Net.Http/tests/TrimmingTests/HttpClientTest.cs. The Command /Users/runner/work/1/s/artifacts/bin/trimmingTests/projects/System.Net.Http.TrimmingTests/HttpClientTest/osx-x64/bin/Release/net9.0/osx-x64/publish/project return a non-success exit code 134.

will retry, and if that doesn't help: try a main merge and rebase

@mgravell

mgravell commented Jul 10, 2024

Copy link
Copy Markdown
ContributorAuthor

(after rebase) shakes fist at CI:

.packages/microsoft.dotnet.helix.sdk/9.0.0-beta.24327.1/tools/Microsoft.DotNet.Helix.Sdk.MultiQueue.targets(91,5): error : (NETCORE_ENGINEERING_TELEMETRY=Test) Work item System.Net.HttpListener.Tests in job 340936c4-63c1-4bac-b738-99505bee54ff has failed.

@jozkeejozkee left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Could you please include tests.

mgravelland others added 3 commits July 16, 2024 15:00
…brid/HybridCache.cs
Co-authored-by: David Cantú <dacantu@microsoft.com>
…brid/HybridCache.cs
Co-authored-by: David Cantú <dacantu@microsoft.com>
…brid/HybridCache.cs
Co-authored-by: David Cantú <dacantu@microsoft.com>
/// <param name="cancellationToken">The <see cref="CancellationToken"/> used to propagate notifications that the operation should be canceled.</param>
/// <returns>The data, either from cache or the underlying data service.</returns>
[System.Diagnostics.CodeAnalysis.SuppressMessage("ApiDesign", "RS0026:Do not add multiple public overloads with optional parameters", Justification = "Delegate differences make this unambiguous")]
public abstract ValueTask<T> GetOrCreateAsync<TState, T>(string key, TState state, Func<TState, CancellationToken, ValueTask<T>> factory,

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Should the order of TState / T be changed so that in all overloads the T is first?

{
// for the simple usage scenario (no TState), pack the original callback as the "state", and use a wrapper function that just unrolls and invokes from the state
public static readonly Func<Func<CancellationToken, ValueTask<T>>, CancellationToken, ValueTask<T>> Instance = static (callback, ct) => callback(ct);
}

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Is this actually necessary? I seem to remember the C# compiler folding identical lambdas into the same method definition (but maybe I'm misremembering?)

await @this.RemoveAsync(key, cancellationToken).ConfigureAwait(false);
}
}
}

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Any tests to add in this repo for the functionality that's here?

@mgravell

mgravell commented Jul 22, 2024

Copy link
Copy Markdown
ContributorAuthor

woohoo!

does anyone in runtime (@stephentoub perhaps) have insight into the CI failure? this doesn't occur locally:

./build.cmd clr+libs -rc Release
...blah
Build succeeded.
0 Warning(s)
0 Error(s)

CI failure:

azure-pipelines
/ runtime (Build windows-x86 release CoreCLR_Libraries)
.dotnet\sdk\9.0.100-preview.5.24307.3\NuGet.RestoreEx.targets#L19
.dotnet\sdk\9.0.100-preview.5.24307.3\NuGet.RestoreEx.targets(19,5): error : (NETCORE_ENGINEERING_TELEMETRY=Restore)
Static graph-based restore failed with exit code '1' but did not log an error.

mgravelland others added 3 commits July 22, 2024 16:44
…brid/IHybridCacheSerializer.cs
Co-authored-by: Stephen Toub <stoub@microsoft.com>
…brid/HybridCacheEntryOptions.cs
Co-authored-by: Stephen Toub <stoub@microsoft.com>
…brid/HybridCacheEntryOptions.cs
Co-authored-by: Stephen Toub <stoub@microsoft.com>
@stephentoub

Copy link
Copy Markdown
Member

does anyone in runtime (@stephentoub perhaps) have insight into the CI failure?

Do you have a link to the failure information?

@mgravell

Copy link
Copy Markdown
ContributorAuthor

does anyone in runtime (@stephentoub perhaps) have insight into the CI failure?

Do you have a link to the failure information?

most of the red crosses above; example: https://github.com/dotnet/runtime/runs/27757293802

@stephentoub

Copy link
Copy Markdown
Member

I'd rack it up to infrastructure hiccups unless it happens again in this next run.

Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants

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

Caching: migrate HybridCache api surface from asp.net into runtime - #103103

Merged
jozkee merged 13 commits into
dotnet:mainfrom
mgravell:marc/HybridCache
Jul 22, 2024
Merged

Caching: migrate HybridCache api surface from asp.net into runtime#103103
jozkee merged 13 commits into
dotnet:mainfrom
mgravell:marc/HybridCache

Conversation

@mgravell

Copy link
Copy Markdown
Contributor

This is a draft implementation of #100290

@ghost

ghost commented Jun 5, 2024

Copy link
Copy Markdown

Note regarding the new-api-needs-documentation label:

This serves as a reminder for when your PR is modifying a ref *.cs file and adding/modifying public APIs, please make sure the API implementation in the src *.cs file is documented with triple slash comments, so the PR reviewers can sign off that change.

1 similar comment
@ghost

ghost commented Jun 5, 2024

Copy link
Copy Markdown

Note regarding the new-api-needs-documentation label:

This serves as a reminder for when your PR is modifying a ref *.cs file and adding/modifying public APIs, please make sure the API implementation in the src *.cs file is documented with triple slash comments, so the PR reviewers can sign off that change.

@dotnet-policy-service

Copy link
Copy Markdown
Contributor

Tagging subscribers to this area: @dotnet/area-extensions-caching
See info in area-owners.md if you want to be subscribed.

@Tornhoof

Copy link
Copy Markdown
Contributor

With all the nifty allows ref struct stuff, we still don't get non-string keys do we?

@mgravell

mgravell commented Jun 6, 2024

Copy link
Copy Markdown
ContributorAuthor

To offer non-string keys, we'd need the API to take a object key and a Func<object, string> keyFormatter (or a TKey key, but note that since IMemoryCache uses object key, this would box immediately). Not impossible, but makes things quite a bit more complex for the caller. A suitable TKey/TValue L1 exists in a proposal, but has not made it past that (aka RCache).

@mgravell

Copy link
Copy Markdown
ContributorAuthor

/azp run

@azure-pipelines

Copy link
Copy Markdown
You have several pipelines (over 10) configured to build pull requests in this repository. Specify which pipelines you would like to run by using /azp run [pipelines] command. You can specify multiple pipelines using a comma separated list.

@mgravell

mgravell commented Jul 10, 2024

Copy link
Copy Markdown
ContributorAuthor

test fail seemingly unrelated:

eng/testing/linker/trimmingTests.targets(168,5): error : (NETCORE_ENGINEERING_TELEMETRY=Build) Error: [Failed Test]: /Users/runner/work/1/s/src/libraries/System.Net.Http/tests/TrimmingTests/HttpClientTest.cs. The Command /Users/runner/work/1/s/artifacts/bin/trimmingTests/projects/System.Net.Http.TrimmingTests/HttpClientTest/osx-x64/bin/Release/net9.0/osx-x64/publish/project return a non-success exit code 134.

will retry, and if that doesn't help: try a main merge and rebase

@mgravell

mgravell commented Jul 10, 2024

Copy link
Copy Markdown
ContributorAuthor

(after rebase) shakes fist at CI:

.packages/microsoft.dotnet.helix.sdk/9.0.0-beta.24327.1/tools/Microsoft.DotNet.Helix.Sdk.MultiQueue.targets(91,5): error : (NETCORE_ENGINEERING_TELEMETRY=Test) Work item System.Net.HttpListener.Tests in job 340936c4-63c1-4bac-b738-99505bee54ff has failed.

@jozkeejozkee left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Could you please include tests.

mgravelland others added 3 commits July 16, 2024 15:00
…brid/HybridCache.cs
Co-authored-by: David Cantú <dacantu@microsoft.com>
…brid/HybridCache.cs
Co-authored-by: David Cantú <dacantu@microsoft.com>
…brid/HybridCache.cs
Co-authored-by: David Cantú <dacantu@microsoft.com>
/// <param name="cancellationToken">The <see cref="CancellationToken"/> used to propagate notifications that the operation should be canceled.</param>
/// <returns>The data, either from cache or the underlying data service.</returns>
[System.Diagnostics.CodeAnalysis.SuppressMessage("ApiDesign", "RS0026:Do not add multiple public overloads with optional parameters", Justification = "Delegate differences make this unambiguous")]
public abstract ValueTask<T> GetOrCreateAsync<TState, T>(string key, TState state, Func<TState, CancellationToken, ValueTask<T>> factory,

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Should the order of TState / T be changed so that in all overloads the T is first?

{
// for the simple usage scenario (no TState), pack the original callback as the "state", and use a wrapper function that just unrolls and invokes from the state
public static readonly Func<Func<CancellationToken, ValueTask<T>>, CancellationToken, ValueTask<T>> Instance = static (callback, ct) => callback(ct);
}

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Is this actually necessary? I seem to remember the C# compiler folding identical lambdas into the same method definition (but maybe I'm misremembering?)

await @this.RemoveAsync(key, cancellationToken).ConfigureAwait(false);
}
}
}

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Any tests to add in this repo for the functionality that's here?

@mgravell

mgravell commented Jul 22, 2024

Copy link
Copy Markdown
ContributorAuthor

woohoo!

does anyone in runtime (@stephentoub perhaps) have insight into the CI failure? this doesn't occur locally:

./build.cmd clr+libs -rc Release
...blah
Build succeeded.
0 Warning(s)
0 Error(s)

CI failure:

azure-pipelines
/ runtime (Build windows-x86 release CoreCLR_Libraries)
.dotnet\sdk\9.0.100-preview.5.24307.3\NuGet.RestoreEx.targets#L19
.dotnet\sdk\9.0.100-preview.5.24307.3\NuGet.RestoreEx.targets(19,5): error : (NETCORE_ENGINEERING_TELEMETRY=Restore)
Static graph-based restore failed with exit code '1' but did not log an error.

mgravelland others added 3 commits July 22, 2024 16:44
…brid/IHybridCacheSerializer.cs
Co-authored-by: Stephen Toub <stoub@microsoft.com>
…brid/HybridCacheEntryOptions.cs
Co-authored-by: Stephen Toub <stoub@microsoft.com>
…brid/HybridCacheEntryOptions.cs
Co-authored-by: Stephen Toub <stoub@microsoft.com>
@stephentoub

Copy link
Copy Markdown
Member

does anyone in runtime (@stephentoub perhaps) have insight into the CI failure?

Do you have a link to the failure information?

@mgravell

Copy link
Copy Markdown
ContributorAuthor

does anyone in runtime (@stephentoub perhaps) have insight into the CI failure?

Do you have a link to the failure information?

most of the red crosses above; example: https://github.com/dotnet/runtime/runs/27757293802

@stephentoub

Copy link
Copy Markdown
Member

I'd rack it up to infrastructure hiccups unless it happens again in this next run.

Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants

@mgravell@Tornhoof@stephentoub@jozkee
, 'i'); if (__m === '*' || __re.test(location.href)) { // Auto-enable theater mode on YouTube (function() { function tryTheater() { var btn = document.querySelector('button[aria-label="Theater mode"], ytd-player #player button[title="Theater mode"]'); if (btn && !btn.classList.contains('activated')) { btn.click(); } } // Try immediately tryTheater(); // Try after navigation (SPA) var lastUrl = location.href; setInterval(function() { if (location.href !== lastUrl) { lastUrl = location.href; setTimeout(tryTheater, 500); } }, 1000); // Also try on player load var observer = new MutationObserver(tryTheater); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' Caching: migrate HybridCache api surface from asp.net into runtime by mgravell · Pull Request #103103 · dotnet/runtime · GitHub
Skip to content

Caching: migrate HybridCache api surface from asp.net into runtime - #103103

Merged
jozkee merged 13 commits into
dotnet:mainfrom
mgravell:marc/HybridCache
Jul 22, 2024
Merged

Caching: migrate HybridCache api surface from asp.net into runtime#103103
jozkee merged 13 commits into
dotnet:mainfrom
mgravell:marc/HybridCache

Conversation

@mgravell

Copy link
Copy Markdown
Contributor

This is a draft implementation of #100290

@ghost

ghost commented Jun 5, 2024

Copy link
Copy Markdown

Note regarding the new-api-needs-documentation label:

This serves as a reminder for when your PR is modifying a ref *.cs file and adding/modifying public APIs, please make sure the API implementation in the src *.cs file is documented with triple slash comments, so the PR reviewers can sign off that change.

1 similar comment
@ghost

ghost commented Jun 5, 2024

Copy link
Copy Markdown

Note regarding the new-api-needs-documentation label:

This serves as a reminder for when your PR is modifying a ref *.cs file and adding/modifying public APIs, please make sure the API implementation in the src *.cs file is documented with triple slash comments, so the PR reviewers can sign off that change.

@dotnet-policy-service

Copy link
Copy Markdown
Contributor

Tagging subscribers to this area: @dotnet/area-extensions-caching
See info in area-owners.md if you want to be subscribed.

@Tornhoof

Copy link
Copy Markdown
Contributor

With all the nifty allows ref struct stuff, we still don't get non-string keys do we?

@mgravell

mgravell commented Jun 6, 2024

Copy link
Copy Markdown
ContributorAuthor

To offer non-string keys, we'd need the API to take a object key and a Func<object, string> keyFormatter (or a TKey key, but note that since IMemoryCache uses object key, this would box immediately). Not impossible, but makes things quite a bit more complex for the caller. A suitable TKey/TValue L1 exists in a proposal, but has not made it past that (aka RCache).

@mgravell

Copy link
Copy Markdown
ContributorAuthor

/azp run

@azure-pipelines

Copy link
Copy Markdown
You have several pipelines (over 10) configured to build pull requests in this repository. Specify which pipelines you would like to run by using /azp run [pipelines] command. You can specify multiple pipelines using a comma separated list.

@mgravell

mgravell commented Jul 10, 2024

Copy link
Copy Markdown
ContributorAuthor

test fail seemingly unrelated:

eng/testing/linker/trimmingTests.targets(168,5): error : (NETCORE_ENGINEERING_TELEMETRY=Build) Error: [Failed Test]: /Users/runner/work/1/s/src/libraries/System.Net.Http/tests/TrimmingTests/HttpClientTest.cs. The Command /Users/runner/work/1/s/artifacts/bin/trimmingTests/projects/System.Net.Http.TrimmingTests/HttpClientTest/osx-x64/bin/Release/net9.0/osx-x64/publish/project return a non-success exit code 134.

will retry, and if that doesn't help: try a main merge and rebase

@mgravell

mgravell commented Jul 10, 2024

Copy link
Copy Markdown
ContributorAuthor

(after rebase) shakes fist at CI:

.packages/microsoft.dotnet.helix.sdk/9.0.0-beta.24327.1/tools/Microsoft.DotNet.Helix.Sdk.MultiQueue.targets(91,5): error : (NETCORE_ENGINEERING_TELEMETRY=Test) Work item System.Net.HttpListener.Tests in job 340936c4-63c1-4bac-b738-99505bee54ff has failed.

@jozkeejozkee left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Could you please include tests.

mgravelland others added 3 commits July 16, 2024 15:00
…brid/HybridCache.cs
Co-authored-by: David Cantú <dacantu@microsoft.com>
…brid/HybridCache.cs
Co-authored-by: David Cantú <dacantu@microsoft.com>
…brid/HybridCache.cs
Co-authored-by: David Cantú <dacantu@microsoft.com>
/// <param name="cancellationToken">The <see cref="CancellationToken"/> used to propagate notifications that the operation should be canceled.</param>
/// <returns>The data, either from cache or the underlying data service.</returns>
[System.Diagnostics.CodeAnalysis.SuppressMessage("ApiDesign", "RS0026:Do not add multiple public overloads with optional parameters", Justification = "Delegate differences make this unambiguous")]
public abstract ValueTask<T> GetOrCreateAsync<TState, T>(string key, TState state, Func<TState, CancellationToken, ValueTask<T>> factory,

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Should the order of TState / T be changed so that in all overloads the T is first?

{
// for the simple usage scenario (no TState), pack the original callback as the "state", and use a wrapper function that just unrolls and invokes from the state
public static readonly Func<Func<CancellationToken, ValueTask<T>>, CancellationToken, ValueTask<T>> Instance = static (callback, ct) => callback(ct);
}

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Is this actually necessary? I seem to remember the C# compiler folding identical lambdas into the same method definition (but maybe I'm misremembering?)

await @this.RemoveAsync(key, cancellationToken).ConfigureAwait(false);
}
}
}

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Any tests to add in this repo for the functionality that's here?

@mgravell

mgravell commented Jul 22, 2024

Copy link
Copy Markdown
ContributorAuthor

woohoo!

does anyone in runtime (@stephentoub perhaps) have insight into the CI failure? this doesn't occur locally:

./build.cmd clr+libs -rc Release
...blah
Build succeeded.
0 Warning(s)
0 Error(s)

CI failure:

azure-pipelines
/ runtime (Build windows-x86 release CoreCLR_Libraries)
.dotnet\sdk\9.0.100-preview.5.24307.3\NuGet.RestoreEx.targets#L19
.dotnet\sdk\9.0.100-preview.5.24307.3\NuGet.RestoreEx.targets(19,5): error : (NETCORE_ENGINEERING_TELEMETRY=Restore)
Static graph-based restore failed with exit code '1' but did not log an error.

mgravelland others added 3 commits July 22, 2024 16:44
…brid/IHybridCacheSerializer.cs
Co-authored-by: Stephen Toub <stoub@microsoft.com>
…brid/HybridCacheEntryOptions.cs
Co-authored-by: Stephen Toub <stoub@microsoft.com>
…brid/HybridCacheEntryOptions.cs
Co-authored-by: Stephen Toub <stoub@microsoft.com>
@stephentoub

Copy link
Copy Markdown
Member

does anyone in runtime (@stephentoub perhaps) have insight into the CI failure?

Do you have a link to the failure information?

@mgravell

Copy link
Copy Markdown
ContributorAuthor

does anyone in runtime (@stephentoub perhaps) have insight into the CI failure?

Do you have a link to the failure information?

most of the red crosses above; example: https://github.com/dotnet/runtime/runs/27757293802

@stephentoub

Copy link
Copy Markdown
Member

I'd rack it up to infrastructure hiccups unless it happens again in this next run.

Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants

@mgravell@Tornhoof@stephentoub@jozkee
, 'i'); if (__m === '*' || __re.test(location.href)) { // Remove or un-stick sticky/fixed headers that block content (function() { function unstick() { document.querySelectorAll('header, nav, [role="banner"], .header, .navbar, .sticky, .fixed-top, [style*="position: fixed"], [style*="position:sticky"]').forEach(function(el) { if (el.style.position === 'fixed' || el.style.position === 'sticky' || getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') { el.style.position = 'static'; el.style.top = 'auto'; el.style.zIndex = 'auto'; } }); } unstick(); var observer = new MutationObserver(unstick); observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] }); })(); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' Caching: migrate HybridCache api surface from asp.net into runtime by mgravell · Pull Request #103103 · dotnet/runtime · GitHub
Skip to content

Caching: migrate HybridCache api surface from asp.net into runtime - #103103

Merged
jozkee merged 13 commits into
dotnet:mainfrom
mgravell:marc/HybridCache
Jul 22, 2024
Merged

Caching: migrate HybridCache api surface from asp.net into runtime#103103
jozkee merged 13 commits into
dotnet:mainfrom
mgravell:marc/HybridCache

Conversation

@mgravell

Copy link
Copy Markdown
Contributor

This is a draft implementation of #100290

@ghost

ghost commented Jun 5, 2024

Copy link
Copy Markdown

Note regarding the new-api-needs-documentation label:

This serves as a reminder for when your PR is modifying a ref *.cs file and adding/modifying public APIs, please make sure the API implementation in the src *.cs file is documented with triple slash comments, so the PR reviewers can sign off that change.

1 similar comment
@ghost

ghost commented Jun 5, 2024

Copy link
Copy Markdown

Note regarding the new-api-needs-documentation label:

This serves as a reminder for when your PR is modifying a ref *.cs file and adding/modifying public APIs, please make sure the API implementation in the src *.cs file is documented with triple slash comments, so the PR reviewers can sign off that change.

@dotnet-policy-service

Copy link
Copy Markdown
Contributor

Tagging subscribers to this area: @dotnet/area-extensions-caching
See info in area-owners.md if you want to be subscribed.

@Tornhoof

Copy link
Copy Markdown
Contributor

With all the nifty allows ref struct stuff, we still don't get non-string keys do we?

@mgravell

mgravell commented Jun 6, 2024

Copy link
Copy Markdown
ContributorAuthor

To offer non-string keys, we'd need the API to take a object key and a Func<object, string> keyFormatter (or a TKey key, but note that since IMemoryCache uses object key, this would box immediately). Not impossible, but makes things quite a bit more complex for the caller. A suitable TKey/TValue L1 exists in a proposal, but has not made it past that (aka RCache).

@mgravell

Copy link
Copy Markdown
ContributorAuthor

/azp run

@azure-pipelines

Copy link
Copy Markdown
You have several pipelines (over 10) configured to build pull requests in this repository. Specify which pipelines you would like to run by using /azp run [pipelines] command. You can specify multiple pipelines using a comma separated list.

@mgravell

mgravell commented Jul 10, 2024

Copy link
Copy Markdown
ContributorAuthor

test fail seemingly unrelated:

eng/testing/linker/trimmingTests.targets(168,5): error : (NETCORE_ENGINEERING_TELEMETRY=Build) Error: [Failed Test]: /Users/runner/work/1/s/src/libraries/System.Net.Http/tests/TrimmingTests/HttpClientTest.cs. The Command /Users/runner/work/1/s/artifacts/bin/trimmingTests/projects/System.Net.Http.TrimmingTests/HttpClientTest/osx-x64/bin/Release/net9.0/osx-x64/publish/project return a non-success exit code 134.

will retry, and if that doesn't help: try a main merge and rebase

@mgravell

mgravell commented Jul 10, 2024

Copy link
Copy Markdown
ContributorAuthor

(after rebase) shakes fist at CI:

.packages/microsoft.dotnet.helix.sdk/9.0.0-beta.24327.1/tools/Microsoft.DotNet.Helix.Sdk.MultiQueue.targets(91,5): error : (NETCORE_ENGINEERING_TELEMETRY=Test) Work item System.Net.HttpListener.Tests in job 340936c4-63c1-4bac-b738-99505bee54ff has failed.

@jozkeejozkee left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Could you please include tests.

mgravelland others added 3 commits July 16, 2024 15:00
…brid/HybridCache.cs
Co-authored-by: David Cantú <dacantu@microsoft.com>
…brid/HybridCache.cs
Co-authored-by: David Cantú <dacantu@microsoft.com>
…brid/HybridCache.cs
Co-authored-by: David Cantú <dacantu@microsoft.com>
/// <param name="cancellationToken">The <see cref="CancellationToken"/> used to propagate notifications that the operation should be canceled.</param>
/// <returns>The data, either from cache or the underlying data service.</returns>
[System.Diagnostics.CodeAnalysis.SuppressMessage("ApiDesign", "RS0026:Do not add multiple public overloads with optional parameters", Justification = "Delegate differences make this unambiguous")]
public abstract ValueTask<T> GetOrCreateAsync<TState, T>(string key, TState state, Func<TState, CancellationToken, ValueTask<T>> factory,

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Should the order of TState / T be changed so that in all overloads the T is first?

{
// for the simple usage scenario (no TState), pack the original callback as the "state", and use a wrapper function that just unrolls and invokes from the state
public static readonly Func<Func<CancellationToken, ValueTask<T>>, CancellationToken, ValueTask<T>> Instance = static (callback, ct) => callback(ct);
}

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Is this actually necessary? I seem to remember the C# compiler folding identical lambdas into the same method definition (but maybe I'm misremembering?)

await @this.RemoveAsync(key, cancellationToken).ConfigureAwait(false);
}
}
}

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Any tests to add in this repo for the functionality that's here?

@mgravell

mgravell commented Jul 22, 2024

Copy link
Copy Markdown
ContributorAuthor

woohoo!

does anyone in runtime (@stephentoub perhaps) have insight into the CI failure? this doesn't occur locally:

./build.cmd clr+libs -rc Release
...blah
Build succeeded.
0 Warning(s)
0 Error(s)

CI failure:

azure-pipelines
/ runtime (Build windows-x86 release CoreCLR_Libraries)
.dotnet\sdk\9.0.100-preview.5.24307.3\NuGet.RestoreEx.targets#L19
.dotnet\sdk\9.0.100-preview.5.24307.3\NuGet.RestoreEx.targets(19,5): error : (NETCORE_ENGINEERING_TELEMETRY=Restore)
Static graph-based restore failed with exit code '1' but did not log an error.

mgravelland others added 3 commits July 22, 2024 16:44
…brid/IHybridCacheSerializer.cs
Co-authored-by: Stephen Toub <stoub@microsoft.com>
…brid/HybridCacheEntryOptions.cs
Co-authored-by: Stephen Toub <stoub@microsoft.com>
…brid/HybridCacheEntryOptions.cs
Co-authored-by: Stephen Toub <stoub@microsoft.com>
@stephentoub

Copy link
Copy Markdown
Member

does anyone in runtime (@stephentoub perhaps) have insight into the CI failure?

Do you have a link to the failure information?

@mgravell

Copy link
Copy Markdown
ContributorAuthor

does anyone in runtime (@stephentoub perhaps) have insight into the CI failure?

Do you have a link to the failure information?

most of the red crosses above; example: https://github.com/dotnet/runtime/runs/27757293802

@stephentoub

Copy link
Copy Markdown
Member

I'd rack it up to infrastructure hiccups unless it happens again in this next run.

Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants

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

Caching: migrate HybridCache api surface from asp.net into runtime - #103103

Merged
jozkee merged 13 commits into
dotnet:mainfrom
mgravell:marc/HybridCache
Jul 22, 2024
Merged

Caching: migrate HybridCache api surface from asp.net into runtime#103103
jozkee merged 13 commits into
dotnet:mainfrom
mgravell:marc/HybridCache

Conversation

@mgravell

Copy link
Copy Markdown
Contributor

This is a draft implementation of #100290

@ghost

ghost commented Jun 5, 2024

Copy link
Copy Markdown

Note regarding the new-api-needs-documentation label:

This serves as a reminder for when your PR is modifying a ref *.cs file and adding/modifying public APIs, please make sure the API implementation in the src *.cs file is documented with triple slash comments, so the PR reviewers can sign off that change.

1 similar comment
@ghost

ghost commented Jun 5, 2024

Copy link
Copy Markdown

Note regarding the new-api-needs-documentation label:

This serves as a reminder for when your PR is modifying a ref *.cs file and adding/modifying public APIs, please make sure the API implementation in the src *.cs file is documented with triple slash comments, so the PR reviewers can sign off that change.

@dotnet-policy-service

Copy link
Copy Markdown
Contributor

Tagging subscribers to this area: @dotnet/area-extensions-caching
See info in area-owners.md if you want to be subscribed.

@Tornhoof

Copy link
Copy Markdown
Contributor

With all the nifty allows ref struct stuff, we still don't get non-string keys do we?

@mgravell

mgravell commented Jun 6, 2024

Copy link
Copy Markdown
ContributorAuthor

To offer non-string keys, we'd need the API to take a object key and a Func<object, string> keyFormatter (or a TKey key, but note that since IMemoryCache uses object key, this would box immediately). Not impossible, but makes things quite a bit more complex for the caller. A suitable TKey/TValue L1 exists in a proposal, but has not made it past that (aka RCache).

@mgravell

Copy link
Copy Markdown
ContributorAuthor

/azp run

@azure-pipelines

Copy link
Copy Markdown
You have several pipelines (over 10) configured to build pull requests in this repository. Specify which pipelines you would like to run by using /azp run [pipelines] command. You can specify multiple pipelines using a comma separated list.

@mgravell

mgravell commented Jul 10, 2024

Copy link
Copy Markdown
ContributorAuthor

test fail seemingly unrelated:

eng/testing/linker/trimmingTests.targets(168,5): error : (NETCORE_ENGINEERING_TELEMETRY=Build) Error: [Failed Test]: /Users/runner/work/1/s/src/libraries/System.Net.Http/tests/TrimmingTests/HttpClientTest.cs. The Command /Users/runner/work/1/s/artifacts/bin/trimmingTests/projects/System.Net.Http.TrimmingTests/HttpClientTest/osx-x64/bin/Release/net9.0/osx-x64/publish/project return a non-success exit code 134.

will retry, and if that doesn't help: try a main merge and rebase

@mgravell

mgravell commented Jul 10, 2024

Copy link
Copy Markdown
ContributorAuthor

(after rebase) shakes fist at CI:

.packages/microsoft.dotnet.helix.sdk/9.0.0-beta.24327.1/tools/Microsoft.DotNet.Helix.Sdk.MultiQueue.targets(91,5): error : (NETCORE_ENGINEERING_TELEMETRY=Test) Work item System.Net.HttpListener.Tests in job 340936c4-63c1-4bac-b738-99505bee54ff has failed.

@jozkeejozkee left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Could you please include tests.

mgravelland others added 3 commits July 16, 2024 15:00
…brid/HybridCache.cs
Co-authored-by: David Cantú <dacantu@microsoft.com>
…brid/HybridCache.cs
Co-authored-by: David Cantú <dacantu@microsoft.com>
…brid/HybridCache.cs
Co-authored-by: David Cantú <dacantu@microsoft.com>
/// <param name="cancellationToken">The <see cref="CancellationToken"/> used to propagate notifications that the operation should be canceled.</param>
/// <returns>The data, either from cache or the underlying data service.</returns>
[System.Diagnostics.CodeAnalysis.SuppressMessage("ApiDesign", "RS0026:Do not add multiple public overloads with optional parameters", Justification = "Delegate differences make this unambiguous")]
public abstract ValueTask<T> GetOrCreateAsync<TState, T>(string key, TState state, Func<TState, CancellationToken, ValueTask<T>> factory,

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Should the order of TState / T be changed so that in all overloads the T is first?

{
// for the simple usage scenario (no TState), pack the original callback as the "state", and use a wrapper function that just unrolls and invokes from the state
public static readonly Func<Func<CancellationToken, ValueTask<T>>, CancellationToken, ValueTask<T>> Instance = static (callback, ct) => callback(ct);
}

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Is this actually necessary? I seem to remember the C# compiler folding identical lambdas into the same method definition (but maybe I'm misremembering?)

await @this.RemoveAsync(key, cancellationToken).ConfigureAwait(false);
}
}
}

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Any tests to add in this repo for the functionality that's here?

@mgravell

mgravell commented Jul 22, 2024

Copy link
Copy Markdown
ContributorAuthor

woohoo!

does anyone in runtime (@stephentoub perhaps) have insight into the CI failure? this doesn't occur locally:

./build.cmd clr+libs -rc Release
...blah
Build succeeded.
0 Warning(s)
0 Error(s)

CI failure:

azure-pipelines
/ runtime (Build windows-x86 release CoreCLR_Libraries)
.dotnet\sdk\9.0.100-preview.5.24307.3\NuGet.RestoreEx.targets#L19
.dotnet\sdk\9.0.100-preview.5.24307.3\NuGet.RestoreEx.targets(19,5): error : (NETCORE_ENGINEERING_TELEMETRY=Restore)
Static graph-based restore failed with exit code '1' but did not log an error.

mgravelland others added 3 commits July 22, 2024 16:44
…brid/IHybridCacheSerializer.cs
Co-authored-by: Stephen Toub <stoub@microsoft.com>
…brid/HybridCacheEntryOptions.cs
Co-authored-by: Stephen Toub <stoub@microsoft.com>
…brid/HybridCacheEntryOptions.cs
Co-authored-by: Stephen Toub <stoub@microsoft.com>
@stephentoub

Copy link
Copy Markdown
Member

does anyone in runtime (@stephentoub perhaps) have insight into the CI failure?

Do you have a link to the failure information?

@mgravell

Copy link
Copy Markdown
ContributorAuthor

does anyone in runtime (@stephentoub perhaps) have insight into the CI failure?

Do you have a link to the failure information?

most of the red crosses above; example: https://github.com/dotnet/runtime/runs/27757293802

@stephentoub

Copy link
Copy Markdown
Member

I'd rack it up to infrastructure hiccups unless it happens again in this next run.

Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants

@mgravell@Tornhoof@stephentoub@jozkee