Skip to content

Commit 2441875

Browse files
committed
update
1 parent 9c6e8ee commit 2441875

16 files changed

+360
-296
lines changed

lib/core/odp/odp_event_manager.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ import { OdpConfig } from './odp_config';
2424
import { IOdpEventApiManager } from './odp_event_api_manager';
2525
import { invalidOdpDataFound } from './odp_utils';
2626
import { IUserAgentParser } from './user_agent_parser';
27-
import { scheduleMicrotaskOrTimeout } from '../../utils/microtask';
27+
import { scheduleMicrotask } from '../../utils/microtask';
2828

2929
const MAX_RETRIES = 3;
3030

@@ -394,7 +394,7 @@ export abstract class OdpEventManager implements IOdpEventManager {
394394

395395
if (batch.length > 0) {
396396
// put sending the event on another event loop
397-
scheduleMicrotaskOrTimeout(async () => {
397+
scheduleMicrotask(async () => {
398398
let shouldRetry: boolean;
399399
let attemptNumber = 0;
400400
do {

lib/core/project_config/project_config_manager.ts

Lines changed: 0 additions & 276 deletions
This file was deleted.

lib/modules/datafile-manager/httpPollingDatafileManager.ts

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -98,8 +98,12 @@ export class HttpPollingDatafileManager implements DatafileManager {
9898
if (updateInterval < MIN_UPDATE_INTERVAL) {
9999
logger.warn(UPDATE_INTERVAL_BELOW_MINIMUM_MESSAGE);
100100
}
101+
102+
// avoid unhandled promise rejection
103+
this.startPromise.promise.catch(() => {});
104+
this.startPromise.promise.catch(() => {});
101105
}
102-
106+
103107
onUpdate(listener: Consumer<string>): Fn {
104108
return this.emitter.on('update', listener);
105109
}
@@ -154,7 +158,9 @@ export class HttpPollingDatafileManager implements DatafileManager {
154158
private async handleInitFailure(): Promise<void> {
155159
this.state = ServiceState.Failed;
156160
this.ticker.stop();
157-
this.startPromise.reject(new Error('Failed to fetch datafile'));
161+
const error = new Error('Failed to fetch datafile');
162+
this.startPromise.reject(error);
163+
this.stopPrommise.reject(error);
158164
}
159165

160166
private async handleError(errorOrStatus: Error | number): Promise<void> {

lib/optimizely/index.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ import {
4242
import { newErrorDecision } from '../optimizely_decision';
4343
import OptimizelyUserContext from '../optimizely_user_context';
4444
// import { createProjectConfigManager, ProjectConfigManager } from '../core/project_config/project_config_manager';
45-
import { ProjectConfigManager } from '../project_config/project_config_manager';
45+
import { ProjectConfigManager } from '../project_config__/project_config_manager';
4646
import { createDecisionService, DecisionService, DecisionObj } from '../core/decision_service';
4747
import { getImpressionEvent, getConversionEvent } from '../core/event_builder';
4848
import { buildImpressionEvent, buildConversionEvent } from '../core/event_builder/event_helpers';

lib/service.ts

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,8 @@
1414
* limitations under the License.
1515
*/
1616

17+
import { resolvablePromise, ResolvablePromise } from "./utils/promise/resolvablePromise";
18+
1719

1820
/**
1921
* The service interface represents an object with an operational state,
@@ -37,3 +39,46 @@ export interface Service {
3739
stop(): void;
3840
onTerminated(): Promise<void>;
3941
}
42+
43+
export abstract class BaseService implements Service {
44+
protected state: ServiceState;
45+
protected startPromise: ResolvablePromise<void>;
46+
protected stopPromise: ResolvablePromise<void>;
47+
48+
constructor() {
49+
this.state = ServiceState.New;
50+
this.startPromise = resolvablePromise();
51+
this.stopPromise = resolvablePromise();
52+
53+
// avoid unhandled promise rejection
54+
this.startPromise.promise.catch(() => {});
55+
this.stopPromise.promise.catch(() => {});
56+
}
57+
58+
onRunning(): Promise<void> {
59+
return this.startPromise.promise;
60+
}
61+
62+
onTerminated(): Promise<void> {
63+
return this.stopPromise.promise;
64+
}
65+
66+
getState(): ServiceState {
67+
return this.state;
68+
}
69+
70+
protected isNew(): boolean {
71+
return this.state === ServiceState.New;
72+
}
73+
74+
protected isDone(): boolean {
75+
return [
76+
ServiceState.Stopping,
77+
ServiceState.Terminated,
78+
ServiceState.Failed
79+
].includes(this.state);
80+
}
81+
82+
abstract start(): void;
83+
abstract stop(): void;
84+
}

lib/shared_types.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ import { IOdpManager } from './core/odp/odp_manager';
3838
import { IUserAgentParser } from './core/odp/user_agent_parser';
3939
import PersistentCache from './plugins/key_value_cache/persistentKeyValueCache';
4040
import { ProjectConfig } from './core/project_config';
41-
import { ProjectConfigManager } from './project_config/project_config_manager';
41+
import { ProjectConfigManager } from './project_config__/project_config_manager';
4242

4343
export interface BucketerParams {
4444
experimentId: string;

0 commit comments

Comments
 (0)