Skip to content

Commit a9f0522

Browse files
authored
Merge pull request #188 from gregolsky/v4.0
minor fixes
2 parents ec135d0 + eef69c8 commit a9f0522

File tree

3 files changed

+57
-58
lines changed

3 files changed

+57
-58
lines changed

Diff for: src/Documents/Conventions/DocumentConventions.ts

+13-13
Original file line numberDiff line numberDiff line change
@@ -50,10 +50,11 @@ export class DocumentConventions {
5050

5151
private _transformClassCollectionNameToDocumentIdPrefix: (maybeClassCollectionName: string) => string;
5252
private _documentIdGenerator: IdConvention;
53-
private _findIdentityPropertyNameFromCollectionName: (collectionName: string) => string;
5453

5554
private _findCollectionName: (constructorOrTypeChecker: ObjectTypeDescriptor) => string;
5655

56+
private _identityProperty: string;
57+
5758
private _findJsTypeName: (ctorOrTypeChecker: ObjectTypeDescriptor) => string;
5859
private _findJsType: (id: string, doc: object) => ObjectTypeDescriptor;
5960

@@ -77,8 +78,7 @@ export class DocumentConventions {
7778
public constructor() {
7879
this._readBalanceBehavior = "None";
7980
this._identityPartsSeparator = "/";
80-
81-
this._findIdentityPropertyNameFromCollectionName = () => "id";
81+
this._identityProperty = CONSTANTS.Documents.Metadata.ID_PROPERTY;
8282

8383
this._findJsType = (id: string, doc: object) => {
8484
const metadata = doc[CONSTANTS.Documents.Metadata.KEY];
@@ -271,6 +271,15 @@ export class DocumentConventions {
271271
this._useOptimisticConcurrency = useOptimisticConcurrency;
272272
}
273273

274+
public get identityProperty() {
275+
return this._identityProperty;
276+
}
277+
278+
public set identityProperty(val) {
279+
this._assertNotFrozen();
280+
this._identityProperty = val;
281+
}
282+
274283
public get findJsType() {
275284
return this._findJsType;
276285
}
@@ -298,15 +307,6 @@ export class DocumentConventions {
298307
this._findCollectionName = value;
299308
}
300309

301-
public get findIdentityPropertyNameFromCollectionName() {
302-
return this._findIdentityPropertyNameFromCollectionName;
303-
}
304-
305-
public set findIdentityPropertyNameFromCollectionName(value) {
306-
this._assertNotFrozen();
307-
this._findIdentityPropertyNameFromCollectionName = value;
308-
}
309-
310310
public get documentIdGenerator() {
311311
return this._documentIdGenerator;
312312
}
@@ -500,7 +500,7 @@ export class DocumentConventions {
500500
public getIdentityProperty(documentType: DocumentType): string {
501501
const typeDescriptor = this.getJsTypeByDocumentType(documentType);
502502
return this._registeredIdPropertyNames.get(typeDescriptor)
503-
|| CONSTANTS.Documents.Metadata.ID_PROPERTY;
503+
|| this._identityProperty;
504504
}
505505

506506
public updateFrom(configuration: ClientConfiguration): void {

Diff for: src/Http/RequestExecutor.ts

+40-41
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ import * as os from "os";
22
import * as BluebirdPromise from "bluebird";
33
import * as semaphore from "semaphore";
44
import * as stream from "readable-stream";
5-
import { acquireSemaphore } from "../Utility/SemaphoreUtil";
5+
import { acquireSemaphore, AcquiredSemaphoreContext } from "../Utility/SemaphoreUtil";
66
import { getLogger, ILogger } from "../Utility/LogUtil";
77
import { Timer } from "../Primitives/Timer";
88
import { ServerNode } from "./ServerNode";
@@ -327,54 +327,53 @@ export class RequestExecutor implements IDisposable {
327327
.then(() => this._nodeSelector.getFastestNode());
328328
}
329329

330-
protected _updateClientConfiguration(): PromiseLike<void> {
331-
if (this._disposed) {
332-
return BluebirdPromise.resolve(null);
333-
}
330+
private async _updateClientConfigurationInternal(): Promise<void> {
331+
const oldDisableClientConfigurationUpdates = this._disableClientConfigurationUpdates;
332+
this._disableClientConfigurationUpdates = true;
334333

335-
const updateClientConfigurationInternal = () => {
336-
const oldDisableClientConfigurationUpdates = this._disableClientConfigurationUpdates;
337-
this._disableClientConfigurationUpdates = true;
334+
try {
335+
if (this._disposed) {
336+
return;
337+
}
338338

339-
return BluebirdPromise.resolve()
340-
.then(() => {
339+
const command = new GetClientConfigurationCommand();
340+
const { currentNode, currentIndex } = this.chooseNodeForRequest(command, null);
341+
await this.execute(command, null, {
342+
chosenNode: currentNode,
343+
nodeIndex: currentIndex,
344+
shouldRetry: false
345+
});
341346

342-
if (this._disposed) {
343-
return;
344-
}
347+
const clientConfigOpResult = command.result;
348+
if (!clientConfigOpResult) {
349+
return;
350+
}
345351

346-
const command = new GetClientConfigurationCommand();
347-
const currentIndexAndNode2: CurrentIndexAndNode = this.chooseNodeForRequest(command, null);
348-
return this.execute(command, null, {
349-
chosenNode: currentIndexAndNode2.currentNode,
350-
nodeIndex: currentIndexAndNode2.currentIndex,
351-
shouldRetry: false
352-
})
353-
.then(() => command.result);
354-
})
355-
.then((clientConfigOpResult: GetClientConfigurationOperationResult) => {
356-
if (!clientConfigOpResult) {
357-
return;
358-
}
352+
this._conventions.updateFrom(clientConfigOpResult.configuration);
353+
this._clientConfigurationEtag = clientConfigOpResult.etag;
354+
} catch (err) {
355+
this._log.error(err, "Error getting client configuration.");
356+
} finally {
357+
this._disableClientConfigurationUpdates = oldDisableClientConfigurationUpdates;
358+
}
359+
}
359360

360-
this._conventions.updateFrom(clientConfigOpResult.configuration);
361-
this._clientConfigurationEtag = clientConfigOpResult.etag;
361+
protected async _updateClientConfiguration(): Promise<void> {
362+
if (this._disposed) {
363+
return;
364+
}
362365

363-
})
364-
.tapCatch(err => this._log.error(err, "Error getting client configuration."))
365-
.finally(() => {
366-
this._disableClientConfigurationUpdates = oldDisableClientConfigurationUpdates;
367-
});
368-
};
366+
let semAcquiredContext: AcquiredSemaphoreContext;
369367

370-
const semAcquiredContext = acquireSemaphore(this._updateClientConfigurationSemaphore);
371-
const result = BluebirdPromise.resolve(semAcquiredContext.promise)
372-
.then(() => updateClientConfigurationInternal())
373-
.finally(() => {
368+
try {
369+
semAcquiredContext = acquireSemaphore(this._updateClientConfigurationSemaphore);
370+
await semAcquiredContext.promise;
371+
await this._updateClientConfigurationInternal();
372+
} finally {
373+
if (semAcquiredContext) {
374374
semAcquiredContext.dispose();
375-
});
376-
377-
return Promise.resolve(result);
375+
}
376+
}
378377
}
379378

380379
public updateTopology(node: ServerNode, timeout: number, forceUpdate: boolean = false): Promise<boolean> {

Diff for: test/Documents/CustomKeyCaseConventionsTests.ts

+4-4
Original file line numberDiff line numberDiff line change
@@ -90,7 +90,7 @@ describe("With custom key case conventions set", function () {
9090
s.conventions.findCollectionNameForObjectLiteral = (o) => o["collection"];
9191
s.conventions.entityFieldNameConvention = "camel";
9292
s.conventions.remoteEntityFieldNameConvention = "pascal";
93-
s.conventions.findIdentityPropertyNameFromCollectionName = () => "Id";
93+
s.conventions.identityProperty = "Id";
9494
s.conventions.registerEntityIdPropertyName(Object, "Id");
9595
});
9696

@@ -129,7 +129,7 @@ describe("With custom key case conventions set", function () {
129129
s.conventions.findCollectionNameForObjectLiteral = (o) => o["collection"];
130130
s.conventions.entityFieldNameConvention = "camel";
131131
s.conventions.remoteEntityFieldNameConvention = "pascal";
132-
s.conventions.findIdentityPropertyNameFromCollectionName = () => "Id";
132+
s.conventions.identityProperty = "Id";
133133
s.conventions.registerEntityIdPropertyName(Object, "Id");
134134
});
135135

@@ -190,7 +190,7 @@ describe("With custom key case conventions set", function () {
190190
s.conventions.findCollectionNameForObjectLiteral = (o) => o["collection"];
191191
s.conventions.entityFieldNameConvention = "camel";
192192
s.conventions.remoteEntityFieldNameConvention = "pascal";
193-
s.conventions.findIdentityPropertyNameFromCollectionName = () => "Id";
193+
s.conventions.identityProperty = "Id";
194194
s.conventions.registerEntityIdPropertyName(Object, "Id");
195195
});
196196

@@ -226,7 +226,7 @@ describe("With custom key case conventions set", function () {
226226
s.conventions.findCollectionNameForObjectLiteral = (o) => o["collection"];
227227
s.conventions.entityFieldNameConvention = "camel";
228228
s.conventions.remoteEntityFieldNameConvention = "pascal";
229-
s.conventions.findIdentityPropertyNameFromCollectionName = () => "Id";
229+
s.conventions.identityProperty = "Id";
230230
s.conventions.registerEntityIdPropertyName(Object, "Id");
231231
});
232232

0 commit comments

Comments
 (0)