[Pkg-javascript-commits] [node-leveldown] 03/23: Don't hold onto options in DB. Hang onto block_cache and filter_policy and free those on DB close.

Andrew Kelley andrewrk-guest at moszumanska.debian.org
Sun Jul 6 17:21:52 UTC 2014


This is an automated email from the git hooks/post-receive script.

andrewrk-guest pushed a commit to tag hyper-0.10.2
in repository node-leveldown.

commit 04ce3fe8ef5c380c4485dbe9681b8ff0f69495e5
Author: Geoff Greer <geoff at greer.fm>
Date:   Sun Jan 19 19:50:32 2014 -0800

    Don't hold onto options in DB. Hang onto block_cache and filter_policy and free those on DB close.
---
 src/database.cc       | 28 +++++++++++++---------------
 src/database.h        |  5 ++++-
 src/database_async.cc |  8 +++++---
 src/database_async.h  |  3 ++-
 4 files changed, 24 insertions(+), 20 deletions(-)

diff --git a/src/database.cc b/src/database.cc
index d552afa..8e1d379 100644
--- a/src/database.cc
+++ b/src/database.cc
@@ -8,7 +8,6 @@
 #include <node_buffer.h>
 
 #include "leveldb/db.h"
-#include "leveldb/filter_policy.h"
 #include "leveldb/write_batch.h"
 
 #include "leveldown.h"
@@ -26,7 +25,8 @@ Database::Database (char* location) : location(location) {
   db = NULL;
   currentIteratorId = 0;
   pendingCloseWorker = NULL;
-  openOptions = NULL;
+  blockCache = NULL;
+  filterPolicy = NULL;
 };
 
 Database::~Database () {
@@ -43,7 +43,6 @@ leveldb::Status Database::OpenDatabase (
         leveldb::Options* options
       , std::string location
     ) {
-  openOptions = options;
   return leveldb::DB::Open(*options, location, &db);
 }
 
@@ -118,19 +117,14 @@ void Database::ReleaseIterator (uint32_t id) {
 void Database::CloseDatabase () {
   delete db;
   db = NULL;
-  if (openOptions == NULL) {
-    return;
+  if (blockCache) {
+    delete blockCache;
+    blockCache = NULL;
   }
-  if (openOptions->block_cache) {
-    delete openOptions->block_cache;
-    openOptions->block_cache = NULL;
+  if (filterPolicy) {
+    delete filterPolicy;
+    filterPolicy = NULL;
   }
-  if (openOptions->filter_policy) {
-    delete openOptions->filter_policy;
-    openOptions->filter_policy = NULL;
-  }
-  delete openOptions;
-  openOptions = NULL;
 }
 
 /* V8 exposed functions *****************************/
@@ -236,13 +230,17 @@ NAN_METHOD(Database::Open) {
     , 16
   );
 
+  database->blockCache = leveldb::NewLRUCache(cacheSize);
+  database->filterPolicy = leveldb::NewBloomFilterPolicy(10);
+
   OpenWorker* worker = new OpenWorker(
       database
     , new NanCallback(callback)
+    , database->blockCache
+    , database->filterPolicy
     , createIfMissing
     , errorIfExists
     , compression
-    , cacheSize
     , writeBufferSize
     , blockSize
     , maxOpenFiles
diff --git a/src/database.h b/src/database.h
index 21bd8ac..937ec08 100644
--- a/src/database.h
+++ b/src/database.h
@@ -10,7 +10,9 @@
 #include <vector>
 #include <node.h>
 
+#include "leveldb/cache.h"
 #include "leveldb/db.h"
+#include "leveldb/filter_policy.h"
 #include "nan.h"
 #include "leveldown.h"
 #include "iterator.h"
@@ -78,7 +80,8 @@ public:
 
 private:
   leveldb::DB* db;
-  leveldb::Options* openOptions;
+  const leveldb::FilterPolicy* filterPolicy;
+  leveldb::Cache* blockCache;
   char* location;
   uint32_t currentIteratorId;
   void(*pendingCloseWorker);
diff --git a/src/database_async.cc b/src/database_async.cc
index 394cd05..3f520b1 100644
--- a/src/database_async.cc
+++ b/src/database_async.cc
@@ -21,10 +21,11 @@ namespace leveldown {
 OpenWorker::OpenWorker (
     Database *database
   , NanCallback *callback
+  , leveldb::Cache* blockCache
+  , const leveldb::FilterPolicy* filterPolicy
   , bool createIfMissing
   , bool errorIfExists
   , bool compression
-  , uint32_t cacheSize
   , uint32_t writeBufferSize
   , uint32_t blockSize
   , uint32_t maxOpenFiles
@@ -32,20 +33,21 @@ OpenWorker::OpenWorker (
 ) : AsyncWorker(database, callback)
 {
   options = new leveldb::Options();
+  options->block_cache            = blockCache;
+  options->filter_policy          = filterPolicy;
   options->create_if_missing      = createIfMissing;
   options->error_if_exists        = errorIfExists;
   options->compression            = compression
       ? leveldb::kSnappyCompression
       : leveldb::kNoCompression;
-  options->block_cache            = leveldb::NewLRUCache(cacheSize);
   options->write_buffer_size      = writeBufferSize;
   options->block_size             = blockSize;
   options->max_open_files         = maxOpenFiles;
   options->block_restart_interval = blockRestartInterval;
-  options->filter_policy          = leveldb::NewBloomFilterPolicy(10);
 };
 
 OpenWorker::~OpenWorker () {
+  delete options;
 }
 
 void OpenWorker::Execute () {
diff --git a/src/database_async.h b/src/database_async.h
index 5209de3..5b3ee99 100644
--- a/src/database_async.h
+++ b/src/database_async.h
@@ -20,10 +20,11 @@ public:
   OpenWorker (
       Database *database
     , NanCallback *callback
+    , leveldb::Cache* blockCache
+    , const leveldb::FilterPolicy* filterPolicy
     , bool createIfMissing
     , bool errorIfExists
     , bool compression
-    , uint32_t cacheSize
     , uint32_t writeBufferSize
     , uint32_t blockSize
     , uint32_t maxOpenFiles

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-javascript/node-leveldown.git



More information about the Pkg-javascript-commits mailing list