[Pkg-javascript-commits] [node-leveldown] 284/492: added leveldb.repair() implementation

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


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

andrewrk-guest pushed a commit to annotated tag rocksdb-0.10.1
in repository node-leveldown.

commit 894b9b147c7ff650a98772e31d2e592f85053505
Author: Rod Vagg <rod at vagg.org>
Date:   Sun Mar 24 22:55:47 2013 +1100

    added leveldb.repair() implementation
---
 src/leveldown.cc       | 37 +++++++++++++++++++++++++++++++++++++
 src/leveldown_async.cc | 18 ++++++++++++++++++
 src/leveldown_async.h  | 14 ++++++++++++++
 3 files changed, 69 insertions(+)

diff --git a/src/leveldown.cc b/src/leveldown.cc
index 6370906..209119f 100644
--- a/src/leveldown.cc
+++ b/src/leveldown.cc
@@ -45,6 +45,38 @@ v8::Handle<v8::Value> DestroyDB (const v8::Arguments& args) {
   return scope.Close(v8::Undefined());
 }
 
+v8::Handle<v8::Value> RepairDB (const v8::Arguments& args) {
+  v8::HandleScope scope;
+
+  if (args.Length() < 2) {
+    LD_THROW_RETURN(repair() requires `location` and `callback` arguments)
+  }
+
+  if (!args[0]->IsString()) {
+    LD_THROW_RETURN(leveldown() requires a location string argument)
+  }
+
+  if (!args[1]->IsFunction()) {
+    LD_THROW_RETURN(leveldown() requires a callback function argument)
+  }
+
+  LD_FROM_V8_STRING(location, v8::Handle<v8::String>::Cast(args[0]))
+
+  v8::Persistent<v8::Function> callback = v8::Persistent<v8::Function>::New(
+      LD_NODE_ISOLATE_PRE
+      v8::Local<v8::Function>::Cast(args[1])
+  );
+
+  RepairWorker* worker = new RepairWorker(
+      location
+    , callback
+  );
+
+  AsyncQueueWorker(worker);
+
+  return scope.Close(v8::Undefined());
+}
+
 void Init (v8::Handle<v8::Object> target) {
   Database::Init();
   leveldown::Iterator::Init();
@@ -58,6 +90,11 @@ void Init (v8::Handle<v8::Object> target) {
     , v8::FunctionTemplate::New(DestroyDB)->GetFunction()
   );
 
+  leveldown->Set(
+      v8::String::NewSymbol("repair")
+    , v8::FunctionTemplate::New(RepairDB)->GetFunction()
+  );
+
   target->Set(v8::String::NewSymbol("leveldown"), leveldown);
 }
 
diff --git a/src/leveldown_async.cc b/src/leveldown_async.cc
index 4bdae6f..2a09c90 100644
--- a/src/leveldown_async.cc
+++ b/src/leveldown_async.cc
@@ -28,4 +28,22 @@ void DestroyWorker::Execute () {
   status = leveldb::DestroyDB(location, options);
 }
 
+/** REPAIR WORKER **/
+
+RepairWorker::RepairWorker (
+    char* location
+  , v8::Persistent<v8::Function> callback
+) : AsyncWorker(NULL, callback)
+  , location(location)
+{};
+
+RepairWorker::~RepairWorker () {
+  delete location;
+}
+
+void RepairWorker::Execute () {
+  leveldb::Options options;
+  status = leveldb::RepairDB(location, options);
+}
+
 } // namespace leveldown
diff --git a/src/leveldown_async.h b/src/leveldown_async.h
index d860f51..6033769 100644
--- a/src/leveldown_async.h
+++ b/src/leveldown_async.h
@@ -26,6 +26,20 @@ private:
   char* location;
 };
 
+class RepairWorker : public AsyncWorker {
+public:
+  RepairWorker (
+      char* location
+    , v8::Persistent<v8::Function> callback
+  );
+
+  virtual ~RepairWorker ();
+  virtual void Execute ();
+
+private:
+  char* location;
+};
+
 } // namespace leveldown
 
 #endif

-- 
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