Move Channel's blocked monitor updates vec to an even TLV - #2392

Merged
valentinewallace merged 1 commit into
lightningdevkit:mainfrom
TheBlueMatt:2023-07-async-mon-even-tlv
Jul 7, 2023
Merged

Move Channel's blocked monitor updates vec to an even TLV#2392
valentinewallace merged 1 commit into
lightningdevkit:mainfrom
TheBlueMatt:2023-07-async-mon-even-tlv

Conversation

@TheBlueMatt

Copy link
Copy Markdown
Collaborator

In 9dfe42c,
ChannelMonitorUpdates were stored in Channel while they were being processed. Because it was possible (though highly unlikely, due to various locking likely blocking persistence) an update was in-flight (even synchronously) when a ChannelManager was persisted, the new updates were persisted via an odd TLV.

However, in 4041f08 these pending monitor updates were moved to ChannelManager, with appropriate handling there. Now the only ChannelMonitorUpdates which are stored in Channel are those which are explicitly blocked, which requires the async pipeline.

Because we don't support async monitor update users downgrading to 0.0.115 or lower, we move to persisting them via an even TLV. As the odd TLV storage has not yet been released, we can do so trivially.

Fixes#2317.

In 9dfe42c,
`ChannelMonitorUpdate`s were stored in `Channel` while they were
being processed. Because it was possible (though highly unlikely,
due to various locking likely blocking persistence) an update was
in-flight (even synchronously) when a `ChannelManager` was
persisted, the new updates were persisted via an odd TLV.
However, in 4041f08 these pending
monitor updates were moved to `ChannelManager`, with appropriate
handling there. Now the only `ChannelMonitorUpdate`s which are
stored in `Channel` are those which are explicitly blocked, which
requires the async pipeline.
Because we don't support async monitor update users downgrading to
0.0.115 or lower, we move to persisting them via an even TLV. As
the odd TLV storage has not yet been released, we can do so
trivially.
Fixeslightningdevkit#2317.
@TheBlueMattTheBlueMatt added this to the 0.0.116 milestone Jul 5, 2023

@valentinewallacevalentinewallace left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Could you remind me why it was OK that this was odd before? Not quite getting the commit message explanation. Is it because a previous version would just end up force closing due to stale monitors, lacking the pending updates to fill in the gap?

Otherwise LGTM.

Comment threadlightning/src/ln/channel.rs
@jkczyz
jkczyz self-requested a review July 6, 2023 15:54
@TheBlueMatt

Copy link
Copy Markdown
CollaboratorAuthor

I was previously worried about the field holding monitor updates which were in-flight doing a regular sync persistence and getting serialized. (a) I think that worry was overblown cause we should always be holding the global consistency lock anyway, and (b) its definitely not true now since we never store any monitor updates in the channel anymore unless they're blocked (which they wont be until 117), and the ones that are stored in-flight in the manager are in an even TLV cause they're always in the global consistency lock.

@valentinewallace
valentinewallace merged commit e40b6ae into lightningdevkit:mainJul 7, 2023
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Make Channel::pending_monitor_updates TLV even

3 participants

@TheBlueMatt@jkczyz@valentinewallace
, '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

Move Channel's blocked monitor updates vec to an even TLV - #2392

Merged
valentinewallace merged 1 commit into
lightningdevkit:mainfrom
TheBlueMatt:2023-07-async-mon-even-tlv
Jul 7, 2023
Merged

Move Channel's blocked monitor updates vec to an even TLV#2392
valentinewallace merged 1 commit into
lightningdevkit:mainfrom
TheBlueMatt:2023-07-async-mon-even-tlv

Conversation

@TheBlueMatt

Copy link
Copy Markdown
Collaborator

In 9dfe42c,
ChannelMonitorUpdates were stored in Channel while they were being processed. Because it was possible (though highly unlikely, due to various locking likely blocking persistence) an update was in-flight (even synchronously) when a ChannelManager was persisted, the new updates were persisted via an odd TLV.

However, in 4041f08 these pending monitor updates were moved to ChannelManager, with appropriate handling there. Now the only ChannelMonitorUpdates which are stored in Channel are those which are explicitly blocked, which requires the async pipeline.

