So I'm trying to find the fastest way to fully sync a parity node in order to get all smart contract events, not just account states.
The problem I've found is that when parity has warp syncing enabled, the node will say it's synchronized, and the jsonRPC will allow you to successfully do any eth_getLogs call (or a web3 equivalent like web3.eth.contract.allEvents()), but with a freshly warped node, the data it sends back is incomplete (doesn't have all the events on the blockchain matching filter topics) without indicating any sort of errors (because the node doesn't even know about the data that it's missing yet). And as far as I can tell, there is no way to know if the response you get back is complete or not as long as parity is set to warp sync.
I tried to mitigate this problem by syncing parity with no-warp enabled, but after 3 weeks the node is still 500,000 blocks behind, and by my calculations will take another 2+ weeks to finish syncing which isn't acceptable (network/computation resources shouldn't be a problem as I'm running these on AWS C5.xlarge). I've also tried cloning entire VMs I have that are running fully synced parity nodes, but for some reason the cloned VMs have issues syncing in the future and holding connections to peers (even though I delete the network key and let it generate a new one)
I looked into Geth as a solution, and while initial syncing is fine, it's a deal-breaker because it doesn't have continuous db pruning after the initial sync so the DB size grows too quickly compared to parity with it's continuous pruning.
Basically my question is: How can I run/sync a parity node and be able to know if I have all contract events downloaded so I can make eth_getLogs calls and know if the data I get back is complete or not? Alternatively, is there a good way to clone my existing synced parity nodes?