| 191 | } |
| 192 | |
| 193 | nuraft::ptr<nuraft::buffer> |
| 194 | STEKShareLogStore::pack(uint64_t index, int32_t cnt) |
| 195 | { |
| 196 | std::vector<nuraft::ptr<nuraft::buffer>> logs; |
| 197 | |
| 198 | size_t size_total = 0; |
| 199 | for (uint64_t i = index; i < index + cnt; ++i) { |
| 200 | nuraft::ptr<nuraft::log_entry> le = nullptr; |
| 201 | { |
| 202 | std::lock_guard<std::mutex> l(logs_lock_); |
| 203 | le = logs_[i]; |
| 204 | } |
| 205 | assert(le.get()); |
| 206 | nuraft::ptr<nuraft::buffer> buf = le->serialize(); |
| 207 | size_total += buf->size(); |
| 208 | logs.push_back(buf); |
| 209 | } |
| 210 | |
| 211 | nuraft::ptr<nuraft::buffer> buf_out = nuraft::buffer::alloc(sizeof(int32_t) + cnt * sizeof(int32_t) + size_total); |
| 212 | buf_out->pos(0); |
| 213 | buf_out->put((int32_t)cnt); |
| 214 | |
| 215 | for (auto &entry : logs) { |
| 216 | nuraft::ptr<nuraft::buffer> &bb = entry; |
| 217 | buf_out->put((int32_t)bb->size()); |
| 218 | buf_out->put(*bb); |
| 219 | } |
| 220 | return buf_out; |
| 221 | } |
| 222 | |
| 223 | void |
| 224 | STEKShareLogStore::apply_pack(uint64_t index, nuraft::buffer &pack) |