-
Notifications
You must be signed in to change notification settings - Fork 1.5k
Description
Issue
Closing a database does not seem to close the dependent dbs / views / indices.
So one can not repair / rebuild the indices without a restart
Info
- Environment: node
- Platform: macos / Win
- Adapter: leveldb
- Server: Pouch db
Reproduce
Flow:
- Create a db
- Create an index / view
- Close the database
- delete the view directories
- reopen the database
- try to use the index
const PouchDB = require('pouchdb')
PouchDB.plugin(require('pouchdb-find'))
const fs = require('fs')
const expect = require('chai').expect
const path = require('path')
const util = require('util')
const rimraf = require('rimraf')
const chai = require('chai')
describe('index directory creation issue', () => {
const databaseDir = path.join(__dirname, 'database-view-recreate') + path.sep
let database
createDatabase = async () => {
let db = new PouchDB(databaseDir)
await db.info()
return db
}
before(async () => {
database = await createDatabase()
})
after(() => {
rimraf.sync(databaseDir)
})
context('create index', () => {
before(async () => {
await database.createIndex({
index: {
fields: ['name'],
name: 'myindex',
ddoc: 'myindex'
}
})
await database.put({
_id: '_design/index',
views: {
anotherIndex: {
map: function (doc) { emit(doc.name) }.toString()
}
}
})
})
it('creates a mr-view directory', () => {
let directories = fs.readdirSync(databaseDir)
let hasItem = directories.some((item) => {
return item.match(/-mrview-/)
})
expect(hasItem).to.be.true
})
it('is able to search by query', async () => {
await database.query('index/anotherIndex')
})
context('delete and recreate index', () => {
before( async () => {
await database.close()
rimraf.sync(path.join(databaseDir, '*-mrview-*'))
})
it('deletes the view directory', () => {
let directories = fs.readdirSync(databaseDir)
let hasItem = directories.some((item) => {
return item.match(/-mrview-/)
})
expect(hasItem).to.be.false
})
context('database reopen', () => {
before(async () => {
database = await createDatabase()
})
it('creates the view directories', () => {
let directories = fs.readdirSync(databaseDir)
let hasItem = directories.some((item) => {
return item.match(/-mrview-/)
})
expect(hasItem).to.be.true
})
})
})
})
})
Package.json
{
"dependencies": {
"chai": "^4.1.2",
"mocha": "^5.2.0",
"pouchdb": "6.4.3",
"pouchdb-find": "6.4.3",
"rimraf": "^2.6.2"
}
}
Metadata
Metadata
Assignees
Labels
No labels