| 25 | } |
| 26 | |
| 27 | func (nr *NodeReaper) Handle() { |
| 28 | waitDuration := time.Duration(conf.EXPIRE_WAIT) * time.Minute |
| 29 | for { |
| 30 | // sleep |
| 31 | time.Sleep(waitDuration) |
| 32 | // query to get expired nodes |
| 33 | nodes := Nodes{} |
| 34 | query := nr.getQuery() |
| 35 | nodes.GetAll(query) |
| 36 | // delete expired nodes |
| 37 | for _, n := range nodes { |
| 38 | logger.Infof("Deleting expired node: %s", n.Id) |
| 39 | if err := n.Delete(); err != nil { |
| 40 | err_msg := "err:@node_delete: " + err.Error() |
| 41 | logger.Error(err_msg) |
| 42 | } |
| 43 | } |
| 44 | // garbage collection: remove old nodes from Lockers, value is hours old |
| 45 | locker.NodeLockMgr.RemoveOld(1) |
| 46 | locker.FileLockMgr.RemoveOld(6) |
| 47 | locker.IndexLockMgr.RemoveOld(6) |
| 48 | } |
| 49 | } |
| 50 | |
| 51 | func (nr *NodeReaper) getQuery() (query bson.M) { |
| 52 | hasExpire := bson.M{"expiration": bson.M{"$exists": true}} // has the field |