@@ -77,6 +77,31 @@ public int getLargestUsedVersionNumber(String storeName) {
77
77
return largestUsedVersionNumber ;
78
78
}
79
79
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
+
80
105
@ Override
81
106
public void putStoreIntoGraveyard (String clusterName , Store store ) {
82
107
int largestUsedVersionNumber = getLargestUsedVersionNumber (store .getName ());
@@ -196,6 +221,35 @@ private int getPerUserStoreSystemStoreLargestUsedVersionNumber(
196
221
return largestUsedVersionNumber ;
197
222
}
198
223
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
+
199
253
private String getGeneralStoreGraveyardPath () {
200
254
return getStoreGraveyardPath (PathResourceRegistry .WILDCARD_MATCH_ANY , PathResourceRegistry .WILDCARD_MATCH_ANY );
201
255
}
0 commit comments