private XXPluginInfo doCreateOrUpdateXXPluginInfo()

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;
    }