Because we don't support async monitor update users downgrading to 0.0.115 or lower, we move to persisting them via an even TLV. As the odd TLV storage has not yet been released, we can do so trivially.

Fixes#2317.

In 9dfe42c,
`ChannelMonitorUpdate`s were stored in `Channel` while they were
being processed. Because it was possible (though highly unlikely,
due to various locking likely blocking persistence) an update was
in-flight (even synchronously) when a `ChannelManager` was
persisted, the new updates were persisted via an odd TLV.
However, in 4041f08 these pending
monitor updates were moved to `ChannelManager`, with appropriate
handling there. Now the only `ChannelMonitorUpdate`s which are
stored in `Channel` are those which are explicitly blocked, which
requires the async pipeline.
Because we don't support async monitor update users downgrading to
0.0.115 or lower, we move to persisting them via an even TLV. As
the odd TLV storage has not yet been released, we can do so
trivially.
Fixeslightningdevkit#2317.
@TheBlueMattTheBlueMatt added this to the 0.0.116 milestone Jul 5, 2023

@valentinewallacevalentinewallace left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Could you remind me why it was OK that this was odd before? Not quite getting the commit message explanation. Is it because a previous version would just end up force closing due to stale monitors, lacking the pending updates to fill in the gap?

Otherwise LGTM.

Comment threadlightning/src/ln/channel.rs
@jkczyz
jkczyz self-requested a review July 6, 2023 15:54
@TheBlueMatt

Copy link
Copy Markdown
CollaboratorAuthor

I was previously worried about the field holding monitor updates which were in-flight doing a regular sync persistence and getting serialized. (a) I think that worry was overblown cause we should always be holding the global consistency lock anyway, and (b) its definitely not true now since we never store any monitor updates in the channel anymore unless they're blocked (which they wont be until 117), and the ones that are stored in-flight in the manager are in an even TLV cause they're always in the global consistency lock.

@valentinewallace
valentinewallace merged commit e40b6ae into lightningdevkit:mainJul 7, 2023
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Make Channel::pending_monitor_updates TLV even

3 participants

@TheBlueMatt@jkczyz@valentinewallace
, '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

Move Channel's blocked monitor updates vec to an even TLV - #2392

Merged
valentinewallace merged 1 commit into
lightningdevkit:mainfrom
TheBlueMatt:2023-07-async-mon-even-tlv
Jul 7, 2023
Merged

Move Channel's blocked monitor updates vec to an even TLV#2392
valentinewallace merged 1 commit into
lightningdevkit:mainfrom
TheBlueMatt:2023-07-async-mon-even-tlv

Conversation

@TheBlueMatt

Copy link
Copy Markdown
Collaborator

In 9dfe42c,
ChannelMonitorUpdates were stored in Channel while they were being processed. Because it was possible (though highly unlikely, due to various locking likely blocking persistence) an update was in-flight (even synchronously) when a ChannelManager was persisted, the new updates were persisted via an odd TLV.

However, in 4041f08 these pending monitor updates were moved to ChannelManager, with appropriate handling there. Now the only ChannelMonitorUpdates which are stored in Channel are those which are explicitly blocked, which requires the async pipeline.

Because we don't support async monitor update users downgrading to 0.0.115 or lower, we move to persisting them via an even TLV. As the odd TLV storage has not yet been released, we can do so trivially.

Fixes#2317.

In 9dfe42c,
`ChannelMonitorUpdate`s were stored in `Channel` while they were
being processed. Because it was possible (though highly unlikely,
due to various locking likely blocking persistence) an update was
in-flight (even synchronously) when a `ChannelManager` was
persisted, the new updates were persisted via an odd TLV.
However, in 4041f08 these pending
monitor updates were moved to `ChannelManager`, with appropriate
handling there. Now the only `ChannelMonitorUpdate`s which are
stored in `Channel` are those which are explicitly blocked, which
requires the async pipeline.
Because we don't support async monitor update users downgrading to
0.0.115 or lower, we move to persisting them via an even TLV. As
the odd TLV storage has not yet been released, we can do so
trivially.
Fixeslightningdevkit#2317.
@TheBlueMattTheBlueMatt added this to the 0.0.116 milestone Jul 5, 2023

