func serve(args []string) error { // Parameter overrides must be processed before any paramaters are // cached. Failures to cache cause the server to terminate immediately. if chaincodeDevMode { logger.Info("Running in chaincode development mode") logger.Info("Set consensus to NOOPS and user starts chaincode") logger.Info("Disable loading validity system chaincode") viper.Set("peer.validator.enabled", "true") viper.Set("peer.validator.consensus", "noops") viper.Set("chaincode.mode", chaincode.DevModeUserRunsChaincode) // Disable validity system chaincode in dev mode. Also if security is enabled, // in membersrvc.yaml, manually set pki.validity-period.update to false to prevent // membersrvc from calling validity system chaincode -- though no harm otherwise viper.Set("ledger.blockchain.deploy-system-chaincode", "false") viper.Set("validator.validity-period.verification", "false") } if err := peer.CacheConfiguration(); err != nil { return err } //register all system chaincodes. This just registers chaincodes, they must be //still be deployed and launched system_chaincode.RegisterSysCCs() peerEndpoint, err := peer.GetPeerEndpoint() if err != nil { err = fmt.Errorf("Failed to get Peer Endpoint: %s", err) return err } listenAddr := viper.GetString("peer.listenAddress") if "" == listenAddr { logger.Debug("Listen address not specified, using peer endpoint address") listenAddr = peerEndpoint.Address } lis, err := net.Listen("tcp", listenAddr) if err != nil { grpclog.Fatalf("Failed to listen: %v", err) } ehubLis, ehubGrpcServer, err := createEventHubServer() if err != nil { grpclog.Fatalf("Failed to create ehub server: %v", err) } logger.Info("Security enabled status: %t", core.SecurityEnabled()) logger.Info("Privacy enabled status: %t", viper.GetBool("security.privacy")) var opts []grpc.ServerOption if peer.TLSEnabled() { creds, err := credentials.NewServerTLSFromFile(viper.GetString("peer.tls.cert.file"), viper.GetString("peer.tls.key.file")) if err != nil { grpclog.Fatalf("Failed to generate credentials %v", err) } opts = []grpc.ServerOption{grpc.Creds(creds)} } grpcServer := grpc.NewServer(opts...) secHelper, err := getSecHelper() if err != nil { return err } secHelperFunc := func() crypto.Peer { return secHelper } registerChaincodeSupport(chaincode.DefaultChain, grpcServer, secHelper) var peerServer *peer.PeerImpl //create the peerServer.... if peer.ValidatorEnabled() { logger.Debug("Running as validating peer - making genesis block if needed") makeGenesisError := genesis.MakeGenesis() if makeGenesisError != nil { return makeGenesisError } logger.Debug("Running as validating peer - installing consensus %s", viper.GetString("peer.validator.consensus")) peerServer, err = peer.NewPeerWithEngine(secHelperFunc, helper.GetEngine) } else { logger.Debug("Running as non-validating peer") peerServer, err = peer.NewPeerWithHandler(secHelperFunc, peer.NewPeerHandler) } if err != nil { logger.Fatalf("Failed creating new peer with handler %v", err) return err } // Register the Peer server //pb.RegisterPeerServer(grpcServer, openchain.NewPeer()) pb.RegisterPeerServer(grpcServer, peerServer) // Register the Admin server pb.RegisterAdminServer(grpcServer, core.NewAdminServer()) // Register Devops server serverDevops := core.NewDevopsServer(peerServer) pb.RegisterDevopsServer(grpcServer, serverDevops) // Register the ServerOpenchain server serverOpenchain, err := rest.NewOpenchainServerWithPeerInfo(peerServer) if err != nil { err = fmt.Errorf("Error creating OpenchainServer: %s", err) return err } pb.RegisterOpenchainServer(grpcServer, serverOpenchain) // Create and register the REST service if configured if viper.GetBool("rest.enabled") { go rest.StartOpenchainRESTServer(serverOpenchain, serverDevops) } rootNode, err := core.GetRootNode() if err != nil { grpclog.Fatalf("Failed to get peer.discovery.rootnode valey: %s", err) } logger.Info("Starting peer with id=%s, network id=%s, address=%s, discovery.rootnode=%s, validator=%v", peerEndpoint.ID, viper.GetString("peer.networkId"), peerEndpoint.Address, rootNode, peer.ValidatorEnabled()) // Start the grpc server. Done in a goroutine so we can deploy the // genesis block if needed. serve := make(chan error) go func() { var grpcErr error if grpcErr = grpcServer.Serve(lis); grpcErr != nil { grpcErr = fmt.Errorf("grpc server exited with error: %s", grpcErr) } else { logger.Info("grpc server exited") } serve <- grpcErr }() if err := writePid(viper.GetString("peer.fileSystemPath")+"/peer.pid", os.Getpid()); err != nil { return err } //start the event hub server if ehubGrpcServer != nil && ehubLis != nil { go ehubGrpcServer.Serve(ehubLis) } if viper.GetBool("peer.profile.enabled") { go func() { profileListenAddress := viper.GetString("peer.profile.listenAddress") logger.Info(fmt.Sprintf("Starting profiling server with listenAddress = %s", profileListenAddress)) if profileErr := http.ListenAndServe(profileListenAddress, nil); profileErr != nil { logger.Error("Error starting profiler: %s", profileErr) } }() } // Block until grpc server exits return <-serve }
func startOpenchain(t *testing.T) error { peerEndpoint, err := peer.GetPeerEndpoint() if err != nil { return fmt.Errorf("Failed to get Peer Endpoint: %s", err) } listenAddr := viper.GetString("peer.listenaddress") if "" == listenAddr { t.Log("Listen address not specified, using peer endpoint address") listenAddr = peerEndpoint.Address } lis, err := net.Listen("tcp", listenAddr) if err != nil { grpclog.Fatalf("failed to listen: %v", err) } t.Logf("Security enabled status: %t", viper.GetBool("security.enabled")) var opts []grpc.ServerOption if viper.GetBool("peer.tls.enabled") { creds, err := credentials.NewServerTLSFromFile(viper.GetString("peer.tls.cert.file"), viper.GetString("peer.tls.key.file")) if err != nil { grpclog.Fatalf("Failed to generate credentials %v", err) } opts = []grpc.ServerOption{grpc.Creds(creds)} } grpcServer := grpc.NewServer(opts...) // Register the Peer server var peerServer *peer.PeerImpl secHelper, err := getSecHelper() if err != nil { return err } secHelperFunc := func() crypto.Peer { return secHelper } if viper.GetBool("peer.validator.enabled") { t.Logf("Running as validating peer - installing consensus %s", viper.GetString("peer.validator.consensus")) peerServer, _ = peer.NewPeerWithHandler(secHelperFunc, helper.NewConsensusHandler) } else { t.Log("Running as non-validating peer") peerServer, _ = peer.NewPeerWithHandler(secHelperFunc, peer.NewPeerHandler) } pb.RegisterPeerServer(grpcServer, peerServer) // Register the Admin server pb.RegisterAdminServer(grpcServer, core.NewAdminServer()) // Register ChaincodeSupport server... // TODO : not the "DefaultChain" ... we have to revisit when we do multichain registerChaincodeSupport(chaincode.DefaultChain, grpcServer, secHelper) // Register Devops server serverDevops := core.NewDevopsServer(peerServer) pb.RegisterDevopsServer(grpcServer, serverDevops) // Register the ServerOpenchain server serverOpenchain, err := rest.NewOpenchainServer() if err != nil { return fmt.Errorf("Error creating OpenchainServer: %s", err) } pb.RegisterOpenchainServer(grpcServer, serverOpenchain) // Create and register the REST service go rest.StartOpenchainRESTServer(serverOpenchain, serverDevops) rootNode, err := core.GetRootNode() if err != nil { grpclog.Fatalf("Failed to get peer.discovery.rootnode valey: %s", err) } t.Logf("Starting peer with id=%s, network id=%s, address=%s, discovery.rootnode=%s, validator=%v", peerEndpoint.ID, viper.GetString("peer.networkId"), peerEndpoint.Address, rootNode, viper.GetBool("peer.validator.enabled")) // Start the grpc server. Done in a goroutine so we can deploy the // genesis block if needed. serve := make(chan bool) go func() { grpcServer.Serve(lis) serve <- true }() // Deploy the geneis block if needed. if viper.GetBool("peer.validator.enabled") { makeGeneisError := genesis.MakeGenesis() if makeGeneisError != nil { return makeGeneisError } } // Block until grpc server exits <-serve return nil }