-
Notifications
You must be signed in to change notification settings - Fork 634
Closed
Labels
bugThis issue is a bug.This issue is a bug.p2This is a standard priority issueThis is a standard priority issueresponse-requestedWaiting on additional info and feedback. Will move to \"closing-soon\" in 7 days.Waiting on additional info and feedback. Will move to \"closing-soon\" in 7 days.
Description
Checkboxes for prior research
- I've gone through Developer Guide and API reference
- I've checked AWS Forums and StackOverflow.
- I've searched for previous similar issues and didn't find any solution.
Describe the bug
I did a custom DynamoDB client middleware to log used capacity units when a specific environment variable is set by mutating the input to the operations to include the ReturnConsumedCapacity
when said env variable is configured, but the input that is mutated is ignored completely and only the original command input is serialized in the request
Regression Issue
- Select this option if this issue appears to be a regression.
SDK version number
@aws-sdk/[email protected]
Which JavaScript Runtime is this issue in?
Node.js
Details of the browser/Node.js/ReactNative version
v20.11.0
Reproduction Steps
import { ConsumedCapacity, ServiceInputTypes, ServiceOutputTypes } from '@aws-sdk/client-dynamodb';
import { InitializeMiddleware, Pluggable } from '@aws-sdk/types';
import { RegionResolvedConfig } from '@smithy/config-resolver';
import { logInfo } from '@tma/core-log';
import { getEnvNumber } from '@tma/node-env';
function createLogConsumedCapacityMiddleware(
minConsumedCapacityUnits: number,
): InitializeMiddleware<ServiceInputTypes, ServiceOutputTypes> {
return next => async args => {
args.input = {
...args.input,
ReturnConsumedCapacity: 'TOTAL',
};
const result = await next(args);
const output = result.output as { ConsumedCapacity?: ConsumedCapacity | ConsumedCapacity[] };
const consumedCapacities = output.ConsumedCapacity
? Array.isArray(output.ConsumedCapacity)
? output.ConsumedCapacity
: [output.ConsumedCapacity]
: [];
if (consumedCapacities.some(consumedCapacity => (consumedCapacity.CapacityUnits ?? 0) >= minConsumedCapacityUnits)) {
logInfo('ConsumedCapacity', {
consumedCapacity: output.ConsumedCapacity,
input: args.input,
});
}
return result;
};
}
export function createLogConsumedCapacityPlugin(_config: RegionResolvedConfig): Pluggable<ServiceInputTypes, ServiceOutputTypes> {
return {
applyToStack: stack => {
const LOG_CONSUMED_CAPACITY = getEnvNumber('DYNAMODB_LOG_CONSUMED_CAPACITY', 0);
if (LOG_CONSUMED_CAPACITY) {
stack.add(createLogConsumedCapacityMiddleware(LOG_CONSUMED_CAPACITY), {
name: 'logConsumedCapacityMiddleware',
step: 'initialize',
});
}
},
};
}
Observed Behavior
ReturnConsumedCapacity is ignored in the new input
Expected Behavior
ReturnConsumedCapacity should not be ignored and the DynamoDB operations should return the CapacityUnits used
Possible Solution
No response
Additional Information/Context
No response
Metadata
Metadata
Assignees
Labels
bugThis issue is a bug.This issue is a bug.p2This is a standard priority issueThis is a standard priority issueresponse-requestedWaiting on additional info and feedback. Will move to \"closing-soon\" in 7 days.Waiting on additional info and feedback. Will move to \"closing-soon\" in 7 days.