theanomaly
Joined 11 years ago
Joined 11 years ago
Here's what we think is happening: Before the fix (pre-15.12.4):
1. Failover starts
2. Both instances accept and process writes simultaneously
3. Failover eventually completes after the writer steps down
4. Result: Potential data consistency issues ???
After the fix (15.12.4+):
1. Failover starts
2. If the old writer doesn't demote before the new writer is promoted, the storage layer now detects this and rejects write requests
3. Both instances restart/crash
4. Failover fails or requires manual intervention
The underlying race condition between writer demotion and reader promotion still exists - AWS just added a safety mechanism at the storage layer to prevent the dangerous scenario of two writers operating simultaneously. They essentially converted a data inconsistency risk into an availability issue. This would explain why we're still seeing failover failures on 15.12 - the race condition wasn't eliminated, just made safer.
The comment in the release notes about "fixed a race condition where an old writer instance may not step down" is somewhat misleading - it's more accurate to say they "mitigated the consequences of the race condition" by having the storage layer reject writes when it detects the problematic state and that is probably why AWS Support did not point us to this release when we raised the issue.
I get an edgemesh site to accept file A (perhaps the site allows me to upload a user avatar, upload an image on a forum, etc). I then behave as a node in the mesh, and receive file A. When I get a request to replicate file A to someone else, I send them file A', they check the MD5 hash, and the hash matches. Not seeing how that doesn't work?
It is admittedly a narrow attack, but I think it works.
It does seem to me though that if I could coerce/direct the site into accepting one image that I created, I could manage to replicate a second, different file throughout the network. Obviously assuming I computed both images ahead of time and both image formats were unperturbed by the nonsense appended to file by the attack.
Am I missing something, or would this let any node (supernode/browser) in the system potentially replace arbitrary content with their own content? [1]
Hopefully JS isn't being served by this mechanism (attack vector pretty obvious there), but even images are still a concern [2] [3].
[1] https://en.wikipedia.org/wiki/Collision_attack#Chosen-prefix...
[2] https://threatpost.com/apple-patches-ios-flaw-exploitable-by...
This is true not just for computing algorithms, but for developer time/brain space as well. Single-threaded applications are far simpler to understand.
The takeaway shouldn't be "test it on a single laptop first", but rather "will the volume/velocity of data now/in the future absolutely preclude doing this on a single laptop". At my work, we process probably a hundred TB in a few-hour batch processing window at night, Terabytes of which remain in memory for fast access. There is no choice there but to pay the overhead.
It’s simple – here’s how it works: Say a community is built in Year 1. The community’s streets need to be rebuilt every 30 years. In Year 30 a new, identical community is built. Now twice the amount of taxes are coming, and so for time being the property owners only need to pay half the amount. And 30 years later, in Year 60, two new communities are built; as long as the number of properties and property taxes are doubling every 30 years, they can continue to pay half the amount.
Year 1, one community (community A), over the next 30 years is going to pay for 1 community's worth of roads (call it a 30 year loan given on day 1, let's say 1M dollars). So, the cost for community A is 1M dollars for 30 community-years of roads.
Year 30, we add a new community B to the mix. This community needs its own roads, so it needs a loan for 1M dollars it will pay off over the next 30 years. However, community A's roads have worn out. Community A just finished paying off their first loan, so they'll need a new one.
At year 60, we have paid 3M dollars, and gotten 90 "community-years" of roads out of it. This is no different than the equivalent end of the first year with one community, one loan, and 30 "community-years" of roads.
What am i missing from this example?
Further, recent research has shown the number of open DNS resolvers to be in the range of 15-30 million[1].
Since the article describes a single domain name was used in the attack however, that's not what happened here.