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

FINERACT-2149: disable liquibase phone home #4177

Open
wants to merge 1 commit into
base: develop
Choose a base branch
from

Conversation

meonkeys
Copy link
Contributor

@meonkeys meonkeys commented Nov 20, 2024

Description

This patch globally disables Liquibase's phone home / telemetry using their recommended method.

I'm new and naïve... please see my commits and commit logs, scrutinize carefully, and expect beginner mistakes.

See related discussion at https://lists.apache.org/thread/5s7zjsxdcqk1qvjnc1wbhqqv66shpl54

Checklist

Please make sure these boxes are checked before submitting your pull request - thanks!

  • Write the commit message as per https://github.com/apache/fineract/#pull-requests
  • Acknowledge that we will not review PRs that are not passing the build ("green") - it is your responsibility to get a proposed PR to pass the build, not primarily the project's maintainers.
  • Create/update unit or integration tests for verifying the changes made.
  • Follow coding conventions at https://cwiki.apache.org/confluence/display/FINERACT/Coding+Conventions.
  • Add required Swagger annotation and update API documentation at fineract-provider/src/main/resources/static/legacy-docs/apiLive.htm with details of any API changes
  • Submission is not a "code dump". (Large changes can be made "in repository" via a branch. Ask on the developer mailing list for guidance, if required.)

@meonkeys meonkeys changed the title FINERACT-2149: WIP - disable liquibase phone home FINERACT-2149: disable liquibase phone home Nov 20, 2024
@IOhacker
Copy link
Contributor

Squash your commits

I'm new and naïve... please scrutinize carefully and expect beginner mistakes.

See related discussion at https://lists.apache.org/thread/5s7zjsxdcqk1qvjnc1wbhqqv66shpl54

---

set liquibase.analytics.enabled in top-level main()

This seems like the best place to set this globally.

Surely I could be doing something wrong or silly: Please advise. I'm rusty and unfamiliar with class/bean instantiation order and process.

My naïve test/check is visually inspecting the output of the log message I added in TenantDatabaseUpgradeService to see if `liquibase.analytics.enabled` is set, and to what. I'm happy to automate this, but it seemed unnecessary? Advice welcome there, too.

I only see `false` for `liquibase.analytics.enabled` value when I set it in ServerApplication.

I tried setting `liquibase.analytics.enabled` to `false` in ExtendedSpringLiquibase and ExtendedSpringLiquibaseFactory constructors but that didn't work... perhaps these are not instantiated that way, or in time? Arnold did mention we use a custom trigger, not Sping Boot ( https://lists.apache.org/thread/rqrohj0q2ql3k89b52gq1rnj1x81ktcm ), and maybe these classes are only relevant to Spring Boot.

I can't use a simple public constructor in TenantDatabaseUpgradeService, that causes something to throw a fatal runtime exception: `error: variable tenantDetailsService might not have been initialized`. I could set the property in one of several other methods, but which one?

For posterity, we could also use an environment variable, I'm also just not sure where that should happen if we did.

---

don't log default value for liquibase opt-out

This allows us to see both

* whether the value is set or not (will log "null" if it isn't)
* what the value is set to, if it is set
@@ -54,6 +54,7 @@ private static SpringApplicationBuilder configureApplication(SpringApplicationBu
}

public static void main(String[] args) throws IOException {
System.setProperty("liquibase.analytics.enabled", "false");
Copy link
Contributor

Choose a reason for hiding this comment

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

wouldn't it be placed more strategically at the TenantDatabaseUpgradeService itself, in a static initializer? Can you test it if it works the same way there?

Copy link
Contributor

Choose a reason for hiding this comment

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

@meonkeys I think it can be placed as a Fineract Property set to false by default and then this property, (instead of having the System Property), can be placed in the TenantDatabaseUpgradeService as suggested by @kjozsa in the TenantDatabaseUpgradeService as static initializer

Copy link
Contributor Author

Choose a reason for hiding this comment

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

@kjozsa: yes, it does.

@kjozsa and @IOhacker: how about we go with just this simple static initializer in TenantDatabaseUpgradeService:

static {
    System.setProperty("liquibase.analytics.enabled", "false");
}

I can't imagine anyone wanting to set the flag to true, and it would be many fewer lines of code just to hardcode it to "false" in this manner rather than provide a configurable setting. If there's demand to make it configurable later, we could of course do that. I feel like our use of Liquibase is up to us, though. An under the hood / upstream decision we get to make. Thoughts?

Also, is it clear that we must use System.setProperty? Our only other alternative is to use an environment setting LIQUIBASE_ANALYTICS_ENABLED=false, visible to the Java VM before/as it initializes. I don't see any way in the Liquibase API to disable phoning home at runtime.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants