From bb5609afb3cf9bed65e712ab92bf83eb12528630 Mon Sep 17 00:00:00 2001 From: Zhijun Fu <37800433+zhijunfu@users.noreply.github.com> Date: Thu, 5 Sep 2019 11:45:35 +0800 Subject: [PATCH] ignore object exists error for memory store provider (#5607) --- src/ray/common/status.h | 6 ++++++ .../store_provider/memory_store/memory_store.cc | 2 +- .../core_worker/store_provider/memory_store_provider.cc | 8 +++++++- 3 files changed, 14 insertions(+), 2 deletions(-) diff --git a/src/ray/common/status.h b/src/ray/common/status.h index 340ffb311..4c4cb972a 100644 --- a/src/ray/common/status.h +++ b/src/ray/common/status.h @@ -74,6 +74,7 @@ enum class StatusCode : char { TypeError = 3, Invalid = 4, IOError = 5, + ObjectExists = 6, UnknownError = 9, NotImplemented = 10, RedisError = 11 @@ -132,6 +133,10 @@ class RAY_EXPORT Status { return Status(StatusCode::RedisError, msg); } + static Status ObjectExists(const std::string &msg) { + return Status(StatusCode::ObjectExists, msg); + } + // Returns true iff the status indicates success. bool ok() const { return (state_ == NULL); } @@ -143,6 +148,7 @@ class RAY_EXPORT Status { bool IsUnknownError() const { return code() == StatusCode::UnknownError; } bool IsNotImplemented() const { return code() == StatusCode::NotImplemented; } bool IsRedisError() const { return code() == StatusCode::RedisError; } + bool IsObjectExists() const { return code() == StatusCode::ObjectExists; } // Return a string representation of this status suitable for printing. // Returns the string "OK" for success. diff --git a/src/ray/core_worker/store_provider/memory_store/memory_store.cc b/src/ray/core_worker/store_provider/memory_store/memory_store.cc index 675771a8d..8ff178936 100644 --- a/src/ray/core_worker/store_provider/memory_store/memory_store.cc +++ b/src/ray/core_worker/store_provider/memory_store/memory_store.cc @@ -111,7 +111,7 @@ Status CoreWorkerMemoryStore::Put(const ObjectID &object_id, const RayObject &ob std::unique_lock lock(lock_); auto iter = objects_.find(object_id); if (iter != objects_.end()) { - return Status::KeyError("object already exists"); + return Status::ObjectExists("object already exists in the memory store"); } auto object_entry = diff --git a/src/ray/core_worker/store_provider/memory_store_provider.cc b/src/ray/core_worker/store_provider/memory_store_provider.cc index fb796a9b3..1fedf1f12 100644 --- a/src/ray/core_worker/store_provider/memory_store_provider.cc +++ b/src/ray/core_worker/store_provider/memory_store_provider.cc @@ -18,7 +18,13 @@ CoreWorkerMemoryStoreProvider::CoreWorkerMemoryStoreProvider( Status CoreWorkerMemoryStoreProvider::Put(const RayObject &object, const ObjectID &object_id) { - return store_->Put(object_id, object); + auto status = store_->Put(object_id, object); + if (status.IsObjectExists()) { + // Object already exists in store, treat it as ok. + return Status::OK(); + } else { + return status; + } } Status CoreWorkerMemoryStoreProvider::Get(