Skip to content

Commit 3309560

Browse files
authored
Merge pull request #146 from mcanoy/dry-run
support migration dry run
2 parents ccbde2b + 718585a commit 3309560

File tree

5 files changed

+36
-14
lines changed

5 files changed

+36
-14
lines changed

src/main/java/com/redhat/labs/lodestar/resource/MigrationResource.java

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
import org.slf4j.LoggerFactory;
1717

1818
import java.util.List;
19+
import java.util.Map;
1920

2021
@Path("/api/migrate")
2122
@Tag(name = "Migration", description = "Migration services")
@@ -34,17 +35,18 @@ public Response migrate(@QueryParam(value = "participants") boolean migrateParti
3435
@QueryParam("hosting") boolean migrateHosting,
3536
@QueryParam("engagements") boolean migrateEngagements,
3637
@QueryParam("overwrite") boolean overwrite,
38+
@QueryParam("dryRun") boolean dryRun,
3739
@QueryParam("uuids") List<String> uuids) {
3840

3941
try {
40-
migrationService.migrate(migrateUuids, migrateParticipants, migrateArtifacts, migrateHosting, migrateEngagements,
41-
overwrite, uuids);
42+
LOGGER.debug("migration uuid {} participants {} artifacts {} hosting {} engagements {} overwrite {} dry run {} uuids {}",
43+
migrateUuids, migrateParticipants, migrateArtifacts, migrateHosting, migrateEngagements, overwrite, dryRun, uuids.size());
44+
Map<String, String> failures = migrationService.migrate(migrateUuids, migrateParticipants, migrateArtifacts, migrateHosting, migrateEngagements,
45+
overwrite, dryRun, uuids);
46+
return Response.ok(failures).build();
4247
} catch (Exception ex) {
4348
LOGGER.error("Migration did not complete successfully", ex);
4449
return Response.status(Response.Status.BAD_REQUEST).entity("{ \"message\": \"Migration did not complete successfully\"}").build();
4550
}
46-
47-
return Response.ok().build();
48-
4951
}
5052
}

