Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

refactor: Scraper thread safety and code cleanup #2315

Merged

Conversation

jamescowens
Copy link
Member

@jamescowens jamescowens commented Sep 2, 2021

This is a detailed PR that fully implements the appropriate keywords/qualifiers in the scraper system for the Clang thread safety static analysis. This allows advanced compilers to detect thread safety problems such as access to functions/variables without prior locks held. One thing the static analysis does NOT do is analyze for potential deadlocks due to lock order conflicts. In particular that caused a lot of headaches with this PR. The scraper is quite complex and uses a fine grained locking scheme to ensure that it can run relatively unimpeded with multiple threads accessing it. Unfortunately the by product of that is that extremely careful attention to locking order needs to be adhered to avoid deadlocks. The deadlock detection after many adjustments was done using manual code review of the call chains and the debug mode deadlock detection built into the wallet already in sync.h/cpp in debug mode. Note that this is difficult, because our old net code has an existing potential deadlock between cs_main and the cs_vnodes, which prevents running the wallet a long time to drain out all potential deadlocks.

Note: Once @div72 helped me get the Bitcoin sync.h/cpp port running the way I wanted where we could continue to run the wallet while logging potential deadlocks. I did a few more adjustments which are in the thread safety II commit. The remaining entries are all related to variations of the above mentioned potential deadlock and do not need to be fixed. We will cover those in the net code port.

I probably will squash some of these commits as this PR gets closer to completion, as they are too fine grained right now. [Done] Also, I am going to be ripping out the scraper lock logging, as that has proven not to be terribly useful, and eats up log file space and also stresses out the core to GUI signaling to update the scraper tab.

I have also taken the time to improve the documentation of the scraper, including replacing the // style comments with Doxygen compliant commenting where appropriate.

I removed the move(s) for the CScraperManifests, because once I converted those to be accessed via smart shared pointers earlier, "moving" the ownership of the pointer during a call is downright silly, given the control block of the shared pointer keeps track of the references and the reference of the calling function will fall away as soon as it is out of scope.

I have also more fully encapsulated the scraper appcache/extended appcache in anticipation of ripping the appcache out and replacing it with a native contract handler for the scraper section.

Note that this is built on top of #2292, so includes those commits at the moment. They will disappear once #2292 is merged and this PR is rebased. [Done]

Final note on testing: I have been running this on two different testnet scraper nodes, one of those in explorer mode, and it is running perfectly, with no problems and the two nodes participating in the convergences properly. I think this is ready to go.

There is one thread safety log entry remaining, and it is on PushMessages, but I believe it is a false positive. The PushMessages template appears to make copies of all of the Args... and I think that may be generating the false positive, because the custom serialization of the CScraperManifest appropriately does NOT copy the mutex.

A future improvement to the scraper would be to convert the custom reference system in the parts area to use smart shared pointers like the CScraperManifests, but that belongs in a separate PR, and the existing system is working perfectly, as demonstrated by running the scraperreport, which shows every object/reference fully accounted for.

Another future improvement would be to change the fallback rule to project level to be no more than 24 hours earlier than the present, as the existing algorithm will use the entire inventory of CScraperManifests to attempt a convergence at the manifest level before falling back to the project level if a project is not available. The effect of this the scraper to end up retaining the same statistics for two superblocks if a project has gone offline for < 48 hours. This change will correct that, but will have to be done at the next mandatory.

Finally, the scraper uses string fields rather than the newer native fields in the Fern+ code, and this is primarily because the scraper was written first, before the Fern code, before all of that refactoring was available. It would be good to retrofit the native fields and the more efficient storage/processing that goes along with it, but that is a significant amount of work for a dubious benefit at the current time.

@jamescowens jamescowens added this to the Janice milestone Sep 2, 2021
@jamescowens jamescowens added enhancement refactor This is for refactoring (if also an enhancement, use that label too). labels Sep 2, 2021
@jamescowens jamescowens self-assigned this Sep 2, 2021
@jamescowens jamescowens force-pushed the scraper_thread_safety_3 branch 6 times, most recently from 3b4582d to f1c3af3 Compare September 6, 2021 03:47
@jamescowens jamescowens changed the title refactor: Scraper thread safety refactor: Scraper thread safety and code cleanup Sep 6, 2021
@jamescowens jamescowens force-pushed the scraper_thread_safety_3 branch 2 times, most recently from 9c99711 to fa7a170 Compare September 6, 2021 04:47
@jamescowens jamescowens force-pushed the scraper_thread_safety_3 branch 9 times, most recently from 07d9d95 to f282da4 Compare September 11, 2021 15:11
@jamescowens jamescowens requested a review from div72 September 11, 2021 21:43
@jamescowens jamescowens marked this pull request as ready for review September 11, 2021 21:53
@jamescowens jamescowens force-pushed the scraper_thread_safety_3 branch from f282da4 to daba29d Compare September 12, 2021 04:12
src/gridcoin/scraper/fwd.h Outdated Show resolved Hide resolved
@jamescowens
Copy link
Member Author

