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

HPCC-30767 Move created date for secrets out of the IPropertyTree #18035

Merged
merged 1 commit into from
Nov 21, 2023

Conversation

ghalliday
Copy link
Member

@ghalliday ghalliday commented Nov 15, 2023

Type of change:

  • This change is a bug fix (non-breaking change which fixes an issue).
  • This change is a new feature (non-breaking change which adds functionality).
  • This change improves the code (refactor or other change that does not change the functionality)
  • This change fixes warnings (the fix does not alter the functionality or the generated code)
  • This change is a breaking change (fix or feature that will cause existing behavior to change).
  • This change alters the query API (existing queries will have to be recompiled)

Checklist:

  • My code follows the code style of this project.
    • My code does not create any new warnings from compiler, build system, or lint.
  • The commit message is properly formatted and free of typos.
    • The commit message title makes sense in a changelog, by itself.
    • The commit is signed.
  • My change requires a change to the documentation.
    • I have updated the documentation accordingly, or...
    • I have created a JIRA ticket to update the documentation.
    • Any new interfaces or exported functions are appropriately commented.
  • I have read the CONTRIBUTORS document.
  • The change has been fully tested:
    • I have added tests to cover my changes.
    • All new and existing tests passed.
    • I have checked that this change does not introduce memory leaks.
    • I have used Valgrind or similar tools to check for potential issues.
  • I have given due consideration to all of the following potential concerns:
    • Scalability
    • Performance
    • Security
    • Thread-safety
    • Cloud-compatibility
    • Premature optimization
    • Existing deployed queries will not be broken
    • This change fixes the problem, not just the symptom
    • The target branch of this pull request is appropriate for such a change.
  • There are no similar instances of the same problem that should be addressed
    • I have addressed them here
    • I have raised JIRA issues to address them separately
  • This is a user interface / front-end modification
    • I have tested my changes in multiple modern browsers
    • The component(s) render as expected

Smoketest:

  • Send notifications about my Pull Request position in Smoketest queue.
  • Test my draft Pull Request.

Testing:

@ghalliday ghalliday requested a review from afishbeck November 15, 2023 17:31
Copy link

@ghalliday
Copy link
Member Author

Currently untested. Pushed to run smoke test.
I will investigate adding some unit tests to ensure values are processed correctly.

friend class SecretCache;

public:
//A cache entry is initally created that has a create an access time of now, but the checkTimestamp
Copy link
Member

Choose a reason for hiding this comment

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

an=and?
or
"has create and access times of now"


//The following functions can only be called from member functions of SecretCache
private:
// Is it time to check if there is a new value for this secret?
Copy link
Member

Choose a reason for hiding this comment

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

Comment seems to go with "needsRefresh()" above, rather than this function?

@@ -28,7 +28,7 @@ extern jlib_decl void setSecretMount(const char * path);
extern jlib_decl void setSecretTimeout(unsigned timeoutMs);

//Return the current (cached) value of a secret. If the secret is not defined, return nullptr.
extern jlib_decl IPropertyTree *getSecret(const char *category, const char * name, const char * optVaultId = nullptr, const char * optVersion = nullptr);
extern jlib_decl const IPropertyTree *getSecret(const char *category, const char * name, const char * optVaultId = nullptr, const char * optVersion = nullptr);
// resolveSecret() always returns an object, which will potentially be updated behind the scenes. If no secret is originally
// defined, but it then configured in a vault or Kubernetes secret, it will be bicked up when the cache entry is
Copy link
Member

Choose a reason for hiding this comment

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

"but is later added to a vault or kubernetes secret, it will then be picked up"

CPPUNIT_ASSERT(!secret2->isStale());

MilliSleep(100);
//Secret should not be updated - enough time has passed
Copy link
Member

@afishbeck afishbeck Nov 16, 2023

Choose a reason for hiding this comment

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

Perhaps either,
"secret should now be updated - enough time has passed"?
or if you meant the "not", then
"Secret2 has not automatically been updated - but secret1 is accessible because enough time has passed"?

checkSecret("secret3", "value", "secret3Value");

MilliSleep(100);
1 CPPUNIT_ASSERT(secret3->isStale()); // Value has gone
Copy link
Member

Choose a reason for hiding this comment

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

"1"?

1 CPPUNIT_ASSERT(secret3->isStale()); // Value has gone
CPPUNIT_ASSERT(secret3->isValid());
CPPUNIT_ASSERT_EQUAL(version2, secret3->getVersion());
checkSecret("secret3", "value", "secret3Value");
Copy link
Member

@afishbeck afishbeck Nov 16, 2023

Choose a reason for hiding this comment

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

writeTestingSecret("secret3", "value", nullptr); behavior is great for resiliency. I suppose to forcefully clear a secret (i.e. for emergencies) we assign an empty value.

Copy link
Member Author

Choose a reason for hiding this comment

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

Yes, I think setting to a blank string should do that. I'll add that as another test..

Copy link
Member

@afishbeck afishbeck left a comment

Choose a reason for hiding this comment

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

@ghalliday looks good. Some comments, mostly about comments.

@ghalliday
Copy link
Member Author

@afishbeck please check the last 2 commits. The first is a squashed change to the unit tests, they are more complete than the commit you last reviewed, and also contain a fix for a problem they revealed. It also clarifies exactly what the different functions need to do.
The second fixes various comments and adds a blank test case.

@ghalliday ghalliday merged commit d846fe9 into hpcc-systems:candidate-9.4.x Nov 21, 2023
44 of 45 checks passed
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.

2 participants