@valentinewallacevalentinewallace left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Could you remind me why it was OK that this was odd before? Not quite getting the commit message explanation. Is it because a previous version would just end up force closing due to stale monitors, lacking the pending updates to fill in the gap?

Otherwise LGTM.

Comment threadlightning/src/ln/channel.rs
@jkczyz
jkczyz self-requested a review July 6, 2023 15:54
@TheBlueMatt

Copy link
Copy Markdown
CollaboratorAuthor

I was previously worried about the field holding monitor updates which were in-flight doing a regular sync persistence and getting serialized. (a) I think that worry was overblown cause we should always be holding the global consistency lock anyway, and (b) its definitely not true now since we never store any monitor updates in the channel anymore unless they're blocked (which they wont be until 117), and the ones that are stored in-flight in the manager are in an even TLV cause they're always in the global consistency lock.

@valentinewallace
valentinewallace merged commit e40b6ae into lightningdevkit:mainJul 7, 2023
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Make Channel::pending_monitor_updates TLV even

3 participants

@TheBlueMatt@jkczyz@valentinewallace
, '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

Move Channel's blocked monitor updates vec to an even TLV - #2392

Merged
valentinewallace merged 1 commit into
lightningdevkit:mainfrom
TheBlueMatt:2023-07-async-mon-even-tlv
Jul 7, 2023
Merged

Move Channel's blocked monitor updates vec to an even TLV#2392
valentinewallace merged 1 commit into
lightningdevkit:mainfrom
TheBlueMatt:2023-07-async-mon-even-tlv

Conversation

@TheBlueMatt

Copy link
Copy Markdown
Collaborator

In 9dfe42c,
ChannelMonitorUpdates were stored in Channel while they were being processed. Because it was possible (though highly unlikely, due to various locking likely blocking persistence) an update was in-flight (even synchronously) when a ChannelManager was persisted, the new updates were persisted via an odd TLV.

However, in 4041f08 these pending monitor updates were moved to ChannelManager, with appropriate handling there. Now the only ChannelMonitorUpdates which are stored in Channel are those which are explicitly blocked, which requires the async pipeline.

Because we don't support async monitor update users downgrading to 0.0.115 or lower, we move to persisting them via an even TLV. As the odd TLV storage has not yet been released, we can do so trivially.

Fixes#2317.

In 9dfe42c,
`ChannelMonitorUpdate`s were stored in `Channel` while they were
being processed. Because it was possible (though highly unlikely,
due to various locking likely blocking persistence) an update was
in-flight (even synchronously) when a `ChannelManager` was
persisted, the new updates were persisted via an odd TLV.
However, in 4041f08 these pending
monitor updates were moved to `ChannelManager`, with appropriate
handling there. Now the only `ChannelMonitorUpdate`s which are
stored in `Channel` are those which are explicitly blocked, which
requires the async pipeline.
Because we don't support async monitor update users downgrading to
0.0.115 or lower, we move to persisting them via an even TLV. As
the odd TLV storage has not yet been released, we can do so
trivially.
Fixeslightningdevkit#2317.
@TheBlueMattTheBlueMatt added this to the 0.0.116 milestone Jul 5, 2023

@valentinewallacevalentinewallace left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Could you remind me why it was OK that this was odd before? Not quite getting the commit message explanation. Is it because a previous version would just end up force closing due to stale monitors, lacking the pending updates to fill in the gap?

Otherwise LGTM.

Comment threadlightning/src/ln/channel.rs
@jkczyz
jkczyz self-requested a review July 6, 2023 15:54
@TheBlueMatt

Copy link
Copy Markdown
CollaboratorAuthor

I was previously worried about the field holding monitor updates which were in-flight doing a regular sync persistence and getting serialized. (a) I think that worry was overblown cause we should always be holding the global consistency lock anyway, and (b) its definitely not true now since we never store any monitor updates in the channel anymore unless they're blocked (which they wont be until 117), and the ones that are stored in-flight in the manager are in an even TLV cause they're always in the global consistency lock.

@valentinewallace
valentinewallace merged commit e40b6ae into lightningdevkit:mainJul 7, 2023
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Make Channel::pending_monitor_updates TLV even

3 participants

@TheBlueMatt@jkczyz@valentinewallace
, '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

