HDFS-WriterApp-Fixed all the code review comments
[demo.git] / vnfs / DAaaS / microservices / GoApps / src / go-hdfs-writer / cmd / hdfs-writer / main.go
index a79a3e0..4f3cfcb 100644 (file)
@@ -6,9 +6,9 @@ import (
        "net/http"
        "os"
        "os/signal"
-       "time"
 
        handler "hdfs-writer/pkg/handler"
+       pipeline "hdfs-writer/pkg/pipeline"
        utils "hdfs-writer/pkg/utils"
 )
 
@@ -22,23 +22,24 @@ func main() {
                Addr:    ":9393",
        }
 
-       connectionsClose := make(chan struct{})
+       connectionsClose := make(chan bool)
        go func() {
                c := make(chan os.Signal, 1)
                signal.Notify(c, os.Interrupt)
                <-c // function literal waiting to receive Interrupt signal
                fmt.Printf(":::Got the kill signal:::")
                slogger.Info(":::Got the kill signal:::")
-               for eachWriter, eachChannel := range handler.ChannelMap {
+               for eachWriter, eachChannel := range pipeline.ChannelMap {
+                       slogger.Info("Begin:: Closing writer goroutines::")
                        slogger.Infof("Closing writer goroutine :: %s", eachWriter)
-                       slogger.Infof("eachChannel:: %v", eachChannel)
-                       close(eachChannel)
-                       // This wait time ensures that the each of the channel is killed before
-                       // main routine finishes.
-                       time.Sleep(time.Second * 5)
+                       delete(pipeline.ChannelMap, eachWriter)
+                       eachChannel <- true
                }
-               //once all goroutines are signalled, send close to main thread
+
                httpServer.Shutdown(context.Background())
+               /*once all goroutines are signalled and httpServer is shutdown,
+               send close to main thread */
+               connectionsClose <- true
                close(connectionsClose)
        }()
 
@@ -47,5 +48,6 @@ func main() {
        if err != nil && err != http.ErrServerClosed {
                slogger.Fatal(err)
        }
+       pipeline.Wg.Wait()
        <-connectionsClose //main thread waiting to receive close signal
 }