1
0
Эх сурвалжийг харах

Compacting error-handling code (just visually)

Gwyneth Llewelyn 2 жил өмнө
parent
commit
34a66dab2c
3 өөрчлөгдсөн 134 нэмэгдсэн , 127 устгасан
  1. 28 8
      go.mod
  2. 1 3
      go.sum
  3. 105 116
      gosl.go

+ 28 - 8
go.mod

@@ -1,29 +1,49 @@
 module git.gwynethllewelyn.net/GwynethLlewelyn/gosl-basics
 
-go 1.15
+go 1.17
 
 require (
 	github.com/dgraph-io/badger v1.6.2
 	github.com/dgraph-io/badger/v3 v3.2011.1
-	github.com/fsnotify/fsnotify v1.4.9
+	github.com/op/go-logging v0.0.0-20160315200505-970db520ece7
+	github.com/spf13/pflag v1.0.5
+	github.com/spf13/viper v1.7.1
+	github.com/syndtr/goleveldb v1.0.0
+	github.com/tidwall/buntdb v1.1.8
+	gopkg.in/natefinch/lumberjack.v2 v2.0.0
+)
+
+require (
+	github.com/DataDog/zstd v1.4.1 // indirect
+	github.com/cespare/xxhash v1.1.0 // indirect
+	github.com/dgraph-io/ristretto v0.0.4-0.20210122082011-bb5d392ed82d // indirect
+	github.com/dustin/go-humanize v1.0.0 // indirect
+	github.com/fsnotify/fsnotify v1.4.7 // indirect
+	github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6 // indirect
 	github.com/golang/protobuf v1.4.3 // indirect
 	github.com/golang/snappy v0.0.2 // indirect
+	github.com/google/flatbuffers v1.12.0 // indirect
+	github.com/hashicorp/hcl v1.0.0 // indirect
 	github.com/magiconair/properties v1.8.4 // indirect
 	github.com/mitchellh/mapstructure v1.4.1 // indirect
-	github.com/op/go-logging v0.0.0-20160315200505-970db520ece7
 	github.com/pelletier/go-toml v1.8.1 // indirect
+	github.com/pkg/errors v0.9.1 // indirect
 	github.com/spf13/afero v1.5.1 // indirect
 	github.com/spf13/cast v1.3.1 // indirect
 	github.com/spf13/jwalterweatherman v1.1.0 // indirect
-	github.com/spf13/pflag v1.0.5
-	github.com/spf13/viper v1.7.1
-	github.com/syndtr/goleveldb v1.0.0
-	github.com/tidwall/buntdb v1.1.8
+	github.com/subosito/gotenv v1.2.0 // indirect
+	github.com/tidwall/btree v0.3.0 // indirect
+	github.com/tidwall/gjson v1.6.7 // indirect
+	github.com/tidwall/grect v0.1.0 // indirect
+	github.com/tidwall/match v1.0.3 // indirect
+	github.com/tidwall/pretty v1.0.2 // indirect
+	github.com/tidwall/rtree v0.1.0 // indirect
+	github.com/tidwall/tinyqueue v0.1.1 // indirect
+	go.opencensus.io v0.22.5 // indirect
 	golang.org/x/net v0.0.0-20210119194325-5f4716e94777 // indirect
 	golang.org/x/sys v0.0.0-20210124154548-22da62e12c0c // indirect
 	golang.org/x/text v0.3.5 // indirect
 	google.golang.org/protobuf v1.25.0 // indirect
 	gopkg.in/ini.v1 v1.62.0 // indirect
-	gopkg.in/natefinch/lumberjack.v2 v2.0.0
 	gopkg.in/yaml.v2 v2.4.0 // indirect
 )

+ 1 - 3
go.sum

@@ -63,9 +63,8 @@ github.com/dustin/go-humanize v1.0.0/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25Kn
 github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
 github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c=
 github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4=
+github.com/fsnotify/fsnotify v1.4.7 h1:IXs+QLmnXW2CcXuY+8Mzv/fWEsPGWxqefPtCP5CnV9I=
 github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo=
