mirror of https://github.com/goharbor/harbor.git
Sending signals by closing the channel (#17917)
Signed-off-by: Iceber Gu <wei.cai-nat@daocloud.io>
This commit is contained in:
parent
79dbebd48d
commit
a2507dc3fc
|
@ -48,20 +48,23 @@ func main() {
|
||||||
log.Fatalf("Failed to connect to Database, error: %v\n", err)
|
log.Fatalf("Failed to connect to Database, error: %v\n", err)
|
||||||
}
|
}
|
||||||
defer db.Close()
|
defer db.Close()
|
||||||
c := make(chan struct{}, 1)
|
|
||||||
|
c := make(chan struct{})
|
||||||
go func() {
|
go func() {
|
||||||
|
defer close(c)
|
||||||
|
|
||||||
err := db.Ping()
|
err := db.Ping()
|
||||||
for ; err != nil; err = db.Ping() {
|
for ; err != nil; err = db.Ping() {
|
||||||
log.Println("Failed to Ping DB, sleep for 1 second.")
|
log.Println("Failed to Ping DB, sleep for 1 second.")
|
||||||
time.Sleep(1 * time.Second)
|
time.Sleep(1 * time.Second)
|
||||||
}
|
}
|
||||||
c <- struct{}{}
|
|
||||||
}()
|
}()
|
||||||
select {
|
select {
|
||||||
case <-c:
|
case <-c:
|
||||||
case <-time.After(30 * time.Second):
|
case <-time.After(30 * time.Second):
|
||||||
log.Fatal("Failed to connect DB after 30 seconds, time out. \n")
|
log.Fatal("Failed to connect DB after 30 seconds, time out. \n")
|
||||||
}
|
}
|
||||||
|
|
||||||
row := db.QueryRow(pgSQLCheckColStmt)
|
row := db.QueryRow(pgSQLCheckColStmt)
|
||||||
var tblCount, colCount int
|
var tblCount, colCount int
|
||||||
if err := row.Scan(&tblCount, &colCount); err != nil {
|
if err := row.Scan(&tblCount, &colCount); err != nil {
|
||||||
|
|
|
@ -104,14 +104,14 @@ func gracefulShutdown(closing, done chan struct{}, shutdowns ...func()) {
|
||||||
signal.Notify(signals, syscall.SIGINT, syscall.SIGTERM, syscall.SIGQUIT)
|
signal.Notify(signals, syscall.SIGINT, syscall.SIGTERM, syscall.SIGQUIT)
|
||||||
log.Infof("capture system signal %s, to close \"closing\" channel", <-signals)
|
log.Infof("capture system signal %s, to close \"closing\" channel", <-signals)
|
||||||
close(closing)
|
close(closing)
|
||||||
shutdownChan := make(chan struct{}, 1)
|
shutdownChan := make(chan struct{})
|
||||||
go func() {
|
go func() {
|
||||||
|
defer close(shutdownChan)
|
||||||
for _, s := range shutdowns {
|
for _, s := range shutdowns {
|
||||||
s()
|
s()
|
||||||
}
|
}
|
||||||
<-done
|
<-done
|
||||||
log.Infof("Goroutines exited normally")
|
log.Infof("Goroutines exited normally")
|
||||||
shutdownChan <- struct{}{}
|
|
||||||
}()
|
}()
|
||||||
select {
|
select {
|
||||||
case <-shutdownChan:
|
case <-shutdownChan:
|
||||||
|
|
Loading…
Reference in New Issue