Skip to content

Commit

Permalink
SONAR-11266 Replace submitterUuid with submitterLogin in CE logs (#775)
Browse files Browse the repository at this point in the history
  • Loading branch information
benoit-sns authored and sonartech committed Oct 10, 2018
1 parent 357067b commit 12d3289
Show file tree
Hide file tree
Showing 9 changed files with 288 additions and 77 deletions.
Expand Up @@ -33,6 +33,7 @@
import java.util.function.Predicate; import java.util.function.Predicate;
import java.util.stream.Collectors; import java.util.stream.Collectors;
import java.util.stream.Stream; import java.util.stream.Stream;
import javax.annotation.CheckForNull;
import javax.annotation.Nullable; import javax.annotation.Nullable;
import org.sonar.api.server.ServerSide; import org.sonar.api.server.ServerSide;
import org.sonar.api.utils.log.Loggers; import org.sonar.api.utils.log.Loggers;
Expand All @@ -46,6 +47,7 @@
import org.sonar.db.ce.CeTaskCharacteristicDto; import org.sonar.db.ce.CeTaskCharacteristicDto;
import org.sonar.db.ce.DeleteIf; import org.sonar.db.ce.DeleteIf;
import org.sonar.db.component.ComponentDto; import org.sonar.db.component.ComponentDto;
import org.sonar.db.user.UserDto;
import org.sonar.server.organization.DefaultOrganizationProvider; import org.sonar.server.organization.DefaultOrganizationProvider;
import org.sonar.server.property.InternalProperties; import org.sonar.server.property.InternalProperties;


Expand Down Expand Up @@ -100,10 +102,10 @@ private Optional<CeTask> submit(CeTaskSubmit submission, EnumSet<SubmitOption> s


Map<String, ComponentDto> componentsByUuid = loadComponentDtos(dbSession, taskDto); Map<String, ComponentDto> componentsByUuid = loadComponentDtos(dbSession, taskDto);
if (componentsByUuid.isEmpty()) { if (componentsByUuid.isEmpty()) {
return of(convertToTask(taskDto, submission.getCharacteristics(), null, null)); return of(convertToTask(dbSession, taskDto, submission.getCharacteristics(), null, null));
} }


return of(convertToTask(taskDto, submission.getCharacteristics(), return of(convertToTask(dbSession, taskDto, submission.getCharacteristics(),
ofNullable(taskDto.getComponentUuid()).map(componentsByUuid::get).orElse(null), ofNullable(taskDto.getComponentUuid()).map(componentsByUuid::get).orElse(null),
ofNullable(taskDto.getMainComponentUuid()).map(componentsByUuid::get).orElse(null))); ofNullable(taskDto.getMainComponentUuid()).map(componentsByUuid::get).orElse(null)));
} }
Expand Down Expand Up @@ -227,7 +229,7 @@ private List<CeTask> loadTasks(DbSession dbSession, List<CeQueueDto> dtos) {
.orElse(null); .orElse(null);
Map<String, String> characteristics = characteristicsByTaskUuid.get(dto.getUuid()).stream() Map<String, String> characteristics = characteristicsByTaskUuid.get(dto.getUuid()).stream()
.collect(uniqueIndex(CeTaskCharacteristicDto::getKey, CeTaskCharacteristicDto::getValue)); .collect(uniqueIndex(CeTaskCharacteristicDto::getKey, CeTaskCharacteristicDto::getValue));
result.add(convertToTask(dto, characteristics, component, mainComponent)); result.add(convertToTask(dbSession, dto, characteristics, component, mainComponent));
} }
return result; return result;
} }
Expand Down Expand Up @@ -311,12 +313,13 @@ public WorkersPauseStatus getWorkersPauseStatus() {
} }
} }


