Skip to content

Commit

Permalink
[kvstore] adjust log level and add header comments (vesoft-inc#3681) (v…
Browse files Browse the repository at this point in the history
…esoft-inc#598)

* adjust log level

* add header comments

* address comments

* address @wenhaocs's comments

* rebased, code format

confirm with critical27

Co-authored-by: Doodle <[email protected]>
  • Loading branch information
nebula-bots and critical27 authored Feb 15, 2022
1 parent 8bd538e commit 43334f8
Show file tree
Hide file tree
Showing 66 changed files with 4,490 additions and 2,486 deletions.
70 changes: 68 additions & 2 deletions src/codec/RowReader.h
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@
namespace nebula {

/**
* This class decodes one row of data
* @brief This class decodes one row of data
*/
class RowReader {
public:
Expand All @@ -33,6 +33,9 @@ class RowReader {
explicit Cell(const Iterator* iter) : iter_(iter) {}
};

/**
* @brief Helper class to iterate over all fields in a row
*/
class Iterator final {
friend class Cell;
friend class RowReader;
Expand Down Expand Up @@ -65,35 +68,91 @@ class RowReader {
public:
virtual ~RowReader() = default;

/**
* @brief Get the property value by property name
*
* @param prop Property name
* @return Value Property value
*/
virtual Value getValueByName(const std::string& prop) const noexcept = 0;

/**
* @brief Get the property value by index in schema
*
* @param index Index in Schema
* @return Value Property value
*/
virtual Value getValueByIndex(const int64_t index) const noexcept = 0;

/**
* @brief Get the timestamp in value
*
* @return int64_t UTC
*/
virtual int64_t getTimestamp() const noexcept = 0;

/**
* @brief The row reader version, only 1 or 2 is legal
*
* @return int32_t Reader version
*/
virtual int32_t readerVer() const noexcept = 0;

// Return the number of bytes used for the header info
/**
* @brief Return the number of bytes used for the header info
*/
virtual size_t headerLen() const noexcept = 0;

/**
* @brief Iterator points to the first field
*
* @return Iterator
*/
virtual Iterator begin() const noexcept {
return Iterator(this, 0);
}

/**
* @brief Iterator points to the last filed
*
* @return const Iterator&
*/
virtual const Iterator& end() const noexcept {
return endIter_;
}

/**
* @brief The schema version encoded in value
*
* @return SchemaVer Schema version
*/
virtual SchemaVer schemaVer() const noexcept {
return schema_->getVersion();
}

/**
* @brief Count of fields
*
* @return size_t
*/
virtual size_t numFields() const noexcept {
return schema_->getNumFields();
}

/**
* @brief Get the schema of row data
*
* @return const meta::SchemaProviderIf*
*/
virtual const meta::SchemaProviderIf* getSchema() const {
return schema_;
}

/**
* @brief Get the raw value in kv engine
*
* @return const std::string
*/
virtual const std::string getData() const {
return data_.toString();
}
Expand All @@ -104,6 +163,13 @@ class RowReader {

RowReader() : endIter_(this) {}

/**
* @brief Reset the row reader with schema and data
*
* @param schema
* @param row
* @return Whether reset succeed
*/
virtual bool resetImpl(meta::SchemaProviderIf const* schema, folly::StringPiece row) noexcept;

private:
Expand Down
4 changes: 2 additions & 2 deletions src/codec/RowReaderV1.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,7 @@ bool RowReaderV1::resetImpl(meta::SchemaProviderIf const* schema, folly::StringP
return true;
} else {
// Invalid data
LOG(ERROR) << "Invalid row data: " << toHexStr(row);
LOG(WARNING) << "Invalid row data: " << toHexStr(row);
return false;
}
}
Expand Down Expand Up @@ -72,7 +72,7 @@ bool RowReaderV1::processHeader(folly::StringPiece row) {
uint32_t numOffsets = (numFields >> 4);
if (numBytesForOffset_ * numOffsets + verBytes + 1 > row.size()) {
// Data is too short
LOG(ERROR) << "Row data is too short: " << toHexStr(row);
LOG(WARNING) << "Row data is too short: " << toHexStr(row);
return false;
}
offsets_.resize(numFields + 1, -1);
Expand Down
2 changes: 1 addition & 1 deletion src/codec/RowReaderV2.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -200,7 +200,7 @@ Value RowReaderV2::getValueByIndex(const int64_t index) const noexcept {
// Parse a geography from the wkb, normalize it and then verify its validity.
auto geogRet = Geography::fromWKB(wkb, true, true);
if (!geogRet.ok()) {
LOG(ERROR) << "Geography::fromWKB failed: " << geogRet.status();
LOG(WARNING) << "Geography::fromWKB failed: " << geogRet.status();
return Value::kNullBadData; // Is it ok to return Value::kNullBadData?
}
return std::move(geogRet).value();
Expand Down
6 changes: 3 additions & 3 deletions src/codec/RowReaderWrapper.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -107,7 +107,7 @@ bool RowReaderWrapper::reset(meta::SchemaProviderIf const* schema,
currReader_ = &readerV2_;
return true;
} else {
LOG(ERROR) << "Unsupported row reader version " << readerVer;
LOG(WARNING) << "Unsupported row reader version " << readerVer;
currReader_ = nullptr;
return false;
}
Expand Down Expand Up @@ -171,7 +171,7 @@ void RowReaderWrapper::getVersions(const folly::StringPiece& row,
// presents
verBytes = row[index++] & 0x07;
} else {
LOG(ERROR) << "Invalid reader version: " << readerVer;
LOG(WARNING) << "Invalid reader version: " << readerVer;
schemaVer = -1;
return;
}
Expand All @@ -180,7 +180,7 @@ void RowReaderWrapper::getVersions(const folly::StringPiece& row,
if (verBytes > 0) {
if (verBytes + 1 > row.size()) {
// Data is too short
LOG(ERROR) << "Row data is too short: " << toHexStr(row);
LOG(WARNING) << "Row data is too short: " << toHexStr(row);
schemaVer = -1;
return;
}
Expand Down
111 changes: 109 additions & 2 deletions src/codec/RowReaderWrapper.h
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,9 @@

namespace nebula {

/**
* @brief A wrapper class to hide details of RowReaderV1 and RowReaderV2
*/
class RowReaderWrapper : public RowReader {
FRIEND_TEST(RowReaderV1, headerInfo);
FRIEND_TEST(RowReaderV1, encodedData);
Expand All @@ -26,6 +29,11 @@ class RowReaderWrapper : public RowReader {

RowReaderWrapper& operator=(const RowReaderWrapper&) = delete;

/**
* @brief Move constructor of row reader wrapper
*
* @param rhs
*/
RowReaderWrapper(RowReaderWrapper&& rhs) {
this->readerVer_ = rhs.readerVer_;
if (this->readerVer_ == 1) {
Expand All @@ -39,6 +47,12 @@ class RowReaderWrapper : public RowReader {
}
}

/**
* @brief Move assign operator
*
* @param rhs
* @return RowReaderWrapper&
*/
RowReaderWrapper& operator=(RowReaderWrapper&& rhs) {
this->readerVer_ = rhs.readerVer_;
if (this->readerVer_ == 1) {
Expand All @@ -53,35 +67,97 @@ class RowReaderWrapper : public RowReader {
return *this;
}

/**
* @brief Generate a row reader wrapper of tag data
*
* @param schemaMan Schema manager, used to find the related schema of data
* @param space SpaceId
* @param tag TagId
* @param row Value in kv engine
* @return RowReaderWrapper The row reader wrapper
*/
static RowReaderWrapper getTagPropReader(meta::SchemaManager* schemaMan,
GraphSpaceID space,
TagID tag,
folly::StringPiece row);

/**
* @brief Generate a row reader wrapper of edge data
*
* @param schemaMan Schema manager, used to find the related schema of data
* @param space SpaceId
* @param tag TagId
* @param row Value in kv engine
* @return RowReaderWrapper The row reader wrapper
*/
static RowReaderWrapper getEdgePropReader(meta::SchemaManager* schemaMan,
GraphSpaceID space,
EdgeType edge,
folly::StringPiece row);

/**
* @brief Generate a row reader wrapper of data
*
* @param schema
* @param row
* @return RowReaderWrapper
*/
static RowReaderWrapper getRowReader(meta::SchemaProviderIf const* schema,
folly::StringPiece row);

// notice: the schemas are from oldest to newest,
// usually from getAllVerTagSchema or getAllVerEdgeSchema in SchemaMan
/**
* @brief Generate a row reader wrapper of data, the schemas are stored in vector.
* notice: the schemas are from oldest to newest,
* usually from getAllVerTagSchema or getAllVerEdgeSchema in SchemaMan
*
* @param schemas
* @param row
* @return RowReaderWrapper
*/
static RowReaderWrapper getRowReader(
const std::vector<std::shared_ptr<const meta::NebulaSchemaProvider>>& schemas,
folly::StringPiece row);

/**
* @brief Construct a new row reader wrapper
*
* @param schema
* @param row
* @param readerVer Row reader version
*/
RowReaderWrapper(const meta::SchemaProviderIf* schema,
const folly::StringPiece& row,
int32_t& readerVer);

/**
* @brief Reset current row reader wrapper to of given schema, data and reader version
*
* @param schema
* @param row
* @param readVer
* @return Whether reset succeed
*/
bool reset(meta::SchemaProviderIf const* schema,
folly::StringPiece row,
int32_t readVer) noexcept;

/**
* @brief Reset current row reader wrapper to of given schema and data
*
* @param schema
* @param row
* @return Whether reset succeed
*/
bool reset(meta::SchemaProviderIf const* schema, folly::StringPiece row) noexcept;

/**
* @brief Reset current row reader wrapper of given schemas and data, the schemas are stored in
* vector.
*
* @param schemas
* @param row
* @return Whether reset succeed
*/
bool reset(const std::vector<std::shared_ptr<const meta::NebulaSchemaProvider>>& schemas,
folly::StringPiece row) noexcept;

Expand Down Expand Up @@ -141,36 +217,67 @@ class RowReaderWrapper : public RowReader {
return currReader_->getData();
}

/**
* @brief Get schema version and reader version by data
*
* @param row Row data
* @param schemaVer Schema version
* @param readerVer Row reader version
*/
static void getVersions(const folly::StringPiece& row, SchemaVer& schemaVer, int32_t& readerVer);

/**
* @brief Return whether wrapper points to a valid data
*/
operator bool() const noexcept {
return operator!=(nullptr);
}

/**
* @brief Return whether wrapper points to a valid data
*/
bool operator==(std::nullptr_t) const noexcept {
return !operator!=(nullptr);
}

/**
* @brief Return whether wrapper points to a valid data
*/
bool operator!=(std::nullptr_t) const noexcept {
return currReader_ != nullptr;
}

/**
* @brief Return this row reader wrapper
*/
RowReaderWrapper* operator->() const noexcept {
return get();
}

/**
* @brief Return this row reader wrapper
*/
RowReaderWrapper* get() const noexcept {
return const_cast<RowReaderWrapper*>(this);
}

/**
* @brief Return this row reader wrapper
*/
RowReaderWrapper* get() noexcept {
return this;
}

/**
* @brief Return this row reader wrapper
*/
RowReaderWrapper& operator*() const noexcept {
return *get();
}

/**
* @brief Reset to an empty row reader
*/
void reset() noexcept {
currReader_ = nullptr;
}
Expand Down
Loading

0 comments on commit 43334f8

Please sign in to comment.