Update reflect2 to 1.0.1 (memory utilization fix)

Picking up https://github.com/modern-go/reflect2/pull/2 which lazy
initializes a map of all types which we don't use in k8s, saving
memory & initialization time.
This commit is contained in:
Justin Santa Barbara 2018-09-04 13:13:00 -04:00 committed by Justin Santa Barbara
parent 674401ace1
commit 970e4da4c6
18 changed files with 33 additions and 19 deletions

4
Godeps/Godeps.json generated
View File

@ -2407,8 +2407,8 @@
}, },
{ {
"ImportPath": "github.com/modern-go/reflect2", "ImportPath": "github.com/modern-go/reflect2",
"Comment": "1.0.0-9-g05fbef0", "Comment": "v1.0.1",
"Rev": "05fbef0ca5da472bbf96c9322b84a53edc03c9fd" "Rev": "94122c33edd36123c84d5368cfb2b69df93a0ec8"
}, },
{ {
"ImportPath": "github.com/mohae/deepcopy", "ImportPath": "github.com/mohae/deepcopy",

View File

@ -44,7 +44,7 @@
}, },
{ {
"ImportPath": "github.com/modern-go/reflect2", "ImportPath": "github.com/modern-go/reflect2",
"Rev": "05fbef0ca5da472bbf96c9322b84a53edc03c9fd" "Rev": "94122c33edd36123c84d5368cfb2b69df93a0ec8"
}, },
{ {
"ImportPath": "github.com/pmezard/go-difflib/difflib", "ImportPath": "github.com/pmezard/go-difflib/difflib",

View File

@ -572,7 +572,7 @@
}, },
{ {
"ImportPath": "github.com/modern-go/reflect2", "ImportPath": "github.com/modern-go/reflect2",
"Rev": "05fbef0ca5da472bbf96c9322b84a53edc03c9fd" "Rev": "94122c33edd36123c84d5368cfb2b69df93a0ec8"
}, },
{ {
"ImportPath": "github.com/pborman/uuid", "ImportPath": "github.com/pborman/uuid",

View File

@ -100,7 +100,7 @@
}, },
{ {
"ImportPath": "github.com/modern-go/reflect2", "ImportPath": "github.com/modern-go/reflect2",
"Rev": "05fbef0ca5da472bbf96c9322b84a53edc03c9fd" "Rev": "94122c33edd36123c84d5368cfb2b69df93a0ec8"
}, },
{ {
"ImportPath": "github.com/mxk/go-flowrate/flowrate", "ImportPath": "github.com/mxk/go-flowrate/flowrate",

View File

@ -544,7 +544,7 @@
}, },
{ {
"ImportPath": "github.com/modern-go/reflect2", "ImportPath": "github.com/modern-go/reflect2",
"Rev": "05fbef0ca5da472bbf96c9322b84a53edc03c9fd" "Rev": "94122c33edd36123c84d5368cfb2b69df93a0ec8"
}, },
{ {
"ImportPath": "github.com/pborman/uuid", "ImportPath": "github.com/pborman/uuid",

View File

@ -96,7 +96,7 @@
}, },
{ {
"ImportPath": "github.com/modern-go/reflect2", "ImportPath": "github.com/modern-go/reflect2",
"Rev": "05fbef0ca5da472bbf96c9322b84a53edc03c9fd" "Rev": "94122c33edd36123c84d5368cfb2b69df93a0ec8"
}, },
{ {
"ImportPath": "github.com/peterbourgon/diskv", "ImportPath": "github.com/peterbourgon/diskv",

View File

@ -168,7 +168,7 @@
}, },
{ {
"ImportPath": "github.com/modern-go/reflect2", "ImportPath": "github.com/modern-go/reflect2",
"Rev": "05fbef0ca5da472bbf96c9322b84a53edc03c9fd" "Rev": "94122c33edd36123c84d5368cfb2b69df93a0ec8"
}, },
{ {
"ImportPath": "github.com/peterbourgon/diskv", "ImportPath": "github.com/peterbourgon/diskv",

View File

@ -92,7 +92,7 @@
}, },
{ {
"ImportPath": "github.com/modern-go/reflect2", "ImportPath": "github.com/modern-go/reflect2",
"Rev": "05fbef0ca5da472bbf96c9322b84a53edc03c9fd" "Rev": "94122c33edd36123c84d5368cfb2b69df93a0ec8"
}, },
{ {
"ImportPath": "github.com/peterbourgon/diskv", "ImportPath": "github.com/peterbourgon/diskv",

View File

@ -260,7 +260,7 @@
}, },
{ {
"ImportPath": "github.com/modern-go/reflect2", "ImportPath": "github.com/modern-go/reflect2",
"Rev": "05fbef0ca5da472bbf96c9322b84a53edc03c9fd" "Rev": "94122c33edd36123c84d5368cfb2b69df93a0ec8"
}, },
{ {
"ImportPath": "github.com/mxk/go-flowrate/flowrate", "ImportPath": "github.com/mxk/go-flowrate/flowrate",

View File

@ -84,7 +84,7 @@
}, },
{ {
"ImportPath": "github.com/modern-go/reflect2", "ImportPath": "github.com/modern-go/reflect2",
"Rev": "05fbef0ca5da472bbf96c9322b84a53edc03c9fd" "Rev": "94122c33edd36123c84d5368cfb2b69df93a0ec8"
}, },
{ {
"ImportPath": "github.com/peterbourgon/diskv", "ImportPath": "github.com/peterbourgon/diskv",

View File

@ -252,7 +252,7 @@
}, },
{ {
"ImportPath": "github.com/modern-go/reflect2", "ImportPath": "github.com/modern-go/reflect2",
"Rev": "05fbef0ca5da472bbf96c9322b84a53edc03c9fd" "Rev": "94122c33edd36123c84d5368cfb2b69df93a0ec8"
}, },
{ {
"ImportPath": "github.com/pborman/uuid", "ImportPath": "github.com/pborman/uuid",

View File

@ -92,7 +92,7 @@
}, },
{ {
"ImportPath": "github.com/modern-go/reflect2", "ImportPath": "github.com/modern-go/reflect2",
"Rev": "05fbef0ca5da472bbf96c9322b84a53edc03c9fd" "Rev": "94122c33edd36123c84d5368cfb2b69df93a0ec8"
}, },
{ {
"ImportPath": "github.com/peterbourgon/diskv", "ImportPath": "github.com/peterbourgon/diskv",

View File

@ -100,7 +100,7 @@
}, },
{ {
"ImportPath": "github.com/modern-go/reflect2", "ImportPath": "github.com/modern-go/reflect2",
"Rev": "05fbef0ca5da472bbf96c9322b84a53edc03c9fd" "Rev": "94122c33edd36123c84d5368cfb2b69df93a0ec8"
}, },
{ {
"ImportPath": "github.com/peterbourgon/diskv", "ImportPath": "github.com/peterbourgon/diskv",

View File

@ -6,6 +6,7 @@ go:
before_install: before_install:
- go get -t -v ./... - go get -t -v ./...
- go get -t -v github.com/modern-go/reflect2-tests/...
script: script:
- ./test.sh - ./test.sh

View File

@ -24,7 +24,7 @@
# go-tests = true # go-tests = true
# unused-packages = true # unused-packages = true
ignored = ["github.com/modern-go/test","github.com/modern-go/test/must","github.com/modern-go/test/should"] ignored = []
[[constraint]] [[constraint]]
name = "github.com/modern-go/concurrent" name = "github.com/modern-go/concurrent"

View File

@ -150,6 +150,9 @@ func (cfg *frozenConfig) TypeOf(obj interface{}) Type {
} }
func (cfg *frozenConfig) Type2(type1 reflect.Type) Type { func (cfg *frozenConfig) Type2(type1 reflect.Type) Type {
if type1 == nil {
return nil
}
cacheKey := uintptr(unpackEFace(type1).data) cacheKey := uintptr(unpackEFace(type1).data)
typeObj, found := cfg.cache.Load(cacheKey) typeObj, found := cfg.cache.Load(cacheKey)
if found { if found {

View File

@ -3,7 +3,7 @@
set -e set -e
echo "" > coverage.txt echo "" > coverage.txt
for d in $(go list ./... | grep -v vendor); do for d in $(go list github.com/modern-go/reflect2-tests/... | grep -v vendor); do
go test -coverprofile=profile.out -coverpkg=github.com/modern-go/reflect2 $d go test -coverprofile=profile.out -coverpkg=github.com/modern-go/reflect2 $d
if [ -f profile.out ]; then if [ -f profile.out ]; then
cat profile.out >> coverage.txt cat profile.out >> coverage.txt

View File

@ -4,6 +4,7 @@ import (
"reflect" "reflect"
"runtime" "runtime"
"strings" "strings"
"sync"
"unsafe" "unsafe"
) )
@ -15,10 +16,17 @@ func typelinks1() [][]unsafe.Pointer
//go:linkname typelinks2 reflect.typelinks //go:linkname typelinks2 reflect.typelinks
func typelinks2() (sections []unsafe.Pointer, offset [][]int32) func typelinks2() (sections []unsafe.Pointer, offset [][]int32)
var types = map[string]reflect.Type{} // initOnce guards initialization of types and packages
var packages = map[string]map[string]reflect.Type{} var initOnce sync.Once
var types map[string]reflect.Type
var packages map[string]map[string]reflect.Type
// discoverTypes initializes types and packages
func discoverTypes() {
types = make(map[string]reflect.Type)
packages = make(map[string]map[string]reflect.Type)
func init() {
ver := runtime.Version() ver := runtime.Version()
if ver == "go1.5" || strings.HasPrefix(ver, "go1.5.") { if ver == "go1.5" || strings.HasPrefix(ver, "go1.5.") {
loadGo15Types() loadGo15Types()
@ -90,11 +98,13 @@ type emptyInterface struct {
// TypeByName return the type by its name, just like Class.forName in java // TypeByName return the type by its name, just like Class.forName in java
func TypeByName(typeName string) Type { func TypeByName(typeName string) Type {
initOnce.Do(discoverTypes)
return Type2(types[typeName]) return Type2(types[typeName])
} }
// TypeByPackageName return the type by its package and name // TypeByPackageName return the type by its package and name
func TypeByPackageName(pkgPath string, name string) Type { func TypeByPackageName(pkgPath string, name string) Type {
initOnce.Do(discoverTypes)
pkgTypes := packages[pkgPath] pkgTypes := packages[pkgPath]
if pkgTypes == nil { if pkgTypes == nil {
return nil return nil