}
size_t orig_object_map_size = object_map.size();
- if (orig_object_map_size != object_count) {
+ if (object_count < orig_object_map_size) {
+ for (uint64_t i = object_count; i < orig_object_map_size; ++i) {
+ if (object_map[i] != default_state) {
+ return -ESTALE;
+ }
+ }
+ object_map.resize(object_count);
+ } else if (object_count > orig_object_map_size) {
object_map.resize(object_count);
for (uint64_t i = orig_object_map_size; i < object_count; ++i) {
object_map[i] = default_state;
ASSERT_EQ(0, object_map_load(&ioctx, oid, &osd_bit_vector));
ASSERT_EQ(ref_bit_vector, osd_bit_vector);
- ref_bit_vector.resize(16);
+ ref_bit_vector.resize(32);
librados::ObjectWriteOperation op3;
object_map_resize(&op3, ref_bit_vector.size(), 1);
- ASSERT_EQ(0, ioctx.operate(oid, &op3));
+ ASSERT_EQ(-ESTALE, ioctx.operate(oid, &op3));
+
+ librados::ObjectWriteOperation op4;
+ object_map_resize(&op4, ref_bit_vector.size(), 2);
+ ASSERT_EQ(0, ioctx.operate(oid, &op4));
+
ASSERT_EQ(0, object_map_load(&ioctx, oid, &osd_bit_vector));
ASSERT_EQ(ref_bit_vector, osd_bit_vector);