[
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 *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}
> 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)