public static KerberosKeytabPrincipalFilter createFilter(String serviceName, Collection<String> componentNames, Collection<String> hostNames, Collection<String> principalNames) {
      return new KerberosKeytabPrincipalFilter(hostNames,
          (serviceName == null) ? null : Collections.singleton(serviceName),
          componentNames,
          principalNames);
    }
Ideally for this record PK must be (hostId, keytabPath, principalName), but in some cases hostId can be null.
So surrogate auto-generated PK used, and unique constraint for (hostId, keytabPath, principalName) applied.
This method checks if hostId is null and calls specific method.

@param hostId host id
@param keytabPath keytab path
@param principalName principal name
@return keytab found
ambari-server/src/main/java/org/apache/ambari/server/orm/dao/KerberosKeytabPrincipalDAO.java