Skip to content

Commit d9488e0

Browse files
committed
add largestUsedRTVersionNumber in store config
1 parent 2a34ca2 commit d9488e0

File tree

11 files changed

+555
-3
lines changed

11 files changed

+555
-3
lines changed

Diff for: internal/venice-common/src/main/java/com/linkedin/venice/controllerapi/ControllerApiConstants.java

+1
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,7 @@ public class ControllerApiConstants {
7171
public static final String BATCH_GET_ROUTER_CACHE_ENABLED = "batch_get_router_cache_enabled";
7272
public static final String BATCH_GET_LIMIT = "batch_get_limit";
7373
public static final String LARGEST_USED_VERSION_NUMBER = "largest_used_version_number";
74+
public static final String LARGEST_USED_RT_VERSION_NUMBER = "largest_used_rt_version_number";
7475
public static final String NUM_VERSIONS_TO_PRESERVE = "num_versions_to_preserve";
7576
public static final String DISABLE_META_STORE = "disable_meta_store";
7677
public static final String DISABLE_DAVINCI_PUSH_STATUS_STORE = "disable_davinci_push_status_store";

Diff for: internal/venice-common/src/main/java/com/linkedin/venice/helix/HelixStoreGraveyard.java

+54
Original file line numberDiff line numberDiff line change
@@ -77,6 +77,31 @@ public int getLargestUsedVersionNumber(String storeName) {
7777
return largestUsedVersionNumber;
7878
}
7979

80+
@Override
81+
public int getLargestUsedRTVersionNumber(String storeName) {
82+
if (VeniceSystemStoreUtils.isSystemStore(storeName)) {
83+
VeniceSystemStoreType systemStoreType = VeniceSystemStoreType.getSystemStoreType(storeName);
84+
if (systemStoreType != null && systemStoreType.isStoreZkShared()) {
85+
String userStoreName = systemStoreType.extractRegularStoreName(storeName);
86+
return getPerUserStoreSystemStoreLargestUsedRTVersionNumber(userStoreName, systemStoreType);
87+
}
88+
}
89+
90+
List<Store> stores = getStoreFromAllClusters(storeName);
91+
if (stores.isEmpty()) {
92+
// If store does NOT existing in graveyard, it means store has never been deleted, return 0 which is the default
93+
// value of largestUsedRTVersionNumber for a new store.
94+
return Store.NON_EXISTING_VERSION;
95+
}
96+
int largestUsedRTVersionNumber = Store.NON_EXISTING_VERSION;
97+
for (Store deletedStore: stores) {
98+
if (deletedStore.getLargestUsedVersionNumber() > largestUsedRTVersionNumber) {
99+
largestUsedRTVersionNumber = deletedStore.getLargestUsedRTVersionNumber();
100+
}
101+
}
102+
return largestUsedRTVersionNumber;
103+
}
104+
80105
@Override
81106
public void putStoreIntoGraveyard(String clusterName, Store store) {
82107
int largestUsedVersionNumber = getLargestUsedVersionNumber(store.getName());
@@ -196,6 +221,35 @@ private int getPerUserStoreSystemStoreLargestUsedVersionNumber(
196221
return largestUsedVersionNumber;
197222
}
198223

224+
private int getPerUserStoreSystemStoreLargestUsedRTVersionNumber(
225+
String userStoreName,
226+
VeniceSystemStoreType systemStoreType) {
227+
String systemStoreName = systemStoreType.getSystemStoreName(userStoreName);
228+
List<Store> deletedStores = getStoreFromAllClusters(userStoreName);
229+
if (deletedStores.isEmpty()) {
230+
LOGGER.info(
231+
"User store: {} does NOT exist in the store graveyard. Hence, no largest used RT version for its system store: {}",
232+
userStoreName,
233+
systemStoreName);
234+
return Store.NON_EXISTING_VERSION;
235+
}
236+
int largestUsedRTVersionNumber = Store.NON_EXISTING_VERSION;
237+
for (Store deletedStore: deletedStores) {
238+
Map<String, SystemStoreAttributes> systemStoreNamesToAttributes = deletedStore.getSystemStores();
239+
SystemStoreAttributes systemStoreAttributes =
240+
systemStoreNamesToAttributes.get(VeniceSystemStoreType.getSystemStoreType(systemStoreName).getPrefix());
241+
if (systemStoreAttributes != null) {
242+
largestUsedRTVersionNumber =
243+
Math.max(largestUsedRTVersionNumber, systemStoreAttributes.getLargestUsedRTVersionNumber());
244+
}
245+
}
246+
247+
if (largestUsedRTVersionNumber == Store.NON_EXISTING_VERSION) {
248+
LOGGER.info("Can not find largest used RT version number for {}.", systemStoreName);
249+
}
250+
return largestUsedRTVersionNumber;
251+
}
252+
199253
private String getGeneralStoreGraveyardPath() {
200254
return getStoreGraveyardPath(PathResourceRegistry.WILDCARD_MATCH_ANY, PathResourceRegistry.WILDCARD_MATCH_ANY);
201255
}

Diff for: internal/venice-common/src/main/java/com/linkedin/venice/meta/ReadOnlyStore.java

+20
Original file line numberDiff line numberDiff line change
@@ -715,6 +715,16 @@ public void setLargestUsedVersionNumber(int largestUsedVersionNumber) {
715715
throw new UnsupportedOperationException();
716716
}
717717

718+
@Override
719+
public int getLargestUsedRTVersionNumber() {
720+
return this.delegate.getLargestUsedRTVersionNumber();
721+
}
722+
723+
@Override
724+
public void setLargestUsedRTVersionNumber(int largestUsedRTVersionNumber) {
725+
throw new UnsupportedOperationException();
726+
}
727+
718728
@Override
719729
public int getCurrentVersion() {
720730
return this.delegate.getCurrentVersion();
@@ -855,6 +865,16 @@ public void setLargestUsedVersionNumber(int largestUsedVersionNumber) {
855865
throw new UnsupportedOperationException();
856866
}
857867

868+
@Override
869+
public int getLargestUsedRTVersionNumber() {
870+
return this.delegate.getLargestUsedRTVersionNumber();
871+
}
872+
873+
@Override
874+
public void setLargestUsedRTVersionNumber(int largestUsedRTVersionNumber) {
875+
throw new UnsupportedOperationException();
876+
}
877+
858878
@Override
859879
public long getStorageQuotaInByte() {
860880
return this.delegate.getStorageQuotaInByte();

Diff for: internal/venice-common/src/main/java/com/linkedin/venice/meta/Store.java

+4
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,10 @@ static boolean isSystemStore(String storeName) {
8080

8181
void setLargestUsedVersionNumber(int largestUsedVersionNumber);
8282

83+
int getLargestUsedRTVersionNumber();
84+
85+
void setLargestUsedRTVersionNumber(int largestUsedRTVersionNumber);
86+
8387
long getStorageQuotaInByte();
8488

8589
void setStorageQuotaInByte(long storageQuotaInByte);

Diff for: internal/venice-common/src/main/java/com/linkedin/venice/meta/StoreGraveyard.java

+7-1
Original file line numberDiff line numberDiff line change
@@ -12,11 +12,17 @@
1212
*/
1313
public interface StoreGraveyard {
1414
/**
15-
* Retrieve the largest used version number by the given store name from graveyard. Return 0 if the store dose not
15+
* Retrieve the largest used version number by the given store name from graveyard. Return 0 if the store does not
1616
* exist in the graveyard, which is the default value we used for the new store.
1717
*/
1818
int getLargestUsedVersionNumber(String storeName);
1919

20+
/**
21+
* Retrieve the largest used version number for the real time topic by the given store name from graveyard.
22+
* Return 0 if the store does not exist in the graveyard, which is the default value we used for the new store.
23+
*/
24+
int getLargestUsedRTVersionNumber(String storeName);
25+
2026
/**
2127
* Put the given store into graveyard. If the store has already existed in the graveyard, update it by this given
2228
* store.

Diff for: internal/venice-common/src/main/java/com/linkedin/venice/meta/SystemStore.java

+12
Original file line numberDiff line numberDiff line change
@@ -186,6 +186,18 @@ public void setLargestUsedVersionNumber(int largestUsedVersionNumber) {
186186
systemStoreAttributes.setLargestUsedVersionNumber(largestUsedVersionNumber);
187187
}
188188

189+
@Override
190+
public int getLargestUsedRTVersionNumber() {
191+
SystemStoreAttributes systemStoreAttributes = fetchAndBackfillSystemStoreAttributes(true);
192+
return systemStoreAttributes.getLargestUsedRTVersionNumber();
193+
}
194+
195+
@Override
196+
public void setLargestUsedRTVersionNumber(int largestUsedRTVersionNumber) {
197+
SystemStoreAttributes systemStoreAttributes = fetchAndBackfillSystemStoreAttributes(false);
198+
systemStoreAttributes.setLargestUsedRTVersionNumber(largestUsedRTVersionNumber);
199+
}
200+
189201
@Override
190202
public long getStorageQuotaInByte() {
191203
return zkSharedStore.getStorageQuotaInByte();

Diff for: internal/venice-common/src/main/java/com/linkedin/venice/meta/SystemStoreAttributes.java

+4
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,10 @@ public interface SystemStoreAttributes extends DataModelBackedStructure<SystemSt
1111

1212
void setLargestUsedVersionNumber(int largestUsedVersionNumber);
1313

14+
int getLargestUsedRTVersionNumber();
15+
16+
void setLargestUsedRTVersionNumber(int largestUsedRTVersionNumber);
17+
1418
int getCurrentVersion();
1519

1620
void setCurrentVersion(int currentVersion);

Diff for: internal/venice-common/src/main/java/com/linkedin/venice/meta/SystemStoreAttributesImpl.java

+10
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,16 @@ public void setLargestUsedVersionNumber(int largestUsedVersionNumber) {
5050
this.dataModel.largestUsedVersionNumber = largestUsedVersionNumber;
5151
}
5252

53+
@Override
54+
public int getLargestUsedRTVersionNumber() {
55+
return this.dataModel.largestUsedRTVersionNumber;
56+
}
57+
58+
@Override
59+
public void setLargestUsedRTVersionNumber(int largestUsedRTVersionNumber) {
60+
this.dataModel.largestUsedRTVersionNumber = largestUsedRTVersionNumber;
61+
}
62+
5363
@Override
5464
public int getCurrentVersion() {
5565
return this.dataModel.currentVersion;

Diff for: internal/venice-common/src/main/java/com/linkedin/venice/meta/ZKStore.java

+12
Original file line numberDiff line numberDiff line change
@@ -365,6 +365,18 @@ public void setLargestUsedVersionNumber(int largestUsedVersionNumber) {
365365
this.storeProperties.largestUsedVersionNumber = largestUsedVersionNumber;
366366
}
367367

368+
@SuppressWarnings("unused") // Used by Serializer/De-serializer for storing to Zoo Keeper
369+
@Override
370+
public int getLargestUsedRTVersionNumber() {
371+
return this.storeProperties.largestUsedRTVersionNumber;
372+
}
373+
374+
@SuppressWarnings("unused") // Used by Serializer/De-serializer for storing to Zoo Keeper
375+
@Override
376+
public void setLargestUsedRTVersionNumber(int largestUsedRTVersionNumber) {
377+
this.storeProperties.largestUsedRTVersionNumber = largestUsedRTVersionNumber;
378+
}
379+
368380
@SuppressWarnings("unused") // Used by Serializer/De-serializer for storing to Zoo Keeper
369381
@Override
370382
public long getStorageQuotaInByte() {

0 commit comments

Comments
 (0)