in security-admin/src/main/java/org/apache/ranger/biz/AssetMgr.java [1141:1390]
private XXPluginInfo doCreateOrUpdateXXPluginInfo(RangerPluginInfo pluginInfo, int entityType, final boolean isTagVersionResetNeeded, String clusterName) {
XXPluginInfo ret = null;
if (StringUtils.isNotBlank(pluginInfo.getServiceName())) {
XXPluginInfo xObj = rangerDaoManager.getXXPluginInfo().find(pluginInfo.getServiceName(), pluginInfo.getHostName(), pluginInfo.getAppType());
if (xObj == null) {
Map<String, String> infoMap = pluginInfo.getInfo();
if (!stringUtil.isEmpty(clusterName) && infoMap != null) {
infoMap.put(SearchFilter.CLUSTER_NAME, clusterName);
pluginInfo.setInfo(infoMap);
}
// ranger-admin is restarted, plugin contains latest versions and no earlier record for this plug-in client
if (isPolicyDownloadRequest(entityType)) {
if (pluginInfo.getPolicyDownloadedVersion() != null && pluginInfo.getPolicyDownloadedVersion().equals(pluginInfo.getPolicyActiveVersion())) {
// This is our best guess of when policies may have been downloaded
pluginInfo.setPolicyDownloadTime(pluginInfo.getPolicyActivationTime());
}
} else if (isTagDownloadRequest(entityType)) {
if (pluginInfo.getTagDownloadedVersion() != null && pluginInfo.getTagDownloadedVersion().equals(pluginInfo.getTagActiveVersion())) {
// This is our best guess of when tags may have been downloaded
pluginInfo.setTagDownloadTime(pluginInfo.getTagActivationTime());
}
} else if (isRoleDownloadRequest(entityType)) {
if (pluginInfo.getRoleDownloadTime() != null && pluginInfo.getRoleDownloadedVersion().equals(pluginInfo.getRoleActiveVersion())) {
// This is our best guess of when role may have been downloaded
pluginInfo.setRoleDownloadTime(pluginInfo.getRoleActivationTime());
}
} else if (isUserStoreDownloadRequest(entityType)) {
if (pluginInfo.getUserStoreDownloadTime() != null && pluginInfo.getUserStoreDownloadedVersion().equals(pluginInfo.getUserStoreActiveVersion())) {
// This is our best guess of when users and groups may have been downloaded
pluginInfo.setUserStoreDownloadTime(pluginInfo.getUserStoreActivationTime());
}
} else if (isGdsDownloadRequest(entityType)) {
if (pluginInfo.getGdsDownloadTime() != null && pluginInfo.getGdsDownloadedVersion().equals(pluginInfo.getGdsActiveVersion())) {
// This is our best guess of when GDS info may have been downloaded
pluginInfo.setGdsDownloadTime(pluginInfo.getGdsActivationTime());
}
}
pluginInfo.setAdminCapabilities(adminCapabilities);
xObj = pluginInfoService.populateDBObject(pluginInfo);
logger.debug("Creating RangerPluginInfo record for service-version");
ret = rangerDaoManager.getXXPluginInfo().create(xObj);
} else {
boolean needsUpdating = false;
RangerPluginInfo dbObj = pluginInfoService.populateViewObject(xObj);
Map<String, String> infoMap = dbObj.getInfo();
if (infoMap != null && !stringUtil.isEmpty(clusterName)) {
if (!stringUtil.isEmpty(infoMap.get(SearchFilter.CLUSTER_NAME)) && !stringUtil.equals(infoMap.get(SearchFilter.CLUSTER_NAME), clusterName)) {
infoMap.put(SearchFilter.CLUSTER_NAME, clusterName);
needsUpdating = true;
}
}
if (!dbObj.getIpAddress().equals(pluginInfo.getIpAddress())) {
dbObj.setIpAddress(pluginInfo.getIpAddress());
needsUpdating = true;
}
if (isPolicyDownloadRequest(entityType)) {
if (dbObj.getPolicyDownloadedVersion() == null || !dbObj.getPolicyDownloadedVersion().equals(pluginInfo.getPolicyDownloadedVersion())) {
dbObj.setPolicyDownloadedVersion(pluginInfo.getPolicyDownloadedVersion());
dbObj.setPolicyDownloadTime(pluginInfo.getPolicyDownloadTime());
needsUpdating = true;
}
Long lastKnownPolicyVersion = pluginInfo.getPolicyActiveVersion();
Long lastPolicyActivationTime = pluginInfo.getPolicyActivationTime();
String lastPluginCapabilityVector = pluginInfo.getPluginCapabilities();
if (lastKnownPolicyVersion != null && lastKnownPolicyVersion == -1) {
// First download request after plug-in's policy-refresher starts
dbObj.setPolicyDownloadTime(pluginInfo.getPolicyDownloadTime());
needsUpdating = true;
}
if (lastKnownPolicyVersion != null && lastKnownPolicyVersion > 0 && (dbObj.getPolicyActiveVersion() == null || !dbObj.getPolicyActiveVersion().equals(lastKnownPolicyVersion))) {
dbObj.setPolicyActiveVersion(lastKnownPolicyVersion);
needsUpdating = true;
}
if (lastPolicyActivationTime != null && lastPolicyActivationTime > 0 && (dbObj.getPolicyActivationTime() == null || !dbObj.getPolicyActivationTime().equals(lastPolicyActivationTime))) {
dbObj.setPolicyActivationTime(lastPolicyActivationTime);
needsUpdating = true;
}
if (lastPluginCapabilityVector != null && (dbObj.getPluginCapabilities() == null || !dbObj.getPluginCapabilities().equals(lastPluginCapabilityVector))) {
dbObj.setPluginCapabilities(lastPluginCapabilityVector);
needsUpdating = true;
}
if (dbObj.getAdminCapabilities() == null || !dbObj.getAdminCapabilities().equals(adminCapabilities)) {
dbObj.setAdminCapabilities(adminCapabilities);
needsUpdating = true;
}
} else if (isTagDownloadRequest(entityType)) {
if (dbObj.getTagDownloadedVersion() == null || !dbObj.getTagDownloadedVersion().equals(pluginInfo.getTagDownloadedVersion())) {
// First download for tags after tag-service is associated with resource-service
dbObj.setTagDownloadedVersion(pluginInfo.getTagDownloadedVersion());
dbObj.setTagDownloadTime(pluginInfo.getTagDownloadTime());
needsUpdating = true;
}
Long lastKnownTagVersion = pluginInfo.getTagActiveVersion();
Long lastTagActivationTime = pluginInfo.getTagActivationTime();
if (lastKnownTagVersion != null && lastKnownTagVersion == -1) {
// First download request after plug-in's tag-refresher restarts
dbObj.setTagDownloadTime(pluginInfo.getTagDownloadTime());
needsUpdating = true;
}
if (lastKnownTagVersion != null && lastKnownTagVersion > 0 && (dbObj.getTagActiveVersion() == null || !dbObj.getTagActiveVersion().equals(lastKnownTagVersion))) {
dbObj.setTagActiveVersion(lastKnownTagVersion);
needsUpdating = true;
}
if (lastTagActivationTime != null && lastTagActivationTime > 0 && (dbObj.getTagActivationTime() == null || !dbObj.getTagActivationTime().equals(lastTagActivationTime))) {
dbObj.setTagActivationTime(lastTagActivationTime);
needsUpdating = true;
}
} else if (isRoleDownloadRequest(entityType)) {
if (dbObj.getRoleDownloadedVersion() == null || !dbObj.getRoleDownloadedVersion().equals(pluginInfo.getRoleDownloadedVersion())) {
dbObj.setRoleDownloadedVersion(pluginInfo.getRoleDownloadedVersion());
dbObj.setRoleDownloadTime(pluginInfo.getRoleDownloadTime());
needsUpdating = true;
}
Long lastKnownRoleVersion = pluginInfo.getRoleActiveVersion();
Long lastRoleActivationTime = pluginInfo.getRoleActivationTime();
if (lastKnownRoleVersion != null && lastKnownRoleVersion == -1) {
dbObj.setRoleDownloadTime(pluginInfo.getRoleDownloadTime());
needsUpdating = true;
}
if (lastKnownRoleVersion != null && lastKnownRoleVersion > 0 && (dbObj.getRoleActiveVersion() == null || !dbObj.getRoleActiveVersion().equals(lastKnownRoleVersion))) {
dbObj.setRoleActiveVersion(lastKnownRoleVersion);
needsUpdating = true;
}
if (lastRoleActivationTime != null && lastRoleActivationTime > 0 && (dbObj.getRoleActivationTime() == null || !dbObj.getRoleActivationTime().equals(lastRoleActivationTime))) {
dbObj.setRoleActivationTime(lastRoleActivationTime);
needsUpdating = true;
}
} else if (isUserStoreDownloadRequest(entityType)) {
if (dbObj.getUserStoreDownloadedVersion() == null || !dbObj.getUserStoreDownloadedVersion().equals(pluginInfo.getUserStoreDownloadedVersion())) {
dbObj.setUserStoreDownloadedVersion(pluginInfo.getUserStoreDownloadedVersion());
dbObj.setUserStoreDownloadTime(pluginInfo.getUserStoreDownloadTime());
needsUpdating = true;
}
Long lastKnownUserStoreVersion = pluginInfo.getUserStoreActiveVersion();
Long lastUserStoreActivationTime = pluginInfo.getUserStoreActivationTime();
if (lastKnownUserStoreVersion != null && lastKnownUserStoreVersion == -1) {
dbObj.setUserStoreDownloadTime(pluginInfo.getUserStoreDownloadTime());
needsUpdating = true;
}
if (lastKnownUserStoreVersion != null && lastKnownUserStoreVersion > 0 && (dbObj.getUserStoreActiveVersion() == null || !dbObj.getUserStoreActiveVersion().equals(lastKnownUserStoreVersion))) {
dbObj.setUserStoreActiveVersion(lastKnownUserStoreVersion);
needsUpdating = true;
}
if (lastUserStoreActivationTime != null && lastUserStoreActivationTime > 0 && (dbObj.getUserStoreActivationTime() == null || !dbObj.getUserStoreActivationTime().equals(lastUserStoreActivationTime))) {
dbObj.setUserStoreActivationTime(lastUserStoreActivationTime);
needsUpdating = true;
}
} else if (isGdsDownloadRequest(entityType)) {
if (dbObj.getGdsDownloadedVersion() == null || !dbObj.getGdsDownloadedVersion().equals(pluginInfo.getGdsDownloadedVersion())) {
dbObj.setGdsDownloadedVersion(pluginInfo.getGdsDownloadedVersion());
dbObj.setGdsDownloadTime(pluginInfo.getGdsDownloadTime());
needsUpdating = true;
}
Long lastKnownGdsVersion = pluginInfo.getGdsActiveVersion();
Long lastGdsActivationTime = pluginInfo.getGdsActivationTime();
if (lastKnownGdsVersion != null && lastKnownGdsVersion == -1) {
dbObj.setGdsDownloadTime(pluginInfo.getGdsDownloadTime());
needsUpdating = true;
}
if (lastKnownGdsVersion != null && lastKnownGdsVersion > 0 && (dbObj.getGdsActiveVersion() == null || !dbObj.getGdsActiveVersion().equals(lastKnownGdsVersion))) {
dbObj.setGdsActiveVersion(lastKnownGdsVersion);
needsUpdating = true;
}
if (lastGdsActivationTime != null && lastGdsActivationTime > 0 && (dbObj.getGdsActivationTime() == null || !dbObj.getGdsActivationTime().equals(lastGdsActivationTime))) {
dbObj.setGdsActivationTime(lastGdsActivationTime);
needsUpdating = true;
}
}
if (isTagVersionResetNeeded) {
dbObj.setTagDownloadedVersion(null);
dbObj.setTagDownloadTime(null);
dbObj.setTagActiveVersion(null);
dbObj.setTagActivationTime(null);
needsUpdating = true;
}
if (needsUpdating) {
logger.debug("Updating XXPluginInfo record for service-version");
xObj = pluginInfoService.populateDBObject(dbObj);
ret = rangerDaoManager.getXXPluginInfo().update(xObj);
}
}
} else {
logger.error("Invalid parameters: pluginInfo={})", pluginInfo);
}
return ret;
}