Move Channel's blocked monitor updates vec to an even TLV - #2392

Merged
valentinewallace merged 1 commit into
lightningdevkit:mainfrom
TheBlueMatt:2023-07-async-mon-even-tlv
Jul 7, 2023
Merged

Move Channel's blocked monitor updates vec to an even TLV#2392
valentinewallace merged 1 commit into
lightningdevkit:mainfrom
TheBlueMatt:2023-07-async-mon-even-tlv

Conversation

@TheBlueMatt

Copy link
Copy Markdown
Collaborator

In 9dfe42c,
ChannelMonitorUpdates were stored in Channel while they were being processed. Because it was possible (though highly unlikely, due to various locking likely blocking persistence) an update was in-flight (even synchronously) when a ChannelManager was persisted, the new updates were persisted via an odd TLV.

However, in 4041f08 these pending monitor updates were moved to ChannelManager, with appropriate handling there. Now the only ChannelMonitorUpdates which are stored in Channel are those which are explicitly blocked, which requires the async pipeline.

Because we don't support async monitor update users downgrading to 0.0.115 or lower, we move to persisting them via an even TLV. As the odd TLV storage has not yet been released, we can do so trivially.

Fixes#2317.

In 9dfe42c,
`ChannelMonitorUpdate`s were stored in `Channel` while they were
being processed. Because it was possible (though highly unlikely,
due to various locking likely blocking persistence) an update was
in-flight (even synchronously) when a `ChannelManager` was
persisted, the new updates were persisted via an odd TLV.
However, in 4041f08 these pending
monitor updates were moved to `ChannelManager`, with appropriate
handling there. Now the only `ChannelMonitorUpdate`s which are
stored in `Channel` are those which are explicitly blocked, which
requires the async pipeline.
Because we don't support async monitor update users downgrading to
0.0.115 or lower, we move to persisting them via an even TLV. As
the odd TLV storage has not yet been released, we can do so
trivially.
Fixeslightningdevkit#2317.
@TheBlueMattTheBlueMatt added this to the 0.0.116 milestone Jul 5, 2023

@valentinewallacevalentinewallace left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Could you remind me why it was OK that this was odd before? Not quite getting the commit message explanation. Is it because a previous version would just end up force closing due to stale monitors, lacking the pending updates to fill in the gap?

Otherwise LGTM.

Comment threadlightning/src/ln/channel.rs
@jkczyz
jkczyz self-requested a review July 6, 2023 15:54
@TheBlueMatt

Copy link
Copy Markdown
CollaboratorAuthor

I was previously worried about the field holding monitor updates which were in-flight doing a regular sync persistence and getting serialized. (a) I think that worry was overblown cause we should always be holding the global consistency lock anyway, and (b) its definitely not true now since we never store any monitor updates in the channel anymore unless they're blocked (which they wont be until 117), and the ones that are stored in-flight in the manager are in an even TLV cause they're always in the global consistency lock.

@valentinewallace
valentinewallace merged commit e40b6ae into lightningdevkit:mainJul 7, 2023
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Make Channel::pending_monitor_updates TLV even

3 participants

@TheBlueMatt@jkczyz@valentinewallace
, '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

Move Channel's blocked monitor updates vec to an even TLV - #2392

Merged
valentinewallace merged 1 commit into
lightningdevkit:mainfrom
TheBlueMatt:2023-07-async-mon-even-tlv
Jul 7, 2023
Merged

Move Channel's blocked monitor updates vec to an even TLV#2392
valentinewallace merged 1 commit into
lightningdevkit:mainfrom
TheBlueMatt:2023-07-async-mon-even-tlv

Conversation

@TheBlueMatt

Copy link
Copy Markdown
Collaborator

In 9dfe42c,
ChannelMonitorUpdates were stored in Channel while they were being processed. Because it was possible (though highly unlikely, due to various locking likely blocking persistence) an update was in-flight (even synchronously) when a ChannelManager was persisted, the new updates were persisted via an odd TLV.

However, in 4041f08 these pending monitor updates were moved to ChannelManager, with appropriate handling there. Now the only ChannelMonitorUpdates which are stored in Channel are those which are explicitly blocked, which requires the async pipeline.

