diff options
Diffstat (limited to 'server/sonar-server-common')
3 files changed, 27 insertions, 52 deletions
diff --git a/server/sonar-server-common/src/main/java/org/sonar/server/user/index/UserDoc.java b/server/sonar-server-common/src/main/java/org/sonar/server/user/index/UserDoc.java index 8b81ee0e363..6ed3cc26b23 100644 --- a/server/sonar-server-common/src/main/java/org/sonar/server/user/index/UserDoc.java +++ b/server/sonar-server-common/src/main/java/org/sonar/server/user/index/UserDoc.java @@ -102,6 +102,8 @@ public class UserDoc extends BaseDoc { return this; } + // TODO remove + @Deprecated public UserDoc setOrganizationUuids(@Nullable List<String> organizationUuids) { setField(FIELD_ORGANIZATION_UUIDS, organizationUuids); return this; diff --git a/server/sonar-server-common/src/main/java/org/sonar/server/user/index/UserIndexer.java b/server/sonar-server-common/src/main/java/org/sonar/server/user/index/UserIndexer.java index 054b9ccc3d9..0be11278ba0 100644 --- a/server/sonar-server-common/src/main/java/org/sonar/server/user/index/UserIndexer.java +++ b/server/sonar-server-common/src/main/java/org/sonar/server/user/index/UserIndexer.java @@ -19,12 +19,11 @@ */ package org.sonar.server.user.index; -import com.google.common.collect.ArrayListMultimap; import com.google.common.collect.ImmutableSet; -import com.google.common.collect.ListMultimap; import com.google.common.collect.Maps; import java.util.Collection; import java.util.List; +import java.util.Optional; import java.util.Set; import org.elasticsearch.action.index.IndexRequest; import org.sonar.core.util.stream.MoreCollectors; @@ -41,6 +40,7 @@ import org.sonar.server.es.IndexingResult; import org.sonar.server.es.OneToOneResilientIndexingListener; import org.sonar.server.es.ResilientIndexer; +import static com.google.common.base.Preconditions.checkState; import static java.util.Collections.singletonList; import static org.sonar.core.util.stream.MoreCollectors.toHashSet; import static org.sonar.core.util.stream.MoreCollectors.toList; @@ -72,15 +72,17 @@ public class UserIndexer implements ResilientIndexer { private void indexAll(Size bulkSize) { try (DbSession dbSession = dbClient.openSession(false)) { - ListMultimap<String, String> organizationUuidsByUserUuid = ArrayListMultimap.create(); - dbClient.organizationMemberDao().selectAllForUserIndexing(dbSession, organizationUuidsByUserUuid::put); - BulkIndexer bulkIndexer = newBulkIndexer(bulkSize, IndexingListener.FAIL_ON_ERROR); bulkIndexer.start(); + + // TODO remove this after removing the need for organization uuids in the user index + Optional<String> defaultOrgUuid = dbClient.internalPropertiesDao().selectByKey(dbSession, "organization.default"); + checkState(defaultOrgUuid.isPresent() && !defaultOrgUuid.get().isEmpty(), "No Default organization uuid configured"); + dbClient.userDao().scrollAll(dbSession, // only index requests, no deletion requests. // Deactivated users are not deleted but updated. - u -> bulkIndexer.add(newIndexRequest(u, organizationUuidsByUserUuid))); + u -> bulkIndexer.add(newIndexRequest(u, defaultOrgUuid.get()))); bulkIndexer.stop(); } } @@ -121,17 +123,19 @@ public class UserIndexer implements ResilientIndexer { .map(EsQueueDto::getDocId) .collect(toHashSet(items.size())); - ListMultimap<String, String> organizationUuidsByUserUuid = ArrayListMultimap.create(); - dbClient.organizationMemberDao().selectForUserIndexing(dbSession, uuids, organizationUuidsByUserUuid::put); - BulkIndexer bulkIndexer = newBulkIndexer(Size.REGULAR, new OneToOneResilientIndexingListener(dbClient, dbSession, items)); bulkIndexer.start(); + + // TODO remove this after removing the need for organization uuids in the user index + Optional<String> defaultOrgUuid = dbClient.internalPropertiesDao().selectByKey(dbSession, "organization.default"); + checkState(defaultOrgUuid.isPresent() && !defaultOrgUuid.get().isEmpty(), "No Default organization uuid configured"); + dbClient.userDao().scrollByUuids(dbSession, uuids, // only index requests, no deletion requests. // Deactivated users are not deleted but updated. u -> { uuids.remove(u.getUuid()); - bulkIndexer.add(newIndexRequest(u, organizationUuidsByUserUuid)); + bulkIndexer.add(newIndexRequest(u, defaultOrgUuid.get())); }); // the remaining uuids reference rows that don't exist in db. They must @@ -144,7 +148,8 @@ public class UserIndexer implements ResilientIndexer { return new BulkIndexer(esClient, TYPE_USER, bulkSize, listener); } - private static IndexRequest newIndexRequest(UserDto user, ListMultimap<String, String> organizationUuidsByUserUuid) { + // TODO remove defaultOrg method param and dto.setOrganizationUuids call + private static IndexRequest newIndexRequest(UserDto user, String defaultOrgUuid) { UserDoc doc = new UserDoc(Maps.newHashMapWithExpectedSize(8)); // all the keys must be present, even if value is null doc.setUuid(user.getUuid()); @@ -153,7 +158,7 @@ public class UserIndexer implements ResilientIndexer { doc.setEmail(user.getEmail()); doc.setActive(user.isActive()); doc.setScmAccounts(UserDto.decodeScmAccounts(user.getScmAccounts())); - doc.setOrganizationUuids(organizationUuidsByUserUuid.get(user.getUuid())); + doc.setOrganizationUuids(singletonList(defaultOrgUuid)); return doc.toIndexRequest(); } diff --git a/server/sonar-server-common/src/test/java/org/sonar/server/user/index/UserIndexerTest.java b/server/sonar-server-common/src/test/java/org/sonar/server/user/index/UserIndexerTest.java index 79c347017b4..b9f4a4cbbc0 100644 --- a/server/sonar-server-common/src/test/java/org/sonar/server/user/index/UserIndexerTest.java +++ b/server/sonar-server-common/src/test/java/org/sonar/server/user/index/UserIndexerTest.java @@ -25,7 +25,6 @@ import org.junit.Rule; import org.junit.Test; import org.sonar.api.utils.System2; import org.sonar.db.DbTester; -import org.sonar.db.organization.OrganizationDto; import org.sonar.db.user.UserDto; import org.sonar.server.es.EsTester; @@ -37,7 +36,7 @@ import static org.sonar.server.user.index.UserIndexDefinition.TYPE_USER; public class UserIndexerTest { - private System2 system2 = System2.INSTANCE; + private final System2 system2 = System2.INSTANCE; @Rule public DbTester db = DbTester.create(system2); @@ -45,7 +44,7 @@ public class UserIndexerTest { @Rule public EsTester es = EsTester.create(); - private UserIndexer underTest = new UserIndexer(db.getDbClient(), es.client()); + private final UserIndexer underTest = new UserIndexer(db.getDbClient(), es.client()); @Test public void index_nothing_on_startup() { @@ -69,7 +68,7 @@ public class UserIndexerTest { assertThat(doc.email()).isEqualTo(user.getEmail()); assertThat(doc.active()).isEqualTo(user.isActive()); assertThat(doc.scmAccounts()).isEqualTo(user.getScmAccountsAsList()); - assertThat(doc.organizationUuids()).isEmpty(); + assertThat(doc.organizationUuids()).containsExactly(db.getDefaultOrganization().getUuid()); } @Test @@ -87,16 +86,12 @@ public class UserIndexerTest { assertThat(doc.email()).isEqualTo(user.getEmail()); assertThat(doc.active()).isEqualTo(user.isActive()); assertThat(doc.scmAccounts()).isEqualTo(user.getScmAccountsAsList()); - assertThat(doc.organizationUuids()).isEmpty(); + assertThat(doc.organizationUuids()).containsExactly(db.getDefaultOrganization().getUuid()); } @Test - public void indexOnStartup_adds_all_users_with_organizations() { - OrganizationDto organization1 = db.organizations().insert(); - OrganizationDto organization2 = db.organizations().insert(); + public void indexOnStartup_adds_all_users() { UserDto user = db.users().insertUser(); - db.organizations().addMember(organization1, user); - db.organizations().addMember(organization2, user); underTest.indexOnStartup(new HashSet<>()); @@ -105,7 +100,7 @@ public class UserIndexerTest { UserDoc doc = docs.get(0); assertThat(doc.uuid()).isEqualTo(user.getUuid()); assertThat(doc.login()).isEqualTo(user.getLogin()); - assertThat(doc.organizationUuids()).containsExactlyInAnyOrder(organization1.getUuid(), organization2.getUuid()); + assertThat(doc.organizationUuids()).containsExactly(db.getDefaultOrganization().getUuid()); } @Test @@ -123,36 +118,9 @@ public class UserIndexerTest { } @Test - public void commitAndIndex_single_user_belonging_to_organizations() { - OrganizationDto organization1 = db.organizations().insert(); - OrganizationDto organization2 = db.organizations().insert(); - UserDto user = db.users().insertUser(); - db.organizations().addMember(organization1, user); - db.organizations().addMember(organization2, user); - UserDto anotherUser = db.users().insertUser(); - db.organizations().addMember(organization1, anotherUser); - - underTest.commitAndIndex(db.getSession(), user); - - List<UserDoc> docs = es.getDocuments(TYPE_USER, UserDoc.class); - assertThat(docs).hasSize(1); - - UserDoc userDoc = docs.get(0); - assertThat(userDoc.uuid()) - .isEqualTo(user.getUuid()); - - assertThat(userDoc.organizationUuids()) - .containsExactlyInAnyOrder(organization1.getUuid(), organization2.getUuid()); - } - - @Test public void commitAndIndex_multiple_users() { - OrganizationDto organization1 = db.organizations().insert(); UserDto user1 = db.users().insertUser(); - db.organizations().addMember(organization1, user1); - OrganizationDto organization2 = db.organizations().insert(); UserDto user2 = db.users().insertUser(); - db.organizations().addMember(organization2, user2); underTest.commitAndIndex(db.getSession(), asList(user1, user2)); @@ -160,8 +128,8 @@ public class UserIndexerTest { assertThat(docs) .extracting(UserDoc::login, UserDoc::organizationUuids) .containsExactlyInAnyOrder( - tuple(user1.getLogin(), singletonList(organization1.getUuid())), - tuple(user2.getLogin(), singletonList(organization2.getUuid()))); + tuple(user1.getLogin(), singletonList(db.getDefaultOrganization().getUuid())), + tuple(user2.getLogin(), singletonList(db.getDefaultOrganization().getUuid()))); assertThat(db.countRowsOfTable(db.getSession(), "users")).isEqualTo(2); } } |