Skip to content

Add option to disable prewrite hook #60

@vweevers

Description

@vweevers

Context

I'm working on a rewrite of level-ttl, not because I need it, but to make it use hooks and find out what gaps we in that API.

Problem

If a plugin like level-ttl uses the prewrite hook but also has a background job that writes to the same db, it will trigger its own hook function (as well as other hook functions). E.g.:

module.exports = function ttl (db) {
  // Imagine a sublevel to which we write expiry metadata
  const sublevel = ...

  db.hooks.prewrite.add(function (op, batch) {
    if (op.type === 'put') {
      const exp = Date.now() + op.ttl
      batch.add({ type: 'put', sublevel, key: op.key, value: exp })
    } else {
      batch.add({ type: 'del', sublevel, key: op.key })
    }
  })

  // Background job
  setInterval(function sweep () {
    // Imagine we're deleting an expired key
    db.del('foo').catch(..)
  }, 60e3)
}

Solution

db.del('foo', { prewrite: false })

As well as:

db.put('foo', 'bar', { prewrite: false })
db.batch([], { prewrite: false })
db.batch().put('foo', 'bar', { prewrite: false })
db.batch().del('foo', { prewrite: false })

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Type

    No type
    No fields configured for issues without a type.

    Projects

    Status
    Todo

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions