Skip to content

Commit e078efb

Browse files
committed
Merge branch 'improve-logging' into devbuild
2 parents 2d52f71 + bd9b9fa commit e078efb

File tree

6 files changed

+34
-17
lines changed

6 files changed

+34
-17
lines changed

.changeset/fresh-laws-join.md

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
---
2+
'@powersync/react-native': minor
3+
'@powersync/common': minor
4+
'@powersync/node': minor
5+
'@powersync/web': minor
6+
---
7+
8+
Propagate logger from PowerSyncDatabase to streaming sync implementation.

packages/common/src/client/AbstractPowerSyncDatabase.ts

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -127,7 +127,6 @@ export const DEFAULT_WATCH_THROTTLE_MS = 30;
127127

128128
export const DEFAULT_POWERSYNC_DB_OPTIONS = {
129129
retryDelayMs: 5000,
130-
logger: Logger.get('PowerSyncDatabase'),
131130
crudUploadThrottleMs: DEFAULT_CRUD_UPLOAD_THROTTLE_MS
132131
};
133132

@@ -182,6 +181,8 @@ export abstract class AbstractPowerSyncDatabase extends BaseObserver<PowerSyncDB
182181

183182
protected runExclusiveMutex: Mutex;
184183

184+
logger: ILogger;
185+
185186
constructor(options: PowerSyncDatabaseOptionsWithDBAdapter);
186187
constructor(options: PowerSyncDatabaseOptionsWithOpenFactory);
187188
constructor(options: PowerSyncDatabaseOptionsWithSettings);
@@ -205,6 +206,8 @@ export abstract class AbstractPowerSyncDatabase extends BaseObserver<PowerSyncDB
205206
throw new Error('The provided `database` option is invalid.');
206207
}
207208

209+
this.logger = options.logger ?? Logger.get(`PowerSyncDatabase[${this._database.name}]`);
210+
208211
this.bucketStorageAdapter = this.generateBucketStorageAdapter();
209212
this.closed = false;
210213
this.currentStatus = new SyncStatus({});
@@ -425,7 +428,7 @@ export abstract class AbstractPowerSyncDatabase extends BaseObserver<PowerSyncDB
425428
try {
426429
schema.validate();
427430
} catch (ex) {
428-
this.options.logger?.warn('Schema validation failed. Unexpected behaviour could occur', ex);
431+
this.logger.warn('Schema validation failed. Unexpected behaviour could occur', ex);
429432
}
430433
this._schema = schema;
431434

@@ -434,10 +437,6 @@ export abstract class AbstractPowerSyncDatabase extends BaseObserver<PowerSyncDB
434437
this.iterateListeners(async (cb) => cb.schemaChanged?.(schema));
435438
}
436439

