nifi-issues mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Kristjan Antunovic (Jira)" <j...@apache.org>
Subject [jira] [Comment Edited] (NIFI-6767) NiFi Registry Config does not persist after a cluster restart
Date Tue, 07 Jan 2020 00:07:00 GMT

    [ https://issues.apache.org/jira/browse/NIFI-6767?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17009209#comment-17009209
] 

Kristjan Antunovic edited comment on NIFI-6767 at 1/7/20 12:06 AM:
-------------------------------------------------------------------

[~bbende] This is the problematic piece of code:
{code:java}
final String registryBaseUrl = uri.getScheme() + "://" + uri.getHost() + ":" + uri.getPort();
{code}
I would rewrite the method as so *confirmed working*:
{code:java}
    import org.apache.http.client.utils.URIBuilder;

    @Override
    public FlowRegistry addFlowRegistry(final String registryId, final String registryName,
final String registryUrl, final String description) {
        final URI uri;
        try {
            // This should remove any trailing paths: /nifi-registry, /../..
            // as well as any query parameters ?a=b and any combo of the two.
            uri = new URIBuilder(registryUrl)
              .setPath("")
              .removeQuery()
              .build();

            //uri = new URI(registryUrl);
        } catch (URISyntaxException e) {
            throw new IllegalArgumentException("The given Registry URL is not valid: " + registryUrl);
        }

        final String uriScheme = uri.getScheme();
        if (uriScheme == null) {
            throw new IllegalArgumentException("The given Registry URL is not valid: " + registryUrl);
        }

        // Handles case where the URI entered has a trailing slash, or includes the trailing
/nifi-registry-api
        // final String registryBaseUrl = uri.getScheme() + "://" + uri.getHost() + ":" +
uri.getPort();
        
        // This will be the base URI with no paths or params. But will include the port if
set initially.
        final String registryBaseUrl = uri.toString();  

        final FlowRegistry registry;
        if (uriScheme.equalsIgnoreCase("http") || uriScheme.equalsIgnoreCase("https")) {
            final SSLContext sslContext = SslContextFactory.createSslContext(nifiProperties);
            if (sslContext == null && uriScheme.equalsIgnoreCase("https")) {
                throw new IllegalStateException("Failed to create Flow Registry for URI "
+ registryUrl
                    + " because this NiFi is not configured with a Keystore/Truststore, so
it is not capable of communicating with a secure Registry. "
                    + "Please populate NiFi's Keystore/Truststore properties or connect to
a NiFi Registry over http instead of https.");
            }

            registry = new RestBasedFlowRegistry(this, registryId, registryBaseUrl, sslContext,
registryName);
            registry.setDescription(description);
        } else {
            throw new IllegalArgumentException("Cannot create Flow Registry with URI of "
+ registryUrl
                + " because there are no known implementations of Flow Registries that can
handle URIs of scheme " + uriScheme);
        }

        addFlowRegistry(registry);
        return registry;
    }
{code}


was (Author: superkool):
[~bbende] This is the problematic piece of code:
{code:java}
final String registryBaseUrl = uri.getScheme() + "://" + uri.getHost() + ":" + uri.getPort();
{code}
I would rewrite the method as so:
{code:java}
    import org.apache.http.client.utils.URIBuilder;

    @Override
    public FlowRegistry addFlowRegistry(final String registryId, final String registryName,
final String registryUrl, final String description) {
        final URI uri;
        try {
            // This should remove any trailing paths: /nifi-registry, /../..
            // as well as any query parameters ?a=b and any combo of the two.
            uri = new URIBuilder(registryUrl)
              .setPath("")
              .removeQuery()
              .build();

            //uri = new URI(registryUrl);
        } catch (URISyntaxException e) {
            throw new IllegalArgumentException("The given Registry URL is not valid: " + registryUrl);
        }

        final String uriScheme = uri.getScheme();
        if (uriScheme == null) {
            throw new IllegalArgumentException("The given Registry URL is not valid: " + registryUrl);
        }

        // Handles case where the URI entered has a trailing slash, or includes the trailing
/nifi-registry-api
        // final String registryBaseUrl = uri.getScheme() + "://" + uri.getHost() + ":" +
uri.getPort();
        
        // This will be the base URI with no paths or params. But will include the port if
set initially.
        final String registryBaseUrl = uri.toString();  

        final FlowRegistry registry;
        if (uriScheme.equalsIgnoreCase("http") || uriScheme.equalsIgnoreCase("https")) {
            final SSLContext sslContext = SslContextFactory.createSslContext(nifiProperties);
            if (sslContext == null && uriScheme.equalsIgnoreCase("https")) {
                throw new IllegalStateException("Failed to create Flow Registry for URI "
+ registryUrl
                    + " because this NiFi is not configured with a Keystore/Truststore, so
it is not capable of communicating with a secure Registry. "
                    + "Please populate NiFi's Keystore/Truststore properties or connect to
a NiFi Registry over http instead of https.");
            }

            registry = new RestBasedFlowRegistry(this, registryId, registryBaseUrl, sslContext,
registryName);
            registry.setDescription(description);
        } else {
            throw new IllegalArgumentException("Cannot create Flow Registry with URI of "
+ registryUrl
                + " because there are no known implementations of Flow Registries that can
handle URIs of scheme " + uriScheme);
        }

        addFlowRegistry(registry);
        return registry;
    }
{code}

> NiFi Registry Config does not persist after a cluster restart
> -------------------------------------------------------------
>
>                 Key: NIFI-6767
>                 URL: https://issues.apache.org/jira/browse/NIFI-6767
>             Project: Apache NiFi
>          Issue Type: Bug
>          Components: Flow Versioning
>    Affects Versions: 1.10.0, 1.9.2
>            Reporter: John E Fortin
>            Priority: Major
>         Attachments: registry-bad.png
>
>
> After configuring the NiFi Registery and versioning flows the Registry works fine. 
However, after restarting the NiFI cluster the Registry Config now has "https://null:-1" as
the value for the Registry URL.  
> If I reconfigure the URL it works fine until the next Cluster restart.
> This has been happening since 1.9.1 (that I know of) and continues into 1.10
> It's not a show stopper, but is quite annoying



--
This message was sent by Atlassian Jira
(v8.3.4#803005)

Mime
View raw message