go_study/fabric-main/integration/chaincode/simple/cmd/main.go

80 lines
1.5 KiB
Go

/*
Copyright IBM Corp. All Rights Reserved.
SPDX-License-Identifier: Apache-2.0
*/
package main
import (
"fmt"
"os"
"os/signal"
"syscall"
"github.com/hyperledger/fabric-chaincode-go/shim"
"github.com/hyperledger/fabric/integration/chaincode/simple"
)
func handleSignals(handlers map[os.Signal]func()) {
var signals []os.Signal
for sig := range handlers {
signals = append(signals, sig)
}
signalChan := make(chan os.Signal, 1)
signal.Notify(signalChan, signals...)
for sig := range signalChan {
fmt.Fprintf(os.Stderr, "Received signal: %d (%s)", sig, sig)
handlers[sig]()
}
}
func handleSigTerm() {
termFile := os.Getenv("ORG1_TERM_FILE")
if termFile == "" {
termFile = os.Getenv("ORG2_TERM_FILE")
}
if termFile == "" {
return
}
err := os.WriteFile(termFile, []byte("term-file"), 0o644)
if err != nil {
fmt.Fprintf(os.Stderr, "failed to write term file to %s: %s", termFile, err)
}
}
func main() {
startErrChan := make(chan error)
sigtermChan := make(chan error)
go handleSignals(map[os.Signal]func(){
syscall.SIGTERM: func() { sigtermChan <- nil },
})
go func() {
err := shim.Start(&simple.SimpleChaincode{})
if err != nil {
startErrChan <- err
}
}()
if os.Getenv("DEVMODE_ENABLED") != "" {
fmt.Println("starting up in devmode...")
}
var err error
select {
case err = <-startErrChan:
if err != nil {
fmt.Fprintf(os.Stderr, "Exiting Simple chaincode: %s", err)
os.Exit(2)
}
os.Exit(0)
case <-sigtermChan:
handleSigTerm()
}
}