diff options
author | Steve Manuel <nilslice@gmail.com> | 2017-01-12 12:28:05 -0800 |
---|---|---|
committer | Steve Manuel <nilslice@gmail.com> | 2017-01-12 12:28:05 -0800 |
commit | 4ced69bd3c4c0e2e0c59b2890fe1647875680727 (patch) | |
tree | 9f8d2da9316f0225cebcc556ce54f39f6ed7dc75 /system/db/content.go | |
parent | 254f96227ebe9dcc1a3765b8ebe898dc7fb588d4 (diff) |
move expensive work outside store.Update in Sort
Diffstat (limited to 'system/db/content.go')
-rw-r--r-- | system/db/content.go | 25 |
1 files changed, 18 insertions, 7 deletions
diff --git a/system/db/content.go b/system/db/content.go index 5ddf0a7..cec29fd 100644 --- a/system/db/content.go +++ b/system/db/content.go @@ -432,29 +432,40 @@ func SortContent(namespace string) { // sort posts sort.Sort(posts) + // marshal posts to json + var bb [][]byte + for i := range posts { + j, err := json.Marshal(posts[i]) + if err != nil { + // log error and kill sort so __sorted is not in invalid state + log.Println("Error marshal post to json in SortContent:", err) + return + } + + bb = append(bb, j) + } + // store in <namespace>_sorted bucket, first delete existing err := store.Update(func(tx *bolt.Tx) error { bname := []byte(namespace + "__sorted") err := tx.DeleteBucket(bname) if err != nil || err != bolt.ErrBucketNotFound { + fmt.Println("Error in DeleteBucket") return err } b, err := tx.CreateBucketIfNotExists(bname) if err != nil { + fmt.Println("Error in CreateBucketIfNotExists") return err } // encode to json and store as 'i:post.Time()':post - for i := range posts { - j, err := json.Marshal(posts[i]) - if err != nil { - return err - } - + for i := range bb { cid := fmt.Sprintf("%d:%d", i, posts[i].Time()) - err = b.Put([]byte(cid), j) + err = b.Put([]byte(cid), bb[i]) if err != nil { + fmt.Println("Error in Put") return err } } |