Because we don't support async monitor update users downgrading to 0.0.115 or lower, we move to persisting them via an even TLV. As the odd TLV storage has not yet been released, we can do so trivially.

Fixes#2317.

In 9dfe42c,
`ChannelMonitorUpdate`s were stored in `Channel` while they were
being processed. Because it was possible (though highly unlikely,
due to various locking likely blocking persistence) an update was
in-flight (even synchronously) when a `ChannelManager` was
persisted, the new updates were persisted via an odd TLV.
However, in 4041f08 these pending
monitor updates were moved to `ChannelManager`, with appropriate
handling there. Now the only `ChannelMonitorUpdate`s which are
stored in `Channel` are those which are explicitly blocked, which
requires the async pipeline.
Because we don't support async monitor update users downgrading to
0.0.115 or lower, we move to persisting them via an even TLV. As
the odd TLV storage has not yet been released, we can do so
trivially.
Fixeslightningdevkit#2317.
@TheBlueMattTheBlueMatt added this to the 0.0.116 milestone Jul 5, 2023

@valentinewallacevalentinewallace left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Could you remind me why it was OK that this was odd before? Not quite getting the commit message explanation. Is it because a previous version would just end up force closing due to stale monitors, lacking the pending updates to fill in the gap?

Otherwise LGTM.

Comment threadlightning/src/ln/channel.rs
@jkczyz
jkczyz self-requested a review July 6, 2023 15:54
@TheBlueMatt

Copy link
Copy Markdown
CollaboratorAuthor

I was previously worried about the field holding monitor updates which were in-flight doing a regular sync persistence and getting serialized. (a) I think that worry was overblown cause we should always be holding the global consistency lock anyway, and (b) its definitely not true now since we never store any monitor updates in the channel anymore unless they're blocked (which they wont be until 117), and the ones that are stored in-flight in the manager are in an even TLV cause they're always in the global consistency lock.

@valentinewallace
valentinewallace merged commit e40b6ae into lightningdevkit:mainJul 7, 2023
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Make Channel::pending_monitor_updates TLV even

3 participants

@TheBlueMatt@jkczyz@valentinewallace
, '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

Move Channel's blocked monitor updates vec to an even TLV - #2392

Merged
valentinewallace merged 1 commit into
lightningdevkit:mainfrom
TheBlueMatt:2023-07-async-mon-even-tlv
Jul 7, 2023
Merged

Move Channel's blocked monitor updates vec to an even TLV#2392
valentinewallace merged 1 commit into
lightningdevkit:mainfrom
TheBlueMatt:2023-07-async-mon-even-tlv

Conversation

@TheBlueMatt

Copy link
Copy Markdown
Collaborator

In 9dfe42c,
ChannelMonitorUpdates were stored in Channel while they were being processed. Because it was possible (though highly unlikely, due to various locking likely blocking persistence) an update was in-flight (even synchronously) when a ChannelManager was persisted, the new updates were persisted via an odd TLV.

However, in 4041f08 these pending monitor updates were moved to ChannelManager, with appropriate handling there. Now the only ChannelMonitorUpdates which are stored in Channel are those which are explicitly blocked, which requires the async pipeline.

Because we don't support async monitor update users downgrading to 0.0.115 or lower, we move to persisting them via an even TLV. As the odd TLV storage has not yet been released, we can do so trivially.

Fixes#2317.

In 9dfe42c,
`ChannelMonitorUpdate`s were stored in `Channel` while they were
being processed. Because it was possible (though highly unlikely,
due to various locking likely blocking persistence) an update was
in-flight (even synchronously) when a `ChannelManager` was
persisted, the new updates were persisted via an odd TLV.
However, in 4041f08 these pending
monitor updates were moved to `ChannelManager`, with appropriate
handling there. Now the only `ChannelMonitorUpdate`s which are
stored in `Channel` are those which are explicitly blocked, which
requires the async pipeline.
Because we don't support async monitor update users downgrading to
0.0.115 or lower, we move to persisting them via an even TLV. As
the odd TLV storage has not yet been released, we can do so
trivially.
Fixeslightningdevkit#2317.
@TheBlueMattTheBlueMatt added this to the 0.0.116 milestone Jul 5, 2023

