zenml-io / mlstacks

A series of Terraform based recipes to provision popular MLOps stacks on the cloud.
https://mlstacks.zenml.io/
Apache License 2.0
245 stars 32 forks source link

Fix/analytics connection hang #141

Closed marwan37 closed 4 months ago

marwan37 commented 4 months ago

Describe changes

I implemented a workaround that disables retries for sending analytics data, in response to issue #130. This ensures the CLI remains responsive even when the Segment analytics API is unreachable, due to network failures or blocking mechanisms like PiHole.

Reference to Documentation

The Segment Python library documentation did not explicitly mention configurable options for max_retries, but the source code revealed a max_retries property in segment/analytics/client.py.

Testing

To simulate an unreachable analytics API domain at api.segment.io, I redirected all requests to this domain to 127.0.0.1 by adding the following entry in the /etc/hosts file on my Mac:

127.0.0.1 api.segment.io

Following this setup, I tested the deploy, breakdown, output, and destroy CLI commands, and confirmed it exits immediately, without hanging, after attempting to reach the analytics API domain once.

Pre-requisites

Please ensure you have done the following:

Types of changes

Summary by CodeRabbit

coderabbitai[bot] commented 4 months ago

[!IMPORTANT]

Auto Review Skipped

Auto reviews are disabled on this repository.

Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository.

To trigger a single review, invoke the @coderabbitai review command.

Walkthrough

This update introduces a new configuration parameter max_retries to the analytics module, initially set to 0. It also enhances the track_event function with error handling to manage exceptions during analytics tracking, aiming to improve reliability and user experience by preventing the application from hanging due to unreachable analytics services.

Changes

File Summary
.../analytics/client.py Added max_retries config parameter; updated track_event with try-except for exceptions

Related issues

Thank you for using CodeRabbit. We offer it for free to the OSS community and would appreciate your support in helping us grow. If you find it useful, would you consider giving us a shout-out on your favorite social media?

