80 lines
1.5 KiB
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()
|
|
}
|
|
}
|