@valentinewallacevalentinewallace left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Could you remind me why it was OK that this was odd before? Not quite getting the commit message explanation. Is it because a previous version would just end up force closing due to stale monitors, lacking the pending updates to fill in the gap?

Otherwise LGTM.

Comment threadlightning/src/ln/channel.rs
@jkczyz
jkczyz self-requested a review July 6, 2023 15:54
@TheBlueMatt

Copy link
Copy Markdown
CollaboratorAuthor

I was previously worried about the field holding monitor updates which were in-flight doing a regular sync persistence and getting serialized. (a) I think that worry was overblown cause we should always be holding the global consistency lock anyway, and (b) its definitely not true now since we never store any monitor updates in the channel anymore unless they're blocked (which they wont be until 117), and the ones that are stored in-flight in the manager are in an even TLV cause they're always in the global consistency lock.

@valentinewallace
valentinewallace merged commit e40b6ae into lightningdevkit:mainJul 7, 2023
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Make Channel::pending_monitor_updates TLV even

3 participants

@TheBlueMatt@jkczyz@valentinewallace
, '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

Move Channel's blocked monitor updates vec to an even TLV - #2392

Merged
valentinewallace merged 1 commit into
lightningdevkit:mainfrom
TheBlueMatt:2023-07-async-mon-even-tlv
Jul 7, 2023
Merged

Move Channel's blocked monitor updates vec to an even TLV#2392
valentinewallace merged 1 commit into
lightningdevkit:mainfrom
TheBlueMatt:2023-07-async-mon-even-tlv

Conversation

@TheBlueMatt

Copy link
Copy Markdown
Collaborator

In 9dfe42c,
ChannelMonitorUpdates were stored in Channel while they were being processed. Because it was possible (though highly unlikely, due to various locking likely blocking persistence) an update was in-flight (even synchronously) when a ChannelManager was persisted, the new updates were persisted via an odd TLV.

However, in 4041f08 these pending monitor updates were moved to ChannelManager, with appropriate handling there. Now the only ChannelMonitorUpdates which are stored in Channel are those which are explicitly blocked, which requires the async pipeline.

Because we don't support async monitor update users downgrading to 0.0.115 or lower, we move to persisting them via an even TLV. As the odd TLV storage has not yet been released, we can do so trivially.

Fixes#2317.

In 9dfe42c,
`ChannelMonitorUpdate`s were stored in `Channel` while they were
being processed. Because it was possible (though highly unlikely,
due to various locking likely blocking persistence) an update was
in-flight (even synchronously) when a `ChannelManager` was
persisted, the new updates were persisted via an odd TLV.
However, in 4041f08 these pending
monitor updates were moved to `ChannelManager`, with appropriate
handling there. Now the only `ChannelMonitorUpdate`s which are
stored in `Channel` are those which are explicitly blocked, which
requires the async pipeline.
Because we don't support async monitor update users downgrading to
0.0.115 or lower, we move to persisting them via an even TLV. As
the odd TLV storage has not yet been released, we can do so
trivially.
Fixeslightningdevkit#2317.
@TheBlueMattTheBlueMatt added this to the 0.0.116 milestone Jul 5, 2023

@valentinewallacevalentinewallace left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Could you remind me why it was OK that this was odd before? Not quite getting the commit message explanation. Is it because a previous version would just end up force closing due to stale monitors, lacking the pending updates to fill in the gap?

Otherwise LGTM.

Comment threadlightning/src/ln/channel.rs
@jkczyz
jkczyz self-requested a review July 6, 2023 15:54
@TheBlueMatt

Copy link
Copy Markdown
CollaboratorAuthor

I was previously worried about the field holding monitor updates which were in-flight doing a regular sync persistence and getting serialized. (a) I think that worry was overblown cause we should always be holding the global consistency lock anyway, and (b) its definitely not true now since we never store any monitor updates in the channel anymore unless they're blocked (which they wont be until 117), and the ones that are stored in-flight in the manager are in an even TLV cause they're always in the global consistency lock.

@valentinewallace
valentinewallace merged commit e40b6ae into lightningdevkit:mainJul 7, 2023
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Make Channel::pending_monitor_updates TLV even

3 participants

@TheBlueMatt@jkczyz@valentinewallace