mirror of
https://github.com/rclone/rclone.git
synced 2025-12-06 00:03:32 +00:00
accounting: add AccountReadN for use in cluster
This commit is contained in:
@@ -82,7 +82,7 @@ type accountValues struct {
|
|||||||
max int64 // if >=0 the max number of bytes to transfer
|
max int64 // if >=0 the max number of bytes to transfer
|
||||||
start time.Time // Start time of first read
|
start time.Time // Start time of first read
|
||||||
lpTime time.Time // Time of last average measurement
|
lpTime time.Time // Time of last average measurement
|
||||||
lpBytes int // Number of bytes read since last measurement
|
lpBytes int64 // Number of bytes read since last measurement
|
||||||
avg float64 // Moving average of last few measurements in Byte/s
|
avg float64 // Moving average of last few measurements in Byte/s
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -344,15 +344,20 @@ func (acc *Account) limitPerFileBandwidth(n int) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Account the read and limit bandwidth
|
// Account the read
|
||||||
func (acc *Account) accountRead(n int) {
|
func (acc *Account) accountReadN(n int64) {
|
||||||
// Update Stats
|
// Update Stats
|
||||||
acc.values.mu.Lock()
|
acc.values.mu.Lock()
|
||||||
acc.values.lpBytes += n
|
acc.values.lpBytes += n
|
||||||
acc.values.bytes += int64(n)
|
acc.values.bytes += n
|
||||||
acc.values.mu.Unlock()
|
acc.values.mu.Unlock()
|
||||||
|
|
||||||
acc.stats.Bytes(int64(n))
|
acc.stats.Bytes(n)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Account the read and limit bandwidth
|
||||||
|
func (acc *Account) accountRead(n int) {
|
||||||
|
acc.accountReadN(int64(n))
|
||||||
|
|
||||||
TokenBucket.LimitBandwidth(TokenBucketSlotAccounting, n)
|
TokenBucket.LimitBandwidth(TokenBucketSlotAccounting, n)
|
||||||
acc.limitPerFileBandwidth(n)
|
acc.limitPerFileBandwidth(n)
|
||||||
@@ -460,6 +465,15 @@ func (acc *Account) AccountRead(n int) (err error) {
|
|||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// AccountReadN account having read n bytes
|
||||||
|
//
|
||||||
|
// Does not obey any transfer limits, bandwidth limits, etc.
|
||||||
|
func (acc *Account) AccountReadN(n int64) {
|
||||||
|
acc.mu.Lock()
|
||||||
|
defer acc.mu.Unlock()
|
||||||
|
acc.accountReadN(n)
|
||||||
|
}
|
||||||
|
|
||||||
// Close the object
|
// Close the object
|
||||||
func (acc *Account) Close() error {
|
func (acc *Account) Close() error {
|
||||||
acc.mu.Lock()
|
acc.mu.Lock()
|
||||||
|
|||||||
@@ -100,7 +100,7 @@ func TestAccountRead(t *testing.T) {
|
|||||||
|
|
||||||
assert.True(t, acc.values.start.IsZero())
|
assert.True(t, acc.values.start.IsZero())
|
||||||
acc.values.mu.Lock()
|
acc.values.mu.Lock()
|
||||||
assert.Equal(t, 0, acc.values.lpBytes)
|
assert.Equal(t, int64(0), acc.values.lpBytes)
|
||||||
assert.Equal(t, int64(0), acc.values.bytes)
|
assert.Equal(t, int64(0), acc.values.bytes)
|
||||||
acc.values.mu.Unlock()
|
acc.values.mu.Unlock()
|
||||||
assert.Equal(t, int64(0), stats.bytes)
|
assert.Equal(t, int64(0), stats.bytes)
|
||||||
@@ -113,7 +113,7 @@ func TestAccountRead(t *testing.T) {
|
|||||||
|
|
||||||
assert.False(t, acc.values.start.IsZero())
|
assert.False(t, acc.values.start.IsZero())
|
||||||
acc.values.mu.Lock()
|
acc.values.mu.Lock()
|
||||||
assert.Equal(t, 2, acc.values.lpBytes)
|
assert.Equal(t, int64(2), acc.values.lpBytes)
|
||||||
assert.Equal(t, int64(2), acc.values.bytes)
|
assert.Equal(t, int64(2), acc.values.bytes)
|
||||||
acc.values.mu.Unlock()
|
acc.values.mu.Unlock()
|
||||||
assert.Equal(t, int64(2), stats.bytes)
|
assert.Equal(t, int64(2), stats.bytes)
|
||||||
@@ -145,7 +145,7 @@ func testAccountWriteTo(t *testing.T, withBuffer bool) {
|
|||||||
|
|
||||||
assert.True(t, acc.values.start.IsZero())
|
assert.True(t, acc.values.start.IsZero())
|
||||||
acc.values.mu.Lock()
|
acc.values.mu.Lock()
|
||||||
assert.Equal(t, 0, acc.values.lpBytes)
|
assert.Equal(t, int64(0), acc.values.lpBytes)
|
||||||
assert.Equal(t, int64(0), acc.values.bytes)
|
assert.Equal(t, int64(0), acc.values.bytes)
|
||||||
acc.values.mu.Unlock()
|
acc.values.mu.Unlock()
|
||||||
assert.Equal(t, int64(0), stats.bytes)
|
assert.Equal(t, int64(0), stats.bytes)
|
||||||
@@ -159,7 +159,7 @@ func testAccountWriteTo(t *testing.T, withBuffer bool) {
|
|||||||
|
|
||||||
assert.False(t, acc.values.start.IsZero())
|
assert.False(t, acc.values.start.IsZero())
|
||||||
acc.values.mu.Lock()
|
acc.values.mu.Lock()
|
||||||
assert.Equal(t, len(buf), acc.values.lpBytes)
|
assert.Equal(t, int64(len(buf)), acc.values.lpBytes)
|
||||||
assert.Equal(t, int64(len(buf)), acc.values.bytes)
|
assert.Equal(t, int64(len(buf)), acc.values.bytes)
|
||||||
acc.values.mu.Unlock()
|
acc.values.mu.Unlock()
|
||||||
assert.Equal(t, int64(len(buf)), stats.bytes)
|
assert.Equal(t, int64(len(buf)), stats.bytes)
|
||||||
|
|||||||
Reference in New Issue
Block a user