ARROW-5283: [C++][Plasma] erase object id in client when abort object

This commit is contained in:
shengjun.li committed 2019-05-10 10:32:21 +08:00
1 parent 34b9bb2ca2
commit f7113c2cc9
2 files changed
+34 -1

No files matched your search

+2 -1
View File
@@ -604,6 +604,7 @@ int PlasmaStore::AbortObject(const ObjectID& object_id, Client* client) {
} else {
// The client requesting the abort is the creator. Free the object.
EraseFromObjectTable(object_id);
client->object_ids.erase(it);
return 1;
}
}
@@ -727,7 +728,7 @@ void PlasmaStore::DisconnectClient(int client_fd) {
sealed_objects[it->first] = it->second.get();
} else {
// Abort unsealed object.
AbortObject(it->first, client);
EraseFromObjectTable(object_id);
}
}
+32
View File
@@ -386,6 +386,38 @@ TEST_F(TestPlasmaStore, AbortTest) {
AssertObjectBufferEqual(object_buffers[0], {42, 43}, {1, 2, 3, 4, 5});
}
TEST_F(TestPlasmaStore, OneIdCreateRepeatedlyTest) {
const int64_t loop_times = 5;
ObjectID object_id = random_object_id();
std::vector<ObjectBuffer> object_buffers;
// Test for object non-existence.
ARROW_CHECK_OK(client_.Get({object_id}, 0, &object_buffers));
ASSERT_FALSE(object_buffers[0].data);
int64_t data_size = 20;
uint8_t metadata[] = {5};
int64_t metadata_size = sizeof(metadata);
// Test the sequence: create -> release -> abort -> ...
for (int64_t i = 0; i < loop_times; i++) {
std::shared_ptr<Buffer> data;
ARROW_CHECK_OK(client_.Create(object_id, data_size, metadata, metadata_size, &data));
ARROW_CHECK_OK(client_.Release(object_id));
ARROW_CHECK_OK(client_.Abort(object_id));
}
// Test the sequence: create -> seal -> release -> delete -> ...
for (int64_t i = 0; i < loop_times; i++) {
std::shared_ptr<Buffer> data;
ARROW_CHECK_OK(client_.Create(object_id, data_size, metadata, metadata_size, &data));
ARROW_CHECK_OK(client_.Seal(object_id));
ARROW_CHECK_OK(client_.Release(object_id));
ARROW_CHECK_OK(client_.Delete(object_id));
}
}
TEST_F(TestPlasmaStore, MultipleClientTest) {
ObjectID object_id = random_object_id();
std::vector<ObjectBuffer> object_buffers;