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

scraper: Scraper global statistics cache optimization #1837

Merged

Conversation

jamescowens
Copy link
Member

@jamescowens jamescowens commented Aug 18, 2020

This PR timplements a significant global statistics cache memory optimization for the scraper. Note that this cache is used on all nodes, whether they are scrapers or normal nodes.

The current scraper global ConvergedScraperStatsCache, in the interest of simplicity, was designed to copy the CScraperManifest parts into the ConvergedManifestPartsMap indexed by project to make the ConvergedScraperStatsCache relatively independent of the scraper_net global manifest and parts map. This was to simplify object lifecycle management.

Review of the scraper shows this is an area ripe for optimization, since the number of unique parts is actually quite low in practice (even smaller than the number of manifests that reference them, because of the overlapping nature of the manifests!).

Given that, I have determined that it is worth the effort to convert the ConvergedScraperStatsCache to use pointers to the parts in CSplitBlob::mapParts via ConvergedManifestPartPtrsMap, which is a replacement for ConvergedManifestPartsMap, which actually contained copies of the part data. Note that the index is still the projects, but the element is of type CPart* instead of CSerializeData. This map holds the CPart* pointers directly, while the shared pointer to the CScraperManifest Convergences (both present via ConvergedManifest Convergence and past via std::map<uint32_t, std::pair<NN::QuorumHash, ConvergedManifest>> PastConvergences) hold the "references" to the CParts, indirectly through the vPart vector in the manifests. This safeguards their deletion and ensures the pointers are valid for a read only pattern (which is what is used by both the node side of the scraper AND the quorum/superblock classes) until both the Convergences are purged from the global cache AND the CScraperManifest::mapManifest global cache in scraper_net.cpp (with is the manifest level map that holds inventory system manifests and parts), thereby calling the relevant destructors and allowing removal of the CPart objects from the CSplitBlob::mapParts (and invalidation of the pointers) when the last reference to a given CPart is removed. Adding parts to the global scraper_net parts map CSplitBlob::mapParts is ALWAYS done through CSplitBlob::addPart with a lock held on both CScraperManifest::cs_mapManifest and CSplitBlob::cs_mapParts.

The quorum and superblock classes operate on manifests and parts in the ConvergedScraperStatsCache or directly on the CScraperManifest::mapManifest and CSplitBlob::mapParts via appropriate locks, which are also respected by the scraper thread and the scraper_net thread, so this is thread-safe.

This optimization is completely transparent to the operation of a scraper or a node, except it will lower memory usage.

This also includes the scraperreport RPC to gain visibility into the scraper object internals that are relevant to this PR.

I also slipped in a trivial fix to eliminate a possible uninitialized warning message during compilation.

@jamescowens jamescowens marked this pull request as draft August 18, 2020 04:52
@jamescowens jamescowens self-assigned this Aug 18, 2020
@jamescowens jamescowens added this to the Gladys milestone Aug 18, 2020
@jamescowens jamescowens force-pushed the integrated_scraper_2 branch 2 times, most recently from f5449d8 to e8b04bd Compare August 18, 2020 14:58
@jamescowens
Copy link
Member Author

@cyrossignol This appears to be working well on one of my test nodes. I have one failing test in the superblock tests that I just don't understand. It is failing with

Running 437 test cases...
unknown location(0): fatal error: in "Superblock/it_initializes_from_a_fallback_by_project_scraper_convergnce": memory access violation at address: 0x00000012: no mapping at fault address
test/neuralnet/superblock_tests.cpp(609): last checkpoint: "it_initializes_from_a_fallback_by_project_scraper_convergnce" test entry

*** 1 failure is detected in the test module "Gridcoin Test Suite"

@jamescowens
Copy link
Member Author

I think I may know what is going on here. There are no global caches for the parts and manifests in the test suite version, and so the pointers may be invalid in that test that is failing. I may have to populate the global scraper_net maps CScraperManifest::mapManifest and CSplitBlob::mapParts via manifest creation and calling of addPart to properly hold the references to the CPart objects in the test suite and ensure the pointers remain valid.

@jamescowens jamescowens force-pushed the integrated_scraper_2 branch 4 times, most recently from 9c89c42 to cb92528 Compare August 18, 2020 22:50
@jamescowens
Copy link
Member Author

