Optimize package encoding/decoding a bit by reusing codec handle.

This commit is contained in:
Andrey Smirnov
2014-07-25 16:46:52 +04:00
parent 94114f2c3d
commit 8015966663
+9 -7
View File
@@ -12,12 +12,14 @@ import (
type PackageCollection struct { type PackageCollection struct {
db database.Storage db database.Storage
encodeBuffer bytes.Buffer encodeBuffer bytes.Buffer
codecHandle *codec.MsgpackHandle
} }
// NewPackageCollection creates new PackageCollection and binds it to database // NewPackageCollection creates new PackageCollection and binds it to database
func NewPackageCollection(db database.Storage) *PackageCollection { func NewPackageCollection(db database.Storage) *PackageCollection {
return &PackageCollection{ return &PackageCollection{
db: db, db: db,
codecHandle: &codec.MsgpackHandle{},
} }
} }
@@ -53,7 +55,7 @@ func (collection *PackageCollection) ByKey(key []byte) (*Package, error) {
if len(encoded) > 2 && (encoded[0] != 0xc1 || encoded[1] != 0x1) { if len(encoded) > 2 && (encoded[0] != 0xc1 || encoded[1] != 0x1) {
oldp := &oldPackage{} oldp := &oldPackage{}
decoder := codec.NewDecoderBytes(encoded, &codec.MsgpackHandle{}) decoder := codec.NewDecoderBytes(encoded, collection.codecHandle)
err = decoder.Decode(oldp) err = decoder.Decode(oldp)
if err != nil { if err != nil {
return nil, err return nil, err
@@ -88,7 +90,7 @@ func (collection *PackageCollection) ByKey(key []byte) (*Package, error) {
return nil, err return nil, err
} }
} else { } else {
decoder := codec.NewDecoderBytes(encoded[2:], &codec.MsgpackHandle{}) decoder := codec.NewDecoderBytes(encoded[2:], collection.codecHandle)
err = decoder.Decode(p) err = decoder.Decode(p)
if err != nil { if err != nil {
return nil, err return nil, err
@@ -109,7 +111,7 @@ func (collection *PackageCollection) loadExtra(p *Package) *Stanza {
stanza := &Stanza{} stanza := &Stanza{}
decoder := codec.NewDecoderBytes(encoded, &codec.MsgpackHandle{}) decoder := codec.NewDecoderBytes(encoded, collection.codecHandle)
err = decoder.Decode(stanza) err = decoder.Decode(stanza)
if err != nil { if err != nil {
panic("unable to decode extra") panic("unable to decode extra")
@@ -127,7 +129,7 @@ func (collection *PackageCollection) loadDependencies(p *Package) *PackageDepend
deps := &PackageDependencies{} deps := &PackageDependencies{}
decoder := codec.NewDecoderBytes(encoded, &codec.MsgpackHandle{}) decoder := codec.NewDecoderBytes(encoded, collection.codecHandle)
err = decoder.Decode(deps) err = decoder.Decode(deps)
if err != nil { if err != nil {
panic("unable to decode deps") panic("unable to decode deps")
@@ -145,7 +147,7 @@ func (collection *PackageCollection) loadFiles(p *Package) *PackageFiles {
files := &PackageFiles{} files := &PackageFiles{}
decoder := codec.NewDecoderBytes(encoded, &codec.MsgpackHandle{}) decoder := codec.NewDecoderBytes(encoded, collection.codecHandle)
err = decoder.Decode(files) err = decoder.Decode(files)
if err != nil { if err != nil {
panic("unable to decode files") panic("unable to decode files")
@@ -156,7 +158,7 @@ func (collection *PackageCollection) loadFiles(p *Package) *PackageFiles {
// Update adds or updates information about package in DB checking for conficts first // Update adds or updates information about package in DB checking for conficts first
func (collection *PackageCollection) Update(p *Package) error { func (collection *PackageCollection) Update(p *Package) error {
encoder := codec.NewEncoder(&collection.encodeBuffer, &codec.MsgpackHandle{}) encoder := codec.NewEncoder(&collection.encodeBuffer, collection.codecHandle)
collection.encodeBuffer.Reset() collection.encodeBuffer.Reset()
collection.encodeBuffer.WriteByte(0xc1) collection.encodeBuffer.WriteByte(0xc1)