You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@nifi.apache.org by bq...@apache.org on 2017/11/03 22:47:33 UTC
nifi-minifi-cpp git commit: MINIFICPP-253: prune claim map when a
removal occurs
Repository: nifi-minifi-cpp
Updated Branches:
refs/heads/master 2707409fd -> e4ec7337d
MINIFICPP-253: prune claim map when a removal occurs
MINIFICPP-253: use find for the stream count to avoid arbitrarily inflating the map
Signed-off-by: Bin Qiu <be...@gmail.com>
This closes #175.
Project: http://git-wip-us.apache.org/repos/asf/nifi-minifi-cpp/repo
Commit: http://git-wip-us.apache.org/repos/asf/nifi-minifi-cpp/commit/e4ec7337
Tree: http://git-wip-us.apache.org/repos/asf/nifi-minifi-cpp/tree/e4ec7337
Diff: http://git-wip-us.apache.org/repos/asf/nifi-minifi-cpp/diff/e4ec7337
Branch: refs/heads/master
Commit: e4ec7337d27d1264ab7792ca37b7c81bd3c9a14a
Parents: 2707409
Author: Marc Parisi <ph...@apache.org>
Authored: Fri Nov 3 14:45:48 2017 -0400
Committer: Bin Qiu <be...@gmail.com>
Committed: Fri Nov 3 15:46:39 2017 -0700
----------------------------------------------------------------------
libminifi/include/core/ContentRepository.h | 8 +++-
.../rocksdb-tests/DBContentRepositoryTests.cpp | 49 ++++++++++++++++++++
2 files changed, 56 insertions(+), 1 deletion(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/nifi-minifi-cpp/blob/e4ec7337/libminifi/include/core/ContentRepository.h
----------------------------------------------------------------------
diff --git a/libminifi/include/core/ContentRepository.h b/libminifi/include/core/ContentRepository.h
index 54ec8d3..1e7ac62 100644
--- a/libminifi/include/core/ContentRepository.h
+++ b/libminifi/include/core/ContentRepository.h
@@ -61,6 +61,7 @@ class ContentRepository : public StreamManager<minifi::ResourceClaim> {
if (count != count_map_.end()) {
if (count_map_[str] == 0) {
remove(streamId);
+ count_map_.erase(str);
return true;
}
}
@@ -70,7 +71,12 @@ class ContentRepository : public StreamManager<minifi::ResourceClaim> {
virtual uint32_t getStreamCount(const std::shared_ptr<minifi::ResourceClaim> &streamId) {
std::lock_guard<std::mutex> lock(count_map_mutex_);
- return count_map_[streamId->getContentFullPath()];
+ auto cnt = count_map_.find(streamId->getContentFullPath());
+ if (cnt != count_map_.end()) {
+ return cnt->second;
+ } else {
+ return 0;
+ }
}
virtual void incrementStreamCount(const std::shared_ptr<minifi::ResourceClaim> &streamId) {
http://git-wip-us.apache.org/repos/asf/nifi-minifi-cpp/blob/e4ec7337/libminifi/test/rocksdb-tests/DBContentRepositoryTests.cpp
----------------------------------------------------------------------
diff --git a/libminifi/test/rocksdb-tests/DBContentRepositoryTests.cpp b/libminifi/test/rocksdb-tests/DBContentRepositoryTests.cpp
index c45a037..0dc2a3d 100644
--- a/libminifi/test/rocksdb-tests/DBContentRepositoryTests.cpp
+++ b/libminifi/test/rocksdb-tests/DBContentRepositoryTests.cpp
@@ -243,3 +243,52 @@ TEST_CASE("Delete NonExistent Claim", "[TestDBCR5]") {
REQUIRE(readstr == "well hello there");
}
+
+TEST_CASE("Delete Remove Count Claim", "[TestDBCR6]") {
+ TestController testController;
+ char format[] = "/tmp/testRepo.XXXXXX";
+ char *dir = testController.createTempDirectory(format);
+ auto content_repo = std::make_shared<core::repository::DatabaseContentRepository>();
+
+ auto configuration = std::make_shared<org::apache::nifi::minifi::Configure>();
+ configuration->set(minifi::Configure::nifi_dbcontent_repository_directory_default, dir);
+ REQUIRE(true == content_repo->initialize(configuration));
+
+ auto claim = std::make_shared<minifi::ResourceClaim>(content_repo, dir);
+ auto claim2 = std::make_shared<minifi::ResourceClaim>(content_repo, dir);
+ auto stream = content_repo->write(claim);
+
+ stream->writeUTF("well hello there");
+
+ stream->closeStream();
+
+ content_repo->stop();
+
+ // reclaim the memory
+ content_repo = nullptr;
+
+ content_repo = std::make_shared<core::repository::DatabaseContentRepository>();
+
+ configuration = std::make_shared<org::apache::nifi::minifi::Configure>();
+ configuration->set(minifi::Configure::nifi_dbcontent_repository_directory_default, dir);
+ REQUIRE(true == content_repo->initialize(configuration));
+
+ // increment twice. verify we have 2 for the stream count
+ // and then test the removal and verify that the claim was removed by virtue of obtaining
+ // its count.
+ content_repo->incrementStreamCount(claim2);
+ content_repo->incrementStreamCount(claim2);
+ REQUIRE(content_repo->getStreamCount(claim2) == 2);
+ content_repo->decrementStreamCount(claim2);
+ content_repo->decrementStreamCount(claim2);
+ REQUIRE(true == content_repo->removeIfOrphaned(claim2));
+ REQUIRE(content_repo->getStreamCount(claim2) == 0);
+ auto read_stream = content_repo->read(claim);
+
+ std::string readstr;
+
+ // -1 tell us we have an invalid stream
+ read_stream->readUTF(readstr);
+
+ REQUIRE(readstr == "well hello there");
+}