-github.com/fsnotify/fsnotify v1.4.9 h1:hsms1Qyu0jgnwNXIxa+/V/PDsU6CfLf6CNO8H7IWoS4=
-github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ=
 github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04=
 github.com/go-delve/delve v1.5.0/go.mod h1:c6b3a1Gry6x8a4LGCe/CWzrocrfaHvkUxCj3k4bvSUQ=
 github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU=
@@ -365,7 +364,6 @@ golang.org/x/sys v0.0.0-20190507160741-ecd444e8653b/go.mod h1:h1NjWce9XRLGQEsW7w
 golang.org/x/sys v0.0.0-20190606165138-5da285871e9c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 golang.org/x/sys v0.0.0-20190624142023-c5567b49c5d0/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 golang.org/x/sys v0.0.0-20190626221950-04f50cda93cb/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20191005200804-aed5e4c7ecf9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 golang.org/x/sys v0.0.0-20210124154548-22da62e12c0c h1:VwygUrnw9jn88c4u8GD3rZQbqrP/tgas88tPUbBxQrk=

+ 105 - 116
gosl.go

@@ -410,8 +410,7 @@ func searchKVname(avatarName string) (UUID string, grid string) {
 					log.Errorf("error %q while getting data from %v\n", err, item)
 					return err
 		    	}