Making progress on the tests... only two test failures left... and I know why. Just have to fix up the expected serialization...

Running 437 test cases...
test/neuralnet/superblock_tests.cpp(1148): error: in "Superblock/it_serializes_to_a_stream_for_fallback_convergences": check { stream.begin(), stream.end() } == { expected.begin(), expected.end() } has failed.
Mismatch at position 106: '=' != 0xffffffd0
Mismatch at position 0x6b: 0xffffff88 != 0xffffff8b
Mismatch at position 0x6c: 0xffffff9a != 0x1f
Mismatch at position 0x6d: 'R' != '*'
test/neuralnet/superblock_tests.cpp(1931): error: in "Superblock__ProjectIndex/it_serializes_to_a_stream_for_fallback_convergences": check output == expected has failed

*** 2 failures are detected in the test module "Gridcoin Test Suite"

@jamescowens
Copy link
Member Author

Tests fixed.

@jamescowens
Copy link
Member Author

jamescowens commented Aug 19, 2020

Here is the optimization results about an hour into a scraper node run on testnet...

jco@jco-linux:~/.GridcoinResearchTest/testnet> gridcoinresearchd-4.0.6.42-integrated_scraper_2-62 -testnet -datadir=/home/jco/.GridcoinResearchTest scraperreport
{
"global_scraper_net": {
"manifest_map_size": 270,
"parts_map_size": 83
},
"converged_scraper_stats_cache": {
"current_convergence_publishing_scrapers": 8,
"current_convergence_part_pointer_map_size": 19,
"past_convergence_map_size": 7,
"total_convergences_part_pointer_maps_size": 152,
"total_convergences_part_unique_pointer_maps_size": 42,
"part_objects_reduced": 110
}
}

The total_convergences_part_unique_pointer_maps_size will not exceed the parts_map_size since the parts_map_size is the actual number of unique parts, which corresponds to the number of unique pointers. The total_convergences_part_pointer_maps_size is the number of parts that would be stored in the global stats cache, so the difference is the number of parts saved from being in memory. This is an excellent optimization!

The scraper is part of the convergence on testnet, testnewsb is passing, and the node is stable. Very happy about this.

@jamescowens
Copy link
Member Author

jamescowens commented Aug 19, 2020

Here are the statistics after the complete scraper run...

jco@jco-linux:~/.GridcoinResearchTest/testnet> gridcoinresearchd-4.0.6.42-integrated_scraper_2-62 -testnet -datadir=/home/jco/.GridcoinResearchTest scraperreport
{
"global_scraper_net": {
"manifest_map_size": 265,
"parts_map_size": 67
},
"converged_scraper_stats_cache": {
"current_convergence_publishing_scrapers": 8,
"current_convergence_part_pointer_map_size": 19,
"past_convergence_map_size": 12,
"total_convergences_part_pointer_maps_size": 247,
"total_convergences_part_unique_pointer_maps_size": 49,
"part_objects_reduced": 198
}
}
Actually, I should change the parts_objects_reduced to be the same as total_convergences_part_pointer_maps_size, because the unique pointer maps POINT TO elements in the global scraper net map, so they use NO additional space.

Notice that after one 4 hour scraper run, the number of unique parts pointed to by the global cache is 49. If the scraper node is not rebooted between runs, then after the second run, the number of unique pointers should be approximately the same, or the same as the parts_map_size.

@jamescowens jamescowens marked this pull request as ready for review August 19, 2020 13:18
@jamescowens jamescowens modified the milestones: Gladys, Fern Aug 20, 2020
@jamescowens
Copy link
Member Author

@cyrossignol and I are running this and it is running very smoothly and saves quite a bit of memory already, and will be even more important as the network grows. Given that we are going to put this in Fern, rather than waiting for Gladys.

@jamescowens jamescowens force-pushed the integrated_scraper_2 branch 4 times, most recently from cd6a181 to c64a17e Compare August 21, 2020 22:16
@jamescowens
Copy link
Member Author

I am still working on the locking on this.

@jamescowens
Copy link
Member Author

Locks like the locking is good. Seeing stablility across all nodes now. Will see through the SB cycle today (8/22).