437-
get logger() {
438-
return this.options.logger!;
439-
}
440-
441440
/**
442441
* Wait for initialization to complete.
443442
* While initializing is automatic, this helps to catch and report initialization errors.
@@ -883,7 +882,7 @@ export abstract class AbstractPowerSyncDatabase extends BaseObserver<PowerSyncDB
883882
* @param options Options for configuring watch behavior
884883
*/
885884
watchWithCallback(sql: string, parameters?: any[], handler?: WatchHandler, options?: SQLWatchOptions): void {
886-
const { onResult, onError = (e: Error) => this.options.logger?.error(e) } = handler ?? {};
885+
const { onResult, onError = (e: Error) => this.logger.error(e) } = handler ?? {};
887886
if (!onResult) {
888887
throw new Error('onResult is required');
889888
}
@@ -1038,7 +1037,7 @@ export abstract class AbstractPowerSyncDatabase extends BaseObserver<PowerSyncDB
10381037
* @returns A dispose function to stop watching for changes
10391038
*/
10401039
onChangeWithCallback(handler?: WatchOnChangeHandler, options?: SQLWatchOptions): () => void {
1041-
const { onChange, onError = (e: Error) => this.options.logger?.error(e) } = handler ?? {};
1040+
const { onChange, onError = (e: Error) => this.logger.error(e) } = handler ?? {};
10421041
if (!onChange) {
10431042
throw new Error('onChange is required');
10441043
}

packages/common/src/client/sync/stream/AbstractStreamingSyncImplementation.ts

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -327,9 +327,12 @@ export abstract class AbstractStreamingSyncImplementation
327327

328328
async getWriteCheckpoint(): Promise<string> {
329329
const clientId = await this.options.adapter.getClientId();
330+
this.logger.debug(`Creating write checkpoint for ${clientId}`);
330331
let path = `/write-checkpoint2.json?client_id=${clientId}`;
331332
const response = await this.options.remote.get(path);
332-
return response['data']['write_checkpoint'] as string;
333+
const checkpoint = response['data']['write_checkpoint'] as string;
334+
this.logger.debug(`Got write checkpoint: ${checkpoint}`);
335+
return checkpoint;
333336
}
334337

335338
protected async _uploadAllCrud(): Promise<void> {
@@ -371,7 +374,11 @@ The next upload iteration will be delayed.`);
371374
});
372375
} else {
373376
// Uploading is completed
374-
await this.options.adapter.updateLocalTarget(() => this.getWriteCheckpoint());
377+
this.logger.debug('Upload complete, creating write checkpoint');
378+
const neededUpdate = await this.options.adapter.updateLocalTarget(() => this.getWriteCheckpoint());
379+
if (neededUpdate == false) {
380+
this.logger.debug('No write checkpoint needed');
381+
}
375382
break;
376383
}
377384
} catch (ex) {

packages/node/src/db/PowerSyncDatabase.ts

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,7 @@ export class PowerSyncDatabase extends AbstractPowerSyncDatabase {
6464
}
6565

6666
protected generateBucketStorageAdapter(): BucketStorageAdapter {
67-
return new SqliteBucketStorage(this.database, AbstractPowerSyncDatabase.transactionMutex);
67+
return new SqliteBucketStorage(this.database, AbstractPowerSyncDatabase.transactionMutex, this.logger);
6868
}
6969

7070
connect(
@@ -92,7 +92,8 @@ export class PowerSyncDatabase extends AbstractPowerSyncDatabase {
9292
},
9393
retryDelayMs: this.options.retryDelayMs,
9494
crudUploadThrottleMs: this.options.crudUploadThrottleMs,
95-
identifier: this.database.name
95+
identifier: this.database.name,
96+
logger: this.logger
9697
});
9798
}
9899
}

packages/react-native/src/db/PowerSyncDatabase.ts

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -39,14 +39,14 @@ export class PowerSyncDatabase extends AbstractPowerSyncDatabase {
3939
}
4040

4141
protected generateBucketStorageAdapter(): BucketStorageAdapter {
42-
return new ReactNativeBucketStorageAdapter(this.database, AbstractPowerSyncDatabase.transactionMutex);
42+
return new ReactNativeBucketStorageAdapter(this.database, AbstractPowerSyncDatabase.transactionMutex, this.logger);
4343
}
4444

4545
protected generateSyncStreamImplementation(
4646
connector: PowerSyncBackendConnector,
4747
options: RequiredAdditionalConnectionOptions
4848
): AbstractStreamingSyncImplementation {
49-
const remote = new ReactNativeRemote(connector);
49+
const remote = new ReactNativeRemote(connector, this.logger);
5050

5151
return new ReactNativeStreamingSyncImplementation({
5252
adapter: this.bucketStorageAdapter,
@@ -57,7 +57,8 @@ export class PowerSyncDatabase extends AbstractPowerSyncDatabase {
5757
},
5858
retryDelayMs: options.retryDelayMs,
5959
crudUploadThrottleMs: options.crudUploadThrottleMs,
60-
identifier: this.database.name
60+
identifier: this.database.name,
61+
logger: this.logger
6162
});
6263
}
6364

packages/web/src/db/PowerSyncDatabase.ts

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -186,7 +186,7 @@ export class PowerSyncDatabase extends AbstractPowerSyncDatabase {
186186
connector: PowerSyncBackendConnector,
187187
options: RequiredAdditionalConnectionOptions
188188
): StreamingSyncImplementation {
189-
const remote = new WebRemote(connector);
189+
const remote = new WebRemote(connector, this.logger);
190190
const syncOptions: WebStreamingSyncImplementationOptions = {
191191
...(this.options as {}),
192192
retryDelayMs: options.retryDelayMs,
@@ -198,7 +198,8 @@ export class PowerSyncDatabase extends AbstractPowerSyncDatabase {
198198
await this.waitForReady();
199199
await connector.uploadData(this);
200200
},
201-
identifier: this.database.name
201+
identifier: this.database.name,
202+
logger: this.logger
202203
};
203204

204205
switch (true) {

0 commit comments

Comments
 (0)