class_data->status = ClassData::CLASS_REQUESTED;
break;
+ case ClassData::CLASS_INVALID:
+ return class_data;
+
default:
assert(0);
}
osd->got_class(info_iter->name);
}
} else {
- /* fixme: handle case in which we didn't get the class */
+ data.status = ClassData::CLASS_INVALID;
+ osd->got_class(info_iter->name);
}
}
}
*cls = class_handler->get_class(cname, version);
- if (*cls)
- return 0;
+ if (*cls) {
+ switch ((*cls)->status) {
+ case ClassHandler::ClassData::CLASS_LOADED:
+ return 0;
+ case ClassHandler::ClassData::CLASS_INVALID:
+ dout(0) << "class not supported" << dendl;
+ return -EOPNOTSUPP;
+ default:
+ assert(0);
+ }
+ }
waiting_for_missing_class[cname][pgid].push_back(m);
return -EAGAIN;