Procházet zdrojové kódy

rpc: fix megacheck warnings

Egon Elbre před 8 roky
rodič
revize
e063d538b8
5 změnil soubory, kde provedl 24 přidání a 62 odebrání
  1. 6 23
      rpc/server.go
  2. 0 1
      rpc/subscription.go
  3. 11 5
      rpc/subscription_test.go
  4. 4 9
      rpc/types.go
  5. 3 24
      rpc/utils.go

+ 6 - 23
rpc/server.go

@@ -29,11 +29,7 @@ import (
 	"gopkg.in/fatih/set.v0"
 )
 
-const (
-	notificationBufferSize = 10000 // max buffered notifications before codec is closed
-
-	MetadataApi = "rpc"
-)
+const MetadataApi = "rpc"
 
 // CodecOption specifies which type of messages this codec supports
 type CodecOption int
@@ -49,10 +45,9 @@ const (
 // NewServer will create a new server instance with no registered handlers.
 func NewServer() *Server {
 	server := &Server{
-		services:      make(serviceRegistry),
-		subscriptions: make(subscriptionRegistry),
-		codecs:        set.New(),
-		run:           1,
+		services: make(serviceRegistry),
+		codecs:   set.New(),
+		run:      1,
 	}
 
 	// register a default service which will provide meta information about the RPC service such as the services and
@@ -124,16 +119,6 @@ func (s *Server) RegisterName(name string, rcvr interface{}) error {
 	return nil
 }
 
-// hasOption returns true if option is included in options, otherwise false
-func hasOption(option CodecOption, options []CodecOption) bool {
-	for _, o := range options {
-		if option == o {
-			return true
-		}
-	}
-	return false
-}
-
 // serveRequest will reads requests from the codec, calls the RPC callback and
 // writes the response to the given codec.
 //
@@ -148,13 +133,11 @@ func (s *Server) serveRequest(codec ServerCodec, singleShot bool, options CodecO
 			const size = 64 << 10
 			buf := make([]byte, size)
 			buf = buf[:runtime.Stack(buf, false)]
-			log.Error(fmt.Sprint(string(buf)))
+			log.Error(string(buf))
 		}
 		s.codecsMu.Lock()
 		s.codecs.Remove(codec)
 		s.codecsMu.Unlock()
-
-		return
 	}()
 
 	ctx, cancel := context.WithCancel(context.Background())
@@ -246,7 +229,7 @@ func (s *Server) ServeSingleRequest(codec ServerCodec, options CodecOption) {
 // close all codecs which will cancel pending requests/subscriptions.
 func (s *Server) Stop() {
 	if atomic.CompareAndSwapInt32(&s.run, 1, 0) {
-		log.Debug(fmt.Sprint("RPC Server shutdown initiatied"))
+		log.Debug("RPC Server shutdown initiatied")
 		s.codecsMu.Lock()
 		defer s.codecsMu.Unlock()
 		s.codecs.Each(func(c interface{}) bool {

+ 0 - 1
rpc/subscription.go

@@ -53,7 +53,6 @@ type notifierKey struct{}
 type Notifier struct {
 	codec    ServerCodec
 	subMu    sync.RWMutex // guards active and inactive maps
-	stopped  bool
 	active   map[ID]*Subscription
 	inactive map[ID]*Subscription
 }

+ 11 - 5
rpc/subscription_test.go

@@ -165,7 +165,7 @@ func TestNotifications(t *testing.T) {
 }
 
 func waitForMessages(t *testing.T, in *json.Decoder, successes chan<- jsonSuccessResponse,
-	failures chan<- jsonErrResponse, notifications chan<- jsonNotification) {
+	failures chan<- jsonErrResponse, notifications chan<- jsonNotification, errors chan<- error) {
 
 	// read and parse server messages
 	for {
@@ -177,12 +177,14 @@ func waitForMessages(t *testing.T, in *json.Decoder, successes chan<- jsonSucces
 		var responses []map[string]interface{}
 		if rmsg[0] == '[' {
 			if err := json.Unmarshal(rmsg, &responses); err != nil {
-				t.Fatalf("Received invalid message: %s", rmsg)
+				errors <- fmt.Errorf("Received invalid message: %s", rmsg)
+				return
 			}
 		} else {
 			var msg map[string]interface{}
 			if err := json.Unmarshal(rmsg, &msg); err != nil {
-				t.Fatalf("Received invalid message: %s", rmsg)
+				errors <- fmt.Errorf("Received invalid message: %s", rmsg)
+				return
 			}
 			responses = append(responses, msg)
 		}
@@ -216,7 +218,7 @@ func waitForMessages(t *testing.T, in *json.Decoder, successes chan<- jsonSucces
 				}
 				continue
 			}
-			t.Fatalf("Received invalid message: %s", msg)
+			errors <- fmt.Errorf("Received invalid message: %s", msg)
 		}
 	}
 }
@@ -235,6 +237,8 @@ func TestSubscriptionMultipleNamespaces(t *testing.T) {
 		successes     = make(chan jsonSuccessResponse)
 		failures      = make(chan jsonErrResponse)
 		notifications = make(chan jsonNotification)
+
+		errors = make(chan error, 10)
 	)
 
 	// setup and start server
@@ -248,7 +252,7 @@ func TestSubscriptionMultipleNamespaces(t *testing.T) {
 	defer server.Stop()
 
 	// wait for message and write them to the given channels
-	go waitForMessages(t, in, successes, failures, notifications)
+	go waitForMessages(t, in, successes, failures, notifications, errors)
 
 	// create subscriptions one by one
 	n := 3
@@ -297,6 +301,8 @@ func TestSubscriptionMultipleNamespaces(t *testing.T) {
 		}
 
 		select {
+		case err := <-errors:
+			t.Fatal(err)
 		case suc := <-successes: // subscription created
 			subids[namespaces[int(suc.Id.(float64))]] = suc.Result.(string)
 		case failure := <-failures:

+ 4 - 9
rpc/types.go

@@ -48,7 +48,6 @@ type callback struct {
 // service represents a registered object
 type service struct {
 	name          string        // name for service
-	rcvr          reflect.Value // receiver of methods for the service
 	typ           reflect.Type  // receiver type
 	callbacks     callbacks     // registered handlers
 	subscriptions subscriptions // available subscriptions/notifications
@@ -58,23 +57,19 @@ type service struct {
 type serverRequest struct {
 	id            interface{}
 	svcname       string
-	rcvr          reflect.Value
 	callb         *callback
 	args          []reflect.Value
 	isUnsubscribe bool
 	err           Error
 }
 
-type serviceRegistry map[string]*service       // collection of services
-type callbacks map[string]*callback            // collection of RPC callbacks
-type subscriptions map[string]*callback        // collection of subscription callbacks
-type subscriptionRegistry map[string]*callback // collection of subscription callbacks
+type serviceRegistry map[string]*service // collection of services
+type callbacks map[string]*callback      // collection of RPC callbacks
+type subscriptions map[string]*callback  // collection of subscription callbacks
 
 // Server represents a RPC server
 type Server struct {
-	services       serviceRegistry
-	muSubcriptions sync.Mutex // protects subscriptions
-	subscriptions  subscriptionRegistry
+	services serviceRegistry
 
 	run      int32
 	codecsMu sync.Mutex

+ 3 - 24
rpc/utils.go

@@ -119,21 +119,6 @@ func isHexNum(t reflect.Type) bool {
 	return t == bigIntType
 }
 
-var blockNumberType = reflect.TypeOf((*BlockNumber)(nil)).Elem()
-
-// Indication if the given block is a BlockNumber
-func isBlockNumber(t reflect.Type) bool {
-	if t == nil {
-		return false
-	}
-
-	for t.Kind() == reflect.Ptr {
-		t = t.Elem()
-	}
-
-	return t == blockNumberType
-}
-
 // suitableCallbacks iterates over the methods of the given type. It will determine if a method satisfies the criteria
 // for a RPC callback or a subscription callback and adds it to the collection of callbacks or subscriptions. See server
 // documentation for a summary of these criteria.
@@ -210,18 +195,12 @@ METHODS:
 		}
 
 		switch mtype.NumOut() {
-		case 0, 1:
-			break
-		case 2:
-			if h.errPos == -1 { // method must one return value and 1 error
+		case 0, 1, 2:
+			if mtype.NumOut() == 2 && h.errPos == -1 { // method must one return value and 1 error
 				continue METHODS
 			}
-			break
-		default:
-			continue METHODS
+			callbacks[mname] = &h
 		}
-
-		callbacks[mname] = &h
 	}
 
 	return callbacks, subscriptions