@jamescowens jamescowens force-pushed the integrated_scraper_2 branch 2 times, most recently from 369e519 to 7956d23 Compare August 22, 2020 21:42
@jamescowens
Copy link
Member Author

I squashed the commits for merging.

This commit changes the ConvergedManifestPartsMap to a
map of pointers, ConvergedManifestPartPtrsMap.

The CScraperManifest held bythe ConvergedManifest is via a shared_ptr.
In turn the CParts in the CScraperManifest::CSplitBlob vParts are also
mapped intothe ConvergedManifestPartPtrsMap, which is indexed by project.
The part pointers in the ConvergedManifestPartPtrsMap are valid
for the same lifetime as the CScraperManifest held by shared pointer
in the ConvergedManifest, so this is safe.

Thjs minimizes the changes to the rest of the scraper to achieve
this optimization. Some adjustments to the testing harness was
necessary. I also found and put in a missing IsComplete() check
in BinCScraperManifestsByScraper(), which may have been responsible
for the extremely rare occurence of missing projects in a local
node convergence and explainmagnitude.
@jamescowens jamescowens changed the title scraper: Tracking PR for scraper global statistics cache optimization scraper: Scraper global statistics cache optimization Aug 22, 2020
@jamescowens jamescowens merged commit cdc29cf into gridcoin-community:development Aug 23, 2020
jamescowens added a commit that referenced this pull request Sep 4, 2020
Added
 - Backport newer uint256 types from Bitcoin #1570 (@cyrossignol)
 - Implement project level rain for rainbymagnitude #1580 (@jamescowens)
 - Upgrade utilities (Update checker and snapshot downloader/application) #1576 (@iFoggz)
 - Provide fees collected in the block by the miner #1601 (@iFoggz)
 - Add support for generating legacy superblocks from scraper stats #1603 (@cyrossignol)
 - Port of the Bitcoin Logger to Gridcoin #1600 (@jamescowens)
 - Implement zapwallettxes #1605 (@jamescowens)
 - Implements a global event filter to suppress help question mark #1609 (@jamescowens)
 - Add next target difficulty to RPC output #1615 (@cyrossignol)
 - Add caching for block hashes to CBlock #1624 (@cyrossignol)
 - Make toolbars and tray icon red for testnet #1637 (@jamescowens)
 - Add an rpc call convergencereport #1643 (@jamescowens)
 - Implement newline filter on config file read in #1645 (@jamescowens)
 - Implement beacon status icon/button #1646 (@jamescowens)
 - Add gridcointestnet.png #1649 (@caraka)
 - Add precision to support magnitudes less than 1 #1651 (@cyrossignol)
 - Replace research accrual calculations with superblock snapshots #1657 (@cyrossignol)
 - Publish example gridcoinresearch.conf as a md document to the doc directory #1662 (@jamescowens)
 - Add options checkbox to disable transaction notifications #1666 (@jamescowens)
 - Add support for self-service beacon deletion #1695 (@cyrossignol)
 - Add support for type-specific contract fee amounts #1698 (@cyrossignol)
 - Add verifiedbeaconreport and pendingbeaconreport #1696 (@jamescowens)
 - Add preliminary testing option for block v11 height on testnet #1706 (@cyrossignol)
 - Add verified beacons manifest part to superblock validator #1711 (@cyrossignol)
 - Implement beacon, vote, and superblock display categories/icons in UI transaction model #1717 (@jamescowens)
 - neuralnet: Add integrity checking to researcher accrual snapshot registry #1727 (@jamescowens)
 - Add workaround for scrypt assembly on macOS #1740 (@cyrossignol)
 - gui: Build onboarding/beacon wizard #1739 (@cyrossignol)
 - doc: Add CONTRIBUTING.md from bitcoin #1723 (@div72)
 - rpc: Implement inspectaccrualsnapshot and parseaccrualsnapshotfile #1744 (@jamescowens)
 - scraper: Add disk based state backing for verified beacon list in scraper #1751 (@jamescowens)
 - Add ability to recover beacon in block version 11+ #1768 (@cyrossignol)
 - refactor: Add transaction context to contract handlers #1777 (@cyrossignol)
 - gui: Add context for when BOINC is attached to a pool #1775 (@cyrossignol)
 - doc: Clarify what to do if PR in multiple categories (for CONTRIBUTING.md) #1798 (@RoboticMind)
 - qt: Add option to choose not to start the wallet minimized #1804 (@jamescowens)
 - superblock: Add check for OutOfSyncByAge to SuperblockValidator::Validate #1806 (@jamescowens)
 - contract: Standardize contract validation and add block context #1808 (@cyrossignol)
 - add seed.gridcoin.pl to default config #1812 (@wilkart)
 - gui: Implement sidestake send display #1813 (@jamescowens)
 - gui: Add pool/investor pages to researcher wizard #1819 (@cyrossignol)
 - ci: Port lint scripts from Bitcoin #1823 (@div72)
 - doc: Create basic readme in contrib #1826 (@RoboticMind)
 - gui: Implement TransactionRecord::Message #1829 (@jamescowens)
 - rpc: Add private_key_available to beaconstatus #1833 (@a123b)
 - gui: Validate email address in researcher wizard #1840 (@a123b)
 - rpc: Add "getrawwallettransaction" RPC function #1842 (@cyrossignol)
 - consensus: Set block version 11 threshold height for mainnet #1862 (@cyrossignol)