CeTask convertToTask(CeQueueDto taskDto, Map<String, String> characteristics, @Nullable ComponentDto component, @Nullable ComponentDto mainComponent) { CeTask convertToTask(DbSession dbSession, CeQueueDto taskDto, Map<String, String> characteristics, @Nullable ComponentDto component, @Nullable ComponentDto mainComponent) {
CeTask.Builder builder = new CeTask.Builder() CeTask.Builder builder = new CeTask.Builder()
.setUuid(taskDto.getUuid()) .setUuid(taskDto.getUuid())
.setType(taskDto.getTaskType()) .setType(taskDto.getTaskType())
.setSubmitterUuid(taskDto.getSubmitterUuid()) .setCharacteristics(characteristics)
.setCharacteristics(characteristics); .setSubmitter(resolveSubmitter(dbSession, taskDto.getSubmitterUuid()));



String componentUuid = taskDto.getComponentUuid(); String componentUuid = taskDto.getComponentUuid();
if (component != null) { if (component != null) {
Expand All @@ -341,4 +344,17 @@ CeTask convertToTask(CeQueueDto taskDto, Map<String, String> characteristics, @N
return builder.build(); return builder.build();
} }


@CheckForNull
private CeTask.User resolveSubmitter(DbSession dbSession, @Nullable String submitterUuid) {
if (submitterUuid == null) {
return null;
}
UserDto submitterDto = dbClient.userDao().selectByUuid(dbSession, submitterUuid);
if (submitterDto != null) {
return new CeTask.User(submitterUuid, submitterDto.getLogin());
} else {
return new CeTask.User(submitterUuid, null);
}
}

} }
Expand Up @@ -42,6 +42,8 @@
import org.sonar.db.ce.CeTaskTypes; import org.sonar.db.ce.CeTaskTypes;
import org.sonar.db.component.ComponentDto; import org.sonar.db.component.ComponentDto;
import org.sonar.db.component.ComponentTesting; import org.sonar.db.component.ComponentTesting;
import org.sonar.db.user.UserDto;
import org.sonar.db.user.UserTesting;
import org.sonar.server.organization.DefaultOrganizationProvider; import org.sonar.server.organization.DefaultOrganizationProvider;
import org.sonar.server.organization.TestDefaultOrganizationProvider; import org.sonar.server.organization.TestDefaultOrganizationProvider;


Expand Down Expand Up @@ -77,10 +79,11 @@ public void submit_returns_task_populated_from_CeTaskSubmit_and_creates_CeQueue_
String componentUuid = randomAlphabetic(3); String componentUuid = randomAlphabetic(3);
String mainComponentUuid = randomAlphabetic(4); String mainComponentUuid = randomAlphabetic(4);
CeTaskSubmit taskSubmit = createTaskSubmit(CeTaskTypes.REPORT, new Component(componentUuid, mainComponentUuid), "submitter uuid"); CeTaskSubmit taskSubmit = createTaskSubmit(CeTaskTypes.REPORT, new Component(componentUuid, mainComponentUuid), "submitter uuid");
UserDto userDto = db.getDbClient().userDao().selectByUuid(db.getSession(), taskSubmit.getSubmitterUuid());


CeTask task = underTest.submit(taskSubmit); CeTask task = underTest.submit(taskSubmit);


verifyCeTask(taskSubmit, task, null); verifyCeTask(taskSubmit, task, null, userDto);
verifyCeQueueDtoForTaskSubmit(taskSubmit); verifyCeQueueDtoForTaskSubmit(taskSubmit);
} }


Expand All @@ -91,7 +94,7 @@ public void submit_populates_component_name_and_key_of_CeTask_if_component_exist


CeTask task = underTest.submit(taskSubmit); CeTask task = underTest.submit(taskSubmit);


verifyCeTask(taskSubmit, task, componentDto); verifyCeTask(taskSubmit, task, componentDto, null);
} }


@Test @Test
Expand All @@ -100,7 +103,17 @@ public void submit_returns_task_without_component_info_when_submit_has_none() {


CeTask task = underTest.submit(taskSubmit); CeTask task = underTest.submit(taskSubmit);


verifyCeTask(taskSubmit, task, null); verifyCeTask(taskSubmit, task, null, null);
}

@Test
public void submit_populates_submitter_login_of_CeTask_if_submitter_exists() {
UserDto userDto = insertUser(UserTesting.newUserDto());
CeTaskSubmit taskSubmit = createTaskSubmit(CeTaskTypes.REPORT, null, userDto.getUuid());

CeTask task = underTest.submit(taskSubmit);

verifyCeTask(taskSubmit, task, null, userDto);
} }


@Test @Test
Expand Down Expand Up @@ -198,12 +211,14 @@ public void massSubmit_returns_tasks_for_each_CeTaskSubmit_populated_from_CeTask
String mainComponentUuid = randomAlphabetic(10); String mainComponentUuid = randomAlphabetic(10);
CeTaskSubmit taskSubmit1 = createTaskSubmit(CeTaskTypes.REPORT, newComponent(mainComponentUuid), "submitter uuid"); CeTaskSubmit taskSubmit1 = createTaskSubmit(CeTaskTypes.REPORT, newComponent(mainComponentUuid), "submitter uuid");
CeTaskSubmit taskSubmit2 = createTaskSubmit("some type"); CeTaskSubmit taskSubmit2 = createTaskSubmit("some type");
UserDto userDto1 = db.getDbClient().userDao().selectByUuid(db.getSession(), taskSubmit1.getSubmitterUuid());



