Fix build issue. (#1123)

Implement GetUniqueIdFromFile to support new tests and the feature.
This commit is contained in:
Dmitri Smirnov 2016-05-16 17:01:00 -07:00 committed by Igor Canadi
parent f6aedb62c0
commit bac3be7c46
2 changed files with 47 additions and 4 deletions

View File

@ -183,7 +183,7 @@ set(SOURCES
table/plain_table_index.cc
table/plain_table_key_coding.cc
table/plain_table_reader.cc
persistent_cache_helper.cc
table/persistent_cache_helper.cc
table/table_properties.cc
table/two_level_iterator.cc
tools/sst_dump_tool.cc

View File

@ -27,6 +27,7 @@
#include "port/win/win_logger.h"
#include "util/random.h"
#include "util/coding.h"
#include "util/iostats_context_imp.h"
#include "util/rate_limiter.h"
#include "util/sync_point.h"
@ -54,14 +55,15 @@ std::string GetWindowsErrSz(DWORD err) {
return Err;
}
namespace {
const size_t c_OneMB = (1 << 20);
ThreadStatusUpdater* CreateThreadStatusUpdater() {
return new ThreadStatusUpdater();
}
namespace {
const size_t c_OneMB = (1 << 20);
inline Status IOErrorFromWindowsError(const std::string& context, DWORD err) {
return Status::IOError(context, GetWindowsErrSz(err));
}
@ -198,6 +200,31 @@ inline Status ftruncate(const std::string& filename, HANDLE hFile,
return status;
}
size_t GetUniqueIdFromFile(HANDLE hFile, char* id, size_t max_size) {
if (max_size < kMaxVarint64Length * 3) {
return 0;
}
BY_HANDLE_FILE_INFORMATION FileInfo;
BOOL result = GetFileInformationByHandle(hFile, &FileInfo);
TEST_SYNC_POINT_CALLBACK("GetUniqueIdFromFile:FS_IOC_GETVERSION", &result);
if (!result) {
return 0;
}
char* rid = id;
rid = EncodeVarint64(rid, uint64_t(FileInfo.dwVolumeSerialNumber));
rid = EncodeVarint64(rid, uint64_t(FileInfo.nFileIndexHigh));
rid = EncodeVarint64(rid, uint64_t(FileInfo.nFileIndexLow));
assert(rid >= id);
return static_cast<size_t>(rid - id);
}
// mmap() based random-access
class WinMmapReadableFile : public RandomAccessFile {
const std::string fileName_;
@ -246,6 +273,10 @@ class WinMmapReadableFile : public RandomAccessFile {
virtual Status InvalidateCache(size_t offset, size_t length) override {
return Status::OK();
}
virtual size_t GetUniqueId(char* id, size_t max_size) const override {
return GetUniqueIdFromFile(hFile_, id, max_size);
}
};
// We preallocate up to an extra megabyte and use memcpy to append new
@ -591,6 +622,10 @@ class WinMmapFile : public WritableFile {
}
return status;
}
virtual size_t GetUniqueId(char* id, size_t max_size) const override {
return GetUniqueIdFromFile(hFile_, id, max_size);
}
};
class WinSequentialFile : public SequentialFile {
@ -915,6 +950,10 @@ class WinRandomAccessFile : public RandomAccessFile {
virtual Status InvalidateCache(size_t offset, size_t length) override {
return Status::OK();
}
virtual size_t GetUniqueId(char* id, size_t max_size) const override {
return GetUniqueIdFromFile(hFile_, id, max_size);
}
};
// This is a sequential write class. It has been mimicked (as others) after
@ -1088,6 +1127,10 @@ class WinWritableFile : public WritableFile {
}
return status;
}
virtual size_t GetUniqueId(char* id, size_t max_size) const override {
return GetUniqueIdFromFile(hFile_, id, max_size);
}
};
class WinDirectory : public Directory {