Share - [X](https://twitter.com/intent/tweet?text=I%20just%20used%20%40coderabbitai%20for%20my%20code%20review%2C%20and%20it%27s%20fantastic%21%20It%27s%20free%20for%20OSS%20and%20offers%20a%20free%20trial%20for%20the%20proprietary%20code.%20Check%20it%20out%3A&url=https%3A//coderabbit.ai) - [Mastodon](https://mastodon.social/share?text=I%20just%20used%20%40coderabbitai%20for%20my%20code%20review%2C%20and%20it%27s%20fantastic%21%20It%27s%20free%20for%20OSS%20and%20offers%20a%20free%20trial%20for%20the%20proprietary%20code.%20Check%20it%20out%3A%20https%3A%2F%2Fcoderabbit.ai) - [Reddit](https://www.reddit.com/submit?title=Great%20tool%20for%20code%20review%20-%20CodeRabbit&text=I%20just%20used%20CodeRabbit%20for%20my%20code%20review%2C%20and%20it%27s%20fantastic%21%20It%27s%20free%20for%20OSS%20and%20offers%20a%20free%20trial%20for%20proprietary%20code.%20Check%20it%20out%3A%20https%3A//coderabbit.ai) - [LinkedIn](https://www.linkedin.com/sharing/share-offsite/?url=https%3A%2F%2Fcoderabbit.ai&mini=true&title=Great%20tool%20for%20code%20review%20-%20CodeRabbit&summary=I%20just%20used%20CodeRabbit%20for%20my%20code%20review%2C%20and%20it%27s%20fantastic%21%20It%27s%20free%20for%20OSS%20and%20offers%20a%20free%20trial%20for%20proprietary%20code)

Tips ### Chat There are 3 ways to chat with CodeRabbit: - Review comments: Directly reply to a review comment made by CodeRabbit. Example: - `I pushed a fix in commit .` - `Generate unit-tests for this file.` - Files and specific lines of code (under the "Files changed" tab): Tag `@coderabbitai` in a new review comment at the desired location with your query. Examples: - `@coderabbitai generate unit tests for this file.` - `@coderabbitai modularize this function.` - PR comments: Tag `@coderabbitai` in a new PR comment to ask questions about the PR branch. For the best results, please provide a very specific query, as very limited context is provided in this mode. Examples: - `@coderabbitai generate interesting stats about this repository from git and render them as a table.` - `@coderabbitai show all the console.log statements in this repository.` - `@coderabbitai read src/utils.ts and generate unit tests.` - `@coderabbitai read the files in the src/scheduler package and generate a class diagram using mermaid and a README in the markdown format.` Note: Be mindful of the bot's finite context window. It's strongly recommended to break down tasks such as reading entire modules into smaller chunks. For a focused discussion, use review comments to chat about specific files and their changes, instead of using the PR comments. ### CodeRabbit Commands (invoked as PR comments) - `@coderabbitai pause` to pause the reviews on a PR. - `@coderabbitai resume` to resume the paused reviews. - `@coderabbitai review` to trigger a review. This is useful when automatic reviews are disabled for the repository. - `@coderabbitai resolve` resolve all the CodeRabbit review comments. - `@coderabbitai help` to get help. Additionally, you can add `@coderabbitai ignore` anywhere in the PR description to prevent this PR from being reviewed. ### CodeRabbit Configration File (`.coderabbit.yaml`) - You can programmatically configure CodeRabbit by adding a `.coderabbit.yaml` file to the root of your repository. - The JSON schema for the configuration file is available [here](https://coderabbit.ai/integrations/coderabbit-overrides.v2.json). - If your editor has YAML language server enabled, you can add the path at the top of this file to enable auto-completion and validation: `# yaml-language-server: $schema=https://coderabbit.ai/integrations/coderabbit-overrides.v2.json` ### CodeRabbit Discord Community Join our [Discord Community](https://discord.com/invite/GsXnASn26c) to get help, request features, and share feedback.
strickvl commented 4 months ago

Thank you for this PR! One thing you'll probably need to do is rebase on develop branch. If your branch is branched off develop already, then you can just click the 'edit' button at the right / top of the header and then update it so that it knows it'll be merged onto develop and not to main (which it's currently set to do).

CleanShot 2024-02-08 at 20 17 25@2x

Thanks!

strickvl commented 4 months ago

You can also see the CI is showing a linting error, so please do run the formatting and linting scripts locally before updating with the fix.

marwan37 commented 4 months ago

Just fixed any issues mentioned in the CI and ran the format and lint scripts again. This was indeed branched off develop already so the edit button at the top allowed me to update it. Thanks!

strickvl commented 4 months ago

@coderabbitai review

marwan37 commented 4 months ago

Great suggestion, @strickvl. I've committed the change. Thanks for your input. Regarding the other CodeRabbit suggestion, I'm assuming it's safe to ignore as the app uses a single instance of the analytics client?

strickvl commented 4 months ago

@marwan37 yep sometimes the rabbit has good suggestions or catches small things. Today, not so much :) You can ignore them.

strickvl commented 4 months ago

@marwan37 sorry the line I suggested seems to have been too long. I'd break up that logger statement and then I'll rerun the CI.

marwan37 commented 4 months ago

@strickvl, I've adjusted the logger statement. Thanks for pointing that out.

strickvl commented 4 months ago

@marwan37 I cloned your fork + checked out your branch but when running this I still get the following output when testing locally:

CleanShot 2024-02-13 at 16 21 52@2x

i.e. it doesn't seem to pick up your custom error at all. Looking at their codebase, it's not clear to me whether the on_error is doing what we think it's doing actually... @bcdurak any thoughts? This e.g. is the place where the log I'm getting is generated.

marwan37 commented 4 months ago

@strickvl, yes I had those errors too. My apologies, I should have documented that behavior earlier. These errors seem to be handled internally by Segment and won't trigger the custom on_error. Currently, it should be assumed that the on_error handler is designed primarily for handling errors that occur after the retry logic has concluded. Without directly modifying the Segment library, I couldn't find a way to gain more control over those logs, but I'd be happy to explore further if needed.

strickvl commented 4 months ago

@marwan37 can you run the format / linting script on the files on your end and push any changes that get made?