prostgles-server 4.2.638 → 4.2.640
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/debug/sync-logging-build.log +4 -0
- package/debug/sync-logging-main.log +688 -0
- package/debug/sync-logging-server-build.log +0 -0
- package/debug/sync-race-client-build.log +12 -0
- package/debug/sync-race-main-e2e-final.log +659 -0
- package/debug/sync-race-main-e2e.log +643 -0
- package/debug/sync-race-server-build.log +11 -0
- package/debug/sync-race-test-lib-final.log +59 -0
- package/debug/sync-race-test-lib.log +59 -0
- package/debug/sync-review-build.log +4 -0
- package/debug/sync-review-client-build.log +0 -0
- package/debug/sync-review-main-final.log +685 -0
- package/debug/sync-review-main.log +644 -0
- package/debug/sync-review-server-build.log +0 -0
- package/debug/sync-review-syncData.js +147 -0
- package/debug/sync-review-without-reconcile.log +647 -0
- package/dist/Auth/AuthHandler.d.ts +2 -2
- package/dist/Auth/AuthHandler.d.ts.map +1 -1
- package/dist/Auth/AuthHandler.js.map +1 -1
- package/dist/Auth/AuthTypes.d.ts +2 -2
- package/dist/Auth/AuthTypes.d.ts.map +1 -1
- package/dist/Auth/utils/getClientRequestIPsInfo.d.ts +2 -2
- package/dist/Auth/utils/getClientRequestIPsInfo.d.ts.map +1 -1
- package/dist/DBEventsManager.d.ts +5 -5
- package/dist/DBEventsManager.d.ts.map +1 -1
- package/dist/DBEventsManager.js.map +1 -1
- package/dist/DboBuilder/DboBuilderTypes.d.ts +1 -1
- package/dist/DboBuilder/DboBuilderTypes.d.ts.map +1 -1
- package/dist/DboBuilder/runSql/QueryStreamer.d.ts +2 -2
- package/dist/DboBuilder/runSql/QueryStreamer.d.ts.map +1 -1
- package/dist/Logging.d.ts +4 -0
- package/dist/Logging.d.ts.map +1 -1
- package/dist/Prostgles.d.ts +4 -4
- package/dist/Prostgles.d.ts.map +1 -1
- package/dist/Prostgles.js.map +1 -1
- package/dist/ProstglesTypes.d.ts +3 -3
- package/dist/ProstglesTypes.d.ts.map +1 -1
- package/dist/PubSubManager/PubSubManager.d.ts +8 -7
- package/dist/PubSubManager/PubSubManager.d.ts.map +1 -1
- package/dist/PubSubManager/PubSubManager.js.map +1 -1
- package/dist/PubSubManager/SyncReplication/getSyncUtilFunctions.d.ts +2 -2
- package/dist/PubSubManager/SyncReplication/getSyncUtilFunctions.d.ts.map +1 -1
- package/dist/PubSubManager/SyncReplication/getSyncUtilFunctions.js +1 -3
- package/dist/PubSubManager/SyncReplication/getSyncUtilFunctions.js.map +1 -1
- package/dist/PubSubManager/SyncReplication/logSyncError.d.ts +6 -0
- package/dist/PubSubManager/SyncReplication/logSyncError.d.ts.map +1 -0
- package/dist/PubSubManager/SyncReplication/logSyncError.js +18 -0
- package/dist/PubSubManager/SyncReplication/logSyncError.js.map +1 -0
- package/dist/PubSubManager/SyncReplication/syncData.d.ts.map +1 -1
- package/dist/PubSubManager/SyncReplication/syncData.js +48 -27
- package/dist/PubSubManager/SyncReplication/syncData.js.map +1 -1
- package/dist/PubSubManager/addSync.d.ts.map +1 -1
- package/dist/PubSubManager/addSync.js +3 -3
- package/dist/PubSubManager/addSync.js.map +1 -1
- package/dist/PubSubManager/addTrigger.d.ts +2 -2
- package/dist/PubSubManager/addTrigger.d.ts.map +1 -1
- package/dist/PubSubManager/addTrigger.js.map +1 -1
- package/dist/TableConfig/getCreateSchemaQueries.d.ts.map +1 -1
- package/dist/TableConfig/getCreateSchemaQueries.js +3 -2
- package/dist/TableConfig/getCreateSchemaQueries.js.map +1 -1
- package/dist/TableConfig/getTableConfigVersion.d.ts +2 -0
- package/dist/TableConfig/getTableConfigVersion.d.ts.map +1 -0
- package/dist/TableConfig/getTableConfigVersion.js +11 -0
- package/dist/TableConfig/getTableConfigVersion.js.map +1 -0
- package/dist/TableConfig/runMigrations.d.ts.map +1 -1
- package/dist/TableConfig/runMigrations.js +12 -6
- package/dist/TableConfig/runMigrations.js.map +1 -1
- package/dist/WebsocketAPI/onSocketConnected.d.ts +2 -2
- package/dist/WebsocketAPI/onSocketConnected.d.ts.map +1 -1
- package/dist/WebsocketAPI/onSocketConnected.js.map +1 -1
- package/dist/WebsocketAPI/pushSocketSchema.d.ts +2 -2
- package/dist/WebsocketAPI/pushSocketSchema.d.ts.map +1 -1
- package/dist/WebsocketAPI/pushSocketSchema.js.map +1 -1
- package/lib/Auth/AuthHandler.ts +2 -2
- package/lib/Auth/AuthTypes.ts +2 -2
- package/lib/Auth/utils/getClientRequestIPsInfo.ts +2 -2
- package/lib/DBEventsManager.ts +5 -5
- package/lib/DboBuilder/DboBuilderTypes.ts +1 -1
- package/lib/DboBuilder/runSql/QueryStreamer.ts +2 -2
- package/lib/Logging.ts +5 -0
- package/lib/Prostgles.ts +2 -2
- package/lib/ProstglesTypes.ts +3 -3
- package/lib/PubSubManager/PubSubManager.ts +7 -6
- package/lib/PubSubManager/SyncReplication/getSyncUtilFunctions.ts +3 -8
- package/lib/PubSubManager/SyncReplication/logSyncError.ts +22 -0
- package/lib/PubSubManager/SyncReplication/syncData.ts +54 -30
- package/lib/PubSubManager/addSync.ts +3 -4
- package/lib/PubSubManager/addTrigger.ts +2 -2
- package/lib/TableConfig/getCreateSchemaQueries.ts +4 -3
- package/lib/TableConfig/getTableConfigVersion.ts +6 -0
- package/lib/TableConfig/runMigrations.ts +19 -9
- package/lib/WebsocketAPI/onSocketConnected.ts +2 -2
- package/lib/WebsocketAPI/pushSocketSchema.ts +2 -2
- package/package.json +1 -1
|
@@ -0,0 +1,147 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.syncData = syncData;
|
|
4
|
+
const prostgles_types_1 = require("prostgles-types");
|
|
5
|
+
const WAL_1 = require("prostgles-types/dist/WAL");
|
|
6
|
+
const getSyncUtilFunctions_1 = require("./getSyncUtilFunctions");
|
|
7
|
+
/**
|
|
8
|
+
* Server or client requested data sync
|
|
9
|
+
*/
|
|
10
|
+
function syncData(sync, clientData, source) {
|
|
11
|
+
const run = () => runSyncData.call(this, sync, clientData, source);
|
|
12
|
+
const queued = (sync.syncQueue ?? Promise.resolve()).then(run);
|
|
13
|
+
sync.syncQueue = queued.then(() => undefined, () => undefined);
|
|
14
|
+
return queued;
|
|
15
|
+
}
|
|
16
|
+
async function runSyncData(sync, clientData, source) {
|
|
17
|
+
const logSyncData = (state) => {
|
|
18
|
+
return this._log({
|
|
19
|
+
type: "sync",
|
|
20
|
+
command: "syncData",
|
|
21
|
+
channelName: sync.channel_name,
|
|
22
|
+
tableName: sync.table_name,
|
|
23
|
+
sid: sync.sid,
|
|
24
|
+
source,
|
|
25
|
+
...(0, prostgles_types_1.pickKeys)(sync, ["socket_id", "condition", "lr", "is_syncing"]),
|
|
26
|
+
lr: JSON.stringify(sync.lr),
|
|
27
|
+
connectedSocketIds: this.dboBuilder.prostgles.connectedSockets.map((s) => s.id),
|
|
28
|
+
localParams: undefined,
|
|
29
|
+
duration: -1,
|
|
30
|
+
socketId: sync.socket_id,
|
|
31
|
+
syncParams: sync,
|
|
32
|
+
state,
|
|
33
|
+
});
|
|
34
|
+
};
|
|
35
|
+
await logSyncData("start");
|
|
36
|
+
const { socket_id, table_name, synced_field, id_fields = [], batch_size, throttle = 0 } = sync;
|
|
37
|
+
const socket = this.sockets.get(socket_id);
|
|
38
|
+
if (!socket?.connected) {
|
|
39
|
+
await logSyncData("socket?.connected");
|
|
40
|
+
return;
|
|
41
|
+
}
|
|
42
|
+
const tableHandler = this.dbo[table_name];
|
|
43
|
+
if (!tableHandler?.find) {
|
|
44
|
+
throw `dbo.${table_name}.find missing or not allowed`;
|
|
45
|
+
}
|
|
46
|
+
const { upsertData, updateSyncLR, getServerRowInfo, deleteData, getLastSynced, pushData, syncBatch, rowsFullyMatch, } = (0, getSyncUtilFunctions_1.getSyncUtilFunctions)({
|
|
47
|
+
tableHandler,
|
|
48
|
+
socket,
|
|
49
|
+
sync,
|
|
50
|
+
pubSubManager: this,
|
|
51
|
+
logSyncData,
|
|
52
|
+
localParams: sync.localParams,
|
|
53
|
+
});
|
|
54
|
+
/* Used to throttle and merge incoming updates */
|
|
55
|
+
sync.wal ??= new WAL_1.WAL({
|
|
56
|
+
id_fields,
|
|
57
|
+
synced_field,
|
|
58
|
+
throttle,
|
|
59
|
+
batch_size,
|
|
60
|
+
DEBUG_MODE: this.dboBuilder.prostgles.opts.DEBUG_MODE,
|
|
61
|
+
onSendStart: () => {
|
|
62
|
+
sync.is_syncing = true;
|
|
63
|
+
},
|
|
64
|
+
onSend: async (data) => {
|
|
65
|
+
const res = await upsertData(data, "WAL");
|
|
66
|
+
return res;
|
|
67
|
+
},
|
|
68
|
+
onSendEnd: (batch, _, error) => {
|
|
69
|
+
if (error === undefined) {
|
|
70
|
+
updateSyncLR(batch);
|
|
71
|
+
}
|
|
72
|
+
sync.is_syncing = false;
|
|
73
|
+
/**
|
|
74
|
+
* After all data was inserted request SyncInfo from client and sync again if necessary
|
|
75
|
+
*/
|
|
76
|
+
void this.syncData(sync, undefined, source).catch((error) => {
|
|
77
|
+
const socket = this.sockets.get(sync.socket_id);
|
|
78
|
+
if (!socket?.connected) {
|
|
79
|
+
return;
|
|
80
|
+
}
|
|
81
|
+
console.error("Follow-up replication failed", {
|
|
82
|
+
tableName: sync.table_name,
|
|
83
|
+
channelName: sync.channel_name,
|
|
84
|
+
socketId: sync.socket_id,
|
|
85
|
+
error,
|
|
86
|
+
});
|
|
87
|
+
});
|
|
88
|
+
},
|
|
89
|
+
});
|
|
90
|
+
/**
|
|
91
|
+
* Express data sent from a client that has already been synced
|
|
92
|
+
* Add to WAL manager which will sync at the end
|
|
93
|
+
*/
|
|
94
|
+
if (clientData) {
|
|
95
|
+
if (clientData.data && Array.isArray(clientData.data) && clientData.data.length) {
|
|
96
|
+
await logSyncData("sync.wal.addData");
|
|
97
|
+
return sync.wal.addData(clientData.data.map((d) => ({ current: d })));
|
|
98
|
+
/* Not expecting this anymore. use normal db.table.delete channel */
|
|
99
|
+
}
|
|
100
|
+
else if (clientData.deleted &&
|
|
101
|
+
Array.isArray(clientData.deleted) &&
|
|
102
|
+
clientData.deleted.length) {
|
|
103
|
+
await deleteData(clientData.deleted);
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
else {
|
|
107
|
+
// do nothing
|
|
108
|
+
}
|
|
109
|
+
if (sync.wal.isSending()) {
|
|
110
|
+
await logSyncData("sync.wal.isSending()");
|
|
111
|
+
return;
|
|
112
|
+
}
|
|
113
|
+
sync.is_syncing = true;
|
|
114
|
+
try {
|
|
115
|
+
let from_synced = null;
|
|
116
|
+
/** Client runs must reconcile the client's snapshot after reattachment. */
|
|
117
|
+
if (sync.lr && !clientData) {
|
|
118
|
+
const { s_lr } = await getServerRowInfo();
|
|
119
|
+
/* Make sure trigger is not firing on freshly synced data */
|
|
120
|
+
if (!rowsFullyMatch(sync.lr, s_lr)) {
|
|
121
|
+
from_synced = Number(sync.lr[synced_field]);
|
|
122
|
+
await logSyncData("sync.lr");
|
|
123
|
+
}
|
|
124
|
+
else {
|
|
125
|
+
await logSyncData("rowsFullyMatch");
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
else {
|
|
129
|
+
await logSyncData("getLastSynced(clientData).start");
|
|
130
|
+
from_synced = await getLastSynced(clientData);
|
|
131
|
+
await logSyncData("getLastSynced(clientData).end");
|
|
132
|
+
}
|
|
133
|
+
if (from_synced !== null) {
|
|
134
|
+
await logSyncData("syncBatch.start");
|
|
135
|
+
await syncBatch(from_synced);
|
|
136
|
+
await logSyncData("syncBatch.end");
|
|
137
|
+
}
|
|
138
|
+
else {
|
|
139
|
+
await logSyncData("nothingToSync");
|
|
140
|
+
}
|
|
141
|
+
await pushData({ state: "synced" });
|
|
142
|
+
}
|
|
143
|
+
finally {
|
|
144
|
+
sync.is_syncing = false;
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
//# sourceMappingURL=syncData.js.map
|