List<CeTask> tasks = underTest.massSubmit(asList(taskSubmit1, taskSubmit2)); List<CeTask> tasks = underTest.massSubmit(asList(taskSubmit1, taskSubmit2));


assertThat(tasks).hasSize(2); assertThat(tasks).hasSize(2);
verifyCeTask(taskSubmit1, tasks.get(0), null); verifyCeTask(taskSubmit1, tasks.get(0), null, userDto1);
verifyCeTask(taskSubmit2, tasks.get(1), null); verifyCeTask(taskSubmit2, tasks.get(1), null, null);
verifyCeQueueDtoForTaskSubmit(taskSubmit1); verifyCeQueueDtoForTaskSubmit(taskSubmit1);
verifyCeQueueDtoForTaskSubmit(taskSubmit2); verifyCeQueueDtoForTaskSubmit(taskSubmit2);
} }
Expand All @@ -217,8 +232,8 @@ public void massSubmit_populates_component_name_and_key_of_CeTask_if_project_exi
List<CeTask> tasks = underTest.massSubmit(asList(taskSubmit1, taskSubmit2)); List<CeTask> tasks = underTest.massSubmit(asList(taskSubmit1, taskSubmit2));


assertThat(tasks).hasSize(2); assertThat(tasks).hasSize(2);
verifyCeTask(taskSubmit1, tasks.get(0), componentDto1); verifyCeTask(taskSubmit1, tasks.get(0), componentDto1, null);
verifyCeTask(taskSubmit2, tasks.get(1), null); verifyCeTask(taskSubmit2, tasks.get(1), null, null);
} }


@Test @Test
Expand All @@ -232,8 +247,8 @@ public void massSubmit_populates_component_name_and_key_of_CeTask_if_project_and
List<CeTask> tasks = underTest.massSubmit(asList(taskSubmit1, taskSubmit2)); List<CeTask> tasks = underTest.massSubmit(asList(taskSubmit1, taskSubmit2));


assertThat(tasks).hasSize(2); assertThat(tasks).hasSize(2);
verifyCeTask(taskSubmit1, tasks.get(0), branch1, project); verifyCeTask(taskSubmit1, tasks.get(0), branch1, project, null);
verifyCeTask(taskSubmit2, tasks.get(1), branch2, project); verifyCeTask(taskSubmit2, tasks.get(1), branch2, project, null);
} }


@Test @Test
Expand Down Expand Up @@ -461,11 +476,12 @@ public void resumeWorkers_resumes_paused_workers() {
assertThat(underTest.getWorkersPauseStatus()).isEqualTo(CeQueue.WorkersPauseStatus.RESUMED); assertThat(underTest.getWorkersPauseStatus()).isEqualTo(CeQueue.WorkersPauseStatus.RESUMED);
} }


private void verifyCeTask(CeTaskSubmit taskSubmit, CeTask task, @Nullable ComponentDto componentDto) {
verifyCeTask(taskSubmit, task, componentDto, componentDto); private void verifyCeTask(CeTaskSubmit taskSubmit, CeTask task, @Nullable ComponentDto componentDto, UserDto userDto) {
verifyCeTask(taskSubmit, task, componentDto, componentDto, userDto);
} }


