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

[da-vinci][dvc] Dropping unassigned partitions #1332

Draft
wants to merge 24 commits into
base: main
Choose a base branch
from

Conversation

kristyelee
Copy link
Contributor

Summary, imperative, start upper case, don't end with a period

The objective is to remove unassigned partitions.
Applying this issue to Da Vinci Client which has information over partitions in storage.

This PR is an extension of the PR #1196 [https://github.com//pull/1196] that checks which partitions should be kept [in StorageService] and applies the check in VeniceServer.

Resolves #650

How was this PR tested?

A corresponding test will be written.

Does this PR introduce any user-facing changes?

  • No. You can skip the rest of this section.
  • Yes. Make sure to explain your proposed changes and call out the behavior change.

@kristyelee kristyelee marked this pull request as draft November 20, 2024 23:33
@kristyelee kristyelee force-pushed the kristy_lee/650_davinci branch from 2055b04 to 52a557c Compare December 5, 2024 01:08
@kristyelee kristyelee force-pushed the kristy_lee/650_davinci branch from b94b49a to 262bbc6 Compare December 9, 2024 18:32
…iption. Enabled config flag over bootstrap subscription
…iption. Enabled config flag over bootstrap subscription
@kristyelee kristyelee force-pushed the kristy_lee/650_davinci branch from a163e56 to 9dbffc9 Compare December 10, 2024 23:45
@kristyelee kristyelee force-pushed the kristy_lee/650_davinci branch from 9dbffc9 to fd9fa02 Compare December 11, 2024 00:59
StoreBackend storeBackend = getStoreOrThrow(storeName);
storeBackend.subscribe(ComplementSet.newSet(partitions), Optional.of(version));
});
if (configLoader.getCombinedProperties().getBoolean(DA_VINCI_SUBSCRIBE_ON_DISK_PARTITIONS_AUTOMATICALLY, true)) {
Copy link
Contributor

Choose a reason for hiding this comment

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

This looks like a good start, but do we need to do clean up? @sixpluszero @kvargha ?

Copy link
Contributor

Choose a reason for hiding this comment

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

Maybe we add a method to the interface which allows users to clean up unsubscribed state?

Copy link
Contributor

Choose a reason for hiding this comment

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

Gaojie proposed that we keep the state on disk to play it on the safe side, as with a new version it will automatically get cleaned up.

Comment on lines 1328 to 1351
// Test automatic new version ingestion
for (int i = 0; i < 2; ++i) {
// Test per-version partitioning parameters
int partitionCount = i + 1;
String iString = String.valueOf(i);
cluster.useControllerClient(controllerClient -> {
ControllerResponse response = controllerClient.updateStore(
storeName1,
new UpdateStoreQueryParams().setPartitionerClass(ConstantVenicePartitioner.class.getName())
.setPartitionCount(partitionCount)
.setPartitionerParams(
Collections.singletonMap(ConstantVenicePartitioner.CONSTANT_PARTITION, iString)));
assertFalse(response.isError(), response.getError());
});

Integer expectedValue = cluster.createVersion(storeName1, KEY_COUNT);
TestUtils.waitForNonDeterministicAssertion(TEST_TIMEOUT, TimeUnit.MILLISECONDS, () -> {
for (int k = 0; k < KEY_COUNT; ++k) {
Object readValue = client1.get(k).get();
assertEquals(readValue, expectedValue);
}
});
}
}
Copy link
Contributor

@kvargha kvargha Jan 8, 2025

Choose a reason for hiding this comment

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

I don't think we need this for this test. We can focus on one version to determine whether or not we're not automatically subscribing to partitions already on disk.

Comment on lines 1369 to 1376
client1.subscribe(partitions);
client1.unsubscribeAll();

DaVinciBackend daVinciBackend = AvroGenericDaVinciClient.getBackend();
if (daVinciBackend != null) {
StoreBackend storeBackend = daVinciBackend.getStoreOrThrow(storeName1);
ComplementSet<Integer> subscription = storeBackend.getSubscription();
assertTrue(subscription.isEmpty());
Copy link
Contributor

Choose a reason for hiding this comment

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

What we can do here instead is we can stick with the default partition count of 3 instead of modifying it, and in the new client we only subscribe to 2 partitions and validate that subscription only has 2 in the ComplementSet.

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.

[BUG] Reconcile on disk state with assigned partitions for given resource and delete unused partitions
3 participants