Commit fcdb55e
fix(store): exempt contacts with message history from MED-2 eviction
On a busy TCP/transport attachment the destinations table churns past the
1000-row cap fast. Eviction keyed purely on lastSeen, so an un-favorited
contact you were actively conversing with could be deleted mid-conversation
— taking its public key with it — leaving the chat stuck on "(unknown
sender)" and unable to send until the peer re-announced.
Add `hash NOT IN (SELECT contactHash FROM messages)` to the eviction
subquery on both platforms (Room DAO + SQLDelight .sq), alongside the
existing favorite / userLabel / hidden exemptions. Message-history contacts
are bounded by real conversations, so the table stays well under the
CursorWindow limit the cap protects. Regression test added in
StorageRoundTripTest (real SQLite via Robolectric).
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>1 parent 74388e1 commit fcdb55e
4 files changed
Lines changed: 61 additions & 3 deletions
File tree
- androidApp/src
- main/kotlin/io/github/thatsfguy/reticulum/android/storage
- test/kotlin/io/github/thatsfguy/reticulum/android/storage
Lines changed: 14 additions & 0 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
71 | 71 | | |
72 | 72 | | |
73 | 73 | | |
| 74 | + | |
| 75 | + | |
| 76 | + | |
| 77 | + | |
| 78 | + | |
| 79 | + | |
| 80 | + | |
| 81 | + | |
| 82 | + | |
| 83 | + | |
| 84 | + | |
| 85 | + | |
| 86 | + | |
74 | 87 | | |
75 | 88 | | |
76 | 89 | | |
| |||
79 | 92 | | |
80 | 93 | | |
81 | 94 | | |
| 95 | + | |
82 | 96 | | |
83 | 97 | | |
84 | 98 | | |
| |||
Lines changed: 33 additions & 0 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
74 | 74 | | |
75 | 75 | | |
76 | 76 | | |
| 77 | + | |
| 78 | + | |
| 79 | + | |
| 80 | + | |
| 81 | + | |
| 82 | + | |
| 83 | + | |
| 84 | + | |
| 85 | + | |
| 86 | + | |
| 87 | + | |
| 88 | + | |
| 89 | + | |
| 90 | + | |
| 91 | + | |
| 92 | + | |
| 93 | + | |
| 94 | + | |
| 95 | + | |
| 96 | + | |
| 97 | + | |
| 98 | + | |
| 99 | + | |
| 100 | + | |
| 101 | + | |
| 102 | + | |
| 103 | + | |
| 104 | + | |
| 105 | + | |
| 106 | + | |
| 107 | + | |
| 108 | + | |
| 109 | + | |
77 | 110 | | |
78 | 111 | | |
79 | 112 | | |
| |||
Lines changed: 8 additions & 3 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
750 | 750 | | |
751 | 751 | | |
752 | 752 | | |
753 | | - | |
754 | | - | |
755 | | - | |
| 753 | + | |
| 754 | + | |
| 755 | + | |
| 756 | + | |
| 757 | + | |
| 758 | + | |
| 759 | + | |
| 760 | + | |
756 | 761 | | |
757 | 762 | | |
758 | 763 | | |
| |||
Lines changed: 6 additions & 0 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
116 | 116 | | |
117 | 117 | | |
118 | 118 | | |
| 119 | + | |
| 120 | + | |
| 121 | + | |
| 122 | + | |
| 123 | + | |
119 | 124 | | |
120 | 125 | | |
121 | 126 | | |
122 | 127 | | |
123 | 128 | | |
124 | 129 | | |
125 | 130 | | |
| 131 | + | |
126 | 132 | | |
127 | 133 | | |
128 | 134 | | |
| |||
0 commit comments