}
};
+void
+test_loop(Rados &cluster, std::string pool_name, std::string obj_name)
+{
+ int ret;
+ IoCtx ioctx;
+ ret = cluster.ioctx_create(pool_name.c_str(), ioctx);
+ if (ret < 0) {
+ std::cerr << "ioctx_create " << pool_name << " failed with " << ret << std::endl;
+ exit(1);
+ }
+
+ ret = ioctx.create(obj_name, false);
+ if (ret < 0) {
+ std::cerr << "create failed with " << ret << std::endl;
+ exit(1);
+ }
+
+ for (int i = 0; i < 10000; ++i) {
+ std::cerr << "Iteration " << i << std::endl;
+ uint64_t handle;
+ WatchNotifyTestCtx ctx;
+ ret = ioctx.watch(obj_name, 0, &handle, &ctx);
+ assert(!ret);
+ bufferlist bl2;
+ ret = ioctx.notify(obj_name, 0, bl2);
+ assert(!ret);
+ TestAlarm alarm;
+ sem_wait(&sem);
+ ioctx.unwatch(obj_name, handle);
+ }
+
+ ioctx.close();
+}
+
+void
+test_replicated(Rados &cluster, std::string pool_name, std::string obj_name)
+{
+ // May already exist
+ cluster.pool_create(pool_name.c_str());
+
+ test_loop(cluster, pool_name, obj_name);
+}
+
+void
+test_erasure(Rados &cluster, std::string pool_name, std::string obj_name)
+{
+ std::cout << "Skip erasure test" << std::endl;
+ return;
+}
+
int main(int args, char **argv)
{
- if (args < 3) {
- std::cerr << "Error: " << argv[0] << " pool_name obj_name" << std::endl;
+ if (args != 3 && args != 4) {
+ std::cerr << "Error: " << argv[0] << " [ec|rep] pool_name obj_name" << std::endl;
return 1;
}
- std::string pool_name(argv[1]);
- std::string obj_name(argv[2]);
+ std::string pool_name, obj_name, type;
+ // For backward compatibility with unmodified teuthology version
+ if (args == 3) {
+ type = "rep";
+ pool_name = argv[1];
+ obj_name = argv[2];
+ } else {
+ type = argv[1];
+ pool_name = argv[2];
+ obj_name = argv[3];
+ }
+ std::cerr << "Test type " << type << std::endl;
std::cerr << "pool_name, obj_name are " << pool_name << ", " << obj_name << std::endl;
+ if (type != "ec" && type != "rep") {
+ std::cerr << "Error: " << argv[0] << " Invalid arg must be 'ec' or 'rep' saw " << type << std::endl;
+ return 1;
+ }
+
char *id = getenv("CEPH_CLIENT_ID");
if (id) std::cerr << "Client id is: " << id << std::endl;
Rados cluster;
}
cluster.connect();
- // May already exist
- cluster.pool_create(pool_name.c_str());
-
- IoCtx ioctx;
- cluster.ioctx_create(pool_name.c_str(), ioctx);
-
- ioctx.create(obj_name, false);
-
-
- for (int i = 0; i < 10000; ++i) {
- std::cerr << "Iteration " << i << std::endl;
- uint64_t handle;
- WatchNotifyTestCtx ctx;
- ret = ioctx.watch(obj_name, 0, &handle, &ctx);
- assert(!ret);
- bufferlist bl2;
- ret = ioctx.notify(obj_name, 0, bl2);
- assert(!ret);
- TestAlarm alarm;
- sem_wait(&sem);
- ioctx.unwatch(obj_name, handle);
- }
+ if (type == "rep")
+ test_replicated(cluster, pool_name, obj_name);
+ else if (type == "ec")
+ test_erasure(cluster, pool_name, obj_name);
- ioctx.close();
sem_destroy(&sem);
return 0;
}