diff --git a/ydb/public/sdk/cpp/client/ydb_topic/impl/write_session_impl.cpp b/ydb/public/sdk/cpp/client/ydb_topic/impl/write_session_impl.cpp index 50558fbfe555..da6e9ae4ca94 100644 --- a/ydb/public/sdk/cpp/client/ydb_topic/impl/write_session_impl.cpp +++ b/ydb/public/sdk/cpp/client/ydb_topic/impl/write_session_impl.cpp @@ -293,7 +293,15 @@ void TWriteSessionImpl::OnDescribePartition(const TStatus& status, const Ydb::To if (!status.IsSuccess()) { with_lock (Lock) { - handleResult = OnErrorImpl({status.GetStatus(), MakeIssueWithSubIssues("Failed to get partition location", status.GetIssues())}); + if (status.GetStatus() == EStatus::CLIENT_CALL_UNIMPLEMENTED) { + Settings.DirectWriteToPartition_ = false; + handleResult = OnErrorImpl({ + EStatus::UNAVAILABLE, + MakeIssueWithSubIssues("The server does not support direct write, fallback to in-direct write", status.GetIssues()) + }); + } else { + handleResult = OnErrorImpl({status.GetStatus(), MakeIssueWithSubIssues("Failed to get partition location", status.GetIssues())}); + } } ProcessHandleResult(handleResult); return;