Changed
 - Upgrade LevelDB from v1.17 to v1.20 #1562 (@cyrossignol)
 - Re-enable scrypt optimizations #1450 (@denravonska)
 - Derive CScript from prevector type (optimization) #1554 (@cyrossignol)
 - Disable quorum for grandfathered blocks to speed up sync #1568 (@cyrossignol)
 - Refactor hashBoinc for binary claim contexts #1558 (@cyrossignol)
 - integrated_scraper_2 branch tracking PR #1559 (@jamescowens)
 - Upgrade depends  - OpenSSL to 1.1.1d #1581 (@jamescowens)
 - Ubuntu 19.10 fixes #1590 (@denravonska)
 - Force a re-parse of legacy claims in generated blocks #1592 (@cyrossignol)
 - Improve the "versionreport" RPC output #1595 (@cyrossignol)
 - Overhaul the core tally and accrual system #1583 (@cyrossignol)
 - Overhaul the superblock quorum system #1597 (@cyrossignol)
 - Add more data to the "superblocks" RPC output #1599 (@cyrossignol)
 - Update Windows Build doc #1606 (@barton2526)
 - Change the order of calls in gridcoinresearchd.cpp to optimize rpc shunt path #1610 (@jamescowens)
 - Change staking tooltip to display frequency #1611 (@jamescowens)
 - Enhancements to ETTS #1442 (@jamescowens)
 - Standardize money values as integers #1614 (@cyrossignol)
 - Clean up and optimize legacy coin age code #1616 (@cyrossignol)
 - Some scraper cleanups #1620 (@jamescowens)
 - Reorganize accrual code and fix 6-month cutoff #1630 (@cyrossignol)
 - Update Copyright years #1633 (@barton2526)
 - Change team whitelist delimiter to <> for CPID detection #1634 (@cyrossignol)
 - Change team whitelist separator to <> to accomodate more team names #1632 (@jamescowens)
 - Change Curl download speed type to support older environments #1640 (@cyrossignol)
 - Optimize logo SVGs used for tray icons #1638 (@cyrossignol)
 - Tweak consolidateunspent rpc function #1644 (@jamescowens)
 - ETTS and staking icon enhancements #1650 (@jamescowens)
 - Implement new transaction fees for block version 11 #1652 (@jamescowens)
 - Optimize in-memory storage of superblock data #1653 (@cyrossignol)
 - Miscellaneous superblock API improvements and housekeeping #1654 (@cyrossignol)
 - Update openssl to 1.1.1f compatibility #1660 (@jamescowens)
 - Optimize bdb to avoid synchronous flush of database #1659 (@jamescowens)
 - Add support for CPID input to "lifetime" RPC function #1668 (@cyrossignol)
 - Overhaul the contract handling system #1669 (@cyrossignol)
 - Make the autostart mainnet/testnet aware #1671 (@jamescowens)
 - Remove slashes from User Agent in peers tab #1674 (@div72)
 - Refactor contracts for polymorphic binary payloads #1676 (@cyrossignol)
 - Overhaul the beacon system #1678 (@cyrossignol)
 - Replace boost::optional<T&> with non-owning pointers #1680 (@cyrossignol)
 - Optimize proof-of-stake validation #1681 (@cyrossignol)
 - Updated Slack link #1683 (@NeuralMiner)
 - Update build-unix.md #1686 (@Quezacoatl1)
 - Replace deprecated QT methods #1693 (@Pythonix)
 - Made protocol.h more similar to bitcoin #1688 (@Pythonix)
 - Touch up some details for block version 11 #1697 (@cyrossignol)
 - More tweaks for block version 11 #1700 (@cyrossignol)
 - Finish the conversion to the BCLog class based logger #1699 (@jamescowens)
 - Move claim version transitional code in miner for proper signature #1712 (@cyrossignol)
 - doc: Update threads in coding.txt #1730 (@div72)
 - qt: Include QPainterPath in trafficgraphwidget.cpp #1733 (@div72)
 - doc: Update doc/build-unix.md #1731 (@div72)
 - gui: Show peers tab on connections icon click #1734 (@div72)
 - refactor: Change return type of IsMine to isminetype && move wallet files to wallet directory #1722 (@div72)
 - build: Updates boost to 1.73.0 for depends #1673 (@jamescowens)
 - doc: Update Unit Test Readme #1743 (@RoboticMind)
 - wallet: Change Assert To Error Message In kernel.cpp #1748 (@RoboticMind)
 - scraper: Shorten display representation of verification codes #1754 (@cyrossignol)
 - log: Change ".B." to Clear Message #1758 (@RoboticMind)
 - util: Fix braindamage in GetDefaultDataDir() #1737 (@jamescowens)
 - scraper: Improve scraper processing of beacon verifications #1760 (@jamescowens)
 - scraper: Add instrumentation to convergencereport #1763 (@jamescowens)
 - rpc: Improve rpc stress test script #1767 (@tunisiano187)
 - Generalize enum serialization #1770 (@cyrossignol)
 - scraper: Improve handling of ETags in http class and tweak verified beacon logic #1776 (@jamescowens)
 - scraper: Improve ProcessNetworkWideFromProjectStats and other tweaks #1778 (@jamescowens)
 - researcher: Automate beacon advertisement for renewals only #1781 (@cyrossignol)
 - gui: Tweak behavior of beacon page in researcher wizard #1784 (@cyrossignol)
 - Prepare for block version 11 hard-fork on testnet #1787 (@cyrossignol)
 - scraper: Modify UpdateVerifiedBeaconsFromConsensus #1791 (@jamescowens)
 - gui: Optimize OverviewPage::updateTransactions() #1794 (@jamescowens)
 - ci: Adopt ci changes from Bitcoin #1795 (@div72)
 - consensus: switch snapshot accrual calculation to integer arithmetic #1799 (@cyrossignol)
 - voting: Overhaul the voting system #1809 (@cyrossignol)
 - contract: Optimize contract replay after chain reorganization #1815 (@cyrossignol)
 - contract: Reimplement transaction messages as contracts #1816 (@cyrossignol)
 - staking: Sign claim contracts with coinstake transaction #1817 (@cyrossignol)
 - gui: Change research wizard text #1820 (@div72)
 - net: Update protocol version and clean up net messaging #1824 (@cyrossignol)
 - rpc, wallet: Corrections to GetAmounts #1825 (@jamescowens)
 - gui: Tweak some minor researcher wizard details #1830 (@cyrossignol)
 - gui: Change GetEstimatedStakingFrequency text #1836 (@jamescowens)
 - scraper: Scraper global statistics cache optimization #1837 (@jamescowens)
 - doc: Update Vulnerability Response Process #1843 (@RoboticMind)
 - scraper: Optimization of manifest and parts sharing between ConvergedScraperStatsCache, mapManifest, and mapParts #1851 (@jamescowens)
 - consensus: Update Checkpoints #1855 (@barton2526)
 - docs: Update docs to build off master #1856 (@barton2526)
 - gui: Fix and improve GUI combo box styles #1858 (@cyrossignol)
 - build: Tweak Gridcoin installer for Fern release #1863 (@jamescowens)

 Removed
 - Remove old research age checks (rebase #1365) #1572 (@cyrossignol)
 - Remove PrimaryCPID check from diagnostics dialog #1586 (@cyrossignol)
 - Remove missed label for PrimaryCPID from diagnostics #1588 (@cyrossignol)
 - Remove legacy quorum messaging system (@neural network) #1589 (@cyrossignol)
 - Remove old remnants of legacy smart contract experiments #1594 (@cyrossignol)
 - Remove block nonce for version 11 #1622 (@cyrossignol)
 - Delete obsolete contrib/Installer and Upgrader directories #1623 (@jamescowens)
 - Remove redundant LoadAdminMessages() calls #1625 (@cyrossignol)
 - Remove some legacy informational RPC commands #1658 (@cyrossignol)
 - Remove informational magnitude field from binary claims #1661 (@cyrossignol)
 - Remove fDebug3,4, and net and convert to BCLog::LogFlags #1663 (@jamescowens)
 - Remove qt5.7.1 depends support build System #1665 (@iFoggz)
 - Remove unused jQuery library #1679 (@cyrossignol)
 - Remove unused NetworkTimer() function and global state #1701 (@cyrossignol)
 - Refactor claim context objects into contracts #1704 (@cyrossignol)
 - Clean old assets up #1718 (@div72)
 - Remove legacy "rain" RPC (not by-project rain) #1742 (@cyrossignol)
 - Temporarily disable voting system on testnet #1769 (@cyrossignol)
 - gui: Remove legacy GUI transaction description for contracts #1772 (@cyrossignol)
 - gui: Remove transaction fee setting #1780 (@cyrossignol)
 - trivial: Cleanup unused legacy functions #1793 (@cyrossignol)
 - mining, rpc: Remove kernel-diff-best and kernel-diff-sum #1796 (@jamescowens)
 - refactor: Remove libs subdirectory #1802 (@div72)
 - scraper: cleanup unused/unnecessary functions #1803 (@jamescowens)
 - gui: Remove useless "Detach databases at shutdown" #1810 (@jamescowens)
 - test: Remove testnet condition for standard transactions #1814 (@cyrossignol)
 - consensus: Remove transitional testnet code #1854 (@cyrossignol)

 Fixed
 - Fix "Owed" amount in output of "magnitude" RPC method #1569 (@cyrossignol)
 - Add support for paths with special characters on Windows #1571 (@cyrossignol)
 - Fix lingering peers.dat temp files and clean up remaining paths #1582 (@cyrossignol)
 - Fix incorrect beacon length warning in GUI transaction list #1585 (@cyrossignol)
 - Fix default config file line endings on Windows #1587 (@cyrossignol)
 - Reenable Travis builds for MacOS #1591 (@jamescowens)
 - Correct peer detail info background color #1593 (@jamescowens)
 - Fix exception in debug3 mode #1598 (@cyrossignol)
 - Fix deadlock in "getmininginfo" RPC function #1596 (@cyrossignol)
 - Fix accuracy of statistics in "network" RPC output #1602 (@cyrossignol)
 - Fix heights for quorum vote weight calculations #1604 (@cyrossignol)
 - Fix deadlock in log archiver when rename fails #1607 (@cyrossignol)
 - Fix a spurious segmentation fault during client load on Windows with fast CPUs #1608 (@jamescowens)
 - Fix lock order debugging and potential deadlocks #1612 (@jamescowens)
 - Add dependencies #1613 (@Scalextrix)
 - Fix std namespace pollution #1617 (@denravonska)
 - Add missing condition for newbie accrual computer #1618 (@cyrossignol)
 - Track first reward blocks in research accounts #1619 (@cyrossignol)
 - Fix lingering beacon warning after advertisement #1627 (@cyrossignol)
 - Fix accrual calculation for new, zero-magnitude CPIDs #1636 (@cyrossignol)
 - Fix diagnostics, add ETTS test, fix tooltipcolor, add missing lock, and add email=investor check #1647 (@jamescowens)
 - Fix help message of two RPC methods #1656 (@div72)
 - Fix legacy accrual for newbie with non-zero past reward #1667 (@cyrossignol)
 - Fix GUI autostart on Windows for paths with wide characters #1670 (@cyrossignol)
 - Qualify boost bind placeholders with their full namespace #1672 (@Ponce)
 - Fix suffix when copying txids #1677 (@div72)
 - Unnecessary if-statement removed #1685 (@Pythonix)
 - Fix consolidatemsunspent Help Message #1687 (@Pythonix)
 - Fix gettransaction help message #1691 (@Pythonix)
 - Fix GetNewMint To Look for Stakes #1692 (@RoboticMind)
 - Suppress deprecated copy warnings for Qt with GCC 9+ #1702 (@cyrossignol)
 - Fix exclusion error on stats processing and misplaced ENDLOCK logging entry #1710 (@jamescowens)
 - Removed unnecessary comparison #1708 (@Pythonix)
 - Fixed typo #1707 (@Pythonix)
 - Fix out-of-bounds exception for peers tab version slashes #1713 (@cyrossignol)
 - Fix transition for v1 superblocks when reorganizing #1714 (@cyrossignol)
 - Touch up transition to version 2 transactions #1715 (@cyrossignol)
 - Avoid mutating transactions in ConnectBlock() #1716 (@cyrossignol)
 - Skip beacon advertisement when already pending #1726 (@cyrossignol)
 - Fix Windows cross-compilation in newer environments #1728 (@cyrossignol)
 - Fix out-of-bounds access in IsMineInner() #1736 (@cyrossignol)
 - Fix a couple of block version 11 issues #1738 (@cyrossignol)
 - Fix null pointer dereference in GUI researcher model #1741 (@cyrossignol)
 - accrual: Reset research accounts when rebuilding accrual snapshots #1745 (@cyrossignol)
 - scraper: Correct update for verified beacons #1747 (@jamescowens)
 - accrual: Refactor tally initialization for snapshot rebuild #1749 (@cyrossignol)
 - rpc: Fix "cpid" field in "beaconconvergence" RPC output #1750 (@cyrossignol)
 - accrual: Fix snapshot accrual superblock state transitions #1752 (@cyrossignol)
 - scraper: Correct stale verified beacon logic #1753 (@jamescowens)
 - rpc: Correct possible divide by zero in getblockstats #1755 (@jamescowens)
 - gui: Fix issues with researcher wizard flow #1756 (@cyrossignol)
 - wallet: Stop Error When Starting From Zero #1759 (@RoboticMind)
 - Don't count empty email as explicit investor #1761 (@cyrossignol)
 - accrual: Fix snapshot accrual superblock state transitions #1764 (@cyrossignol)
 - rpc: Cleanup Help Message and Fix Typo #1771 (@RoboticMind)
 - scraper: Fix scraper etag header case sensitivity #1773 (@cyrossignol)
 - consensus: Use explicit time to check if superblock needed #1774 (@cyrossignol)
 - gui: Fix scroll area dark theme styles #1785 (@cyrossignol)
 - rpc, gui: Fix three divide by zero possibilities #1789 (@jamescowens)
 - rpc: Fix balance pre-check in "rainbymagnitude" RPC #1792 (@cyrossignol)
 - accrual: Fix outdated comment and correct grammar #1800 (@RoboticMind)
 - gui: Fix stuck cursor on labels #1801 (@div72)
 - beacon: Fix research wizard beacon renewal status #1805 (@cyrossignol)
 - gui: Fix translations for port numbers #1818 (@cyrossignol)
 - util: Create parent directory #1821 (@div72)
 - mining: Fix coinstake/claim signature order #1828 (@cyrossignol)
 - voting: Remove double increment in loop #1831 (@cyrossignol)
 - neuralnet, scraper: Fix compilation with gcc5 and older libcurl #1832 (@a123b)
 - wallet: Fix smallest coin selection for contracts #1841 (@cyrossignol)
 - gui: Fix display of polls with no votes yet #1844 (@cyrossignol)
 - gui: add indentation to diagnostic status bar labels #1849 (@jamescowens)
 - voting, gui: Fix formatting and alignment of vote shares and percent #1850 (@jamescowens)
 - wallet, rpc: Fix for self-transactions in listtransactions #1852 (@jamescowens)
 - accrual: Clear any accrual snapshots when syncing from pre-v11 #1853 (@cyrossignol)
 - accrual: Fix reset of accrual directory if starting sync below research age height #1857 (@jamescowens)
 - gui: Fix researcher wizard layout on macOS with native theme #1860 (@cyrossignol)
@jamescowens jamescowens deleted the integrated_scraper_2 branch June 13, 2021 23:53
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants