Merge pull request #660 from xpunch/serviceNotFoundIssue
Service not found issue
This commit is contained in:
		@@ -73,10 +73,11 @@ func (g *grpcClient) next(request client.Request, opts client.CallOptions) (sele
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	// get next nodes from the selector
 | 
						// get next nodes from the selector
 | 
				
			||||||
	next, err := g.opts.Selector.Select(service, opts.SelectOptions...)
 | 
						next, err := g.opts.Selector.Select(service, opts.SelectOptions...)
 | 
				
			||||||
	if err != nil && err == selector.ErrNotFound {
 | 
						if err != nil {
 | 
				
			||||||
		return nil, errors.NotFound("go.micro.client", "service %s not found: %v", service, err.Error())
 | 
							if err == selector.ErrNotFound {
 | 
				
			||||||
	} else if err != nil {
 | 
								return nil, errors.InternalServerError("go.micro.client", "service %s: %s", service, err.Error())
 | 
				
			||||||
		return nil, errors.InternalServerError("go.micro.client", err.Error())
 | 
							}
 | 
				
			||||||
 | 
							return nil, errors.InternalServerError("go.micro.client", "error selecting %s node: %s", service, err.Error())
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	return next, nil
 | 
						return next, nil
 | 
				
			||||||
@@ -350,15 +351,17 @@ func (g *grpcClient) Call(ctx context.Context, req client.Request, rsp interface
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
		// select next node
 | 
							// select next node
 | 
				
			||||||
		node, err := next()
 | 
							node, err := next()
 | 
				
			||||||
		if err != nil && err == selector.ErrNotFound {
 | 
							service := req.Service()
 | 
				
			||||||
			return errors.NotFound("go.micro.client", "service %s not found: %v", req.Service(), err.Error())
 | 
							if err != nil {
 | 
				
			||||||
		} else if err != nil {
 | 
								if err == selector.ErrNotFound {
 | 
				
			||||||
			return errors.InternalServerError("go.micro.client", err.Error())
 | 
									return errors.InternalServerError("go.micro.client", "service %s: %s", service, err.Error())
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
								return errors.InternalServerError("go.micro.client", "error selecting %s node: %s", service, err.Error())
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		// make the call
 | 
							// make the call
 | 
				
			||||||
		err = gcall(ctx, node, req, rsp, callOpts)
 | 
							err = gcall(ctx, node, req, rsp, callOpts)
 | 
				
			||||||
		g.opts.Selector.Mark(req.Service(), node, err)
 | 
							g.opts.Selector.Mark(service, node, err)
 | 
				
			||||||
		return err
 | 
							return err
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -429,14 +432,16 @@ func (g *grpcClient) Stream(ctx context.Context, req client.Request, opts ...cli
 | 
				
			|||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		node, err := next()
 | 
							node, err := next()
 | 
				
			||||||
		if err != nil && err == selector.ErrNotFound {
 | 
							service := req.Service()
 | 
				
			||||||
			return nil, errors.NotFound("go.micro.client", "service %s not found: %v", req.Service(), err.Error())
 | 
							if err != nil {
 | 
				
			||||||
		} else if err != nil {
 | 
								if err == selector.ErrNotFound {
 | 
				
			||||||
			return nil, errors.InternalServerError("go.micro.client", err.Error())
 | 
									return nil, errors.InternalServerError("go.micro.client", "service %s: %s", service, err.Error())
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
								return nil, errors.InternalServerError("go.micro.client", "error selecting %s node: %s", service, err.Error())
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		stream, err := g.stream(ctx, node, req, callOpts)
 | 
							stream, err := g.stream(ctx, node, req, callOpts)
 | 
				
			||||||
		g.opts.Selector.Mark(req.Service(), node, err)
 | 
							g.opts.Selector.Mark(service, node, err)
 | 
				
			||||||
		return stream, err
 | 
							return stream, err
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -312,10 +312,11 @@ func (r *rpcClient) next(request Request, opts CallOptions) (selector.Next, erro
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	// get next nodes from the selector
 | 
						// get next nodes from the selector
 | 
				
			||||||
	next, err := r.opts.Selector.Select(service, opts.SelectOptions...)
 | 
						next, err := r.opts.Selector.Select(service, opts.SelectOptions...)
 | 
				
			||||||
	if err != nil && err == selector.ErrNotFound {
 | 
						if err != nil {
 | 
				
			||||||
		return nil, errors.NotFound("go.micro.client", "service %s: %v", service, err.Error())
 | 
							if err == selector.ErrNotFound {
 | 
				
			||||||
	} else if err != nil {
 | 
								return nil, errors.InternalServerError("go.micro.client", "service %s: %s", service, err.Error())
 | 
				
			||||||
		return nil, errors.InternalServerError("go.micro.client", "error selecting %s node: %v", service, err.Error())
 | 
							}
 | 
				
			||||||
 | 
							return nil, errors.InternalServerError("go.micro.client", "error selecting %s node: %s", service, err.Error())
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	return next, nil
 | 
						return next, nil
 | 
				
			||||||
@@ -375,15 +376,17 @@ func (r *rpcClient) Call(ctx context.Context, request Request, response interfac
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
		// select next node
 | 
							// select next node
 | 
				
			||||||
		node, err := next()
 | 
							node, err := next()
 | 
				
			||||||
		if err != nil && err == selector.ErrNotFound {
 | 
							service := request.Service()
 | 
				
			||||||
			return errors.NotFound("go.micro.client", "service %s: %v", request.Service(), err.Error())
 | 
							if err != nil {
 | 
				
			||||||
		} else if err != nil {
 | 
								if err == selector.ErrNotFound {
 | 
				
			||||||
			return errors.InternalServerError("go.micro.client", "error getting next %s node: %v", request.Service(), err.Error())
 | 
									return errors.InternalServerError("go.micro.client", "service %s: %s", service, err.Error())
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
								return errors.InternalServerError("go.micro.client", "error getting next %s node: %s", service, err.Error())
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		// make the call
 | 
							// make the call
 | 
				
			||||||
		err = rcall(ctx, node, request, response, callOpts)
 | 
							err = rcall(ctx, node, request, response, callOpts)
 | 
				
			||||||
		r.opts.Selector.Mark(request.Service(), node, err)
 | 
							r.opts.Selector.Mark(service, node, err)
 | 
				
			||||||
		return err
 | 
							return err
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -452,14 +455,16 @@ func (r *rpcClient) Stream(ctx context.Context, request Request, opts ...CallOpt
 | 
				
			|||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		node, err := next()
 | 
							node, err := next()
 | 
				
			||||||
		if err != nil && err == selector.ErrNotFound {
 | 
							service := request.Service()
 | 
				
			||||||
			return nil, errors.NotFound("go.micro.client", "service %s: %v", request.Service(), err.Error())
 | 
							if err != nil {
 | 
				
			||||||
		} else if err != nil {
 | 
								if err == selector.ErrNotFound {
 | 
				
			||||||
			return nil, errors.InternalServerError("go.micro.client", "error getting next %s node: %v", request.Service(), err.Error())
 | 
									return nil, errors.InternalServerError("go.micro.client", "service %s: %s", service, err.Error())
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
								return nil, errors.InternalServerError("go.micro.client", "error getting next %s node: %s", service, err.Error())
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		stream, err := r.stream(ctx, node, request, callOpts)
 | 
							stream, err := r.stream(ctx, node, request, callOpts)
 | 
				
			||||||
		r.opts.Selector.Mark(request.Service(), node, err)
 | 
							r.opts.Selector.Mark(service, node, err)
 | 
				
			||||||
		return stream, err
 | 
							return stream, err
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -51,6 +51,9 @@ func (c *registrySelector) Select(service string, opts ...SelectOption) (Next, e
 | 
				
			|||||||
	// if that fails go directly to the registry
 | 
						// if that fails go directly to the registry
 | 
				
			||||||
	services, err := c.rc.GetService(service)
 | 
						services, err := c.rc.GetService(service)
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
 | 
							if err == registry.ErrNotFound {
 | 
				
			||||||
 | 
								return nil, ErrNotFound
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
		return nil, err
 | 
							return nil, err
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -29,7 +29,7 @@ var (
 | 
				
			|||||||
	DefaultRegistry = NewRegistry()
 | 
						DefaultRegistry = NewRegistry()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// Not found error when GetService is called
 | 
						// Not found error when GetService is called
 | 
				
			||||||
	ErrNotFound = errors.New("not found")
 | 
						ErrNotFound = errors.New("service not found")
 | 
				
			||||||
	// Watcher stopped error when watcher is stopped
 | 
						// Watcher stopped error when watcher is stopped
 | 
				
			||||||
	ErrWatcherStopped = errors.New("watcher stopped")
 | 
						ErrWatcherStopped = errors.New("watcher stopped")
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -271,12 +271,12 @@ func (g *grpcServer) handler(srv interface{}, stream grpc.ServerStream) error {
 | 
				
			|||||||
	g.rpc.mu.Unlock()
 | 
						g.rpc.mu.Unlock()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if service == nil {
 | 
						if service == nil {
 | 
				
			||||||
		return status.New(codes.Unimplemented, fmt.Sprintf("unknown service %v", service)).Err()
 | 
							return status.New(codes.Unimplemented, fmt.Sprintf("unknown service %s", serviceName)).Err()
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	mtype := service.method[methodName]
 | 
						mtype := service.method[methodName]
 | 
				
			||||||
	if mtype == nil {
 | 
						if mtype == nil {
 | 
				
			||||||
		return status.New(codes.Unimplemented, fmt.Sprintf("unknown service %v", service)).Err()
 | 
							return status.New(codes.Unimplemented, fmt.Sprintf("unknown service %s.%s", serviceName, methodName)).Err()
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// process unary
 | 
						// process unary
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user