From fd60c9c15ebbb028fd5a1f67d62ebf5eace07bba Mon Sep 17 00:00:00 2001 From: victor-meng <56978073+victor-meng@users.noreply.github.com> Date: Mon, 30 Nov 2020 23:06:38 -0800 Subject: [PATCH] Remove RUPM (#328) Remove all RUPM code --- sampleData/gremlinSampleData.json | 3 +- src/Common/Constants.ts | 6 -- src/Contracts/DataModels.ts | 1 - .../FeaturePanel/FeaturePanelComponent.tsx | 1 - .../FeaturePanelComponent.test.tsx.snap | 6 -- .../Settings/SettingsRenderUtils.test.tsx | 2 +- .../Controls/Settings/SettingsRenderUtils.tsx | 5 +- .../ThroughputInputAutoPilotV3Component.tsx | 3 +- .../SettingsComponent.test.tsx.snap | 16 ----- .../SettingsRenderUtils.test.tsx.snap | 6 +- src/Explorer/Panes/AddCollectionPane.html | 32 --------- src/Explorer/Panes/AddCollectionPane.ts | 55 +-------------- src/Explorer/Panes/AddDatabasePane.ts | 10 +-- .../Panes/CassandraAddCollectionPane.ts | 26 +------ src/Explorer/Tabs/DatabaseSettingsTab.ts | 3 +- src/Shared/Constants.ts | 3 - src/Shared/PriceEstimateCalculator.ts | 14 ++-- src/Utils/PricingUtils.test.ts | 68 +++++++------------ src/Utils/PricingUtils.ts | 23 ++----- 19 files changed, 49 insertions(+), 234 deletions(-) diff --git a/sampleData/gremlinSampleData.json b/sampleData/gremlinSampleData.json index 485db5d1a..82fed5817 100644 --- a/sampleData/gremlinSampleData.json +++ b/sampleData/gremlinSampleData.json @@ -3,7 +3,6 @@ "offerThroughput": 400, "databaseLevelThroughput": false, "collectionId": "Persons", - "rupmEnabled": false, "partitionKey": { "kind": "Hash", "paths": ["/name"] }, "data": [ "g.addV('person').property(id, '1').property('name', 'Eva').property('age', 44)", @@ -13,4 +12,4 @@ "g.V('1').addE('knows').to(g.V('2')).outV().addE('knows').to(g.V('3'))", "g.V('3').addE('knows').to(g.V('4'))" ] -} \ No newline at end of file +} diff --git a/src/Common/Constants.ts b/src/Common/Constants.ts index 2142a530e..89a7fafac 100644 --- a/src/Common/Constants.ts +++ b/src/Common/Constants.ts @@ -108,7 +108,6 @@ export class CapabilityNames { export class Features { public static readonly cosmosdb = "cosmosdb"; public static readonly enableChangeFeedPolicy = "enablechangefeedpolicy"; - public static readonly enableRupm = "enablerupm"; public static readonly executeSproc = "dataexplorerexecutesproc"; public static readonly hostedDataExplorer = "hosteddataexplorerenabled"; public static readonly enableTtl = "enablettl"; @@ -181,11 +180,6 @@ export class CassandraBackend { public static readonly guestSchemaApi: string = "api/guest/cassandra/schema"; } -export class RUPMStates { - public static on: string = "on"; - public static off: string = "off"; -} - export class Queries { public static CustomPageOption: string = "custom"; public static UnlimitedPageOption: string = "unlimited"; diff --git a/src/Contracts/DataModels.ts b/src/Contracts/DataModels.ts index 5ec15c572..8df58ba18 100644 --- a/src/Contracts/DataModels.ts +++ b/src/Contracts/DataModels.ts @@ -248,7 +248,6 @@ export interface CreateDatabaseAndCollectionRequest { collectionId: string; offerThroughput: number; databaseLevelThroughput: boolean; - rupmEnabled?: boolean; partitionKey?: PartitionKey; indexingPolicy?: IndexingPolicy; uniqueKeyPolicy?: UniqueKeyPolicy; diff --git a/src/Explorer/Controls/FeaturePanel/FeaturePanelComponent.tsx b/src/Explorer/Controls/FeaturePanel/FeaturePanelComponent.tsx index b0f1733f7..8fe45f2f6 100644 --- a/src/Explorer/Controls/FeaturePanel/FeaturePanelComponent.tsx +++ b/src/Explorer/Controls/FeaturePanel/FeaturePanelComponent.tsx @@ -44,7 +44,6 @@ export const FeaturePanelComponent: React.FunctionComponent = () => { onChange?: (_?: React.FormEvent, checked?: boolean) => void; }[] = [ { key: "feature.enablechangefeedpolicy", label: "Enable change feed policy", value: "true" }, - { key: "feature.enablerupm", label: "Enable RUPM", value: "true" }, { key: "feature.dataexplorerexecutesproc", label: "Execute stored procedure", value: "true" }, { key: "feature.hosteddataexplorerenabled", label: "Hosted Data Explorer (deprecated?)", value: "true" }, { key: "feature.enablettl", label: "Enable TTL", value: "true" }, diff --git a/src/Explorer/Controls/FeaturePanel/__snapshots__/FeaturePanelComponent.test.tsx.snap b/src/Explorer/Controls/FeaturePanel/__snapshots__/FeaturePanelComponent.test.tsx.snap index 7f4a39014..7d8d57936 100644 --- a/src/Explorer/Controls/FeaturePanel/__snapshots__/FeaturePanelComponent.test.tsx.snap +++ b/src/Explorer/Controls/FeaturePanel/__snapshots__/FeaturePanelComponent.test.tsx.snap @@ -131,12 +131,6 @@ exports[`Feature panel renders all flags 1`] = ` label="Enable change feed policy" onChange={[Function]} /> - { - const hourlyPrice: number = computeRUUsagePriceHourly(serverId, rupmEnabled, throughput, regions, multimaster); + const hourlyPrice: number = computeRUUsagePriceHourly(serverId, throughput, regions, multimaster); const dailyPrice: number = hourlyPrice * 24; const monthlyPrice: number = hourlyPrice * hoursInAMonth; const currency: string = getPriceCurrency(serverId); diff --git a/src/Explorer/Controls/Settings/SettingsSubComponents/ThroughputInputComponents/ThroughputInputAutoPilotV3Component.tsx b/src/Explorer/Controls/Settings/SettingsSubComponents/ThroughputInputComponents/ThroughputInputAutoPilotV3Component.tsx index f3efba887..cc23b0ec9 100644 --- a/src/Explorer/Controls/Settings/SettingsSubComponents/ThroughputInputComponents/ThroughputInputAutoPilotV3Component.tsx +++ b/src/Explorer/Controls/Settings/SettingsSubComponents/ThroughputInputComponents/ThroughputInputAutoPilotV3Component.tsx @@ -179,8 +179,7 @@ export class ThroughputInputAutoPilotV3Component extends React.Component< this.overrideWithAutoPilotSettings() ? this.props.maxAutoPilotThroughput : offerThroughput, serverId, regions, - multimaster, - false + multimaster ); } else { estimatedSpend = getEstimatedAutoscaleSpendElement( diff --git a/src/Explorer/Controls/Settings/__snapshots__/SettingsComponent.test.tsx.snap b/src/Explorer/Controls/Settings/__snapshots__/SettingsComponent.test.tsx.snap index c4923e5d0..9d3cf530a 100644 --- a/src/Explorer/Controls/Settings/__snapshots__/SettingsComponent.test.tsx.snap +++ b/src/Explorer/Controls/Settings/__snapshots__/SettingsComponent.test.tsx.snap @@ -133,8 +133,6 @@ exports[`SettingsComponent renders 1`] = ` "partitionKeyVisible": [Function], "requestUnitsUsageCost": [Function], "ruToolTipText": [Function], - "rupm": [Function], - "rupmVisible": [Function], "sharedAutoPilotThroughput": [Function], "sharedThroughputRangeText": [Function], "shouldCreateMongoWildcardIndex": [Function], @@ -622,8 +620,6 @@ exports[`SettingsComponent renders 1`] = ` "partitionKeyVisible": [Function], "requestUnitsUsageCost": [Function], "ruToolTipText": [Function], - "rupm": [Function], - "rupmVisible": [Function], "sharedAutoPilotThroughput": [Function], "sharedThroughputRangeText": [Function], "shouldCreateMongoWildcardIndex": [Function], @@ -1412,8 +1408,6 @@ exports[`SettingsComponent renders 1`] = ` "partitionKeyVisible": [Function], "requestUnitsUsageCost": [Function], "ruToolTipText": [Function], - "rupm": [Function], - "rupmVisible": [Function], "sharedAutoPilotThroughput": [Function], "sharedThroughputRangeText": [Function], "shouldCreateMongoWildcardIndex": [Function], @@ -1901,8 +1895,6 @@ exports[`SettingsComponent renders 1`] = ` "partitionKeyVisible": [Function], "requestUnitsUsageCost": [Function], "ruToolTipText": [Function], - "rupm": [Function], - "rupmVisible": [Function], "sharedAutoPilotThroughput": [Function], "sharedThroughputRangeText": [Function], "shouldCreateMongoWildcardIndex": [Function], @@ -2704,8 +2696,6 @@ exports[`SettingsComponent renders 1`] = ` "partitionKeyVisible": [Function], "requestUnitsUsageCost": [Function], "ruToolTipText": [Function], - "rupm": [Function], - "rupmVisible": [Function], "sharedAutoPilotThroughput": [Function], "sharedThroughputRangeText": [Function], "shouldCreateMongoWildcardIndex": [Function], @@ -3193,8 +3183,6 @@ exports[`SettingsComponent renders 1`] = ` "partitionKeyVisible": [Function], "requestUnitsUsageCost": [Function], "ruToolTipText": [Function], - "rupm": [Function], - "rupmVisible": [Function], "sharedAutoPilotThroughput": [Function], "sharedThroughputRangeText": [Function], "shouldCreateMongoWildcardIndex": [Function], @@ -3983,8 +3971,6 @@ exports[`SettingsComponent renders 1`] = ` "partitionKeyVisible": [Function], "requestUnitsUsageCost": [Function], "ruToolTipText": [Function], - "rupm": [Function], - "rupmVisible": [Function], "sharedAutoPilotThroughput": [Function], "sharedThroughputRangeText": [Function], "shouldCreateMongoWildcardIndex": [Function], @@ -4472,8 +4458,6 @@ exports[`SettingsComponent renders 1`] = ` "partitionKeyVisible": [Function], "requestUnitsUsageCost": [Function], "ruToolTipText": [Function], - "rupm": [Function], - "rupmVisible": [Function], "sharedAutoPilotThroughput": [Function], "sharedThroughputRangeText": [Function], "shouldCreateMongoWildcardIndex": [Function], diff --git a/src/Explorer/Controls/Settings/__snapshots__/SettingsRenderUtils.test.tsx.snap b/src/Explorer/Controls/Settings/__snapshots__/SettingsRenderUtils.test.tsx.snap index 5d0a46560..a13590e36 100644 --- a/src/Explorer/Controls/Settings/__snapshots__/SettingsRenderUtils.test.tsx.snap +++ b/src/Explorer/Controls/Settings/__snapshots__/SettingsRenderUtils.test.tsx.snap @@ -69,15 +69,15 @@ exports[`SettingsUtils functions render 1`] = ` ¥ - 1.29 + 1.02 hourly / ¥ - 31.06 + 24.48 daily / ¥ - 944.60 + 744.60 monthly diff --git a/src/Explorer/Panes/AddCollectionPane.html b/src/Explorer/Panes/AddCollectionPane.html index 9167bcf93..af007c63b 100644 --- a/src/Explorer/Panes/AddCollectionPane.html +++ b/src/Explorer/Panes/AddCollectionPane.html @@ -243,38 +243,6 @@
-
-
-

- * - RU/m - - More information - - For each 100 Request Units per second (RU/s) provisioned, 1,000 Request Units - per - minute - (RU/m) can be provisioned. E.g.: for a container with 5,000 RU/s provisioned - with - RU/m - enabled, the RU/m budget will be 50,000 RU/m. - - -

-
-
- - -
-
- - -
-
-
-

* diff --git a/src/Explorer/Panes/AddCollectionPane.ts b/src/Explorer/Panes/AddCollectionPane.ts index 62a700d54..cf37da3ca 100644 --- a/src/Explorer/Panes/AddCollectionPane.ts +++ b/src/Explorer/Panes/AddCollectionPane.ts @@ -42,8 +42,6 @@ export default class AddCollectionPane extends ContextualPaneBase { public partitionKeyVisible: ko.Computed; public partitionKeyPattern: ko.Computed; public partitionKeyTitle: ko.Computed; - public rupm: ko.Observable; - public rupmVisible: ko.Observable; public storage: ko.Observable; public throughputSinglePartition: ViewModels.Editable; public throughputMultiPartition: ViewModels.Editable; @@ -143,12 +141,6 @@ export default class AddCollectionPane extends ContextualPaneBase { } return ""; }); - this.rupm = ko.observable(Constants.RUPMStates.off); - this.rupmVisible = ko.observable(false); - const featureSubcription = this.container.features.subscribe(() => { - this.rupmVisible(this.container.isFeatureEnabled(Constants.Features.enableRupm)); - featureSubcription.dispose(); - }); this.canExceedMaximumValue = ko.pureComputed(() => this.container.canExceedMaximumValue()); @@ -201,7 +193,6 @@ export default class AddCollectionPane extends ContextualPaneBase { account.properties.readLocations.length) || 1; const multimaster = (account && account.properties && account.properties.enableMultipleWriteLocations) || false; - const rupmEnabled: boolean = this.rupm() === Constants.RUPMStates.on; let throughputSpendAckText: string; let estimatedSpend: string; @@ -211,23 +202,15 @@ export default class AddCollectionPane extends ContextualPaneBase { serverId, regions, multimaster, - rupmEnabled, this.isSharedAutoPilotSelected() ); - estimatedSpend = PricingUtils.getEstimatedSpendHtml( - offerThroughput, - serverId, - regions, - multimaster, - rupmEnabled - ); + estimatedSpend = PricingUtils.getEstimatedSpendHtml(offerThroughput, serverId, regions, multimaster); } else { throughputSpendAckText = PricingUtils.getEstimatedSpendAcknowledgeString( this.sharedAutoPilotThroughput(), serverId, regions, multimaster, - rupmEnabled, this.isSharedAutoPilotSelected() ); estimatedSpend = PricingUtils.getEstimatedAutoscaleSpendHtml( @@ -264,7 +247,6 @@ export default class AddCollectionPane extends ContextualPaneBase { account.properties.readLocations.length) || 1; const multimaster = (account && account.properties && account.properties.enableMultipleWriteLocations) || false; - const rupmEnabled: boolean = this.rupm() === Constants.RUPMStates.on; let throughputSpendAckText: string; let estimatedSpend: string; @@ -274,15 +256,13 @@ export default class AddCollectionPane extends ContextualPaneBase { serverId, regions, multimaster, - rupmEnabled, this.isAutoPilotSelected() ); estimatedSpend = PricingUtils.getEstimatedSpendHtml( this.throughputMultiPartition(), serverId, regions, - multimaster, - rupmEnabled + multimaster ); } else { throughputSpendAckText = PricingUtils.getEstimatedSpendAcknowledgeString( @@ -290,7 +270,6 @@ export default class AddCollectionPane extends ContextualPaneBase { serverId, regions, multimaster, - rupmEnabled, this.isAutoPilotSelected() ); estimatedSpend = PricingUtils.getEstimatedAutoscaleSpendHtml( @@ -686,8 +665,7 @@ export default class AddCollectionPane extends ContextualPaneBase { storage: this.storage(), offerThroughput: this._getThroughput(), partitionKey: this.partitionKey(), - databaseId: this.databaseId(), - rupm: this.rupm() + databaseId: this.databaseId() }), subscriptionType: SubscriptionType[this.container.subscriptionType()], subscriptionQuotaId: this.container.quotaId(), @@ -788,7 +766,6 @@ export default class AddCollectionPane extends ContextualPaneBase { id: this.collectionId(), storage: this.storage(), partitionKey, - rupm: this.rupm(), uniqueKeyPolicy, collectionWithThroughputInShared: this.collectionWithThroughputInShared() }), @@ -863,7 +840,6 @@ export default class AddCollectionPane extends ContextualPaneBase { id: this.collectionId(), storage: this.storage(), partitionKey, - rupm: this.rupm(), uniqueKeyPolicy, collectionWithThroughputInShared: this.collectionWithThroughputInShared() }), @@ -898,7 +874,6 @@ export default class AddCollectionPane extends ContextualPaneBase { id: this.collectionId(), storage: this.storage(), partitionKey, - rupm: this.rupm(), uniqueKeyPolicy, collectionWithThroughputInShared: this.collectionWithThroughputInShared() }, @@ -981,20 +956,6 @@ export default class AddCollectionPane extends ContextualPaneBase { return true; } - public onRupmOptionsKeyDown(source: any, event: KeyboardEvent): boolean { - if (event.key === "ArrowRight") { - this.rupm("off"); - return false; - } - - if (event.key === "ArrowLeft") { - this.rupm("on"); - return false; - } - - return true; - } - public onEnableSynapseLinkButtonClicked() { this.container.openEnableSynapseLinkDialog(); } @@ -1018,16 +979,6 @@ export default class AddCollectionPane extends ContextualPaneBase { } const throughput = this._getThroughput(); - const maxThroughputWithRUPM = - SharedConstants.CollectionCreation.MaxRUPMPerPartition * this._calculateNumberOfPartitions(); - - if (this.rupm() === Constants.RUPMStates.on && throughput > maxThroughputWithRUPM) { - this.formErrors( - `The maximum supported provisioned throughput with RU/m enabled is ${maxThroughputWithRUPM} RU/s. Please turn off RU/m to incease thoughput above ${maxThroughputWithRUPM} RU/s.` - ); - return false; - } - if (throughput > SharedConstants.CollectionCreation.DefaultCollectionRUs100K && !this.throughputSpendAck()) { this.formErrors(`Please acknowledge the estimated daily spend.`); return false; diff --git a/src/Explorer/Panes/AddDatabasePane.ts b/src/Explorer/Panes/AddDatabasePane.ts index 8081c7cc8..5f198d9a2 100644 --- a/src/Explorer/Panes/AddDatabasePane.ts +++ b/src/Explorer/Panes/AddDatabasePane.ts @@ -133,19 +133,12 @@ export default class AddDatabasePane extends ContextualPaneBase { let estimatedSpendAcknowledge: string; let estimatedSpend: string; if (!this.isAutoPilotSelected()) { - estimatedSpend = PricingUtils.getEstimatedSpendHtml( - offerThroughput, - serverId, - regions, - multimaster, - false /*rupmEnabled*/ - ); + estimatedSpend = PricingUtils.getEstimatedSpendHtml(offerThroughput, serverId, regions, multimaster); estimatedSpendAcknowledge = PricingUtils.getEstimatedSpendAcknowledgeString( offerThroughput, serverId, regions, multimaster, - false /*rupmEnabled*/, this.isAutoPilotSelected() ); } else { @@ -160,7 +153,6 @@ export default class AddDatabasePane extends ContextualPaneBase { serverId, regions, multimaster, - false /*rupmEnabled*/, this.isAutoPilotSelected() ); } diff --git a/src/Explorer/Panes/CassandraAddCollectionPane.ts b/src/Explorer/Panes/CassandraAddCollectionPane.ts index 864f4c386..b72dec1ea 100644 --- a/src/Explorer/Panes/CassandraAddCollectionPane.ts +++ b/src/Explorer/Panes/CassandraAddCollectionPane.ts @@ -138,19 +138,12 @@ export default class CassandraAddCollectionPane extends ContextualPaneBase { let estimatedSpend: string; let estimatedDedicatedSpendAcknowledge: string; if (!this.isAutoPilotSelected()) { - estimatedSpend = PricingUtils.getEstimatedSpendHtml( - offerThroughput, - serverId, - regions, - multimaster, - false /*rupmEnabled*/ - ); + estimatedSpend = PricingUtils.getEstimatedSpendHtml(offerThroughput, serverId, regions, multimaster); estimatedDedicatedSpendAcknowledge = PricingUtils.getEstimatedSpendAcknowledgeString( offerThroughput, serverId, regions, multimaster, - false /*rupmEnabled*/, this.isAutoPilotSelected() ); } else { @@ -165,7 +158,6 @@ export default class CassandraAddCollectionPane extends ContextualPaneBase { serverId, regions, multimaster, - false /*rupmEnabled*/, this.isAutoPilotSelected() ); } @@ -190,19 +182,12 @@ export default class CassandraAddCollectionPane extends ContextualPaneBase { let estimatedSpend: string; let estimatedSharedSpendAcknowledge: string; if (!this.isSharedAutoPilotSelected()) { - estimatedSpend = PricingUtils.getEstimatedSpendHtml( - this.keyspaceThroughput(), - serverId, - regions, - multimaster, - false /*rupmEnabled*/ - ); + estimatedSpend = PricingUtils.getEstimatedSpendHtml(this.keyspaceThroughput(), serverId, regions, multimaster); estimatedSharedSpendAcknowledge = PricingUtils.getEstimatedSpendAcknowledgeString( this.keyspaceThroughput(), serverId, regions, multimaster, - false /*rupmEnabled*/, this.isSharedAutoPilotSelected() ); } else { @@ -217,7 +202,6 @@ export default class CassandraAddCollectionPane extends ContextualPaneBase { serverId, regions, multimaster, - false /*rupmEnabled*/, this.isSharedAutoPilotSelected() ); } @@ -312,8 +296,7 @@ export default class CassandraAddCollectionPane extends ContextualPaneBase { storage: Constants.BackendDefaults.multiPartitionStorageInGb, offerThroughput: this.throughput(), partitionKey: "", - databaseId: this.keyspaceId(), - rupm: false + databaseId: this.keyspaceId() }), subscriptionType: SubscriptionType[this.container.subscriptionType()], subscriptionQuotaId: this.container.quotaId(), @@ -366,7 +349,6 @@ export default class CassandraAddCollectionPane extends ContextualPaneBase { offerThroughput: this.throughput(), partitionKey: "", databaseId: this.keyspaceId(), - rupm: false, hasDedicatedThroughput: this.dedicateTableThroughput() }), keyspaceHasSharedOffer: this.keyspaceHasSharedOffer(), @@ -413,7 +395,6 @@ export default class CassandraAddCollectionPane extends ContextualPaneBase { offerThroughput: this.throughput(), partitionKey: "", databaseId: this.keyspaceId(), - rupm: false, hasDedicatedThroughput: this.dedicateTableThroughput() }), keyspaceHasSharedOffer: this.keyspaceHasSharedOffer(), @@ -444,7 +425,6 @@ export default class CassandraAddCollectionPane extends ContextualPaneBase { offerThroughput: this.throughput(), partitionKey: "", databaseId: this.keyspaceId(), - rupm: false, hasDedicatedThroughput: this.dedicateTableThroughput() }, keyspaceHasSharedOffer: this.keyspaceHasSharedOffer(), diff --git a/src/Explorer/Tabs/DatabaseSettingsTab.ts b/src/Explorer/Tabs/DatabaseSettingsTab.ts index 26c125124..1ae0e6e2a 100644 --- a/src/Explorer/Tabs/DatabaseSettingsTab.ts +++ b/src/Explorer/Tabs/DatabaseSettingsTab.ts @@ -155,8 +155,7 @@ export default class DatabaseSettingsTab extends TabsBase implements ViewModels. this.overrideWithAutoPilotSettings() ? this.autoPilotThroughput() : this.throughput(), serverId, regions, - multimaster, - false /*rupmEnabled*/ + multimaster ); } else { estimatedSpend = PricingUtils.getEstimatedAutoscaleSpendHtml( diff --git a/src/Shared/Constants.ts b/src/Shared/Constants.ts index 303217a59..212ff41ca 100644 --- a/src/Shared/Constants.ts +++ b/src/Shared/Constants.ts @@ -126,7 +126,6 @@ export class OfferPricing { Standard: { StartingPrice: 24 / hoursInAMonth, // per hour PricePerRU: 0.00008, - PricePerRUPM: (10 * 2) / 1000 / hoursInAMonth, // preview price: $2 per 1000 RU/m per month -> 100 RU/s PricePerGB: 0.25 / hoursInAMonth } }, @@ -139,7 +138,6 @@ export class OfferPricing { Standard: { StartingPrice: OfferPricing.MonthlyPricing.mooncake.Standard.StartingPrice / hoursInAMonth, // per hour PricePerRU: 0.00051, - PricePerRUPM: (10 * 20) / 1000 / hoursInAMonth, // preview price: 20rmb per 1000 RU/m per month -> 100 RU/s PricePerGB: OfferPricing.MonthlyPricing.mooncake.Standard.PricePerGB / hoursInAMonth } } @@ -156,7 +154,6 @@ export class CollectionCreation { public static readonly MinRU7PartitionsTo25Partitions: number = 2500; public static readonly MinRUPerPartitionAbove25Partitions: number = 100; public static readonly MaxRUPerPartition: number = 10000; - public static readonly MaxRUPMPerPartition: number = 5000; public static readonly MinPartitionedCollectionRUs: number = 2500; public static readonly NumberOfPartitionsInFixedCollection: number = 1; diff --git a/src/Shared/PriceEstimateCalculator.ts b/src/Shared/PriceEstimateCalculator.ts index c9a134b76..d7c30d695 100644 --- a/src/Shared/PriceEstimateCalculator.ts +++ b/src/Shared/PriceEstimateCalculator.ts @@ -1,17 +1,13 @@ import * as Constants from "./Constants"; -export function computeRUUsagePrice(serverId: string, rupmEnabled: boolean, requestUnits: number): string { +export function computeRUUsagePrice(serverId: string, requestUnits: number): string { if (serverId === "mooncake") { - let ruCharge = requestUnits * Constants.OfferPricing.HourlyPricing.mooncake.Standard.PricePerRU, - rupmCharge = rupmEnabled ? requestUnits * Constants.OfferPricing.HourlyPricing.mooncake.Standard.PricePerRUPM : 0; - return ( - calculateEstimateNumber(ruCharge + rupmCharge) + " " + Constants.OfferPricing.HourlyPricing.mooncake.Currency - ); + let ruCharge = requestUnits * Constants.OfferPricing.HourlyPricing.mooncake.Standard.PricePerRU; + return calculateEstimateNumber(ruCharge) + " " + Constants.OfferPricing.HourlyPricing.mooncake.Currency; } - let ruCharge = requestUnits * Constants.OfferPricing.HourlyPricing.default.Standard.PricePerRU, - rupmCharge = rupmEnabled ? requestUnits * Constants.OfferPricing.HourlyPricing.default.Standard.PricePerRUPM : 0; - return calculateEstimateNumber(ruCharge + rupmCharge) + " " + Constants.OfferPricing.HourlyPricing.default.Currency; + let ruCharge = requestUnits * Constants.OfferPricing.HourlyPricing.default.Standard.PricePerRU; + return calculateEstimateNumber(ruCharge) + " " + Constants.OfferPricing.HourlyPricing.default.Currency; } export function computeStorageUsagePrice(serverId: string, storageUsedRoundUpToGB: number): string { diff --git a/src/Utils/PricingUtils.test.ts b/src/Utils/PricingUtils.test.ts index af1cedf66..fe9fe65c4 100644 --- a/src/Utils/PricingUtils.test.ts +++ b/src/Utils/PricingUtils.test.ts @@ -25,37 +25,37 @@ describe("PricingUtils Tests", () => { describe("computeRUUsagePriceHourly()", () => { it("should return 0 for NaN regions default cloud", () => { - const value = PricingUtils.computeRUUsagePriceHourly("default", false, 1, null, false); + const value = PricingUtils.computeRUUsagePriceHourly("default", 1, null, false); expect(value).toBe(0); }); it("should return 0 for -1 regions", () => { - const value = PricingUtils.computeRUUsagePriceHourly("default", false, 1, -1, false); + const value = PricingUtils.computeRUUsagePriceHourly("default", 1, -1, false); expect(value).toBe(0); }); - it("should return 0.00008 for default cloud, rupm disabled, 1RU, 1 region, multimaster disabled", () => { - const value = PricingUtils.computeRUUsagePriceHourly("default", false, 1, 1, false); + it("should return 0.00008 for default cloud, 1RU, 1 region, multimaster disabled", () => { + const value = PricingUtils.computeRUUsagePriceHourly("default", 1, 1, false); expect(value).toBe(0.00008); }); - it("should return 0.00051 for Mooncake cloud, rupm disabled, 1RU, 1 region, multimaster disabled", () => { - const value = PricingUtils.computeRUUsagePriceHourly("mooncake", false, 1, 1, false); + it("should return 0.00051 for Mooncake cloud, 1RU, 1 region, multimaster disabled", () => { + const value = PricingUtils.computeRUUsagePriceHourly("mooncake", 1, 1, false); expect(value).toBe(0.00051); }); - it("should return 0.00016 for default cloud, rupm disabled, 1RU, 2 regions, multimaster disabled", () => { - const value = PricingUtils.computeRUUsagePriceHourly("default", false, 1, 2, false); + it("should return 0.00016 for default cloud, 1RU, 2 regions, multimaster disabled", () => { + const value = PricingUtils.computeRUUsagePriceHourly("default", 1, 2, false); expect(value).toBe(0.00016); }); - it("should return 0.00008 for default cloud, rupm disabled, 1RU, 1 region, multimaster enabled", () => { - const value = PricingUtils.computeRUUsagePriceHourly("default", false, 1, 1, true); + it("should return 0.00008 for default cloud, 1RU, 1 region, multimaster enabled", () => { + const value = PricingUtils.computeRUUsagePriceHourly("default", 1, 1, true); expect(value).toBe(0.00008); }); - it("should return 0.00048 for default cloud, rupm disabled, 1RU, 2 region, multimaster enabled", () => { - const value = PricingUtils.computeRUUsagePriceHourly("default", false, 1, 2, true); + it("should return 0.00048 for default cloud, 1RU, 2 region, multimaster enabled", () => { + const value = PricingUtils.computeRUUsagePriceHourly("default", 1, 2, true); expect(value).toBe(0.00048); }); }); @@ -150,18 +150,6 @@ describe("PricingUtils Tests", () => { }); }); - describe("getPricePerRuPm()", () => { - it("should return 0.000027397260273972603 for default clouds", () => { - const value = PricingUtils.getPricePerRuPm("default"); - expect(value).toBe(0.000027397260273972603); - }); - - it("should return 0.00027397260273972606 for mooncake", () => { - const value = PricingUtils.getPricePerRuPm("mooncake"); - expect(value).toBe(0.00027397260273972606); - }); - }); - describe("getRegionMultiplier()", () => { describe("without multimaster", () => { it("should return 0 for null", () => { @@ -254,52 +242,48 @@ describe("PricingUtils Tests", () => { }); describe("getEstimatedSpendHtml()", () => { - it("should return 'Estimated cost (USD): $0.000080 hourly / $0.0019 daily / $0.058 monthly (1 region, 1RU/s, $0.00008/RU)' for 1RU/s on default cloud, 1 region, with multimaster, and no rupm", () => { + it("should return 'Estimated cost (USD): $0.000080 hourly / $0.0019 daily / $0.058 monthly (1 region, 1RU/s, $0.00008/RU)' for 1RU/s on default cloud, 1 region, with multimaster", () => { const value = PricingUtils.getEstimatedSpendHtml( 1 /*RU/s*/, "default" /* cloud */, 1 /* region */, - true /* multimaster */, - false /* rupm */ + true /* multimaster */ ); expect(value).toBe( "Estimated cost (USD): $0.000080 hourly / $0.0019 daily / $0.058 monthly (1 region, 1RU/s, $0.00008/RU)" ); }); - it("should return 'Estimated cost (RMB): ¥0.00051 hourly / ¥0.012 daily / ¥0.37 monthly (1 region, 1RU/s, ¥0.00051/RU)' for 1RU/s on mooncake, 1 region, with multimaster, and no rupm", () => { + it("should return 'Estimated cost (RMB): ¥0.00051 hourly / ¥0.012 daily / ¥0.37 monthly (1 region, 1RU/s, ¥0.00051/RU)' for 1RU/s on mooncake, 1 region, with multimaster", () => { const value = PricingUtils.getEstimatedSpendHtml( 1 /*RU/s*/, "mooncake" /* cloud */, 1 /* region */, - true /* multimaster */, - false /* rupm */ + true /* multimaster */ ); expect(value).toBe( "Estimated cost (RMB): ¥0.00051 hourly / ¥0.012 daily / ¥0.37 monthly (1 region, 1RU/s, ¥0.00051/RU)" ); }); - it("should return 'Estimated cost (USD): $0.13 hourly / $3.07 daily / $140.16 monthly (2 regions, 400RU/s, $0.00016/RU)' for 400RU/s on default cloud, 2 region, with multimaster, and no rupm", () => { + it("should return 'Estimated cost (USD): $0.13 hourly / $3.07 daily / $140.16 monthly (2 regions, 400RU/s, $0.00016/RU)' for 400RU/s on default cloud, 2 region, with multimaster", () => { const value = PricingUtils.getEstimatedSpendHtml( 400 /*RU/s*/, "default" /* cloud */, 2 /* region */, - true /* multimaster */, - false /* rupm */ + true /* multimaster */ ); expect(value).toBe( "Estimated cost (USD): $0.19 hourly / $4.61 daily / $140.16 monthly (2 regions, 400RU/s, $0.00016/RU)" ); }); - it("should return 'Estimated cost (USD): $0.064 hourly / $1.54 daily / $46.72 monthly (2 regions, 400RU/s, $0.00008/RU)' for 400RU/s on default cloud, 2 region, without multimaster, and no rupm", () => { + it("should return 'Estimated cost (USD): $0.064 hourly / $1.54 daily / $46.72 monthly (2 regions, 400RU/s, $0.00008/RU)' for 400RU/s on default cloud, 2 region, without multimaster", () => { const value = PricingUtils.getEstimatedSpendHtml( 400 /*RU/s*/, "default" /* cloud */, 2 /* region */, - false /* multimaster */, - false /* rupm */ + false /* multimaster */ ); expect(value).toBe( "Estimated cost (USD): $0.064 hourly / $1.54 daily / $46.72 monthly (2 regions, 400RU/s, $0.00008/RU)" @@ -308,49 +292,45 @@ describe("PricingUtils Tests", () => { }); describe("getEstimatedSpendAcknowledgeString()", () => { - it("should return 'I acknowledge the estimated $0.0019 daily cost for the throughput above.' for 1RU/s on default cloud, 1 region, with multimaster, and no rupm", () => { + it("should return 'I acknowledge the estimated $0.0019 daily cost for the throughput above.' for 1RU/s on default cloud, 1 region, with multimaster", () => { const value = PricingUtils.getEstimatedSpendAcknowledgeString( 1 /*RU/s*/, "default" /* cloud */, 1 /* region */, true /* multimaster */, - false /* rupm */, false ); expect(value).toBe("I acknowledge the estimated $0.0019 daily cost for the throughput above."); }); - it("should return 'I acknowledge the estimated ¥0.012 daily cost for the throughput above.' for 1RU/s on mooncake, 1 region, with multimaster, and no rupm", () => { + it("should return 'I acknowledge the estimated ¥0.012 daily cost for the throughput above.' for 1RU/s on mooncake, 1 region, with multimaster", () => { const value = PricingUtils.getEstimatedSpendAcknowledgeString( 1 /*RU/s*/, "mooncake" /* cloud */, 1 /* region */, true /* multimaster */, - false /* rupm */, false ); expect(value).toBe("I acknowledge the estimated ¥0.012 daily cost for the throughput above."); }); - it("should return 'I acknowledge the estimated $3.07 daily cost for the throughput above.' for 400RU/s on default cloud, 2 region, with multimaster, and no rupm", () => { + it("should return 'I acknowledge the estimated $3.07 daily cost for the throughput above.' for 400RU/s on default cloud, 2 region, with multimaster", () => { const value = PricingUtils.getEstimatedSpendAcknowledgeString( 400 /*RU/s*/, "default" /* cloud */, 2 /* region */, true /* multimaster */, - false /* rupm */, false ); expect(value).toBe("I acknowledge the estimated $4.61 daily cost for the throughput above."); }); - it("should return 'I acknowledge the estimated $1.54 daily cost for the throughput above.' for 400RU/s on default cloud, 2 region, without multimaster, and no rupm", () => { + it("should return 'I acknowledge the estimated $1.54 daily cost for the throughput above.' for 400RU/s on default cloud, 2 region, without multimaster", () => { const value = PricingUtils.getEstimatedSpendAcknowledgeString( 400 /*RU/s*/, "default" /* cloud */, 2 /* region */, false /* multimaster */, - false /* rupm */, false ); expect(value).toBe("I acknowledge the estimated $1.54 daily cost for the throughput above."); diff --git a/src/Utils/PricingUtils.ts b/src/Utils/PricingUtils.ts index bb063d63e..d0515e5ec 100644 --- a/src/Utils/PricingUtils.ts +++ b/src/Utils/PricingUtils.ts @@ -49,21 +49,16 @@ export function getMultimasterMultiplier(numberOfRegions: number, multimasterEna export function computeRUUsagePriceHourly( serverId: string, - rupmEnabled: boolean, requestUnits: number, numberOfRegions: number, multimasterEnabled: boolean ): number { const regionMultiplier: number = getRegionMultiplier(numberOfRegions, multimasterEnabled); const multimasterMultiplier: number = getMultimasterMultiplier(numberOfRegions, multimasterEnabled); - const pricePerRu = getPricePerRu(serverId); - const pricePerRuPm = getPricePerRuPm(serverId); - const ruCharge = requestUnits * pricePerRu * multimasterMultiplier * regionMultiplier; - const rupmCharge = rupmEnabled ? requestUnits * pricePerRuPm : 0; - return Number((ruCharge + rupmCharge).toFixed(5)); + return Number(ruCharge.toFixed(5)); } export function getPriceCurrency(serverId: string): string { @@ -149,14 +144,6 @@ export function getPricePerRu(serverId: string): number { return Constants.OfferPricing.HourlyPricing.default.Standard.PricePerRU; } -export function getPricePerRuPm(serverId: string): number { - if (serverId === "mooncake") { - return Constants.OfferPricing.HourlyPricing.mooncake.Standard.PricePerRUPM; - } - - return Constants.OfferPricing.HourlyPricing.default.Standard.PricePerRUPM; -} - export function getAutoPilotV3SpendHtml(maxAutoPilotThroughputSet: number, isDatabaseThroughput: boolean): string { if (!maxAutoPilotThroughputSet) { return ""; @@ -214,10 +201,9 @@ export function getEstimatedSpendHtml( throughput: number, serverId: string, regions: number, - multimaster: boolean, - rupmEnabled: boolean + multimaster: boolean ): string { - const hourlyPrice: number = computeRUUsagePriceHourly(serverId, rupmEnabled, throughput, regions, multimaster); + const hourlyPrice: number = computeRUUsagePriceHourly(serverId, throughput, regions, multimaster); const dailyPrice: number = hourlyPrice * 24; const monthlyPrice: number = hourlyPrice * Constants.hoursInAMonth; const currency: string = getPriceCurrency(serverId); @@ -238,12 +224,11 @@ export function getEstimatedSpendAcknowledgeString( serverId: string, regions: number, multimaster: boolean, - rupmEnabled: boolean, isAutoscale: boolean ): string { const hourlyPrice: number = isAutoscale ? computeAutoscaleUsagePriceHourly(serverId, throughput, regions, multimaster) - : computeRUUsagePriceHourly(serverId, rupmEnabled, throughput, regions, multimaster); + : computeRUUsagePriceHourly(serverId, throughput, regions, multimaster); const dailyPrice: number = hourlyPrice * 24; const monthlyPrice: number = hourlyPrice * Constants.hoursInAMonth; const currencySign: string = getCurrencySign(serverId);