         ], (err) =>
             opts.cb(err, result)
         )
+
+    move_off_host: (opts) =>
+        opts = defaults opts,
+            host : required
+            cb   : required
+        @database.select
+            table   : 'projects'
+            columns : ['project_id', 'compute_server']
+            #consistency : require("cassandra-driver").types.consistencies.quorum
+            stream  : true
+            limit   : opts.query_limit
+            cb      : (err, results) =>
+                if err
+                    opts.cb(err)
+                else
+                    winston.debug("got them; now processing...")
+                    v = (x[0] for x in results when x[1] == opts.host)
+                    winston.debug("found #{v.length} on #{opts.host}")
+                    f = (project_id, cb) =>
+                        winston.debug("moving #{project_id} off of #{opts.host}")
+                        @database.update
+                            table : 'projects'
+                            set   :
+                                'compute_server' : undefined
+                            where :
+                                project_id : project_id
+                            consistency : require("cassandra-driver").types.consistencies.all
+                            cb    : cb
+                    async.mapLimit(v, 15, f, opts.cb)
 
     # open recent projects
     migrate_recent: (opts) =>



# obviously don't want to trigger this too quickly, since it may mean file loss.
AUTOMATIC_FAILOVER_TIME_S = 75

SERVER_STATUS_TIMEOUT_S = 5  # 5 seconds


                # triggers failover of project to another node.
                misc.retry_until_success
                    f           : f
                    start_delay : 10000
                    max_time    : AUTOMATIC_FAILOVER_TIME_S*1000
                    cb          : (err) =>
                        if err
