Skip to content

Commit f53eed0

Browse files
committed
Inject PolarisAdminService into PolarisServiceImpl
`PolarisServiceImpl` already is a request-scoped bean. if we apply the same to `PolarisAdminService` we can simply inject it into `PolarisServiceImpl`.
1 parent d2bc708 commit f53eed0

File tree

4 files changed

+43
-106
lines changed

4 files changed

+43
-106
lines changed

runtime/service/src/main/java/org/apache/polaris/service/admin/PolarisAdminService.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,8 @@
2424
import com.google.common.base.Strings;
2525
import jakarta.annotation.Nonnull;
2626
import jakarta.annotation.Nullable;
27+
import jakarta.enterprise.context.RequestScoped;
28+
import jakarta.inject.Inject;
2729
import jakarta.validation.constraints.NotNull;
2830
import jakarta.ws.rs.core.SecurityContext;
2931
import java.util.ArrayList;
@@ -135,6 +137,7 @@
135137
* provide different implementations of PolarisEntityManager to abstract away the implementation of
136138
* the persistence layer.
137139
*/
140+
@RequestScoped
138141
public class PolarisAdminService {
139142
private static final Logger LOGGER = LoggerFactory.getLogger(PolarisAdminService.class);
140143

@@ -151,6 +154,7 @@ public class PolarisAdminService {
151154
// Initialized in the authorize methods.
152155
private PolarisResolutionManifest resolutionManifest = null;
153156

157+
@Inject
154158
public PolarisAdminService(
155159
@NotNull PolarisDiagnostics diagnostics,
156160
@NotNull CallContext callContext,

runtime/service/src/main/java/org/apache/polaris/service/admin/PolarisServiceImpl.java

Lines changed: 6 additions & 85 deletions
Original file line numberDiff line numberDiff line change
@@ -27,9 +27,7 @@
2727
import java.util.Locale;
2828
import org.apache.iceberg.catalog.Namespace;
2929
import org.apache.iceberg.catalog.TableIdentifier;
30-
import org.apache.iceberg.exceptions.NotAuthorizedException;
3130
import org.apache.iceberg.rest.responses.ErrorResponse;
32-
import org.apache.polaris.core.PolarisDiagnostics;
3331
import org.apache.polaris.core.admin.model.AddGrantRequest;
3432
import org.apache.polaris.core.admin.model.AuthenticationParameters;
3533
import org.apache.polaris.core.admin.model.AwsStorageConfigInfo;
@@ -64,24 +62,16 @@
6462
import org.apache.polaris.core.admin.model.UpdatePrincipalRequest;
6563
import org.apache.polaris.core.admin.model.UpdatePrincipalRoleRequest;
6664
import org.apache.polaris.core.admin.model.ViewGrant;
67-
import org.apache.polaris.core.auth.PolarisAuthorizer;
68-
import org.apache.polaris.core.auth.PolarisPrincipal;
6965
import org.apache.polaris.core.config.FeatureConfiguration;
7066
import org.apache.polaris.core.config.RealmConfig;
71-
import org.apache.polaris.core.context.CallContext;
7267
import org.apache.polaris.core.context.RealmContext;
7368
import org.apache.polaris.core.entity.CatalogEntity;
7469
import org.apache.polaris.core.entity.CatalogRoleEntity;
7570
import org.apache.polaris.core.entity.PolarisPrivilege;
7671
import org.apache.polaris.core.entity.PrincipalEntity;
7772
import org.apache.polaris.core.entity.PrincipalRoleEntity;
78-
import org.apache.polaris.core.persistence.MetaStoreManagerFactory;
79-
import org.apache.polaris.core.persistence.PolarisMetaStoreManager;
8073
import org.apache.polaris.core.persistence.dao.entity.BaseResult;
8174
import org.apache.polaris.core.persistence.dao.entity.PrivilegeResult;
82-
import org.apache.polaris.core.persistence.resolver.ResolutionManifestFactory;
83-
import org.apache.polaris.core.secrets.UserSecretsManager;
84-
import org.apache.polaris.core.secrets.UserSecretsManagerFactory;
8575
import org.apache.polaris.service.admin.api.PolarisCatalogsApiService;
8676
import org.apache.polaris.service.admin.api.PolarisPrincipalRolesApiService;
8777
import org.apache.polaris.service.admin.api.PolarisPrincipalsApiService;
@@ -99,57 +89,21 @@ public class PolarisServiceImpl
9989
PolarisPrincipalsApiService,
10090
PolarisPrincipalRolesApiService {
10191
private static final Logger LOGGER = LoggerFactory.getLogger(PolarisServiceImpl.class);
102-
private final PolarisDiagnostics diagnostics;
103-
private final ResolutionManifestFactory resolutionManifestFactory;
104-
private final PolarisAuthorizer polarisAuthorizer;
105-
private final MetaStoreManagerFactory metaStoreManagerFactory;
106-
private final UserSecretsManagerFactory userSecretsManagerFactory;
107-
private final CallContext callContext;
10892
private final RealmConfig realmConfig;
10993
private final ReservedProperties reservedProperties;
11094
private final PolarisEventListener polarisEventListener;
95+
private final PolarisAdminService adminService;
11196

11297
@Inject
11398
public PolarisServiceImpl(
114-
PolarisDiagnostics diagnostics,
115-
ResolutionManifestFactory resolutionManifestFactory,
116-
MetaStoreManagerFactory metaStoreManagerFactory,
117-
UserSecretsManagerFactory userSecretsManagerFactory,
118-
PolarisAuthorizer polarisAuthorizer,
119-
CallContext callContext,
99+
RealmConfig realmConfig,
120100
ReservedProperties reservedProperties,
121-
PolarisEventListener polarisEventListener) {
122-
this.diagnostics = diagnostics;
123-
this.resolutionManifestFactory = resolutionManifestFactory;
124-
this.metaStoreManagerFactory = metaStoreManagerFactory;
125-
this.userSecretsManagerFactory = userSecretsManagerFactory;
126-
this.polarisAuthorizer = polarisAuthorizer;
127-
this.callContext = callContext;
128-
this.realmConfig = callContext.getRealmConfig();
101+
PolarisEventListener polarisEventListener,
102+
PolarisAdminService adminService) {
103+
this.realmConfig = realmConfig;
129104
this.reservedProperties = reservedProperties;
130105
this.polarisEventListener = polarisEventListener;
131-
}
132-
133-
private PolarisAdminService newAdminService(
134-
RealmContext realmContext, SecurityContext securityContext) {
135-
PolarisPrincipal authenticatedPrincipal = (PolarisPrincipal) securityContext.getUserPrincipal();
136-
if (authenticatedPrincipal == null) {
137-
throw new NotAuthorizedException("Failed to find authenticatedPrincipal in SecurityContext");
138-
}
139-
140-
PolarisMetaStoreManager metaStoreManager =
141-
metaStoreManagerFactory.getOrCreateMetaStoreManager(realmContext);
142-
UserSecretsManager userSecretsManager =
143-
userSecretsManagerFactory.getOrCreateUserSecretsManager(realmContext);
144-
return new PolarisAdminService(
145-
diagnostics,
146-
callContext,
147-
resolutionManifestFactory,
148-
metaStoreManager,
149-
userSecretsManager,
150-
securityContext,
151-
polarisAuthorizer,
152-
reservedProperties);
106+
this.adminService = adminService;
153107
}
154108

155109
private static Response toResponse(BaseResult result, Response.Status successStatus) {
@@ -172,7 +126,6 @@ private static Response toResponse(BaseResult result, Response.Status successSta
172126
@Override
173127
public Response createCatalog(
174128
CreateCatalogRequest request, RealmContext realmContext, SecurityContext securityContext) {
175-
PolarisAdminService adminService = newAdminService(realmContext, securityContext);
176129
Catalog catalog = request.getCatalog();
177130
validateStorageConfig(catalog.getStorageConfigInfo());
178131
validateExternalCatalog(catalog);
@@ -259,7 +212,6 @@ private void validateAuthenticationParameters(AuthenticationParameters authentic
259212
@Override
260213
public Response deleteCatalog(
261214
String catalogName, RealmContext realmContext, SecurityContext securityContext) {
262-
PolarisAdminService adminService = newAdminService(realmContext, securityContext);
263215
adminService.deleteCatalog(catalogName);
264216
return Response.status(Response.Status.NO_CONTENT).build();
265217
}
@@ -268,7 +220,6 @@ public Response deleteCatalog(
268220
@Override
269221
public Response getCatalog(
270222
String catalogName, RealmContext realmContext, SecurityContext securityContext) {
271-
PolarisAdminService adminService = newAdminService(realmContext, securityContext);
272223
return Response.ok(adminService.getCatalog(catalogName).asCatalog()).build();
273224
}
274225

@@ -279,7 +230,6 @@ public Response updateCatalog(
279230
UpdateCatalogRequest updateRequest,
280231
RealmContext realmContext,
281232
SecurityContext securityContext) {
282-
PolarisAdminService adminService = newAdminService(realmContext, securityContext);
283233
if (updateRequest.getStorageConfigInfo() != null) {
284234
validateStorageConfig(updateRequest.getStorageConfigInfo());
285235
}
@@ -289,7 +239,6 @@ public Response updateCatalog(
289239
/** From PolarisCatalogsApiService */
290240
@Override
291241
public Response listCatalogs(RealmContext realmContext, SecurityContext securityContext) {
292-
PolarisAdminService adminService = newAdminService(realmContext, securityContext);
293242
List<Catalog> catalogList = adminService.listCatalogs();
294243
Catalogs catalogs = new Catalogs(catalogList);
295244
LOGGER.debug("listCatalogs returning: {}", catalogs);
@@ -300,7 +249,6 @@ public Response listCatalogs(RealmContext realmContext, SecurityContext security
300249
@Override
301250
public Response createPrincipal(
302251
CreatePrincipalRequest request, RealmContext realmContext, SecurityContext securityContext) {
303-
PolarisAdminService adminService = newAdminService(realmContext, securityContext);
304252
PrincipalEntity principal =
305253
new PrincipalEntity.Builder()
306254
.setName(request.getPrincipal().getName())
@@ -334,7 +282,6 @@ public Response resetCredentials(
334282
if (safeResetPrincipalRequest.getClientSecret() != null) {
335283
validateClientSecret(safeResetPrincipalRequest.getClientSecret());
336284
}
337-
PolarisAdminService adminService = newAdminService(realmContext, securityContext);
338285
return Response.ok(adminService.resetCredentials(principalName, safeResetPrincipalRequest))
339286
.build();
340287
}
@@ -343,7 +290,6 @@ public Response resetCredentials(
343290
@Override
344291
public Response deletePrincipal(
345292
String principalName, RealmContext realmContext, SecurityContext securityContext) {
346-
PolarisAdminService adminService = newAdminService(realmContext, securityContext);
347293
adminService.deletePrincipal(principalName);
348294
return Response.status(Response.Status.NO_CONTENT).build();
349295
}
@@ -352,7 +298,6 @@ public Response deletePrincipal(
352298
@Override
353299
public Response getPrincipal(
354300
String principalName, RealmContext realmContext, SecurityContext securityContext) {
355-
PolarisAdminService adminService = newAdminService(realmContext, securityContext);
356301
return Response.ok(adminService.getPrincipal(principalName).asPrincipal()).build();
357302
}
358303

@@ -363,7 +308,6 @@ public Response updatePrincipal(
363308
UpdatePrincipalRequest updateRequest,
364309
RealmContext realmContext,
365310
SecurityContext securityContext) {
366-
PolarisAdminService adminService = newAdminService(realmContext, securityContext);
367311
return Response.ok(adminService.updatePrincipal(principalName, updateRequest).asPrincipal())
368312
.build();
369313
}
@@ -372,14 +316,12 @@ public Response updatePrincipal(
372316
@Override
373317
public Response rotateCredentials(
374318
String principalName, RealmContext realmContext, SecurityContext securityContext) {
375-
PolarisAdminService adminService = newAdminService(realmContext, securityContext);
376319
return Response.ok(adminService.rotateCredentials(principalName)).build();
377320
}
378321

379322
/** From PolarisPrincipalsApiService */
380323
@Override
381324
public Response listPrincipals(RealmContext realmContext, SecurityContext securityContext) {
382-
PolarisAdminService adminService = newAdminService(realmContext, securityContext);
383325
List<Principal> principalList = adminService.listPrincipals();
384326
Principals principals = new Principals(principalList);
385327
LOGGER.debug("listPrincipals returning: {}", principals);
@@ -392,7 +334,6 @@ public Response createPrincipalRole(
392334
CreatePrincipalRoleRequest request,
393335
RealmContext realmContext,
394336
SecurityContext securityContext) {
395-
PolarisAdminService adminService = newAdminService(realmContext, securityContext);
396337
PrincipalRoleEntity entity =
397338
new PrincipalRoleEntity.Builder()
398339
.setName(request.getPrincipalRole().getName())
@@ -410,7 +351,6 @@ public Response createPrincipalRole(
410351
@Override
411352
public Response deletePrincipalRole(
412353
String principalRoleName, RealmContext realmContext, SecurityContext securityContext) {
413-
PolarisAdminService adminService = newAdminService(realmContext, securityContext);
414354
adminService.deletePrincipalRole(principalRoleName);
415355
return Response.status(Response.Status.NO_CONTENT).build();
416356
}
@@ -419,7 +359,6 @@ public Response deletePrincipalRole(
419359
@Override
420360
public Response getPrincipalRole(
421361
String principalRoleName, RealmContext realmContext, SecurityContext securityContext) {
422-
PolarisAdminService adminService = newAdminService(realmContext, securityContext);
423362
return Response.ok(adminService.getPrincipalRole(principalRoleName).asPrincipalRole()).build();
424363
}
425364

@@ -430,7 +369,6 @@ public Response updatePrincipalRole(
430369
UpdatePrincipalRoleRequest updateRequest,
431370
RealmContext realmContext,
432371
SecurityContext securityContext) {
433-
PolarisAdminService adminService = newAdminService(realmContext, securityContext);
434372
return Response.ok(
435373
adminService.updatePrincipalRole(principalRoleName, updateRequest).asPrincipalRole())
436374
.build();
@@ -439,7 +377,6 @@ public Response updatePrincipalRole(
439377
/** From PolarisPrincipalRolesApiService */
440378
@Override
441379
public Response listPrincipalRoles(RealmContext realmContext, SecurityContext securityContext) {
442-
PolarisAdminService adminService = newAdminService(realmContext, securityContext);
443380
List<PrincipalRole> principalRoleList = adminService.listPrincipalRoles();
444381
PrincipalRoles principalRoles = new PrincipalRoles(principalRoleList);
445382
LOGGER.debug("listPrincipalRoles returning: {}", principalRoles);
@@ -453,7 +390,6 @@ public Response createCatalogRole(
453390
CreateCatalogRoleRequest request,
454391
RealmContext realmContext,
455392
SecurityContext securityContext) {
456-
PolarisAdminService adminService = newAdminService(realmContext, securityContext);
457393
CatalogRoleEntity entity =
458394
new CatalogRoleEntity.Builder()
459395
.setName(request.getCatalogRole().getName())
@@ -474,7 +410,6 @@ public Response deleteCatalogRole(
474410
String catalogRoleName,
475411
RealmContext realmContext,
476412
SecurityContext securityContext) {
477-
PolarisAdminService adminService = newAdminService(realmContext, securityContext);
478413
adminService.deleteCatalogRole(catalogName, catalogRoleName);
479414
return Response.status(Response.Status.NO_CONTENT).build();
480415
}
@@ -486,7 +421,6 @@ public Response getCatalogRole(
486421
String catalogRoleName,
487422
RealmContext realmContext,
488423
SecurityContext securityContext) {
489-
PolarisAdminService adminService = newAdminService(realmContext, securityContext);
490424
return Response.ok(adminService.getCatalogRole(catalogName, catalogRoleName).asCatalogRole())
491425
.build();
492426
}
@@ -499,7 +433,6 @@ public Response updateCatalogRole(
499433
UpdateCatalogRoleRequest updateRequest,
500434
RealmContext realmContext,
501435
SecurityContext securityContext) {
502-
PolarisAdminService adminService = newAdminService(realmContext, securityContext);
503436
return Response.ok(
504437
adminService
505438
.updateCatalogRole(catalogName, catalogRoleName, updateRequest)
@@ -511,7 +444,6 @@ public Response updateCatalogRole(
511444
@Override
512445
public Response listCatalogRoles(
513446
String catalogName, RealmContext realmContext, SecurityContext securityContext) {
514-
PolarisAdminService adminService = newAdminService(realmContext, securityContext);
515447
List<CatalogRole> catalogRoleList = adminService.listCatalogRoles(catalogName);
516448
CatalogRoles catalogRoles = new CatalogRoles(catalogRoleList);
517449
LOGGER.debug("listCatalogRoles returning: {}", catalogRoles);
@@ -529,7 +461,6 @@ public Response assignPrincipalRole(
529461
"Assigning principalRole {} to principal {}",
530462
request.getPrincipalRole().getName(),
531463
principalName);
532-
PolarisAdminService adminService = newAdminService(realmContext, securityContext);
533464
PrivilegeResult result =
534465
adminService.assignPrincipalRole(principalName, request.getPrincipalRole().getName());
535466
return toResponse(result, Response.Status.CREATED);
@@ -543,7 +474,6 @@ public Response revokePrincipalRole(
543474
RealmContext realmContext,
544475
SecurityContext securityContext) {
545476
LOGGER.info("Revoking principalRole {} from principal {}", principalRoleName, principalName);
546-
PolarisAdminService adminService = newAdminService(realmContext, securityContext);
547477
PrivilegeResult result = adminService.revokePrincipalRole(principalName, principalRoleName);
548478
return toResponse(result, Response.Status.NO_CONTENT);
549479
}
@@ -552,7 +482,6 @@ public Response revokePrincipalRole(
552482
@Override
553483
public Response listPrincipalRolesAssigned(
554484
String principalName, RealmContext realmContext, SecurityContext securityContext) {
555-
PolarisAdminService adminService = newAdminService(realmContext, securityContext);
556485
List<PrincipalRole> principalRoleList =
557486
adminService.listPrincipalRolesAssigned(principalName).stream()
558487
.map(PrincipalRoleEntity::new)
@@ -576,7 +505,6 @@ public Response assignCatalogRoleToPrincipalRole(
576505
request.getCatalogRole().getName(),
577506
catalogName,
578507
principalRoleName);
579-
PolarisAdminService adminService = newAdminService(realmContext, securityContext);
580508
PrivilegeResult result =
581509
adminService.assignCatalogRoleToPrincipalRole(
582510
principalRoleName, catalogName, request.getCatalogRole().getName());
@@ -596,7 +524,6 @@ public Response revokeCatalogRoleFromPrincipalRole(
596524
catalogRoleName,
597525
catalogName,
598526
principalRoleName);
599-
PolarisAdminService adminService = newAdminService(realmContext, securityContext);
600527
PrivilegeResult result =
601528
adminService.revokeCatalogRoleFromPrincipalRole(
602529
principalRoleName, catalogName, catalogRoleName);
@@ -607,7 +534,6 @@ public Response revokeCatalogRoleFromPrincipalRole(
607534
@Override
608535
public Response listAssigneePrincipalsForPrincipalRole(
609536
String principalRoleName, RealmContext realmContext, SecurityContext securityContext) {
610-
PolarisAdminService adminService = newAdminService(realmContext, securityContext);
611537
List<Principal> principalList =
612538
adminService.listAssigneePrincipalsForPrincipalRole(principalRoleName).stream()
613539
.map(PrincipalEntity::new)
@@ -625,7 +551,6 @@ public Response listCatalogRolesForPrincipalRole(
625551
String catalogName,
626552
RealmContext realmContext,
627553
SecurityContext securityContext) {
628-
PolarisAdminService adminService = newAdminService(realmContext, securityContext);
629554
List<CatalogRole> catalogRoleList =
630555
adminService.listCatalogRolesForPrincipalRole(principalRoleName, catalogName).stream()
631556
.map(CatalogRoleEntity::new)
@@ -649,7 +574,6 @@ public Response addGrantToCatalogRole(
649574
grantRequest,
650575
catalogRoleName,
651576
catalogName);
652-
PolarisAdminService adminService = newAdminService(realmContext, securityContext);
653577
PrivilegeResult result;
654578
switch (grantRequest.getGrant()) {
655579
// The per-securable-type Privilege enums must be exact String match for a subset of all
@@ -744,7 +668,6 @@ public Response revokeGrantFromCatalogRole(
744668
return Response.status(501).build(); // not implemented
745669
}
746670

747-
PolarisAdminService adminService = newAdminService(realmContext, securityContext);
748671
PrivilegeResult result;
749672
switch (grantRequest.getGrant()) {
750673
// The per-securable-type Privilege enums must be exact String match for a subset of all
@@ -828,7 +751,6 @@ public Response listAssigneePrincipalRolesForCatalogRole(
828751
String catalogRoleName,
829752
RealmContext realmContext,
830753
SecurityContext securityContext) {
831-
PolarisAdminService adminService = newAdminService(realmContext, securityContext);
832754
List<PrincipalRole> principalRoleList =
833755
adminService.listAssigneePrincipalRolesForCatalogRole(catalogName, catalogRoleName).stream()
834756
.map(PrincipalRoleEntity::new)
@@ -846,7 +768,6 @@ public Response listGrantsForCatalogRole(
846768
String catalogRoleName,
847769
RealmContext realmContext,
848770
SecurityContext securityContext) {
849-
PolarisAdminService adminService = newAdminService(realmContext, securityContext);
850771
List<GrantResource> grantList =
851772
adminService.listGrantsForCatalogRole(catalogName, catalogRoleName);
852773
GrantResources grantResources = new GrantResources(grantList);

0 commit comments

Comments
 (0)