-
Notifications
You must be signed in to change notification settings - Fork 89
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][admin-tool] Streamline controller configs and harden update-store workflow #946
Conversation
f6e6135
to
da9ab35
Compare
Thank you for the recommendations to the reviewer. Is it still possible to break down this PR? Even with the recommendations, it seems quite complex to go about the review unless there is some context I am missing which forces the way this PR is structured. |
Can you add a section in the PR description that talks about compatibility characteristics of this PR? Looks like we are deprecating lot of features and also introducing new ways or inferring to accomplish some of the existing feature (incremental push etc) Would be good to explicitly callout what are some of the considerations w.r.t backward compatibility and forward compatibility in the context of the PR and release notes that describe these to end users (where applicable) |
@nisargthakkar |
Yes, I've been trying to see how I can break this down. Even if I break it down, I expect at least one PR to be very big. Let me see how that goes |
da9ab35
to
91509e7
Compare
915df96
to
2540198
Compare
2540198
to
817f0fc
Compare
I've merged two PRs related to this: #1067, #1070 These three would cover the "Streamline controller configs" part of this PR. After this, I can create a final PR for the "harden update-store workflow" |
So we just need to review #1091 and this PR is no longer needed, correct? |
Streamline controller configs and harden update-store workflow
This PR unifies the
UpdateStore
logic between child controller and parent controllers. We've faced many issues due to the structure of the code (especiallyVeniceParentHelixAdmin
) where a set of store-update operations puts it into a non-healthy state. These are all the changes in this PR:UpdateStoreUtils
that is called by both parent and child controllers to apply the store update and perform the necessary validations.NON_AGGREGATE
data replication policyACTIVE_ACTIVE
data replication policy is only supported when Active-Active replication is enabledACTIVE_ACTIVE
,AGGREGATE
orNONE
ordinal
fromBackupStrategy
enum was being used to write to the admin channel. This is problematic when the enums evolve. Added agetValue
function and used that instead.multi.region
config to control certain features instead of controlling them via explicit configs.LiveConfig
for store migration purposes.enable.native.replication.for.batch.only
enable.native.replication.for.hybrid
enable.native.replication.as.default.for.batch.only
enable.native.replication.as.default.for.hybrid
enable.active.active.replication.as.default.for.batch.only.store
admin.topic.remote.consumption.enabled
enable.incremental.push.for.hybrid.active.active.user.stores
active.active.enabled.on.controller
controller.enable.batch.push.from.admin.in.child
controller.external.superset.schema.generation.enabled
has been added to replacecontroller.parent.external.superset.schema.generation.enabled
. since external superset schema generation must be allowed in single-region mode also.controller.parent.external.superset.schema.generation.enabled
has been marked deprecated, but it has not been completely removed yet.VeniceTwoLayerMultiRegionMultiClusterWrapper
TestFabricBuildout
does this and tests for admin execution id. This is incorrect as that is not how a new region will get added. We need the test setup to support adding blank regions so that we can simulate the true fabric buildout process. Because of this, I've disabled these tests for now.Some side-effects of this change are:
SupersetSchemaGeneratorWithCustomProp
had a bug where if the first schema has a custom prop, the future superset schema generation would fail as Avro doesn't allow overriding custom props. This got caught as the update store logic now also tries creating superset schema if a store enabled RC or WC, or if it previously had a superset schema.There are a few other changes that we should do, but are not done in this PR:
All major operations should only be allowed on the parent controller - Create a store, delete a store, add schemas. We should exclude some system stores from this check like we have for the check allowing batch push to admin in child
Recommendation for Reviewers
I recommend going through the changes in at least two passes. In the first pass, look through all the stuff that has been purely deleted. (Skip
ParentControllerConfigUpdateUtils
as that has been renamed toPrimaryControllerConfigUpdateUtils
and it's contents partially moved toUpdateStoreUtils
. So, GitHub doesn't detect is as a renaming). While doing this pass, you can also glance through various small changes that do not need much pondering over.In the second pass, follow this review order:
VeniceControllerClusterConfig
,VeniceControllerConfig
,VeniceControllerMultiClusterConfig
VeniceControllerService
Admin
UpdateStoreUtils
PrimaryControllerConfigUpdateUtils
6.
AdminUtils
UpdateStoreWrapper
VeniceHelixAdmin
VeniceParentHelixAdmin
clients/venice-pulsar/readme.md
docker/venice-client/create-store.sh
How was this PR tested?
GH CI
Does this PR introduce any user-facing changes?