-		    	err = json.Unmarshal(data, &val)
-				if err != nil {
+		    	if err = json.Unmarshal(data, &val); err != nil {
 					log.Errorf("error while unparsing UUID for name: %q (%v)\n", avatarName, err)
 					return err
 		    	}
@@ -439,8 +438,7 @@ func searchKVname(avatarName string) (UUID string, grid string) {
 			if err != nil {
 				log.Errorf("error while getting UUID for name: %q (%v)\n", avatarName, err)
 	    	} else {
-		    	err = json.Unmarshal(data, &val)
-				if err != nil {
+		    	if err = json.Unmarshal(data, &val); err != nil {
 					log.Errorf("error while unparsing UUID for name: %q (%v)\n", avatarName, err)
 	    		}
 	    	}
@@ -483,8 +481,7 @@ func searchKVUUID(avatarKey string) (name string, grid string) {
 					log.Errorf("error %q while getting data from %v\n", err, item)
 					return err
 		    	}
-		    	err = json.Unmarshal(data, &val)
-				if err != nil {
+		    	if err = json.Unmarshal(data, &val); err != nil {
 					log.Errorf("error %q while unparsing UUID for data: %v\n", err, data)
 					return err
 		    	}
@@ -503,8 +500,7 @@ func searchKVUUID(avatarKey string) (name string, grid string) {
 		checkErrPanic(err)
 		err = db.View(func(tx *buntdb.Tx) error {
 			err := tx.Ascend("", func(key, value string) bool {
-		    	err = json.Unmarshal([]byte(value), &val)
-				if err != nil {
+		    	if err = json.Unmarshal([]byte(value), &val); err != nil {
 					log.Errorf("error %q while unparsing UUID for value: %v\n", err, value)
 		    	}
 				checks++	//Just to see how many checks we made, for statistical purposes
@@ -526,8 +522,7 @@ func searchKVUUID(avatarKey string) (name string, grid string) {
 			// only valid until the next call to Next.
 			key := iter.Key()
 			value := iter.Value()
-	    	err = json.Unmarshal(value, &val)
-			if err != nil {
+	    	if err = json.Unmarshal(value, &val); err != nil {
 				log.Errorf("error %q while unparsing UUID for data: %v\n", err, value)
 				continue // a bit insane, but at least we will skip a few broken records
 	    	}
@@ -561,127 +556,121 @@ func importDatabase(filename string) {
 	limit := 0	// outside of for loop so that we can count how many entries we had in total
 	time_start := time.Now() // we want to get an idea on how long this takes
 
-	if *goslConfig.database == "badger" {
-		// prepare connection to KV database
-		kv, err := badger.Open(Opt)
-		checkErrPanic(err) // should probably panic
-		defer kv.Close()
+	switch *goslConfig.database {
+		case "badger":
+			// prepare connection to KV database
+			kv, err := badger.Open(Opt)
+			checkErrPanic(err) // should probably panic
+			defer kv.Close()
 
-		txn := kv.NewTransaction(true) // start new transaction; we will commit only every BATCH_BLOCK entries
-		defer txn.Discard()
-		for ;;limit++ {
-			record, err := cr.Read()
-			if err == io.EOF {
-				break
-			} else if err != nil {
-				log.Fatal(err)
-			}
-			jsonNewEntry, err := json.Marshal(avatarUUID{ record[0], "Production" }) // W-Hat keys come all from the main LL grid, known as 'Production'
-			if err != nil {
-				log.Warning(err)
-			} else {
-				err = txn.Set([]byte(record[1]), jsonNewEntry)
-				if err != nil {
-				    log.Fatal(err)
+			txn := kv.NewTransaction(true) // start new transaction; we will commit only every BATCH_BLOCK entries
+			defer txn.Discard()
+			for ;;limit++ {
+				record, err := cr.Read()
+				if err == io.EOF {
+					break
+				} else if err != nil {
+					log.Fatal(err)
 				}
-			}
-			if limit % goslConfig.BATCH_BLOCK == 0 && limit != 0 { // we do not run on the first time, and then only every BATCH_BLOCK times
-				log.Info("processing:", limit)
-				err = txn.Commit()
+				jsonNewEntry, err := json.Marshal(avatarUUID{ record[0], "Production" }) // W-Hat keys come all from the main LL grid, known as 'Production'
 				if err != nil {
-				    log.Fatal(err)
+					log.Warning(err)
+				} else {
+					if err = txn.Set([]byte(record[1]), jsonNewEntry); err != nil {
+					    log.Fatal(err)
+					}
+				}
+				if limit % goslConfig.BATCH_BLOCK == 0 && limit != 0 { // we do not run on the first time, and then only every BATCH_BLOCK times
+					log.Info("processing:", limit)
+					if err = txn.Commit(); err != nil {
+					    log.Fatal(err)
+					}
+					runtime.GC()
+					txn = kv.NewTransaction(true) // start a new transaction
+					defer txn.Discard()
 				}
-				runtime.GC()
-				txn = kv.NewTransaction(true) // start a new transaction
-				defer txn.Discard()
 			}
-		}
-		// commit last batch
-		err = txn.Commit()
-		if err != nil {
-		    log.Fatal(err)
-		}
-	} else if *goslConfig.database == "buntdb" {
-		db, err := buntdb.Open(goslConfig.dbNamePath)
-		checkErrPanic(err)
-		defer db.Close()
+			// commit last batch
+			if err = txn.Commit(); err != nil {
+			    log.Fatal(err)
+			}
+		case "buntdb":
+			db, err := buntdb.Open(goslConfig.dbNamePath)
+			checkErrPanic(err)
+			defer db.Close()
 
-		txn, err := db.Begin(true)
-		checkErrPanic(err)
-		//defer txn.Commit()
+			txn, err := db.Begin(true)
+			checkErrPanic(err)
+			//defer txn.Commit()
 
-		// very similar to Badger code...
-		for ;;limit++ {
-			record, err := cr.Read()
-			if err == io.EOF {
-				break
-			} else if err != nil {
-				log.Fatal(err)
-			}
-			jsonNewEntry, err := json.Marshal(avatarUUID{ record[0], "Production" })
-			if err != nil {
-				log.Warning(err)
-			} else {
-				_, _, err = txn.Set(record[1], string(jsonNewEntry), nil)
-				if err != nil {
-				    log.Fatal(err)
+			// very similar to Badger code...
+			for ;;limit++ {
+				record, err := cr.Read()
+				if err == io.EOF {
+					break
+				} else if err != nil {
+					log.Fatal(err)
 				}
-			}
-			if limit % goslConfig.BATCH_BLOCK == 0 && limit != 0 { // we do not run on the first time, and then only every BATCH_BLOCK times
-				log.Info("processing:", limit)
-				err = txn.Commit()
+				jsonNewEntry, err := json.Marshal(avatarUUID{ record[0], "Production" })
 				if err != nil {
-				    log.Fatal(err)
+					log.Warning(err)
+				} else {
+					_, _, err = txn.Set(record[1], string(jsonNewEntry), nil)
+					if err != nil {
+					    log.Fatal(err)
+					}
+				}
+				if limit % goslConfig.BATCH_BLOCK == 0 && limit != 0 { // we do not run on the first time, and then only every BATCH_BLOCK times
+					log.Info("processing:", limit)
+					if err = txn.Commit(); err != nil {
+					    log.Fatal(err)
+					}
+					runtime.GC()
+					txn, err = db.Begin(true)  // start a new transaction
+					checkErrPanic(err)
+					//defer txn.Commit()
 				}
-				runtime.GC()
-				txn, err = db.Begin(true)  // start a new transaction
-				checkErrPanic(err)
-				//defer txn.Commit()
-			}
-		}
-		// commit last batch
-		err = txn.Commit()
-		if err != nil {
-		    log.Fatal(err)
-		}
-		db.Shrink()
-	} else if *goslConfig.database == "leveldb" {
-		db, err := leveldb.OpenFile(goslConfig.dbNamePath, nil)
-		checkErrPanic(err)
-		defer db.Close()
-		batch := new(leveldb.Batch)
-
-		for ;;limit++ {
-			record, err := cr.Read()
-			if err == io.EOF {
-				break
-			} else if err != nil {
-				log.Fatal(err)
 			}
-			jsonNewEntry, err := json.Marshal(avatarUUID{ record[0], "Production" })
-			if err != nil {
-				log.Warning(err)
-			} else {
-				batch.Put([]byte(record[1]), jsonNewEntry)
+			// commit last batch
+			if err = txn.Commit(); err != nil {
+			    log.Fatal(err)
 			}
-			if limit % goslConfig.BATCH_BLOCK == 0 && limit != 0 {
-				log.Info("processing:", limit)
-				err = db.Write(batch, nil)
+			db.Shrink()
+		case "leveldb":
+			db, err := leveldb.OpenFile(goslConfig.dbNamePath, nil)
+			checkErrPanic(err)
+			defer db.Close()
+			batch := new(leveldb.Batch)
+
+			for ;;limit++ {
+				record, err := cr.Read()
+				if err == io.EOF {
+					break
+				} else if err != nil {
+					log.Fatal(err)
+				}
+				jsonNewEntry, err := json.Marshal(avatarUUID{ record[0], "Production" })
 				if err != nil {
-				    log.Fatal(err)
+					log.Warning(err)
+				} else {
+					batch.Put([]byte(record[1]), jsonNewEntry)
+				}
+				if limit % goslConfig.BATCH_BLOCK == 0 && limit != 0 {
+					log.Info("processing:", limit)
+					if err = db.Write(batch, nil); err != nil {
+					    log.Fatal(err)
+					}
+					batch.Reset()	// unlike the others, we don't need to create a new batch every time
+					runtime.GC()	// it never hurts...
 				}
-				batch.Reset()	// unlike the others, we don't need to create a new batch every time
-				runtime.GC()	// it never hurts...
 			}
-		}
-		// commit last batch
-		err = db.Write(batch, nil)
-		if err != nil {
-		    log.Fatal(err)
-		}
-		batch.Reset()	// reset it and let the garbage collector run
-		runtime.GC()
-		db.CompactRange(util.Range{Start: nil, Limit: nil})
+			// commit last batch
+			if err = db.Write(batch, nil); err != nil {
+			    log.Fatal(err)
+			}
+			batch.Reset()	// reset it and let the garbage collector run
+			runtime.GC()
+			db.CompactRange(util.Range{Start: nil, Limit: nil})
 	}
 	log.Info("total read", limit, "records (or thereabouts) in", time.Since(time_start))
 }