Mutex lock;
Cond cond;
+ struct EnterExit {
+ const char *msg;
+ EnterExit(const char *m) : msg(m) {
+ //cout << pthread_self() << " enter " << msg << std::endl;
+ }
+ ~EnterExit() {
+ //cout << pthread_self() << " exit " << msg << std::endl;
+ }
+ };
+
class C_SyntheticOnReadable : public Context {
public:
SyntheticWorkloadState *state;
void finish(int r) {
Mutex::Locker locker(state->lock);
+ EnterExit ee("onreadable finish");
ASSERT_TRUE(state->in_flight_objects.count(hoid));
ASSERT_EQ(r, 0);
state->in_flight_objects.erase(hoid);
void finish(int r) {
Mutex::Locker locker(state->lock);
+ EnterExit ee("clone finish");
ASSERT_TRUE(state->in_flight_objects.count(oid));
ASSERT_EQ(r, 0);
state->in_flight_objects.erase(oid);
int touch() {
Mutex::Locker locker(lock);
+ EnterExit ee("touch");
if (!can_create())
return -ENOSPC;
wait_for_ready();
int clone() {
Mutex::Locker locker(lock);
+ EnterExit ee("clone");
if (!can_unlink())
return -ENOENT;
if (!can_create())
int setattrs() {
Mutex::Locker locker(lock);
+ EnterExit ee("setattrs");
if (!can_unlink())
return -ENOENT;
wait_for_ready();
}
void getattrs() {
+ EnterExit ee("getattrs");
ghobject_t obj;
map<string, bufferlist> expected;
{
Mutex::Locker locker(lock);
+ EnterExit ee("getattrs locked");
if (!can_unlink())
return ;
wait_for_ready();
}
void getattr() {
+ EnterExit ee("getattr");
ghobject_t obj;
int r;
int retry;
map<string, bufferlist> expected;
{
Mutex::Locker locker(lock);
+ EnterExit ee("getattr locked");
if (!can_unlink())
return ;
wait_for_ready();
int rmattr() {
Mutex::Locker locker(lock);
+ EnterExit ee("rmattr");
if (!can_unlink())
return -ENOENT;
wait_for_ready();
int write() {
Mutex::Locker locker(lock);
+ EnterExit ee("write");
if (!can_unlink())
return -ENOENT;
wait_for_ready();
}
void read() {
+ EnterExit ee("read");
boost::uniform_int<> u1(0, max_object_len/2);
boost::uniform_int<> u2(0, max_object_len);
uint64_t offset = u1(*rng);
int r;
{
Mutex::Locker locker(lock);
+ EnterExit ee("read locked");
if (!can_unlink())
return ;
wait_for_ready();
int truncate() {
Mutex::Locker locker(lock);
+ EnterExit ee("truncate");
if (!can_unlink())
return -ENOENT;
wait_for_ready();
void scan() {
Mutex::Locker locker(lock);
+ EnterExit ee("scan");
while (in_flight)
cond.Wait(lock);
vector<ghobject_t> objects;
}
void stat() {
+ EnterExit ee("stat");
ghobject_t hoid;
uint64_t expected;
{
Mutex::Locker locker(lock);
+ EnterExit ee("stat lock1");
if (!can_unlink())
return ;
hoid = get_uniform_random_object();
ASSERT_TRUE((uint64_t)buf.st_size == expected);
{
Mutex::Locker locker(lock);
+ EnterExit ee("stat lock2");
--in_flight;
cond.Signal();
in_flight_objects.erase(hoid);
int unlink() {
Mutex::Locker locker(lock);
+ EnterExit ee("unlink");
if (!can_unlink())
return -ENOENT;
ghobject_t to_remove = get_uniform_random_object();
int zero() {
Mutex::Locker locker(lock);
+ EnterExit ee("zero");
if (!can_unlink())
return -ENOENT;
wait_for_ready();