@streamr/node 100.0.0-rc.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.
Files changed (238) hide show
  1. package/LICENSE +78 -0
  2. package/README.md +54 -0
  3. package/bin/broker.ts +36 -0
  4. package/bin/config-wizard.js +4 -0
  5. package/bin/config-wizard.ts +17 -0
  6. package/bin/delete-expired-data.ts +41 -0
  7. package/bin/entry-point.ts +27 -0
  8. package/configs/development-1.env.json +68 -0
  9. package/configs/development-2.env.json +53 -0
  10. package/configs/development-3.env.json +53 -0
  11. package/configs/development-prod-resend.env.json +21 -0
  12. package/configs/docker-1.env.json +72 -0
  13. package/configs/docker-2.env.json +58 -0
  14. package/configs/docker-3.env.json +58 -0
  15. package/configuration.md +38 -0
  16. package/dist/bin/broker.d.ts +2 -0
  17. package/dist/bin/broker.js +42 -0
  18. package/dist/bin/broker.js.map +1 -0
  19. package/dist/bin/config-wizard.d.ts +2 -0
  20. package/dist/bin/config-wizard.js +22 -0
  21. package/dist/bin/config-wizard.js.map +1 -0
  22. package/dist/bin/delete-expired-data.d.ts +2 -0
  23. package/dist/bin/delete-expired-data.js +44 -0
  24. package/dist/bin/delete-expired-data.js.map +1 -0
  25. package/dist/bin/entry-point.d.ts +2 -0
  26. package/dist/bin/entry-point.js +28 -0
  27. package/dist/bin/entry-point.js.map +1 -0
  28. package/dist/package.json +78 -0
  29. package/dist/src/Plugin.d.ts +33 -0
  30. package/dist/src/Plugin.js +43 -0
  31. package/dist/src/Plugin.js.map +1 -0
  32. package/dist/src/apiAuthentication.d.ts +4 -0
  33. package/dist/src/apiAuthentication.js +16 -0
  34. package/dist/src/apiAuthentication.js.map +1 -0
  35. package/dist/src/broker.d.ts +8 -0
  36. package/dist/src/broker.js +69 -0
  37. package/dist/src/broker.js.map +1 -0
  38. package/dist/src/config/ConfigWizard.d.ts +5 -0
  39. package/dist/src/config/ConfigWizard.js +466 -0
  40. package/dist/src/config/ConfigWizard.js.map +1 -0
  41. package/dist/src/config/config.d.ts +26 -0
  42. package/dist/src/config/config.js +92 -0
  43. package/dist/src/config/config.js.map +1 -0
  44. package/dist/src/config/config.schema.json +86 -0
  45. package/dist/src/config/definitions.schema.json +35 -0
  46. package/dist/src/config/migration.d.ts +6 -0
  47. package/dist/src/config/migration.js +210 -0
  48. package/dist/src/config/migration.js.map +1 -0
  49. package/dist/src/config/validateConfig.d.ts +4 -0
  50. package/dist/src/config/validateConfig.js +40 -0
  51. package/dist/src/config/validateConfig.js.map +1 -0
  52. package/dist/src/exports.d.ts +3 -0
  53. package/dist/src/exports.js +6 -0
  54. package/dist/src/exports.js.map +1 -0
  55. package/dist/src/helpers/PayloadFormat.d.ts +19 -0
  56. package/dist/src/helpers/PayloadFormat.js +85 -0
  57. package/dist/src/helpers/PayloadFormat.js.map +1 -0
  58. package/dist/src/helpers/applyPluginClientConfigs.d.ts +3 -0
  59. package/dist/src/helpers/applyPluginClientConfigs.js +29 -0
  60. package/dist/src/helpers/applyPluginClientConfigs.js.map +1 -0
  61. package/dist/src/helpers/fetchOrThrow.d.ts +2 -0
  62. package/dist/src/helpers/fetchOrThrow.js +20 -0
  63. package/dist/src/helpers/fetchOrThrow.js.map +1 -0
  64. package/dist/src/helpers/generateMnemonicFromAddress.d.ts +5 -0
  65. package/dist/src/helpers/generateMnemonicFromAddress.js +16 -0
  66. package/dist/src/helpers/generateMnemonicFromAddress.js.map +1 -0
  67. package/dist/src/helpers/multiply.d.ts +1 -0
  68. package/dist/src/helpers/multiply.js +10 -0
  69. package/dist/src/helpers/multiply.js.map +1 -0
  70. package/dist/src/helpers/parser.d.ts +9 -0
  71. package/dist/src/helpers/parser.js +62 -0
  72. package/dist/src/helpers/parser.js.map +1 -0
  73. package/dist/src/helpers/partitions.d.ts +8 -0
  74. package/dist/src/helpers/partitions.js +32 -0
  75. package/dist/src/helpers/partitions.js.map +1 -0
  76. package/dist/src/helpers/weightedSample.d.ts +16 -0
  77. package/dist/src/helpers/weightedSample.js +35 -0
  78. package/dist/src/helpers/weightedSample.js.map +1 -0
  79. package/dist/src/httpServer.d.ts +16 -0
  80. package/dist/src/httpServer.js +71 -0
  81. package/dist/src/httpServer.js.map +1 -0
  82. package/dist/src/pluginRegistry.d.ts +3 -0
  83. package/dist/src/pluginRegistry.js +35 -0
  84. package/dist/src/pluginRegistry.js.map +1 -0
  85. package/dist/src/plugins/consoleMetrics/ConsoleMetricsPlugin.d.ts +12 -0
  86. package/dist/src/plugins/consoleMetrics/ConsoleMetricsPlugin.js +36 -0
  87. package/dist/src/plugins/consoleMetrics/ConsoleMetricsPlugin.js.map +1 -0
  88. package/dist/src/plugins/consoleMetrics/config.schema.json +18 -0
  89. package/dist/src/plugins/http/HttpPlugin.d.ts +8 -0
  90. package/dist/src/plugins/http/HttpPlugin.js +23 -0
  91. package/dist/src/plugins/http/HttpPlugin.js.map +1 -0
  92. package/dist/src/plugins/http/config.schema.json +12 -0
  93. package/dist/src/plugins/http/publishEndpoint.d.ts +3 -0
  94. package/dist/src/plugins/http/publishEndpoint.js +72 -0
  95. package/dist/src/plugins/http/publishEndpoint.js.map +1 -0
  96. package/dist/src/plugins/info/InfoPlugin.d.ts +9 -0
  97. package/dist/src/plugins/info/InfoPlugin.js +31 -0
  98. package/dist/src/plugins/info/InfoPlugin.js.map +1 -0
  99. package/dist/src/plugins/info/config.schema.json +12 -0
  100. package/dist/src/plugins/mqtt/Bridge.d.ts +40 -0
  101. package/dist/src/plugins/mqtt/Bridge.js +136 -0
  102. package/dist/src/plugins/mqtt/Bridge.js.map +1 -0
  103. package/dist/src/plugins/mqtt/MqttPlugin.d.ts +14 -0
  104. package/dist/src/plugins/mqtt/MqttPlugin.js +30 -0
  105. package/dist/src/plugins/mqtt/MqttPlugin.js.map +1 -0
  106. package/dist/src/plugins/mqtt/MqttServer.d.ts +22 -0
  107. package/dist/src/plugins/mqtt/MqttServer.js +109 -0
  108. package/dist/src/plugins/mqtt/MqttServer.js.map +1 -0
  109. package/dist/src/plugins/mqtt/config.schema.json +26 -0
  110. package/dist/src/plugins/operator/ConsistentHashRing.d.ts +20 -0
  111. package/dist/src/plugins/operator/ConsistentHashRing.js +64 -0
  112. package/dist/src/plugins/operator/ConsistentHashRing.js.map +1 -0
  113. package/dist/src/plugins/operator/ContractFacade.d.ts +80 -0
  114. package/dist/src/plugins/operator/ContractFacade.js +364 -0
  115. package/dist/src/plugins/operator/ContractFacade.js.map +1 -0
  116. package/dist/src/plugins/operator/MaintainTopologyHelper.d.ts +23 -0
  117. package/dist/src/plugins/operator/MaintainTopologyHelper.js +75 -0
  118. package/dist/src/plugins/operator/MaintainTopologyHelper.js.map +1 -0
  119. package/dist/src/plugins/operator/MaintainTopologyService.d.ts +11 -0
  120. package/dist/src/plugins/operator/MaintainTopologyService.js +57 -0
  121. package/dist/src/plugins/operator/MaintainTopologyService.js.map +1 -0
  122. package/dist/src/plugins/operator/OperatorFleetState.d.ts +33 -0
  123. package/dist/src/plugins/operator/OperatorFleetState.js +112 -0
  124. package/dist/src/plugins/operator/OperatorFleetState.js.map +1 -0
  125. package/dist/src/plugins/operator/OperatorPlugin.d.ts +50 -0
  126. package/dist/src/plugins/operator/OperatorPlugin.js +159 -0
  127. package/dist/src/plugins/operator/OperatorPlugin.js.map +1 -0
  128. package/dist/src/plugins/operator/StreamPartAssignments.d.ts +28 -0
  129. package/dist/src/plugins/operator/StreamPartAssignments.js +104 -0
  130. package/dist/src/plugins/operator/StreamPartAssignments.js.map +1 -0
  131. package/dist/src/plugins/operator/announceNodeToContract.d.ts +3 -0
  132. package/dist/src/plugins/operator/announceNodeToContract.js +39 -0
  133. package/dist/src/plugins/operator/announceNodeToContract.js.map +1 -0
  134. package/dist/src/plugins/operator/announceNodeToStream.d.ts +3 -0
  135. package/dist/src/plugins/operator/announceNodeToStream.js +25 -0
  136. package/dist/src/plugins/operator/announceNodeToStream.js.map +1 -0
  137. package/dist/src/plugins/operator/checkOperatorValueBreach.d.ts +2 -0
  138. package/dist/src/plugins/operator/checkOperatorValueBreach.js +21 -0
  139. package/dist/src/plugins/operator/checkOperatorValueBreach.js.map +1 -0
  140. package/dist/src/plugins/operator/closeExpiredFlags.d.ts +3 -0
  141. package/dist/src/plugins/operator/closeExpiredFlags.js +24 -0
  142. package/dist/src/plugins/operator/closeExpiredFlags.js.map +1 -0
  143. package/dist/src/plugins/operator/config.schema.json +152 -0
  144. package/dist/src/plugins/operator/createIsLeaderFn.d.ts +4 -0
  145. package/dist/src/plugins/operator/createIsLeaderFn.js +14 -0
  146. package/dist/src/plugins/operator/createIsLeaderFn.js.map +1 -0
  147. package/dist/src/plugins/operator/fetchRedundancyFactor.d.ts +2 -0
  148. package/dist/src/plugins/operator/fetchRedundancyFactor.js +43 -0
  149. package/dist/src/plugins/operator/fetchRedundancyFactor.js.map +1 -0
  150. package/dist/src/plugins/operator/formCoordinationStreamId.d.ts +3 -0
  151. package/dist/src/plugins/operator/formCoordinationStreamId.js +9 -0
  152. package/dist/src/plugins/operator/formCoordinationStreamId.js.map +1 -0
  153. package/dist/src/plugins/operator/heartbeatUtils.d.ts +67 -0
  154. package/dist/src/plugins/operator/heartbeatUtils.js +26 -0
  155. package/dist/src/plugins/operator/heartbeatUtils.js.map +1 -0
  156. package/dist/src/plugins/operator/inspectOverTime.d.ts +22 -0
  157. package/dist/src/plugins/operator/inspectOverTime.js +146 -0
  158. package/dist/src/plugins/operator/inspectOverTime.js.map +1 -0
  159. package/dist/src/plugins/operator/inspectRandomNode.d.ts +8 -0
  160. package/dist/src/plugins/operator/inspectRandomNode.js +44 -0
  161. package/dist/src/plugins/operator/inspectRandomNode.js.map +1 -0
  162. package/dist/src/plugins/operator/inspectionUtils.d.ts +23 -0
  163. package/dist/src/plugins/operator/inspectionUtils.js +120 -0
  164. package/dist/src/plugins/operator/inspectionUtils.js.map +1 -0
  165. package/dist/src/plugins/operator/maintainOperatorValue.d.ts +2 -0
  166. package/dist/src/plugins/operator/maintainOperatorValue.js +21 -0
  167. package/dist/src/plugins/operator/maintainOperatorValue.js.map +1 -0
  168. package/dist/src/plugins/operator/reviewSuspectNode.d.ts +24 -0
  169. package/dist/src/plugins/operator/reviewSuspectNode.js +56 -0
  170. package/dist/src/plugins/operator/reviewSuspectNode.js.map +1 -0
  171. package/dist/src/plugins/storage/Batch.d.ts +51 -0
  172. package/dist/src/plugins/storage/Batch.js +121 -0
  173. package/dist/src/plugins/storage/Batch.js.map +1 -0
  174. package/dist/src/plugins/storage/BatchManager.d.ts +27 -0
  175. package/dist/src/plugins/storage/BatchManager.js +117 -0
  176. package/dist/src/plugins/storage/BatchManager.js.map +1 -0
  177. package/dist/src/plugins/storage/Bucket.d.ts +23 -0
  178. package/dist/src/plugins/storage/Bucket.js +90 -0
  179. package/dist/src/plugins/storage/Bucket.js.map +1 -0
  180. package/dist/src/plugins/storage/BucketManager.d.ts +56 -0
  181. package/dist/src/plugins/storage/BucketManager.js +306 -0
  182. package/dist/src/plugins/storage/BucketManager.js.map +1 -0
  183. package/dist/src/plugins/storage/DataQueryFormat.d.ts +10 -0
  184. package/dist/src/plugins/storage/DataQueryFormat.js +51 -0
  185. package/dist/src/plugins/storage/DataQueryFormat.js.map +1 -0
  186. package/dist/src/plugins/storage/DeleteExpiredCmd.d.ts +28 -0
  187. package/dist/src/plugins/storage/DeleteExpiredCmd.js +155 -0
  188. package/dist/src/plugins/storage/DeleteExpiredCmd.js.map +1 -0
  189. package/dist/src/plugins/storage/SetMembershipSynchronizer.d.ts +33 -0
  190. package/dist/src/plugins/storage/SetMembershipSynchronizer.js +102 -0
  191. package/dist/src/plugins/storage/SetMembershipSynchronizer.js.map +1 -0
  192. package/dist/src/plugins/storage/Storage.d.ts +47 -0
  193. package/dist/src/plugins/storage/Storage.js +459 -0
  194. package/dist/src/plugins/storage/Storage.js.map +1 -0
  195. package/dist/src/plugins/storage/StorageConfig.d.ts +43 -0
  196. package/dist/src/plugins/storage/StorageConfig.js +83 -0
  197. package/dist/src/plugins/storage/StorageConfig.js.map +1 -0
  198. package/dist/src/plugins/storage/StorageEventListener.d.ts +17 -0
  199. package/dist/src/plugins/storage/StorageEventListener.js +46 -0
  200. package/dist/src/plugins/storage/StorageEventListener.js.map +1 -0
  201. package/dist/src/plugins/storage/StoragePlugin.d.ts +32 -0
  202. package/dist/src/plugins/storage/StoragePlugin.js +103 -0
  203. package/dist/src/plugins/storage/StoragePlugin.js.map +1 -0
  204. package/dist/src/plugins/storage/StoragePoller.d.ts +15 -0
  205. package/dist/src/plugins/storage/StoragePoller.js +47 -0
  206. package/dist/src/plugins/storage/StoragePoller.js.map +1 -0
  207. package/dist/src/plugins/storage/config.schema.json +88 -0
  208. package/dist/src/plugins/storage/dataMetadataEndpoint.d.ts +3 -0
  209. package/dist/src/plugins/storage/dataMetadataEndpoint.js +35 -0
  210. package/dist/src/plugins/storage/dataMetadataEndpoint.js.map +1 -0
  211. package/dist/src/plugins/storage/dataQueryEndpoint.d.ts +6 -0
  212. package/dist/src/plugins/storage/dataQueryEndpoint.js +181 -0
  213. package/dist/src/plugins/storage/dataQueryEndpoint.js.map +1 -0
  214. package/dist/src/plugins/storage/storageConfigEndpoint.d.ts +3 -0
  215. package/dist/src/plugins/storage/storageConfigEndpoint.js +31 -0
  216. package/dist/src/plugins/storage/storageConfigEndpoint.js.map +1 -0
  217. package/dist/src/plugins/subscriber/SubscriberPlugin.d.ts +16 -0
  218. package/dist/src/plugins/subscriber/SubscriberPlugin.js +22 -0
  219. package/dist/src/plugins/subscriber/SubscriberPlugin.js.map +1 -0
  220. package/dist/src/plugins/subscriber/config.schema.json +31 -0
  221. package/dist/src/plugins/websocket/Connection.d.ts +9 -0
  222. package/dist/src/plugins/websocket/Connection.js +45 -0
  223. package/dist/src/plugins/websocket/Connection.js.map +1 -0
  224. package/dist/src/plugins/websocket/PublishConnection.d.ts +12 -0
  225. package/dist/src/plugins/websocket/PublishConnection.js +46 -0
  226. package/dist/src/plugins/websocket/PublishConnection.js.map +1 -0
  227. package/dist/src/plugins/websocket/SubscribeConnection.d.ts +13 -0
  228. package/dist/src/plugins/websocket/SubscribeConnection.js +50 -0
  229. package/dist/src/plugins/websocket/SubscribeConnection.js.map +1 -0
  230. package/dist/src/plugins/websocket/WebsocketPlugin.d.ts +19 -0
  231. package/dist/src/plugins/websocket/WebsocketPlugin.js +26 -0
  232. package/dist/src/plugins/websocket/WebsocketPlugin.js.map +1 -0
  233. package/dist/src/plugins/websocket/WebsocketServer.d.ts +16 -0
  234. package/dist/src/plugins/websocket/WebsocketServer.js +132 -0
  235. package/dist/src/plugins/websocket/WebsocketServer.js.map +1 -0
  236. package/dist/src/plugins/websocket/config.schema.json +51 -0
  237. package/package.json +78 -0
  238. package/plugins.md +318 -0
