prostgles-server 4.2.535 → 4.2.538
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/dist/DboBuilder/DboBuilder.d.ts +1 -1
- package/dist/DboBuilder/DboBuilderTypes.d.ts +3 -1
- package/dist/DboBuilder/DboBuilderTypes.d.ts.map +1 -1
- package/dist/DboBuilder/TableHandler/TableHandler.d.ts +3 -1
- package/dist/DboBuilder/TableHandler/TableHandler.d.ts.map +1 -1
- package/dist/DboBuilder/TableHandler/TableHandler.js +20 -6
- package/dist/DboBuilder/TableHandler/TableHandler.js.map +1 -1
- package/dist/DboBuilder/runSql/runSqlUtils.d.ts +1 -1
- package/dist/DboBuilder/schema/getTablesForSchemaPostgresSQL.d.ts.map +1 -1
- package/dist/DboBuilder/schema/getTablesForSchemaPostgresSQL.js +0 -4
- package/dist/DboBuilder/schema/getTablesForSchemaPostgresSQL.js.map +1 -1
- package/dist/JSONBSchemaValidation/validateJSONBSchemaSQL.d.ts +1 -1
- package/dist/Logging.d.ts +4 -1
- package/dist/Logging.d.ts.map +1 -1
- package/dist/PubSubManager/PubSubManager.d.ts +5 -4
- package/dist/PubSubManager/PubSubManager.d.ts.map +1 -1
- package/dist/PubSubManager/PubSubManager.js +4 -2
- package/dist/PubSubManager/PubSubManager.js.map +1 -1
- package/dist/PubSubManager/SyncReplication/fetchSyncServerData.d.ts +11 -0
- package/dist/PubSubManager/SyncReplication/fetchSyncServerData.d.ts.map +1 -0
- package/dist/PubSubManager/SyncReplication/fetchSyncServerData.js +25 -0
- package/dist/PubSubManager/SyncReplication/fetchSyncServerData.js.map +1 -0
- package/dist/PubSubManager/SyncReplication/getSyncBatchOptions.d.ts +14 -0
- package/dist/PubSubManager/SyncReplication/getSyncBatchOptions.d.ts.map +1 -0
- package/dist/PubSubManager/SyncReplication/getSyncBatchOptions.js +19 -0
- package/dist/PubSubManager/SyncReplication/getSyncBatchOptions.js.map +1 -0
- package/dist/PubSubManager/SyncReplication/getSyncOrderByAndFields.d.ts +8 -0
- package/dist/PubSubManager/SyncReplication/getSyncOrderByAndFields.d.ts.map +1 -0
- package/dist/PubSubManager/SyncReplication/getSyncOrderByAndFields.js +9 -0
- package/dist/PubSubManager/SyncReplication/getSyncOrderByAndFields.js.map +1 -0
- package/dist/PubSubManager/SyncReplication/getSyncUtilFunctions.d.ts +44 -0
- package/dist/PubSubManager/SyncReplication/getSyncUtilFunctions.d.ts.map +1 -0
- package/dist/{SyncReplication.js → PubSubManager/SyncReplication/getSyncUtilFunctions.js} +101 -232
- package/dist/PubSubManager/SyncReplication/getSyncUtilFunctions.js.map +1 -0
- package/dist/{SyncReplication.d.ts → PubSubManager/SyncReplication/syncData.d.ts} +4 -4
- package/dist/PubSubManager/SyncReplication/syncData.d.ts.map +1 -0
- package/dist/PubSubManager/SyncReplication/syncData.js +132 -0
- package/dist/PubSubManager/SyncReplication/syncData.js.map +1 -0
- package/dist/PubSubManager/addSync.d.ts.map +1 -1
- package/dist/PubSubManager/addSync.js +10 -9
- package/dist/PubSubManager/addSync.js.map +1 -1
- package/lib/DboBuilder/DboBuilderTypes.ts +2 -1
- package/lib/DboBuilder/TableHandler/TableHandler.ts +26 -8
- package/lib/DboBuilder/schema/getTablesForSchemaPostgresSQL.ts +0 -4
- package/lib/Logging.ts +16 -1
- package/lib/PubSubManager/PubSubManager.ts +7 -5
- package/lib/PubSubManager/SyncReplication/fetchSyncServerData.ts +55 -0
- package/lib/PubSubManager/SyncReplication/getSyncBatchOptions.ts +31 -0
- package/lib/PubSubManager/SyncReplication/getSyncOrderByAndFields.ts +11 -0
- package/lib/{SyncReplication.ts → PubSubManager/SyncReplication/getSyncUtilFunctions.ts} +173 -330
- package/lib/PubSubManager/SyncReplication/syncData.ts +195 -0
- package/lib/PubSubManager/addSync.ts +13 -18
- package/package.json +2 -2
- package/dist/SyncReplication.d.ts.map +0 -1
- package/dist/SyncReplication.js.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"getSyncOrderByAndFields.js","sourceRoot":"","sources":["../../../lib/PubSubManager/SyncReplication/getSyncOrderByAndFields.ts"],"names":[],"mappings":";;;AAGO,MAAM,uBAAuB,GAAG,CAAC,EACtC,YAAY,EACZ,SAAS,GACsC,EAAE,EAAE;IACnD,MAAM,WAAW,GAAG,CAAC,YAAY,EAAE,GAAG,SAAS,CAAC,IAAI,EAAE,CAAC,EACrD,UAAU,GAAY,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;IAChF,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,CAAC;AACrC,CAAC,CAAC;AAPW,QAAA,uBAAuB,2BAOlC"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import { type AnyObject, type SyncBatchParams } from "prostgles-types";
|
|
2
|
+
import type { PRGLIOSocket } from "../../DboBuilder/DboBuilder";
|
|
3
|
+
import type { TableHandler } from "../../DboBuilder/TableHandler/TableHandler";
|
|
4
|
+
import type { PubSubManager, SyncParams } from "../PubSubManager";
|
|
5
|
+
import type { ClientSyncInfo, ServerSyncInfo, SyncBatchInfo } from "./syncData";
|
|
6
|
+
import type { EventTypes } from "../../Logging";
|
|
7
|
+
type Args = {
|
|
8
|
+
socket: PRGLIOSocket;
|
|
9
|
+
tableHandler: TableHandler;
|
|
10
|
+
sync: SyncParams;
|
|
11
|
+
pubSubManager: PubSubManager;
|
|
12
|
+
logSyncData: (state: Extract<EventTypes.Sync, {
|
|
13
|
+
command: "syncData";
|
|
14
|
+
}>["state"]) => void;
|
|
15
|
+
};
|
|
16
|
+
export declare const getSyncUtilFunctions: ({ socket, tableHandler, sync, pubSubManager, logSyncData, }: Args) => {
|
|
17
|
+
rowsIdsMatch: (a?: AnyObject, b?: AnyObject) => boolean | undefined;
|
|
18
|
+
rowsFullyMatch: (a?: AnyObject, b?: AnyObject) => boolean | undefined;
|
|
19
|
+
getServerRowInfo: (args?: SyncBatchParams) => Promise<ServerSyncInfo>;
|
|
20
|
+
getClientRowInfo: (args?: SyncBatchInfo) => Promise<Partial<{
|
|
21
|
+
c_fr: AnyObject;
|
|
22
|
+
c_lr: AnyObject;
|
|
23
|
+
c_count: number | string;
|
|
24
|
+
}>>;
|
|
25
|
+
getClientData: (from_synced: number | undefined, offset?: number) => Promise<AnyObject[]>;
|
|
26
|
+
getServerData: (from_synced: number | undefined, offset?: number) => Promise<AnyObject[]>;
|
|
27
|
+
deleteData: (deleted: AnyObject[]) => Promise<void>;
|
|
28
|
+
upsertData: (data: AnyObject[]) => Promise<{
|
|
29
|
+
inserted: number;
|
|
30
|
+
updated: number;
|
|
31
|
+
total: number;
|
|
32
|
+
}>;
|
|
33
|
+
pushData: (data: AnyObject[], isSynced?: boolean) => Promise<{
|
|
34
|
+
pushed: number;
|
|
35
|
+
resp: {
|
|
36
|
+
ok: boolean;
|
|
37
|
+
};
|
|
38
|
+
}>;
|
|
39
|
+
getLastSynced: (clientSyncInfo?: ClientSyncInfo) => Promise<number | null>;
|
|
40
|
+
updateSyncLR: (data: AnyObject[]) => void;
|
|
41
|
+
syncBatch: (from_synced: SyncBatchInfo["from_synced"]) => Promise<boolean>;
|
|
42
|
+
};
|
|
43
|
+
export {};
|
|
44
|
+
//# sourceMappingURL=getSyncUtilFunctions.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"getSyncUtilFunctions.d.ts","sourceRoot":"","sources":["../../../lib/PubSubManager/SyncReplication/getSyncUtilFunctions.ts"],"names":[],"mappings":"AAAA,OAAO,EAIL,KAAK,SAAS,EACd,KAAK,eAAe,EACrB,MAAM,iBAAiB,CAAC;AACzB,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAChE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,4CAA4C,CAAC;AAE/E,OAAO,KAAK,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAElE,OAAO,KAAK,EACV,cAAc,EAEd,cAAc,EACd,aAAa,EACd,MAAM,YAAY,CAAC;AAEpB,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAEhD,KAAK,IAAI,GAAG;IACV,MAAM,EAAE,YAAY,CAAC;IACrB,YAAY,EAAE,YAAY,CAAC;IAC3B,IAAI,EAAE,UAAU,CAAC;IACjB,aAAa,EAAE,aAAa,CAAC;IAC7B,WAAW,EAAE,CAAC,KAAK,EAAE,OAAO,CAAC,UAAU,CAAC,IAAI,EAAE;QAAE,OAAO,EAAE,UAAU,CAAA;KAAE,CAAC,CAAC,OAAO,CAAC,KAAK,IAAI,CAAC;CAC1F,CAAC;AAEF,eAAO,MAAM,oBAAoB,GAAI,6DAMlC,IAAI;uBAciB,SAAS,MAAM,SAAS;yBAGtB,SAAS,MAAM,SAAS;8BAGd,eAAe,KAAQ,OAAO,CAAC,cAAc,CAAC;8BA6BpD,aAAa;;;;;iCAoBT,MAAM,GAAG,SAAS,sBAAe,OAAO,CAAC,SAAS,EAAE,CAAC;iCAkC/C,MAAM,GAAG,SAAS,sBAAe,OAAO,CAAC,SAAS,EAAE,CAAC;0BAM5D,SAAS,EAAE;uBA4Bd,SAAS,EAAE;;;;;qBA8Fb,SAAS,EAAE;gBAGvB,MAAM;cACR;YACJ,EAAE,EAAE,OAAO,CAAC;SACb;;qCAiCmC,cAAc,KAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;yBA8EzD,SAAS,EAAE;6BAmBD,aAAa,CAAC,aAAa,CAAC;CA8F/D,CAAC"}
|
|
@@ -1,57 +1,32 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.
|
|
3
|
+
exports.getSyncUtilFunctions = void 0;
|
|
4
4
|
const prostgles_types_1 = require("prostgles-types");
|
|
5
|
-
const
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
}
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
*/
|
|
12
|
-
async function syncData(sync, clientData, source) {
|
|
13
|
-
await this._log({
|
|
14
|
-
type: "sync",
|
|
15
|
-
command: "syncData",
|
|
16
|
-
tableName: sync.table_name,
|
|
17
|
-
sid: sync.sid,
|
|
18
|
-
source,
|
|
19
|
-
...(0, prostgles_types_1.pickKeys)(sync, ["socket_id", "condition", "last_synced", "is_syncing"]),
|
|
20
|
-
lr: JSON.stringify(sync.lr),
|
|
21
|
-
connectedSocketIds: this.dboBuilder.prostgles.connectedSockets.map((s) => s.id),
|
|
22
|
-
localParams: undefined,
|
|
23
|
-
duration: -1,
|
|
24
|
-
socketId: sync.socket_id,
|
|
25
|
-
});
|
|
26
|
-
const { socket_id, channel_name, table_name, filter, table_rules, params, synced_field, id_fields = [], batch_size, wal, throttle = 0, } = sync;
|
|
27
|
-
const socket = this.sockets[socket_id];
|
|
28
|
-
if (!socket) {
|
|
29
|
-
return;
|
|
30
|
-
}
|
|
31
|
-
const tableHandler = this.dbo[table_name];
|
|
32
|
-
if (!tableHandler?.find) {
|
|
33
|
-
throw `dbo.${table_name}.find missing or not allowed`;
|
|
34
|
-
}
|
|
35
|
-
const sync_fields = [synced_field, ...id_fields.sort()], orderByAsc = sync_fields.reduce((a, v) => ({ ...a, [v]: true }), {}), rowsIdsMatch = (a, b) => {
|
|
5
|
+
const getSyncOrderByAndFields_1 = require("./getSyncOrderByAndFields");
|
|
6
|
+
const fetchSyncServerData_1 = require("./fetchSyncServerData");
|
|
7
|
+
const PubSubManagerUtils_1 = require("../PubSubManagerUtils");
|
|
8
|
+
const getSyncUtilFunctions = ({ socket, tableHandler, sync, pubSubManager, logSyncData, }) => {
|
|
9
|
+
const { synced_field, socket_id, id_fields, filter, table_rules, batch_size, channel_name, table_name, params, } = sync;
|
|
10
|
+
const { orderByAsc, sync_fields } = (0, getSyncOrderByAndFields_1.getSyncOrderByAndFields)({ synced_field, id_fields }), rowsIdsMatch = (a, b) => {
|
|
36
11
|
return a && b && !id_fields.find((key) => a[key].toString() !== b[key].toString());
|
|
37
12
|
}, rowsFullyMatch = (a, b) => {
|
|
38
13
|
return rowsIdsMatch(a, b) && a?.[synced_field].toString() === b?.[synced_field].toString();
|
|
39
14
|
}, getServerRowInfo = async (args = {}) => {
|
|
40
|
-
const { from_synced
|
|
41
|
-
const
|
|
42
|
-
if (from_synced || to_synced) {
|
|
43
|
-
|
|
44
|
-
...(from_synced ? { $gte: from_synced } : {}),
|
|
45
|
-
...(to_synced ? { $lte: to_synced } : {}),
|
|
15
|
+
const { from_synced, to_synced, offset = 0, limit } = args;
|
|
16
|
+
const batchFilter = { ...filter };
|
|
17
|
+
if ((0, prostgles_types_1.isDefined)(from_synced) || (0, prostgles_types_1.isDefined)(to_synced)) {
|
|
18
|
+
batchFilter[synced_field] = {
|
|
19
|
+
...((0, prostgles_types_1.isDefined)(from_synced) ? { $gte: from_synced } : {}),
|
|
20
|
+
...((0, prostgles_types_1.isDefined)(to_synced) ? { $lte: to_synced } : {}),
|
|
46
21
|
};
|
|
47
22
|
}
|
|
48
|
-
const first_rows = await tableHandler.find(
|
|
23
|
+
const first_rows = (await tableHandler.find(batchFilter, { orderBy: orderByAsc, select: sync_fields, limit, offset }, undefined, table_rules, { clientReq: { socket } }));
|
|
49
24
|
const last_rows = first_rows.slice(-1); // Why not logic below?
|
|
50
25
|
// const last_rows = await _this?.dbo[table_name]?.find?.(_filter, { orderBy: (orderByDesc as OrderBy), select: sync_fields, limit: 1, offset: -offset || 0 }, null, table_rules);
|
|
51
|
-
const count = await tableHandler.count(
|
|
26
|
+
const count = await tableHandler.count(batchFilter, undefined, undefined, table_rules);
|
|
52
27
|
return {
|
|
53
|
-
s_fr: first_rows[0]
|
|
54
|
-
s_lr: last_rows[0]
|
|
28
|
+
s_fr: first_rows[0],
|
|
29
|
+
s_lr: last_rows[0],
|
|
55
30
|
s_count: count,
|
|
56
31
|
};
|
|
57
32
|
}, getClientRowInfo = (args = {}) => {
|
|
@@ -70,16 +45,15 @@ async function syncData(sync, clientData, source) {
|
|
|
70
45
|
});
|
|
71
46
|
});
|
|
72
47
|
return res;
|
|
73
|
-
}, getClientData = (from_synced
|
|
48
|
+
}, getClientData = (from_synced, offset = 0) => {
|
|
74
49
|
return new Promise((resolve, reject) => {
|
|
75
50
|
const onPullRequest = {
|
|
76
|
-
from_synced: from_synced
|
|
51
|
+
from_synced: from_synced,
|
|
77
52
|
offset: offset || 0,
|
|
78
53
|
limit: batch_size,
|
|
79
54
|
};
|
|
80
55
|
socket.emit(channel_name, { onPullRequest }, (resp) => {
|
|
81
56
|
if (resp && resp.data && Array.isArray(resp.data)) {
|
|
82
|
-
// console.log({ onPullRequest, resp }, socket._user)
|
|
83
57
|
resolve(sortClientData(resp.data));
|
|
84
58
|
}
|
|
85
59
|
else {
|
|
@@ -100,24 +74,8 @@ async function syncData(sync, clientData, source) {
|
|
|
100
74
|
0);
|
|
101
75
|
});
|
|
102
76
|
}
|
|
103
|
-
}, getServerData = async (from_synced
|
|
104
|
-
|
|
105
|
-
...filter,
|
|
106
|
-
[synced_field]: { $gte: from_synced || 0 },
|
|
107
|
-
};
|
|
108
|
-
try {
|
|
109
|
-
const res = await tableHandler.find(_filter, {
|
|
110
|
-
select: params.select,
|
|
111
|
-
orderBy: orderByAsc,
|
|
112
|
-
offset: offset || 0,
|
|
113
|
-
limit: batch_size,
|
|
114
|
-
}, undefined, table_rules, { clientReq: { socket } });
|
|
115
|
-
return res;
|
|
116
|
-
}
|
|
117
|
-
catch (e) {
|
|
118
|
-
console.error("Sync getServerData failed: ", e);
|
|
119
|
-
throw "INTERNAL ERROR";
|
|
120
|
-
}
|
|
77
|
+
}, getServerData = async (from_synced, offset = 0) => {
|
|
78
|
+
return (0, fetchSyncServerData_1.fetchSyncServerData)({ tableHandler, socket, from_synced, offset }, { filter, id_fields, params, synced_field, batch_size, table_rules });
|
|
121
79
|
}, deleteData = async (deleted) => {
|
|
122
80
|
// console.log("deleteData deleteData deleteData " + deleted.length);
|
|
123
81
|
// if (allow_delete) {
|
|
@@ -125,7 +83,7 @@ async function syncData(sync, clientData, source) {
|
|
|
125
83
|
// deleted.map(async (d) => {
|
|
126
84
|
// const id_filter = pickKeys(d, id_fields);
|
|
127
85
|
// try {
|
|
128
|
-
// await (
|
|
86
|
+
// await (pubSubManager.dbo[table_name] as TableHandler).delete(
|
|
129
87
|
// id_filter,
|
|
130
88
|
// undefined,
|
|
131
89
|
// undefined,
|
|
@@ -148,44 +106,35 @@ async function syncData(sync, clientData, source) {
|
|
|
148
106
|
*/
|
|
149
107
|
upsertData = async (data) => {
|
|
150
108
|
const start = Date.now();
|
|
151
|
-
const result = await
|
|
109
|
+
const result = await pubSubManager.dboBuilder
|
|
152
110
|
.getTX(async (dbTX) => {
|
|
153
111
|
const tableHandlerTx = dbTX[table_name];
|
|
154
112
|
const existingData = await tableHandlerTx.find({ $or: data.map((d) => (0, prostgles_types_1.pickKeys)(d, id_fields)) }, {
|
|
155
113
|
select: [synced_field, ...id_fields],
|
|
156
114
|
orderBy: orderByAsc,
|
|
157
115
|
}, undefined, table_rules, { clientReq: { socket } });
|
|
158
|
-
let
|
|
159
|
-
let
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
};
|
|
170
|
-
updateData.push([syncSafeFilter, (0, prostgles_types_1.omitKeys)(upd, id_fields)]);
|
|
171
|
-
}));
|
|
172
|
-
await tableHandlerTx.updateBatch(updateData, { removeDisallowedFields: true }, undefined, table_rules, { clientReq: { socket } });
|
|
173
|
-
}
|
|
174
|
-
else {
|
|
175
|
-
updates = [];
|
|
176
|
-
}
|
|
177
|
-
if (table_rules.insert && inserts.length) {
|
|
178
|
-
await tableHandlerTx.insert(inserts, { removeDisallowedFields: true }, undefined, table_rules, { clientReq: { socket } });
|
|
179
|
-
}
|
|
180
|
-
else {
|
|
181
|
-
inserts = [];
|
|
182
|
-
}
|
|
183
|
-
return { inserts, updates };
|
|
116
|
+
let rowsToInsert = data.filter((d) => !existingData.find((ed) => rowsIdsMatch(ed, d)));
|
|
117
|
+
let rowsToUpdate = data.filter((d) => existingData.find((ed) => rowsIdsMatch(ed, d) && Number(ed[synced_field]) < Number(d[synced_field])));
|
|
118
|
+
if (table_rules.update && rowsToUpdate.length) {
|
|
119
|
+
const batchUpdates = rowsToUpdate.map((rowToUpdate) => {
|
|
120
|
+
const id_filter = (0, prostgles_types_1.pickKeys)(rowToUpdate, id_fields);
|
|
121
|
+
const syncSafeFilter = {
|
|
122
|
+
$and: [id_filter, { [synced_field]: { "<": rowToUpdate[synced_field] } }],
|
|
123
|
+
};
|
|
124
|
+
return [syncSafeFilter, (0, prostgles_types_1.omitKeys)(rowToUpdate, id_fields)];
|
|
125
|
+
});
|
|
126
|
+
await tableHandlerTx.updateBatch(batchUpdates, { removeDisallowedFields: true }, undefined, table_rules, { clientReq: { socket } });
|
|
184
127
|
}
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
throw e;
|
|
128
|
+
else {
|
|
129
|
+
rowsToUpdate = [];
|
|
188
130
|
}
|
|
131
|
+
if (table_rules.insert && rowsToInsert.length) {
|
|
132
|
+
await tableHandlerTx.insert(rowsToInsert, { removeDisallowedFields: true }, undefined, table_rules, { clientReq: { socket } });
|
|
133
|
+
}
|
|
134
|
+
else {
|
|
135
|
+
rowsToInsert = [];
|
|
136
|
+
}
|
|
137
|
+
return { inserts: rowsToInsert, updates: rowsToUpdate };
|
|
189
138
|
})
|
|
190
139
|
.then(({ inserts, updates }) => {
|
|
191
140
|
(0, PubSubManagerUtils_1.log)(`upsertData: inserted( ${inserts.length} ) updated( ${updates.length} ) total( ${data.length} ) \n last insert ${JSON.stringify(inserts.at(-1))} \n last update ${JSON.stringify(updates.at(-1))}`);
|
|
@@ -199,15 +148,17 @@ async function syncData(sync, clientData, source) {
|
|
|
199
148
|
console.trace("Something went wrong with syncing to server: " + err.message, data.length, id_fields);
|
|
200
149
|
return Promise.reject(new Error("Something went wrong with syncing to server: "));
|
|
201
150
|
});
|
|
202
|
-
await
|
|
151
|
+
await pubSubManager._log({
|
|
203
152
|
type: "sync",
|
|
204
153
|
command: "upsertData",
|
|
154
|
+
channelName: channel_name,
|
|
205
155
|
tableName: sync.table_name,
|
|
206
156
|
rows: data.length,
|
|
207
157
|
socketId: socket_id,
|
|
208
158
|
sid: sync.sid,
|
|
209
159
|
duration: Date.now() - start,
|
|
210
|
-
connectedSocketIds:
|
|
160
|
+
connectedSocketIds: pubSubManager.dboBuilder.prostgles.connectedSockets.map((s) => s.id),
|
|
161
|
+
syncParams: sync,
|
|
211
162
|
});
|
|
212
163
|
return result;
|
|
213
164
|
},
|
|
@@ -215,13 +166,13 @@ async function syncData(sync, clientData, source) {
|
|
|
215
166
|
* Pushes the given data to client
|
|
216
167
|
* @param isSynced = true if
|
|
217
168
|
*/
|
|
218
|
-
pushData = async (data, isSynced = false
|
|
169
|
+
pushData = async (data, isSynced = false) => {
|
|
219
170
|
const start = Date.now();
|
|
220
171
|
const result = await new Promise((resolve, reject) => {
|
|
221
172
|
socket.emit(channel_name, { data, isSynced }, (resp) => {
|
|
222
173
|
if (resp && resp.ok) {
|
|
223
174
|
// console.log("PUSHED to client: fr/lr", data[0], data[data.length - 1]);
|
|
224
|
-
resolve({ pushed: data
|
|
175
|
+
resolve({ pushed: data.length, resp });
|
|
225
176
|
}
|
|
226
177
|
else {
|
|
227
178
|
reject(resp);
|
|
@@ -229,15 +180,17 @@ async function syncData(sync, clientData, source) {
|
|
|
229
180
|
}
|
|
230
181
|
});
|
|
231
182
|
});
|
|
232
|
-
await
|
|
183
|
+
await pubSubManager._log({
|
|
233
184
|
type: "sync",
|
|
234
185
|
command: "pushData",
|
|
235
186
|
tableName: sync.table_name,
|
|
236
|
-
rows: data
|
|
187
|
+
rows: data.length,
|
|
237
188
|
socketId: socket_id,
|
|
238
189
|
duration: Date.now() - start,
|
|
239
190
|
sid: sync.sid,
|
|
240
|
-
connectedSocketIds:
|
|
191
|
+
connectedSocketIds: pubSubManager.dboBuilder.prostgles.connectedSockets.map((s) => s.id),
|
|
192
|
+
channelName: channel_name,
|
|
193
|
+
syncParams: sync,
|
|
241
194
|
});
|
|
242
195
|
return result;
|
|
243
196
|
},
|
|
@@ -253,18 +206,20 @@ async function syncData(sync, clientData, source) {
|
|
|
253
206
|
// console.log("getLastSynced", clientData, socket._user )
|
|
254
207
|
let result = null;
|
|
255
208
|
/* Nothing to sync */
|
|
256
|
-
if (
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
209
|
+
if (!c_fr && !s_fr) {
|
|
210
|
+
logSyncData("getLastSynced.nothingToSync");
|
|
211
|
+
return null;
|
|
212
|
+
}
|
|
213
|
+
if (rowsFullyMatch(c_lr, s_lr)) {
|
|
214
|
+
logSyncData("getLastSynced.rowsFullyMatch(lr)");
|
|
215
|
+
return null;
|
|
261
216
|
}
|
|
262
|
-
|
|
217
|
+
if (!rowsFullyMatch(c_fr, s_fr)) {
|
|
263
218
|
if (c_fr && s_fr) {
|
|
264
219
|
result = Math.min(c_fr[synced_field], s_fr[synced_field]);
|
|
265
220
|
}
|
|
266
|
-
else
|
|
267
|
-
result = (c_fr
|
|
221
|
+
else {
|
|
222
|
+
result = (c_fr ?? s_fr)[synced_field];
|
|
268
223
|
}
|
|
269
224
|
/* Sync from last matching synced value */
|
|
270
225
|
}
|
|
@@ -284,19 +239,17 @@ async function syncData(sync, clientData, source) {
|
|
|
284
239
|
to_synced: result,
|
|
285
240
|
end_offset,
|
|
286
241
|
});
|
|
287
|
-
|
|
288
|
-
let server_row;
|
|
242
|
+
let server_rows;
|
|
289
243
|
if (c_lr) {
|
|
290
244
|
const _filter = {};
|
|
291
245
|
sync_fields.map((key) => {
|
|
292
246
|
_filter[key] = c_lr[key];
|
|
293
247
|
});
|
|
294
|
-
|
|
248
|
+
server_rows = await tableHandler.find(_filter, { select: sync_fields, limit: 1 }, undefined, table_rules, { clientReq: { socket } });
|
|
295
249
|
}
|
|
296
|
-
|
|
297
|
-
if (
|
|
298
|
-
|
|
299
|
-
result = +server_row[synced_field];
|
|
250
|
+
const first_server_row = server_rows?.[0];
|
|
251
|
+
if (first_server_row) {
|
|
252
|
+
result = +first_server_row[synced_field];
|
|
300
253
|
end_offset = min_count;
|
|
301
254
|
// console.log(`getLastSynced found for ${table_name} -> ${result}`);
|
|
302
255
|
}
|
|
@@ -309,23 +262,24 @@ async function syncData(sync, clientData, source) {
|
|
|
309
262
|
}
|
|
310
263
|
return result;
|
|
311
264
|
}, updateSyncLR = (data) => {
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
sync.
|
|
320
|
-
sync.last_synced = +sync.lr?.[synced_field];
|
|
265
|
+
const lastRow = data.at(-1);
|
|
266
|
+
if (!lastRow) {
|
|
267
|
+
return;
|
|
268
|
+
}
|
|
269
|
+
if (sync.lr?.[synced_field] && +sync.lr[synced_field] > +lastRow[synced_field]) {
|
|
270
|
+
console.error({
|
|
271
|
+
syncIssue: "sync.lr[synced_field] is greater than lastRow[synced_field]",
|
|
272
|
+
}, sync.table_name);
|
|
321
273
|
}
|
|
274
|
+
sync.lr = lastRow;
|
|
275
|
+
sync.last_synced = +sync.lr[synced_field];
|
|
322
276
|
},
|
|
323
277
|
/**
|
|
324
278
|
* Will push pull sync between client and server from a given from_synced value
|
|
325
279
|
*/
|
|
326
280
|
syncBatch = async (from_synced) => {
|
|
327
281
|
let offset = 0, canContinue = true;
|
|
328
|
-
const limit = batch_size, min_synced = from_synced
|
|
282
|
+
const limit = batch_size, min_synced = from_synced ?? undefined;
|
|
329
283
|
let inserted = 0, updated = 0, pushed = 0, total = 0;
|
|
330
284
|
const deleted = 0;
|
|
331
285
|
// console.log("syncBatch", from_synced)
|
|
@@ -342,7 +296,7 @@ async function syncData(sync, clientData, source) {
|
|
|
342
296
|
}
|
|
343
297
|
catch (e) {
|
|
344
298
|
console.trace("sync getServerData err", e);
|
|
345
|
-
await pushData(undefined, undefined, "Internal error. Check server logs");
|
|
299
|
+
// await pushData(undefined, undefined, "Internal error. Check server logs");
|
|
346
300
|
throw " d";
|
|
347
301
|
}
|
|
348
302
|
// TODO: Implement delete ensuring:
|
|
@@ -354,7 +308,7 @@ async function syncData(sync, clientData, source) {
|
|
|
354
308
|
// await Promise.all(
|
|
355
309
|
// to_delete.map((d) => {
|
|
356
310
|
// deleted++;
|
|
357
|
-
// return (
|
|
311
|
+
// return (pubSubManager.dbo[table_name] as TableHandler).delete(
|
|
358
312
|
// pickKeys(d, id_fields),
|
|
359
313
|
// {},
|
|
360
314
|
// undefined,
|
|
@@ -376,113 +330,28 @@ async function syncData(sync, clientData, source) {
|
|
|
376
330
|
total += serverData.length;
|
|
377
331
|
}
|
|
378
332
|
offset += serverData.length;
|
|
379
|
-
// canContinue = offset >= limit;
|
|
380
333
|
canContinue = serverData.length >= limit;
|
|
381
|
-
// console.log(`sData ${sData.length} limit ${limit}`);
|
|
382
334
|
}
|
|
383
335
|
(0, PubSubManagerUtils_1.log)(`server.syncBatch ${table_name}: inserted( ${inserted} ) updated( ${updated} ) deleted( ${deleted} ) pushed to client( ${pushed} ) total( ${total} )`, socket._user);
|
|
384
336
|
return true;
|
|
385
337
|
};
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
// console.log("WAL upsertData END")
|
|
405
|
-
/******** */
|
|
406
|
-
/* TO DO -> Store and push patch updates instead of full data if and where possible */
|
|
407
|
-
/******** */
|
|
408
|
-
// 1. Store successfully upserted wal items for a couple of seconds
|
|
409
|
-
// 2. When pushing data to clients check if any matching wal items exist
|
|
410
|
-
// 3. Replace text fields with matching patched data
|
|
411
|
-
return res;
|
|
412
|
-
},
|
|
413
|
-
onSendEnd: (batch) => {
|
|
414
|
-
updateSyncLR(batch);
|
|
415
|
-
sync.is_syncing = false;
|
|
416
|
-
// console.log("syncData from WAL.onSendEnd")
|
|
417
|
-
/**
|
|
418
|
-
* After all data was inserted request SyncInfo from client and sync again if necessary
|
|
419
|
-
*/
|
|
420
|
-
void this.syncData(sync, undefined, source);
|
|
421
|
-
},
|
|
422
|
-
});
|
|
423
|
-
}
|
|
424
|
-
/* Debounce sync requests */
|
|
425
|
-
if (!sync.wal)
|
|
426
|
-
throw "sync.wal missing";
|
|
427
|
-
if (!sync.wal.isSending() && sync.is_syncing) {
|
|
428
|
-
if (!this.syncTimeout) {
|
|
429
|
-
this.syncTimeout = setTimeout(() => {
|
|
430
|
-
this.syncTimeout = undefined;
|
|
431
|
-
// console.log("SYNC FROM TIMEOUT")
|
|
432
|
-
void this.syncData(sync, undefined, source);
|
|
433
|
-
}, throttle);
|
|
434
|
-
}
|
|
435
|
-
// console.log("SYNC THROTTLE")
|
|
436
|
-
return;
|
|
437
|
-
}
|
|
438
|
-
// console.log("syncData", clientData)
|
|
439
|
-
/**
|
|
440
|
-
* Express data sent from a client that has already been synced
|
|
441
|
-
* Add to WAL manager which will sync at the end
|
|
442
|
-
*/
|
|
443
|
-
if (clientData) {
|
|
444
|
-
if (clientData.data && Array.isArray(clientData.data) && clientData.data.length) {
|
|
445
|
-
return sync.wal.addData(clientData.data.map((d) => ({ current: d })));
|
|
446
|
-
// await upsertData(clientData.data, true);
|
|
447
|
-
/* Not expecting this anymore. use normal db.table.delete channel */
|
|
448
|
-
}
|
|
449
|
-
else if (clientData.deleted &&
|
|
450
|
-
Array.isArray(clientData.deleted) &&
|
|
451
|
-
clientData.deleted.length) {
|
|
452
|
-
await deleteData(clientData.deleted);
|
|
453
|
-
}
|
|
454
|
-
}
|
|
455
|
-
else {
|
|
456
|
-
// do nothing
|
|
457
|
-
}
|
|
458
|
-
if (sync.wal.isSending())
|
|
459
|
-
return;
|
|
460
|
-
sync.is_syncing = true;
|
|
461
|
-
// from synced does not make sense. It should be sync.lr only!!!
|
|
462
|
-
let from_synced = null;
|
|
463
|
-
/** Sync was already synced */
|
|
464
|
-
if (sync.lr) {
|
|
465
|
-
const { s_lr } = await getServerRowInfo();
|
|
466
|
-
/* Make sure trigger is not firing on freshly synced data */
|
|
467
|
-
if (!rowsFullyMatch(sync.lr, s_lr)) {
|
|
468
|
-
from_synced = sync.last_synced;
|
|
469
|
-
}
|
|
470
|
-
else {
|
|
471
|
-
// console.log("rowsFullyMatch")
|
|
472
|
-
}
|
|
473
|
-
// console.log(table_name, sync.lr[synced_field])
|
|
474
|
-
}
|
|
475
|
-
else {
|
|
476
|
-
from_synced = await getLastSynced(clientData);
|
|
477
|
-
}
|
|
478
|
-
if (from_synced !== null) {
|
|
479
|
-
await syncBatch(from_synced);
|
|
480
|
-
}
|
|
481
|
-
else {
|
|
482
|
-
// console.log("from_synced is null")
|
|
483
|
-
}
|
|
484
|
-
await pushData([], true);
|
|
485
|
-
sync.is_syncing = false;
|
|
486
|
-
// console.log(`Finished sync for ${table_name}`, socket._user);
|
|
338
|
+
return {
|
|
339
|
+
rowsIdsMatch,
|
|
340
|
+
rowsFullyMatch,
|
|
341
|
+
getServerRowInfo,
|
|
342
|
+
getClientRowInfo,
|
|
343
|
+
getClientData,
|
|
344
|
+
getServerData,
|
|
345
|
+
deleteData,
|
|
346
|
+
upsertData,
|
|
347
|
+
pushData,
|
|
348
|
+
getLastSynced,
|
|
349
|
+
updateSyncLR,
|
|
350
|
+
syncBatch,
|
|
351
|
+
};
|
|
352
|
+
};
|
|
353
|
+
exports.getSyncUtilFunctions = getSyncUtilFunctions;
|
|
354
|
+
function getNumbers(numberArr) {
|
|
355
|
+
return numberArr.filter((v) => v !== null && v !== undefined && Number.isFinite(+v));
|
|
487
356
|
}
|
|
488
|
-
//# sourceMappingURL=
|
|
357
|
+
//# sourceMappingURL=getSyncUtilFunctions.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"getSyncUtilFunctions.js","sourceRoot":"","sources":["../../../lib/PubSubManager/SyncReplication/getSyncUtilFunctions.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import type { AnyObject } from "prostgles-types";
|
|
2
|
-
import type { PubSubManager, SyncParams } from "
|
|
2
|
+
import type { PubSubManager, SyncParams } from "../PubSubManager";
|
|
3
3
|
export type ClientSyncInfo = Partial<{
|
|
4
4
|
c_fr: AnyObject;
|
|
5
5
|
c_lr: AnyObject;
|
|
6
6
|
/**
|
|
7
|
-
* PG count is
|
|
7
|
+
* PG count is usually string due to bigint
|
|
8
8
|
*/
|
|
9
9
|
c_count: number | string;
|
|
10
10
|
}>;
|
|
@@ -12,7 +12,7 @@ export type ServerSyncInfo = Partial<{
|
|
|
12
12
|
s_fr: AnyObject;
|
|
13
13
|
s_lr: AnyObject;
|
|
14
14
|
/**
|
|
15
|
-
* PG count is
|
|
15
|
+
* PG count is usually string due to bigint
|
|
16
16
|
*/
|
|
17
17
|
s_count: number | string;
|
|
18
18
|
}>;
|
|
@@ -34,4 +34,4 @@ export type ClientExpressData = ClientSyncInfo & {
|
|
|
34
34
|
* Server or client requested data sync
|
|
35
35
|
*/
|
|
36
36
|
export declare function syncData(this: PubSubManager, sync: SyncParams, clientData: ClientExpressData | undefined, source: "trigger" | "client"): Promise<void>;
|
|
37
|
-
//# sourceMappingURL=
|
|
37
|
+
//# sourceMappingURL=syncData.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"syncData.d.ts","sourceRoot":"","sources":["../../../lib/PubSubManager/SyncReplication/syncData.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAGjD,OAAO,KAAK,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAIlE,MAAM,MAAM,cAAc,GAAG,OAAO,CAAC;IACnC,IAAI,EAAE,SAAS,CAAC;IAChB,IAAI,EAAE,SAAS,CAAC;IAChB;;OAEG;IACH,OAAO,EAAE,MAAM,GAAG,MAAM,CAAC;CAC1B,CAAC,CAAC;AAEH,MAAM,MAAM,cAAc,GAAG,OAAO,CAAC;IACnC,IAAI,EAAE,SAAS,CAAC;IAChB,IAAI,EAAE,SAAS,CAAC;IAChB;;OAEG;IACH,OAAO,EAAE,MAAM,GAAG,MAAM,CAAC;CAC1B,CAAC,CAAC;AAEH,MAAM,MAAM,aAAa,GAAG,OAAO,CAAC;IAClC,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;CAC3B,CAAC,CAAC;AAEH,MAAM,MAAM,qBAAqB,GAC7B;IACE,aAAa,CAAC,EAAE,cAAc,CAAC;CAChC,GACD;IACE,GAAG,EAAE,SAAS,GAAG,MAAM,CAAC;CACzB,CAAC;AAEN,MAAM,MAAM,iBAAiB,GAAG,cAAc,GAAG;IAC/C,IAAI,CAAC,EAAE,SAAS,EAAE,CAAC;IACnB,OAAO,CAAC,EAAE,SAAS,EAAE,CAAC;CACvB,CAAC;AAEF;;GAEG;AACH,wBAAsB,QAAQ,CAC5B,IAAI,EAAE,aAAa,EACnB,IAAI,EAAE,UAAU,EAChB,UAAU,EAAE,iBAAiB,GAAG,SAAS,EACzC,MAAM,EAAE,SAAS,GAAG,QAAQ,iBA+I7B"}
|