@@ -93,7 +93,7 @@ func (s *singleSourceCacheBolt) close() error {
9393}
9494
9595func (s * singleSourceCacheBolt ) setManifestAndLock (rev Revision , ai ProjectAnalyzerInfo , m Manifest , l Lock ) {
96- err := s .updateBucket ( " rev:" + string ( rev ) , func (b * bolt.Bucket ) error {
96+ err := s .updateRevBucket ( rev , func (b * bolt.Bucket ) error {
9797 pre := "info:" + ai .String () + ":"
9898 if err := cachePrefixDelete (b , pre ); err != nil {
9999 return err
@@ -128,7 +128,7 @@ func (s *singleSourceCacheBolt) setManifestAndLock(rev Revision, ai ProjectAnaly
128128}
129129
130130func (s * singleSourceCacheBolt ) getManifestAndLock (rev Revision , ai ProjectAnalyzerInfo ) (m Manifest , l Lock , ok bool ) {
131- err := s .viewBucket ( " rev:" + string ( rev ) , func (b * bolt.Bucket ) error {
131+ err := s .viewRevBucket ( rev , func (b * bolt.Bucket ) error {
132132 info := cacheFindLatestValid (b , "info:" + ai .String ()+ ":" , s .epoch )
133133 if info == nil {
134134 return nil
@@ -166,7 +166,7 @@ func (s *singleSourceCacheBolt) getManifestAndLock(rev Revision, ai ProjectAnaly
166166}
167167
168168func (s * singleSourceCacheBolt ) setPackageTree (rev Revision , ptree pkgtree.PackageTree ) {
169- err := s .updateBucket ( " rev:" + string ( rev ) , func (b * bolt.Bucket ) error {
169+ err := s .updateRevBucket ( rev , func (b * bolt.Bucket ) error {
170170 if err := cachePrefixDelete (b , "ptree:" ); err != nil {
171171 return err
172172 }
@@ -193,7 +193,7 @@ func (s *singleSourceCacheBolt) setPackageTree(rev Revision, ptree pkgtree.Packa
193193}
194194
195195func (s * singleSourceCacheBolt ) getPackageTree (rev Revision ) (ptree pkgtree.PackageTree , ok bool ) {
196- err := s .viewBucket ( " rev:" + string ( rev ) , func (b * bolt.Bucket ) error {
196+ err := s .viewRevBucket ( rev , func (b * bolt.Bucket ) error {
197197 ptrees := cacheFindLatestValid (b , "ptree:" , s .epoch )
198198 if ptrees == nil {
199199 return nil
@@ -223,7 +223,7 @@ func (s *singleSourceCacheBolt) getPackageTree(rev Revision) (ptree pkgtree.Pack
223223}
224224
225225func (s * singleSourceCacheBolt ) markRevisionExists (rev Revision ) {
226- err := s .updateBucket ( " rev:" + string ( rev ) , func (versions * bolt.Bucket ) error {
226+ err := s .updateRevBucket ( rev , func (versions * bolt.Bucket ) error {
227227 return nil
228228 })
229229 if err != nil {
@@ -243,8 +243,7 @@ func (s *singleSourceCacheBolt) setVersionMap(pvs []PairedVersion) {
243243 }
244244
245245 c := tx .Cursor ()
246- pre := []byte ("rev:" )
247- for k , _ := c .Seek (pre ); bytes .HasPrefix (k , pre ); k , _ = c .Next () {
246+ for k , _ := c .Seek (cacheRev ); bytes .HasPrefix (k , cacheRev ); k , _ = c .Next () {
248247 rb := tx .Bucket (k )
249248 if err := cachePrefixDelete (rb , "versions:" ); err != nil {
250249 return err
@@ -262,7 +261,7 @@ func (s *singleSourceCacheBolt) setVersionMap(pvs []PairedVersion) {
262261 return errors .Wrap (err , "failed to put version->revision" )
263262 }
264263
265- b , err := tx .CreateBucketIfNotExists ([] byte ( "rev:" + rev ))
264+ b , err := tx .CreateBucketIfNotExists (cacheRevisionName ( rev ))
266265 if err != nil {
267266 return errors .Wrapf (err , "failed to create bucket for revision: %s" , rev )
268267 }
@@ -291,7 +290,7 @@ func (s *singleSourceCacheBolt) setVersionMap(pvs []PairedVersion) {
291290}
292291
293292func (s * singleSourceCacheBolt ) getVersionsFor (rev Revision ) (uvs []UnpairedVersion , ok bool ) {
294- err := s .viewBucket ( " rev:" + string ( rev ) , func (b * bolt.Bucket ) error {
293+ err := s .viewRevBucket ( rev , func (b * bolt.Bucket ) error {
295294 versions := cacheFindLatestValid (b , "versions:" , s .epoch )
296295 if versions == nil {
297296 return nil
@@ -385,7 +384,7 @@ func (s *singleSourceCacheBolt) toUnpaired(v Version) (uv UnpairedVersion, ok bo
385384 case PairedVersion :
386385 return t .Unpair (), true
387386 case Revision :
388- err := s .viewBucket ( "rev:" + string ( t ) , func (b * bolt.Bucket ) error {
387+ err := s .viewRevBucket ( t , func (b * bolt.Bucket ) error {
389388 versions := cacheFindLatestValid (b , "versions:" , s .epoch )
390389 if versions == nil {
391390 return nil
@@ -414,21 +413,33 @@ func (s *singleSourceCacheBolt) toUnpaired(v Version) (uv UnpairedVersion, ok bo
414413 }
415414}
416415
417- // viewBucket executes view with the named bucket, if it exists.
418- func (s * singleSourceCacheBolt ) viewBucket (name string , view func (b * bolt.Bucket ) error ) error {
416+ // cache revision bucket prefix.
417+ var cacheRev = []byte ("rev:" )
418+
419+ // cacheRevisionName returns the bucket name for rev.
420+ func cacheRevisionName (rev Revision ) []byte {
421+ name := make ([]byte , len (cacheRev )+ len (rev ))
422+ copy (name , cacheRev )
423+ copy (name [len (cacheRev ):], string (rev ))
424+ return name
425+ }
426+
427+ // viewRevBucket executes view with rev's bucket, if it exists.
428+ func (s * singleSourceCacheBolt ) viewRevBucket (rev Revision , view func (b * bolt.Bucket ) error ) error {
419429 return s .db .View (func (tx * bolt.Tx ) error {
420- b := tx .Bucket ([] byte ( name ))
430+ b := tx .Bucket (cacheRevisionName ( rev ))
421431 if b == nil {
422432 return nil
423433 }
424434 return view (b )
425435 })
426436}
427437
428- // updateBucket executes update with the named bucket, creating it first if necessary.
429- func (s * singleSourceCacheBolt ) updateBucket ( name string , update func (b * bolt.Bucket ) error ) error {
438+ // updateRevBucket executes update with rev's bucket, creating it first if necessary.
439+ func (s * singleSourceCacheBolt ) updateRevBucket ( rev Revision , update func (b * bolt.Bucket ) error ) error {
430440 return s .db .Update (func (tx * bolt.Tx ) error {
431- b , err := tx .CreateBucketIfNotExists ([]byte (name ))
441+ name := cacheRevisionName (rev )
442+ b , err := tx .CreateBucketIfNotExists (name )
432443 if err != nil {
433444 return errors .Wrapf (err , "failed to create bucket: %s" , name )
434445 }
0 commit comments