Skip to content

RheaKV: 调用 putIfAbsent 抛出异常 RouteTableException message: fail to find region by key #1233

@en-hui

Description

@en-hui

Describe the bug

使用 putIfAbsent 报错
2025-10-11T08:28:18,603 [dp-oraclesourcetask-1359-2-reader] ERROR com.alipay.sofa.jraft.rhea.client.RegionRouteTable - There is a high probability that the data in the region table is corrupted. {}
2025-10-11T08:28:18,603 [dp-oraclesourcetask-1359-2-reader] ERROR com.alipay.sofa.jraft.rhea.client.RegionRouteTable - --------------------------------------------------------------------------- {}
2025-10-11T08:28:18,603 [dp-oraclesourcetask-1359-2-reader] ERROR com.alipay.sofa.jraft.rhea.client.RegionRouteTable - * RelatedKey: 5B53504C49545F494E49542D313335392D302D3133323737302D313736303137313134353735345D2D32. {}
2025-10-11T08:28:18,605 [dp-oraclesourcetask-1359-2-reader] ERROR com.alipay.sofa.jraft.rhea.client.RegionRouteTable - * RangeTable: {}. {}
2025-10-11T08:28:18,605 [dp-oraclesourcetask-1359-2-reader] ERROR com.alipay.sofa.jraft.rhea.client.RegionRouteTable - * RegionTable: {}. {}
2025-10-11T08:28:18,605 [dp-oraclesourcetask-1359-2-reader] ERROR com.alipay.sofa.jraft.rhea.client.RegionRouteTable - --------------------------------------------------------------------------- {}

Caused by: com.alipay.sofa.jraft.rhea.errors.RouteTableException: key: 5B53504C49545F494E49542D313335392D302D3133323737302D313736303137313134353735345D2D38, message: fail to find region by key
at com.alipay.sofa.jraft.rhea.client.RegionRouteTable.reject(RegionRouteTable.java:335)
at com.alipay.sofa.jraft.rhea.client.RegionRouteTable.findRegionByKeyWithoutLock(RegionRouteTable.java:199)
at com.alipay.sofa.jraft.rhea.client.RegionRouteTable.findRegionByKey(RegionRouteTable.java:188)
at com.alipay.sofa.jraft.rhea.client.pd.AbstractPlacementDriverClient.findRegionByKey(AbstractPlacementDriverClient.java:137)
at com.alipay.sofa.jraft.rhea.client.DefaultRheaKVStore.internalPutIfAbsent(DefaultRheaKVStore.java:1311)
at com.alipay.sofa.jraft.rhea.client.DefaultRheaKVStore.putIfAbsent(DefaultRheaKVStore.java:1290)
at com.alipay.sofa.jraft.rhea.client.DefaultRheaKVStore.putIfAbsent(DefaultRheaKVStore.java:1296)
at com.alipay.sofa.jraft.rhea.client.DefaultRheaKVStore.bPutIfAbsent(DefaultRheaKVStore.java:1306)
at com.datapipeline.base.coordinator.rheakv.kvstore.DpRheaKVStore.lambda$bPutIfAbsent$2(DpRheaKVStore.java:49)
at com.datapipeline.base.coordinator.rheakv.kvstore.DpRheaKVStore.executeWithRetry(DpRheaKVStore.java:114)
... 13 more

参考了https://github.com/sofastack/sofa-jraft/issues/984的回答,但我只设置了一个regionId为-1,且没有配置该region的数据start和end

我记录的并不是数字类型的key,5B53504C49545F494E49542D313335392D302D3133323737302D313736303137313134353735345D2D38 转为字符串为:[SPLIT_INIT-1359-0-132770-1760171145754]-8
这是使用问题,还是代码bug呢

Expected behavior

Actual behavior

Steps to reproduce

Minimal yet complete reproducer code (or GitHub URL to code)

    RheaKVStoreOptions opts = new RheaKVStoreOptions();
    config.fillRheaKvStoreOptions(opts);
    kvStore.addLeaderStateListener(-1, rheaKvStatusListener);
    if (kvStore.init(opts)) {

// 参数设置
public void fillRheaKvStoreOptions(RheaKVStoreOptions kvStoreOptions) {
final NodeOptions nodeOptions = getNodeOptions();

Endpoint endpoint = parseServerAddress(this.serverAddress);
StoreEngineOptionsConfigured storeOptsConfigured =
    StoreEngineOptionsConfigured.newConfigured()
        .withStorageType(StorageType.RocksDB)
        .withRocksDBOptions(
            RocksDBOptionsConfigured.newConfigured().withDbPath(this.dbPath).config())
        .withRaftDataPath(this.dataPath)
        .withServerAddress(endpoint)
        .withCommonNodeOptions(nodeOptions);
if (!enableMetrics) {
  storeOptsConfigured.withMetricsReportPeriod(-1);
}
StoreEngineOptions storeOpts = storeOptsConfigured.config();
final PlacementDriverOptions pdOptions =
    PlacementDriverOptionsConfigured.newConfigured().withFake(true).config();

kvStoreOptions.setClusterName(groupId);
kvStoreOptions.setUseParallelCompress(true);
kvStoreOptions.setInitialServerList(this.initialServerAddress);
kvStoreOptions.setStoreEngineOptions(storeOpts);
kvStoreOptions.setPlacementDriverOptions(pdOptions);

}

Environment

  • SOFAJRaft version: 1.3.15.bugfix
  • JVM version (e.g. java -version): jdk17
  • OS version (e.g. uname -a):
  • Maven version:
  • IDE version:

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions