ldout(cct, 1) << "starting objecter" << dendl;
err = -ENOMEM;
- objecter = new Objecter(cct, messenger, &monclient, &osdmap, lock, timer,
+ objecter = new (std::nothrow) Objecter(cct, messenger, &monclient, &osdmap, lock, timer,
cct->_conf->rados_mon_op_timeout,
cct->_conf->rados_osd_op_timeout);
if (!objecter)
err = 0;
out:
- if (err)
+ if (err) {
state = DISCONNECTED;
+
+ if (objecter) {
+ delete objecter;
+ objecter = NULL;
+ }
+ if (messenger) {
+ delete messenger;
+ messenger = NULL;
+ }
+ }
+
return err;
}
Rados::version(&major, &minor, &extra);
}
+TEST(LibRadosMiscConnectFailure, ConnectFailure) {
+ rados_t cluster;
+
+ char *id = getenv("CEPH_CLIENT_ID");
+ if (id)
+ std::cerr << "Client id is: " << id << std::endl;
+
+ ASSERT_EQ(0, rados_create(&cluster, NULL));
+ ASSERT_EQ(0, rados_conf_read_file(cluster, NULL));
+ ASSERT_EQ(0, rados_conf_parse_env(cluster, NULL));
+
+ ASSERT_EQ(0, rados_conf_set(cluster, "client_mount_timeout", "0.000001"));
+
+ ASSERT_NE(0, rados_connect(cluster));
+ ASSERT_NE(0, rados_connect(cluster));
+
+ rados_shutdown(cluster);
+}
+
TEST_F(LibRadosMisc, ClusterFSID) {
char fsid[37];
ASSERT_EQ(-ERANGE, rados_cluster_fsid(cluster, fsid, sizeof(fsid) - 1));