I use the API fdb_transaction_get_range_split_points(), it works well most time, but sometimes returns 1031 (transaction_timed_out). Once 1031 is returned, it always returns 1031 in subsequent calls. This interface is called every 3 seconds in my test program. But other interfaces always works well.
error_code_wrong_shard_server is sent by the storage server when the key range is not hosted on itself. This is a retry-able error such that getRangeSplitPoints() in NativeAPI.actor.cpp will call getKeyRangeLocations to get the locations (i.e., storage servers) of the range and then send requests these storage servers.
When you have only one storage server, all shards are there so you won’t get error_code_wrong_shard_server. For multiple storage servers, this error code should be transient.
Thank you! However, getRangeSplitPoints() often timed out when retrying in multiple SS environment(timeout is set to 30s or longer). This happens regardless of whether perpetual_storage_wiggle is enabled or disabled, or whether there are read and write requests. This error code wrong_shard_server is transient, but it lasts a little too long. I’m confused about whether this means that the API fdb_transaction_get_range_split_points() is unstable? And how to avoid this issue?