Skip to content
This repository was archived by the owner on Dec 2, 2024. It is now read-only.

Commit 6792190

Browse files
committed
add opts.readonly
1 parent 92091a6 commit 6792190

File tree

3 files changed

+49
-8
lines changed

3 files changed

+49
-8
lines changed

README.md

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -87,9 +87,15 @@ stream you are missing. Please note that this might not guarantee leveldb snapsh
8787

8888
## API
8989

90-
#### `multileveldown.server(db)`
90+
#### `multileveldown.server(db, [options])`
9191

92-
Returns a new duplex server stream that you should connect with a client
92+
Returns a new duplex server stream that you should connect with a client. Options include
93+
94+
``` js
95+
{
96+
readonly: true // make the database be accessible as read only
97+
}
98+
```
9399

94100
#### `clientDb = multileveldown.client([options])`
95101

server.js

Lines changed: 21 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ var DECODERS = [
1212
]
1313

1414
module.exports = function (db, opts) {
15+
var readonly = !!(opts && opts.readonly)
1516
var decode = lpstream.decode()
1617
var encode = lpstream.encode()
1718
var stream = duplexify(decode, encode)
@@ -44,12 +45,22 @@ module.exports = function (db, opts) {
4445
return
4546
}
4647

47-
switch (tag) {
48-
case 0: return onget(req)
49-
case 1: return onput(req)
50-
case 2: return ondel(req)
51-
case 3: return onbatch(req)
52-
case 4: return oniterator(req)
48+
if (readonly) {
49+
switch (tag) {
50+
case 0: return onget(req)
51+
case 1: return onreadonly(req)
52+
case 2: return onreadonly(req)
53+
case 3: return onreadonly(req)
54+
case 4: return oniterator(req)
55+
}
56+
} else {
57+
switch (tag) {
58+
case 0: return onget(req)
59+
case 1: return onput(req)
60+
case 2: return ondel(req)
61+
case 3: return onbatch(req)
62+
case 4: return oniterator(req)
63+
}
5364
}
5465
})
5566

@@ -79,6 +90,10 @@ module.exports = function (db, opts) {
7990
})
8091
}
8192

93+
function onreadonly (req) {
94+
callback(req.id, new Error('Database is readonly'))
95+
}
96+
8297
function onbatch (req) {
8398
down.batch(req.ops, function (err) {
8499
callback(req.id, err)

test/basic.js

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,26 @@ tape('put', function (t) {
3737
})
3838
})
3939

40+
tape('readonly', function (t) {
41+
var db = levelup('no-location', {db: memdown})
42+
43+
db.put('hello', 'verden')
44+
45+
var stream = multileveldown.server(db, {readonly: true})
46+
var client = multileveldown.client()
47+
48+
stream.pipe(client.createRpcStream()).pipe(stream)
49+
50+
client.put('hello', 'world', function (err) {
51+
t.ok(err, 'put failed')
52+
client.get('hello', function (err, value) {
53+
t.error(err, 'no err')
54+
t.same(value, 'verden', 'old value')
55+
t.end()
56+
})
57+
})
58+
})
59+
4060
tape('del', function (t) {
4161
var db = levelup('no-location', {db: memdown})
4262
var stream = multileveldown.server(db)

0 commit comments

Comments
 (0)