jamescowens commented Sep 13, 2021 via email

@div72
Copy link
Member

div72 commented Sep 13, 2021

I thought we were going with #pragma once for Gridcoin specific code? 7181af4 should've fixed the lint issue. Checking the logs, I see no complaint from the linter for scraper code.

@jamescowens
Copy link
Member Author

That is because the include guards are correct now. It was complaining before.

@jamescowens
Copy link
Member Author

I am ok with that as long as we can get the Linter to cooperate.

@jamescowens jamescowens force-pushed the scraper_thread_safety_3 branch 3 times, most recently from 61db86f to 26b66b1 Compare September 17, 2021 19:06
@jamescowens jamescowens requested a review from div72 September 17, 2021 21:01
This implements qualifiers required for advanced static thread safety
analysis by Clang and other advanced compilers. Note that a few minor
thread safety issues were caught and fixed preparing this commit.

Also, thread safety was implemented around the scraper globals and the
AppCache reads. Even though these are seldom changed and there is little
chance of an issue, they should be completely thread-safe as they
are accessed by multiple threads.

Note that some lambdas were used to do quick locked reads against the
scraper globals in some of the scraper functions to facilitate use of
the global in existing if statements without further change. This is
a little ugly and some of the lambdas are repeated. This will be cleaned
up when the scraper is restructured into classes later.
There is no reason to use move for a shared smart pointer. Let
the pointer control block deal with the references.
@jamescowens jamescowens force-pushed the scraper_thread_safety_3 branch from 26b66b1 to fa864eb Compare September 17, 2021 21:37
@jamescowens
Copy link
Member Author

@div72 I rebased this now that #2336 is merged that implements the discussion on include guards above. Any further comments? If not, please sign off on it. I want to get it merged and then get a testnet build out.

Copy link
Member

@div72 div72 left a comment

Choose a reason for hiding this comment

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

utACK, a few documentation changes lack punctuation and I personally would assign non-consensus critical scraper globals to locals instead of using lambdas but this is also fine. All the comments are essentially nits.

src/gridcoin/scraper/scraper.cpp Show resolved Hide resolved
src/gridcoin/scraper/scraper.cpp Outdated Show resolved Hide resolved
src/gridcoin/scraper/scraper_net.cpp Outdated Show resolved Hide resolved
src/gridcoin/scraper/scraper.h Outdated Show resolved Hide resolved
src/gridcoin/scraper/scraper_net.cpp Outdated Show resolved Hide resolved
@jamescowens
Copy link
Member Author

On the lambdas... they will be going away when I turn the scraper into a class, which is eventually going to happen.

@jamescowens
Copy link
Member Author

I could have also used the WITH_LOCK's that came with the upgrading of sync.h/cpp I recently did with upstream, but that looks uglier than the repetitiveness of the lambdas in this case. What we really want is getters inside a class taking a lock and returning the class member variables.

jamescowens and others added 7 commits September 18, 2021 10:54
This modifies SendManifestTo to take a smart shared pointer to the
CScraperManifest to be sent, rather than doing another lookup of the inv.hash
against the mapManifest to find the manifest, which is what the original
form of the function did.

