()
| 521 | } |
| 522 | |
| 523 | private RocksIterator locateMiddle() throws RocksDBException { |
| 524 | var bucket = stateMachine.getBucket(); |
| 525 | var it = bucket.getData().iterator(); |
| 526 | var keyNumbers = bucket.getData().getKeyNumbers(); |
| 527 | var count = keyNumbers / 2; |
| 528 | if (count <= 0) // 这里可以考虑配置一个较大的值,即记录数很少的时候不分桶。 |
| 529 | return null; |
| 530 | for (it.seekToFirst(); it.isValid() && count > 0; it.next(), --count) { |
| 531 | // searching middle |
| 532 | } |
| 533 | if (!it.isValid()) { |
| 534 | it.close(); |
| 535 | throw new RocksDBException("middle key not found."); |
| 536 | } |
| 537 | logger.info("splitting start locateMiddle keyNumbers={} middle={} {}", |
| 538 | keyNumbers, new Binary(it.key()), |
| 539 | formatMeta(stateMachine.getBucket().getBucketMeta())); |
| 540 | return it; |
| 541 | } |
| 542 | |
| 543 | private RocksIterator locateMiddle(Binary middleKey) { |
| 544 | var it = stateMachine.getBucket().getData().iterator(); |
no test coverage detected