@balena/open-balena-api 52.1.0 → 52.2.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.
@@ -19,22 +19,39 @@ export declare class DeviceOnlineStateManager extends EventEmitter<{
19
19
  newState: DeviceOnlineStates;
20
20
  }) => void;
21
21
  stats: (args: MetricEventArgs & {
22
- totalsent: number;
23
- totalrecv: number;
22
+ /** The number of scheduled state changes */
24
23
  msgs: number;
24
+ /** The number of scheduled state changes that are either not due yet or currently being processed */
25
25
  hiddenmsgs: number;
26
26
  }) => void;
27
27
  }> {
28
28
  private static readonly REDIS_NAMESPACE;
29
- private static readonly EXPIRED_QUEUE;
30
- private static readonly RSMQ_READ_TIMEOUT;
29
+ /**
30
+ * A sorted set of the scheduled state changes, with `${deviceId}:${nextState}` members scored by the
31
+ * timestamp they are due at, so that rescheduling a device's change replaces it rather than adding another
32
+ */
33
+ private static readonly SCHEDULED_QUEUE;
34
+ /**
35
+ * The RSMQ queue that previous API versions scheduled the state changes in, which we keep consuming
36
+ * until no API instances are using it and it has been drained
37
+ * TODO: Remove once no API instances are scheduling changes via RSMQ and the legacy queue has been drained
38
+ */
39
+ private static readonly LEGACY_RSMQ_QUEUE;
40
+ private static readonly CLAIM_TIMEOUT_MSEC;
31
41
  private static readonly QUEUE_STATS_INTERVAL_MSEC;
42
+ /** The states that are scheduled as a device's next state, used to replace any change already scheduled for it */
43
+ private static readonly SCHEDULED_STATES;
32
44
  private readonly featureIsEnabled;
33
45
  private isConsuming;
34
- private rsmq;
35
46
  constructor();
36
47
  private setupQueueStatsEmitter;
37
48
  private updateDeviceModel;
49
+ private deleteLegacyChange;
50
+ /**
51
+ * Claims the next due state change, hiding it from other consumers for CLAIM_TIMEOUT_MSEC
52
+ * so that multiple API agents do not process it, after which it will be consumed again unless removed
53
+ */
54
+ private claimNextChange;
38
55
  private consume;
39
56
  private getDeviceOnlineState;
40
57
  private scheduleChangeOfStateForDevice;
@@ -1,14 +1,49 @@
1
+ import { stripIndent } from 'common-tags';
1
2
  import { EventEmitter } from 'eventemitter3';
2
3
  import _ from 'lodash';
3
- import RedisSMQ from 'rsmq';
4
+ import { defineScript } from 'redis';
4
5
  import { sbvrUtils, permissions } from '@balena/pinejs';
5
6
  import { captureException } from "../../infra/error-handling/index.js";
6
7
  import { isApiKeyWithRole } from "../api-keys/lib.js";
7
8
  import { events as deviceStateEvents } from "../device-state/index.js";
8
- import { API_HEARTBEAT_STATE_ENABLED, API_HEARTBEAT_STATE_TIMEOUT_SECONDS, API_HEARTBEAT_STATE_ONLINE_UPDATE_CACHE_TIMEOUT, DEFAULT_SUPERVISOR_POLL_INTERVAL, REDIS, } from "../../lib/config.js";
9
- import { redis, redisRO } from "../../infra/redis/index.js";
9
+ import { API_HEARTBEAT_STATE_ENABLED, API_HEARTBEAT_STATE_TIMEOUT_SECONDS, API_HEARTBEAT_STATE_ONLINE_UPDATE_CACHE_TIMEOUT, DEFAULT_SUPERVISOR_POLL_INTERVAL, } from "../../lib/config.js";
10
+ import { createIsolatedRedis, redis, redisRO, } from "../../infra/redis/index.js";
10
11
  import { setTimeout } from 'timers/promises';
11
12
  const { api } = sbvrUtils;
13
+ const scripts = {
14
+ claimDueMember: defineScript({
15
+ SCRIPT: stripIndent `
16
+ -- Take the earliest member that is due
17
+ local due = redis.call("zrange", KEYS[1], "-inf", ARGV[1], "BYSCORE", "LIMIT", 0, 1)
18
+ if #due == 0 then
19
+ return false
20
+ end
21
+ -- And hide it from other consumers until the claim expires, at which point it is due again
22
+ redis.call("zadd", KEYS[1], ARGV[2], due[1])
23
+ return due[1]`,
24
+ NUMBER_OF_KEYS: 1,
25
+ parseCommand(parser, key, now, claimedUntil) {
26
+ parser.pushKey(key);
27
+ parser.push(`${now}`, `${claimedUntil}`);
28
+ },
29
+ transformReply: undefined,
30
+ }),
31
+ removeClaimedMember: defineScript({
32
+ SCRIPT: stripIndent `
33
+ -- Only remove the member if it has not been rescheduled since we claimed it
34
+ if tonumber(redis.call("zscore", KEYS[1], ARGV[1])) == tonumber(ARGV[2]) then
35
+ return redis.call("zrem", KEYS[1], ARGV[1])
36
+ end
37
+ return 0`,
38
+ NUMBER_OF_KEYS: 1,
39
+ parseCommand(parser, key, member, claimedUntil) {
40
+ parser.pushKey(key);
41
+ parser.push(member, `${claimedUntil}`);
42
+ },
43
+ transformReply: undefined,
44
+ }),
45
+ };
46
+ const redisWithScripts = await createIsolatedRedis({ scripts });
12
47
  const getPollIntervalForDevice = _.once(() => api.resin.prepare({
13
48
  resource: 'device_config_variable',
14
49
  passthrough: { req: permissions.rootRead },
@@ -110,12 +145,26 @@ export const DeviceOnlineStates = {
110
145
  };
111
146
  export class DeviceOnlineStateManager extends EventEmitter {
112
147
  static REDIS_NAMESPACE = 'device-online-state';
113
- static EXPIRED_QUEUE = 'expired';
114
- static RSMQ_READ_TIMEOUT = 30;
148
+ /**
149
+ * A sorted set of the scheduled state changes, with `${deviceId}:${nextState}` members scored by the
150
+ * timestamp they are due at, so that rescheduling a device's change replaces it rather than adding another
151
+ */
152
+ static SCHEDULED_QUEUE = `${DeviceOnlineStateManager.REDIS_NAMESPACE}:scheduled`;
153
+ /**
154
+ * The RSMQ queue that previous API versions scheduled the state changes in, which we keep consuming
155
+ * until no API instances are using it and it has been drained
156
+ * TODO: Remove once no API instances are scheduling changes via RSMQ and the legacy queue has been drained
157
+ */
158
+ static LEGACY_RSMQ_QUEUE = `${DeviceOnlineStateManager.REDIS_NAMESPACE}:expired`;
159
+ static CLAIM_TIMEOUT_MSEC = 30000;
115
160
  static QUEUE_STATS_INTERVAL_MSEC = 10000;
161
+ /** The states that are scheduled as a device's next state, used to replace any change already scheduled for it */
162
+ static SCHEDULED_STATES = [
163
+ DeviceOnlineStates.Timeout,
164
+ DeviceOnlineStates.Offline,
165
+ ];
116
166
  featureIsEnabled;
117
167
  isConsuming = false;
118
- rsmq;
119
168
  constructor() {
120
169
  super();
121
170
  this.featureIsEnabled = API_HEARTBEAT_STATE_ENABLED === 1;
@@ -123,43 +172,28 @@ export class DeviceOnlineStateManager extends EventEmitter {
123
172
  if (!this.featureIsEnabled) {
124
173
  return;
125
174
  }
126
- this.rsmq = new RedisSMQ({
127
- // TODO: RSMQ does not currently support a redis cluster
128
- ...REDIS.general.host,
129
- ...REDIS.general.auth,
130
- ns: DeviceOnlineStateManager.REDIS_NAMESPACE,
131
- });
132
- // create the RedisMQ queue and start consuming messages...
133
- void this.rsmq
134
- .createQueueAsync({ qname: DeviceOnlineStateManager.EXPIRED_QUEUE })
135
- .catch((err) => {
136
- if (err.name !== 'queueExists') {
137
- throw err;
138
- }
139
- })
140
- .then(() => {
141
- this.setupQueueStatsEmitter(DeviceOnlineStateManager.QUEUE_STATS_INTERVAL_MSEC);
142
- });
175
+ this.setupQueueStatsEmitter(DeviceOnlineStateManager.QUEUE_STATS_INTERVAL_MSEC);
143
176
  }
144
177
  setupQueueStatsEmitter(interval) {
145
178
  void setTimeout(interval, undefined, { ref: false }).then(async () => {
146
179
  try {
147
180
  const startAt = Date.now();
148
- const queueAttributes = await this.rsmq.getQueueAttributesAsync({
149
- qname: DeviceOnlineStateManager.EXPIRED_QUEUE,
150
- });
181
+ const [msgs, hiddenmsgs, legacyMsgs, legacyHiddenmsgs] = await Promise.all([
182
+ redisRO.zCard(DeviceOnlineStateManager.SCHEDULED_QUEUE),
183
+ redisRO.zCount(DeviceOnlineStateManager.SCHEDULED_QUEUE, startAt, '+inf'),
184
+ redisRO.zCard(DeviceOnlineStateManager.LEGACY_RSMQ_QUEUE),
185
+ redisRO.zCount(DeviceOnlineStateManager.LEGACY_RSMQ_QUEUE, startAt, '+inf'),
186
+ ]);
151
187
  const endAt = Date.now();
152
188
  this.emit('stats', {
153
189
  startAt,
154
190
  endAt,
155
- totalsent: queueAttributes.totalsent,
156
- totalrecv: queueAttributes.totalrecv,
157
- msgs: queueAttributes.msgs,
158
- hiddenmsgs: queueAttributes.hiddenmsgs,
191
+ msgs: msgs + legacyMsgs,
192
+ hiddenmsgs: hiddenmsgs + legacyHiddenmsgs,
159
193
  });
160
194
  }
161
195
  catch (err) {
162
- captureException(err, 'RSMQ: Unable to acquire and emit the queue stats.');
196
+ captureException(err, 'DeviceStateManager: Unable to acquire and emit the queue stats.');
163
197
  }
164
198
  finally {
165
199
  this.setupQueueStatsEmitter(interval);
@@ -208,22 +242,70 @@ export class DeviceOnlineStateManager extends EventEmitter {
208
242
  });
209
243
  }
210
244
  }
245
+ async deleteLegacyChange(id) {
246
+ await redis
247
+ .multi()
248
+ .zRem(DeviceOnlineStateManager.LEGACY_RSMQ_QUEUE, id)
249
+ .hDel(`${DeviceOnlineStateManager.LEGACY_RSMQ_QUEUE}:Q`, [
250
+ id,
251
+ `${id}:rc`,
252
+ `${id}:fr`,
253
+ ])
254
+ .exec();
255
+ }
256
+ /**
257
+ * Claims the next due state change, hiding it from other consumers for CLAIM_TIMEOUT_MSEC
258
+ * so that multiple API agents do not process it, after which it will be consumed again unless removed
259
+ */
260
+ async claimNextChange() {
261
+ const now = Date.now();
262
+ const claimedUntil = now + DeviceOnlineStateManager.CLAIM_TIMEOUT_MSEC;
263
+ const member = await redisWithScripts.claimDueMember(DeviceOnlineStateManager.SCHEDULED_QUEUE, now, claimedUntil);
264
+ if (member != null) {
265
+ const [memberDeviceId, memberNextState] = member.split(':');
266
+ return {
267
+ deviceId: parseInt(memberDeviceId, 10),
268
+ nextState: memberNextState,
269
+ remove: () => redisWithScripts.removeClaimedMember(DeviceOnlineStateManager.SCHEDULED_QUEUE, member, claimedUntil),
270
+ };
271
+ }
272
+ // TODO: Remove once no API instances are scheduling changes via RSMQ and the legacy queue has been drained
273
+ const legacyId = await redisWithScripts.claimDueMember(DeviceOnlineStateManager.LEGACY_RSMQ_QUEUE, now, claimedUntil);
274
+ if (legacyId == null) {
275
+ return;
276
+ }
277
+ const message = await redis.hGet(`${DeviceOnlineStateManager.LEGACY_RSMQ_QUEUE}:Q`, legacyId);
278
+ if (message == null) {
279
+ // it was deleted after we claimed it, so there is nothing to process
280
+ return;
281
+ }
282
+ const { deviceId, nextState } = JSON.parse(message);
283
+ return {
284
+ deviceId,
285
+ nextState,
286
+ legacyId,
287
+ remove: () => this.deleteLegacyChange(legacyId),
288
+ };
289
+ }
211
290
  consume() {
212
- // pull a message from the queue...
213
- void this.rsmq
214
- .receiveMessageAsync({
215
- qname: DeviceOnlineStateManager.EXPIRED_QUEUE,
216
- vt: DeviceOnlineStateManager.RSMQ_READ_TIMEOUT, // prevent other consumers seeing the same message (if any) preventing multiple API agents from processing it...
217
- })
218
- .then(async (msg) => {
219
- if (!('id' in msg)) {
220
- // no messages to consume, wait a second...
291
+ // pull a state change from the queue...
292
+ void this.claimNextChange()
293
+ .then(async (change) => {
294
+ if (change == null) {
295
+ // no state changes to consume, wait a second...
221
296
  await setTimeout(1000);
222
297
  return;
223
298
  }
224
- const { id, message } = msg;
225
299
  try {
226
- const { deviceId, nextState } = JSON.parse(message);
300
+ const { deviceId, nextState, legacyId } = change;
301
+ // While API versions that schedule changes via RSMQ are still running, a device's latest change might
302
+ // have been scheduled in the other queue, in which case this one is stale and must not be applied
303
+ // TODO: Remove once no API instances are scheduling changes via RSMQ and the legacy queue has been drained
304
+ const managerState = await this.getDeviceOnlineState(deviceId);
305
+ if (managerState != null && managerState.id !== legacyId) {
306
+ await change.remove();
307
+ return;
308
+ }
227
309
  // raise and event for the state change...
228
310
  switch (nextState) {
229
311
  case DeviceOnlineStates.Timeout:
@@ -234,7 +316,7 @@ export class DeviceOnlineStateManager extends EventEmitter {
234
316
  await this.updateDeviceModel(deviceId, DeviceOnlineStates.Offline);
235
317
  // This not only cleans-up the write cache for housekeeping reasons, but also
236
318
  // invalidates it whenever a device goes Offline.
237
- // This way, after an incident/downtime, when the RSMQ resumes processing the pending heartbeat changes
319
+ // This way, after an incident/downtime, when the queue resumes processing the pending heartbeat changes
238
320
  // and new state GETs arrive, racing to update the DB & write cache's heartbeat state,
239
321
  // the DB & write cache get back in sync (if they have drifted) as soon as each device is marked as Offline,
240
322
  // allowing it to go back Online on the next state GET.
@@ -243,10 +325,7 @@ export class DeviceOnlineStateManager extends EventEmitter {
243
325
  default:
244
326
  throw new Error(`An unexpected value was encountered for the target device state: ${nextState}`);
245
327
  }
246
- await this.rsmq.deleteMessageAsync({
247
- qname: DeviceOnlineStateManager.EXPIRED_QUEUE,
248
- id,
249
- });
328
+ await change.remove();
250
329
  }
251
330
  catch (err) {
252
331
  captureException(err, 'An error occurred trying to process an API heartbeat event.');
@@ -272,26 +351,25 @@ export class DeviceOnlineStateManager extends EventEmitter {
272
351
  }
273
352
  async scheduleChangeOfStateForDevice(deviceId, previousManagerState, currentState, nextState, delay, // in seconds
274
353
  updatedAt) {
354
+ // TODO: Remove once no API instances are scheduling changes via RSMQ and the legacy queue has been drained
275
355
  if (previousManagerState?.id != null) {
276
356
  try {
277
357
  // remove the old queued state...
278
- await this.rsmq.deleteMessageAsync({
279
- qname: DeviceOnlineStateManager.EXPIRED_QUEUE,
280
- id: previousManagerState.id,
281
- });
358
+ await this.deleteLegacyChange(previousManagerState.id);
282
359
  }
283
360
  catch {
284
361
  // ignore errors when deleting the old queued state, it may have already expired...
285
362
  }
286
363
  }
287
- const newId = await this.rsmq.sendMessageAsync({
288
- qname: DeviceOnlineStateManager.EXPIRED_QUEUE,
289
- message: JSON.stringify({
290
- deviceId,
291
- nextState,
292
- }),
293
- delay,
294
- });
364
+ // schedule the next state, replacing any state change already scheduled for the device...
365
+ await redis
366
+ .multi()
367
+ .zAdd(DeviceOnlineStateManager.SCHEDULED_QUEUE, {
368
+ score: Date.now() + delay * 1000,
369
+ value: `${deviceId}:${nextState}`,
370
+ })
371
+ .zRem(DeviceOnlineStateManager.SCHEDULED_QUEUE, DeviceOnlineStateManager.SCHEDULED_STATES.filter((state) => state !== nextState).map((state) => `${deviceId}:${state}`))
372
+ .exec();
295
373
  // if we didn't just update the heartbeat and are in still the same state,
296
374
  // then carry over the original change timestamp.
297
375
  if (API_HEARTBEAT_STATE_ONLINE_UPDATE_CACHE_TIMEOUT != null &&
@@ -299,7 +377,6 @@ export class DeviceOnlineStateManager extends EventEmitter {
299
377
  updatedAt ??= previousManagerState.updatedAt;
300
378
  }
301
379
  await redis.set(`${DeviceOnlineStateManager.REDIS_NAMESPACE}:${deviceId}`, JSON.stringify({
302
- id: newId,
303
380
  currentState,
304
381
  ...(updatedAt != null && {
305
382
  updatedAt,
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/features/device-heartbeat/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/features/device-heartbeat/index.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@balena/open-balena-api",
3
3
  "description": "Internet of things, Made Simple",
4
- "version": "52.1.0",
4
+ "version": "52.2.0",
5
5
  "license": "AGPL-3.0",
6
6
  "repository": {
7
7
  "type": "git",
@@ -126,7 +126,6 @@
126
126
  "rate-limiter-flexible": "^11.0.0",
127
127
  "redis": "^6.3.0",
128
128
  "request": "^2.88.2",
129
- "rsmq": "^0.13.0",
130
129
  "semver": "^7.7.4",
131
130
  "slugify": "^1.6.9",
132
131
  "snappy": "^7.3.3",
@@ -175,6 +174,6 @@
175
174
  "_": "index.js"
176
175
  },
177
176
  "versionist": {
178
- "publishedAt": "2026-11-02T14:50:37.539Z"
177
+ "publishedAt": "2026-11-02T17:00:42.535Z"
179
178
  }
180
179
  }