@paroicms/server-text-cache-system 1.2.3 → 1.3.0
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/ddl/text-cache.ddl.sql +31 -18
- package/dist/cache-system.d.ts +13 -7
- package/dist/cache-system.js +31 -10
- package/dist/cache-system.js.map +1 -1
- package/dist/db-init/db-init.d.ts +4 -3
- package/dist/db-init/db-init.js +38 -18
- package/dist/db-init/db-init.js.map +1 -1
- package/dist/db-init/ddl-migration.d.ts +2 -6
- package/dist/db-init/ddl-migration.js +15 -17
- package/dist/db-init/ddl-migration.js.map +1 -1
- package/dist/db-init/entities/PaTextCache.entity.d.ts +7 -0
- package/dist/{entities/PaCache.entity.js → db-init/entities/PaTextCache.entity.js} +21 -26
- package/dist/db-init/entities/PaTextCache.entity.js.map +1 -0
- package/dist/db-init/entities/PaTextCacheDependency.entity.d.ts +4 -0
- package/dist/{entities/PaCacheDependency.entity.js → db-init/entities/PaTextCacheDependency.entity.js} +11 -11
- package/dist/db-init/entities/PaTextCacheDependency.entity.js.map +1 -0
- package/dist/db-init/entities/PaTextCacheScheduledInvalidation.entity.d.ts +6 -0
- package/dist/db-init/entities/PaTextCacheScheduledInvalidation.entity.js +40 -0
- package/dist/db-init/entities/PaTextCacheScheduledInvalidation.entity.js.map +1 -0
- package/dist/internal/cache-system-context.d.ts +8 -4
- package/dist/internal/cache-system-context.js +8 -5
- package/dist/internal/cache-system-context.js.map +1 -1
- package/dist/internal/queries.d.ts +6 -6
- package/dist/internal/queries.js +48 -60
- package/dist/internal/queries.js.map +1 -1
- package/dist/internal/scheduled-invalidation-queries.d.ts +14 -0
- package/dist/internal/scheduled-invalidation-queries.js +75 -0
- package/dist/internal/scheduled-invalidation-queries.js.map +1 -0
- package/dist/internal/scheduler.d.ts +7 -0
- package/dist/internal/scheduler.js +93 -0
- package/dist/internal/scheduler.js.map +1 -0
- package/package.json +5 -5
- package/dist/entities/PaCache.entity.d.ts +0 -8
- package/dist/entities/PaCache.entity.js.map +0 -1
- package/dist/entities/PaCacheDependency.entity.d.ts +0 -4
- package/dist/entities/PaCacheDependency.entity.js.map +0 -1
package/ddl/text-cache.ddl.sql
CHANGED
|
@@ -1,31 +1,44 @@
|
|
|
1
1
|
PRAGMA journal_mode = TRUNCATE;
|
|
2
2
|
PRAGMA foreign_keys = 1;
|
|
3
3
|
|
|
4
|
-
drop index if exists
|
|
5
|
-
drop table if exists
|
|
6
|
-
drop
|
|
7
|
-
drop table if exists
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
4
|
+
drop index if exists PaTextCacheScheduledInvalidation_eventK_idx;
|
|
5
|
+
drop table if exists PaTextCacheScheduledInvalidation;
|
|
6
|
+
drop index if exists PaTextCacheDependency_depK_idx;
|
|
7
|
+
drop table if exists PaTextCacheDependency;
|
|
8
|
+
drop table if exists PaTextCache;
|
|
9
|
+
drop table if exists PaMetadata;
|
|
10
|
+
|
|
11
|
+
create table PaMetadata (
|
|
12
|
+
dbSchema varchar(100) not null,
|
|
13
|
+
k varchar(100) not null,
|
|
14
|
+
val varchar(250) not null,
|
|
15
|
+
primary key (dbSchema, k)
|
|
12
16
|
);
|
|
13
17
|
|
|
14
|
-
insert into
|
|
18
|
+
insert into PaMetadata (dbSchema, k, val) values ('text-cache', 'dbSchemaVersion', '3');
|
|
15
19
|
|
|
16
|
-
create table
|
|
17
|
-
|
|
18
|
-
ts timestamp not null default current_timestamp,
|
|
20
|
+
create table PaTextCache (
|
|
21
|
+
k varchar(250) not null primary key,
|
|
19
22
|
resourceVersion varchar(100) not null,
|
|
20
|
-
k varchar(250) not null unique,
|
|
21
23
|
val text not null,
|
|
22
|
-
|
|
24
|
+
modifiedAt timestamp not null default current_timestamp,
|
|
25
|
+
readAt timestamp not null default current_timestamp
|
|
23
26
|
);
|
|
24
27
|
|
|
25
|
-
create table
|
|
26
|
-
|
|
28
|
+
create table PaTextCacheDependency (
|
|
29
|
+
cacheK varchar(250) not null references PaTextCache (k) on delete cascade,
|
|
30
|
+
depK varchar(250) not null,
|
|
31
|
+
primary key (cacheK, depK)
|
|
32
|
+
);
|
|
33
|
+
|
|
34
|
+
create index PaTextCacheDependency_depK_idx on PaTextCacheDependency (depK);
|
|
35
|
+
|
|
36
|
+
create table PaTextCacheScheduledInvalidation (
|
|
37
|
+
eventK varchar(250) not null,
|
|
27
38
|
depK varchar(250) not null,
|
|
28
|
-
|
|
39
|
+
scheduledAt timestamp not null,
|
|
40
|
+
scheduledSince timestamp not null default current_timestamp,
|
|
41
|
+
primary key (eventK, depK)
|
|
29
42
|
);
|
|
30
43
|
|
|
31
|
-
create index
|
|
44
|
+
create index PaTextCacheScheduledInvalidation_eventK_idx on PaTextCacheScheduledInvalidation (eventK);
|
package/dist/cache-system.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import type { AppLog, Tracker } from "@paroicms/server-lib";
|
|
2
2
|
import type { CacheSetData, CacheValue, TextCacheSystemStorage } from "./public-types";
|
|
3
3
|
export interface CreateTextCacheSystemOptions {
|
|
4
|
-
|
|
4
|
+
appVersion: string;
|
|
5
5
|
storage: TextCacheSystemStorage;
|
|
6
6
|
appLog: AppLog;
|
|
7
7
|
/**
|
|
@@ -13,13 +13,19 @@ export interface TextCacheSystem {
|
|
|
13
13
|
setCacheValue(data: CacheSetData, tracker: Tracker): Promise<CacheValue>;
|
|
14
14
|
getCacheValue(cacheKey: string, tracker: Tracker): Promise<CacheValue | undefined>;
|
|
15
15
|
getDependencyKeys(cacheKey: string, tracker: Tracker): Promise<string[]>;
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
invalidate(dependencyKeys: string[]): Promise<string[]>;
|
|
16
|
+
invalidate(dependencyKeys: string[]): Promise<void>;
|
|
17
|
+
scheduleInvalidation(eventKey: string, dependencyKeys: string[], scheduledAt: Date): Promise<void>;
|
|
18
|
+
cancelScheduledInvalidation(eventKey: string): Promise<void>;
|
|
20
19
|
cleanUnusedValues(): Promise<void>;
|
|
20
|
+
invalidateAll(): Promise<void>;
|
|
21
21
|
clearCache(): Promise<void>;
|
|
22
22
|
close(): Promise<void>;
|
|
23
23
|
}
|
|
24
|
-
export declare function createTextCacheSystem(options: CreateTextCacheSystemOptions): Promise<
|
|
25
|
-
|
|
24
|
+
export declare function createTextCacheSystem(options: CreateTextCacheSystemOptions): Promise<{
|
|
25
|
+
textCache: TextCacheSystem;
|
|
26
|
+
isCleared: boolean;
|
|
27
|
+
}>;
|
|
28
|
+
export declare function createNoTextCacheSystem(): {
|
|
29
|
+
textCache: TextCacheSystem;
|
|
30
|
+
isCleared: boolean;
|
|
31
|
+
};
|
package/dist/cache-system.js
CHANGED
|
@@ -3,14 +3,15 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.createNoTextCacheSystem = exports.createTextCacheSystem = void 0;
|
|
4
4
|
const cache_system_context_1 = require("./internal/cache-system-context");
|
|
5
5
|
const queries_1 = require("./internal/queries");
|
|
6
|
+
const scheduled_invalidation_queries_1 = require("./internal/scheduled-invalidation-queries");
|
|
6
7
|
async function createTextCacheSystem(options) {
|
|
7
|
-
const context = await (0, cache_system_context_1.createTextCacheSystemContext)(options);
|
|
8
|
+
const { context, isCleared } = await (0, cache_system_context_1.createTextCacheSystemContext)(options);
|
|
8
9
|
function checkStatus() {
|
|
9
10
|
if (context.status !== "ready") {
|
|
10
11
|
throw new Error(`TextCache is ${context.status}`);
|
|
11
12
|
}
|
|
12
13
|
}
|
|
13
|
-
|
|
14
|
+
const textCache = {
|
|
14
15
|
async setCacheValue(data, tracker) {
|
|
15
16
|
checkStatus();
|
|
16
17
|
return await (0, queries_1.insertOrUpdateCacheValue)(context.cn, data, tracker);
|
|
@@ -19,7 +20,7 @@ async function createTextCacheSystem(options) {
|
|
|
19
20
|
checkStatus();
|
|
20
21
|
const value = await (0, queries_1.getCacheValue)(context, cacheKey, tracker);
|
|
21
22
|
if (value !== undefined) {
|
|
22
|
-
context.appLog.debug(`
|
|
23
|
+
context.appLog.debug(`found cache: ${cacheKey}`);
|
|
23
24
|
}
|
|
24
25
|
return value;
|
|
25
26
|
},
|
|
@@ -31,41 +32,61 @@ async function createTextCacheSystem(options) {
|
|
|
31
32
|
checkStatus();
|
|
32
33
|
const cacheKeys = await (0, queries_1.deleteCacheValues)(context.cn, { dependencyKeys });
|
|
33
34
|
if (cacheKeys.length > 0) {
|
|
34
|
-
context.appLog.debug(
|
|
35
|
+
context.appLog.debug(`${cacheKeys.length} invalidated cache: ${cacheKeys.join(", ")}`);
|
|
35
36
|
}
|
|
36
|
-
|
|
37
|
+
},
|
|
38
|
+
async scheduleInvalidation(eventKey, dependencyKeys, scheduledAt) {
|
|
39
|
+
checkStatus();
|
|
40
|
+
await (0, scheduled_invalidation_queries_1.setScheduledInvalidation)(context.cn, { eventKey, dependencyKeys, scheduledAt });
|
|
41
|
+
await context.scheduler.reset();
|
|
42
|
+
},
|
|
43
|
+
async cancelScheduledInvalidation(eventKey) {
|
|
44
|
+
checkStatus();
|
|
45
|
+
await (0, scheduled_invalidation_queries_1.deleteScheduledInvalidation)(context.cn, eventKey);
|
|
46
|
+
await context.scheduler.reset();
|
|
37
47
|
},
|
|
38
48
|
async cleanUnusedValues() {
|
|
39
49
|
checkStatus();
|
|
40
50
|
const count = await (0, queries_1.deleteUnusedCacheValues)(context);
|
|
41
51
|
if (count !== undefined && count > 0) {
|
|
42
|
-
context.appLog.debug(
|
|
52
|
+
context.appLog.debug(`${count} unused cache values were deleted`);
|
|
43
53
|
}
|
|
44
54
|
},
|
|
55
|
+
async invalidateAll() {
|
|
56
|
+
checkStatus();
|
|
57
|
+
await (0, queries_1.invalidateAllCacheValues)(context);
|
|
58
|
+
context.appLog.debug("cache is fully invalidated");
|
|
59
|
+
},
|
|
45
60
|
async clearCache() {
|
|
46
61
|
checkStatus();
|
|
47
62
|
await (0, queries_1.clearCacheValues)(context);
|
|
48
|
-
context.appLog.debug(
|
|
63
|
+
context.appLog.debug("cache is cleared");
|
|
49
64
|
},
|
|
50
65
|
async close() {
|
|
51
66
|
if (context.status === "destroyed")
|
|
52
67
|
return;
|
|
53
68
|
context.status = "destroyed";
|
|
54
|
-
await context.
|
|
69
|
+
await context.scheduler.stop();
|
|
70
|
+
await context.cn.destroy();
|
|
55
71
|
},
|
|
56
72
|
};
|
|
73
|
+
return { textCache, isCleared };
|
|
57
74
|
}
|
|
58
75
|
exports.createTextCacheSystem = createTextCacheSystem;
|
|
59
76
|
function createNoTextCacheSystem() {
|
|
60
|
-
|
|
77
|
+
const textCache = {
|
|
61
78
|
setCacheValue: (data) => Promise.resolve({ value: data.value }),
|
|
62
79
|
getCacheValue: () => Promise.resolve(undefined),
|
|
63
80
|
getDependencyKeys: () => Promise.resolve([]),
|
|
64
|
-
invalidate: () => Promise.resolve(
|
|
81
|
+
invalidate: () => Promise.resolve(),
|
|
82
|
+
scheduleInvalidation: () => Promise.resolve(),
|
|
83
|
+
cancelScheduledInvalidation: () => Promise.resolve(),
|
|
65
84
|
cleanUnusedValues: () => Promise.resolve(),
|
|
85
|
+
invalidateAll: () => Promise.resolve(),
|
|
66
86
|
clearCache: () => Promise.resolve(),
|
|
67
87
|
close: () => Promise.resolve(),
|
|
68
88
|
};
|
|
89
|
+
return { textCache, isCleared: false };
|
|
69
90
|
}
|
|
70
91
|
exports.createNoTextCacheSystem = createNoTextCacheSystem;
|
|
71
92
|
//# sourceMappingURL=cache-system.js.map
|
package/dist/cache-system.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cache-system.js","sourceRoot":"","sources":["../src/cache-system.ts"],"names":[],"mappings":";;;AACA,0EAA+E;AAC/E,
|
|
1
|
+
{"version":3,"file":"cache-system.js","sourceRoot":"","sources":["../src/cache-system.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
import { type AppLog } from "@paroicms/server-lib";
|
|
2
2
|
import type { DataSource } from "typeorm";
|
|
3
|
-
export declare function
|
|
3
|
+
export declare function createOrOpenConnection({ sqliteFile, appVersion, appLog, }: {
|
|
4
4
|
sqliteFile: string;
|
|
5
|
-
|
|
5
|
+
appVersion: string;
|
|
6
6
|
appLog: AppLog;
|
|
7
7
|
}): Promise<{
|
|
8
|
-
|
|
8
|
+
cn: DataSource;
|
|
9
9
|
logNextQuery: (count?: number | undefined) => void;
|
|
10
|
+
isCleared: boolean;
|
|
10
11
|
}>;
|
package/dist/db-init/db-init.js
CHANGED
|
@@ -1,36 +1,56 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.
|
|
4
|
-
const node_path_1 = require("node:path");
|
|
3
|
+
exports.createOrOpenConnection = void 0;
|
|
5
4
|
const server_lib_1 = require("@paroicms/server-lib");
|
|
5
|
+
const node_path_1 = require("node:path");
|
|
6
6
|
const constants_1 = require("../constants");
|
|
7
|
-
const
|
|
8
|
-
const PaCacheDependency_entity_1 = require("../entities/PaCacheDependency.entity");
|
|
7
|
+
const queries_1 = require("../internal/queries");
|
|
9
8
|
const ddl_migration_1 = require("./ddl-migration");
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
9
|
+
const PaTextCache_entity_1 = require("./entities/PaTextCache.entity");
|
|
10
|
+
const PaTextCacheDependency_entity_1 = require("./entities/PaTextCacheDependency.entity");
|
|
11
|
+
async function createOrOpenConnection({ sqliteFile, appVersion, appLog, }) {
|
|
12
|
+
const { logNextQuery, typeOrmLogger } = (0, server_lib_1.createSqlLogger)({ appLog, dbSchemaName: ddl_migration_1.dbSchemaName });
|
|
13
|
+
const { cn, isNewDb, migrationReport } = await (0, server_lib_1.createOrOpenSqliteConnection)({
|
|
14
14
|
canCreate: true,
|
|
15
15
|
dbSchemaName: ddl_migration_1.dbSchemaName,
|
|
16
16
|
sqliteFile,
|
|
17
17
|
ddlFile: (0, node_path_1.join)(constants_1.packageDir, "ddl", "text-cache.ddl.sql"),
|
|
18
18
|
migrateDb,
|
|
19
|
-
entities: [
|
|
19
|
+
entities: [PaTextCache_entity_1.PaTextCacheEntity, PaTextCacheDependency_entity_1.PaTextCacheDependencyEntity],
|
|
20
20
|
logger: typeOrmLogger,
|
|
21
21
|
appLog,
|
|
22
22
|
});
|
|
23
|
+
let isCleared = isNewDb || migrationReport.migrated;
|
|
24
|
+
const storedAppVersion = await (0, server_lib_1.getMetadataValue)(cn, { dbSchemaName: ddl_migration_1.dbSchemaName, key: "appVersion" });
|
|
25
|
+
if (storedAppVersion !== appVersion) {
|
|
26
|
+
if (!isCleared) {
|
|
27
|
+
await (0, queries_1.clearCacheValues)({ cn });
|
|
28
|
+
isCleared = true;
|
|
29
|
+
}
|
|
30
|
+
await (0, server_lib_1.setMetadataValue)(cn, { dbSchemaName: ddl_migration_1.dbSchemaName, key: "appVersion", value: appVersion });
|
|
31
|
+
if (storedAppVersion !== undefined) {
|
|
32
|
+
appLog.info(`Cleared text cache due to app version change from ${storedAppVersion} to ${appVersion}`);
|
|
33
|
+
}
|
|
34
|
+
}
|
|
23
35
|
async function migrateDb(cn) {
|
|
24
|
-
const dbVersion = await (0,
|
|
25
|
-
if (dbVersion
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
});
|
|
36
|
+
const dbVersion = await (0, server_lib_1.getMetadataDbSchemaVersion)(cn, { dbSchemaName: ddl_migration_1.dbSchemaName });
|
|
37
|
+
if (dbVersion === ddl_migration_1.currentDbSchemaVersion) {
|
|
38
|
+
return {
|
|
39
|
+
migrated: false,
|
|
40
|
+
schemaVersion: dbVersion,
|
|
41
|
+
};
|
|
31
42
|
}
|
|
43
|
+
await (0, ddl_migration_1.migrateTextCacheDb)(cn, {
|
|
44
|
+
fromVersion: dbVersion,
|
|
45
|
+
appLog,
|
|
46
|
+
});
|
|
47
|
+
return {
|
|
48
|
+
migrated: true,
|
|
49
|
+
fromVersion: dbVersion,
|
|
50
|
+
schemaVersion: ddl_migration_1.currentDbSchemaVersion,
|
|
51
|
+
};
|
|
32
52
|
}
|
|
33
|
-
return {
|
|
53
|
+
return { cn, logNextQuery, isCleared };
|
|
34
54
|
}
|
|
35
|
-
exports.
|
|
55
|
+
exports.createOrOpenConnection = createOrOpenConnection;
|
|
36
56
|
//# sourceMappingURL=db-init.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"db-init.js","sourceRoot":"","sources":["../../src/db-init/db-init.ts"],"names":[],"mappings":";;;AAAA,
|
|
1
|
+
{"version":3,"file":"db-init.js","sourceRoot":"","sources":["../../src/db-init/db-init.ts"],"names":[],"mappings":";;;AAAA,qDAQ8B;AAC9B,yCAAiC;AAEjC,4CAA0C;AAC1C,iDAAuD;AACvD,mDAA2F;AAC3F,sEAAkE;AAClE,0FAAsF;AAE/E,KAAK,UAAU,sBAAsB,CAAC,EAC3C,UAAU,EACV,UAAU,EACV,MAAM,GACqD;IAC3D,MAAM,EAAE,YAAY,EAAE,aAAa,EAAE,GAAG,IAAA,4BAAe,EAAC,EAAE,MAAM,EAAE,YAAY,EAAZ,4BAAY,EAAE,CAAC,CAAC;IAElF,MAAM,EAAE,EAAE,EAAE,OAAO,EAAE,eAAe,EAAE,GAAG,MAAM,IAAA,yCAA4B,EAAC;QAC1E,SAAS,EAAE,IAAI;QACf,YAAY,EAAZ,4BAAY;QACZ,UAAU;QACV,OAAO,EAAE,IAAA,gBAAI,EAAC,sBAAU,EAAE,KAAK,EAAE,oBAAoB,CAAC;QACtD,SAAS;QACT,QAAQ,EAAE,CAAC,sCAAiB,EAAE,0DAA2B,CAAC;QAC1D,MAAM,EAAE,aAAa;QACrB,MAAM;KACP,CAAC,CAAC;IAEH,IAAI,SAAS,GAAG,OAAO,IAAI,eAAe,CAAC,QAAQ,CAAC;IAEpD,MAAM,gBAAgB,GAAG,MAAM,IAAA,6BAAgB,EAAC,EAAE,EAAE,EAAE,YAAY,EAAZ,4BAAY,EAAE,GAAG,EAAE,YAAY,EAAE,CAAC,CAAC;IACzF,IAAI,gBAAgB,KAAK,UAAU,EAAE,CAAC;QACpC,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,MAAM,IAAA,0BAAgB,EAAC,EAAE,EAAE,EAAE,CAAC,CAAC;YAC/B,SAAS,GAAG,IAAI,CAAC;QACnB,CAAC;QACD,MAAM,IAAA,6BAAgB,EAAC,EAAE,EAAE,EAAE,YAAY,EAAZ,4BAAY,EAAE,GAAG,EAAE,YAAY,EAAE,KAAK,EAAE,UAAU,EAAE,CAAC,CAAC;QACnF,IAAI,gBAAgB,KAAK,SAAS,EAAE,CAAC;YACnC,MAAM,CAAC,IAAI,CACT,qDAAqD,gBAAgB,OAAO,UAAU,EAAE,CACzF,CAAC;QACJ,CAAC;IACH,CAAC;IAED,KAAK,UAAU,SAAS,CAAC,EAAc;QACrC,MAAM,SAAS,GAAG,MAAM,IAAA,uCAA0B,EAAC,EAAE,EAAE,EAAE,YAAY,EAAZ,4BAAY,EAAE,CAAC,CAAC;QACzE,IAAI,SAAS,KAAK,sCAAsB,EAAE,CAAC;YACzC,OAAO;gBACL,QAAQ,EAAE,KAAK;gBACf,aAAa,EAAE,SAAS;aACzB,CAAC;QACJ,CAAC;QACD,MAAM,IAAA,kCAAkB,EAAC,EAAE,EAAE;YAC3B,WAAW,EAAE,SAAS;YACtB,MAAM;SACP,CAAC,CAAC;QACH,OAAO;YACL,QAAQ,EAAE,IAAI;YACd,WAAW,EAAE,SAAS;YACtB,aAAa,EAAE,sCAAsB;SACtC,CAAC;IACJ,CAAC;IAED,OAAO,EAAE,EAAE,EAAE,YAAY,EAAE,SAAS,EAAE,CAAC;AACzC,CAAC;AAtDD,wDAsDC"}
|
|
@@ -1,12 +1,8 @@
|
|
|
1
1
|
import { type AppLog } from "@paroicms/server-lib";
|
|
2
2
|
import type { DataSource } from "typeorm";
|
|
3
3
|
export declare const dbSchemaName = "text-cache";
|
|
4
|
-
export declare const
|
|
5
|
-
export declare function
|
|
6
|
-
siteName: string;
|
|
7
|
-
}): Promise<number>;
|
|
8
|
-
export declare function migrateMediasDb(cn: DataSource, { fromVersion, siteName, appLog }: {
|
|
4
|
+
export declare const currentDbSchemaVersion = 3;
|
|
5
|
+
export declare function migrateTextCacheDb(cn: DataSource, { fromVersion, appLog }: {
|
|
9
6
|
fromVersion: number;
|
|
10
|
-
siteName: string;
|
|
11
7
|
appLog: AppLog;
|
|
12
8
|
}): Promise<void>;
|
|
@@ -1,32 +1,30 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.
|
|
4
|
-
const data_formatters_lib_1 = require("@paroi/data-formatters-lib");
|
|
3
|
+
exports.migrateTextCacheDb = exports.currentDbSchemaVersion = exports.dbSchemaName = void 0;
|
|
5
4
|
const server_lib_1 = require("@paroicms/server-lib");
|
|
6
5
|
const node_path_1 = require("node:path");
|
|
7
6
|
const constants_1 = require("../constants");
|
|
8
7
|
exports.dbSchemaName = "text-cache";
|
|
9
|
-
exports.
|
|
10
|
-
async function
|
|
11
|
-
const
|
|
12
|
-
if (!row)
|
|
13
|
-
throw new Error(`[${siteName}] missing dbSchema '${exports.dbSchemaName}' in database`);
|
|
14
|
-
return (0, data_formatters_lib_1.nbVal)(row.dbVersion, { varName: "dbVersion" });
|
|
15
|
-
}
|
|
16
|
-
exports.getDbVersion = getDbVersion;
|
|
17
|
-
async function migrateMediasDb(cn, { fromVersion, siteName, appLog }) {
|
|
18
|
-
const toVersion = exports.currentVariantsDbSchemaVersion;
|
|
8
|
+
exports.currentDbSchemaVersion = 3;
|
|
9
|
+
async function migrateTextCacheDb(cn, { fromVersion, appLog }) {
|
|
10
|
+
const toVersion = exports.currentDbSchemaVersion;
|
|
19
11
|
let currentVersion = fromVersion;
|
|
12
|
+
if (currentVersion <= 2) {
|
|
13
|
+
await cn.query("drop table if exists PaTextCacheScheduledInvalidation");
|
|
14
|
+
await cn.query("drop index if exists PaTextCacheDependency_depK_index");
|
|
15
|
+
await cn.query("drop table if exists PaTextCacheDependency");
|
|
16
|
+
await cn.query("drop table if exists PaTextCache");
|
|
17
|
+
}
|
|
20
18
|
// We don't care losing cache data
|
|
21
19
|
if (currentVersion < toVersion) {
|
|
22
|
-
appLog.info(
|
|
20
|
+
appLog.info("reset the text-cache database");
|
|
23
21
|
await (0, server_lib_1.executeDdl)(cn, (0, node_path_1.join)(constants_1.packageDir, "ddl", "text-cache.ddl.sql"));
|
|
24
|
-
currentVersion = await
|
|
22
|
+
currentVersion = await (0, server_lib_1.getMetadataDbSchemaVersion)(cn, { dbSchemaName: exports.dbSchemaName });
|
|
25
23
|
}
|
|
26
24
|
if (currentVersion !== toVersion) {
|
|
27
|
-
throw new Error(`
|
|
25
|
+
throw new Error(`version of ${exports.dbSchemaName} database should be '${toVersion}', but is '${currentVersion}'`);
|
|
28
26
|
}
|
|
29
|
-
appLog.info(
|
|
27
|
+
appLog.info(`${exports.dbSchemaName} database was migrated from ${fromVersion} to ${currentVersion}`);
|
|
30
28
|
}
|
|
31
|
-
exports.
|
|
29
|
+
exports.migrateTextCacheDb = migrateTextCacheDb;
|
|
32
30
|
//# sourceMappingURL=ddl-migration.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ddl-migration.js","sourceRoot":"","sources":["../../src/db-init/ddl-migration.ts"],"names":[],"mappings":";;;AAAA,
|
|
1
|
+
{"version":3,"file":"ddl-migration.js","sourceRoot":"","sources":["../../src/db-init/ddl-migration.ts"],"names":[],"mappings":";;;AAAA,qDAA2F;AAC3F,yCAAiC;AAEjC,4CAA0C;AAE7B,QAAA,YAAY,GAAG,YAAY,CAAC;AAC5B,QAAA,sBAAsB,GAAG,CAAC,CAAC;AAEjC,KAAK,UAAU,kBAAkB,CACtC,EAAc,EACd,EAAE,WAAW,EAAE,MAAM,EAA2C;IAEhE,MAAM,SAAS,GAAG,8BAAsB,CAAC;IACzC,IAAI,cAAc,GAAG,WAAW,CAAC;IAEjC,IAAI,cAAc,IAAI,CAAC,EAAE,CAAC;QACxB,MAAM,EAAE,CAAC,KAAK,CAAC,uDAAuD,CAAC,CAAC;QACxE,MAAM,EAAE,CAAC,KAAK,CAAC,uDAAuD,CAAC,CAAC;QACxE,MAAM,EAAE,CAAC,KAAK,CAAC,4CAA4C,CAAC,CAAC;QAC7D,MAAM,EAAE,CAAC,KAAK,CAAC,kCAAkC,CAAC,CAAC;IACrD,CAAC;IAED,kCAAkC;IAClC,IAAI,cAAc,GAAG,SAAS,EAAE,CAAC;QAC/B,MAAM,CAAC,IAAI,CAAC,+BAA+B,CAAC,CAAC;QAC7C,MAAM,IAAA,uBAAU,EAAC,EAAE,EAAE,IAAA,gBAAI,EAAC,sBAAU,EAAE,KAAK,EAAE,oBAAoB,CAAC,CAAC,CAAC;QACpE,cAAc,GAAG,MAAM,IAAA,uCAA0B,EAAC,EAAE,EAAE,EAAE,YAAY,EAAZ,oBAAY,EAAE,CAAC,CAAC;IAC1E,CAAC;IAED,IAAI,cAAc,KAAK,SAAS,EAAE,CAAC;QACjC,MAAM,IAAI,KAAK,CACb,cAAc,oBAAY,wBAAwB,SAAS,cAAc,cAAc,GAAG,CAC3F,CAAC;IACJ,CAAC;IACD,MAAM,CAAC,IAAI,CAAC,GAAG,oBAAY,+BAA+B,WAAW,OAAO,cAAc,EAAE,CAAC,CAAC;AAChG,CAAC;AA3BD,gDA2BC"}
|
|
@@ -9,42 +9,37 @@ var __metadata = (this && this.__metadata) || function (k, v) {
|
|
|
9
9
|
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
10
10
|
};
|
|
11
11
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
-
exports.
|
|
12
|
+
exports.PaTextCacheEntity = void 0;
|
|
13
13
|
const typeorm_1 = require("typeorm");
|
|
14
|
-
let
|
|
15
|
-
id;
|
|
16
|
-
ts;
|
|
17
|
-
resourceVersion;
|
|
18
|
-
lastUseTs;
|
|
14
|
+
let PaTextCacheEntity = class PaTextCacheEntity {
|
|
19
15
|
k;
|
|
16
|
+
resourceVersion;
|
|
20
17
|
val;
|
|
18
|
+
modifiedAt;
|
|
19
|
+
readAt;
|
|
21
20
|
};
|
|
22
|
-
exports.
|
|
21
|
+
exports.PaTextCacheEntity = PaTextCacheEntity;
|
|
23
22
|
__decorate([
|
|
24
|
-
(0, typeorm_1.
|
|
23
|
+
(0, typeorm_1.Column)({ primary: true }),
|
|
25
24
|
__metadata("design:type", String)
|
|
26
|
-
],
|
|
27
|
-
__decorate([
|
|
28
|
-
(0, typeorm_1.Column)({ type: "datetime", default: () => "current_timestamp" }),
|
|
29
|
-
__metadata("design:type", Date)
|
|
30
|
-
], PaCacheEntity.prototype, "ts", void 0);
|
|
25
|
+
], PaTextCacheEntity.prototype, "k", void 0);
|
|
31
26
|
__decorate([
|
|
32
27
|
(0, typeorm_1.Column)(),
|
|
33
28
|
__metadata("design:type", String)
|
|
34
|
-
],
|
|
29
|
+
], PaTextCacheEntity.prototype, "resourceVersion", void 0);
|
|
30
|
+
__decorate([
|
|
31
|
+
(0, typeorm_1.Column)({ type: "text" }),
|
|
32
|
+
__metadata("design:type", String)
|
|
33
|
+
], PaTextCacheEntity.prototype, "val", void 0);
|
|
35
34
|
__decorate([
|
|
36
35
|
(0, typeorm_1.Column)({ type: "datetime", default: () => "current_timestamp" }),
|
|
37
36
|
__metadata("design:type", Date)
|
|
38
|
-
],
|
|
37
|
+
], PaTextCacheEntity.prototype, "modifiedAt", void 0);
|
|
39
38
|
__decorate([
|
|
40
|
-
(0, typeorm_1.Column)(),
|
|
41
|
-
__metadata("design:type",
|
|
42
|
-
],
|
|
43
|
-
__decorate([
|
|
44
|
-
(0, typeorm_1.
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
exports.PaCacheEntity = PaCacheEntity = __decorate([
|
|
48
|
-
(0, typeorm_1.Entity)("PaCache")
|
|
49
|
-
], PaCacheEntity);
|
|
50
|
-
//# sourceMappingURL=PaCache.entity.js.map
|
|
39
|
+
(0, typeorm_1.Column)({ type: "datetime", default: () => "current_timestamp" }),
|
|
40
|
+
__metadata("design:type", Date)
|
|
41
|
+
], PaTextCacheEntity.prototype, "readAt", void 0);
|
|
42
|
+
exports.PaTextCacheEntity = PaTextCacheEntity = __decorate([
|
|
43
|
+
(0, typeorm_1.Entity)("PaTextCache")
|
|
44
|
+
], PaTextCacheEntity);
|
|
45
|
+
//# sourceMappingURL=PaTextCache.entity.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PaTextCache.entity.js","sourceRoot":"","sources":["../../../src/db-init/entities/PaTextCache.entity.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,qCAAyC;AAGlC,IAAM,iBAAiB,GAAvB,MAAM,iBAAiB;IAE5B,CAAC,CAAU;IAGX,eAAe,CAAU;IAGzB,GAAG,CAAU;IAGb,UAAU,CAAQ;IAGlB,MAAM,CAAQ;CACf,CAAA;AAfY,8CAAiB;AAE5B;IADC,IAAA,gBAAM,EAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;;4CACf;AAGX;IADC,IAAA,gBAAM,GAAE;;0DACgB;AAGzB;IADC,IAAA,gBAAM,EAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;;8CACZ;AAGb;IADC,IAAA,gBAAM,EAAC,EAAE,IAAI,EAAE,UAAU,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,mBAAmB,EAAE,CAAC;8BACpD,IAAI;qDAAC;AAGlB;IADC,IAAA,gBAAM,EAAC,EAAE,IAAI,EAAE,UAAU,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,mBAAmB,EAAE,CAAC;8BACxD,IAAI;iDAAC;4BAdH,iBAAiB;IAD7B,IAAA,gBAAM,EAAC,aAAa,CAAC;GACT,iBAAiB,CAe7B"}
|
|
@@ -9,22 +9,22 @@ var __metadata = (this && this.__metadata) || function (k, v) {
|
|
|
9
9
|
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
10
10
|
};
|
|
11
11
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
-
exports.
|
|
12
|
+
exports.PaTextCacheDependencyEntity = void 0;
|
|
13
13
|
const typeorm_1 = require("typeorm");
|
|
14
|
-
let
|
|
15
|
-
|
|
14
|
+
let PaTextCacheDependencyEntity = class PaTextCacheDependencyEntity {
|
|
15
|
+
cacheK;
|
|
16
16
|
depK;
|
|
17
17
|
};
|
|
18
|
-
exports.
|
|
18
|
+
exports.PaTextCacheDependencyEntity = PaTextCacheDependencyEntity;
|
|
19
19
|
__decorate([
|
|
20
|
-
(0, typeorm_1.Column)({
|
|
20
|
+
(0, typeorm_1.Column)({ primary: true }),
|
|
21
21
|
__metadata("design:type", String)
|
|
22
|
-
],
|
|
22
|
+
], PaTextCacheDependencyEntity.prototype, "cacheK", void 0);
|
|
23
23
|
__decorate([
|
|
24
24
|
(0, typeorm_1.Column)({ primary: true }),
|
|
25
25
|
__metadata("design:type", String)
|
|
26
|
-
],
|
|
27
|
-
exports.
|
|
28
|
-
(0, typeorm_1.Entity)("
|
|
29
|
-
],
|
|
30
|
-
//# sourceMappingURL=
|
|
26
|
+
], PaTextCacheDependencyEntity.prototype, "depK", void 0);
|
|
27
|
+
exports.PaTextCacheDependencyEntity = PaTextCacheDependencyEntity = __decorate([
|
|
28
|
+
(0, typeorm_1.Entity)("PaTextCacheDependency")
|
|
29
|
+
], PaTextCacheDependencyEntity);
|
|
30
|
+
//# sourceMappingURL=PaTextCacheDependency.entity.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PaTextCacheDependency.entity.js","sourceRoot":"","sources":["../../../src/db-init/entities/PaTextCacheDependency.entity.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,qCAAyC;AAGlC,IAAM,2BAA2B,GAAjC,MAAM,2BAA2B;IAEtC,MAAM,CAAU;IAGhB,IAAI,CAAU;CACf,CAAA;AANY,kEAA2B;AAEtC;IADC,IAAA,gBAAM,EAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;;2DACV;AAGhB;IADC,IAAA,gBAAM,EAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;;yDACZ;sCALH,2BAA2B;IADvC,IAAA,gBAAM,EAAC,uBAAuB,CAAC;GACnB,2BAA2B,CAMvC"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
+
};
|
|
8
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
9
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
10
|
+
};
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.PaTextCacheScheduledInvalidationEntity = void 0;
|
|
13
|
+
const typeorm_1 = require("typeorm");
|
|
14
|
+
let PaTextCacheScheduledInvalidationEntity = class PaTextCacheScheduledInvalidationEntity {
|
|
15
|
+
eventK;
|
|
16
|
+
depK;
|
|
17
|
+
scheduledAt;
|
|
18
|
+
scheduledSince;
|
|
19
|
+
};
|
|
20
|
+
exports.PaTextCacheScheduledInvalidationEntity = PaTextCacheScheduledInvalidationEntity;
|
|
21
|
+
__decorate([
|
|
22
|
+
(0, typeorm_1.Column)({ primary: true }),
|
|
23
|
+
__metadata("design:type", String)
|
|
24
|
+
], PaTextCacheScheduledInvalidationEntity.prototype, "eventK", void 0);
|
|
25
|
+
__decorate([
|
|
26
|
+
(0, typeorm_1.Column)({ primary: true }),
|
|
27
|
+
__metadata("design:type", String)
|
|
28
|
+
], PaTextCacheScheduledInvalidationEntity.prototype, "depK", void 0);
|
|
29
|
+
__decorate([
|
|
30
|
+
(0, typeorm_1.Column)({ type: "datetime" }),
|
|
31
|
+
__metadata("design:type", Date)
|
|
32
|
+
], PaTextCacheScheduledInvalidationEntity.prototype, "scheduledAt", void 0);
|
|
33
|
+
__decorate([
|
|
34
|
+
(0, typeorm_1.Column)({ type: "datetime", default: () => "current_timestamp" }),
|
|
35
|
+
__metadata("design:type", Date)
|
|
36
|
+
], PaTextCacheScheduledInvalidationEntity.prototype, "scheduledSince", void 0);
|
|
37
|
+
exports.PaTextCacheScheduledInvalidationEntity = PaTextCacheScheduledInvalidationEntity = __decorate([
|
|
38
|
+
(0, typeorm_1.Entity)("PaTextCacheScheduledInvalidation")
|
|
39
|
+
], PaTextCacheScheduledInvalidationEntity);
|
|
40
|
+
//# sourceMappingURL=PaTextCacheScheduledInvalidation.entity.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PaTextCacheScheduledInvalidation.entity.js","sourceRoot":"","sources":["../../../src/db-init/entities/PaTextCacheScheduledInvalidation.entity.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,qCAAyC;AAGlC,IAAM,sCAAsC,GAA5C,MAAM,sCAAsC;IAEjD,MAAM,CAAU;IAGhB,IAAI,CAAU;IAGd,WAAW,CAAQ;IAGnB,cAAc,CAAQ;CACvB,CAAA;AAZY,wFAAsC;AAEjD;IADC,IAAA,gBAAM,EAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;;sEACV;AAGhB;IADC,IAAA,gBAAM,EAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;;oEACZ;AAGd;IADC,IAAA,gBAAM,EAAC,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC;8BACf,IAAI;2EAAC;AAGnB;IADC,IAAA,gBAAM,EAAC,EAAE,IAAI,EAAE,UAAU,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,mBAAmB,EAAE,CAAC;8BAChD,IAAI;8EAAC;iDAXX,sCAAsC;IADlD,IAAA,gBAAM,EAAC,kCAAkC,CAAC;GAC9B,sCAAsC,CAYlD"}
|
|
@@ -1,14 +1,18 @@
|
|
|
1
1
|
import type { AppLog } from "@paroicms/server-lib";
|
|
2
|
-
import type { DataSource
|
|
2
|
+
import type { DataSource } from "typeorm";
|
|
3
3
|
import type { CreateTextCacheSystemOptions } from "../cache-system";
|
|
4
4
|
import type { TextCacheSystemStorage } from "../public-types";
|
|
5
|
+
import { type InvalidationScheduler } from "./scheduler";
|
|
5
6
|
export interface TextCacheSystemContext extends CreateTextCacheSystemOptions {
|
|
6
7
|
status: "ready" | "destroyed";
|
|
7
8
|
appLog: AppLog;
|
|
8
|
-
|
|
9
|
-
cn: EntityManager;
|
|
9
|
+
cn: DataSource;
|
|
10
10
|
storage: TextCacheSystemStorage;
|
|
11
11
|
logNextQuery: (count?: number) => void;
|
|
12
12
|
timeToIdleDays?: number;
|
|
13
|
+
scheduler: InvalidationScheduler;
|
|
13
14
|
}
|
|
14
|
-
export declare function createTextCacheSystemContext(options: CreateTextCacheSystemOptions): Promise<
|
|
15
|
+
export declare function createTextCacheSystemContext(options: CreateTextCacheSystemOptions): Promise<{
|
|
16
|
+
context: TextCacheSystemContext;
|
|
17
|
+
isCleared: boolean;
|
|
18
|
+
}>;
|
|
@@ -3,20 +3,23 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.createTextCacheSystemContext = void 0;
|
|
4
4
|
const anywhere_lib_1 = require("@paroicms/anywhere-lib");
|
|
5
5
|
const db_init_1 = require("../db-init/db-init");
|
|
6
|
+
const scheduler_1 = require("./scheduler");
|
|
6
7
|
async function createTextCacheSystemContext(options) {
|
|
7
|
-
const {
|
|
8
|
-
|
|
8
|
+
const { cn, logNextQuery, isCleared } = await (0, db_init_1.createOrOpenConnection)({
|
|
9
|
+
appVersion: options.appVersion,
|
|
9
10
|
sqliteFile: options.storage.file,
|
|
10
11
|
appLog: options.appLog,
|
|
11
12
|
});
|
|
12
|
-
|
|
13
|
+
const context = {
|
|
13
14
|
...options,
|
|
14
15
|
status: "ready",
|
|
15
|
-
|
|
16
|
-
cn: mainCn.manager,
|
|
16
|
+
cn,
|
|
17
17
|
logNextQuery,
|
|
18
18
|
timeToIdleDays: options.timeToIdle === undefined ? undefined : (0, anywhere_lib_1.parseTimeWithUnit)(options.timeToIdle).delay,
|
|
19
|
+
scheduler: undefined,
|
|
19
20
|
};
|
|
21
|
+
context.scheduler = (0, scheduler_1.startScheduler)(context);
|
|
22
|
+
return { context, isCleared };
|
|
20
23
|
}
|
|
21
24
|
exports.createTextCacheSystemContext = createTextCacheSystemContext;
|
|
22
25
|
//# sourceMappingURL=cache-system-context.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cache-system-context.js","sourceRoot":"","sources":["../../src/internal/cache-system-context.ts"],"names":[],"mappings":";;;AAAA,yDAA2D;AAI3D,
|
|
1
|
+
{"version":3,"file":"cache-system-context.js","sourceRoot":"","sources":["../../src/internal/cache-system-context.ts"],"names":[],"mappings":";;;AAAA,yDAA2D;AAI3D,gDAA4D;AAE5D,2CAAyE;AAYlE,KAAK,UAAU,4BAA4B,CAChD,OAAqC;IAErC,MAAM,EAAE,EAAE,EAAE,YAAY,EAAE,SAAS,EAAE,GAAG,MAAM,IAAA,gCAAsB,EAAC;QACnE,UAAU,EAAE,OAAO,CAAC,UAAU;QAC9B,UAAU,EAAE,OAAO,CAAC,OAAO,CAAC,IAAI;QAChC,MAAM,EAAE,OAAO,CAAC,MAAM;KACvB,CAAC,CAAC;IAEH,MAAM,OAAO,GAAG;QACd,GAAG,OAAO;QACV,MAAM,EAAE,OAAgC;QACxC,EAAE;QACF,YAAY;QACZ,cAAc,EACZ,OAAO,CAAC,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAA,gCAAiB,EAAC,OAAO,CAAC,UAAU,CAAC,CAAC,KAAK;QAC5F,SAAS,EAAE,SAAgB;KAC5B,CAAC;IAEF,OAAO,CAAC,SAAS,GAAG,IAAA,0BAAc,EAAC,OAAO,CAAC,CAAC;IAE5C,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC;AAChC,CAAC;AAtBD,oEAsBC"}
|
|
@@ -1,18 +1,18 @@
|
|
|
1
|
-
import { type Tracker } from "@paroicms/server-lib";
|
|
2
|
-
import type { EntityManager } from "typeorm";
|
|
1
|
+
import { type QueryBuilderConnection, type Tracker } from "@paroicms/server-lib";
|
|
3
2
|
import type { CacheSetData, CacheValue } from "../public-types";
|
|
4
3
|
import type { TextCacheSystemContext } from "./cache-system-context";
|
|
5
|
-
export declare function insertOrUpdateCacheValue(cn:
|
|
6
|
-
export declare function getCacheValue({ cn, timeToIdleDays, appLog
|
|
4
|
+
export declare function insertOrUpdateCacheValue(cn: QueryBuilderConnection, data: CacheSetData, tracker: Tracker): Promise<CacheValue>;
|
|
5
|
+
export declare function getCacheValue({ cn, timeToIdleDays, appLog }: TextCacheSystemContext, cacheKey: string, tracker: Tracker): Promise<CacheValue | undefined>;
|
|
7
6
|
export declare function getDependencyKeys({ cn }: TextCacheSystemContext, cacheKey: string, tracker: Tracker): Promise<string[]>;
|
|
8
7
|
/**
|
|
9
8
|
* @returns the list of cache cacheKeys that were deleted
|
|
10
9
|
*/
|
|
11
|
-
export declare function deleteCacheValues(cn:
|
|
10
|
+
export declare function deleteCacheValues(cn: QueryBuilderConnection, options: {
|
|
12
11
|
dependencyKeys: string[];
|
|
13
12
|
}): Promise<string[]>;
|
|
14
13
|
/**
|
|
15
14
|
* @returns the number of cache identifiers that were deleted
|
|
16
15
|
*/
|
|
17
16
|
export declare function deleteUnusedCacheValues({ cn, timeToIdleDays, }: TextCacheSystemContext): Promise<number | undefined>;
|
|
18
|
-
export declare function
|
|
17
|
+
export declare function invalidateAllCacheValues({ cn, }: Pick<TextCacheSystemContext, "cn">): Promise<void>;
|
|
18
|
+
export declare function clearCacheValues({ cn }: Pick<TextCacheSystemContext, "cn">): Promise<void>;
|
package/dist/internal/queries.js
CHANGED
|
@@ -1,89 +1,72 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.clearCacheValues = exports.deleteUnusedCacheValues = exports.deleteCacheValues = exports.getDependencyKeys = exports.getCacheValue = exports.insertOrUpdateCacheValue = void 0;
|
|
3
|
+
exports.clearCacheValues = exports.invalidateAllCacheValues = exports.deleteUnusedCacheValues = exports.deleteCacheValues = exports.getDependencyKeys = exports.getCacheValue = exports.insertOrUpdateCacheValue = void 0;
|
|
4
4
|
const data_formatters_lib_1 = require("@paroi/data-formatters-lib");
|
|
5
5
|
const anywhere_lib_1 = require("@paroicms/anywhere-lib");
|
|
6
6
|
const server_lib_1 = require("@paroicms/server-lib");
|
|
7
7
|
const ddl_migration_1 = require("../db-init/ddl-migration");
|
|
8
8
|
async function insertOrUpdateCacheValue(cn, data, tracker) {
|
|
9
9
|
const resourceVersion = (0, server_lib_1.generateResourceVersion)();
|
|
10
|
-
|
|
10
|
+
await cn
|
|
11
|
+
.createQueryBuilder()
|
|
12
|
+
.delete()
|
|
13
|
+
.from("PaTextCache")
|
|
14
|
+
.where("k = :k", { k: data.cacheKey })
|
|
15
|
+
.execute();
|
|
16
|
+
tracker.trackAccess(ddl_migration_1.dbSchemaName, "PaTextCache", "delete");
|
|
17
|
+
await cn
|
|
11
18
|
.createQueryBuilder()
|
|
12
19
|
.insert()
|
|
13
|
-
.into("
|
|
20
|
+
.into("PaTextCache")
|
|
14
21
|
.values({
|
|
15
22
|
k: data.cacheKey,
|
|
16
23
|
val: data.value,
|
|
17
24
|
resourceVersion,
|
|
18
|
-
|
|
19
|
-
|
|
25
|
+
modifiedAt: () => "current_timestamp",
|
|
26
|
+
readAt: () => "current_timestamp",
|
|
20
27
|
})
|
|
21
|
-
.orUpdate(["val", "resourceVersion", "ts", "lastUseTs"], ["k"])
|
|
22
28
|
.execute();
|
|
23
|
-
tracker.trackAccess(ddl_migration_1.dbSchemaName, "
|
|
24
|
-
let newId = (0, data_formatters_lib_1.strValOrUndef)(result.identifiers[0].id, { varName: "PaCache.id" });
|
|
25
|
-
if (newId === undefined) {
|
|
26
|
-
const row = await cn
|
|
27
|
-
.createQueryBuilder()
|
|
28
|
-
.select("c.id", "id")
|
|
29
|
-
.from("PaCache", "c")
|
|
30
|
-
.where("c.k = :cacheKey", { cacheKey: data.cacheKey })
|
|
31
|
-
.getRawOne();
|
|
32
|
-
if (!row)
|
|
33
|
-
throw new Error(`unable to find cache row '${data.cacheKey}'`);
|
|
34
|
-
tracker.trackAccess(ddl_migration_1.dbSchemaName, "PaCache", "read");
|
|
35
|
-
newId = (0, data_formatters_lib_1.strVal)(row.id);
|
|
36
|
-
}
|
|
29
|
+
tracker.trackAccess(ddl_migration_1.dbSchemaName, "PaTextCache", "write");
|
|
37
30
|
await cn
|
|
38
31
|
.createQueryBuilder()
|
|
39
32
|
.insert()
|
|
40
|
-
.into("
|
|
33
|
+
.into("PaTextCacheDependency")
|
|
41
34
|
.values(data.dependencyKeys.map((depK) => ({
|
|
42
|
-
|
|
35
|
+
cacheK: data.cacheKey,
|
|
43
36
|
depK,
|
|
44
37
|
})))
|
|
45
38
|
.execute();
|
|
46
|
-
tracker.trackAccess(ddl_migration_1.dbSchemaName, "
|
|
47
|
-
const row = await cn
|
|
48
|
-
.createQueryBuilder()
|
|
49
|
-
.select("c.ts", "ts")
|
|
50
|
-
.from("PaCache", "c")
|
|
51
|
-
.where("c.id = :id", { id: newId })
|
|
52
|
-
.getRawOne();
|
|
53
|
-
tracker.trackAccess(ddl_migration_1.dbSchemaName, "PaCacheDependency", "read");
|
|
54
|
-
if (!row)
|
|
55
|
-
throw new Error(`missing cache row: ${newId}`);
|
|
39
|
+
tracker.trackAccess(ddl_migration_1.dbSchemaName, "PaTextCacheDependency", "write");
|
|
56
40
|
return {
|
|
57
41
|
resourceVersion,
|
|
58
42
|
value: data.value,
|
|
59
43
|
};
|
|
60
44
|
}
|
|
61
45
|
exports.insertOrUpdateCacheValue = insertOrUpdateCacheValue;
|
|
62
|
-
async function getCacheValue({ cn, timeToIdleDays, appLog
|
|
46
|
+
async function getCacheValue({ cn, timeToIdleDays, appLog }, cacheKey, tracker) {
|
|
63
47
|
const row = await cn
|
|
64
48
|
.createQueryBuilder()
|
|
65
49
|
.select("c.val", "val")
|
|
66
50
|
.addSelect("c.resourceVersion", "resourceVersion")
|
|
67
|
-
.addSelect("c.
|
|
68
|
-
.
|
|
69
|
-
.
|
|
70
|
-
.where("c.k = :cacheKey", { cacheKey })
|
|
51
|
+
.addSelect("c.readAt", "readAt")
|
|
52
|
+
.from("PaTextCache", "c")
|
|
53
|
+
.where("c.k = :k", { k: cacheKey })
|
|
71
54
|
.getRawOne();
|
|
72
|
-
tracker.trackAccess(ddl_migration_1.dbSchemaName, "
|
|
55
|
+
tracker.trackAccess(ddl_migration_1.dbSchemaName, "PaTextCache", "read");
|
|
73
56
|
if (!row)
|
|
74
57
|
return;
|
|
75
|
-
const
|
|
76
|
-
if (timeToIdleDays !== undefined && !(0, anywhere_lib_1.isSameTimeUnit)(
|
|
77
|
-
appLog.debug(`
|
|
58
|
+
const readAt = (0, data_formatters_lib_1.dateVal)(row.readAt);
|
|
59
|
+
if (timeToIdleDays !== undefined && !(0, anywhere_lib_1.isSameTimeUnit)(readAt, "day")) {
|
|
60
|
+
appLog.debug(`updating readAt of cache: ${cacheKey}`);
|
|
78
61
|
await cn
|
|
79
62
|
.createQueryBuilder()
|
|
80
|
-
.update("
|
|
63
|
+
.update("PaTextCache")
|
|
81
64
|
.set({
|
|
82
|
-
|
|
65
|
+
readAt: () => "current_timestamp",
|
|
83
66
|
})
|
|
84
|
-
.where("k = :
|
|
67
|
+
.where("k = :k", { k: cacheKey })
|
|
85
68
|
.execute();
|
|
86
|
-
tracker.trackAccess(ddl_migration_1.dbSchemaName, "
|
|
69
|
+
tracker.trackAccess(ddl_migration_1.dbSchemaName, "PaTextCache", "write");
|
|
87
70
|
}
|
|
88
71
|
return {
|
|
89
72
|
value: (0, data_formatters_lib_1.strVal)(row.val),
|
|
@@ -95,11 +78,11 @@ async function getDependencyKeys({ cn }, cacheKey, tracker) {
|
|
|
95
78
|
const rows = await cn
|
|
96
79
|
.createQueryBuilder()
|
|
97
80
|
.select("d.depK", "depK")
|
|
98
|
-
.from("
|
|
99
|
-
.innerJoin("
|
|
100
|
-
.where("c.k = :
|
|
81
|
+
.from("PaTextCacheDependency", "d")
|
|
82
|
+
.innerJoin("PaTextCache", "c", "c.k = d.cacheK")
|
|
83
|
+
.where("c.k = :k", { k: cacheKey })
|
|
101
84
|
.getRawMany();
|
|
102
|
-
tracker.trackAccess(ddl_migration_1.dbSchemaName, "
|
|
85
|
+
tracker.trackAccess(ddl_migration_1.dbSchemaName, "PaTextCacheDependency", "read");
|
|
103
86
|
return rows.map((row) => (0, data_formatters_lib_1.strVal)(row.depK));
|
|
104
87
|
}
|
|
105
88
|
exports.getDependencyKeys = getDependencyKeys;
|
|
@@ -109,19 +92,17 @@ exports.getDependencyKeys = getDependencyKeys;
|
|
|
109
92
|
async function deleteCacheValues(cn, options) {
|
|
110
93
|
const rows = await cn
|
|
111
94
|
.createQueryBuilder()
|
|
112
|
-
.select("c.
|
|
113
|
-
.
|
|
114
|
-
.
|
|
115
|
-
.innerJoin("PaCacheDependency", "d", "d.cacheId = c.id")
|
|
95
|
+
.select("c.k", "k")
|
|
96
|
+
.from("PaTextCache", "c")
|
|
97
|
+
.innerJoin("PaTextCacheDependency", "d", "d.cacheK = c.k")
|
|
116
98
|
.where("d.depK in (:...dependencyKeys)", { dependencyKeys: options.dependencyKeys })
|
|
117
99
|
.getRawMany();
|
|
118
100
|
const cacheKeys = rows.map((row) => (0, data_formatters_lib_1.strVal)(row.k));
|
|
119
|
-
const cacheIds = rows.map((row) => (0, data_formatters_lib_1.strVal)(row.id));
|
|
120
101
|
await cn
|
|
121
102
|
.createQueryBuilder()
|
|
122
103
|
.delete()
|
|
123
|
-
.from("
|
|
124
|
-
.where("
|
|
104
|
+
.from("PaTextCache")
|
|
105
|
+
.where("k in (:...cacheKeys)", { cacheKeys })
|
|
125
106
|
.execute();
|
|
126
107
|
return cacheKeys;
|
|
127
108
|
}
|
|
@@ -130,18 +111,25 @@ exports.deleteCacheValues = deleteCacheValues;
|
|
|
130
111
|
* @returns the number of cache identifiers that were deleted
|
|
131
112
|
*/
|
|
132
113
|
async function deleteUnusedCacheValues({ cn, timeToIdleDays, }) {
|
|
114
|
+
if (timeToIdleDays === undefined)
|
|
115
|
+
return;
|
|
133
116
|
const result = await cn
|
|
134
117
|
.createQueryBuilder()
|
|
135
118
|
.delete()
|
|
136
|
-
.from("
|
|
137
|
-
.where(`date(
|
|
119
|
+
.from("PaTextCache")
|
|
120
|
+
.where(`date(readAt) < date(current_timestamp, '-${timeToIdleDays} day')`)
|
|
138
121
|
.execute();
|
|
139
122
|
return result.affected ?? undefined;
|
|
140
123
|
}
|
|
141
124
|
exports.deleteUnusedCacheValues = deleteUnusedCacheValues;
|
|
125
|
+
async function invalidateAllCacheValues({ cn, }) {
|
|
126
|
+
await cn.createQueryBuilder().delete().from("PaTextCacheDependency").execute();
|
|
127
|
+
await cn.createQueryBuilder().delete().from("PaTextCache").execute();
|
|
128
|
+
}
|
|
129
|
+
exports.invalidateAllCacheValues = invalidateAllCacheValues;
|
|
142
130
|
async function clearCacheValues({ cn }) {
|
|
143
|
-
await cn
|
|
144
|
-
await cn.createQueryBuilder().delete().from("
|
|
131
|
+
await invalidateAllCacheValues({ cn });
|
|
132
|
+
await cn.createQueryBuilder().delete().from("PaTextCacheScheduledInvalidation").execute();
|
|
145
133
|
}
|
|
146
134
|
exports.clearCacheValues = clearCacheValues;
|
|
147
135
|
//# sourceMappingURL=queries.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"queries.js","sourceRoot":"","sources":["../../src/internal/queries.ts"],"names":[],"mappings":";;;AAAA,
|
|
1
|
+
{"version":3,"file":"queries.js","sourceRoot":"","sources":["../../src/internal/queries.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { QueryBuilderConnection } from "@paroicms/server-lib";
|
|
2
|
+
import type { TextCacheSystemContext } from "./cache-system-context";
|
|
3
|
+
export declare function getNextScheduledDate({ cn, }: Pick<TextCacheSystemContext, "cn">): Promise<Date | undefined>;
|
|
4
|
+
export declare function getScheduledInvalidationEventsToFire({ cn, }: Pick<TextCacheSystemContext, "cn">): Promise<{
|
|
5
|
+
eventKey: string;
|
|
6
|
+
dependencyKeys: string[];
|
|
7
|
+
}[]>;
|
|
8
|
+
export declare function setScheduledInvalidation(cn: QueryBuilderConnection, options: {
|
|
9
|
+
eventKey: string;
|
|
10
|
+
dependencyKeys: string[];
|
|
11
|
+
scheduledAt: Date;
|
|
12
|
+
}): Promise<void>;
|
|
13
|
+
export declare function deleteScheduledInvalidation(cn: QueryBuilderConnection, eventKey: string): Promise<void>;
|
|
14
|
+
export declare function deleteScheduledInvalidations(cn: QueryBuilderConnection, eventKeys: string[]): Promise<void>;
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.deleteScheduledInvalidations = exports.deleteScheduledInvalidation = exports.setScheduledInvalidation = exports.getScheduledInvalidationEventsToFire = exports.getNextScheduledDate = void 0;
|
|
4
|
+
const data_formatters_lib_1 = require("@paroi/data-formatters-lib");
|
|
5
|
+
async function getNextScheduledDate({ cn, }) {
|
|
6
|
+
const row = await cn
|
|
7
|
+
.createQueryBuilder()
|
|
8
|
+
.select("s.scheduledAt", "scheduledAt")
|
|
9
|
+
.from("PaTextCacheScheduledInvalidation", "s")
|
|
10
|
+
.orderBy("s.scheduledAt")
|
|
11
|
+
.limit(1)
|
|
12
|
+
.getRawOne();
|
|
13
|
+
return row ? (0, data_formatters_lib_1.dateVal)(row.scheduledAt) : undefined;
|
|
14
|
+
}
|
|
15
|
+
exports.getNextScheduledDate = getNextScheduledDate;
|
|
16
|
+
async function getScheduledInvalidationEventsToFire({ cn, }) {
|
|
17
|
+
const rows = await cn
|
|
18
|
+
.createQueryBuilder()
|
|
19
|
+
.select("s.eventK", "eventK")
|
|
20
|
+
.addSelect("s.depK", "depK")
|
|
21
|
+
.from("PaTextCacheScheduledInvalidation", "s")
|
|
22
|
+
.where("s.scheduledAt <= current_timestamp")
|
|
23
|
+
.getRawMany();
|
|
24
|
+
const events = new Map();
|
|
25
|
+
for (const row of rows) {
|
|
26
|
+
const eventKey = (0, data_formatters_lib_1.strVal)(row.eventK);
|
|
27
|
+
const depKey = (0, data_formatters_lib_1.strVal)(row.depK);
|
|
28
|
+
const dependencyKeys = events.get(eventKey);
|
|
29
|
+
if (dependencyKeys) {
|
|
30
|
+
dependencyKeys.push(depKey);
|
|
31
|
+
}
|
|
32
|
+
else {
|
|
33
|
+
events.set(eventKey, [depKey]);
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
return Array.from(events.entries()).map(([eventKey, dependencyKeys]) => ({
|
|
37
|
+
eventKey,
|
|
38
|
+
dependencyKeys,
|
|
39
|
+
}));
|
|
40
|
+
}
|
|
41
|
+
exports.getScheduledInvalidationEventsToFire = getScheduledInvalidationEventsToFire;
|
|
42
|
+
async function setScheduledInvalidation(cn, options) {
|
|
43
|
+
await deleteScheduledInvalidation(cn, options.eventKey);
|
|
44
|
+
await cn
|
|
45
|
+
.createQueryBuilder()
|
|
46
|
+
.insert()
|
|
47
|
+
.into("PaTextCacheScheduledInvalidation")
|
|
48
|
+
.values(options.dependencyKeys.map((depK) => ({
|
|
49
|
+
eventK: options.eventKey,
|
|
50
|
+
depK,
|
|
51
|
+
scheduledAt: options.scheduledAt,
|
|
52
|
+
scheduledSince: () => "current_timestamp",
|
|
53
|
+
})))
|
|
54
|
+
.execute();
|
|
55
|
+
}
|
|
56
|
+
exports.setScheduledInvalidation = setScheduledInvalidation;
|
|
57
|
+
async function deleteScheduledInvalidation(cn, eventKey) {
|
|
58
|
+
await cn
|
|
59
|
+
.createQueryBuilder()
|
|
60
|
+
.delete()
|
|
61
|
+
.from("PaTextCacheScheduledInvalidation")
|
|
62
|
+
.where("eventK = :eventK", { eventK: eventKey })
|
|
63
|
+
.execute();
|
|
64
|
+
}
|
|
65
|
+
exports.deleteScheduledInvalidation = deleteScheduledInvalidation;
|
|
66
|
+
async function deleteScheduledInvalidations(cn, eventKeys) {
|
|
67
|
+
await cn
|
|
68
|
+
.createQueryBuilder()
|
|
69
|
+
.delete()
|
|
70
|
+
.from("PaTextCacheScheduledInvalidation")
|
|
71
|
+
.where("eventK in (:...eventKeys)", { eventKeys })
|
|
72
|
+
.execute();
|
|
73
|
+
}
|
|
74
|
+
exports.deleteScheduledInvalidations = deleteScheduledInvalidations;
|
|
75
|
+
//# sourceMappingURL=scheduled-invalidation-queries.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scheduled-invalidation-queries.js","sourceRoot":"","sources":["../../src/internal/scheduled-invalidation-queries.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { TextCacheSystemContext } from "./cache-system-context";
|
|
2
|
+
export interface InvalidationScheduler {
|
|
3
|
+
reset(): Promise<void>;
|
|
4
|
+
stop(): Promise<void>;
|
|
5
|
+
}
|
|
6
|
+
export type SchedulerContext = Omit<TextCacheSystemContext, "scheduler">;
|
|
7
|
+
export declare function startScheduler(context: SchedulerContext): InvalidationScheduler;
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.startScheduler = void 0;
|
|
4
|
+
const async_lib_1 = require("@paroi/async-lib");
|
|
5
|
+
const queries_1 = require("./queries");
|
|
6
|
+
const scheduled_invalidation_queries_1 = require("./scheduled-invalidation-queries");
|
|
7
|
+
const MAX_DELAY_MS = 1000 * 60 * 60 * 24; // 1 day
|
|
8
|
+
function startScheduler(context) {
|
|
9
|
+
const variables = {
|
|
10
|
+
currentWait: undefined,
|
|
11
|
+
};
|
|
12
|
+
let promise = run(context, variables);
|
|
13
|
+
return {
|
|
14
|
+
async reset() {
|
|
15
|
+
if (variables.currentWait) {
|
|
16
|
+
variables.currentWait.cancel();
|
|
17
|
+
variables.currentWait = undefined;
|
|
18
|
+
}
|
|
19
|
+
await promise;
|
|
20
|
+
promise = run(context, variables);
|
|
21
|
+
},
|
|
22
|
+
async stop() {
|
|
23
|
+
if (variables.currentWait) {
|
|
24
|
+
variables.currentWait.cancel();
|
|
25
|
+
variables.currentWait = undefined;
|
|
26
|
+
}
|
|
27
|
+
await promise;
|
|
28
|
+
},
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
exports.startScheduler = startScheduler;
|
|
32
|
+
async function run(context, variables) {
|
|
33
|
+
let suspiciousDelayCount = 0;
|
|
34
|
+
let errorCount = 0;
|
|
35
|
+
while (1) {
|
|
36
|
+
try {
|
|
37
|
+
if (variables.currentWait) {
|
|
38
|
+
variables.currentWait.cancel();
|
|
39
|
+
variables.currentWait = undefined;
|
|
40
|
+
}
|
|
41
|
+
await processScheduledInvalidations(context);
|
|
42
|
+
const scheduledAt = await (0, scheduled_invalidation_queries_1.getNextScheduledDate)(context);
|
|
43
|
+
if (!scheduledAt)
|
|
44
|
+
break;
|
|
45
|
+
let delayMs = scheduledAt.getTime() - Date.now() + 500;
|
|
46
|
+
if (delayMs >= 0) {
|
|
47
|
+
suspiciousDelayCount = 0;
|
|
48
|
+
}
|
|
49
|
+
else if (++suspiciousDelayCount > 5) {
|
|
50
|
+
context.appLog.error(`Too many negative delays (${delayMs}ms), stop the scheduler`);
|
|
51
|
+
break;
|
|
52
|
+
}
|
|
53
|
+
if (delayMs < 500) {
|
|
54
|
+
delayMs = 500;
|
|
55
|
+
}
|
|
56
|
+
else if (delayMs > MAX_DELAY_MS) {
|
|
57
|
+
delayMs = MAX_DELAY_MS;
|
|
58
|
+
}
|
|
59
|
+
variables.currentWait = (0, async_lib_1.waitOrCancel)(delayMs);
|
|
60
|
+
const shouldStop = await variables.currentWait.promise;
|
|
61
|
+
variables.currentWait = undefined;
|
|
62
|
+
if (shouldStop)
|
|
63
|
+
break;
|
|
64
|
+
errorCount = 0;
|
|
65
|
+
}
|
|
66
|
+
catch (error) {
|
|
67
|
+
context.appLog.error("Invalidation scheduler failed", error);
|
|
68
|
+
if (++errorCount > 5) {
|
|
69
|
+
context.appLog.error("Too many errors, stop the scheduler");
|
|
70
|
+
break;
|
|
71
|
+
}
|
|
72
|
+
variables.currentWait = (0, async_lib_1.waitOrCancel)(1000 * 60 * 60 * 2); // next attempt in 2 hours
|
|
73
|
+
const shouldStop = await variables.currentWait.promise;
|
|
74
|
+
variables.currentWait = undefined;
|
|
75
|
+
if (shouldStop)
|
|
76
|
+
break;
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
async function processScheduledInvalidations(context) {
|
|
81
|
+
const events = await (0, scheduled_invalidation_queries_1.getScheduledInvalidationEventsToFire)(context);
|
|
82
|
+
if (events.length === 0)
|
|
83
|
+
return;
|
|
84
|
+
const eventKeys = events.map((e) => e.eventKey);
|
|
85
|
+
context.appLog.info(`Fire ${eventKeys.length} scheduled invalidation events: "${eventKeys.join('", "')}"`);
|
|
86
|
+
const dependencyKeys = events.flatMap((e) => e.dependencyKeys);
|
|
87
|
+
const cacheKeys = await (0, queries_1.deleteCacheValues)(context.cn, { dependencyKeys });
|
|
88
|
+
if (cacheKeys.length > 0) {
|
|
89
|
+
context.appLog.debug(`Deleted ${cacheKeys.length} invalidated cache: ${cacheKeys.join(", ")}`);
|
|
90
|
+
}
|
|
91
|
+
await (0, scheduled_invalidation_queries_1.deleteScheduledInvalidations)(context.cn, eventKeys);
|
|
92
|
+
}
|
|
93
|
+
//# sourceMappingURL=scheduler.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scheduler.js","sourceRoot":"","sources":["../../src/internal/scheduler.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@paroicms/server-text-cache-system",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.3.0",
|
|
4
4
|
"description": "Cache system.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"paroicms",
|
|
@@ -28,10 +28,10 @@
|
|
|
28
28
|
"eslint": "eslint ."
|
|
29
29
|
},
|
|
30
30
|
"dependencies": {
|
|
31
|
-
"@paroi/async-lib": "~0.
|
|
32
|
-
"@paroi/data-formatters-lib": "~0.
|
|
33
|
-
"@paroicms/server-lib": "1.
|
|
34
|
-
"@paroicms/anywhere-lib": "1.
|
|
31
|
+
"@paroi/async-lib": "~0.2.0",
|
|
32
|
+
"@paroi/data-formatters-lib": "~0.3.0",
|
|
33
|
+
"@paroicms/server-lib": "1.3.0",
|
|
34
|
+
"@paroicms/anywhere-lib": "1.7.0"
|
|
35
35
|
},
|
|
36
36
|
"devDependencies": {
|
|
37
37
|
"@types/node": "~20.12.8",
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"PaCache.entity.js","sourceRoot":"","sources":["../../src/entities/PaCache.entity.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,qCAAiE;AAG1D,IAAM,aAAa,GAAnB,MAAM,aAAa;IAExB,EAAE,CAAU;IAGZ,EAAE,CAAQ;IAGV,eAAe,CAAU;IAGzB,SAAS,CAAQ;IAGjB,CAAC,CAAU;IAGX,GAAG,CAAU;CACd,CAAA;AAlBY,sCAAa;AAExB;IADC,IAAA,gCAAsB,GAAE;;yCACb;AAGZ;IADC,IAAA,gBAAM,EAAC,EAAE,IAAI,EAAE,UAAU,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,mBAAmB,EAAE,CAAC;8BAC5D,IAAI;yCAAC;AAGV;IADC,IAAA,gBAAM,GAAE;;sDACgB;AAGzB;IADC,IAAA,gBAAM,EAAC,EAAE,IAAI,EAAE,UAAU,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,mBAAmB,EAAE,CAAC;8BACrD,IAAI;gDAAC;AAGjB;IADC,IAAA,gBAAM,GAAE;;wCACE;AAGX;IADC,IAAA,gBAAM,EAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;;0CACZ;wBAjBF,aAAa;IADzB,IAAA,gBAAM,EAAC,SAAS,CAAC;GACL,aAAa,CAkBzB"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"PaCacheDependency.entity.js","sourceRoot":"","sources":["../../src/entities/PaCacheDependency.entity.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,qCAAyC;AAGlC,IAAM,uBAAuB,GAA7B,MAAM,uBAAuB;IAElC,OAAO,CAAU;IAGjB,IAAI,CAAU;CACf,CAAA;AANY,0DAAuB;AAElC;IADC,IAAA,gBAAM,EAAC,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;;wDAC1B;AAGjB;IADC,IAAA,gBAAM,EAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;;qDACZ;kCALH,uBAAuB;IADnC,IAAA,gBAAM,EAAC,mBAAmB,CAAC;GACf,uBAAuB,CAMnC"}
|