+func (v *S3Volume) tick(counters ...*uint64) {
+ for _, counter := range counters {
+ atomic.AddUint64(counter, 1)
+ }
+}
+
+func (v *S3Volume) tickErr(err error) error {
+ if err == nil {
+ return nil
+ }
+ atomic.AddUint64(&v.bucketStats.Errors, 1)
+ if err, ok := err.(*s3.Error); ok {
+ errStr := fmt.Sprintf("%d %s", err.StatusCode, err.Code)
+ v.bucketStats.lock.Lock()
+ if v.bucketStats.ErrorCodes == nil {
+ v.bucketStats.ErrorCodes = make(map[string]uint64)
+ }
+ v.bucketStats.ErrorCodes[errStr]++
+ v.bucketStats.lock.Unlock()
+ }
+ return err
+}
+
+func (v *S3Volume) tickInBytes(n uint64) {
+ atomic.AddUint64(&v.bucketStats.InBytes, n)
+}
+
+func (v *S3Volume) tickOutBytes(n uint64) {
+ atomic.AddUint64(&v.bucketStats.OutBytes, n)
+}
+