This is an automated email from the ASF dual-hosted git repository.
pvillard31 pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/nifi.git
The following commit(s) were added to refs/heads/main by this push:
new b6720a9b90b NIFI-16115 Removed deprecated ConsumeTwitter Processor
(#11431)
b6720a9b90b is described below
commit b6720a9b90bdcf29a8dfe3e16fd59eccfe2d9320
Author: David Handermann <[email protected]>
AuthorDate: Wed Jul 15 03:27:16 2026 -0500
NIFI-16115 Removed deprecated ConsumeTwitter Processor (#11431)
- Removed social-media-bundle and NAR
---
nifi-assembly/pom.xml | 6 -
nifi-code-coverage/pom.xml | 5 -
.../nifi-social-media-nar/pom.xml | 41 ---
.../src/main/resources/META-INF/NOTICE | 55 ---
.../nifi-twitter-processors/pom.xml | 55 ---
.../nifi/processors/twitter/ConsumeTwitter.java | 379 ---------------------
.../nifi/processors/twitter/StreamEndpoint.java | 38 ---
.../processors/twitter/TweetStreamService.java | 252 --------------
.../services/org.apache.nifi.processor.Processor | 15 -
.../processors/twitter/TestConsumeTwitter.java | 119 -------
.../nifi-social-media-bundle/pom.xml | 31 --
nifi-extension-bundles/pom.xml | 1 -
12 files changed, 997 deletions(-)
diff --git a/nifi-assembly/pom.xml b/nifi-assembly/pom.xml
index 89c2a76d611..7b8bb2ee447 100644
--- a/nifi-assembly/pom.xml
+++ b/nifi-assembly/pom.xml
@@ -393,12 +393,6 @@ language governing permissions and limitations under the
License. -->
<version>2.11.0-SNAPSHOT</version>
<type>nar</type>
</dependency>
- <dependency>
- <groupId>org.apache.nifi</groupId>
- <artifactId>nifi-social-media-nar</artifactId>
- <version>2.11.0-SNAPSHOT</version>
- <type>nar</type>
- </dependency>
<dependency>
<groupId>org.apache.nifi</groupId>
<artifactId>nifi-enrich-nar</artifactId>
diff --git a/nifi-code-coverage/pom.xml b/nifi-code-coverage/pom.xml
index 8f260444d02..702f660f282 100644
--- a/nifi-code-coverage/pom.xml
+++ b/nifi-code-coverage/pom.xml
@@ -1200,11 +1200,6 @@
<artifactId>nifi-snowflake-services-api</artifactId>
<version>2.11.0-SNAPSHOT</version>
</dependency>
- <dependency>
- <groupId>org.apache.nifi</groupId>
- <artifactId>nifi-twitter-processors</artifactId>
- <version>2.11.0-SNAPSHOT</version>
- </dependency>
<dependency>
<groupId>org.apache.nifi</groupId>
<artifactId>nifi-splunk-processors</artifactId>
diff --git
a/nifi-extension-bundles/nifi-social-media-bundle/nifi-social-media-nar/pom.xml
b/nifi-extension-bundles/nifi-social-media-bundle/nifi-social-media-nar/pom.xml
deleted file mode 100644
index c2292c5d01c..00000000000
---
a/nifi-extension-bundles/nifi-social-media-bundle/nifi-social-media-nar/pom.xml
+++ /dev/null
@@ -1,41 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
- Licensed to the Apache Software Foundation (ASF) under one or more
- contributor license agreements. See the NOTICE file distributed with
- this work for additional information regarding copyright ownership.
- The ASF licenses this file to You under the Apache License, Version 2.0
- (the "License"); you may not use this file except in compliance with
- the License. You may obtain a copy of the License at
- http://www.apache.org/licenses/LICENSE-2.0
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
https://maven.apache.org/xsd/maven-4.0.0.xsd">
- <modelVersion>4.0.0</modelVersion>
-
- <parent>
- <groupId>org.apache.nifi</groupId>
- <artifactId>nifi-social-media-bundle</artifactId>
- <version>2.11.0-SNAPSHOT</version>
- </parent>
-
- <artifactId>nifi-social-media-nar</artifactId>
- <packaging>nar</packaging>
-
- <dependencies>
- <dependency>
- <groupId>org.apache.nifi</groupId>
- <artifactId>nifi-twitter-processors</artifactId>
- <version>2.11.0-SNAPSHOT</version>
- </dependency>
- <dependency>
- <groupId>org.apache.nifi</groupId>
- <artifactId>nifi-standard-shared-nar</artifactId>
- <version>2.11.0-SNAPSHOT</version>
- <type>nar</type>
- </dependency>
- </dependencies>
-</project>
diff --git
a/nifi-extension-bundles/nifi-social-media-bundle/nifi-social-media-nar/src/main/resources/META-INF/NOTICE
b/nifi-extension-bundles/nifi-social-media-bundle/nifi-social-media-nar/src/main/resources/META-INF/NOTICE
deleted file mode 100644
index f525d3995bf..00000000000
---
a/nifi-extension-bundles/nifi-social-media-bundle/nifi-social-media-nar/src/main/resources/META-INF/NOTICE
+++ /dev/null
@@ -1,55 +0,0 @@
-nifi-social-media-nar
-Copyright 2015-2026 The Apache Software Foundation
-
-This product includes software developed at
-The Apache Software Foundation (http://www.apache.org/).
-
-******************
-Apache Software License v2
-******************
-
-The following binary components are provided under the Apache Software License
v2
-
- (ASLv2) Apache Commons Lang
- The following NOTICE information applies:
- Apache Commons Lang
- Copyright 2001-2014 The Apache Software Foundation
-
- This product includes software from the Spring Framework,
- under the Apache License 2.0 (see: StringUtils.containsWhitespace())
-
- (ASLv2) Apache Commons Codec
- The following NOTICE information applies:
- Apache Commons Codec
- Copyright 2002-2014 The Apache Software Foundation
-
- src/test/org/apache/commons/codec/language/DoubleMetaphoneTest.java
- contains test data from http://aspell.net/test/orig/batch0.tab.
- Copyright (C) 2002 Kevin Atkinson ([email protected])
-
-
===============================================================================
-
- The content of package org.apache.commons.codec.language.bm has been
translated
- from the original php source code available at
http://stevemorse.org/phoneticinfo.htm
- with permission from the original authors.
- Original source copyright:
- Copyright (c) 2008 Alexander Beider & Stephen P. Morse.
-
- (ASLv2) JOAuth
- The following NOTICE information applies:
- JOAuth
- Copyright 2010-2013 Twitter, Inc
-
- (ASLv2) Hosebird Client
- The following NOTICE information applies:
- Hosebird Client (hbc)
- Copyright 2013 Twitter, Inc.
-
-************************
-The MIT License
-************************
-
- (MIT) ScribeJava OAuth Library
- The following NOTICE information applies:
- ScribeJava OAuth Library
- Copyright (c) 2010 Pablo Fernandez
diff --git
a/nifi-extension-bundles/nifi-social-media-bundle/nifi-twitter-processors/pom.xml
b/nifi-extension-bundles/nifi-social-media-bundle/nifi-twitter-processors/pom.xml
deleted file mode 100644
index b4676739276..00000000000
---
a/nifi-extension-bundles/nifi-social-media-bundle/nifi-twitter-processors/pom.xml
+++ /dev/null
@@ -1,55 +0,0 @@
-<?xml version="1.0"?>
-<!--
- Licensed to the Apache Software Foundation (ASF) under one or more
- contributor license agreements. See the NOTICE file distributed with
- this work for additional information regarding copyright ownership.
- The ASF licenses this file to You under the Apache License, Version 2.0
- (the "License"); you may not use this file except in compliance with
- the License. You may obtain a copy of the License at
- http://www.apache.org/licenses/LICENSE-2.0
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
https://maven.apache.org/xsd/maven-4.0.0.xsd">
- <modelVersion>4.0.0</modelVersion>
-
- <parent>
- <groupId>org.apache.nifi</groupId>
- <artifactId>nifi-social-media-bundle</artifactId>
- <version>2.11.0-SNAPSHOT</version>
- </parent>
-
- <artifactId>nifi-twitter-processors</artifactId>
- <packaging>jar</packaging>
-
- <dependencies>
-
- <dependency>
- <groupId>org.apache.nifi</groupId>
- <artifactId>nifi-utils</artifactId>
- </dependency>
- <dependency>
- <groupId>com.twitter</groupId>
- <artifactId>twitter-api-java-sdk</artifactId>
- <version>2.0.3</version>
- <exclusions>
- <exclusion>
- <groupId>org.apache.oltu.oauth2</groupId>
- <artifactId>org.apache.oltu.oauth2.client</artifactId>
- </exclusion>
- <exclusion>
- <groupId>com.twitter</groupId>
- <artifactId>joauth</artifactId>
- </exclusion>
- </exclusions>
- </dependency>
- <dependency>
- <groupId>com.squareup.okhttp3</groupId>
- <artifactId>mockwebserver3</artifactId>
- <scope>test</scope>
- </dependency>
- </dependencies>
-</project>
diff --git
a/nifi-extension-bundles/nifi-social-media-bundle/nifi-twitter-processors/src/main/java/org/apache/nifi/processors/twitter/ConsumeTwitter.java
b/nifi-extension-bundles/nifi-social-media-bundle/nifi-twitter-processors/src/main/java/org/apache/nifi/processors/twitter/ConsumeTwitter.java
deleted file mode 100644
index cb6688fa525..00000000000
---
a/nifi-extension-bundles/nifi-social-media-bundle/nifi-twitter-processors/src/main/java/org/apache/nifi/processors/twitter/ConsumeTwitter.java
+++ /dev/null
@@ -1,379 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.nifi.processors.twitter;
-
-import org.apache.nifi.annotation.behavior.InputRequirement;
-import org.apache.nifi.annotation.behavior.InputRequirement.Requirement;
-import org.apache.nifi.annotation.behavior.PrimaryNodeOnly;
-import org.apache.nifi.annotation.behavior.SupportsBatching;
-import org.apache.nifi.annotation.behavior.WritesAttribute;
-import org.apache.nifi.annotation.behavior.WritesAttributes;
-import org.apache.nifi.annotation.documentation.CapabilityDescription;
-import org.apache.nifi.annotation.documentation.DeprecationNotice;
-import org.apache.nifi.annotation.documentation.Tags;
-import org.apache.nifi.annotation.lifecycle.OnScheduled;
-import org.apache.nifi.annotation.lifecycle.OnStopped;
-import org.apache.nifi.annotation.notification.OnPrimaryNodeStateChange;
-import org.apache.nifi.annotation.notification.PrimaryNodeState;
-import org.apache.nifi.components.AllowableValue;
-import org.apache.nifi.components.PropertyDescriptor;
-import org.apache.nifi.flowfile.FlowFile;
-import org.apache.nifi.flowfile.attributes.CoreAttributes;
-import org.apache.nifi.migration.PropertyConfiguration;
-import org.apache.nifi.processor.AbstractProcessor;
-import org.apache.nifi.processor.ProcessContext;
-import org.apache.nifi.processor.ProcessSession;
-import org.apache.nifi.processor.Relationship;
-import org.apache.nifi.processor.exception.ProcessException;
-import org.apache.nifi.processor.util.StandardValidators;
-
-import java.nio.charset.StandardCharsets;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-import java.util.UUID;
-import java.util.concurrent.BlockingQueue;
-import java.util.concurrent.LinkedBlockingQueue;
-import java.util.concurrent.atomic.AtomicBoolean;
-import java.util.concurrent.atomic.AtomicInteger;
-
-@PrimaryNodeOnly
-@SupportsBatching
-@InputRequirement(Requirement.INPUT_FORBIDDEN)
-@Tags({"twitter", "tweets", "social media", "status", "json"})
-@CapabilityDescription("Streams tweets from Twitter's streaming API v2. The
stream provides a sample stream or a search "
- + "stream based on previously uploaded rules. This processor also provides
a pass through for certain fields of the "
- + "tweet to be returned as part of the response. See "
- +
"https://developer.twitter.com/en/docs/twitter-api/data-dictionary/introduction
for more information regarding the "
- + "Tweet object model.")
-@WritesAttributes({
- @WritesAttribute(attribute = "mime.type", description = "The MIME Type
set to application/json"),
- @WritesAttribute(attribute = "tweets", description = "The number of
Tweets in the FlowFile"),
-})
-@DeprecationNotice(reason = "NIFI-15882 The twitter-api-java-sdk is no longer
maintained")
-public class ConsumeTwitter extends AbstractProcessor {
-
- static final AllowableValue ENDPOINT_SAMPLE = new
AllowableValue(StreamEndpoint.SAMPLE_ENDPOINT.getEndpointName(),
- "Sample Stream",
- "Streams about one percent of all Tweets. " +
-
"https://developer.twitter.com/en/docs/twitter-api/tweets/volume-streams/api-reference/get-tweets-sample-stream");
- static final AllowableValue ENDPOINT_SEARCH = new
AllowableValue(StreamEndpoint.SEARCH_ENDPOINT.getEndpointName(),
- "Search Stream",
- "The search stream produces Tweets that match filtering rules
configured on Twitter services. " +
- "At least one well-formed filtering rule must be
configured. " +
-
"https://developer.twitter.com/en/docs/twitter-api/tweets/filtered-stream/api-reference/get-tweets-search-stream");
-
- public static final PropertyDescriptor ENDPOINT = new
PropertyDescriptor.Builder()
- .name("Stream Endpoint")
- .description("The source from which the processor will consume
Tweets.")
- .required(true)
- .allowableValues(ENDPOINT_SAMPLE, ENDPOINT_SEARCH)
- .defaultValue(ENDPOINT_SAMPLE.getValue())
- .build();
- public static final PropertyDescriptor BASE_PATH = new
PropertyDescriptor.Builder()
- .name("Base Path")
- .description("The base path that the processor will use for making
HTTP requests. " +
- "The default value should be sufficient for most use
cases.")
- .required(true)
- .addValidator(StandardValidators.NON_EMPTY_VALIDATOR)
- .defaultValue("https://api.twitter.com")
- .build();
- public static final PropertyDescriptor BEARER_TOKEN = new
PropertyDescriptor.Builder()
- .name("Bearer Token")
- .description("The Bearer Token provided by Twitter.")
- .required(true)
- .sensitive(true)
- .addValidator(StandardValidators.NON_EMPTY_VALIDATOR)
- .build();
- public static final PropertyDescriptor QUEUE_SIZE = new
PropertyDescriptor.Builder()
- .name("Queue Size")
- .description("Maximum size of internal queue for streamed
messages")
- .required(true)
- .addValidator(StandardValidators.POSITIVE_INTEGER_VALIDATOR)
- .defaultValue("10000")
- .build();
- public static final PropertyDescriptor BATCH_SIZE = new
PropertyDescriptor.Builder()
- .name("Batch Size")
- .description("The maximum size of the number of Tweets to be
written to a single FlowFile. " +
- "Will write fewer Tweets based on the number available in
the queue at the time of processor invocation.")
- .required(true)
- .addValidator(StandardValidators.POSITIVE_INTEGER_VALIDATOR)
- .defaultValue("1000")
- .build();
- public static final PropertyDescriptor BACKOFF_ATTEMPTS = new
PropertyDescriptor.Builder()
- .name("Backoff Attempts")
- .description("The number of reconnection tries the processor will
attempt in the event of " +
- "a disconnection of the stream for any reason, before
throwing an exception. To start a stream after " +
- "this exception occur and the connection is fixed, please
stop and restart the processor. If the value" +
- "of this property is 0, then backoff will never occur and
the processor will always need to be restarted" +
- "if the stream fails.")
- .required(true)
- .addValidator(StandardValidators.NON_NEGATIVE_INTEGER_VALIDATOR)
- .defaultValue("5")
- .build();
- public static final PropertyDescriptor BACKOFF_TIME = new
PropertyDescriptor.Builder()
- .name("Backoff Time")
- .description("The duration to backoff before requesting a new
stream if" +
- "the current one fails for any reason. Will increase by
factor of 2 every time a restart fails")
- .required(true)
- .addValidator(StandardValidators.TIME_PERIOD_VALIDATOR)
- .defaultValue("1 mins")
- .build();
- public static final PropertyDescriptor MAXIMUM_BACKOFF_TIME = new
PropertyDescriptor.Builder()
- .name("Maximum Backoff Time")
- .description("The maximum duration to backoff to start attempting
a new stream." +
- "It is recommended that this number be much higher than
the 'Backoff Time' property")
- .required(true)
- .addValidator(StandardValidators.TIME_PERIOD_VALIDATOR)
- .defaultValue("5 mins")
- .build();
- public static final PropertyDescriptor CONNECT_TIMEOUT = new
PropertyDescriptor.Builder()
- .name("Connect Timeout")
- .description("The maximum time in which client should establish a
connection with the " +
- "Twitter API before a time out. Setting the value to 0
disables connection timeouts.")
- .required(true)
- .addValidator(StandardValidators.TIME_PERIOD_VALIDATOR)
- .defaultValue("10 secs")
- .build();
- public static final PropertyDescriptor READ_TIMEOUT = new
PropertyDescriptor.Builder()
- .name("Read Timeout")
- .description("The maximum time of inactivity between receiving
tweets from Twitter through " +
- "the API before a timeout. Setting the value to 0 disables
read timeouts.")
- .required(true)
- .addValidator(StandardValidators.TIME_PERIOD_VALIDATOR)
- .defaultValue("10 secs")
- .build();
- public static final PropertyDescriptor BACKFILL_MINUTES = new
PropertyDescriptor.Builder()
- .name("Backfill Minutes")
- .description("The number of minutes (up to 5 minutes) of streaming
data to be requested after a " +
- "disconnect. Only available for project with academic
research access. See " +
-
"https://developer.twitter.com/en/docs/twitter-api/tweets/filtered-stream/integrate/"
+
- "recovery-and-redundancy-features")
- .required(true)
- .defaultValue("0")
- .addValidator(StandardValidators.NON_NEGATIVE_INTEGER_VALIDATOR)
- .build();
- public static final PropertyDescriptor TWEET_FIELDS = new
PropertyDescriptor.Builder()
- .name("Tweet Fields")
- .description("A comma-separated list of tweet fields to be
returned as part of the tweet. Refer to " +
-
"https://developer.twitter.com/en/docs/twitter-api/data-dictionary/object-model/tweet
" +
- "for proper usage. Possible field values include: " +
- "attachments, author_id, context_annotations,
conversation_id, created_at, entities, geo, id, " +
- "in_reply_to_user_id, lang, non_public_metrics,
organic_metrics, possibly_sensitive, promoted_metrics, " +
- "public_metrics, referenced_tweets, reply_settings,
source, text, withheld")
- .required(false)
- .addValidator(StandardValidators.NON_EMPTY_VALIDATOR)
- .build();
- public static final PropertyDescriptor USER_FIELDS = new
PropertyDescriptor.Builder()
- .name("User Fields")
- .description("A comma-separated list of user fields to be returned
as part of the tweet. Refer to " +
-
"https://developer.twitter.com/en/docs/twitter-api/data-dictionary/object-model/user
" +
- "for proper usage. Possible field values include: " +
- "created_at, description, entities, id, location, name,
pinned_tweet_id, profile_image_url, " +
- "protected, public_metrics, url, username, verified,
withheld")
- .required(false)
- .addValidator(StandardValidators.NON_EMPTY_VALIDATOR)
- .build();
- public static final PropertyDescriptor MEDIA_FIELDS = new
PropertyDescriptor.Builder()
- .name("Media Fields")
- .description("A comma-separated list of media fields to be
returned as part of the tweet. Refer to " +
-
"https://developer.twitter.com/en/docs/twitter-api/data-dictionary/object-model/media
" +
- "for proper usage. Possible field values include: " +
- "alt_text, duration_ms, height, media_key,
non_public_metrics, organic_metrics, preview_image_url, " +
- "promoted_metrics, public_metrics, type, url, width")
- .required(false)
- .addValidator(StandardValidators.NON_EMPTY_VALIDATOR)
- .build();
- public static final PropertyDescriptor POLL_FIELDS = new
PropertyDescriptor.Builder()
- .name("Poll Fields")
- .description("A comma-separated list of poll fields to be returned
as part of the tweet. Refer to " +
-
"https://developer.twitter.com/en/docs/twitter-api/data-dictionary/object-model/poll
" +
- "for proper usage. Possible field values include: " +
- "duration_minutes, end_datetime, id, options,
voting_status")
- .required(false)
- .addValidator(StandardValidators.NON_EMPTY_VALIDATOR)
- .build();
- public static final PropertyDescriptor PLACE_FIELDS = new
PropertyDescriptor.Builder()
- .name("Place Fields")
- .description("A comma-separated list of place fields to be
returned as part of the tweet. Refer to " +
-
"https://developer.twitter.com/en/docs/twitter-api/data-dictionary/object-model/place
" +
- "for proper usage. Possible field values include: " +
- "contained_within, country, country_code, full_name, geo,
id, name, place_type")
- .required(false)
- .addValidator(StandardValidators.NON_EMPTY_VALIDATOR)
- .build();
- public static final PropertyDescriptor EXPANSIONS = new
PropertyDescriptor.Builder()
- .name("Expansions")
- .description("A comma-separated list of expansions for objects in
the returned tweet. See " +
-
"https://developer.twitter.com/en/docs/twitter-api/expansions " +
- "for proper usage. Possible field values include: " +
- "author_id, referenced_tweets.id,
referenced_tweets.id.author_id, entities.mentions.username, " +
- "attachments.poll_ids, attachments.media_keys
,in_reply_to_user_id, geo.place_id")
- .required(false)
- .addValidator(StandardValidators.NON_EMPTY_VALIDATOR)
- .build();
-
- public static final Relationship REL_SUCCESS = new Relationship.Builder()
- .name("success")
- .description("FlowFiles containing an array of one or more Tweets")
- .build();
-
- private static final List<PropertyDescriptor> DESCRIPTORS = List.of(
- ENDPOINT,
- BASE_PATH,
- BEARER_TOKEN,
- QUEUE_SIZE,
- BATCH_SIZE,
- BACKOFF_ATTEMPTS,
- BACKOFF_TIME,
- MAXIMUM_BACKOFF_TIME,
- CONNECT_TIMEOUT,
- READ_TIMEOUT,
- BACKFILL_MINUTES,
- TWEET_FIELDS,
- USER_FIELDS,
- MEDIA_FIELDS,
- POLL_FIELDS,
- PLACE_FIELDS,
- EXPANSIONS
- );
-
- private static final Set<Relationship> RELATIONSHIPS = Set.of(REL_SUCCESS);
-
- private TweetStreamService tweetStreamService;
-
- private volatile BlockingQueue<String> messageQueue;
-
- private final AtomicBoolean streamStarted = new AtomicBoolean(false);
-
- @Override
- public Set<Relationship> getRelationships() {
- return RELATIONSHIPS;
- }
-
- @Override
- public final List<PropertyDescriptor> getSupportedPropertyDescriptors() {
- return DESCRIPTORS;
- }
-
- @OnScheduled
- public void onScheduled(final ProcessContext context) {
- messageQueue = new
LinkedBlockingQueue<>(context.getProperty(QUEUE_SIZE).asInteger());
- streamStarted.set(false);
- }
-
- @Override
- public void onTrigger(ProcessContext context, ProcessSession session)
throws ProcessException {
- startTweetStreamService(context);
-
- final String firstTweet = messageQueue.poll();
- if (firstTweet == null) {
- context.yield();
- return;
- }
-
- final AtomicInteger tweetCount = new AtomicInteger(1);
- FlowFile flowFile = session.create();
- flowFile = session.write(flowFile, out -> {
- final int batchSize = context.getProperty(BATCH_SIZE).asInteger();
- String tweet = firstTweet;
- out.write('[');
- out.write(tweet.getBytes(StandardCharsets.UTF_8));
- while (tweetCount.get() < batchSize && (tweet =
messageQueue.poll()) != null) {
- out.write(',');
- out.write(tweet.getBytes(StandardCharsets.UTF_8));
- tweetCount.getAndIncrement();
- }
- out.write(']');
- });
-
- final Map<String, String> attributes = new HashMap<>();
- attributes.put(CoreAttributes.MIME_TYPE.key(), "application/json");
- attributes.put(CoreAttributes.FILENAME.key(), String.format("%s.json",
UUID.randomUUID()));
- attributes.put("tweets", Integer.toString(tweetCount.get()));
- flowFile = session.putAllAttributes(flowFile, attributes);
-
- session.transfer(flowFile, REL_SUCCESS);
-
- final String endpointName = context.getProperty(ENDPOINT).getValue();
- final String transitUri =
tweetStreamService.getTransitUri(endpointName);
-
- session.getProvenanceReporter().receive(flowFile, transitUri);
- }
-
- @OnPrimaryNodeStateChange
- public void onPrimaryNodeStateChange(final PrimaryNodeState newState) {
- if (newState == PrimaryNodeState.PRIMARY_NODE_REVOKED) {
- stopTweetStreamService();
- }
- }
-
- @OnStopped
- public void onStopped() {
- stopTweetStreamService();
- emptyQueue();
- }
-
- @Override
- public void migrateProperties(PropertyConfiguration config) {
- config.renameProperty("stream-endpoint", ENDPOINT.getName());
- config.renameProperty("base-path", BASE_PATH.getName());
- config.renameProperty("bearer-token", BEARER_TOKEN.getName());
- config.renameProperty("queue-size", QUEUE_SIZE.getName());
- config.renameProperty("batch-size", BATCH_SIZE.getName());
- config.renameProperty("backoff-attempts", BACKOFF_ATTEMPTS.getName());
- config.renameProperty("backoff-time", BACKOFF_TIME.getName());
- config.renameProperty("maximum-backoff-time",
MAXIMUM_BACKOFF_TIME.getName());
- config.renameProperty("connect-timeout", CONNECT_TIMEOUT.getName());
- config.renameProperty("read-timeout", READ_TIMEOUT.getName());
- config.renameProperty("backfill-minutes", BACKFILL_MINUTES.getName());
- config.renameProperty("tweet-fields", TWEET_FIELDS.getName());
- config.renameProperty("user-fields", USER_FIELDS.getName());
- config.renameProperty("media-fields", MEDIA_FIELDS.getName());
- config.renameProperty("poll-fields", POLL_FIELDS.getName());
- config.renameProperty("place-fields", PLACE_FIELDS.getName());
- config.renameProperty("expansions", EXPANSIONS.getName());
- }
-
- private void startTweetStreamService(final ProcessContext context) {
- if (streamStarted.compareAndSet(false, true)) {
- tweetStreamService = new TweetStreamService(context, messageQueue,
getLogger());
- tweetStreamService.start();
- }
-
- }
-
- private void stopTweetStreamService() {
- if (streamStarted.compareAndSet(true, false)) {
- if (tweetStreamService != null) {
- tweetStreamService.stop();
- }
- tweetStreamService = null;
-
- if (!messageQueue.isEmpty()) {
- getLogger().warn("Stopped consuming stream: unprocessed
messages [{}]", messageQueue.size());
- }
- }
- }
-
- private void emptyQueue() {
- while (!messageQueue.isEmpty()) {
- messageQueue.poll();
- }
- }
-}
diff --git
a/nifi-extension-bundles/nifi-social-media-bundle/nifi-twitter-processors/src/main/java/org/apache/nifi/processors/twitter/StreamEndpoint.java
b/nifi-extension-bundles/nifi-social-media-bundle/nifi-twitter-processors/src/main/java/org/apache/nifi/processors/twitter/StreamEndpoint.java
deleted file mode 100644
index 2b77370f6e2..00000000000
---
a/nifi-extension-bundles/nifi-social-media-bundle/nifi-twitter-processors/src/main/java/org/apache/nifi/processors/twitter/StreamEndpoint.java
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.nifi.processors.twitter;
-
-public enum StreamEndpoint {
- SAMPLE_ENDPOINT("Sample Endpoint", "/2/tweets/sample/stream"),
- SEARCH_ENDPOINT("Search Endpoint", "/2/tweets/search/stream");
-
- private String endpointName;
- private String path;
-
- StreamEndpoint(final String endpointName, final String path) {
- this.endpointName = endpointName;
- this.path = path;
- }
-
- public String getEndpointName() {
- return this.endpointName;
- }
-
- public String getPath() {
- return this.path;
- }
-}
diff --git
a/nifi-extension-bundles/nifi-social-media-bundle/nifi-twitter-processors/src/main/java/org/apache/nifi/processors/twitter/TweetStreamService.java
b/nifi-extension-bundles/nifi-social-media-bundle/nifi-twitter-processors/src/main/java/org/apache/nifi/processors/twitter/TweetStreamService.java
deleted file mode 100644
index c22455237e4..00000000000
---
a/nifi-extension-bundles/nifi-social-media-bundle/nifi-twitter-processors/src/main/java/org/apache/nifi/processors/twitter/TweetStreamService.java
+++ /dev/null
@@ -1,252 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.nifi.processors.twitter;
-
-import com.twitter.clientlib.ApiClient;
-import com.twitter.clientlib.ApiException;
-import com.twitter.clientlib.TwitterCredentialsBearer;
-import com.twitter.clientlib.api.TwitterApi;
-import org.apache.commons.lang3.concurrent.BasicThreadFactory;
-import org.apache.nifi.components.PropertyDescriptor;
-import org.apache.nifi.logging.ComponentLog;
-import org.apache.nifi.processor.ProcessContext;
-import org.apache.nifi.processor.exception.ProcessException;
-
-import java.io.BufferedReader;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.InputStreamReader;
-import java.nio.charset.StandardCharsets;
-import java.util.HashSet;
-import java.util.Objects;
-import java.util.Set;
-import java.util.concurrent.BlockingQueue;
-import java.util.concurrent.Executors;
-import java.util.concurrent.ScheduledExecutorService;
-import java.util.concurrent.ThreadFactory;
-import java.util.concurrent.TimeUnit;
-
-public class TweetStreamService {
- private final BlockingQueue<String> queue;
- private final ComponentLog logger;
-
- private ScheduledExecutorService executorService;
- private final ThreadFactory threadFactory;
-
- private final Set<String> tweetFields;
- private final Set<String> userFields;
- private final Set<String> mediaFields;
- private final Set<String> pollFields;
- private final Set<String> placeFields;
- private final Set<String> expansions;
- private final int backfillMinutes;
- private final TwitterApi api;
- private InputStream stream;
-
- private final int backoffAttempts;
- private final long backoffTime;
- private final long maximumBackoff;
-
- private long backoffMultiplier;
- private int attemptCounter;
-
- private final StreamEndpoint endpoint;
-
- public TweetStreamService(final ProcessContext context, final
BlockingQueue<String> queue, final ComponentLog logger) {
- Objects.requireNonNull(context);
- Objects.requireNonNull(queue);
- Objects.requireNonNull(logger);
-
- this.queue = queue;
- this.logger = logger;
-
- final String endpointName =
context.getProperty(ConsumeTwitter.ENDPOINT).getValue();
- if (ConsumeTwitter.ENDPOINT_SAMPLE.getValue().equals(endpointName)) {
- this.endpoint = StreamEndpoint.SAMPLE_ENDPOINT;
- } else {
- this.endpoint = StreamEndpoint.SEARCH_ENDPOINT;
- }
-
- this.tweetFields = parseCommaSeparatedProperties(context,
ConsumeTwitter.TWEET_FIELDS);
- this.userFields = parseCommaSeparatedProperties(context,
ConsumeTwitter.USER_FIELDS);
- this.mediaFields = parseCommaSeparatedProperties(context,
ConsumeTwitter.MEDIA_FIELDS);
- this.pollFields = parseCommaSeparatedProperties(context,
ConsumeTwitter.POLL_FIELDS);
- this.placeFields = parseCommaSeparatedProperties(context,
ConsumeTwitter.PLACE_FIELDS);
- this.expansions = parseCommaSeparatedProperties(context,
ConsumeTwitter.EXPANSIONS);
- this.backfillMinutes =
context.getProperty(ConsumeTwitter.BACKFILL_MINUTES).asInteger();
-
- this.backoffMultiplier = 1L;
- this.backoffAttempts =
context.getProperty(ConsumeTwitter.BACKOFF_ATTEMPTS).asInteger();
- this.attemptCounter = 0;
- this.backoffTime =
context.getProperty(ConsumeTwitter.BACKOFF_TIME).asTimePeriod(TimeUnit.SECONDS);
- this.maximumBackoff =
context.getProperty(ConsumeTwitter.MAXIMUM_BACKOFF_TIME).asTimePeriod(TimeUnit.SECONDS);
-
- ApiClient client = new ApiClient();
- final int connectTimeout =
context.getProperty(ConsumeTwitter.CONNECT_TIMEOUT).asTimePeriod(TimeUnit.MILLISECONDS).intValue();
- final int readTimeout =
context.getProperty(ConsumeTwitter.READ_TIMEOUT).asTimePeriod(TimeUnit.MILLISECONDS).intValue();
- final TwitterCredentialsBearer bearer = new
TwitterCredentialsBearer(context.getProperty(ConsumeTwitter.BEARER_TOKEN).getValue());
- client.setConnectTimeout(connectTimeout);
- client.setReadTimeout(readTimeout);
- client.setTwitterCredentials(bearer);
- api = new TwitterApi(client);
-
- final String basePath =
context.getProperty(ConsumeTwitter.BASE_PATH).getValue();
- api.getApiClient().setBasePath(basePath);
-
- threadFactory =
BasicThreadFactory.builder().namingPattern(ConsumeTwitter.class.getSimpleName()).build();
- }
-
- public String getTransitUri(final String endpoint) {
- if (endpoint.equals(StreamEndpoint.SAMPLE_ENDPOINT.getEndpointName()))
{
- return api.getApiClient().getBasePath() +
StreamEndpoint.SAMPLE_ENDPOINT.getPath();
- } else if
(endpoint.equals(StreamEndpoint.SEARCH_ENDPOINT.getEndpointName())) {
- return api.getApiClient().getBasePath() +
StreamEndpoint.SEARCH_ENDPOINT.getPath();
- } else {
- logger.warn("Unrecognized endpoint in getTransitUri. Returning
basePath");
- return api.getApiClient().getBasePath();
- }
- }
-
- /**
- * This method would be called when we would like the stream to get
started. This method will spin off a thread that
- * will continue to queue tweets on to the given queue passed in the
constructor. The thread will continue
- * to run until {@code stop} is called.
- */
- public void start() {
- this.executorService =
Executors.newSingleThreadScheduledExecutor(threadFactory);
- executorService.execute(new TweetStreamStarter());
- }
-
- /**
- * This method would be called when we would like the stream to get
stopped. The stream will be closed and the
- * executorService will be shut down.
- */
- public void stop() {
- if (stream != null) {
- try {
- stream.close();
- } catch (IOException e) {
- logger.error("Closing response stream failed", e);
- }
- }
-
- executorService.shutdownNow();
- executorService = null;
- }
-
- private Long calculateBackoffDelay() {
- long backoff = backoffMultiplier * backoffTime;
- return Math.min(backoff, maximumBackoff);
- }
-
- private void scheduleStartStreamWithBackoff() {
- // use exponential(by factor of 2) backoff in scheduling the next
TweetStreamStarter
- if (attemptCounter >= backoffAttempts) {
- throw new ProcessException(String.format("Connection failed after
maximum attempts [%d]", attemptCounter));
- }
- attemptCounter += 1;
- long delay = calculateBackoffDelay();
- backoffMultiplier *= 2;
- logger.info("Scheduling new stream connection after delay [{} s]",
delay);
- executorService.schedule(new TweetStreamStarter(), delay,
TimeUnit.SECONDS);
- }
-
- private void resetBackoff() {
- attemptCounter = 0;
- backoffMultiplier = 1L;
- }
-
- private class TweetStreamStarter implements Runnable {
- @Override
- public void run() {
- try {
- if (endpoint.equals(StreamEndpoint.SAMPLE_ENDPOINT)) {
- stream = api.tweets().sampleStream()
- .expansions(expansions)
- .tweetFields(tweetFields)
- .userFields(userFields)
- .mediaFields(mediaFields)
- .placeFields(placeFields)
- .pollFields(pollFields)
- .backfillMinutes(backfillMinutes)
- .execute();
- } else {
- stream = api.tweets().searchStream()
- .expansions(expansions)
- .tweetFields(tweetFields)
- .userFields(userFields)
- .mediaFields(mediaFields)
- .placeFields(placeFields)
- .pollFields(pollFields)
- .backfillMinutes(backfillMinutes)
- .execute();
- }
- executorService.execute(new TweetStreamHandler());
- } catch (final ApiException e) {
- stream = null;
- logger.warn("Twitter Stream [{}] API connection failed: HTTP
{}", endpoint.getEndpointName(), e.getCode(), e);
- scheduleStartStreamWithBackoff();
- } catch (final Exception e) {
- stream = null;
- logger.warn("Twitter Stream [{}] connection failed",
endpoint.getEndpointName(), e);
- scheduleStartStreamWithBackoff();
- }
- }
- }
-
- private class TweetStreamHandler implements Runnable {
- @Override
- public void run() {
- try (BufferedReader reader = new BufferedReader(new
InputStreamReader(stream, StandardCharsets.UTF_8))) {
- String tweetRecord = reader.readLine();
- while (tweetRecord != null) {
- // Skip empty lines received from the Twitter Stream
- if (tweetRecord.isEmpty()) {
- tweetRecord = reader.readLine();
- continue;
- }
-
- queue.put(tweetRecord);
-
- // reset backoff multiplier upon successful receipt of a
tweet
- resetBackoff();
-
- tweetRecord = reader.readLine();
- }
- } catch (final IOException e) {
- logger.info("Stream is closed or has stopped", e);
- } catch (final InterruptedException e) {
- logger.info("Interrupted while adding Tweet to queue", e);
- return;
- }
- logger.info("Stream processing completed");
- scheduleStartStreamWithBackoff();
- }
- }
-
- private Set<String> parseCommaSeparatedProperties(final ProcessContext
context, final PropertyDescriptor property) {
- Set<String> fields = null;
- if (context.getProperty(property).isSet()) {
- fields = new HashSet<>();
- final String fieldsString =
context.getProperty(property).getValue();
- for (final String field: fieldsString.split(",")) {
- fields.add(field.trim());
- }
- }
- return fields;
- }
-}
diff --git
a/nifi-extension-bundles/nifi-social-media-bundle/nifi-twitter-processors/src/main/resources/META-INF/services/org.apache.nifi.processor.Processor
b/nifi-extension-bundles/nifi-social-media-bundle/nifi-twitter-processors/src/main/resources/META-INF/services/org.apache.nifi.processor.Processor
deleted file mode 100644
index 27a2fe6e7a3..00000000000
---
a/nifi-extension-bundles/nifi-social-media-bundle/nifi-twitter-processors/src/main/resources/META-INF/services/org.apache.nifi.processor.Processor
+++ /dev/null
@@ -1,15 +0,0 @@
-# Licensed to the Apache Software Foundation (ASF) under one or more
-# contributor license agreements. See the NOTICE file distributed with
-# this work for additional information regarding copyright ownership.
-# The ASF licenses this file to You under the Apache License, Version 2.0
-# (the "License"); you may not use this file except in compliance with
-# the License. You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-org.apache.nifi.processors.twitter.ConsumeTwitter
diff --git
a/nifi-extension-bundles/nifi-social-media-bundle/nifi-twitter-processors/src/test/java/org/apache/nifi/processors/twitter/TestConsumeTwitter.java
b/nifi-extension-bundles/nifi-social-media-bundle/nifi-twitter-processors/src/test/java/org/apache/nifi/processors/twitter/TestConsumeTwitter.java
deleted file mode 100644
index 4e6f490a598..00000000000
---
a/nifi-extension-bundles/nifi-social-media-bundle/nifi-twitter-processors/src/test/java/org/apache/nifi/processors/twitter/TestConsumeTwitter.java
+++ /dev/null
@@ -1,119 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.nifi.processors.twitter;
-
-import mockwebserver3.MockResponse;
-import mockwebserver3.MockWebServer;
-import org.apache.nifi.flowfile.attributes.CoreAttributes;
-import org.apache.nifi.util.MockFlowFile;
-import org.apache.nifi.util.PropertyMigrationResult;
-import org.apache.nifi.util.TestRunner;
-import org.apache.nifi.util.TestRunners;
-import org.junit.jupiter.api.AfterEach;
-import org.junit.jupiter.api.BeforeEach;
-import org.junit.jupiter.api.Test;
-import org.junit.jupiter.api.Timeout;
-
-import java.io.IOException;
-import java.util.Map;
-
-import static org.junit.jupiter.api.Assertions.assertEquals;
-
-public class TestConsumeTwitter {
- private MockWebServer mockWebServer;
-
- private TestRunner runner;
-
- @BeforeEach
- public void setRunnerAndAPI() throws IOException {
- mockWebServer = new MockWebServer();
- mockWebServer.start();
-
- runner = TestRunners.newTestRunner(ConsumeTwitter.class);
-
- runner.setProperty(ConsumeTwitter.BEARER_TOKEN, "BEARER_TOKEN");
- final String basePath = mockWebServer.url("").toString();
- runner.setProperty(ConsumeTwitter.BASE_PATH, basePath);
- }
-
- @AfterEach
- public void shutdownServerAndAPI() throws IOException {
- mockWebServer.close();
- }
-
- @Test
- @Timeout(60)
- public void testReceiveSingleTweetInStream() {
- String sampleTweet = "{\"data\":{\"id\":\"123\",\"text\":\"This is a
sample tweet and is not real!\"}}";
- MockResponse response = new MockResponse.Builder()
- .code(200)
- .body(sampleTweet)
- .addHeader("Content-Type", "application/json")
- .build();
- mockWebServer.enqueue(response);
-
- runner.setProperty(ConsumeTwitter.ENDPOINT,
ConsumeTwitter.ENDPOINT_SAMPLE);
- runner.setProperty(ConsumeTwitter.QUEUE_SIZE, "10000");
- runner.setProperty(ConsumeTwitter.BATCH_SIZE, "10");
- runner.setProperty(ConsumeTwitter.BACKFILL_MINUTES, "0");
-
- runner.assertValid();
-
- // The TwitterStreamAPI class spins up another thread and might not be
done queueing tweets in one run of the
- // processor, so the test will timeout after 60 seconds.
- runner.run(1, false, true);
-
- while
(runner.getFlowFilesForRelationship(ConsumeTwitter.REL_SUCCESS).isEmpty()) {
- runner.run(1, false, false);
- }
- runner.stop();
-
- // there should only be a single FlowFile containing a tweet
- runner.assertTransferCount(ConsumeTwitter.REL_SUCCESS, 1);
- MockFlowFile flowFile =
runner.getFlowFilesForRelationship(ConsumeTwitter.REL_SUCCESS).getFirst();
- String expectedTweet = "[{\"data\":{\"id\":\"123\",\"text\":\"This is
a sample tweet and is not real!\"}}]";
- flowFile.assertContentEquals(expectedTweet);
- flowFile.assertAttributeEquals(CoreAttributes.MIME_TYPE.key(),
"application/json");
- flowFile.assertAttributeEquals("tweets", "1");
- }
-
- @Test
- void testMigrateProperties() {
- final Map<String, String> expectedRenamed = Map.ofEntries(
- Map.entry("stream-endpoint",
ConsumeTwitter.ENDPOINT.getName()),
- Map.entry("base-path", ConsumeTwitter.BASE_PATH.getName()),
- Map.entry("bearer-token",
ConsumeTwitter.BEARER_TOKEN.getName()),
- Map.entry("queue-size", ConsumeTwitter.QUEUE_SIZE.getName()),
- Map.entry("batch-size", ConsumeTwitter.BATCH_SIZE.getName()),
- Map.entry("backoff-attempts",
ConsumeTwitter.BACKOFF_ATTEMPTS.getName()),
- Map.entry("backoff-time",
ConsumeTwitter.BACKOFF_TIME.getName()),
- Map.entry("maximum-backoff-time",
ConsumeTwitter.MAXIMUM_BACKOFF_TIME.getName()),
- Map.entry("connect-timeout",
ConsumeTwitter.CONNECT_TIMEOUT.getName()),
- Map.entry("read-timeout",
ConsumeTwitter.READ_TIMEOUT.getName()),
- Map.entry("backfill-minutes",
ConsumeTwitter.BACKFILL_MINUTES.getName()),
- Map.entry("tweet-fields",
ConsumeTwitter.TWEET_FIELDS.getName()),
- Map.entry("user-fields", ConsumeTwitter.USER_FIELDS.getName()),
- Map.entry("media-fields",
ConsumeTwitter.MEDIA_FIELDS.getName()),
- Map.entry("poll-fields", ConsumeTwitter.POLL_FIELDS.getName()),
- Map.entry("place-fields",
ConsumeTwitter.PLACE_FIELDS.getName()),
- Map.entry("expansions", ConsumeTwitter.EXPANSIONS.getName())
- );
-
- final PropertyMigrationResult propertyMigrationResult =
runner.migrateProperties();
- assertEquals(expectedRenamed,
propertyMigrationResult.getPropertiesRenamed());
- }
-}
diff --git a/nifi-extension-bundles/nifi-social-media-bundle/pom.xml
b/nifi-extension-bundles/nifi-social-media-bundle/pom.xml
deleted file mode 100644
index 2914f8caabf..00000000000
--- a/nifi-extension-bundles/nifi-social-media-bundle/pom.xml
+++ /dev/null
@@ -1,31 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
- Licensed to the Apache Software Foundation (ASF) under one or more
- contributor license agreements. See the NOTICE file distributed with
- this work for additional information regarding copyright ownership.
- The ASF licenses this file to You under the Apache License, Version 2.0
- (the "License"); you may not use this file except in compliance with
- the License. You may obtain a copy of the License at
- http://www.apache.org/licenses/LICENSE-2.0
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
https://maven.apache.org/xsd/maven-4.0.0.xsd">
- <modelVersion>4.0.0</modelVersion>
- <parent>
- <groupId>org.apache.nifi</groupId>
- <artifactId>nifi-standard-shared-bom</artifactId>
- <version>2.11.0-SNAPSHOT</version>
-
<relativePath>../nifi-standard-shared-bundle/nifi-standard-shared-bom</relativePath>
- </parent>
- <artifactId>nifi-social-media-bundle</artifactId>
- <packaging>pom</packaging>
-
- <modules>
- <module>nifi-twitter-processors</module>
- <module>nifi-social-media-nar</module>
- </modules>
-</project>
diff --git a/nifi-extension-bundles/pom.xml b/nifi-extension-bundles/pom.xml
index 08f91a3c64b..700d19d8a84 100755
--- a/nifi-extension-bundles/pom.xml
+++ b/nifi-extension-bundles/pom.xml
@@ -34,7 +34,6 @@
<module>nifi-kafka-bundle</module>
<module>nifi-confluent-platform-bundle</module>
<module>nifi-aws-bundle</module>
- <module>nifi-social-media-bundle</module>
<module>nifi-enrich-bundle</module>
<module>nifi-hl7-bundle</module>
<module>nifi-mongodb-bundle</module>