| 1281 | } |
| 1282 | |
| 1283 | static int64_t StreamEstimateDistanceFromFirstEverEntry(const StreamMetadata &metadata, StreamEntryID id) { |
| 1284 | if (metadata.entries_added == 0) { |
| 1285 | return 0; |
| 1286 | } |
| 1287 | if (metadata.size == 0 && id < metadata.last_entry_id) { |
| 1288 | return static_cast<int64_t>(metadata.entries_added); |
| 1289 | } |
| 1290 | if (id == metadata.last_entry_id) { |
| 1291 | return static_cast<int64_t>(metadata.entries_added); |
| 1292 | } else if (id > metadata.last_entry_id) { |
| 1293 | return -1; |
| 1294 | } |
| 1295 | if (metadata.max_deleted_entry_id == StreamEntryID{0, 0} || metadata.max_deleted_entry_id < metadata.first_entry_id) { |
| 1296 | if (id < metadata.first_entry_id) { |
| 1297 | return static_cast<int64_t>(metadata.entries_added - metadata.size); |
| 1298 | } else if (id == metadata.first_entry_id) { |
| 1299 | return static_cast<int64_t>(metadata.entries_added - metadata.size + 1); |
| 1300 | } |
| 1301 | } |
| 1302 | return -1; |
| 1303 | } |
| 1304 | |
| 1305 | static void CheckLagValid(const StreamMetadata &stream_metadata, StreamConsumerGroupMetadata &group_metadata) { |
| 1306 | bool valid = false; |