This avoids another map find.
rather than throwing bool. We still must use a try/catch, because
the basic deserialization could fail on a malformed incoming message.
@jamescowens jamescowens force-pushed the scraper_thread_safety_3 branch from 5530f96 to bc88329 Compare September 18, 2021 14:55
@jamescowens jamescowens merged commit b83440f into gridcoin-community:development Sep 18, 2021
@jamescowens jamescowens deleted the scraper_thread_safety_3 branch December 6, 2021 16:37
jamescowens added a commit to jamescowens/Gridcoin-Research that referenced this pull request Feb 27, 2022
…ening flags, don't enable it for Windows gridcoin-community#2284 (@barton2526)

 - build: add upstream compiler warnings gridcoin-community#2288 (@jamescowens)
 - rpc: Create getblockbymintime gridcoin-community#2290 (@RoboticMind)
 - cd: generate release binaries using GitHub actions gridcoin-community#2249 (@div72)
 - util: port upstream span changes gridcoin-community#2323 (@div72)
 - rpc: add additional ban time fields to listbanned gridcoin-community#2334 (@barton2526)
 - test: Add sanity_tests from upstream gridcoin-community#2343 (@barton2526)
 - util, test: Don't allow Base58 decoding of non-Base58 strings. Add Base58 tests. Add whitespace tests. gridcoin-community#2345 (@barton2526)
 - test: Add tests for monetary value formatting and parsing.  Clean up includes in rpc_tests gridcoin-community#2348 (@barton2526)
 - rpc: Implement -rpcwait and -rpcwaittimeout gridcoin-community#2349 (@jamescowens)
 - test: Add crypto_tests (@upstream gridcoin-community#2372 from barton2526)
 - test: Add test for GCC bug 90348 gridcoin-community#2380 (@barton2526)
 - build: add python3.10, 3.11 alias to AC_PATH_PROGS call in configure gridcoin-community#2386 (@barton2526)
 - wallet, contract: Implement contract change option gridcoin-community#2388 (@jamescowens)
 - gui: Implement privacy mode gridcoin-community#2399 (@jamescowens)
 - util: Implement -reindex option, improve -loadblock option gridcoin-community#2394 (@jamescowens)
 - gui: Implement Alt-7 for unlock and lock of wallet gridcoin-community#2406 (@jamescowens)
 - gui, voting: Add a one minute timer to check for current poll expiring and update gui gridcoin-community#2416 (@jamescowens)
 - gui: Implement a warning about split CPID/email mismatch condition gridcoin-community#2414 (@jamescowens)
 - util: clean obsolete config keys gridcoin-community#2424 (@div72)
 - net: Implement an upper limit of 950 for max network connections gridcoin-community#2426 (@jamescowens)

 - build: libevent 2.1.12-stable gridcoin-community#2226 (@barton2526)
 - build: Bump minimum QT support to 5.9.5, Remove obsolete checks gridcoin-community#2251 (@barton2526)
 - doc: Update to https where possible gridcoin-community#2230 (@barton2526)
 - refactor: Replace fprintf with tfm::format gridcoin-community#2262 (@barton2526)
 - qt: Replace deprecated QSignalMapper by lambda expressions gridcoin-community#2261 (@barton2526)
 - refactor: Use functions guaranteed to be locale independent (ToLower, IsDigit, IsSpace) gridcoin-community#2265 (@barton2526)
 - refactor: Replace std::to_string with locale-independent alternative gridcoin-community#2266 (@barton2526)
 - refactor: small python cleanup gridcoin-community#2267 (@barton2526)
 - refactor: Replace local dependent string functions with non-locale versions in strencodings.h/cpp gridcoin-community#2270 (@amescowens)
 - ci: Update KNOWN_VIOLATIONS list for the linter for functions we don't care are locale-dependent gridcoin-community#2271 (@barton2526)
 - refactor: move block storage functions to src/node/blockstorage gridcoin-community#2273 (@div72)
 - refactor: Replace deprecated Qt::SystemLocale{Short,Long}Date, Fix 'QDateTime is deprecated' warnings gridcoin-community#2275 (@barton2526)
 - rpc: optimize getblockbynumber gridcoin-community#2289 (@barton2526)
 - gui: Update connect statements to conform to Qt 5 standard gridcoin-community#2281 (@jamescowens)
 - depends: Bump ccache and curl gridcoin-community#2297 (@barton2526)
 - ci: only print depends/apt output if the step fails gridcoin-community#2287 (@div72)
 - depends: Update to openSSL 1.1.1l gridcoin-community#2302 (@barton2526)
 - rpc: Don't use floating point in getreceivedbyaddress gridcoin-community#2310 (@barton2526)
 - LibreSSL doesn't define OPENSSL_VERSION, use LIBRESSL_VERSION_TEXT instead gridcoin-community#2306 (@barton2526)
 - build: update m4 gridcoin-community#2317 (@div72)
 - qt: Replace deprecated Qt functions gridcoin-community#2316 (@barton2526)
 - build: set minimum required Boost to 1.60 gridcoin-community#2318 (@barton2526)
 - util: Don't use gmtime() or localtime() gridcoin-community#2319 (@barton2526)
 - build: Update univalue subtree gridcoin-community#2335 (@barton2526)
 - refactor: use include guards instead of #pragma once gridcoin-community#2336 (@div72)
 - refactor: Scraper thread safety and code cleanup gridcoin-community#2315 (@jamescowens)
 - qt: Follow Qt docs when implementing rowCount and columnCount gridcoin-community#2333 (@barton2526)
 - qt: Notificator class refactoring.  Notificator always takes 3 args.  Remove Growl support. gridcoin-community#2352 (@barton2526)
 - build: pin OpenSSL version for MacOS gridcoin-community#2354 (@div72)
 - build, util: Update leveldb to 1.22 (@upstream Bitcoin gridcoin-community#2353 from jamescowens)
 - test: Update transaction_tests and associated JSON files from upstream gridcoin-community#2356 (@barton2526)
 - test: Update script_p2sh_tests from upstream gridcoin-community#2357 (@barton2526)
 - refactor: port upstream ui_interface changes gridcoin-community#2355 (@div72)
 - contract: parse strings for claim and message types gridcoin-community#2359 (@div72)
 - test: Update sigopcount_tests and transaction_tests from upstream gridcoin-community#2361 (@barton2526)
 - test, refactor: Update script_tests from upstream gridcoin-community#2360 (@barton2526)
 - test: Update util_tests from upstream gridcoin-community#2363 (@barton2526)
 - test: Update script test JSON files from upstream gridcoin-community#2364 @barton2526)
 - refactor: split clientversion from version gridcoin-community#2367 (@div72)
 - random: port upstream random changes gridcoin-community#2368 (@div72)
 - refactor: convert C-style (void) parameter lists to C++ style () gridcoin-community#2373 (@barton2526)
 - build: Disable -fcf-protection for mingw win32 gridcoin-community#2377 (@jamescowens)
 - gui: Add text output and dialog boxes for -help and -version in GUI client gridcoin-community#2378 (@jamescowens)
 - test, refactor: Use FastRandomContext for all tests. Add a header for test_gridcoin gridcoin-community#2381 (@barton2526)
 - depends: avoid system harfbuzz and bz2 gridcoin-community#2382 (@barton2526)
 - doc: Update Windows build instructions gridcoin-community#2383 (@barton2526)
 - refactor: replace QDateTime::fromTime_t with QDateTime::fromSecsSinceEpoch gridcoin-community#2387 (@barton2526)
 - util: Port of Bitcoin upstream base58.h/cpp at a85442f62bf157b07849accd495c55c73535dc73 gridcoin-community#2384 (@jamescowens)
 - test: update base58_encode_decode.json from upstream gridcoin-community#2391 (@barton2526)
 - depends: Port libdmg-hfsplus changes from upstream gridcoin-community#2389 (@barton2526)
 - doc: Port newer build documentation from Bitcoin gridcoin-community#2162 (@nathanielcwm)
 - rpc: Change getmininginfo to getstakinginfo gridcoin-community#2393 (@jamescowens)
 - researcher: Prefer CPID with active beacon for primary CPID gridcoin-community#2404 (@scribblemaniac)
 - contract: separate legacy type parsing gridcoin-community#2396 (@div72)
 - refactor: Pass values by reference gridcoin-community#2408 (@Pythonix)
 - net: only adjust time with data from outbound nodes gridcoin-community#2411 (@div72)
 - rpc: Change call to FormatISO8601DateTime to FormatISO8601DateTimeDashSep in scanforunspent gridcoin-community#2413 (@jamescowens)
 - build: Adjust depends packages to successfully compile on OpenSUSE gridcoin-community#2260 (@jamescowens)
 - gui: Enable masking of cpid in privacy mode gridcoin-community#2420 (@jamescowens)
 - doc: Update license year range to 2022 gridcoin-community#2421 (@barton2526)
 - contrib: install_db4: use local config.guess/sub gridcoin-community#2436 (@div72)
 - gui: update translations gridcoin-community#2442 (@div72, @3man001)

 - qt: Remove stray QT4 references gridcoin-community#2220 (@barton2526)
 - util: Remove old boost hacks/workarounds gridcoin-community#2231 (@barton2526)
 - refactor: Remove sprintf and printf gridcoin-community#2269 (@jamescowens)
 - depends: Remove boost::program_options dependency gridcoin-community#2277 (@barton2526)
 - refactor: Drop noop gcc version checks gridcoin-community#2278 (@barton2526)
 - util: Remove unused itostr gridcoin-community#2280 (@barton2526)
 - util: Remove deprecated random number generator functions gridcoin-community#2236 (@jamescowens)
 - depends: cleanup package configure flags gridcoin-community#2279 (@barton2526)
 - rpc: remove 'label' filter for rpc command help gridcoin-community#2282 (@barton2526)
 - wallet: remove unused fNoncriticalErrors variable from CWalletDB::FindWalletTx gridcoin-community#2283 (@barton2526)
 - refactor: Optimize and Cleanup CScript::FindAndDelete gridcoin-community#2294 (@barton2526)
 - wallet: Remove unused AskPassphraseDialog::Decrypt gridcoin-community#2299 (@barton2526)
 - refactor, qt: Drop redundant setEditTriggers(NoEditTriggers) calls, Fix typo in QtInputSupport check gridcoin-community#2308 (@barton2526)
 - release: Remove gitian gridcoin-community#2293 (@jamescowens)
 - util: Update scheduler and remove Boost chrono gridcoin-community#2330 (@jamescowens)
 - qt: remove gridcoinresearch.pro gridcoin-community#2332 (@div72)
 - test: Remove unused function dumpKeyInfo gridcoin-community#2347 (@barton2526)
 - build: remove glibc back compat gridcoin-community#2351 (@barton2526)
 - net: remove SOCKS4 support (@core and GUI gridcoin-community#2385 from barton2526)
 - net: remove obsolete "reply" command gridcoin-community#2366 (@div72)
 - net: Remove I2P support from netbase & Correct HE IPv6 Tunnel Broker gridcoin-community#2409 (@Pythonix)
 - qt: Remove locked coins loop gridcoin-community#2410 (@Pythonix)

 - wallet: Close DB on error, use memory_cleanse gridcoin-community#2221 (@barton2526)
 - build: Clean remnants of QTBUG-34748 fix gridcoin-community#2224 (@barton2526)
 - build: use -isysroot over --sysroot on macOS gridcoin-community#2225 (@barton2526)
 - trivial, rpc: Fix and cleanup listreceivedbyX documentation, General Typos gridcoin-community#2227 (@barton2526)
 - trivial: Unbreak build with Boost 1.72.0 gridcoin-community#2228 (@barton2526)
 - doc: Large collection of typos, grammar fixes, and proper capitalization gridcoin-community#2247 (@barton2526)
 - lint: Fix linter warning, fix typo gridcoin-community#2276 (@barton2526)
 - qt: Do not translate file extensions gridcoin-community#2295 (@barton2526)
 - refactor: Drop redundant QString calls gridcoin-community#2296 (@barton2526)
 - rpc: Print OpenSSL version fix gridcoin-community#2298 (@barton2526)
 - gui: Add back in accidentally deleted condition for UnlockStaking and Unlock cases in AskPassphraseDialog::textChanged() gridcoin-community#2305 (@jamescowens)
 - rpc: ParseHash: Fail when length is not 64 gridcoin-community#2313 (@barton2526)
 - Fix locking on WSL using flock instead of fcntl gridcoin-community#2314 (@barton2526)
 - rpc: Fix breakage in protocol.cpp caused by change atoi to ParseInt gridcoin-community#2307 (@jamescowens)
 - net: Small upstream FIXME gridcoin-community#2320 (@barton2526)
 - refactor: Fix advanced compiler warnings gridcoin-community#2292 (@jamescowens)
 - poll: Fix the possible infinite loop warning on GetChoices() in result.cpp gridcoin-community#2322 (@jamescowens)
 - qt: fix broken research wizard signal gridcoin-community#2324 (@div72)
 - refactor: Fix three minor code scanner findings gridcoin-community#2327 (@barton2526)
 - Fix build with Boost 1.77.0 gridcoin-community#2329 (@barton2526)
 - build: Misc upstream depends fixes gridcoin-community#2331 (@barton2526)
 - wallet: Fix improper indent in encryptWallet gridcoin-community#2339 (@jamescowens)
 - wallet: Bugfix - Fundrawtransaction: don't terminate when keypool is empty gridcoin-community#2337 (@barton2526)
 - depends: Fix build for Apple Silicon gridcoin-community#2342 (@div72)
 - build: fix -fstack-clash-protection spam for Clang gridcoin-community#2340 (@div72)
 - util, test: Don't allow Base32/64-decoding or ParseMoney(…) on strings with embedded NUL characters. Add tests.  Add negative test case. gridcoin-community#2344 (@barton2526)
 - test: Repair transaction_tests.cpp (baseline) gridcoin-community#2350 (@jamescowens)
 - scraper: Fix scraper deadlock and make activebeforesb dynamic (not require restart) gridcoin-community#2358 (@jamescowens)
 - scraper: Move lock on cs_mapParts in RecvManifest gridcoin-community#2370 (@jamescowens)
 - build: Make changes to use Gridcoin x.y.z.w client versions gridcoin-community#2371 (@jamescowens)
 - refactor, build: Upstream fixes for the /crypto files. Implement Keccak and SHA3 gridcoin-community#2365 (@barton2526)
 - util: fix FormatVersion gridcoin-community#2376 (@div72)
 - net: initialize nMessageSize to uint32_t max gridcoin-community#2390 (@barton2526)
 - contract: fix double usage of contract change addresses gridcoin-community#2395 (@div72)
 - build: patch qt to explicitly define previously implicit header include gridcoin-community#2397 (@div72)
 - Fix breakage introduced by use of FormatISO8601DateTime gridcoin-community#2398 (@jamescowens)
 - gui: Fix bug in recent transaction list gridcoin-community#2403 (@jamescowens)
 - build: Drop macports support gridcoin-community#2401 (@barton2526)
 - util: Check if specified config file cannot be opened gridcoin-community#2400 (@barton2526)
 - net: Fix masking of irrelevant bits in address groups gridcoin-community#2412 (@Pythonix)
 - rpc: accept int block number for getblocksbatch gridcoin-community#2415 (@scribblemaniac)
 - staking, gui: Fixes a missing miner search interval update for no coins corner case gridcoin-community#2430 (@jamescowens)
 - gui: Add uiInterface.BeaconChanged() call after ActivatePending gridcoin-community#2438 (@jamescowens)
jamescowens added a commit to jamescowens/Gridcoin-Research that referenced this pull request Feb 27, 2022
Added
 - build: add stack-clash and control-flow protection options to hardening flags, don't enable it for Windows gridcoin-community#2284 (@barton2526)
 - build: add upstream compiler warnings gridcoin-community#2288 (@jamescowens)
 - rpc: Create getblockbymintime gridcoin-community#2290 (@RoboticMind)
 - cd: generate release binaries using GitHub actions gridcoin-community#2249 (@div72)
 - util: port upstream span changes gridcoin-community#2323 (@div72)
 - rpc: add additional ban time fields to listbanned gridcoin-community#2334 (@barton2526)
 - test: Add sanity_tests from upstream gridcoin-community#2343 (@barton2526)
 - util, test: Don't allow Base58 decoding of non-Base58 strings. Add Base58 tests. Add whitespace tests. gridcoin-community#2345 (@barton2526)
 - test: Add tests for monetary value formatting and parsing.  Clean up includes in rpc_tests gridcoin-community#2348 (@barton2526)
 - rpc: Implement -rpcwait and -rpcwaittimeout gridcoin-community#2349 (@jamescowens)
 - test: Add crypto_tests (@upstream gridcoin-community#2372 from barton2526)
 - test: Add test for GCC bug 90348 gridcoin-community#2380 (@barton2526)
 - build: add python3.10, 3.11 alias to AC_PATH_PROGS call in configure gridcoin-community#2386 (@barton2526)
 - wallet, contract: Implement contract change option gridcoin-community#2388 (@jamescowens)
 - gui: Implement privacy mode gridcoin-community#2399 (@jamescowens)
 - util: Implement -reindex option, improve -loadblock option gridcoin-community#2394 (@jamescowens)
 - gui: Implement Alt-7 for unlock and lock of wallet gridcoin-community#2406 (@jamescowens)
 - gui, voting: Add a one minute timer to check for current poll expiring and update gui gridcoin-community#2416 (@jamescowens)
 - gui: Implement a warning about split CPID/email mismatch condition gridcoin-community#2414 (@jamescowens)
 - util: clean obsolete config keys gridcoin-community#2424 (@div72)
 - net: Implement an upper limit of 950 for max network connections gridcoin-community#2426 (@jamescowens)

Changed
 - build: libevent 2.1.12-stable gridcoin-community#2226 (@barton2526)
 - build: Bump minimum QT support to 5.9.5, Remove obsolete checks gridcoin-community#2251 (@barton2526)
 - doc: Update to https where possible gridcoin-community#2230 (@barton2526)
 - refactor: Replace fprintf with tfm::format gridcoin-community#2262 (@barton2526)
 - qt: Replace deprecated QSignalMapper by lambda expressions gridcoin-community#2261 (@barton2526)
 - refactor: Use functions guaranteed to be locale independent (ToLower, IsDigit, IsSpace) gridcoin-community#2265 (@barton2526)
 - refactor: Replace std::to_string with locale-independent alternative gridcoin-community#2266 (@barton2526)
 - refactor: small python cleanup gridcoin-community#2267 (@barton2526)
 - refactor: Replace local dependent string functions with non-locale versions in strencodings.h/cpp gridcoin-community#2270 (@amescowens)
 - ci: Update KNOWN_VIOLATIONS list for the linter for functions we don't care are locale-dependent gridcoin-community#2271 (@barton2526)
 - refactor: move block storage functions to src/node/blockstorage gridcoin-community#2273 (@div72)
 - refactor: Replace deprecated Qt::SystemLocale{Short,Long}Date, Fix 'QDateTime is deprecated' warnings gridcoin-community#2275 (@barton2526)
 - rpc: optimize getblockbynumber gridcoin-community#2289 (@barton2526)
 - gui: Update connect statements to conform to Qt 5 standard gridcoin-community#2281 (@jamescowens)
 - depends: Bump ccache and curl gridcoin-community#2297 (@barton2526)
 - ci: only print depends/apt output if the step fails gridcoin-community#2287 (@div72)
 - depends: Update to openSSL 1.1.1l gridcoin-community#2302 (@barton2526)
 - rpc: Don't use floating point in getreceivedbyaddress gridcoin-community#2310 (@barton2526)
 - LibreSSL doesn't define OPENSSL_VERSION, use LIBRESSL_VERSION_TEXT instead gridcoin-community#2306 (@barton2526)
 - build: update m4 gridcoin-community#2317 (@div72)
 - qt: Replace deprecated Qt functions gridcoin-community#2316 (@barton2526)
 - build: set minimum required Boost to 1.60 gridcoin-community#2318 (@barton2526)
 - util: Don't use gmtime() or localtime() gridcoin-community#2319 (@barton2526)
 - build: Update univalue subtree gridcoin-community#2335 (@barton2526)
 - refactor: use include guards instead of #pragma once gridcoin-community#2336 (@div72)
 - refactor: Scraper thread safety and code cleanup gridcoin-community#2315 (@jamescowens)
 - qt: Follow Qt docs when implementing rowCount and columnCount gridcoin-community#2333 (@barton2526)
 - qt: Notificator class refactoring.  Notificator always takes 3 args.  Remove Growl support. gridcoin-community#2352 (@barton2526)
 - build: pin OpenSSL version for MacOS gridcoin-community#2354 (@div72)
 - build, util: Update leveldb to 1.22 (@upstream Bitcoin gridcoin-community#2353 from jamescowens)
 - test: Update transaction_tests and associated JSON files from upstream gridcoin-community#2356 (@barton2526)
 - test: Update script_p2sh_tests from upstream gridcoin-community#2357 (@barton2526)
 - refactor: port upstream ui_interface changes gridcoin-community#2355 (@div72)
 - contract: parse strings for claim and message types gridcoin-community#2359 (@div72)
 - test: Update sigopcount_tests and transaction_tests from upstream gridcoin-community#2361 (@barton2526)
 - test, refactor: Update script_tests from upstream gridcoin-community#2360 (@barton2526)
 - test: Update util_tests from upstream gridcoin-community#2363 (@barton2526)
 - test: Update script test JSON files from upstream gridcoin-community#2364 @barton2526)
 - refactor: split clientversion from version gridcoin-community#2367 (@div72)
 - random: port upstream random changes gridcoin-community#2368 (@div72)
 - refactor: convert C-style (void) parameter lists to C++ style () gridcoin-community#2373 (@barton2526)
 - build: Disable -fcf-protection for mingw win32 gridcoin-community#2377 (@jamescowens)
 - gui: Add text output and dialog boxes for -help and -version in GUI client gridcoin-community#2378 (@jamescowens)
 - test, refactor: Use FastRandomContext for all tests. Add a header for test_gridcoin gridcoin-community#2381 (@barton2526)
 - depends: avoid system harfbuzz and bz2 gridcoin-community#2382 (@barton2526)
 - doc: Update Windows build instructions gridcoin-community#2383 (@barton2526)
 - refactor: replace QDateTime::fromTime_t with QDateTime::fromSecsSinceEpoch gridcoin-community#2387 (@barton2526)
 - util: Port of Bitcoin upstream base58.h/cpp at a85442f62bf157b07849accd495c55c73535dc73 gridcoin-community#2384 (@jamescowens)
 - test: update base58_encode_decode.json from upstream gridcoin-community#2391 (@barton2526)
 - depends: Port libdmg-hfsplus changes from upstream gridcoin-community#2389 (@barton2526)
 - doc: Port newer build documentation from Bitcoin gridcoin-community#2162 (@nathanielcwm)
 - rpc: Change getmininginfo to getstakinginfo gridcoin-community#2393 (@jamescowens)
 - researcher: Prefer CPID with active beacon for primary CPID gridcoin-community#2404 (@scribblemaniac)
 - contract: separate legacy type parsing gridcoin-community#2396 (@div72)
 - refactor: Pass values by reference gridcoin-community#2408 (@Pythonix)
 - net: only adjust time with data from outbound nodes gridcoin-community#2411 (@div72)
 - rpc: Change call to FormatISO8601DateTime to FormatISO8601DateTimeDashSep in scanforunspent gridcoin-community#2413 (@jamescowens)
 - build: Adjust depends packages to successfully compile on OpenSUSE gridcoin-community#2260 (@jamescowens)
 - gui: Enable masking of cpid in privacy mode gridcoin-community#2420 (@jamescowens)
 - doc: Update license year range to 2022 gridcoin-community#2421 (@barton2526)
 - contrib: install_db4: use local config.guess/sub gridcoin-community#2436 (@div72)
 - gui: update translations gridcoin-community#2442 (@div72, @3man001)

Removed
 - qt: Remove stray QT4 references gridcoin-community#2220 (@barton2526)
 - util: Remove old boost hacks/workarounds gridcoin-community#2231 (@barton2526)
 - refactor: Remove sprintf and printf gridcoin-community#2269 (@jamescowens)
 - depends: Remove boost::program_options dependency gridcoin-community#2277 (@barton2526)
 - refactor: Drop noop gcc version checks gridcoin-community#2278 (@barton2526)
 - util: Remove unused itostr gridcoin-community#2280 (@barton2526)
 - util: Remove deprecated random number generator functions gridcoin-community#2236 (@jamescowens)
 - depends: cleanup package configure flags gridcoin-community#2279 (@barton2526)
 - rpc: remove 'label' filter for rpc command help gridcoin-community#2282 (@barton2526)
 - wallet: remove unused fNoncriticalErrors variable from CWalletDB::FindWalletTx gridcoin-community#2283 (@barton2526)
 - refactor: Optimize and Cleanup CScript::FindAndDelete gridcoin-community#2294 (@barton2526)
 - wallet: Remove unused AskPassphraseDialog::Decrypt gridcoin-community#2299 (@barton2526)
 - refactor, qt: Drop redundant setEditTriggers(NoEditTriggers) calls, Fix typo in QtInputSupport check gridcoin-community#2308 (@barton2526)
 - release: Remove gitian gridcoin-community#2293 (@jamescowens)
 - util: Update scheduler and remove Boost chrono gridcoin-community#2330 (@jamescowens)
 - qt: remove gridcoinresearch.pro gridcoin-community#2332 (@div72)
 - test: Remove unused function dumpKeyInfo gridcoin-community#2347 (@barton2526)
 - build: remove glibc back compat gridcoin-community#2351 (@barton2526)
 - net: remove SOCKS4 support (@core and GUI gridcoin-community#2385 from barton2526)
 - net: remove obsolete "reply" command gridcoin-community#2366 (@div72)
 - net: Remove I2P support from netbase & Correct HE IPv6 Tunnel Broker gridcoin-community#2409 (@Pythonix)
 - qt: Remove locked coins loop gridcoin-community#2410 (@Pythonix)

Fixed
 - wallet: Close DB on error, use memory_cleanse gridcoin-community#2221 (@barton2526)
 - build: Clean remnants of QTBUG-34748 fix gridcoin-community#2224 (@barton2526)
 - build: use -isysroot over --sysroot on macOS gridcoin-community#2225 (@barton2526)
 - trivial, rpc: Fix and cleanup listreceivedbyX documentation, General Typos gridcoin-community#2227 (@barton2526)
 - trivial: Unbreak build with Boost 1.72.0 gridcoin-community#2228 (@barton2526)
 - doc: Large collection of typos, grammar fixes, and proper capitalization gridcoin-community#2247 (@barton2526)
 - lint: Fix linter warning, fix typo gridcoin-community#2276 (@barton2526)
 - qt: Do not translate file extensions gridcoin-community#2295 (@barton2526)
 - refactor: Drop redundant QString calls gridcoin-community#2296 (@barton2526)
 - rpc: Print OpenSSL version fix gridcoin-community#2298 (@barton2526)
 - gui: Add back in accidentally deleted condition for UnlockStaking and Unlock cases in AskPassphraseDialog::textChanged() gridcoin-community#2305 (@jamescowens)
 - rpc: ParseHash: Fail when length is not 64 gridcoin-community#2313 (@barton2526)
 - Fix locking on WSL using flock instead of fcntl gridcoin-community#2314 (@barton2526)
 - rpc: Fix breakage in protocol.cpp caused by change atoi to ParseInt gridcoin-community#2307 (@jamescowens)
 - net: Small upstream FIXME gridcoin-community#2320 (@barton2526)
 - refactor: Fix advanced compiler warnings gridcoin-community#2292 (@jamescowens)
 - poll: Fix the possible infinite loop warning on GetChoices() in result.cpp gridcoin-community#2322 (@jamescowens)
 - qt: fix broken research wizard signal gridcoin-community#2324 (@div72)
 - refactor: Fix three minor code scanner findings gridcoin-community#2327 (@barton2526)
 - Fix build with Boost 1.77.0 gridcoin-community#2329 (@barton2526)
 - build: Misc upstream depends fixes gridcoin-community#2331 (@barton2526)
 - wallet: Fix improper indent in encryptWallet gridcoin-community#2339 (@jamescowens)
 - wallet: Bugfix - Fundrawtransaction: don't terminate when keypool is empty gridcoin-community#2337 (@barton2526)
 - depends: Fix build for Apple Silicon gridcoin-community#2342 (@div72)
 - build: fix -fstack-clash-protection spam for Clang gridcoin-community#2340 (@div72)
 - util, test: Don't allow Base32/64-decoding or ParseMoney(…) on strings with embedded NUL characters. Add tests.  Add negative test case. gridcoin-community#2344 (@barton2526)
 - test: Repair transaction_tests.cpp (baseline) gridcoin-community#2350 (@jamescowens)
 - scraper: Fix scraper deadlock and make activebeforesb dynamic (not require restart) gridcoin-community#2358 (@jamescowens)
 - scraper: Move lock on cs_mapParts in RecvManifest gridcoin-community#2370 (@jamescowens)
 - build: Make changes to use Gridcoin x.y.z.w client versions gridcoin-community#2371 (@jamescowens)
 - refactor, build: Upstream fixes for the /crypto files. Implement Keccak and SHA3 gridcoin-community#2365 (@barton2526)
 - util: fix FormatVersion gridcoin-community#2376 (@div72)
 - net: initialize nMessageSize to uint32_t max gridcoin-community#2390 (@barton2526)
 - contract: fix double usage of contract change addresses gridcoin-community#2395 (@div72)
 - build: patch qt to explicitly define previously implicit header include gridcoin-community#2397 (@div72)
 - Fix breakage introduced by use of FormatISO8601DateTime gridcoin-community#2398 (@jamescowens)
 - gui: Fix bug in recent transaction list gridcoin-community#2403 (@jamescowens)
 - build: Drop macports support gridcoin-community#2401 (@barton2526)
 - util: Check if specified config file cannot be opened gridcoin-community#2400 (@barton2526)
 - net: Fix masking of irrelevant bits in address groups gridcoin-community#2412 (@Pythonix)
 - rpc: accept int block number for getblocksbatch gridcoin-community#2415 (@scribblemaniac)
 - staking, gui: Fixes a missing miner search interval update for no coins corner case gridcoin-community#2430 (@jamescowens)
 - gui: Add uiInterface.BeaconChanged() call after ActivatePending gridcoin-community#2438 (@jamescowens)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
enhancement refactor This is for refactoring (if also an enhancement, use that label too).
Projects
None yet
Development

Successfully merging this pull request may close these issues.

4 participants