Slackbot
05/22/2023, 7:58 AMEnrico Olivelli
05/22/2023, 7:58 AMjava.util.concurrent.ExecutionException: com.linkedin.venice.client.exceptions.VeniceClientHttpException: http status: 400, Online writes are only supported for hybrid stores that have ACTIVE_ACTIVE or NON_AGGREGATE data replication policy.
at java.base/java.util.concurrent.CompletableFuture.reportGet(CompletableFuture.java:396)
at java.base/java.util.concurrent.CompletableFuture.get(CompletableFuture.java:2073)
at com.linkedin.venice.producer.online.OnlineVeniceProducer.lambda$executeRouterRequest$1(OnlineVeniceProducer.java:100)
at net.jodah.failsafe.Functions.lambda$get$0(Functions.java:48)
at net.jodah.failsafe.RetryPolicyExecutor.lambda$supply$0(RetryPolicyExecutor.java:62)
at net.jodah.failsafe.Execution.executeSync(Execution.java:129)
at net.jodah.failsafe.FailsafeExecutor.call(FailsafeExecutor.java:376)
... 17 more
Caused by: com.linkedin.venice.client.exceptions.VeniceClientHttpException: http status: 400, Online writes are only supported for hybrid stores that have ACTIVE_ACTIVE or NON_AGGREGATE data replication policy.
at com.linkedin.venice.client.store.transport.TransportClientCallback.completeFuture(TransportClientCallback.java:39)
at com.linkedin.venice.client.store.transport.HttpTransportClient$HttpTransportClientFelix GV
05/22/2023, 10:58 AMEnrico Olivelli
05/22/2023, 11:07 AMFelix GV
05/22/2023, 12:01 PMEnrico Olivelli
05/22/2023, 12:01 PMFelix GV
05/22/2023, 12:02 PMEnrico Olivelli
05/22/2023, 12:34 PMEnrico Olivelli
05/22/2023, 12:36 PMjava -jar $jar --new-store --url $url --cluster $clusterName --store $storeName --key-schema-file $keySchema --value-schema-file $valueSchema --hybrid-data-replication-policy NON_AGGREGATE
# enable incremental push
java -jar $jar --update-store --url $url --cluster $clusterName --store $storeName --storage-quota -1 --incremental-push-enabled true --read-quota 1000000
# disable read quota
# create the first version of the store
java -jar $jar --empty-push --url $url --cluster $clusterName --store $storeName --push-id init --store-size 1000Nisarg Thakkar
05/22/2023, 5:38 PMAGGREGATE mode is deprecated and we do not wish to support it any more as it leads to extra cross-colo data movement and has a SPoF problem
I believe the steps you mentioned in the last message should have worked. Did they not?Nisarg Thakkar
05/22/2023, 5:39 PM--hybrid-data-replication-policy NON_AGGREGATE is accepted by --update-store and not --new-store. So, you need to set it in the # enable incremental push commandNisarg Thakkar
05/22/2023, 6:45 PMEnrico Olivelli
05/22/2023, 7:28 PMEnrico Olivelli
05/22/2023, 7:29 PMEnrico Olivelli
05/22/2023, 7:30 PMNisarg Thakkar
05/22/2023, 7:42 PM/**
* This enum value is used in 2 cases:
* 1. batch-only stores since it has no real-time data replication.
* 2. incremental push stores that do not have Samza jobs.
*/
NONE(2),
This javadoc needs to be updated, but Samza job = Nearline producer = Online producer
So, you should be specifying some hybrid configs with your --update-store. At LinkedIn, we use --hybrid-rewind-seconds 86400 --hybrid-offset-lag 1000 by default for usersEnrico Olivelli
05/22/2023, 7:42 PMEnrico Olivelli
05/22/2023, 7:46 PMZac Policzer
05/22/2023, 7:49 PMhybrid-rewind-seconds 86400 means that when the next push happens, the messages produced to nearline within the last 86400s will be applied to the new version. --hybrid-offset-lag 1000 basically means that after the new version is pushed, each replica should be at least 1000 offsets from the tail of nearline data before declaring itself ready to serve trafficEnrico Olivelli
05/22/2023, 7:50 PMZac Policzer
05/22/2023, 7:50 PMZac Policzer
05/22/2023, 7:50 PMZac Policzer
05/22/2023, 7:51 PMEnrico Olivelli
05/22/2023, 7:55 PMFelix GV
05/23/2023, 1:40 AMZac Policzer
05/23/2023, 1:42 AMNisarg Thakkar
05/23/2023, 1:46 AMNisarg Thakkar
05/23/2023, 1:46 AMNisarg Thakkar
05/23/2023, 2:26 AMupdate-store call.
@Test
public void testIncPushDRP() {
String storeName = Utils.getUniqueString("hybrid-store");
sharedVenice.useControllerClient(cc -> {
NewStoreResponse newStoreResponse = cc.createNewStore(storeName, "default", "\"string\"", "\"string\"");
Assert.assertFalse(newStoreResponse.isError());
UpdateStoreQueryParams updateStoreQueryParams = new UpdateStoreQueryParams()
.setStorageQuotaInByte(1)
.setIncrementalPushEnabled(true)
.setReadQuotaInCU(1000000)
.setHybridDataReplicationPolicy(DataReplicationPolicy.NON_AGGREGATE)
.setHybridRewindSeconds(86400)
.setHybridOffsetLagThreshold(1000);
ControllerResponse updateStoreResponse = cc.updateStore(storeName, updateStoreQueryParams);
Assert.assertFalse(updateStoreResponse.isError());
cc.sendEmptyPushAndWait(storeName, Utils.getUniqueString(storeName), 1000, 10000);
StoreResponse storeResponse = cc.getStore(storeName);
StoreInfo storeInfo = storeResponse.getStore();
Assert.assertEquals(storeInfo.getVersion(1).get().getHybridStoreConfig().getDataReplicationPolicy(), DataReplicationPolicy.NON_AGGREGATE);
});
}Enrico Olivelli
05/23/2023, 9:52 AM