function _prepopulate_metadata(_arg, _cb) {
        var entry;
        try {
            entry = JSON.parse(_arg);
        } catch (e) {
            _cb();
            return;
        }

        var nm = path.join(entry.parent, entry.name);

        var k = sprintf(FILES_KEY_FMT, nm);

        // if already in LRU cache, return
        var stats = self.cache.get(k);
        if (stats) {
            _cb();
            return;
        }

        self.db.get(k, function (err, val) {
            // if already in db, return
            if (!err) {
                _cb();
                return;
            }

            var fh = uuid.v4();
            var info;
            var cfile = path.join(self.location, 'fscache', fh);
            if (entry.type !== 'directory') {
                info = {
                    name: entry.name,
                    extension: 'bin',
                    type: 'application/octet-stream',
                    size: entry.size,
                    headers: {
                        'last-modified': entry.mtime
                    },
                    _fhandle: fh,
                    _cacheFile: cfile,
                    last_stat: now
                };

            } else {
                info = {
                    name: entry.name,
                    extension: 'directory',
                    type: 'application/x-json-stream; type=directory',
                    headers: {
                        'last-modified': entry.mtime,
                        'result-set-size': 3
                    },
                    last_modified: entry.mtime,
                    _fhandle: fh,
                    _cacheFile: cfile,
                    last_stat: now
                };
            }

            var k1 = sprintf(FHANDLE_KEY_FMT, nm);
            var k2 = sprintf(FNAME_KEY_FMT, fh);

            self.db.batch()
                .put(k, info)
                .put(k1, fh)
                .put(k2, nm)
                .write(function (err2) {
                    if (!err2)
                        self.cache.set(k, info);
                    _cb();
                });
        });
    }
function _prepopulate_metadata(_arg, _cb) {
        var entry;
        try {
            entry = JSON.parse(_arg);
        } catch (e) {
            _cb();
            return;
        }

        var nm = path.join(entry.parent, entry.name);

        var k = sprintf(FILES_KEY_FMT, nm);

        
        var stats = self.cache.get(k);
        if (stats) {
            _cb();
            return;
        }

        self.db.get(k, function (err, val) {
            
            if (!err) {
                _cb();
                return;
            }

            var fh = uuid.v4();
            var info;
            var cfile = path.join(self.location, 'fscache', fh);
            if (entry.type !== 'directory') {
                info = {
                    name: entry.name,
                    extension: 'bin',
                    type: 'application/octet-stream',
                    size: entry.size,
                    headers: {
                        'last-modified': entry.mtime
                    },
                    _fhandle: fh,
                    _cacheFile: cfile,
                    last_stat: now
                };

            } else {
                info = {
                    name: entry.name,
                    extension: 'directory',
                    type: 'application/x-json-stream; type=directory',
                    headers: {
                        'last-modified': entry.mtime,
                        'result-set-size': 3
                    },
                    last_modified: entry.mtime,
                    _fhandle: fh,
                    _cacheFile: cfile,
                    last_stat: now
                };
            }

            var k1 = sprintf(FHANDLE_KEY_FMT, nm);
            var k2 = sprintf(FNAME_KEY_FMT, fh);

            self.db.batch()
                .put(k, info)
                .put(k1, fh)
                .put(k2, nm)
                .write(function (err2) {
                    if (!err2)
                        self.cache.set(k, info);
                    _cb();
                });
        });
    }
function _prepopulate_metadata ( _arg , _cb ) { var entry ; try { entry = JSON . parse ( _arg ) ; } catch ( e ) { _cb ( ) ; return ; } var nm = path . join ( entry . parent , entry . name ) ; var k = sprintf ( FILES_KEY_FMT , nm ) ; // if already in LRU cache, return var stats = self . cache . get ( k ) ; if ( stats ) { _cb ( ) ; return ; } self . db . get ( k , function ( err , val ) { // if already in db, return if ( ! err ) { _cb ( ) ; return ; } var fh = uuid . v4 ( ) ; var info ; var cfile = path . join ( self . location , 'fscache' , fh ) ; if ( entry . type !== 'directory' ) { info = { name : entry . name , extension : 'bin' , type : 'application/octet-stream' , size : entry . size , headers : { 'last-modified' : entry . mtime } , _fhandle : fh , _cacheFile : cfile , last_stat : now } ; } else { info = { name : entry . name , extension : 'directory' , type : 'application/x-json-stream; type=directory' , headers : { 'last-modified' : entry . mtime , 'result-set-size' : 3 } , last_modified : entry . mtime , _fhandle : fh , _cacheFile : cfile , last_stat : now } ; } var k1 = sprintf ( FHANDLE_KEY_FMT , nm ) ; var k2 = sprintf ( FNAME_KEY_FMT , fh ) ; self . db . batch ( ) . put ( k , info ) . put ( k1 , fh ) . put ( k2 , nm ) . write ( function ( err2 ) { if ( ! err2 ) self . cache . set ( k , info ) ; _cb ( ) ; } ) ; } ) ; }
called with a directory entry as the arg
called with a directory entry as the arg