package weed_server import ( "context" "time" "github.com/seaweedfs/seaweedfs/weed/glog" "github.com/seaweedfs/seaweedfs/weed/pb/filer_pb" ) // mountPeerRegistrySweepInterval is how often the filer evicts expired mount // registry entries. Eviction is also done lazily on List; the sweep keeps // memory bounded on long-running filers with high churn. const mountPeerRegistrySweepInterval = 60 * time.Second // runMountPeerRegistrySweeper runs for the lifetime of the FilerServer. func (fs *FilerServer) runMountPeerRegistrySweeper() { ticker := time.NewTicker(mountPeerRegistrySweepInterval) defer ticker.Stop() for range ticker.C { if evicted := fs.mountPeerRegistry.Sweep(); evicted > 0 { glog.V(2).Infof("peer registry: evicted %d stale entries", evicted) } } } // MountRegister records (or refreshes) the caller as a live mount server in // the filer's peer registry. Returns an empty response; the caller is // expected to heartbeat before the TTL expires. func (fs *FilerServer) MountRegister(ctx context.Context, req *filer_pb.MountRegisterRequest) (*filer_pb.MountRegisterResponse, error) { ttl := time.Duration(req.TtlSeconds) * time.Second fs.mountPeerRegistry.Register(req.PeerAddr, req.DataCenter, req.Rack, ttl) return &filer_pb.MountRegisterResponse{}, nil } // MountList returns the current set of live mounts for callers building // their HRW seed view. func (fs *FilerServer) MountList(ctx context.Context, req *filer_pb.MountListRequest) (*filer_pb.MountListResponse, error) { entries := fs.mountPeerRegistry.List() resp := &filer_pb.MountListResponse{ Mounts: make([]*filer_pb.MountInfo, 0, len(entries)), } for _, e := range entries { resp.Mounts = append(resp.Mounts, &filer_pb.MountInfo{ PeerAddr: e.PeerAddr, DataCenter: e.DataCenter, Rack: e.Rack, LastSeenNs: e.LastSeenNs, }) } return resp, nil }