@powersync/service-core 0.2.1 → 0.2.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,14 @@
1
1
  # @powersync/service-core
2
2
 
3
+ ## 0.2.2
4
+
5
+ ### Patch Changes
6
+
7
+ - 8245912: Fix teardown command not terminating after some errors.
8
+ - 7587a74: Fix date parsing in replication for dates further back than 100 AD.
9
+ - Updated dependencies [7587a74]
10
+ - @powersync/service-jpgwire@0.17.13
11
+
3
12
  ## 0.2.1
4
13
 
5
14
  ### Patch Changes
@@ -26,9 +26,9 @@ async function terminateReplicator(storageFactory, connection, syncRules) {
26
26
  source_db: connection,
27
27
  lock
28
28
  });
29
- console.log('terminating', stream.slot_name);
29
+ micro.logger.info(`Terminating replication slot ${stream.slot_name}`);
30
30
  await stream.terminate();
31
- console.log('terminated', stream.slot_name);
31
+ micro.logger.info(`Terminated replication slot ${stream.slot_name}`);
32
32
  }
33
33
  finally {
34
34
  await lock.release();
@@ -66,14 +66,29 @@ async function terminateReplicators(storageFactory, connection) {
66
66
  export async function teardown(runnerConfig) {
67
67
  const config = await utils.loadConfig(runnerConfig);
68
68
  const mongoDB = storage.createPowerSyncMongo(config.storage);
69
- await db.mongo.waitForAuth(mongoDB.db);
70
- const bucketStorage = new storage.MongoBucketStorage(mongoDB, { slot_name_prefix: config.slot_name_prefix });
71
- const connection = config.connection;
72
- if (connection) {
73
- await terminateReplicators(bucketStorage, connection);
69
+ try {
70
+ micro.logger.info(`Waiting for auth`);
71
+ await db.mongo.waitForAuth(mongoDB.db);
72
+ const bucketStorage = new storage.MongoBucketStorage(mongoDB, { slot_name_prefix: config.slot_name_prefix });
73
+ const connection = config.connection;
74
+ micro.logger.info(`Terminating replication slots`);
75
+ if (connection) {
76
+ await terminateReplicators(bucketStorage, connection);
77
+ }
78
+ const database = mongoDB.db;
79
+ micro.logger.info(`Dropping database ${database.namespace}`);
80
+ await database.dropDatabase();
81
+ micro.logger.info(`Done`);
82
+ await mongoDB.client.close();
83
+ // If there was an error connecting to postgress, the process may stay open indefinitely.
84
+ // This forces an exit.
85
+ // We do not consider those errors a teardown failure.
86
+ process.exit(0);
87
+ }
88
+ catch (e) {
89
+ micro.logger.error(`Teardown failure`, e);
90
+ await mongoDB.client.close();
91
+ process.exit(1);
74
92
  }
75
- const database = mongoDB.db;
76
- await database.dropDatabase();
77
- await mongoDB.client.close();
78
93
  }
79
94
  //# sourceMappingURL=teardown.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"teardown.js","sourceRoot":"","sources":["../../src/runner/teardown.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"teardown.js","sourceRoot":"","sources":["../../src/runner/teardown.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -5,7 +5,7 @@
5
5
  "publishConfig": {
6
6
  "access": "public"
7
7
  },
8
- "version": "0.2.1",
8
+ "version": "0.2.2",
9
9
  "main": "dist/index.js",
10
10
  "license": "FSL-1.1-Apache-2.0",
11
11
  "type": "module",
@@ -33,10 +33,10 @@
33
33
  "ts-codec": "^1.2.2",
34
34
  "uuid": "^9.0.1",
35
35
  "yaml": "^2.3.2",
36
- "@powersync/service-jpgwire": "0.17.12",
36
+ "@powersync/service-jpgwire": "0.17.13",
37
37
  "@powersync/service-jsonbig": "0.17.10",
38
- "@powersync/service-rsocket-router": "0.0.7",
39
38
  "@powersync/service-sync-rules": "0.17.10",
39
+ "@powersync/service-rsocket-router": "0.0.7",
40
40
  "@powersync/service-types": "0.1.0"
41
41
  },
42
42
  "devDependencies": {
@@ -33,9 +33,10 @@ async function terminateReplicator(
33
33
  source_db: connection,
34
34
  lock
35
35
  });
36
- console.log('terminating', stream.slot_name);
36
+
37
+ micro.logger.info(`Terminating replication slot ${stream.slot_name}`);
37
38
  await stream.terminate();
38
- console.log('terminated', stream.slot_name);
39
+ micro.logger.info(`Terminated replication slot ${stream.slot_name}`);
39
40
  } finally {
40
41
  await lock.release();
41
42
  }
@@ -76,16 +77,32 @@ async function terminateReplicators(
76
77
  export async function teardown(runnerConfig: utils.RunnerConfig) {
77
78
  const config = await utils.loadConfig(runnerConfig);
78
79
  const mongoDB = storage.createPowerSyncMongo(config.storage);
79
- await db.mongo.waitForAuth(mongoDB.db);
80
+ try {
81
+ micro.logger.info(`Waiting for auth`);
82
+ await db.mongo.waitForAuth(mongoDB.db);
80
83
 
81
- const bucketStorage = new storage.MongoBucketStorage(mongoDB, { slot_name_prefix: config.slot_name_prefix });
82
- const connection = config.connection;
84
+ const bucketStorage = new storage.MongoBucketStorage(mongoDB, { slot_name_prefix: config.slot_name_prefix });
85
+ const connection = config.connection;
83
86
 
84
- if (connection) {
85
- await terminateReplicators(bucketStorage, connection);
86
- }
87
+ micro.logger.info(`Terminating replication slots`);
87
88
 
88
- const database = mongoDB.db;
89
- await database.dropDatabase();
90
- await mongoDB.client.close();
89
+ if (connection) {
90
+ await terminateReplicators(bucketStorage, connection);
91
+ }
92
+
93
+ const database = mongoDB.db;
94
+ micro.logger.info(`Dropping database ${database.namespace}`);
95
+ await database.dropDatabase();
96
+ micro.logger.info(`Done`);
97
+ await mongoDB.client.close();
98
+
99
+ // If there was an error connecting to postgress, the process may stay open indefinitely.
100
+ // This forces an exit.
101
+ // We do not consider those errors a teardown failure.
102
+ process.exit(0);
103
+ } catch (e) {
104
+ micro.logger.error(`Teardown failure`, e);
105
+ await mongoDB.client.close();
106
+ process.exit(1);
107
+ }
91
108
  }
@@ -86,6 +86,12 @@ VALUES(6, 'epoch'::timestamp, 'epoch'::timestamptz);
86
86
 
87
87
  INSERT INTO test_data(id, timestamp, timestamptz)
88
88
  VALUES(7, 'infinity'::timestamp, 'infinity'::timestamptz);
89
+
90
+ INSERT INTO test_data(id, timestamptz)
91
+ VALUES(8, '0022-02-03 12:13:14+03'::timestamptz);
92
+
93
+ INSERT INTO test_data(id, timestamptz)
94
+ VALUES(9, '10022-02-03 12:13:14+03'::timestamptz);
89
95
  `);
90
96
  }
91
97
 
@@ -186,6 +192,18 @@ VALUES(10, ARRAY['null']::TEXT[]);
186
192
  timestamp: '9999-12-31 23:59:59',
187
193
  timestamptz: '9999-12-31 23:59:59Z'
188
194
  });
195
+
196
+ expect(transformed[7]).toMatchObject({
197
+ id: 8n,
198
+ timestamptz: '0022-02-03 09:13:14Z'
199
+ });
200
+
201
+ expect(transformed[8]).toMatchObject({
202
+ id: 9n,
203
+ // 10022-02-03 12:13:14+03 - out of range of both our date parsing logic, and sqlite's date functions
204
+ // We can consider just preserving the source string as an alternative if this causes issues.
205
+ timestamptz: null
206
+ });
189
207
  }
190
208
 
191
209
  function checkResultArrays(transformed: Record<string, any>[]) {