Browse Source

Start better error handling when reading zone data

Ask Bjørn Hansen 13 years ago
parent
commit
e2e02ee21a
1 changed files with 12 additions and 8 deletions
  1. 12 8
      config.go

+ 12 - 8
config.go

@@ -6,7 +6,9 @@ import (
 	"io/ioutil"
 	"io/ioutil"
 	"log"
 	"log"
 	"net"
 	"net"
+	"os"
 	"path"
 	"path"
+	"runtime/debug"
 	"sort"
 	"sort"
 	"strconv"
 	"strconv"
 	"strings"
 	"strings"
@@ -45,11 +47,11 @@ func configReadDir(dirName string, Zones Zones) {
 			configLastRead[fileName] = file.ModTime()
 			configLastRead[fileName] = file.ModTime()
 			zoneName := fileName[0:strings.LastIndex(fileName, ".")]
 			zoneName := fileName[0:strings.LastIndex(fileName, ".")]
 			//log.Println("FILE:", i, file, zoneName)
 			//log.Println("FILE:", i, file, zoneName)
-			config := readZoneFile(zoneName, path.Join(dirName, fileName))
-			if config == nil {
-				log.Println("config is nil")
+			config, err := readZoneFile(zoneName, path.Join(dirName, fileName))
+			if config == nil || err != nil {
+				log.Println("error reading file: ", err)
 			}
 			}
-			if config != nil {
+			if config != nil && err == nil {
 				Zones[zoneName] = config
 				Zones[zoneName] = config
 				dns.HandleFunc(zoneName, setupServerFunc(config))
 				dns.HandleFunc(zoneName, setupServerFunc(config))
 			}
 			}
@@ -59,14 +61,15 @@ func configReadDir(dirName string, Zones Zones) {
 	}
 	}
 }
 }
 
 
-func readZoneFile(zoneName, fileName string) *Zone {
+func readZoneFile(zoneName, fileName string) (*Zone, error) {
 	defer func() {
 	defer func() {
 		if err := recover(); err != nil {
 		if err := recover(); err != nil {
 			log.Printf("reading %s failed: %s", zoneName, err)
 			log.Printf("reading %s failed: %s", zoneName, err)
+			debug.PrintStack()
 		}
 		}
 	}()
 	}()
 
 
-	b, err := ioutil.ReadFile(fileName)
+	fh, err := os.Open(fileName)
 	if err != nil {
 	if err != nil {
 		log.Println("Could not read ", fileName, ": ", err)
 		log.Println("Could not read ", fileName, ": ", err)
 		panic(err)
 		panic(err)
@@ -79,7 +82,8 @@ func readZoneFile(zoneName, fileName string) *Zone {
 
 
 	if err == nil {
 	if err == nil {
 		var objmap map[string]interface{}
 		var objmap map[string]interface{}
-		err := json.Unmarshal(b, &objmap)
+		decoder := json.NewDecoder(fh)
+		err := decoder.Decode(&objmap)
 		if err != nil {
 		if err != nil {
 			panic(err)
 			panic(err)
 		}
 		}
@@ -113,7 +117,7 @@ func readZoneFile(zoneName, fileName string) *Zone {
 
 
 	//log.Println("IP", string(Zone.Regions["0.us"].IPv4[0].ip))
 	//log.Println("IP", string(Zone.Regions["0.us"].IPv4[0].ip))
 
 
-	return Zone
+	return Zone, nil
 }
 }
 
 
 func setupZoneData(data map[string]interface{}, Zone *Zone) {
 func setupZoneData(data map[string]interface{}, Zone *Zone) {