diff --git a/fdbclient/NativeAPI.actor.cpp b/fdbclient/NativeAPI.actor.cpp index bdb91e902d..e8231ccee8 100644 --- a/fdbclient/NativeAPI.actor.cpp +++ b/fdbclient/NativeAPI.actor.cpp @@ -6702,13 +6702,18 @@ ACTOR Future getChangeFeedStreamActor(Reference db, loop { loop { try { - Optional val = wait(tr.get(rangeIDKey)); - if (!val.present()) { - results.sendError(unsupported_operation()); - return Void(); + Version readVer = wait(tr.getReadVersion()); + if (readVer < begin) { + wait(delay(FLOW_KNOBS->PREVENT_FAST_SPIN_DELAY)); + } else { + Optional val = wait(tr.get(rangeIDKey)); + if (!val.present()) { + results.sendError(unsupported_operation()); + return Void(); + } + keys = std::get<0>(decodeChangeFeedValue(val.get())) & range; + break; } - keys = std::get<0>(decodeChangeFeedValue(val.get())) & range; - break; } catch (Error& e) { wait(tr.onError(e)); } @@ -6724,6 +6729,7 @@ ACTOR Future getChangeFeedStreamActor(Reference db, TransactionInfo(TaskPriority::DefaultEndpoint, span.context))); if (locations.size() >= 1000) { + ASSERT(false); results.sendError(unsupported_operation()); return Void(); } diff --git a/fdbserver/storageserver.actor.cpp b/fdbserver/storageserver.actor.cpp index c5fb3036cf..bdf0e944da 100644 --- a/fdbserver/storageserver.actor.cpp +++ b/fdbserver/storageserver.actor.cpp @@ -3233,7 +3233,7 @@ ACTOR Future fetchChangeFeed(StorageServer* data, Key rangeId, KeyRange ra wait(yield()); } } catch (Error& e) { - if (e.code() != error_code_end_of_stream) { + if (e.code() != error_code_end_of_stream && e.code() != error_code_unsupported_operation) { throw; } return Void(); @@ -3278,7 +3278,7 @@ ACTOR Future fetchChangeFeed(StorageServer* data, Key rangeId, KeyRange ra wait(yield()); } } catch (Error& e) { - if (e.code() != error_code_end_of_stream) { + if (e.code() != error_code_end_of_stream && e.code() != error_code_unsupported_operation) { throw; } }