@@ -85,6 +85,7 @@ abstract class AbstractHollowProducer {
8585 HollowProducerMetrics metrics ;
8686 HollowMetricsCollector <HollowProducerMetrics > metricsCollector ;
8787 final SingleProducerEnforcer singleProducerEnforcer ;
88+ final HollowConsumer .UpdatePlanBlobVerifier updatePlanBlobVerifier ;
8889 long lastSuccessfulCycle = 0 ;
8990 final HollowObjectHashCodeFinder hashCodeFinder ;
9091 final boolean doIntegrityCheck ;
@@ -108,7 +109,7 @@ public AbstractHollowProducer(
108109 new VersionMinterWithCounter (), null , 0 ,
109110 DEFAULT_TARGET_MAX_TYPE_SHARD_SIZE , false , false , false , null ,
110111 new DummyBlobStorageCleaner (), new BasicSingleProducerEnforcer (),
111- null , true );
112+ null , true , HollowConsumer . UpdatePlanBlobVerifier . DEFAULT_INSTANCE );
112113 }
113114
114115 // The only constructor should be that which accepts a builder
@@ -121,7 +122,7 @@ public AbstractHollowProducer(
121122 b .numStatesBetweenSnapshots , b .targetMaxTypeShardSize , b .focusHoleFillInFewestShards ,
122123 b .allowTypeResharding , b .forceCoverageOfTypeResharding ,
123124 b .metricsCollector , b .blobStorageCleaner , b .singleProducerEnforcer ,
124- b .hashCodeFinder , b .doIntegrityCheck );
125+ b .hashCodeFinder , b .doIntegrityCheck , b . updatePlanBlobVerifier );
125126 }
126127
127128 private AbstractHollowProducer (
@@ -140,7 +141,8 @@ private AbstractHollowProducer(
140141 HollowProducer .BlobStorageCleaner blobStorageCleaner ,
141142 SingleProducerEnforcer singleProducerEnforcer ,
142143 HollowObjectHashCodeFinder hashCodeFinder ,
143- boolean doIntegrityCheck ) {
144+ boolean doIntegrityCheck ,
145+ HollowConsumer .UpdatePlanBlobVerifier updatePlanBlobVerifier ) {
144146 this .publisher = publisher ;
145147 this .announcer = announcer ;
146148 this .versionMinter = versionMinter ;
@@ -173,6 +175,7 @@ private AbstractHollowProducer(
173175
174176 this .metrics = new HollowProducerMetrics ();
175177 this .metricsCollector = metricsCollector ;
178+ this .updatePlanBlobVerifier = updatePlanBlobVerifier ;
176179 }
177180
178181 /**
@@ -262,19 +265,25 @@ public void initializeDataModel(HollowSchema... schemas) {
262265 * @see #initializeDataModel(Class[])
263266 */
264267 public HollowProducer .ReadState restore (long versionDesired , HollowConsumer .BlobRetriever blobRetriever ) {
268+ return restore (new HollowConsumer .VersionInfo (versionDesired ), blobRetriever ,
269+ (restoreFrom , restoreTo ) -> restoreTo .restoreFrom (restoreFrom ));
270+ }
271+
272+ public HollowProducer .ReadState restore (HollowConsumer .VersionInfo versionDesired , HollowConsumer .BlobRetriever blobRetriever ) {
265273 return restore (versionDesired , blobRetriever ,
266274 (restoreFrom , restoreTo ) -> restoreTo .restoreFrom (restoreFrom ));
267275 }
268276
269277 HollowProducer .ReadState hardRestore (long versionDesired , HollowConsumer .BlobRetriever blobRetriever ) {
270- return restore (versionDesired , blobRetriever ,
278+ return restore (new HollowConsumer . VersionInfo ( versionDesired ) , blobRetriever ,
271279 (restoreFrom , restoreTo ) -> HollowWriteStateCreator .
272280 populateUsingReadEngine (restoreTo , restoreFrom , false ));
273281 }
274282
275283 private HollowProducer .ReadState restore (
276- long versionDesired , HollowConsumer .BlobRetriever blobRetriever ,
284+ HollowConsumer . VersionInfo versionInfoDesired , HollowConsumer .BlobRetriever blobRetriever ,
277285 BiConsumer <HollowReadStateEngine , HollowWriteStateEngine > restoreAction ) {
286+ long versionDesired = versionInfoDesired .getVersion ();
278287 Objects .requireNonNull (blobRetriever );
279288 Objects .requireNonNull (restoreAction );
280289
@@ -288,8 +297,10 @@ private HollowProducer.ReadState restore(
288297 Status .RestoreStageBuilder status = localListeners .fireProducerRestoreStart (versionDesired );
289298 try {
290299 if (versionDesired != HollowConstants .VERSION_NONE ) {
291- HollowConsumer client = HollowConsumer .withBlobRetriever (blobRetriever ).build ();
292- client .triggerRefreshTo (versionDesired );
300+ HollowConsumer client = HollowConsumer .withBlobRetriever (blobRetriever )
301+ .withUpdatePlanVerifier (updatePlanBlobVerifier )
302+ .build ();
303+ client .triggerRefreshTo (versionInfoDesired );
293304 readState = ReadStateHelper .newReadState (client .getCurrentVersionId (), client .getStateEngine ());
294305 readStates = ReadStateHelper .restored (readState );
295306
0 commit comments