private void verifyCeTask(CeTaskSubmit taskSubmit, CeTask task, @Nullable ComponentDto componentDto, @Nullable ComponentDto mainComponentDto) { private void verifyCeTask(CeTaskSubmit taskSubmit, CeTask task, @Nullable ComponentDto componentDto, @Nullable ComponentDto mainComponentDto, @Nullable UserDto userDto) {
if (componentDto == null) { if (componentDto == null) {
assertThat(task.getOrganizationUuid()).isEqualTo(defaultOrganizationProvider.get().getUuid()); assertThat(task.getOrganizationUuid()).isEqualTo(defaultOrganizationProvider.get().getUuid());
} else { } else {
Expand Down Expand Up @@ -493,7 +509,15 @@ private void verifyCeTask(CeTaskSubmit taskSubmit, CeTask task, @Nullable Compon
assertThat(task.getMainComponent()).isEmpty(); assertThat(task.getMainComponent()).isEmpty();
} }
assertThat(task.getType()).isEqualTo(taskSubmit.getType()); assertThat(task.getType()).isEqualTo(taskSubmit.getType());
assertThat(task.getSubmitterUuid()).isEqualTo(taskSubmit.getSubmitterUuid()); if (taskSubmit.getSubmitterUuid() != null) {
if (userDto == null) {
assertThat(task.getSubmitter().getUuid()).isEqualTo(taskSubmit.getSubmitterUuid());
assertThat(task.getSubmitter().getLogin()).isNull();
} else {
assertThat(task.getSubmitter().getUuid()).isEqualTo(userDto.getUuid()).isEqualTo(taskSubmit.getSubmitterUuid());
assertThat(task.getSubmitter().getLogin()).isEqualTo(userDto.getLogin());
}
}
} }


private void verifyCeQueueDtoForTaskSubmit(CeTaskSubmit taskSubmit) { private void verifyCeQueueDtoForTaskSubmit(CeTaskSubmit taskSubmit) {
Expand Down Expand Up @@ -535,6 +559,12 @@ private ComponentDto insertComponent(ComponentDto componentDto) {
return componentDto; return componentDto;
} }


private UserDto insertUser(UserDto userDto) {
db.getDbClient().userDao().insert(session, userDto);
session.commit();
return userDto;
}

private CeQueueDto insertPendingInQueue(@Nullable Component component) { private CeQueueDto insertPendingInQueue(@Nullable Component component) {
CeQueueDto dto = new CeQueueDto() CeQueueDto dto = new CeQueueDto()
.setUuid(UuidFactoryFast.getInstance().create()) .setUuid(UuidFactoryFast.getInstance().create())
Expand Down
61 changes: 53 additions & 8 deletions server/sonar-ce-task/src/main/java/org/sonar/ce/task/CeTask.java
Expand Up @@ -42,7 +42,7 @@ public class CeTask {
private final String uuid; private final String uuid;
private final Component component; private final Component component;
private final Component mainComponent; private final Component mainComponent;
private final String submitterUuid; private final User submitter;
private final Map<String, String> characteristics; private final Map<String, String> characteristics;


private CeTask(Builder builder) { private CeTask(Builder builder) {
Expand All @@ -53,14 +53,59 @@ private CeTask(Builder builder) {
"None or both component and main component must be non null"); "None or both component and main component must be non null");
this.component = builder.component; this.component = builder.component;
this.mainComponent = builder.mainComponent; this.mainComponent = builder.mainComponent;
this.submitterUuid = emptyToNull(builder.submitterUuid); this.submitter = builder.submitter;
if (builder.characteristics == null) { if (builder.characteristics == null) {
this.characteristics = emptyMap(); this.characteristics = emptyMap();
} else { } else {
this.characteristics = unmodifiableMap(new HashMap<>(builder.characteristics)); this.characteristics = unmodifiableMap(new HashMap<>(builder.characteristics));
} }
} }


@Immutable
public static final class User {
private final String uuid;
private final String login;

public User(String uuid, @Nullable String login) {
this.uuid = requireNonNull(uuid);
this.login = emptyToNull(login);
}

public String getUuid() {
return uuid;
}

@CheckForNull
public String getLogin() {
return login;
}

@Override
public boolean equals(Object o) {
if (this == o) {
return true;
}
if (o == null || getClass() != o.getClass()) {
return false;
}
User other = (User) o;
return uuid.equals(other.uuid);
}

@Override
public String toString() {
return "User{" +
"uuid='" + uuid + '\'' +
", login='" + login + '\'' +
'}';
}

@Override
public int hashCode() {
return uuid.hashCode();
}
}

public String getOrganizationUuid() { public String getOrganizationUuid() {
return organizationUuid; return organizationUuid;
} }
Expand All @@ -82,8 +127,8 @@ public Optional<Component> getMainComponent() {
} }


@CheckForNull @CheckForNull
public String getSubmitterUuid() { public User getSubmitter() {
return submitterUuid; return submitter;
} }


public Map<String, String> getCharacteristics() { public Map<String, String> getCharacteristics() {
Expand All @@ -98,7 +143,7 @@ public String toString() {
.add("uuid", uuid) .add("uuid", uuid)
.add("component", component) .add("component", component)
.add("mainComponent", mainComponent) .add("mainComponent", mainComponent)
.add("submitterUuid", submitterUuid) .add("submitter", submitter)
.toString(); .toString();
} }


Expand All @@ -125,7 +170,7 @@ public static final class Builder {
private String type; private String type;
private Component component; private Component component;
private Component mainComponent; private Component mainComponent;
private String submitterUuid; private User submitter;
private Map<String, String> characteristics; private Map<String, String> characteristics;


public Builder setOrganizationUuid(String organizationUuid) { public Builder setOrganizationUuid(String organizationUuid) {
Expand Down Expand Up @@ -158,8 +203,8 @@ public Builder setMainComponent(@Nullable Component mainComponent) {
return this; return this;
} }


public Builder setSubmitterUuid(@Nullable String s) { public Builder setSubmitter(@Nullable User s) {
this.submitterUuid = s; this.submitter = s;
return this; return this;
} }


Expand Down

0 comments on commit 12d3289

Please sign in to comment.