github.com/osdi23p228/fabric@v0.0.0-20221218062954-77808885f5db/integration/chaincode/simple/cmd/main.go (about)

     1  /*
     2  Copyright IBM Corp. All Rights Reserved.
     3  
     4  SPDX-License-Identifier: Apache-2.0
     5  */
     6  
     7  package main
     8  
     9  import (
    10  	"fmt"
    11  	"io/ioutil"
    12  	"os"
    13  	"os/signal"
    14  	"syscall"
    15  
    16  	"github.com/hyperledger/fabric-chaincode-go/shim"
    17  	"github.com/osdi23p228/fabric/integration/chaincode/simple"
    18  )
    19  
    20  func handleSignals(handlers map[os.Signal]func()) {
    21  	var signals []os.Signal
    22  	for sig := range handlers {
    23  		signals = append(signals, sig)
    24  	}
    25  
    26  	signalChan := make(chan os.Signal, 1)
    27  	signal.Notify(signalChan, signals...)
    28  
    29  	for sig := range signalChan {
    30  		fmt.Fprintf(os.Stderr, "Received signal: %d (%s)", sig, sig)
    31  		handlers[sig]()
    32  	}
    33  }
    34  
    35  func handleSigTerm() {
    36  	termFile := os.Getenv("ORG1_TERM_FILE")
    37  	if termFile == "" {
    38  		termFile = os.Getenv("ORG2_TERM_FILE")
    39  	}
    40  	if termFile == "" {
    41  		return
    42  	}
    43  
    44  	err := ioutil.WriteFile(termFile, []byte("term-file"), 0644)
    45  	if err != nil {
    46  		fmt.Fprintf(os.Stderr, "failed to write term file to %s: %s", termFile, err)
    47  	}
    48  }
    49  
    50  func main() {
    51  	startErrChan := make(chan error)
    52  	sigtermChan := make(chan error)
    53  
    54  	go handleSignals(map[os.Signal]func(){
    55  		syscall.SIGTERM: func() { sigtermChan <- nil },
    56  	})
    57  
    58  	go func() {
    59  		err := shim.Start(&simple.SimpleChaincode{})
    60  		if err != nil {
    61  			startErrChan <- err
    62  		}
    63  	}()
    64  
    65  	if os.Getenv("DEVMODE_ENABLED") != "" {
    66  		fmt.Println("starting up in devmode...")
    67  	}
    68  
    69  	var err error
    70  	select {
    71  	case err = <-startErrChan:
    72  		if err != nil {
    73  			fmt.Fprintf(os.Stderr, "Exiting Simple chaincode: %s", err)
    74  			os.Exit(2)
    75  		}
    76  		os.Exit(0)
    77  	case <-sigtermChan:
    78  		handleSigTerm()
    79  	}
    80  }