src/main/java/com/redhat/labs/lodestar/service/EngagementService.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -302,6 +302,8 @@ public Engagement getEngagement(String customerName, String engagementName, bool
302302

303303
if (project.isPresent()) {
304304
engagement = getEngagement(project.get(), includeStatus, true).orElse(null);
305+
} else {
306+
LOGGER.warn("Could not find project for {} {}", customerName, engagementName);
305307
}
306308

307309
return engagement;
@@ -312,6 +314,7 @@ public Optional<Engagement> getEngagement(Project project, boolean includeStatus
312314

313315
Optional<File> engagementFile = fileService.getFileAllow404(project.getId(), ENGAGEMENT_FILE);
314316
if (engagementFile.isPresent()) {
317+
LOGGER.debug("Translating json from project {}", project.getId());
315318
engagement = json.fromJson(engagementFile.get().getContent(), Engagement.class);
316319

317320
if (includeCommits) {

src/main/java/com/redhat/labs/lodestar/service/FileService.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -137,6 +137,7 @@ public Optional<File> getFile(String projectIdOrPath, String filePath, String re
137137
try {
138138

139139
// get file
140+
LOGGER.debug("File ({})-> {}", projectIdOrPath, filePath);
140141
File file = gitLabService.getFile(projectIdOrPath, filePath, ref);
141142

142143
if (null != file) {
@@ -150,6 +151,8 @@ public Optional<File> getFile(String projectIdOrPath, String filePath, String re
150151
LOGGER.error("Get file {} for project {} failed with code {}", filePath, projectIdOrPath, wae.getResponse().getStatus());
151152
throw wae;
152153
}
154+
} catch(Exception ex) {
155+
LOGGER.error(String.format("Get file %s for project %s failed", filePath, projectIdOrPath), ex);
153156
}
154157

155158
return optional;

src/main/java/com/redhat/labs/lodestar/service/MigrationService.java

Lines changed: 21 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -60,8 +60,8 @@ public class MigrationService {
6060
* The migration is idempotent so no harm in rerunning. It will only update
6161
* engagements that haven't been migrated.
6262
*/
63-
public void migrate(boolean migrateUuids, boolean migrateParticipants, boolean migrateArtifacts, boolean migrateHosting,
64-
boolean migrateEngagements, boolean overwrite, List<String> uuids) {
63+
public Map<String, String> migrate(boolean migrateUuids, boolean migrateParticipants, boolean migrateArtifacts, boolean migrateHosting,
64+
boolean migrateEngagements, boolean overwrite, boolean dryRun, List<String> uuids) {
6565
LOGGER.debug("uuids {} participants {} artifacts {} hosting {} engagements {} overwrite {} uuid {}", migrateUuids,
6666
migrateParticipants, migrateArtifacts, migrateHosting, migrateEngagements, overwrite, uuids.size());
6767

@@ -78,13 +78,14 @@ public void migrate(boolean migrateUuids, boolean migrateParticipants, boolean m
7878
}
7979

8080
LOGGER.info("Start Migrate content");
81-
migrateAll(migrateParticipants, migrateArtifacts, migrateHosting, migrateEngagements, overwrite, uuids);
81+
Map<String, String> failures = migrateAll(migrateParticipants, migrateArtifacts, migrateHosting, migrateEngagements, overwrite, dryRun, uuids);
8282
LOGGER.info("End Migrate content");
83-
83+
return failures;
8484
}
8585

86-
private void migrateAll(boolean migrateParticipants, boolean migrateArtifacts, boolean migrateHosting,
87-
boolean migrateEngagements, boolean overwrite, List<String> uuids ) {
86+
private Map<String, String> migrateAll(boolean migrateParticipants, boolean migrateArtifacts, boolean migrateHosting,
87+
boolean migrateEngagements, boolean overwrite, boolean dryRun, List<String> uuids ) {
88+
Map<String, String> failures = new HashMap<>();
8889
int counter = 0;
8990
LOGGER.debug("Migration engagement count {}", getAllEngagements().size());
9091
for(Engagement e : getAllEngagements().values()) {
@@ -123,10 +124,23 @@ private void migrateAll(boolean migrateParticipants, boolean migrateArtifacts, b
123124
CommitMultiple commit = CommitMultiple.builder().id(e.getProjectId()).branch(commitBranch).commitMessage(commitMessage).actions(actions)
124125
.authorName(commitAuthor).authorEmail(commitEmail).build();
125126

126-
fileService.createFiles(e.getProjectId(), commit);
127+
if(dryRun) {
128+
LOGGER.info("Will not migrate due to dry run {}", e.getUuid());
129+
} else {
130+
LOGGER.info("Migrating create or update {}", e.getUuid());
131+
try {
132+
fileService.createFiles(e.getProjectId(), commit);
133+
LOGGER.info("Migration complete for {}", e.getUuid());
134+
} catch(Exception ex) {
135+
LOGGER.error(String.format("Error migrating %s", e.getUuid()), ex);
136+
failures.put(e.getUuid(), ex.getMessage());
137+
}
138+
}
127139
}
128140
}
129141
}
142+
143+
return failures;
130144
}
131145

132146
/**

src/test/java/com/redhat/labs/lodestar/service/MigrationServiceTest.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -92,12 +92,12 @@ public static void setup() {
9292
@Test
9393
void migrate() {
9494
migrationService.migrate(false, false, false, false, false,
95-
false, Collections.emptyList());
95+
false, false, Collections.emptyList());
9696

9797
Mockito.verify(projectServiceMock, Mockito.never()).updateProject(Mockito.any());
9898
Mockito.verify(fileServiceMock, Mockito.never()).createFile(Mockito.anyInt(), Mockito.eq("engagement/participants.json"), Mockito.any(File.class));
9999

100-
migrationService.migrate(true, true, true, true, true, false, Collections.emptyList());
100+
migrationService.migrate(true, true, true, true, true, false, false, Collections.emptyList());
101101

102102
Mockito.verify(projectServiceMock, Mockito.times(2)).updateProject(Mockito.any());
103103
Mockito.verify(fileServiceMock, Mockito.times(3)).createFiles(Mockito.anyInt(), Mockito.any(CommitMultiple.class));

0 commit comments

Comments
 (0)