]> git.proxmox.com Git - ceph.git/blobdiff - ceph/src/rocksdb/port/win/env_win.cc
update source to Ceph Pacific 16.2.2
[ceph.git] / ceph / src / rocksdb / port / win / env_win.cc
index 9abb14d67ead5eb1927db5835ae897fcc38f8ad9..295bb2b7e909e038064b0d85a5ad9d1176f9bf88 100644 (file)
@@ -40,7 +40,7 @@
 
 #include <algorithm>
 
-namespace rocksdb {
+namespace ROCKSDB_NAMESPACE {
 
 ThreadStatusUpdater* CreateThreadStatusUpdater() {
   return new ThreadStatusUpdater();
@@ -122,7 +122,7 @@ Status WinEnvIO::DeleteFile(const std::string& fname) {
 
 Status WinEnvIO::Truncate(const std::string& fname, size_t size) {
   Status s;
-  int result = rocksdb::port::Truncate(fname, size);
+  int result = ROCKSDB_NAMESPACE::port::Truncate(fname, size);
   if (result != 0) {
     s = IOError("Failed to truncate: " + fname, errno);
   }
@@ -979,8 +979,8 @@ uint64_t WinEnvIO::NowMicros() {
     return li.QuadPart;
   }
   using namespace std::chrono;
-  return duration_cast<microseconds>(
-      high_resolution_clock::now().time_since_epoch()).count();
+  return duration_cast<microseconds>(system_clock::now().time_since_epoch())
+      .count();
 }
 
 uint64_t WinEnvIO::NowNanos() {
@@ -1075,6 +1075,20 @@ std::string WinEnvIO::TimeToString(uint64_t secondsSince1970) {
   return result;
 }
 
+Status WinEnvIO::GetFreeSpace(const std::string& path, uint64_t* diskfree) {
+  assert(diskfree != nullptr);
+  ULARGE_INTEGER freeBytes;
+  BOOL f = RX_GetDiskFreeSpaceEx(RX_FN(path).c_str(), &freeBytes, NULL, NULL);
+  if (f) {
+    *diskfree = freeBytes.QuadPart;
+    return Status::OK();
+  } else {
+    DWORD lastError = GetLastError();
+    return IOErrorFromWindowsError("Failed to get free space: " + path,
+                                   lastError);
+  }
+}
+
 EnvOptions WinEnvIO::OptimizeForLogWrite(const EnvOptions& env_options,
                                          const DBOptions& db_options) const {
   EnvOptions optimized(env_options);
@@ -1229,8 +1243,7 @@ void WinEnvThreads::StartThread(void(*function)(void* arg), void* arg) {
   state->user_function = function;
   state->arg = arg;
   try {
-
-    rocksdb::port::WindowsThread th(&StartThreadWrapper, state.get());
+    ROCKSDB_NAMESPACE::port::WindowsThread th(&StartThreadWrapper, state.get());
     state.release();
 
     std::lock_guard<std::mutex> lg(mu_);
@@ -1467,6 +1480,10 @@ uint64_t WinEnv::GetThreadID() const {
   return winenv_threads_.GetThreadID();
 }
 
+Status WinEnv::GetFreeSpace(const std::string& path, uint64_t* diskfree) {
+  return winenv_io_.GetFreeSpace(path, diskfree);
+}
+
 void WinEnv::SleepForMicroseconds(int micros) {
   return winenv_threads_.SleepForMicroseconds(micros);
 }
@@ -1520,4 +1537,4 @@ std::string Env::GenerateUniqueId() {
   return result;
 }
 
-}  // namespace rocksdb
+}  // namespace ROCKSDB_NAMESPACE