Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Check that deviceId is defined to handle cutovers from older versions #1350

Open
wants to merge 3 commits into
base: master
Choose a base branch
from
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
50 changes: 26 additions & 24 deletions src/features/device-heartbeat/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -298,30 +298,32 @@ export class DeviceOnlineStateManager extends EventEmitter<{
};

// raise and event for the state change...
switch (nextState) {
case DeviceOnlineStates.Timeout:
await this.updateDeviceModel(
deviceId,
DeviceOnlineStates.Timeout,
);
this.scheduleChangeOfStateForDevice(
deviceId,
await this.getDeviceOnlineState(deviceId),
DeviceOnlineStates.Timeout,
DeviceOnlineStates.Offline,
API_HEARTBEAT_STATE_TIMEOUT_SECONDS, // put the device into a timeout state if it misses it's scheduled heartbeat window... then mark as offline
);
break;
case DeviceOnlineStates.Offline:
await this.updateDeviceModel(
deviceId,
DeviceOnlineStates.Offline,
);
break;
default:
throw new Error(
`An unexpected value was encountered for the target device state: ${nextState}`,
);
if (deviceId) {
switch (nextState) {
case DeviceOnlineStates.Timeout:
await this.updateDeviceModel(
deviceId,
DeviceOnlineStates.Timeout,
);
this.scheduleChangeOfStateForDevice(
deviceId,
await this.getDeviceOnlineState(deviceId),
DeviceOnlineStates.Timeout,
DeviceOnlineStates.Offline,
API_HEARTBEAT_STATE_TIMEOUT_SECONDS, // put the device into a timeout state if it misses it's scheduled heartbeat window... then mark as offline
);
break;
case DeviceOnlineStates.Offline:
await this.updateDeviceModel(
deviceId,
DeviceOnlineStates.Offline,
);
break;
default:
throw new Error(
`An unexpected value was encountered for the target device state: ${nextState}`,
);
}
}
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It's probably worth it to also raise such cases with something like:

Suggested change
}
} else {
const msg = `Unable to consume API heartbeat state message without a deviceId: ${message}`;
errors.captureException(new Error(msg), msg);
}

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Unfortunately I made this PR using the web editor and it's not letting me amend the commit to include the change-type annotation - so if you guys think it's worthwhile to include probably easiest to just recreate. Either way the issue is solved on my end after running with this change, but might be helpful for others in case they run into this issue. One alternative approach would be just running a cleanup on the redis queues on startup, similar to how the database migrations occur.

Copy link
Member

@thgreasi thgreasi May 26, 2023

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hi @dcaputo-harmoni ,
Let me guide you on how to do this so that you can get the credits from doing this PR.
1a. In case you do not have a local copy of open-balela-api you will first need to fetch your fork and checkout the branch of this PR with:

git clone https://github.com/dcaputo-harmoni/open-balena-api.git
cd open-balena-api
git checkout patch-1

1b. In case you already have a local copy of the repo, then you just need to cd to it and make sure your local branch is in sync with:

git checkout patch-1
git fetch
git reset patch-1 origin:patch-1
  1. Then you can amend the commit and push with:
git commit --amend -m "Skip device heartbeat RSMQ records missing a deviceId property" -m "Change-type: patch"
git push origin patch-1

Copy link
Author

@dcaputo-harmoni dcaputo-harmoni May 31, 2023

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Just followed these steps, although I needed to pull the latest changes before pushing, so I ran:

git config pull.rebase false
git pull

Before the git push command above. Seems it didn't like the merge, any idea how to get around that? I tried setting pull.rebase to true but then the push didn't seem to do anything.


await this.rsmq.deleteMessageAsync({
Expand Down