@@ -0,0 +1,155 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.DeleteExpiredCmd = void 0;
7
+ const cassandra_driver_1 = __importDefault(require("cassandra-driver"));
8
+ const p_limit_1 = __importDefault(require("p-limit"));
9
+ const utils_1 = require("@streamr/utils");
10
+ const logger = new utils_1.Logger(module);
11
+ const totalSizeOfBuckets = (buckets) => buckets.reduce((mem, { size }) => mem + size, 0) / (1024 * 1024);
12
+ const totalRecordCount = (buckets) => buckets.reduce((mem, { records }) => mem + records, 0);
13
+ class DeleteExpiredCmd {
14
+ streamrBaseUrl;
15
+ dryRun;
16
+ bucketLimit;
17
+ cassandraClient;
18
+ limit;
19
+ constructor({ streamrBaseUrl, cassandraUsername, cassandraPassword, cassandraHosts, cassandraDatacenter, cassandraKeyspace, bucketLimit, dryRun = true }) {
20
+ this.streamrBaseUrl = streamrBaseUrl;
21
+ this.dryRun = dryRun;
22
+ this.bucketLimit = bucketLimit || 10000000;
23
+ const authProvider = new cassandra_driver_1.default.auth.PlainTextAuthProvider(cassandraUsername, cassandraPassword);
24
+ this.cassandraClient = new cassandra_driver_1.default.Client({
25
+ contactPoints: [...cassandraHosts],
26
+ localDataCenter: cassandraDatacenter,
27
+ keyspace: cassandraKeyspace,
28
+ authProvider,
29
+ });
30
+ // used for limited concurrency
31
+ this.limit = (0, p_limit_1.default)(5);
32
+ }
33
+ async run(client) {
34
+ const streams = await this.getStreams();
35
+ logger.info(`Found ${streams.length} unique streams`);
36
+ const streamsInfo = await this.fetchStreamsInfo(streams, client);
37
+ const potentialBuckets = await this.getPotentiallyExpiredBuckets(streamsInfo);
38
+ logger.info(`Found ${potentialBuckets.length} potentially expired buckets`);
39
+ const cutPotentialBuckets = potentialBuckets.slice(0, this.bucketLimit);
40
+ logger.info(`Left with ${cutPotentialBuckets.length} potentially expired buckets after cutting`);
41
+ const expiredBuckets = await this.filterExpiredBuckets(cutPotentialBuckets);
42
+ logger.info(`Found ${expiredBuckets.length} expired buckets`, {
43
+ totalRecords: totalRecordCount(expiredBuckets),
44
+ totalSizeOfBucketsInMb: totalSizeOfBuckets(expiredBuckets)
45
+ });
46
+ if (!this.dryRun) {
47
+ await this.deleteExpired(expiredBuckets);
48
+ }
49
+ await this.cassandraClient.shutdown();
50
+ }
51
+ async getStreams() {
52
+ const query = 'SELECT DISTINCT stream_id, partition FROM bucket';
53
+ const resultSet = await this.cassandraClient.execute(query, [], {
54
+ fetchSize: 100000
55
+ });
56
+ return resultSet.rows.map((row) => ({
57
+ streamId: row.stream_id,
58
+ partition: row.partition
59
+ }));
60
+ }
61
+ async fetchStreamsInfo(streams, client) {
62
+ const tasks = streams.filter(Boolean).map((stream) => {
63
+ return this.limit(async () => {
64
+ try {
65
+ const streamFromChain = await client.getStream(stream.streamId);
66
+ return {
67
+ streamId: stream.streamId,
68
+ partition: stream.partition,
69
+ storageDays: streamFromChain.getMetadata().storageDays ?? 365
70
+ };
71
+ }
72
+ catch (err) {
73
+ logger.error('Failed to fetch stream info', { err });
74
+ }
75
+ });
76
+ });
77
+ return Promise.all(tasks);
78
+ }
79
+ async getPotentiallyExpiredBuckets(streamsInfo) {
80
+ const result = [];
81
+ const query = 'SELECT * FROM bucket WHERE stream_id = ? AND partition = ? AND date_create <= ?';
82
+ // @ts-expect-error void filtering
83
+ const tasks = streamsInfo.filter(Boolean).map((stream) => {
84
+ const { streamId, partition, storageDays } = stream;
85
+ const timestampBefore = Date.now() - 1000 * 60 * 60 * 24 * storageDays;
86
+ const params = [streamId, partition, timestampBefore];
87
+ return this.limit(async () => {
88
+ const resultSet = await this.cassandraClient.execute(query, params, {
89
+ prepare: true,
90
+ }).catch((err) => logger.error('Failed to execute query', { err, query }));
91
+ if (resultSet) {
92
+ resultSet.rows.forEach((row) => {
93
+ result.push({
94
+ bucketId: row.id,
95
+ dateCreate: row.date_create,
96
+ streamId: row.stream_id,
97
+ partition: row.partition,
98
+ records: row.records,
99
+ size: row.size,
100
+ storageDays
101
+ });
102
+ });
103
+ }
104
+ });
105
+ });
106
+ await Promise.all(tasks);
107
+ return result;
108
+ }
109
+ async filterExpiredBuckets(potentialBuckets) {
110
+ const result = [];
111
+ const query = 'SELECT MAX(ts) AS m FROM stream_data WHERE stream_id = ? AND partition = ? AND bucket_id = ?';
112
+ const tasks = potentialBuckets.filter(Boolean).map((bucket) => {
113
+ const { streamId, partition, bucketId, storageDays } = bucket;
114
+ const timestampBefore = Date.now() - 1000 * 60 * 60 * 24 * storageDays;
115
+ const params = [streamId, partition, bucketId];
116
+ return this.limit(async () => {
117
+ const resultSet = await this.cassandraClient.execute(query, params, {
118
+ prepare: true,
119
+ }).catch((err) => logger.error('Failed to execute query', { err, query }));
120
+ if (resultSet && (resultSet.rows.length === 0
121
+ || resultSet.rows[0].m === null
122
+ || resultSet.rows[0].m.getTime() < timestampBefore)) {
123
+ result.push(bucket);
124
+ }
125
+ });
126
+ });
127
+ await Promise.all(tasks);
128
+ return result;
129
+ }
130
+ async deleteExpired(expiredBuckets) {
131
+ const tasks = expiredBuckets.filter(Boolean).map((stream) => {
132
+ const { bucketId, dateCreate, streamId, partition } = stream;
133
+ const queries = [
134
+ {
135
+ query: 'DELETE FROM bucket WHERE stream_id = ? AND partition = ? AND date_create = ?',
136
+ params: [streamId, partition, dateCreate]
137
+ },
138
+ {
139
+ query: 'DELETE FROM stream_data WHERE stream_id = ? AND partition = ? AND bucket_id = ?',
140
+ params: [streamId, partition, bucketId]
141
+ }
142
+ ];
143
+ logger.info('Delete expired bucket', { streamId, partition, bucketId });
144
+ return this.limit(async () => {
145
+ await this.cassandraClient.batch(queries, {
146
+ prepare: true
147
+ }).catch((err) => logger.error('Failed to delete expired buckets', { err, queries }));
148
+ return undefined;
149
+ });
150
+ });
151
+ return Promise.all(tasks);
152
+ }
153
+ }
154
+ exports.DeleteExpiredCmd = DeleteExpiredCmd;
155
+ //# sourceMappingURL=DeleteExpiredCmd.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DeleteExpiredCmd.js","sourceRoot":"","sources":["../../../../src/plugins/storage/DeleteExpiredCmd.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,33 @@
1
+ export interface Diff<E extends string> {
2
+ added: E[];
3
+ removed: E[];
4
+ }
5
+ export declare const EMPTY_DIFF: Diff<never>;
6
+ /**
7
+ * Represents a set that evolves over (discrete) time. The set is updated in
8
+ * two distinct ways:
9
+ * 1. Snapshots that define the set at a given time step.
10
+ * 2. Patches that add or remove a subset at a given time step.
11
+ */
12
+ export declare class SetMembershipSynchronizer<E extends string> {
13
+ private lastSnapshotSequenceNo;
14
+ private state;
15
+ private lastSequenceNoByElement;
16
+ /**
17
+ * Get up-to-date view of state
18
+ */
19
+ getState(): ReadonlySet<E>;
20
+ /**
21
+ * Ingest a snapshot at a given sequence number
22
+ * @param elements the set of _all_ elements in this snapshot
23
+ * @param sequenceNo the sequence number for this snapshot
24
+ */
25
+ ingestSnapshot(elements: Set<E>, sequenceNo: number): Diff<E>;
26
+ /**
27
+ * Ingest a patch
28
+ * @param elements the set of elements relevant to this patch
29
+ * @param operation indicates whether this is an addition or a removal
30
+ * @param sequenceNo the sequence number for this patch
31
+ */
32
+ ingestPatch(elements: Set<E>, operation: 'added' | 'removed', sequenceNo: number): Diff<E>;
33
+ }
@@ -0,0 +1,102 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.SetMembershipSynchronizer = exports.EMPTY_DIFF = void 0;
4
+ const utils_1 = require("@streamr/utils");
5
+ const logger = new utils_1.Logger(module);
6
+ exports.EMPTY_DIFF = Object.freeze({
7
+ added: [],
8
+ removed: []
9
+ });
10
+ function setDifference(setA, setB) {
11
+ return [...setA].filter((el) => !setB.has(el));
12
+ }
13
+ /**
14
+ * Represents a set that evolves over (discrete) time. The set is updated in
15
+ * two distinct ways:
16
+ * 1. Snapshots that define the set at a given time step.
17
+ * 2. Patches that add or remove a subset at a given time step.
18
+ */
19
+ class SetMembershipSynchronizer {
20
+ lastSnapshotSequenceNo = 0;
21
+ state = new Set(); // snapshot + patches
22
+ lastSequenceNoByElement = new Map();
23
+ /**
24
+ * Get up-to-date view of state
25
+ */
26
+ getState() {
27
+ return this.state;
28
+ }
29
+ /**
30
+ * Ingest a snapshot at a given sequence number
31
+ * @param elements the set of _all_ elements in this snapshot
32
+ * @param sequenceNo the sequence number for this snapshot
33
+ */
34
+ ingestSnapshot(elements, sequenceNo) {
35
+ if (sequenceNo <= this.lastSnapshotSequenceNo) {
36
+ logger.warn('Ignore snapshot (stale sequenceNo)', {
37
+ sequenceNo,
38
+ lastSnapshotSequenceNo: this.lastSnapshotSequenceNo
39
+ });
40
+ return exports.EMPTY_DIFF;
41
+ }
42
+ this.lastSnapshotSequenceNo = sequenceNo;
43
+ // delete stale patches
44
+ this.lastSequenceNoByElement.forEach((patchSequenceNo, element) => {
45
+ if (patchSequenceNo <= sequenceNo) {
46
+ this.lastSequenceNoByElement.delete(element);
47
+ }
48
+ });
49
+ // apply patches
50
+ const previousState = this.state;
51
+ this.state = new Set(elements);
52
+ this.lastSequenceNoByElement.forEach((_, element) => {
53
+ if (previousState.has(element)) {
54
+ this.state.add(element);
55
+ }
56
+ else {
57
+ this.state.delete(element);
58
+ }
59
+ });
60
+ return {
61
+ added: setDifference(this.state, previousState),
62
+ removed: setDifference(previousState, this.state)
63
+ };
64
+ }
65
+ /**
66
+ * Ingest a patch
67
+ * @param elements the set of elements relevant to this patch
68
+ * @param operation indicates whether this is an addition or a removal
69
+ * @param sequenceNo the sequence number for this patch
70
+ */
71
+ ingestPatch(elements, operation, sequenceNo) {
72
+ if (sequenceNo <= this.lastSnapshotSequenceNo) {
73
+ return exports.EMPTY_DIFF;
74
+ }
75
+ const nonStaleElements = [...elements].filter((element) => (sequenceNo > (this.lastSequenceNoByElement.get(element) || 0)));
76
+ nonStaleElements.forEach((element) => {
77
+ this.lastSequenceNoByElement.set(element, sequenceNo);
78
+ });
79
+ if (operation === 'added') {
80
+ return {
81
+ removed: [],
82
+ added: nonStaleElements.filter((element) => {
83
+ const didStateChange = !this.state.has(element);
84
+ this.state.add(element);
85
+ return didStateChange;
86
+ }),
87
+ };
88
+ }
89
+ else {
90
+ return {
91
+ added: [],
92
+ removed: nonStaleElements.filter((element) => {
93
+ const didStateChange = this.state.has(element);
94
+ this.state.delete(element);
95
+ return didStateChange;
96
+ })
97
+ };
98
+ }
99
+ }
100
+ }
101
+ exports.SetMembershipSynchronizer = SetMembershipSynchronizer;
102
+ //# sourceMappingURL=SetMembershipSynchronizer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SetMembershipSynchronizer.js","sourceRoot":"","sources":["../../../../src/plugins/storage/SetMembershipSynchronizer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,47 @@
1
+ /// <reference types="node" />
2
+ /// <reference types="node" />
3
+ /// <reference types="node" />
4
+ import { Client } from 'cassandra-driver';
5
+ import { MetricsContext } from '@streamr/utils';
6
+ import { BatchManager } from './BatchManager';
7
+ import { Readable } from 'stream';
8
+ import { EventEmitter } from 'events';
9
+ import { StreamMessage } from '@streamr/protocol';
10
+ import { BucketManager, BucketManagerOptions } from './BucketManager';
11
+ export interface StartCassandraOptions {
12
+ contactPoints: string[];
13
+ localDataCenter: string;
14
+ keyspace: string;
15
+ username?: string;
16
+ password?: string;
17
+ opts?: Partial<BucketManagerOptions & {
18
+ useTtl: boolean;
19
+ }>;
20
+ }
21
+ export type StorageOptions = Partial<BucketManagerOptions> & {
22
+ useTtl?: boolean;
23
+ retriesIntervalMilliseconds?: number;
24
+ };
25
+ export declare class Storage extends EventEmitter {
26
+ opts: StorageOptions;
27
+ cassandraClient: Client;
28
+ bucketManager: BucketManager;
29
+ batchManager: BatchManager;
30
+ pendingStores: Map<string, NodeJS.Timeout>;
31
+ constructor(cassandraClient: Client, opts: StorageOptions);
32
+ store(streamMessage: StreamMessage): Promise<boolean>;
33
+ requestLast(streamId: string, partition: number, limit: number): Readable;
34
+ requestFrom(streamId: string, partition: number, fromTimestamp: number, fromSequenceNo: number, publisherId?: string): Readable;
35
+ requestRange(streamId: string, partition: number, fromTimestamp: number, fromSequenceNo: number, toTimestamp: number, toSequenceNo: number, publisherId: string | undefined, msgChainId: string | undefined): Readable;
36
+ enableMetrics(metricsContext: MetricsContext): void;
37
+ close(): Promise<void>;
38
+ private fetchRange;
39
+ private queryWithStreamingResults;
40
+ private parseRow;
41
+ private createResultStream;
42
+ getFirstMessageTimestampInStream(streamId: string, partition: number): Promise<number>;
43
+ getLastMessageTimestampInStream(streamId: string, partition: number): Promise<number>;
44
+ getNumberOfMessagesInStream(streamId: string, partition: number): Promise<number>;
45
+ getTotalBytesInStream(streamId: string, partition: number): Promise<number>;
46
+ }
47
+ export declare const startCassandraStorage: ({ contactPoints, localDataCenter, keyspace, username, password, opts }: StartCassandraOptions) => Promise<Storage>;