Add option for dry run

The dry run does all the steps except the deletion. All the counters will
return the same values they would have returned on an actual run.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=162379609
This commit is contained in:
guyben 2017-07-18 11:33:50 -07:00 committed by Ben McIlwain
parent 700148ae45
commit 268abbc383

View file

@ -14,6 +14,7 @@
package google.registry.backup; package google.registry.backup;
import static google.registry.mapreduce.MapreduceRunner.PARAM_DRY_RUN;
import static google.registry.model.ofy.ObjectifyService.ofy; import static google.registry.model.ofy.ObjectifyService.ofy;
import static google.registry.util.FormattingLogger.getLoggerForCallerClass; import static google.registry.util.FormattingLogger.getLoggerForCallerClass;
import static google.registry.util.PipelineUtils.createJobPath; import static google.registry.util.PipelineUtils.createJobPath;
@ -36,6 +37,7 @@ import google.registry.model.ofy.CommitLogManifest;
import google.registry.model.ofy.CommitLogMutation; import google.registry.model.ofy.CommitLogMutation;
import google.registry.model.translators.CommitLogRevisionsTranslatorFactory; import google.registry.model.translators.CommitLogRevisionsTranslatorFactory;
import google.registry.request.Action; import google.registry.request.Action;
import google.registry.request.Parameter;
import google.registry.request.Response; import google.registry.request.Response;
import google.registry.request.auth.Auth; import google.registry.request.auth.Auth;
import google.registry.util.Clock; import google.registry.util.Clock;
@ -75,6 +77,7 @@ public final class DeleteOldCommitLogsAction implements Runnable {
@Inject Response response; @Inject Response response;
@Inject Clock clock; @Inject Clock clock;
@Inject @Config("commitLogDatastoreRetention") Duration maxAge; @Inject @Config("commitLogDatastoreRetention") Duration maxAge;
@Inject @Parameter(PARAM_DRY_RUN) boolean isDryRun;
@Inject DeleteOldCommitLogsAction() {} @Inject DeleteOldCommitLogsAction() {}
@Override @Override
@ -91,7 +94,7 @@ public final class DeleteOldCommitLogsAction implements Runnable {
.setDefaultReduceShards(NUM_REDUCE_SHARDS) .setDefaultReduceShards(NUM_REDUCE_SHARDS)
.runMapreduce( .runMapreduce(
new DeleteOldCommitLogsMapper(), new DeleteOldCommitLogsMapper(),
new DeleteOldCommitLogsReducer(), new DeleteOldCommitLogsReducer(isDryRun),
ImmutableList.of( ImmutableList.of(
new CommitLogManifestInput(Optional.of(deletionThreshold)), new CommitLogManifestInput(Optional.of(deletionThreshold)),
EppResourceInputs.createEntityInput(EppResource.class))))); EppResourceInputs.createEntityInput(EppResource.class)))));
@ -143,7 +146,13 @@ public final class DeleteOldCommitLogsAction implements Runnable {
private static class DeleteOldCommitLogsReducer private static class DeleteOldCommitLogsReducer
extends Reducer<Key<CommitLogManifest>, Boolean, Void> { extends Reducer<Key<CommitLogManifest>, Boolean, Void> {
private static final long serialVersionUID = 6652129589918923333L; private static final long serialVersionUID = -5122986392078633220L;
private final boolean isDryRun;
DeleteOldCommitLogsReducer(boolean isDryRun) {
this.isDryRun = isDryRun;
}
@Override @Override
public void reduce( public void reduce(
@ -165,7 +174,11 @@ public final class DeleteOldCommitLogsAction implements Runnable {
.addAll(commitLogMutationKeys) .addAll(commitLogMutationKeys)
.add(manifestKey) .add(manifestKey)
.build(); .build();
ofy().deleteWithoutBackup().keys(keysToDelete); // Normally in a dry run we would log the entities that would be deleted, but those can
// number in the millions so we skip the logging.
if (!isDryRun) {
ofy().deleteWithoutBackup().keys(keysToDelete);
}
return keysToDelete.size(); return keysToDelete.size();
} }
}); });