             cb    : required   # cb(err)
         @table('blobs').getAll(opts.uuids...).replace(
             @r.row.without(expire:true)).run(opts.cb)
+
+    # If blob has been backed up offsite
+    #close_blob: (opts) =>
+    #    opts = defaults opts,
+    #        uuid : required   # uuid=sha1-based from blob
+    #        cb   : required   # cb(err)
+    #        @r.row.without(expire:true)).run(opts.cb)
 
     ###
     # User queries


    get_blob: (opts) =>
        opts = defaults opts,
            uuid : required
            cb   : required
        @table('blobs').get(opts.uuid).run (err, x) =>
            if err
                opts.cb(err)
            else
                if not x
                    opts.cb(undefined, undefined)
                else if x.expire and x.expire <= new Date()
                    opts.cb(undefined, undefined)   # no such blob anymore
                    @table('blobs').get(opts.uuid).delete().run()   # delete it
                else
                    opts.cb(undefined, x.blob)
                    # We now also update the access counter/times for the blob, but of course
                    # don't block on opts.cb above to do this.
                    @touch_blob(uuid : opts.uuid)

    # Return gcloud API interface
    gcloud: () =>

                    cb(); return
                # successful upload to gcloud -- set x.gcloud
                @table('blobs').get(opts.uuid).update(gcloud:opts.bucket).run(cb)
        ], (err) => opts.cb?(err))

    # Copied all blobs that will never expire to a google cloud storage bucket.
    #
    #     errors={}; db.copy_all_blobs_to_gcloud(limit:10000, map_limit:25,cb:done(), repeat_until_done:true, errors:errors)
    #
    copy_all_blobs_to_gcloud: (opts) =>
        opts = defaults opts,
