<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	>
<channel>
	<title>Comments on: A tetrad of tuneups for bitcoind</title>
	<atom:link href="http://jfxpt.com/2021/a-tetrad-of-tuneups-for-bitcoind/feed/" rel="self" type="application/rss+xml" />
	<link>http://jfxpt.com/2021/a-tetrad-of-tuneups-for-bitcoind/</link>
	<description>The search for invariants</description>
	<pubDate>Sun, 19 Apr 2026 00:59:12 +0000</pubDate>
	<generator>http://polimedia.us</generator>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
		<item>
		<title>By: Jacob Welsh</title>
		<link>http://jfxpt.com/2021/a-tetrad-of-tuneups-for-bitcoind/#comment-2036</link>
		<dc:creator>Jacob Welsh</dc:creator>
		<pubDate>Tue, 10 May 2022 18:27:00 +0000</pubDate>
		<guid isPermaLink="false">http://fixpoint.welshcomputing.com/?p=159#comment-2036</guid>
		<description>Edited footnote ii to change "set" to "setlocal", which matters if you're switching between files of different formats within the same Vim session.</description>
		<content:encoded><![CDATA[<p>Edited footnote ii to change "set" to "setlocal", which matters if you're switching between files of different formats within the same Vim session.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Jacob Welsh</title>
		<link>http://jfxpt.com/2021/a-tetrad-of-tuneups-for-bitcoind/#comment-1909</link>
		<dc:creator>Jacob Welsh</dc:creator>
		<pubDate>Tue, 18 Jan 2022 19:39:19 +0000</pubDate>
		<guid isPermaLink="false">http://fixpoint.welshcomputing.com/?p=159#comment-1909</guid>
		<description>Edited to add the big red warning about low fees.</description>
		<content:encoded><![CDATA[<p>Edited to add the big red warning about low fees.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Jacob Welsh</title>
		<link>http://jfxpt.com/2021/a-tetrad-of-tuneups-for-bitcoind/#comment-1847</link>
		<dc:creator>Jacob Welsh</dc:creator>
		<pubDate>Mon, 13 Dec 2021 18:50:38 +0000</pubDate>
		<guid isPermaLink="false">http://fixpoint.welshcomputing.com/?p=159#comment-1847</guid>
		<description>&lt;code&gt;bitcoin_tx_fee_cleanup&lt;/code&gt; leaves a no-longer-used variable declaration in play,

&lt;blockquote&gt;&lt;pre&gt;double dPriority = -(*mapPriority.begin()).first;&lt;/pre&gt;&lt;/blockquote&gt;

This would have been easily caught except that it gets buried under the mountain of other unresolved compiler warnings. Doesn't seem worth the bother to regrind just for this; there's various other unused bits lying around that could be garbage-collected in one go at a later point.</description>
		<content:encoded><![CDATA[<p><code>bitcoin_tx_fee_cleanup</code> leaves a no-longer-used variable declaration in play,</p>
<blockquote><pre>double dPriority = -(*mapPriority.begin()).first;</pre>
</blockquote>
<p>This would have been easily caught except that it gets buried under the mountain of other unresolved compiler warnings. Doesn't seem worth the bother to regrind just for this; there's various other unused bits lying around that could be garbage-collected in one go at a later point.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Jacob Welsh</title>
		<link>http://jfxpt.com/2021/a-tetrad-of-tuneups-for-bitcoind/#comment-1550</link>
		<dc:creator>Jacob Welsh</dc:creator>
		<pubDate>Sun, 28 Nov 2021 20:59:16 +0000</pubDate>
		<guid isPermaLink="false">http://fixpoint.welshcomputing.com/?p=159#comment-1550</guid>
		<description>There's http://trilema.com/2019/forum-logs-for-21-feb-2014/ for an html-injection example (in my browser the last third of the log and everything following get swallowed). So far I'm seeing it in the pre-2016 ones only.</description>
		<content:encoded><![CDATA[<p>There's <a href="http://trilema.com/2019/forum-logs-for-21-feb-2014/" rel="nofollow">http://trilema.com/2019/forum-logs-for-21-feb-2014/</a> for an html-injection example (in my browser the last third of the log and everything following get swallowed). So far I'm seeing it in the pre-2016 ones only.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Jacob Welsh</title>
		<link>http://jfxpt.com/2021/a-tetrad-of-tuneups-for-bitcoind/#comment-1456</link>
		<dc:creator>Jacob Welsh</dc:creator>
		<pubDate>Tue, 16 Nov 2021 06:57:29 +0000</pubDate>
		<guid isPermaLink="false">http://fixpoint.welshcomputing.com/?p=159#comment-1456</guid>
		<description>From my last link - ugh, did the log conversion somehow manage to swallow semicolons (in addition to less-thans not html-escaped which I think I noticed somewhere recently) ?! The correct line #2576215 is "mp_en_viaje: maybe ;; is the right choice ? ..." and likewise #2576234 is "she declines; ..."</description>
		<content:encoded><![CDATA[<p>From my last link - ugh, did the log conversion somehow manage to swallow semicolons (in addition to less-thans not html-escaped which I think I noticed somewhere recently) ?! The correct line #2576215 is "mp_en_viaje: maybe ;; is the right choice ? ..." and likewise #2576234 is "she declines; ..."</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Jacob Welsh</title>
		<link>http://jfxpt.com/2021/a-tetrad-of-tuneups-for-bitcoind/#comment-1455</link>
		<dc:creator>Jacob Welsh</dc:creator>
		<pubDate>Tue, 16 Nov 2021 06:50:01 +0000</pubDate>
		<guid isPermaLink="false">http://fixpoint.welshcomputing.com/?p=159#comment-1455</guid>
		<description>&lt;blockquote&gt;
There's still time until 2028 and surely even after that, what's the hurry?!
&lt;/blockquote&gt;

And that's just the one we *know* about from MP's grep-driven survey. But no worries, somebody will have fixed boost by then!

&lt;blockquote&gt;At any rate, the "inconsistency" of having something clean while there still is otherwise around a lot of dirty stuff is simply the first step of any cleaning process in practice&lt;/blockquote&gt;

Indeed, it's more akin to mopping half of a long-neglected floor than to mowing half of a lawn. "But it makes the other half look worse by comparison" - good!

&lt;blockquote&gt;how do you jump to the conclusion that it's this a significant factor that slows down the initial sync process?&lt;/blockquote&gt;

To be clear, I don't put it as firmly as a conclusion at this stage; but the question stands as to why I even suspected it, "wovon man nicht sprechen kann, darueber muss man schweigen" and all. I dug into my logs and found there was more history to it than I first recalled here:

1. In July-August 2019, I was dependent on a PRB (0.11) node on my main, Gentoo machine which I had allowed to run critically low on disk space. Rather than mess with HDD upgrades I was trying to solve both problems at once by getting TRB running on a Gales machine with new SSD. In order to get it synced as fast as possible I wanted to feed it by local connection to the existing node, meaning it would need to not ban said node.

2. At the same time, Robinson already had his coin on a TRB node and was trying to fund a deedbot wallet for Pizarro hosting. He consulted some websites to pick an economical transaction fee and sent, but it &lt;a href="http://jfxpt.com/2019/basic-getrawtransaction-patch-proposal-for-bitcoind/#footnote_0_71" rel="nofollow"&gt;got stuck&lt;/a&gt;. He guessed that maybe his TRB-only peers had a higher minimum relay threshold set (though now we know this wasn't how it worked as there was no threshold setting per se). One thing we tried was rebuilding without the ban-hammer to get it relayed to prb-net, as an easier first step before implementing the missing "getrawtransaction" so as to try pushing directly to block explorers.

3. In September 2019 my new TRB node finished syncing; just after it reached the tip it stopped getting anything but bastard/orphan blocks. I tried lifting the ban-hammer, I suppose because it was in my toolbox and fresh in mind, and it synced up straightaway. I also noticed I seemed to be feeding a number of other nodes, in that I'd log 2-5 "received getdata for: block ..." after each incoming block; this despite not having any unusually wide or fast connectivity otherwise. A few weeks later I restarted the node for unrelated reasons, going back to a fully-strict build, which over the next days would again get hung up receiving no usable blocks. Again I restarted with the relaxed version and again it got synced.

4. In February 2020, &lt;a href="http://trilema.com/2020/forum-logs-for-22-feb-2020/#2575917" rel="nofollow"&gt;mod6 reported&lt;/a&gt; a number of nodes stuck at block 618406. I tried restarting with the relaxed version, which again worked, and shared my notes; &lt;a href="http://ossasepia.com/2020/04/21/ossasepia-logs-for-22-Feb-2020/#1019161" rel="nofollow"&gt;also noted in #o.&lt;/a&gt; Since apparently &lt;a href="http://trilema.com/2020/forum-logs-for-23-feb-2020/#2575944" rel="nofollow"&gt;lobbes didn't manage to crank the link archiver&lt;/a&gt; I've now fished out &lt;a href="http://jfxpt.com/code/trb/jfw-trb-block-618406-constipation.txt" rel="nofollow"&gt;the paste ref&lt;/a&gt; (and begin to wonder why I even used pastes instead of just putting text files in my own web space in the first place).

5. In February 2021 I noted my node was persistently lagging again, though at least getting blocks in small bursts, hourly or so. Again I tried relaxing it, with a proper vpatch this time (though just removing the ban, not adding an option as seen here); at first it didn't help, but my "addnodes" list had enough TRB peers to fill up its 8 connection slots. Upon pruning this list it again got moving, and appeared to be feeding 4 other nodes. In May 2021 Robinson &lt;a href="http://jfxpt.com/2021/jwrd-logs-for-May-2021/#2120" rel="nofollow"&gt;reported running for months without a hitch&lt;/a&gt; using the same patch.

As far as contrary evidence, I do seem to recall intervals of block starvation even with a relaxed node, but haven't found mention of it on this dig.

&lt;blockquote&gt;I can even agree that such a comment would certainly be a useful addition to the patch itself but I'm not all that convinced that it really is much of a solution to what seems to me a deeper problem.&lt;/blockquote&gt;

That's a fair point about moar comments. Not sure it's quite worth the bother to regrind at this point just for this; perhaps if any other issues come up with the patch. Otherwise I can bear it in mind for next time.

But it's at best a closer-to-the-code variant of commenting on it here; in any case it requires the author to notice and call it out, which does nothing for the patch reader whose proper aim I'd say is to mentally reconstruct the meaning of the change without taking anyone's word for it. I haven't managed to conceive of any way around "bringing from home all the context" though. You could perhaps - at review time if not at signing time - drop the magic number of three lines and have diff show the whole changed file as context.

Some MP refs that came to mind on the question - just to capture them, with no particular conclusion - were on &lt;a href="http://trilema.com/2019/forum-logs-for-21-jan-2016/#1996783" rel="nofollow"&gt;the fundamental function of talmudic commentary in maintaining this kind of codebase&lt;/a&gt; and his &lt;a href="http://trilema.com/2020/forum-logs-for-05-mar-2020/#2576208" rel="nofollow"&gt;search for a universal comment format&lt;/a&gt;.</description>
		<content:encoded><![CDATA[<blockquote><p>
There's still time until 2028 and surely even after that, what's the hurry?!
</p></blockquote>
<p>And that's just the one we *know* about from MP's grep-driven survey. But no worries, somebody will have fixed boost by then!</p>
<blockquote><p>At any rate, the "inconsistency" of having something clean while there still is otherwise around a lot of dirty stuff is simply the first step of any cleaning process in practice</p></blockquote>
<p>Indeed, it's more akin to mopping half of a long-neglected floor than to mowing half of a lawn. "But it makes the other half look worse by comparison" - good!</p>
<blockquote><p>how do you jump to the conclusion that it's this a significant factor that slows down the initial sync process?</p></blockquote>
<p>To be clear, I don't put it as firmly as a conclusion at this stage; but the question stands as to why I even suspected it, "wovon man nicht sprechen kann, darueber muss man schweigen" and all. I dug into my logs and found there was more history to it than I first recalled here:</p>
<p>1. In July-August 2019, I was dependent on a PRB (0.11) node on my main, Gentoo machine which I had allowed to run critically low on disk space. Rather than mess with HDD upgrades I was trying to solve both problems at once by getting TRB running on a Gales machine with new SSD. In order to get it synced as fast as possible I wanted to feed it by local connection to the existing node, meaning it would need to not ban said node.</p>
<p>2. At the same time, Robinson already had his coin on a TRB node and was trying to fund a deedbot wallet for Pizarro hosting. He consulted some websites to pick an economical transaction fee and sent, but it <a href="http://jfxpt.com/2019/basic-getrawtransaction-patch-proposal-for-bitcoind/#footnote_0_71" rel="nofollow">got stuck</a>. He guessed that maybe his TRB-only peers had a higher minimum relay threshold set (though now we know this wasn't how it worked as there was no threshold setting per se). One thing we tried was rebuilding without the ban-hammer to get it relayed to prb-net, as an easier first step before implementing the missing "getrawtransaction" so as to try pushing directly to block explorers.</p>
<p>3. In September 2019 my new TRB node finished syncing; just after it reached the tip it stopped getting anything but bastard/orphan blocks. I tried lifting the ban-hammer, I suppose because it was in my toolbox and fresh in mind, and it synced up straightaway. I also noticed I seemed to be feeding a number of other nodes, in that I'd log 2-5 "received getdata for: block ..." after each incoming block; this despite not having any unusually wide or fast connectivity otherwise. A few weeks later I restarted the node for unrelated reasons, going back to a fully-strict build, which over the next days would again get hung up receiving no usable blocks. Again I restarted with the relaxed version and again it got synced.</p>
<p>4. In February 2020, <a href="http://trilema.com/2020/forum-logs-for-22-feb-2020/#2575917" rel="nofollow">mod6 reported</a> a number of nodes stuck at block 618406. I tried restarting with the relaxed version, which again worked, and shared my notes; <a href="http://ossasepia.com/2020/04/21/ossasepia-logs-for-22-Feb-2020/#1019161" rel="nofollow">also noted in #o.</a> Since apparently <a href="http://trilema.com/2020/forum-logs-for-23-feb-2020/#2575944" rel="nofollow">lobbes didn't manage to crank the link archiver</a> I've now fished out <a href="http://jfxpt.com/code/trb/jfw-trb-block-618406-constipation.txt" rel="nofollow">the paste ref</a> (and begin to wonder why I even used pastes instead of just putting text files in my own web space in the first place).</p>
<p>5. In February 2021 I noted my node was persistently lagging again, though at least getting blocks in small bursts, hourly or so. Again I tried relaxing it, with a proper vpatch this time (though just removing the ban, not adding an option as seen here); at first it didn't help, but my "addnodes" list had enough TRB peers to fill up its 8 connection slots. Upon pruning this list it again got moving, and appeared to be feeding 4 other nodes. In May 2021 Robinson <a href="http://jfxpt.com/2021/jwrd-logs-for-May-2021/#2120" rel="nofollow">reported running for months without a hitch</a> using the same patch.</p>
<p>As far as contrary evidence, I do seem to recall intervals of block starvation even with a relaxed node, but haven't found mention of it on this dig.</p>
<blockquote><p>I can even agree that such a comment would certainly be a useful addition to the patch itself but I'm not all that convinced that it really is much of a solution to what seems to me a deeper problem.</p></blockquote>
<p>That's a fair point about moar comments. Not sure it's quite worth the bother to regrind at this point just for this; perhaps if any other issues come up with the patch. Otherwise I can bear it in mind for next time.</p>
<p>But it's at best a closer-to-the-code variant of commenting on it here; in any case it requires the author to notice and call it out, which does nothing for the patch reader whose proper aim I'd say is to mentally reconstruct the meaning of the change without taking anyone's word for it. I haven't managed to conceive of any way around "bringing from home all the context" though. You could perhaps - at review time if not at signing time - drop the magic number of three lines and have diff show the whole changed file as context.</p>
<p>Some MP refs that came to mind on the question - just to capture them, with no particular conclusion - were on <a href="http://trilema.com/2019/forum-logs-for-21-jan-2016/#1996783" rel="nofollow">the fundamental function of talmudic commentary in maintaining this kind of codebase</a> and his <a href="http://trilema.com/2020/forum-logs-for-05-mar-2020/#2576208" rel="nofollow">search for a universal comment format</a>.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Diana Coman</title>
		<link>http://jfxpt.com/2021/a-tetrad-of-tuneups-for-bitcoind/#comment-1440</link>
		<dc:creator>Diana Coman</dc:creator>
		<pubDate>Sat, 13 Nov 2021 21:02:07 +0000</pubDate>
		<guid isPermaLink="false">http://fixpoint.welshcomputing.com/?p=159#comment-1440</guid>
		<description>&lt;blockquote&gt;
As far as I can tell, this establishes JWRD Computing as not just the most active but the sole current maintainer of the rough yet uncorrupted codebase inherited from Satoshi Nakamoto.
&lt;/blockquote&gt;
There's still time &lt;a href="http://jfxpt.com/codeview/tree/bitcoin/bitcoin_dumpblock_no_losers/bitcoin/src/util.h#L88" rel="nofollow"&gt;until 2028&lt;/a&gt; and surely even after that, what's the hurry?!

&lt;blockquote&gt;
Actually this is a recurring theme when I work in this codebase: in order to get anything done I either need to do it in the same stupid way as the existing examples, or else do it the simple and obvious way but create inconsistency, or else get sucked into fixing ALL of it.
&lt;/blockquote&gt;
Fwiw, in my experience this is a recurring theme whenever working with legacy/unmaintained or even simply large-and-old-enough codebases, really. At any rate, the "inconsistency" of having something clean while there still is otherwise around a lot of dirty stuff is simply the first step of any cleaning process in practice (as opposed to in theory where everything is always fully consistent and all cleaning of everything can be and is also best done fully in one single step and so on and so forth).

&lt;blockquote&gt;
and that ignoring this situation only serves to isolate one's node, contributing to a sometimes unbearably slow initial sync process.
&lt;/blockquote&gt;
Not that I see any problem at all with actually letting the user decide (oh, how unclean of the user to want to ever run some code that might talk to "heathens" at all, I know) but how do you jump to the conclusion that it's this a significant factor that slows down the initial sync process? 

&lt;blockquote&gt;
It further turns out that of that dozen, only four are actually used by bitcoind! (Plus possibly one indirectly: at least part of boost_system is pulled in by boost_filesystem.) And yes, bjam readily provides a way to specify which parts to build. Who knew?
&lt;/blockquote&gt;
Ha, well done!

&lt;blockquote&gt;
These are details that I suspect would be entirely missed when reading just the patch on its own, a point perhaps worth some deeper pondering.
&lt;/blockquote&gt;
This is an important point I would say and it actually does feed into one of the reasons why I'm still pondering the next step with VaMP - I start suspecting that the whole bare-bones approach of "here, read this diff and bring from home ALL its context" is not such a literate approach to coding as it might like to brand itself (even if it arguably was, back in the 1980's, perhaps). Sure, it can be argued along the lines of "there should have been then a comment in the code pointing out this sort of context-based detail." I can even agree that such a comment would certainly be a useful addition to the patch itself but I'm not all that convinced that it really is much of a solution to what seems to me a deeper problem.</description>
		<content:encoded><![CDATA[<blockquote><p>
As far as I can tell, this establishes JWRD Computing as not just the most active but the sole current maintainer of the rough yet uncorrupted codebase inherited from Satoshi Nakamoto.
</p></blockquote>
<p>There's still time <a href="http://jfxpt.com/codeview/tree/bitcoin/bitcoin_dumpblock_no_losers/bitcoin/src/util.h#L88" rel="nofollow">until 2028</a> and surely even after that, what's the hurry?!</p>
<blockquote><p>
Actually this is a recurring theme when I work in this codebase: in order to get anything done I either need to do it in the same stupid way as the existing examples, or else do it the simple and obvious way but create inconsistency, or else get sucked into fixing ALL of it.
</p></blockquote>
<p>Fwiw, in my experience this is a recurring theme whenever working with legacy/unmaintained or even simply large-and-old-enough codebases, really. At any rate, the "inconsistency" of having something clean while there still is otherwise around a lot of dirty stuff is simply the first step of any cleaning process in practice (as opposed to in theory where everything is always fully consistent and all cleaning of everything can be and is also best done fully in one single step and so on and so forth).</p>
<blockquote><p>
and that ignoring this situation only serves to isolate one's node, contributing to a sometimes unbearably slow initial sync process.
</p></blockquote>
<p>Not that I see any problem at all with actually letting the user decide (oh, how unclean of the user to want to ever run some code that might talk to "heathens" at all, I know) but how do you jump to the conclusion that it's this a significant factor that slows down the initial sync process? </p>
<blockquote><p>
It further turns out that of that dozen, only four are actually used by bitcoind! (Plus possibly one indirectly: at least part of boost_system is pulled in by boost_filesystem.) And yes, bjam readily provides a way to specify which parts to build. Who knew?
</p></blockquote>
<p>Ha, well done!</p>
<blockquote><p>
These are details that I suspect would be entirely missed when reading just the patch on its own, a point perhaps worth some deeper pondering.
</p></blockquote>
<p>This is an important point I would say and it actually does feed into one of the reasons why I'm still pondering the next step with VaMP - I start suspecting that the whole bare-bones approach of "here, read this diff and bring from home ALL its context" is not such a literate approach to coding as it might like to brand itself (even if it arguably was, back in the 1980's, perhaps). Sure, it can be argued along the lines of "there should have been then a comment in the code pointing out this sort of context-based detail." I can even agree that such a comment would certainly be a useful addition to the patch itself but I'm not all that convinced that it really is much of a solution to what seems to me a deeper problem.</p>
]]></content:encoded>
	</item>
</channel>
</rss>
