Compare commits
3 Commits
a072535050
...
4cd1b53461
Author | SHA1 | Date |
---|---|---|
Jonathan Gramain | 4cd1b53461 | |
Taylor McKinnon | 6a31285faf | |
Artem Bakalov | 1636b371dc |
|
@ -546,7 +546,9 @@ class UtapiClient {
|
|||
if (this._isCounterEnabled(counterAction)) {
|
||||
cmds.push(['incr', generateKey(p, counterAction, timestamp)]);
|
||||
}
|
||||
cmds.push(['zrangebyscore', generateStateKey(p, 'storageUtilized'), timestamp, timestamp]);
|
||||
});
|
||||
|
||||
return this.ds.batch(cmds, (err, results) => {
|
||||
if (err) {
|
||||
log.error('error pushing metric', {
|
||||
|
@ -580,13 +582,48 @@ class UtapiClient {
|
|||
// empty.
|
||||
actionCounter = Number.isNaN(actionCounter)
|
||||
|| actionCounter < 0 ? 1 : actionCounter;
|
||||
|
||||
if (Number.isInteger(params.byteLength)) {
|
||||
/* byteLength is passed in from cloudserver under the follow conditions:
|
||||
* - bucket versioning is suspended
|
||||
* - object version id is null
|
||||
* - the content length of the object exists
|
||||
* In this case, the master key is deleted and replaced with a delete marker.
|
||||
* The decrement accounts for the deletion of the master key when utapi reports
|
||||
* on the number of objects.
|
||||
*/
|
||||
actionCounter -= 1;
|
||||
}
|
||||
|
||||
const key = generateStateKey(p, 'numberOfObjects');
|
||||
|
||||
const byteArr = results[index + commandsGroupSize - 1][1];
|
||||
const oldByteLength = byteArr ? parseInt(byteArr[0], 10) : 0;
|
||||
const newByteLength = member.serialize(Math.max(0, oldByteLength - params.byteLength));
|
||||
|
||||
cmds2.push(
|
||||
['zremrangebyscore', key, timestamp, timestamp],
|
||||
['zadd', key, timestamp, member.serialize(actionCounter)],
|
||||
|
||||
);
|
||||
|
||||
if (Number.isInteger(params.byteLength)) {
|
||||
cmds2.push(
|
||||
['decr', generateCounter(p, 'numberOfObjectsCounter')],
|
||||
['decrby', generateCounter(p, 'storageUtilizedCounter'), params.byteLength],
|
||||
);
|
||||
}
|
||||
|
||||
if (byteArr) {
|
||||
cmds2.push(
|
||||
['zremrangebyscore', generateStateKey(p, 'storageUtilized'), timestamp, timestamp],
|
||||
['zadd', generateStateKey(p, 'storageUtilized'), timestamp, newByteLength],
|
||||
);
|
||||
}
|
||||
|
||||
return true;
|
||||
});
|
||||
|
||||
if (noErr) {
|
||||
return this.ds.batch(cmds2, cb);
|
||||
}
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
"engines": {
|
||||
"node": ">=16"
|
||||
},
|
||||
"version": "7.10.7",
|
||||
"version": "7.10.7-1",
|
||||
"description": "API for tracking resource utilization and reporting metrics",
|
||||
"main": "index.js",
|
||||
"repository": {
|
||||
|
|
|
@ -247,7 +247,11 @@ tests.forEach(test => {
|
|||
c.setDataStore(ds);
|
||||
c.pushMetric(metric, REQUID, params, () => {
|
||||
deserializeMemoryBackend(memoryBackend.data);
|
||||
assert.deepStrictEqual(memoryBackend.data, expected);
|
||||
Object.keys(expected).forEach(key => {
|
||||
if (memoryBackend.data[key]) {
|
||||
assert.deepStrictEqual(memoryBackend.data[key], expected[key]);
|
||||
}
|
||||
});
|
||||
return cb();
|
||||
});
|
||||
}
|
||||
|
@ -490,6 +494,7 @@ tests.forEach(test => {
|
|||
storageUtilized: '1024',
|
||||
numberOfObjects: '1',
|
||||
};
|
||||
|
||||
setMockData(data, timestamp, () => {
|
||||
testMetric('deleteObject', params, expected, done);
|
||||
});
|
||||
|
@ -667,6 +672,40 @@ tests.forEach(test => {
|
|||
testMetric('putDeleteMarkerObject', metricTypes, expected, done);
|
||||
});
|
||||
|
||||
it('should push putDeleteMarkerObject metrics and have correct bytes and number of objects', done => {
|
||||
const expected = buildExpectedResult({
|
||||
action: 'PutObject',
|
||||
numberOfObjects: '1',
|
||||
});
|
||||
const metrics = {
|
||||
bucket: '5741-repro',
|
||||
keys: ['foo2'],
|
||||
byteLength: undefined,
|
||||
newByteLength: 258,
|
||||
oldByteLength: null,
|
||||
numberOfObjects: 1,
|
||||
accountId: '79a59df900b949e55d96a1e698fbacedfd6e09d98eacf8f8d5218e7cd47ef2be',
|
||||
userId: undefined,
|
||||
};
|
||||
testMetric('putObject', Object.assign(metrics, metricTypes), expected, () => {
|
||||
const expected = buildExpectedResult({
|
||||
action: 'DeleteObject',
|
||||
numberOfObjects: '1',
|
||||
});
|
||||
const metrics2 = {
|
||||
bucket: '5741-repro',
|
||||
keys: ['foo2'],
|
||||
byteLength: 258,
|
||||
newByteLength: undefined,
|
||||
oldByteLength: undefined,
|
||||
numberOfObjects: undefined,
|
||||
accountId: '79a59df900b949e55d96a1e698fbacedfd6e09d98eacf8f8d5218e7cd47ef2be',
|
||||
userId: undefined,
|
||||
};
|
||||
testMetric('putDeleteMarkerObject', Object.assign(metrics2, metricTypes), expected, done);
|
||||
});
|
||||
});
|
||||
|
||||
it('should push putBucketReplication metrics', done => {
|
||||
const expected = buildExpectedResult({
|
||||
action: 'PutBucketReplication',
|
||||
|
@ -766,3 +805,4 @@ tests.forEach(test => {
|
|||
});
|
||||
});
|
||||
});
|
||||
|
||||
|
|
Loading…
Reference in New Issue