Drop dep tokio's io-util feat as it broke MSRV and isn't useful - #2537

Merged
TheBlueMatt merged 2 commits into
lightningdevkit:mainfrom
TheBlueMatt:2023-08-one-less-feature-dep
Aug 29, 2023
Merged

Drop dep tokio's io-util feat as it broke MSRV and isn't useful#2537
TheBlueMatt merged 2 commits into
lightningdevkit:mainfrom
TheBlueMatt:2023-08-one-less-feature-dep

Conversation

@TheBlueMatt

Copy link
Copy Markdown
Collaborator

We use tokio's io-util feature to provide the
Async{Read,Write}Ext traits, which allow us to simply launch a read future or poll_write directly as well as split the TcpStream into a read/write half. However, these traits aren't actually doing much for us - they are really just wrapping the readable future (which we can trivially use ourselves) and poll_write isn't doing anything for us that poll_write_ready can't.

Similarly, the split logic is actually just Arcing the TcpStream and busy-waiting when an operation is busy to prevent concurrent reads/writes. However, there's no reason to prevent concurrent access at the stream level - we aren't ever concurrently writing or reading (though we may concurrently read and write, which is fine).

Worse, the io-util feature broke MSRV (though they're likely to fix this upstream) and carries two additional dependencies (only one on the latest upstream tokio).

Thus, we simply drop the dependency here.

Fixes#2527.

@TheBlueMatt

Copy link
Copy Markdown
CollaboratorAuthor

Oops, also had to test-only pin memchr anyway cause regex uses it, but that's okay, this PR still removes the dependency on bytes, and memchr on older tokio in non-dev environments.

@jkczyz

Copy link
Copy Markdown
Contributor

CI still unhappy 😭

+ cargo check --verbose --color always
Updating crates.io index
Updating git repository `[https://github.com/arik-so/rust-musig2`](https://github.com/arik-so/rust-musig2%60)
Downloading crates ...
Downloaded memchr v2.6.0
error: failed to parse manifest at `/home/runner/.cargo/registry/src/github.com-1ecc6299db9ec823/memchr-2.6.0/Cargo.toml`
Caused by:
failed to parse the `edition` key
Caused by:
this version of Cargo is older than the `2021` edition, and only supports `2015` and `2018` editions.
Error: Process completed with exit code 101.

Comment threadlightning-net-tokio/src/lib.rs Outdated
@TheBlueMatt

Copy link
Copy Markdown
CollaboratorAuthor

@TheBlueMatt
TheBlueMattforce-pushed the 2023-08-one-less-feature-dep branch from 1046f33 to 97b6c6fCompareAugust 28, 2023 21:07
@TheBlueMatt

Copy link
Copy Markdown
CollaboratorAuthor

In any case, IMO we should still land this while we work through core2.

@wpaulino

Copy link
Copy Markdown
Contributor

Feel free to squash, LGTM

@jkczyzjkczyz 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.

LGTM

Comment threadlightning-net-tokio/src/lib.rs Outdated
We use `tokio`'s `io-util` feature to provide the
`Async{Read,Write}Ext` traits, which allow us to simply launch a
read future or `poll_write` directly as well as `split` the
`TcpStream` into a read/write half. However, these traits aren't
actually doing much for us - they are really just wrapping the
`readable` future (which we can trivially use ourselves) and
`poll_write` isn't doing anything for us that `poll_write_ready`
can't.
Similarly, the split logic is actually just `Arc`ing the
`TcpStream` and busy-waiting when an operation is busy to prevent
concurrent reads/writes. However, there's no reason to prevent
concurrent access at the stream level - we aren't ever concurrently
writing or reading (though we may concurrently read and write,
which is fine).
Worse, the `io-util` feature broke MSRV (though they're likely to
fix this upstream) and carries two additional dependencies (only
one on the latest upstream tokio).
Thus, we simply drop the dependency here.
Fixeslightningdevkit#2527.
@TheBlueMatt
TheBlueMattforce-pushed the 2023-08-one-less-feature-dep branch from 97b6c6f to afc5a02CompareAugust 28, 2023 21:16
@TheBlueMatt

Copy link
Copy Markdown
CollaboratorAuthor

Squashed with the one extra space removed:

$ git diff-tree -U1 97b6c6f6 afc5a02f
diff --git a/lightning-net-tokio/src/lib.rs b/lightning-net-tokio/src/lib.rs
index 55906c64f..6e2ea3f14 100644
--- a/lightning-net-tokio/src/lib.rs
+++ b/lightning-net-tokio/src/lib.rs
@@ -467,3 +467,3 @@ impl peer_handler::SocketDescriptor for SocketDescriptor {
// there's room in the kernel buffer, or otherwise create a new Waker with a
- // SocketDescriptor in it which can wake up the write_avail Sender, waking up the
+ // SocketDescriptor in it which can wake up the write_avail Sender, waking up the
// processing future which will call write_buffer_space_avail and we'll end up back here.
$ 

@TheBlueMatt
TheBlueMatt merged commit e57fbba into lightningdevkit:mainAug 29, 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.

CI failures running Rust 1.48 and 1.49 on ubuntu-latest and windows-latest

3 participants

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

Drop dep tokio's io-util feat as it broke MSRV and isn't useful - #2537

Merged
TheBlueMatt merged 2 commits into
lightningdevkit:mainfrom
TheBlueMatt:2023-08-one-less-feature-dep
Aug 29, 2023
Merged

Drop dep tokio's io-util feat as it broke MSRV and isn't useful#2537
TheBlueMatt merged 2 commits into
lightningdevkit:mainfrom
TheBlueMatt:2023-08-one-less-feature-dep

Conversation

@TheBlueMatt

Copy link
Copy Markdown
Collaborator

We use tokio's io-util feature to provide the
Async{Read,Write}Ext traits, which allow us to simply launch a read future or poll_write directly as well as split the TcpStream into a read/write half. However, these traits aren't actually doing much for us - they are really just wrapping the readable future (which we can trivially use ourselves) and poll_write isn't doing anything for us that poll_write_ready can't.

Similarly, the split logic is actually just Arcing the TcpStream and busy-waiting when an operation is busy to prevent concurrent reads/writes. However, there's no reason to prevent concurrent access at the stream level - we aren't ever concurrently writing or reading (though we may concurrently read and write, which is fine).

Worse, the io-util feature broke MSRV (though they're likely to fix this upstream) and carries two additional dependencies (only one on the latest upstream tokio).

Thus, we simply drop the dependency here.

Fixes#2527.

@TheBlueMatt

Copy link
Copy Markdown
CollaboratorAuthor

Oops, also had to test-only pin memchr anyway cause regex uses it, but that's okay, this PR still removes the dependency on bytes, and memchr on older tokio in non-dev environments.

@jkczyz

Copy link
Copy Markdown
Contributor

CI still unhappy 😭

+ cargo check --verbose --color always
Updating crates.io index
Updating git repository `[https://github.com/arik-so/rust-musig2`](https://github.com/arik-so/rust-musig2%60)
Downloading crates ...
Downloaded memchr v2.6.0
error: failed to parse manifest at `/home/runner/.cargo/registry/src/github.com-1ecc6299db9ec823/memchr-2.6.0/Cargo.toml`
Caused by:
failed to parse the `edition` key
Caused by:
this version of Cargo is older than the `2021` edition, and only supports `2015` and `2018` editions.
Error: Process completed with exit code 101.

Comment threadlightning-net-tokio/src/lib.rs Outdated
@TheBlueMatt

Copy link
Copy Markdown
CollaboratorAuthor

@TheBlueMatt
TheBlueMattforce-pushed the 2023-08-one-less-feature-dep branch from 1046f33 to 97b6c6fCompareAugust 28, 2023 21:07
@TheBlueMatt

Copy link
Copy Markdown
CollaboratorAuthor

In any case, IMO we should still land this while we work through core2.

@wpaulino

Copy link
Copy Markdown
Contributor

Feel free to squash, LGTM

@jkczyzjkczyz 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.

LGTM

Comment threadlightning-net-tokio/src/lib.rs Outdated
We use `tokio`'s `io-util` feature to provide the
`Async{Read,Write}Ext` traits, which allow us to simply launch a
read future or `poll_write` directly as well as `split` the
`TcpStream` into a read/write half. However, these traits aren't
actually doing much for us - they are really just wrapping the
`readable` future (which we can trivially use ourselves) and
`poll_write` isn't doing anything for us that `poll_write_ready`
can't.
Similarly, the split logic is actually just `Arc`ing the
`TcpStream` and busy-waiting when an operation is busy to prevent
concurrent reads/writes. However, there's no reason to prevent
concurrent access at the stream level - we aren't ever concurrently
writing or reading (though we may concurrently read and write,
which is fine).
Worse, the `io-util` feature broke MSRV (though they're likely to
fix this upstream) and carries two additional dependencies (only
one on the latest upstream tokio).
Thus, we simply drop the dependency here.
Fixeslightningdevkit#2527.
@TheBlueMatt
TheBlueMattforce-pushed the 2023-08-one-less-feature-dep branch from 97b6c6f to afc5a02CompareAugust 28, 2023 21:16
@TheBlueMatt

Copy link
Copy Markdown
CollaboratorAuthor

Squashed with the one extra space removed:

$ git diff-tree -U1 97b6c6f6 afc5a02f
diff --git a/lightning-net-tokio/src/lib.rs b/lightning-net-tokio/src/lib.rs
index 55906c64f..6e2ea3f14 100644
--- a/lightning-net-tokio/src/lib.rs
+++ b/lightning-net-tokio/src/lib.rs
@@ -467,3 +467,3 @@ impl peer_handler::SocketDescriptor for SocketDescriptor {
// there's room in the kernel buffer, or otherwise create a new Waker with a
- // SocketDescriptor in it which can wake up the write_avail Sender, waking up the
+ // SocketDescriptor in it which can wake up the write_avail Sender, waking up the
// processing future which will call write_buffer_space_avail and we'll end up back here.
$ 

@TheBlueMatt
TheBlueMatt merged commit e57fbba into lightningdevkit:mainAug 29, 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.

CI failures running Rust 1.48 and 1.49 on ubuntu-latest and windows-latest

3 participants

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

Drop dep tokio's io-util feat as it broke MSRV and isn't useful - #2537

Merged
TheBlueMatt merged 2 commits into
lightningdevkit:mainfrom
TheBlueMatt:2023-08-one-less-feature-dep
Aug 29, 2023
Merged

Drop dep tokio's io-util feat as it broke MSRV and isn't useful#2537
TheBlueMatt merged 2 commits into
lightningdevkit:mainfrom
TheBlueMatt:2023-08-one-less-feature-dep

Conversation

@TheBlueMatt

Copy link
Copy Markdown
Collaborator

We use tokio's io-util feature to provide the
Async{Read,Write}Ext traits, which allow us to simply launch a read future or poll_write directly as well as split the TcpStream into a read/write half. However, these traits aren't actually doing much for us - they are really just wrapping the readable future (which we can trivially use ourselves) and poll_write isn't doing anything for us that poll_write_ready can't.

Similarly, the split logic is actually just Arcing the TcpStream and busy-waiting when an operation is busy to prevent concurrent reads/writes. However, there's no reason to prevent concurrent access at the stream level - we aren't ever concurrently writing or reading (though we may concurrently read and write, which is fine).

Worse, the io-util feature broke MSRV (though they're likely to fix this upstream) and carries two additional dependencies (only one on the latest upstream tokio).

Thus, we simply drop the dependency here.

Fixes#2527.

@TheBlueMatt

Copy link
Copy Markdown
CollaboratorAuthor

Oops, also had to test-only pin memchr anyway cause regex uses it, but that's okay, this PR still removes the dependency on bytes, and memchr on older tokio in non-dev environments.

@jkczyz

Copy link
Copy Markdown
Contributor

CI still unhappy 😭

+ cargo check --verbose --color always
Updating crates.io index
Updating git repository `[https://github.com/arik-so/rust-musig2`](https://github.com/arik-so/rust-musig2%60)
Downloading crates ...
Downloaded memchr v2.6.0
error: failed to parse manifest at `/home/runner/.cargo/registry/src/github.com-1ecc6299db9ec823/memchr-2.6.0/Cargo.toml`
Caused by:
failed to parse the `edition` key
Caused by:
this version of Cargo is older than the `2021` edition, and only supports `2015` and `2018` editions.
Error: Process completed with exit code 101.

Comment threadlightning-net-tokio/src/lib.rs Outdated
@TheBlueMatt

Copy link
Copy Markdown
CollaboratorAuthor

@TheBlueMatt
TheBlueMattforce-pushed the 2023-08-one-less-feature-dep branch from 1046f33 to 97b6c6fCompareAugust 28, 2023 21:07
@TheBlueMatt

Copy link
Copy Markdown
CollaboratorAuthor

In any case, IMO we should still land this while we work through core2.

@wpaulino

Copy link
Copy Markdown
Contributor

Feel free to squash, LGTM

@jkczyzjkczyz 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.

LGTM

Comment threadlightning-net-tokio/src/lib.rs Outdated
We use `tokio`'s `io-util` feature to provide the
`Async{Read,Write}Ext` traits, which allow us to simply launch a
read future or `poll_write` directly as well as `split` the
`TcpStream` into a read/write half. However, these traits aren't
actually doing much for us - they are really just wrapping the
`readable` future (which we can trivially use ourselves) and
`poll_write` isn't doing anything for us that `poll_write_ready`
can't.
Similarly, the split logic is actually just `Arc`ing the
`TcpStream` and busy-waiting when an operation is busy to prevent
concurrent reads/writes. However, there's no reason to prevent
concurrent access at the stream level - we aren't ever concurrently
writing or reading (though we may concurrently read and write,
which is fine).
Worse, the `io-util` feature broke MSRV (though they're likely to
fix this upstream) and carries two additional dependencies (only
one on the latest upstream tokio).
Thus, we simply drop the dependency here.
Fixeslightningdevkit#2527.
@TheBlueMatt
TheBlueMattforce-pushed the 2023-08-one-less-feature-dep branch from 97b6c6f to afc5a02CompareAugust 28, 2023 21:16
@TheBlueMatt

Copy link
Copy Markdown
CollaboratorAuthor

Squashed with the one extra space removed:

$ git diff-tree -U1 97b6c6f6 afc5a02f
diff --git a/lightning-net-tokio/src/lib.rs b/lightning-net-tokio/src/lib.rs
index 55906c64f..6e2ea3f14 100644
--- a/lightning-net-tokio/src/lib.rs
+++ b/lightning-net-tokio/src/lib.rs
@@ -467,3 +467,3 @@ impl peer_handler::SocketDescriptor for SocketDescriptor {
// there's room in the kernel buffer, or otherwise create a new Waker with a
- // SocketDescriptor in it which can wake up the write_avail Sender, waking up the
+ // SocketDescriptor in it which can wake up the write_avail Sender, waking up the
// processing future which will call write_buffer_space_avail and we'll end up back here.
$ 

@TheBlueMatt
TheBlueMatt merged commit e57fbba into lightningdevkit:mainAug 29, 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.

CI failures running Rust 1.48 and 1.49 on ubuntu-latest and windows-latest

3 participants

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

Drop dep tokio's io-util feat as it broke MSRV and isn't useful - #2537

Merged
TheBlueMatt merged 2 commits into
lightningdevkit:mainfrom
TheBlueMatt:2023-08-one-less-feature-dep
Aug 29, 2023
Merged

Drop dep tokio's io-util feat as it broke MSRV and isn't useful#2537
TheBlueMatt merged 2 commits into
lightningdevkit:mainfrom
TheBlueMatt:2023-08-one-less-feature-dep

Conversation

@TheBlueMatt

Copy link
Copy Markdown
Collaborator

We use tokio's io-util feature to provide the
Async{Read,Write}Ext traits, which allow us to simply launch a read future or poll_write directly as well as split the TcpStream into a read/write half. However, these traits aren't actually doing much for us - they are really just wrapping the readable future (which we can trivially use ourselves) and poll_write isn't doing anything for us that poll_write_ready can't.

Similarly, the split logic is actually just Arcing the TcpStream and busy-waiting when an operation is busy to prevent concurrent reads/writes. However, there's no reason to prevent concurrent access at the stream level - we aren't ever concurrently writing or reading (though we may concurrently read and write, which is fine).

Worse, the io-util feature broke MSRV (though they're likely to fix this upstream) and carries two additional dependencies (only one on the latest upstream tokio).

Thus, we simply drop the dependency here.

Fixes#2527.

@TheBlueMatt

Copy link
Copy Markdown
CollaboratorAuthor

Oops, also had to test-only pin memchr anyway cause regex uses it, but that's okay, this PR still removes the dependency on bytes, and memchr on older tokio in non-dev environments.

@jkczyz

Copy link
Copy Markdown
Contributor

CI still unhappy 😭

+ cargo check --verbose --color always
Updating crates.io index
Updating git repository `[https://github.com/arik-so/rust-musig2`](https://github.com/arik-so/rust-musig2%60)
Downloading crates ...
Downloaded memchr v2.6.0
error: failed to parse manifest at `/home/runner/.cargo/registry/src/github.com-1ecc6299db9ec823/memchr-2.6.0/Cargo.toml`
Caused by:
failed to parse the `edition` key
Caused by:
this version of Cargo is older than the `2021` edition, and only supports `2015` and `2018` editions.
Error: Process completed with exit code 101.

Comment threadlightning-net-tokio/src/lib.rs Outdated
@TheBlueMatt

Copy link
Copy Markdown
CollaboratorAuthor

@TheBlueMatt
TheBlueMattforce-pushed the 2023-08-one-less-feature-dep branch from 1046f33 to 97b6c6fCompareAugust 28, 2023 21:07
@TheBlueMatt

Copy link
Copy Markdown
CollaboratorAuthor

In any case, IMO we should still land this while we work through core2.

@wpaulino

Copy link
Copy Markdown
Contributor

Feel free to squash, LGTM

@jkczyzjkczyz 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.

LGTM

Comment threadlightning-net-tokio/src/lib.rs Outdated
We use `tokio`'s `io-util` feature to provide the
`Async{Read,Write}Ext` traits, which allow us to simply launch a
read future or `poll_write` directly as well as `split` the
`TcpStream` into a read/write half. However, these traits aren't
actually doing much for us - they are really just wrapping the
`readable` future (which we can trivially use ourselves) and
`poll_write` isn't doing anything for us that `poll_write_ready`
can't.
Similarly, the split logic is actually just `Arc`ing the
`TcpStream` and busy-waiting when an operation is busy to prevent
concurrent reads/writes. However, there's no reason to prevent
concurrent access at the stream level - we aren't ever concurrently
writing or reading (though we may concurrently read and write,
which is fine).
Worse, the `io-util` feature broke MSRV (though they're likely to
fix this upstream) and carries two additional dependencies (only
one on the latest upstream tokio).
Thus, we simply drop the dependency here.
Fixeslightningdevkit#2527.
@TheBlueMatt
TheBlueMattforce-pushed the 2023-08-one-less-feature-dep branch from 97b6c6f to afc5a02CompareAugust 28, 2023 21:16
@TheBlueMatt

Copy link
Copy Markdown
CollaboratorAuthor

Squashed with the one extra space removed:

$ git diff-tree -U1 97b6c6f6 afc5a02f
diff --git a/lightning-net-tokio/src/lib.rs b/lightning-net-tokio/src/lib.rs
index 55906c64f..6e2ea3f14 100644
--- a/lightning-net-tokio/src/lib.rs
+++ b/lightning-net-tokio/src/lib.rs
@@ -467,3 +467,3 @@ impl peer_handler::SocketDescriptor for SocketDescriptor {
// there's room in the kernel buffer, or otherwise create a new Waker with a
- // SocketDescriptor in it which can wake up the write_avail Sender, waking up the
+ // SocketDescriptor in it which can wake up the write_avail Sender, waking up the
// processing future which will call write_buffer_space_avail and we'll end up back here.
$ 

@TheBlueMatt
TheBlueMatt merged commit e57fbba into lightningdevkit:mainAug 29, 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.

CI failures running Rust 1.48 and 1.49 on ubuntu-latest and windows-latest

3 participants

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

Drop dep tokio's io-util feat as it broke MSRV and isn't useful - #2537

Merged
TheBlueMatt merged 2 commits into
lightningdevkit:mainfrom
TheBlueMatt:2023-08-one-less-feature-dep
Aug 29, 2023
Merged

Drop dep tokio's io-util feat as it broke MSRV and isn't useful#2537
TheBlueMatt merged 2 commits into
lightningdevkit:mainfrom
TheBlueMatt:2023-08-one-less-feature-dep

Conversation

@TheBlueMatt

Copy link
Copy Markdown
Collaborator

We use tokio's io-util feature to provide the
Async{Read,Write}Ext traits, which allow us to simply launch a read future or poll_write directly as well as split the TcpStream into a read/write half. However, these traits aren't actually doing much for us - they are really just wrapping the readable future (which we can trivially use ourselves) and poll_write isn't doing anything for us that poll_write_ready can't.

Similarly, the split logic is actually just Arcing the TcpStream and busy-waiting when an operation is busy to prevent concurrent reads/writes. However, there's no reason to prevent concurrent access at the stream level - we aren't ever concurrently writing or reading (though we may concurrently read and write, which is fine).

Worse, the io-util feature broke MSRV (though they're likely to fix this upstream) and carries two additional dependencies (only one on the latest upstream tokio).

Thus, we simply drop the dependency here.

Fixes#2527.

@TheBlueMatt

Copy link
Copy Markdown
CollaboratorAuthor

Oops, also had to test-only pin memchr anyway cause regex uses it, but that's okay, this PR still removes the dependency on bytes, and memchr on older tokio in non-dev environments.

@jkczyz

Copy link
Copy Markdown
Contributor

CI still unhappy 😭

+ cargo check --verbose --color always
Updating crates.io index
Updating git repository `[https://github.com/arik-so/rust-musig2`](https://github.com/arik-so/rust-musig2%60)
Downloading crates ...
Downloaded memchr v2.6.0
error: failed to parse manifest at `/home/runner/.cargo/registry/src/github.com-1ecc6299db9ec823/memchr-2.6.0/Cargo.toml`
Caused by:
failed to parse the `edition` key
Caused by:
this version of Cargo is older than the `2021` edition, and only supports `2015` and `2018` editions.
Error: Process completed with exit code 101.

Comment threadlightning-net-tokio/src/lib.rs Outdated
@TheBlueMatt

Copy link
Copy Markdown
CollaboratorAuthor

@TheBlueMatt
TheBlueMattforce-pushed the 2023-08-one-less-feature-dep branch from 1046f33 to 97b6c6fCompareAugust 28, 2023 21:07
@TheBlueMatt

Copy link
Copy Markdown
CollaboratorAuthor

In any case, IMO we should still land this while we work through core2.

@wpaulino

Copy link
Copy Markdown
Contributor

Feel free to squash, LGTM

@jkczyzjkczyz 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.

LGTM

Comment threadlightning-net-tokio/src/lib.rs Outdated
We use `tokio`'s `io-util` feature to provide the
`Async{Read,Write}Ext` traits, which allow us to simply launch a
read future or `poll_write` directly as well as `split` the
`TcpStream` into a read/write half. However, these traits aren't
actually doing much for us - they are really just wrapping the
`readable` future (which we can trivially use ourselves) and
`poll_write` isn't doing anything for us that `poll_write_ready`
can't.
Similarly, the split logic is actually just `Arc`ing the
`TcpStream` and busy-waiting when an operation is busy to prevent
concurrent reads/writes. However, there's no reason to prevent
concurrent access at the stream level - we aren't ever concurrently
writing or reading (though we may concurrently read and write,
which is fine).
Worse, the `io-util` feature broke MSRV (though they're likely to
fix this upstream) and carries two additional dependencies (only
one on the latest upstream tokio).
Thus, we simply drop the dependency here.
Fixeslightningdevkit#2527.
@TheBlueMatt
TheBlueMattforce-pushed the 2023-08-one-less-feature-dep branch from 97b6c6f to afc5a02CompareAugust 28, 2023 21:16
@TheBlueMatt

Copy link
Copy Markdown
CollaboratorAuthor

Squashed with the one extra space removed:

$ git diff-tree -U1 97b6c6f6 afc5a02f
diff --git a/lightning-net-tokio/src/lib.rs b/lightning-net-tokio/src/lib.rs
index 55906c64f..6e2ea3f14 100644
--- a/lightning-net-tokio/src/lib.rs
+++ b/lightning-net-tokio/src/lib.rs
@@ -467,3 +467,3 @@ impl peer_handler::SocketDescriptor for SocketDescriptor {
// there's room in the kernel buffer, or otherwise create a new Waker with a
- // SocketDescriptor in it which can wake up the write_avail Sender, waking up the
+ // SocketDescriptor in it which can wake up the write_avail Sender, waking up the
// processing future which will call write_buffer_space_avail and we'll end up back here.
$ 

@TheBlueMatt
TheBlueMatt merged commit e57fbba into lightningdevkit:mainAug 29, 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.

CI failures running Rust 1.48 and 1.49 on ubuntu-latest and windows-latest

3 participants

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

Drop dep tokio's io-util feat as it broke MSRV and isn't useful - #2537

Merged
TheBlueMatt merged 2 commits into
lightningdevkit:mainfrom
TheBlueMatt:2023-08-one-less-feature-dep
Aug 29, 2023
Merged

Drop dep tokio's io-util feat as it broke MSRV and isn't useful#2537
TheBlueMatt merged 2 commits into
lightningdevkit:mainfrom
TheBlueMatt:2023-08-one-less-feature-dep

Conversation

@TheBlueMatt

Copy link
Copy Markdown
Collaborator

We use tokio's io-util feature to provide the
Async{Read,Write}Ext traits, which allow us to simply launch a read future or poll_write directly as well as split the TcpStream into a read/write half. However, these traits aren't actually doing much for us - they are really just wrapping the readable future (which we can trivially use ourselves) and poll_write isn't doing anything for us that poll_write_ready can't.

Similarly, the split logic is actually just Arcing the TcpStream and busy-waiting when an operation is busy to prevent concurrent reads/writes. However, there's no reason to prevent concurrent access at the stream level - we aren't ever concurrently writing or reading (though we may concurrently read and write, which is fine).

Worse, the io-util feature broke MSRV (though they're likely to fix this upstream) and carries two additional dependencies (only one on the latest upstream tokio).

Thus, we simply drop the dependency here.

Fixes#2527.

@TheBlueMatt

Copy link
Copy Markdown
CollaboratorAuthor

Oops, also had to test-only pin memchr anyway cause regex uses it, but that's okay, this PR still removes the dependency on bytes, and memchr on older tokio in non-dev environments.

@jkczyz

Copy link
Copy Markdown
Contributor

CI still unhappy 😭

+ cargo check --verbose --color always
Updating crates.io index
Updating git repository `[https://github.com/arik-so/rust-musig2`](https://github.com/arik-so/rust-musig2%60)
Downloading crates ...
Downloaded memchr v2.6.0
error: failed to parse manifest at `/home/runner/.cargo/registry/src/github.com-1ecc6299db9ec823/memchr-2.6.0/Cargo.toml`
Caused by:
failed to parse the `edition` key
Caused by:
this version of Cargo is older than the `2021` edition, and only supports `2015` and `2018` editions.
Error: Process completed with exit code 101.

Comment threadlightning-net-tokio/src/lib.rs Outdated
@TheBlueMatt

Copy link
Copy Markdown
CollaboratorAuthor

@TheBlueMatt
TheBlueMattforce-pushed the 2023-08-one-less-feature-dep branch from 1046f33 to 97b6c6fCompareAugust 28, 2023 21:07
@TheBlueMatt

Copy link
Copy Markdown
CollaboratorAuthor

In any case, IMO we should still land this while we work through core2.

@wpaulino

Copy link
Copy Markdown
Contributor

Feel free to squash, LGTM

@jkczyzjkczyz 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.

LGTM

Comment threadlightning-net-tokio/src/lib.rs Outdated
We use `tokio`'s `io-util` feature to provide the
`Async{Read,Write}Ext` traits, which allow us to simply launch a
read future or `poll_write` directly as well as `split` the
`TcpStream` into a read/write half. However, these traits aren't
actually doing much for us - they are really just wrapping the
`readable` future (which we can trivially use ourselves) and
`poll_write` isn't doing anything for us that `poll_write_ready`
can't.
Similarly, the split logic is actually just `Arc`ing the
`TcpStream` and busy-waiting when an operation is busy to prevent
concurrent reads/writes. However, there's no reason to prevent
concurrent access at the stream level - we aren't ever concurrently
writing or reading (though we may concurrently read and write,
which is fine).
Worse, the `io-util` feature broke MSRV (though they're likely to
fix this upstream) and carries two additional dependencies (only
one on the latest upstream tokio).
Thus, we simply drop the dependency here.
Fixeslightningdevkit#2527.
@TheBlueMatt
TheBlueMattforce-pushed the 2023-08-one-less-feature-dep branch from 97b6c6f to afc5a02CompareAugust 28, 2023 21:16
@TheBlueMatt

Copy link
Copy Markdown
CollaboratorAuthor

Squashed with the one extra space removed:

$ git diff-tree -U1 97b6c6f6 afc5a02f
diff --git a/lightning-net-tokio/src/lib.rs b/lightning-net-tokio/src/lib.rs
index 55906c64f..6e2ea3f14 100644
--- a/lightning-net-tokio/src/lib.rs
+++ b/lightning-net-tokio/src/lib.rs
@@ -467,3 +467,3 @@ impl peer_handler::SocketDescriptor for SocketDescriptor {
// there's room in the kernel buffer, or otherwise create a new Waker with a
- // SocketDescriptor in it which can wake up the write_avail Sender, waking up the
+ // SocketDescriptor in it which can wake up the write_avail Sender, waking up the
// processing future which will call write_buffer_space_avail and we'll end up back here.
$ 

@TheBlueMatt
TheBlueMatt merged commit e57fbba into lightningdevkit:mainAug 29, 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.

CI failures running Rust 1.48 and 1.49 on ubuntu-latest and windows-latest

3 participants

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

Drop dep tokio's io-util feat as it broke MSRV and isn't useful - #2537

Merged
TheBlueMatt merged 2 commits into
lightningdevkit:mainfrom
TheBlueMatt:2023-08-one-less-feature-dep
Aug 29, 2023
Merged

Drop dep tokio's io-util feat as it broke MSRV and isn't useful#2537
TheBlueMatt merged 2 commits into
lightningdevkit:mainfrom
TheBlueMatt:2023-08-one-less-feature-dep

Conversation

@TheBlueMatt

Copy link
Copy Markdown
Collaborator

We use tokio's io-util feature to provide the
Async{Read,Write}Ext traits, which allow us to simply launch a read future or poll_write directly as well as split the TcpStream into a read/write half. However, these traits aren't actually doing much for us - they are really just wrapping the readable future (which we can trivially use ourselves) and poll_write isn't doing anything for us that poll_write_ready can't.

Similarly, the split logic is actually just Arcing the TcpStream and busy-waiting when an operation is busy to prevent concurrent reads/writes. However, there's no reason to prevent concurrent access at the stream level - we aren't ever concurrently writing or reading (though we may concurrently read and write, which is fine).

Worse, the io-util feature broke MSRV (though they're likely to fix this upstream) and carries two additional dependencies (only one on the latest upstream tokio).

Thus, we simply drop the dependency here.

Fixes#2527.

@TheBlueMatt

Copy link
Copy Markdown
CollaboratorAuthor

Oops, also had to test-only pin memchr anyway cause regex uses it, but that's okay, this PR still removes the dependency on bytes, and memchr on older tokio in non-dev environments.

@jkczyz

Copy link
Copy Markdown
Contributor

CI still unhappy 😭

+ cargo check --verbose --color always
Updating crates.io index
Updating git repository `[https://github.com/arik-so/rust-musig2`](https://github.com/arik-so/rust-musig2%60)
Downloading crates ...
Downloaded memchr v2.6.0
error: failed to parse manifest at `/home/runner/.cargo/registry/src/github.com-1ecc6299db9ec823/memchr-2.6.0/Cargo.toml`
Caused by:
failed to parse the `edition` key
Caused by:
this version of Cargo is older than the `2021` edition, and only supports `2015` and `2018` editions.
Error: Process completed with exit code 101.

Comment threadlightning-net-tokio/src/lib.rs Outdated
@TheBlueMatt

Copy link
Copy Markdown
CollaboratorAuthor

@TheBlueMatt
TheBlueMattforce-pushed the 2023-08-one-less-feature-dep branch from 1046f33 to 97b6c6fCompareAugust 28, 2023 21:07
@TheBlueMatt

Copy link
Copy Markdown
CollaboratorAuthor

In any case, IMO we should still land this while we work through core2.

@wpaulino

Copy link
Copy Markdown
Contributor

Feel free to squash, LGTM

@jkczyzjkczyz 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.

LGTM

Comment threadlightning-net-tokio/src/lib.rs Outdated
We use `tokio`'s `io-util` feature to provide the
`Async{Read,Write}Ext` traits, which allow us to simply launch a
read future or `poll_write` directly as well as `split` the
`TcpStream` into a read/write half. However, these traits aren't
actually doing much for us - they are really just wrapping the
`readable` future (which we can trivially use ourselves) and
`poll_write` isn't doing anything for us that `poll_write_ready`
can't.
Similarly, the split logic is actually just `Arc`ing the
`TcpStream` and busy-waiting when an operation is busy to prevent
concurrent reads/writes. However, there's no reason to prevent
concurrent access at the stream level - we aren't ever concurrently
writing or reading (though we may concurrently read and write,
which is fine).
Worse, the `io-util` feature broke MSRV (though they're likely to
fix this upstream) and carries two additional dependencies (only
one on the latest upstream tokio).
Thus, we simply drop the dependency here.
Fixeslightningdevkit#2527.
@TheBlueMatt
TheBlueMattforce-pushed the 2023-08-one-less-feature-dep branch from 97b6c6f to afc5a02CompareAugust 28, 2023 21:16
@TheBlueMatt

Copy link
Copy Markdown
CollaboratorAuthor

Squashed with the one extra space removed:

$ git diff-tree -U1 97b6c6f6 afc5a02f
diff --git a/lightning-net-tokio/src/lib.rs b/lightning-net-tokio/src/lib.rs
index 55906c64f..6e2ea3f14 100644
--- a/lightning-net-tokio/src/lib.rs
+++ b/lightning-net-tokio/src/lib.rs
@@ -467,3 +467,3 @@ impl peer_handler::SocketDescriptor for SocketDescriptor {
// there's room in the kernel buffer, or otherwise create a new Waker with a
- // SocketDescriptor in it which can wake up the write_avail Sender, waking up the
+ // SocketDescriptor in it which can wake up the write_avail Sender, waking up the
// processing future which will call write_buffer_space_avail and we'll end up back here.
$ 

@TheBlueMatt
TheBlueMatt merged commit e57fbba into lightningdevkit:mainAug 29, 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.

CI failures running Rust 1.48 and 1.49 on ubuntu-latest and windows-latest

3 participants

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

Drop dep tokio's io-util feat as it broke MSRV and isn't useful - #2537

Merged
TheBlueMatt merged 2 commits into
lightningdevkit:mainfrom
TheBlueMatt:2023-08-one-less-feature-dep
Aug 29, 2023
Merged

Drop dep tokio's io-util feat as it broke MSRV and isn't useful#2537
TheBlueMatt merged 2 commits into
lightningdevkit:mainfrom
TheBlueMatt:2023-08-one-less-feature-dep

Conversation

@TheBlueMatt

Copy link
Copy Markdown
Collaborator

We use tokio's io-util feature to provide the
Async{Read,Write}Ext traits, which allow us to simply launch a read future or poll_write directly as well as split the TcpStream into a read/write half. However, these traits aren't actually doing much for us - they are really just wrapping the readable future (which we can trivially use ourselves) and poll_write isn't doing anything for us that poll_write_ready can't.

Similarly, the split logic is actually just Arcing the TcpStream and busy-waiting when an operation is busy to prevent concurrent reads/writes. However, there's no reason to prevent concurrent access at the stream level - we aren't ever concurrently writing or reading (though we may concurrently read and write, which is fine).

Worse, the io-util feature broke MSRV (though they're likely to fix this upstream) and carries two additional dependencies (only one on the latest upstream tokio).

Thus, we simply drop the dependency here.

Fixes#2527.

@TheBlueMatt

Copy link
Copy Markdown
CollaboratorAuthor

Oops, also had to test-only pin memchr anyway cause regex uses it, but that's okay, this PR still removes the dependency on bytes, and memchr on older tokio in non-dev environments.

@jkczyz

Copy link
Copy Markdown
Contributor

CI still unhappy 😭

+ cargo check --verbose --color always
Updating crates.io index
Updating git repository `[https://github.com/arik-so/rust-musig2`](https://github.com/arik-so/rust-musig2%60)
Downloading crates ...
Downloaded memchr v2.6.0
error: failed to parse manifest at `/home/runner/.cargo/registry/src/github.com-1ecc6299db9ec823/memchr-2.6.0/Cargo.toml`
Caused by:
failed to parse the `edition` key
Caused by:
this version of Cargo is older than the `2021` edition, and only supports `2015` and `2018` editions.
Error: Process completed with exit code 101.

Comment threadlightning-net-tokio/src/lib.rs Outdated
@TheBlueMatt

Copy link
Copy Markdown
CollaboratorAuthor

@TheBlueMatt
TheBlueMattforce-pushed the 2023-08-one-less-feature-dep branch from 1046f33 to 97b6c6fCompareAugust 28, 2023 21:07
@TheBlueMatt

Copy link
Copy Markdown
CollaboratorAuthor

In any case, IMO we should still land this while we work through core2.

@wpaulino

Copy link
Copy Markdown
Contributor

Feel free to squash, LGTM

@jkczyzjkczyz 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.

LGTM

Comment threadlightning-net-tokio/src/lib.rs Outdated
We use `tokio`'s `io-util` feature to provide the
`Async{Read,Write}Ext` traits, which allow us to simply launch a
read future or `poll_write` directly as well as `split` the
`TcpStream` into a read/write half. However, these traits aren't
actually doing much for us - they are really just wrapping the
`readable` future (which we can trivially use ourselves) and
`poll_write` isn't doing anything for us that `poll_write_ready`
can't.
Similarly, the split logic is actually just `Arc`ing the
`TcpStream` and busy-waiting when an operation is busy to prevent
concurrent reads/writes. However, there's no reason to prevent
concurrent access at the stream level - we aren't ever concurrently
writing or reading (though we may concurrently read and write,
which is fine).
Worse, the `io-util` feature broke MSRV (though they're likely to
fix this upstream) and carries two additional dependencies (only
one on the latest upstream tokio).
Thus, we simply drop the dependency here.
Fixeslightningdevkit#2527.
@TheBlueMatt
TheBlueMattforce-pushed the 2023-08-one-less-feature-dep branch from 97b6c6f to afc5a02CompareAugust 28, 2023 21:16
@TheBlueMatt

Copy link
Copy Markdown
CollaboratorAuthor

Squashed with the one extra space removed:

$ git diff-tree -U1 97b6c6f6 afc5a02f
diff --git a/lightning-net-tokio/src/lib.rs b/lightning-net-tokio/src/lib.rs
index 55906c64f..6e2ea3f14 100644
--- a/lightning-net-tokio/src/lib.rs
+++ b/lightning-net-tokio/src/lib.rs
@@ -467,3 +467,3 @@ impl peer_handler::SocketDescriptor for SocketDescriptor {
// there's room in the kernel buffer, or otherwise create a new Waker with a
- // SocketDescriptor in it which can wake up the write_avail Sender, waking up the
+ // SocketDescriptor in it which can wake up the write_avail Sender, waking up the
// processing future which will call write_buffer_space_avail and we'll end up back here.
$ 

@TheBlueMatt
TheBlueMatt merged commit e57fbba into lightningdevkit:mainAug 29, 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.

CI failures running Rust 1.48 and 1.49 on ubuntu-latest and windows-latest

3 participants

@TheBlueMatt@jkczyz@wpaulino