class HdfsDirectory : public Directory {
public:
explicit HdfsDirectory(int fd) : fd_(fd) {}
- ~HdfsDirectory() {
- //close(fd_);
- }
+ ~HdfsDirectory() {}
- virtual Status Fsync() {
- //if (fsync(fd_) == -1) {
- // return IOError("directory", errno);
- // }
- return Status::OK();
- }
+ virtual Status Fsync() { return Status::OK(); }
private:
int fd_;
Status HdfsEnv::NewDirectory(const std::string& name,
unique_ptr<Directory>* result) {
-
- int value = hdfsCreateDirectory(fileSys_, name.c_str());
- result->reset(new HdfsDirectory(0));
+ int value = hdfsExists(fileSys_, name.c_str());
switch (value) {
- case HDFS_SUCCESS: // directory created
- return Status::OK();
- default:
- Log(mylog, "directory already exists ");
+ case HDFS_EXISTS:
+ result->reset(new HdfsDirectory(0));
return Status::OK();
+ default: // fail if the directory doesn't exist
+ Log(mylog, "NewDirectory hdfsExists call failed");
+ throw HdfsFatalException("hdfsExists call failed with error " +
+ std::to_string(value) + " on path " + name +
+ ".\n");
}
}
bool HdfsEnv::FileExists(const std::string& fname) {
-
+
int value = hdfsExists(fileSys_, fname.c_str());
switch (value) {
case HDFS_EXISTS:
return false;
default: // anything else should be an error
Log(mylog, "FileExists hdfsExists call failed");
- throw HdfsFatalException("1. hdfsExists call failed with error " +
- std::to_string(value) + " on path " + fname + ".\n");
+ throw HdfsFatalException("hdfsExists call failed with error " +
+ std::to_string(value) + " on path " + fname +
+ ".\n");
}
}
default: // anything else should be an error
Log(mylog, "GetChildren hdfsExists call failed");
throw HdfsFatalException("hdfsExists call failed with error " +
- std::to_string(value) + " on path " + path.c_str() + ".\n");
+ std::to_string(value) + ".\n");
}
return Status::OK();
}
Status HdfsEnv::DeleteFile(const std::string& fname) {
- if (hdfsDelete(fileSys_, fname.c_str(),1) == 0) {
+ if (hdfsDelete(fileSys_, fname.c_str(), 1) == 0) {
return Status::OK();
}
return IOError(fname, errno);
// Increase to 5 threads. Task 0 and 2 running.
env_->SetBackgroundThreads(5, Env::Priority::HIGH);
Env::Default()->SleepForMicroseconds(kDelayMicros);
- ASSERT_EQ(0, env_->GetThreadPoolQueueLen(Env::Priority::HIGH));
+ ASSERT_EQ((unsigned int)0, env_->GetThreadPoolQueueLen(Env::Priority::HIGH));
ASSERT_TRUE(tasks[0].IsSleeping());
ASSERT_TRUE(tasks[2].IsSleeping());
tasks[4].WakeUp();
Env::Default()->SleepForMicroseconds(kDelayMicros);
- ASSERT_EQ(0, env_->GetThreadPoolQueueLen(Env::Priority::HIGH));
+ ASSERT_EQ((unsigned int)0, env_->GetThreadPoolQueueLen(Env::Priority::HIGH));
for (size_t i = 5; i < 8; i++) {
ASSERT_TRUE(tasks[i].IsSleeping());
}
env_->Schedule(&SleepingBackgroundTask::DoSleepTask, &tasks[9],
Env::Priority::HIGH);
Env::Default()->SleepForMicroseconds(kDelayMicros);
- ASSERT_GT(env_->GetThreadPoolQueueLen(Env::Priority::HIGH), 0);
+ ASSERT_GT(env_->GetThreadPoolQueueLen(Env::Priority::HIGH), (unsigned int)0);
ASSERT_TRUE(!tasks[8].IsSleeping() || !tasks[9].IsSleeping());
// Increase to 4 threads. Task 5, 8, 9 running.
env_->SetBackgroundThreads(4, Env::Priority::HIGH);
Env::Default()->SleepForMicroseconds(kDelayMicros);
- ASSERT_EQ(0, env_->GetThreadPoolQueueLen(Env::Priority::HIGH));
+ ASSERT_EQ((unsigned int)0, env_->GetThreadPoolQueueLen(Env::Priority::HIGH));
ASSERT_TRUE(tasks[8].IsSleeping());
ASSERT_TRUE(tasks[9].IsSleeping());