-
Notifications
You must be signed in to change notification settings - Fork 86
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
[controller] log compaction #1282
base: main
Are you sure you want to change the base?
Conversation
…er methods VeniceParentHelixAdmin::isCompactionReady VeniceParentHelixAdmin::isLastCompactionTimeOlderThanThresholdHours
…or readability & maintainability
…ForCompaction & VeniceParentHelixAdmin::isLastCompactionTimeOlderThanThresholdHours JavaDocs description - complete description of VeniceParentHelixAdmin::getStoresForCompaction - future tense to present tense for VeniceParentHelixAdmin::isLastCompactionTimeOlderThanThresholdHours
…ionReady & helper methods
…ersion is not found
…:filterStoresForCompaction - extract filterStoresForCompaction() logic for testing - write VeniceParentHelixAdminTest::testFilterStoresForCompaction
… TestVeniceParentHelixAdmin - migrate from integration test files to unit test files
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Good job on putting up the first PR quickly. Looks very good. I have put in some comments.
Let me know if you have questions.
internal/venice-common/src/main/java/com/linkedin/venice/controllerapi/ControllerClient.java
Outdated
Show resolved
Hide resolved
...mmon/src/integrationTest/java/com/linkedin/venice/controller/VeniceParentHelixAdminTest.java
Outdated
Show resolved
Hide resolved
services/venice-controller/src/main/java/com/linkedin/venice/controller/Admin.java
Outdated
Show resolved
Hide resolved
...s/venice-controller/src/main/java/com/linkedin/venice/controller/VeniceParentHelixAdmin.java
Outdated
Show resolved
Hide resolved
...s/venice-controller/src/main/java/com/linkedin/venice/controller/VeniceParentHelixAdmin.java
Outdated
Show resolved
Hide resolved
...s/venice-controller/src/main/java/com/linkedin/venice/controller/VeniceParentHelixAdmin.java
Outdated
Show resolved
Hide resolved
.../venice-controller/src/main/java/com/linkedin/venice/controller/server/AdminSparkServer.java
Outdated
Show resolved
Hide resolved
...s/venice-controller/src/main/java/com/linkedin/venice/controller/VeniceParentHelixAdmin.java
Outdated
Show resolved
Hide resolved
...nice-controller/src/test/java/com/linkedin/venice/controller/TestVeniceParentHelixAdmin.java
Outdated
Show resolved
Hide resolved
…tionReady package private
…data type ArrayList -> List
- remodularise VeniceParentHelixAdmin::isHybridStore to function var in VeniceParentHelixAdmin::isCompactionReady - make VeniceParentHelixAdmin::isLastCompactionTimeOlderThanThresholdHours hardcoded int to class constant
...s/venice-controller/src/main/java/com/linkedin/venice/controller/VeniceParentHelixAdmin.java
Outdated
Show resolved
Hide resolved
- change exception message in child controller
interface for repush: Azkaban/Airflow implementation for Linkedin internal. (potentially) Spark implementation for OSS.
…logic to VeniceHelixAdmin
- empty implementation for now
reason: since repush will be used for diff use cases (other than compaction), the term repush should be reserved for the abstracted repush action.
- instantiate in VeniceController
- this config determines the number of threads for LogCompactionService::executor
…UNT annotations & comments
…into CompactionManager - create CompactionManager & TestCompactionManager - move TestCompactionManager::testFilterStoresForCompaction from TestVeniceParentHelixAdmin
…utor setup in LogCompactionService::startInner
…g time unit from hour to millisecond
2a84289
to
1f44e45
Compare
…g time unit from hour to millisecond
- add RepushOrchestratorClassName config (to configure RepushOrchestrator implementation used)
- CompactionManager::filterStoresForCompaction return ArrayList of stores - update TestCompactionManager::testFilterStoresForCompaction - create & organise logcompaction package - update import statements for logcompaction package classes - create RepushJobResponse - RepushOrchestrator::repush returns RepushJobResponse - CompactionManager::compactStore receives RepushResponse -> logs success OR error
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I took another pass and put in comments. Looks like some parts are still work in progress. Can you ping me when you have them ready for review?
internal/venice-common/src/main/java/com/linkedin/venice/controllerapi/ControllerClient.java
Outdated
Show resolved
Hide resolved
internal/venice-common/src/main/java/com/linkedin/venice/controllerapi/ControllerClient.java
Outdated
Show resolved
Hide resolved
services/venice-controller/src/main/java/com/linkedin/venice/controller/Admin.java
Outdated
Show resolved
Hide resolved
services/venice-controller/src/main/java/com/linkedin/venice/controller/VeniceController.java
Outdated
Show resolved
Hide resolved
...e-controller/src/main/java/com/linkedin/venice/controller/VeniceControllerClusterConfig.java
Outdated
Show resolved
Hide resolved
...troller/src/main/java/com/linkedin/venice/controller/logcompaction/LogCompactionService.java
Show resolved
Hide resolved
...troller/src/main/java/com/linkedin/venice/controller/logcompaction/LogCompactionService.java
Show resolved
Hide resolved
|
||
@Override | ||
public void compactStore(String storeName) { | ||
// TODO |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
If we are still working on the compaction manager and this method? Can you let me know when this part is ready for review?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Can I confirm that VPHA::compactStore()
does nothing since the compaction is done by child controllers?
This is the plan VHA::compactStore()
only calls CompactionManager::compactStore()
and let CompactionManager
handle the trigger response & logging. Any comments/thoughts?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Depends on what sort of thing happens within CompactionManager::compactStore
. E.g., if you are invoking other APIs to get some other store metadata. My guess is it should happen on the child controller and also the leader child controller (potentially) to make sure it sees the most up-to-date store metadata e.g., version information (if at all it needs to invalidate some of the request parameters).
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Let's have CompactionManager::compactStore
log the response status but have VHA::compactStore
receive and handle errors.
We can think of CompactionManager
as an "irresponsible" class with low visibility, and all it does is execute and hands off any results back upstream.
* @see Admin#compactStore(String) | ||
*/ | ||
public Route compactStore(Admin admin) { | ||
return new VeniceRouteHandler<ControllerResponse>(ControllerResponse.class) { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
What is the concrete response for the compactStore? Also, this might be not necessary for the log compaction itself.
You can start w/
- Implementing
CompactionManager
logic - Followed by injecting
CompactionManager
inVeniceHelixAdmin
- Tackle the API (controller) last as it is only needed for adhoc triggers and not for
LogCompactionService
Putting up the priority above so that you can get some part of the PR ready for review
...venice-controller/src/test/java/com/linkedin/venice/controller/TestLogCompactionService.java
Outdated
Show resolved
Hide resolved
- create com.linkedin.venice.controller.logcompaction in tests - change CompactionManager::filterStoresForCompaction from public to package private
…g-compaction-repush`
closed because branch renamed to |
reverted branch name to |
…epush` to `log-compaction`
…abled feature flat purpose: control rollout of log compaction service
- log trigger source (for now, can expand later)
…QueryParams initialisation to take explicit clusterName directly
- since triggerRepush() is beyond the original scope of log compaction, this method is parked for later addition. adding TODO to remember thought process & design decision to use byte[] + data model class rather than QueryParams for repush job details
- CompactionManager::compactStore & VeniceHelixAdmin::compactStore logs & rethrows exception from repush - LogCompactionService logs exception & can be extended to perform other actions to handle exception - RepushJobResponse will be passe from RepushOrchestrator::repush through CompactionManager::compactStore & VeniceHelixAdmin::compactStore to LogCompactionService - added execution URL to RepushJobResponse, to follow repush.py's pattern
Summary
How was this PR tested?
unit test: filter all stores on a cluster for compaction-ready stores
Does this PR introduce any user-facing changes?