--- /dev/null
+tasks:
+ - exec:
+ client.0:
+ - mkdir /home/ubuntu/cephtest/migration
+ - qemu-img create -f qcow2 /home/ubuntu/cephtest/migration/empty.qcow2 1G
+ - echo '{"type":"qcow","stream":{"type":"http","url":"https://download.ceph.com/qa/ubuntu-12.04.qcow2"}}' | rbd migration prepare --import-only --source-spec-path - client.0.0
+ - rbd migration prepare --import-only --source-spec '{"type":"qcow","stream":{"type":"file","file_path":"/home/ubuntu/cephtest/migration/empty.qcow2"}}' client.0.1
+ - rbd migration prepare --import-only --source-spec '{"type":"qcow","stream":{"type":"file","file_path":"/home/ubuntu/cephtest/migration/empty.qcow2"}}' client.0.2
virtual void connect(boost::asio::ip::tcp::resolver::results_type results,
Context* on_finish) = 0;
virtual void disconnect(Context* on_finish) = 0;
+ virtual void reset_stream() = 0;
void close_socket() {
auto cct = m_http_client->m_cct;
ceph_assert(next_state == STATE_RESET_CONNECTING);
ceph_assert(on_finish == nullptr);
shutdown_socket();
+ reset_stream();
resolve_host(nullptr);
return;
} else if (current_state == STATE_RESET_CONNECTING) {
on_finish->complete(0);
}
+ void reset_stream() override {
+ // no-op -- tcp_stream object can be reused after shut down
+ }
+
private:
boost::beast::tcp_stream m_stream;
-
};
#undef dout_prefix
shutdown(r, on_finish); }));
}
+ void reset_stream() override {
+ auto http_client = this->m_http_client;
+ auto cct = http_client->m_cct;
+ ldout(cct, 15) << dendl;
+
+ // ssl_stream object can't be reused after shut down -- move-in
+ // a freshly constructed instance
+ m_stream = boost::beast::ssl_stream<boost::beast::tcp_stream>(
+ http_client->m_strand, http_client->m_ssl_context);
+ }
+
private:
boost::beast::ssl_stream<boost::beast::tcp_stream> m_stream;
bool m_ssl_enabled = false;