コード例 #1
0
ファイル: registry.go プロジェクト: qinguoan/vulcan
func (r *RouteRegistry) Lookup(uri route.Uri) *route.Pool {
	r.RLock()

	uri = uri.RouteKey()
	var err error
	pool, found := r.byUri.MatchUri(uri)

	r.logger.Infof("endpoint pool: %#v", pool)
	for !found && err == nil {
		uri, err = uri.NextWildcard()
		pool, found = r.byUri.MatchUri(uri)
	}

	r.RUnlock()

	return pool
}
コード例 #2
0
ファイル: registry.go プロジェクト: qinguoan/vulcan
func (r *RouteRegistry) Register(uri route.Uri, ep *route.Endpoint) {
	t := time.Now()
	r.Lock()

	uri = uri.RouteKey()

	pool, found := r.byUri.Find(uri)
	if !found {
		contextPath := parseContextPath(uri)
		pool = route.NewPool(r.dropletStaleThreshold/4, contextPath)
		r.byUri.Insert(uri, pool)
	}

	pool.Put(ep)

	r.timeOfLastUpdate = t
	r.Unlock()
}
コード例 #3
0
ファイル: registry.go プロジェクト: qinguoan/vulcan
func (r *RouteRegistry) Unregister(uri route.Uri, ep *route.Endpoint) {
	r.Lock()

	uri = uri.RouteKey()

	pool, found := r.byUri.Find(uri)
	if found {

		r.logger.Infof("remove endpoint %#v of uri: %#v", ep, uri)
		pool.Remove(ep)

		if pool.IsEmpty() {
			r.byUri.Delete(uri)
		}
	}

	r.Unlock()
}
コード例 #4
0
ファイル: registry.go プロジェクト: qinguoan/vulcan
func (r *RouteRegistry) RegisterAll(uri route.Uri, eps []*route.Endpoint) {
	r.Lock()
	defer r.Unlock()

	uri = uri.RouteKey()

	contextPath := parseContextPath(uri)
	pool := route.NewPool(r.dropletStaleThreshold/4, contextPath)

	for _, ep := range eps {
		r.logger.Infof("route.endpoint: %v", ep)
		pool.Put(ep)
	}

	r.logger.Infof("byUri: %#v", *pool)
	ok := r.byUri.Insert(uri, pool)
	r.logger.Infof("=======ok: %#v", *ok.Pool)

	r.timeOfLastUpdate = time.Now()

}