I've had a branch going for the last week or so, trying to drop account from Person. It's been an abject failure, so I'm ditching it and going back to the drawing board.
The problems are:
1. Although Person.account isn't used all that much, it turns out that its existence is relied on by other things just enough to cause a great number of problems when it's taken away.
2. Removing Person.account (or replacing it with a lookup against EmailAddress.account) leads to a race condition when merging accounts and causes OpenID identifiers essentially to become orphaned. Since the point of this bug is that OpenID should be fixed, not broken further, I figured that this was a Bad Thing.
Item 2 on this list is work-around-able, but the workaround is a kludge and makes fairly complex code even worse.
So, I'm scrapping that branch and going back to the lowest level of the problem: inconsistent data in the DB. Whether that will be any easier to solve, I don't know.
I've had a branch going for the last week or so, trying to drop account from Person. It's been an abject failure, so I'm ditching it and going back to the drawing board.
The problems are:
1. Although Person.account isn't used all that much, it turns out that its existence is relied on by other things just enough to cause a great number of problems when it's taken away. account) leads to a race condition when merging accounts and causes OpenID identifiers essentially to become orphaned. Since the point of this bug is that OpenID should be fixed, not broken further, I figured that this was a Bad Thing.
2. Removing Person.account (or replacing it with a lookup against EmailAddress.
Item 2 on this list is work-around-able, but the workaround is a kludge and makes fairly complex code even worse.
So, I'm scrapping that branch and going back to the lowest level of the problem: inconsistent data in the DB. Whether that will be any easier to solve, I don't know.