Releases: cdapio/cdap
Cask Data Application Platform 3.5.1
Known Issues
-
If you are upgrading an authorization-enabled CDAP instance, you will need to give the cdap user ADMIN privileges on all existing CDAP namespaces. See the Administration Manual: Upgrading for your distribution for details. (CDAP-7175)
-
In CDAP 3.5.0, new
kafka.server.*
properties replace older properties such askafka.log.dir
, as described in the Administration Manual: Appendices: cdap-site.xml.If you are upgrading from CDAP 3.4.x to 3.5.x, and you have set a value for
kafka.log.dir
by using Cloudera Manager's safety-valve mechanism, you need to change to the new propertykafka.server.log.dirs
, as the deprecatedkafka.log.dir
is being ignored in favor of the new property. If you don't, your custom value will be replaced with the default value. (CDAP-7179)
Improvements
-
Added the ability to specify an announce address and port for the
appfabric
anddataset
services.Deprecated the properties
app.bind.address
anddataset.service.bind.address
, replacing them withmaster.services.bind.address
as the bind address for master services.Added the properties
master.services.announce.address
,app.announce.port
, anddataset.service.announce.port
for use as announce addresses that are different from the bind address. (CDAP-7192) -
Upgraded the version of
netty-http
used in CDAP to version 0.15, resolving a problem with a NullPointerException being logged on the closing of a network connection. (CDAP-7240) -
Snapshot sinks now allow users to specify a property
cleanPartitionsOlderThan
that cleans up any snapshots older than "x" days. (HYDRATOR-578)
Bug Fixes
- PartitionConsumer appropriately drops partitions that have been deleted from a corresponding PartitionedFileSet. (CDAP-6215)
- Fixed an issue with searching for an entity in Cask Tracker by metadata after a tag with the same prefix has been removed. (CDAP-6404)
- Fixed a problem with duplicate logs showing for a running program. (CDAP-7138)
- Fixed a bug in the upgrade tool to allow it to run on a CDAP instance with authorization enabled. (CDAP-7175)
- Fixed an issue with uploading an application JAR or file to a stream through the CDAP UI. (CDAP-7178)
- Fixed a problem with the property
dataset.service.bind.address
having no effect. (CDAP-7187) - Corrected errors in the documentation to correctly show how to set the schema on an existing table. (CDAP-7199)
- Lineage information is now returned for deleted datasets. (CDAP-7204)
- Fixed a problem with being unable to delete a namespace if a configured keytab file doesn't exist. (CDAP-7222)
- Fixed a problem with a NullPointerException when the CDAP UI fetches a log. (CDAP-7235)
- Prevented accidental grant of additional actions to a user as part of a grant operation when using Apache Sentry as the authorization provider. (CDAP-7237)
- Fixed a problem with the FileBatchSource not working with Azure Blob Storage. (CDAP-7248)
- Fixed a problem with CDAP Explore using Tez on Azure HDInsight. (CDAP-7249)
- Fixed an issue where the Joiner plugin was failing in Hydrator pipelines executing in a Spark environment. (HYDRATOR-912)
- Fixed a bug that caused the Database Source, Joiner, GroupByAggregate, and Deduplicate plugins to fail on certain versions of Spark. (HYDRATOR-922)
- Fixed an error in the documentation of the HDFS Source and Sink with respect to the alias under high-availability. (HYDRATOR-932)
- Fixed an issue preventing the adding of additional tags after an existing tag had been deleted. (TRACKER-217)
Cask Data Application Platform 3.5.0
New Features
- All HBase Tables created through CDAP will now have a key cdap.version in the HTableDescriptor. (CDAP-2963)
- Add location for cdap-cli.sh to PATH in distributed CDAP packages. (CDAP-3368)
- Improved performance of the Dataset Service. (CDAP-3890)
- Created pre-defined alert definitions in the CDAP Ambari Service. (CDAP-4106)
- Support for HA CDAP installations in the CDAP Ambari Service. (CDAP-4107)
- Support for Kerberos-enabled clusters via the CDAP Ambari service. (CDAP-4109)
- CDAP Auth Server is now supported in the CDAP Ambari Service on Ambari clusters which have Kerberos enabled. (CDAP-4110)
- Added an authorization extension backed by Apache Sentry to enforce authorization on CDAP entities. (CDAP-4288)
- Added a way to cache authorization policies so every authorization enforcement request does not have to make a remote call. Caching is configurable—it can be enabled by setting security.authorization.cache.enabled to true. TTL for cache entries (security.authorization.cache.ttl.secs) as well as refresh interval (security.authorization.cache.refresh.interval.secs) is also configurable. (CDAP-4913)
- Provided access to Partitioner and Comparator classes to the MapReduceTaskContext by implementing ProgramLifeCycle. (CDAP-5740)
- Provided setting of YARN container resources requirements for all program types via preferences and runtime arguments. (CDAP-5770)
- Added protection for a partition of a file set from being deleted while a query is reading the partition. (CDAP-6062)
- CDAP namespaces can now be mapped to custom namespaces in storage providers. While creating a namespace, users can specify the Filesystem directory, HBase namespace and Hive database for that namespace. These settings cannot be changed once the namespace has been successfully created. (CDAP-6153)
- Enable authorization, lineage, and audit log at the data operation level for all Datasets. (CDAP-6168)
- Addes a new log viewer across CDAP, Cask Hydrator, and Cask Tracker, wherever appropriate. Provides easier navigation and debugging functionality for logs of different entities. (CDAP-6174)
- Added an indicator in the UI of the CDAP mode (distributed or standalone, secure or insecure). (CDAP-6235)
- Added authorization to the Secure Key HTTP RESTful APIs. To create a secure key, a user needs WRITE privilege on the namespace in which the key is being created. Users can only view secure keys that they have access to. To delete a key, ADMIN privilege is required. (CDAP-6393)
- Exposed the secure store APIs to Programs. (CDAP-6456)
- Added authorization for listing and viewing CDAP entities. (CDAP-6516)
- Fixed an issue where the UI would ignore the configured port when connecting to the CDAP Router. (CDAP-7002)
- Added an alpha feature: Hydrator Data Pipeline preview (CDAP SDK only). (HYDRATOR-156)
- Added support for executing custom actions in the Cask Hydrator pipelines. (HYDRATOR-162)
- Re-organized the bottom panel in Cask Hydrator to be in-context. Pipeline-level information is moved to a top panel and plugin-level information is moved to a modal dialog. (HYDRATOR-168)
- Re-organized the left panel in Cask Hydrator studio view to have a maximum of four categories of plugin types: Source, Transform, Sink, and Actions. All other types are consolidated into one of these types. (HYDRATOR-379)
- Implemented the Value Mapper plugin for Cask Hydrator plugins. This is a type of transform that maps string values of a field in the input record to another value. (HYDRATOR-501)
- Added the XML Parser Transform plugin to Cask Hydrator plugins. This plugin uses XPath to extract fields from a complex XML Event. It is generally used in conjunction with the XML Reader Source Plugin. (HYDRATOR-502)
- Added the XML Reader Source Plugin to Cask Hydrator plugins. This plugin allows users to read XML files stored on HDFS. (HYDRATOR-503)
- Implemented the Cask Hydrator plugin for Row Denormalizer aggregator. This plugin converts raw data into de-normalized data based on a key column. De-normalized data can be easier and faster to query. (HYDRATOR-506)
- Added the Cobol Copybook source plugin to Cask Hydrator plugins. This source plugin allows users to read and process mainframe files defined using COBOL Copybook. (HYDRATOR-507)
- Added the Excel Reader Source plugin to Cask Hydrator Plugins. This plugin provides the ability to read data from one or more Excel file(s). (HYDRATOR-514)
- Adds macros to pipeline plugin configurations. This allows users to set macros for plugin properties which can be provided as runtime arguments while scheduling and running the pipeline. (HYDRATOR-629)
- Adds a new Run Configuration player for published pipeline views. This allows users to set runtime arguments while scheduling or running a pipeline. (HYDRATOR-634)
- Added a Twitter source for Spark Streaming pipelines. (HYDRATOR-685)
- Added the ability to edit user properties for a dataset directly in Cask Tracker. (TRACKER-96)
- Added the Cask Tracker Meter to measure how active a dataset is in a cluster on a scale of zero to 100. (TRACKER-98)
- Added the ability to add, remove, and manage a common dictionary of Preferred Tags in Cask Tracker and apply them to datasets. (TRACKER-100)
- Added the ability to preview data directly in the Cask Tracker UI. (TRACKER-104)
- Added the ability to view usage metrics about datasets in Cask Tracker. Users can view how many applications and programs are accessing each dataset using service endpoints and the Tracker UI. (TRACKER-105)
Improvements
- Created a Docker-specific ENTRYPOINT script to support passing arguments. (CDAP-1545)
- Improved the way that MapReduce failures are reported. (CDAP-4065)
- Warns if either the app-fabric or router bind addresses are configured with a loopback address. (CDAP-4775)
- The number of containers for the CDAP Explore service is no longer configurable and will be ignored upon specification. It will always be set to one (1). (CDAP-5000)
- Now publishing stdout and stderr logs for MapReduce containers to CDAP. (CDAP-5336)
- Allowing the setting of batch size for flowlet process methods via preferences and runtime arguments. (CDAP-5601)
- Added support for long-running Spark jobs in a Kerberos-enabled cluster. (CDAP-5794)
- Added support for starting extensions in distributed mode. (CDAP-5874)
- Setting the JAVA_LIBRARY_PATH now causes CDAP Master to load Hadoop native libraries at startup. (CDAP-5959)
- CDAP Upgrade tasks are now available in the CDAP Ambari Service. (CDAP-5969)
- CDAP's Tephra dependency has been changed to depend on the Apache Incubator Tephra project. (CDAP-6034)
- Improved the error message given on application deployment failure due to a missing Spark library. (CDAP-6206)
- Added support in the log API for field suppression in JSON format. (CDAP-6216)
- Added the ability to specify a CDAP Master's temporary directory. (CDAP-6246)
- Introduced new experimental dataset APIs for updating a dataset's properties. (CDAP-6276)
- Allowed specifying individual Java heap sizes for Java services in cdap-env.sh. (CDAP-6327)
- Declared startup script contents as read-only to prevent them from being overridden by a user in cdap-env.sh. (CDAP-6350)
- Added "Quick Links" for the CDAP UI, Cask Hydrator, and Cask Tracker in the Ambari 2.3+ UI. (CDAP-6361)
- Added support for CDAP services over SSL in Ambari. (CDAP-6362)
- Provided service dependencies for Ambari (requires Ambari 2.2+). ([CDAP-6363](https://issues.cask.c...
Cask Data Application Platform 3.3.7
Improvements
- Improved program launch performance to avoid large cpu spikes when multiple programs are launched at the same time. (CDAP-7021)
Bug Fixes
- Created a Docker-specific ENTRYPOINT script to easily support arguments.(CDAP-1545)
- Fixed an issue that caused massive log message when there are underlying HDFS issues. (CDAP-6643)
- Fixes issues that prevents log saver from performing cleanup when metadata is present for a non-existing file. (CDAP-6829)
- Fixes issues that makes Log Saver more resilient to errors while checkpointing. (CDAP-6852)
- Improved performance in cube datasets when querying for more than one measure in a query. This will also improve metrics query performance. (CDAP-6860)
Cask Data Application Platform 3.3.6
Bug Fixes
- Made log saver process resilient to underlying HDFS exceptions. (CDAP-6465)
- Fixed a problem with the CDAP Master leaking memory (due to a Twill Zookeeper issue) whenever a program is launched. (CDAP-6486)
- Fixed a performance issue with the log handler by setting a maximum limit for the reading of log events from Kafka before requiring reading the events from disk storage. (CDAP-6493)
- Fixed a problem with the log saver slowing down when Kafka partitions become highly skewed. (CDAP-6545)
Cask Data Application Platform 3.4.3
Bug Fixes
- Fixed an issue where configuration of the FileSource was failing while setting the properties for the FileInputFormat. (CDAP-6238)
- Fixed a bug in HDFSink where we now emit a null character in a UTF-8 encoding if a field is null. (CDAP-6255)
- HDFSSink can now be used alongside other sinks in a Hydrator pipeline. (CDAP-6258)
- Release 3.4.0 introduced an infinite-scroll for the display of input and output schemas and the version (1.2.2) that we used of the infinite scroll component had performance problems. We have downgraded the infinite scroll component we use to restore the performance in Hydrator views. (CDAP-6302)
- Fixed a bug that the program run record was not correctly reflected in CDAP if the corresponding YARN application failed to start. (CDAP-6311)
Cask Data Application Platform 3.3.5
Bug Fixes
- Fixed a bug that the program run record was not correctly reflected in CDAP if the corresponding YARN application failed to start. (CDAP-6311)
Cask Data Application Platform 3.4.2
Bug Fixes
- Fixed integrating navigator app in Tracker UI. The POST body request that was sent while deploying navigator app was using an older deprecated property (UI was using ‘metadataKafkaConfig’ instead of ‘auditKafkaConfig’). This should enable using navigator app in Tracker UI. (CDAP-5998)
- Fixed an issue in cloning a Hydrator pipeline which used to happen when a user navigate from CDAP to Hydrator to clone a pipeline in Hydrator UI. (CDAP-6096)
- Fixed a NullPointerException issue in Spark when saving RDD to PartitionedFileSet dataset. (CDAP-6109)
- Fixed the Hydrator Hive batch source so that it no longer throws a ClassNotFoundException. (CDAP-6041)
- Fixed Hydrator CSVParser so that a nullable field is only set to null if the parsed value is an empty string, and the field is not a string or nullable string type. (CDAP-6044)
Cask Data Application Platform 3.3.4
Bug Fixes
- Explore jobs properly use the latest/updated delegation tokens.
(CDAP-5793) - Update HDFS delegation token properly for HA mode.
(CDAP-5844) - Avoid the cancellation of delegation tokens upon completion of Explore-launched MapReduce and Spark jobs, as these delegation tokens are shared by CDAP system services.
(CDAP-5855)
Cask Data Application Platform v3.4.1
Bug Fixes
- Fixed a race condition bug in ResourceCoordinator that prevented
performing partition assignment in the correct order. It affects the
metrics processor and stream coordinator.
(CDAP-4388) - Avoid the cancellation of delegation tokens upon completion of
Explore-launched MapReduce and Spark jobs, as these delegation tokens
are shared by CDAP system services.
(CDAP-5855) - Removed 'SNAPSHOT' from the artifact version of apps created by
default by the CDAP UI. This fixes deploying Cask Tracker and Navigator
apps, enabling Cask Tracker from the CDAP UI.
(CDAP-5868) - Fixed a bug that caused SDK builds to fail when using 3.3.x versions
of maven. (CDAP-5884) - Fixed the Hydrator upgrade tool to correctly write out pipeline
configs that failed to upgrade.
(CDAP-5887) - The CDAP Standalone now deploys and starts the Cask Tracker app in the
default namespace if the Tracker artifact is present.
(CDAP-5889) - Shutdown external processes started by CDAP (Zookeeper and Kafka) when
there is an error during either startup or shutdown of CDAP.
(CDAP-5898) - Fixed an issue where parsing of an AVRO schema was failing when it
included optional fields such as 'doc' or 'default'.
(CDAP-5907) - Fixed a bug in the BatchReadableRDD so that it won't skip records when
used by DataFrame. (CDAP-5947)
Known Issues
- After upgrading CDAP from a pre-3.0 version, any unprocessed metrics
data in Kafka will be lost and WARN log messages will be logged that
tell about the inability to process old data in the old format. - When running secure Hadoop clusters, debug logs from MapReduce
programs are not available.
(CDAP-797) - If the Hive Metastore is restarted while the CDAP Explore Service is
running, the Explore Service remains alive, but becomes unusable. To
correct, restart the CDAP Master — which will restart all services — as
described under "Starting CDAP Services" for your particular Hadoop
distribution in the Installation
documentation.
(CDAP-1007) - CDAP internally creates tables in the "user" space that begin with the
word"system"
. User datasets with names starting with"system"
can conflict if they were to match one of those names. To avoid this, do
not start any datasets with the word"system"
.
(CDAP-1587) - The application in the cdap-kafka-ingest-guide
does not run on Ubuntu 14.x as of CDAP 3.0.x. (CDAP-2632) - Metrics for :ref:
FileSets <datasets-fileset>
can show zero values
even if there is data present, because FileSets do not emit metrics
(CDAP-587.
(CDAP-2721) - A workflow that is scheduled by time will not be run between the
failure of the primary master and the time that the secondary takes
over. This scheduled run will not be triggered at all.
(CDAP-2831) - Spark jobs on a Kerberos-enabled CDAP cluster cannot run longer than
the delegation token expiration.
(CDAP-2920) - If the input partition filter for a PartitionedFileSet does not match
any partitions, MapReduce jobs can fail.
(CDAP-2945) - The Workflow token is in an inconsistent state for nodes in a fork
while the nodes of the fork are still running. It becomes consistent
after the join. (CDAP-3000) - When running in CDAP Standalone mode, if a MapReduce job fails
repeatedly, then the SDK hits an out-of-memory exception due toperm gen
. The Standalone needs restarting at this point.
(CDAP-3221) - For Microsoft Windows, the CDAP Standalone scripts can fail when used
with a JAVA_HOME that is defined as a path with spaces in it. A
workaround is to use a definition of JAVA_HOME that does not include
spaces, such asC:\PROGRA~1\Java\jdk1.7.0_79\bin
or
C:\ProgramData\Oracle\Java\javapath
.
(CDAP-3262) - In the CDAP CLI, executing
select *
from a dataset with many
fields generates an error.
(CDAP-3492) - A RESTful API call to retrieve workflow statistics hangs if units
(such as "s" for seconds) are not provided as part of the query.
(CDAP-3641) - If a table schema contains a field name that is a reserved word in the
Hive DDL,'enable explore'
fails.
(CDAP-3750) - During the upgrade to CDAP 3.4.1, publishing to Kafka is halted
because the CDAP Kafka service is not running. As a consequence, any
applications that sync to the CDAP metadata will become out-of-sync as
changes to the metadata made by the upgrade tool will not be published.
(CDAP-5900)
Cask Data Application Platform v3.4.0
API Changes
- Added a new Spark Java and Scala API. (CDAP-5082)
New Features
- Removed dependency on the Guava library from the
cdap-api
module. Applications are now free to use a Guava library version of their choice. (CDAP-20) - Added capability for programs to perform administrative dataset operations (create, update, truncate, drop). (CDAP-3051)
- Added the capability to configure Kafka topic for logs and notifications using the
cdap-site.xml
. (CDAP-3854) - MapReduce programs submitted via CDAP now support multiple configured inputs. (CDAP-3980)
- Added an ODBC 3.0 Driver for CDAP Datasets for Windows-based applications that support an ODBC interface. (CDAP-4807)
- Added capability to fetch the schema from a JDBC source specified for a Database plugin from inside Cask Hydrator. (CDAP-4970)
- Added a CDAP extension Cask Tracker: data discovery with metadata, audit, and lineage. (CDAP-5011)
- Added a new Cask Hydrator
batchaggregator
plugin type. An aggregator operates on a collection of records, grouping them by a key and performing an aggregation on each group. (CDAP-5146) - Added support for authorization extensions in CDAP. Extensions extend an
Authorizer
class and provide a bundle jar containing all their required dependencies. This jar is then specified using the propertysecurity.authorization.extension.jar.path
in thecdap-site.xml
. (CDAP-5172) - Added an
FTPBatchSource
that can fetch data from an FTP server in a batch pipeline of Cask Hydrator. (CDAP-5191) - Added a global search across all CDAP entities in the CDAP UI. (CDAP-5205)
- The Cask Hydrator Studio now includes the capability to configure a new type of pipeline, a "data pipeline" (beta feature). (CDAP-5274)
- The CDAP UI now supports
Sparksink
andSparkcompute
plugin types, included in a new "data pipeline" artifact. (CDAP-5360) - Added a
SparkTransform
plugin type, which allows the r"unning of a Spark job that operates as a transform in an ETL batch pipeline. (CDAP-5361) - Added a
SparkSink
plugin type, which allows the running of a Spark job (such as machine learning) on the output of an ETL batch pipeline. (CDAP-5362) - Added support for
FormatSpecification
in Spark when consuming data from a stream. (CDAP-5392) - Added an example application demonstrating the use of Spark Streaming with machine-learning and spam classifying. (CDAP-5446)
- Added experimental support for using Spark as an execution engine for CDAP Explore. (CDAP-5504)
- Added support for using Tez as an execution engine for CDAP Explore. (CDAP-5707)
- Bundled Node.js with the CDAP UI RPM and DEB packages and with the CDAP Parcels. (CDAP-5846)
Improvements
- MapReduce programs can now be configured to write metadata for each partition created using a
DynamicPartitioner
. (CDAP-4071) - Fixed an issue of not using the correct user account to access HDFS when submitting a YARN application through Apache Twill, which caused a cleanup failure (and a confusing error message) upon application termination. (CDAP-4117)
- Workflow logs now contain logs from all of the actions executed by a workflow. (CDAP-4644)
- Added a
hydrator-test
module that contains mock plugins for unit testing Hydrator plugins. (CDAP-4842) - Added to the CDAP test framework the ability to delete applications and artifacts, retrieve application information, update an application, and write and remove properties for artifacts. (CDAP-4925)
- Added a 'postaction' Cask Hydrator plugin type that runs at the end of a pipeline run, irregardless of whether the run succeeded or failed. (CDAP-4955)
- Downloading an explore query from the CDAP UI will now stream the results directly to the client. (CDAP-5001)
- Added a configuration property to Cask Hydrator TimePartitionedFileSet (TPFS) sinks that will clean out data that is older than a threshold amount of time. (CDAP-5037)
- Added runtime macros to database and post-action Cask Hydrator plugins. (CDAP-5039)
- Added a
numSplits
configuration property to Cask Hydrator database sources to allow users to configure how many splits should be used for an import query. (CDAP-5042) - The CDAP UI now allows a plugin developer to use a "textarea" in node configurations for displaying a plugin property. (CDAP-5046)
- Programs now have a
logical.start.time
runtime argument that is populated by the system to be the start time of the program. The argument can be overridden just as other runtime arguments. (CDAP-5075) - Added support for Spark streaming (to interact with the transactional datasets in CDAP), and support for concurrent Spark execution through Workflow forking. (CDAP-5082)
- Changed the format of the Cask Hydrator configuration. All pipeline stages are now together in a "stages" array instead of being broken up into separate "source", "transforms", and "sinks" arrays. (CDAP-5178)
- Added an HTTP RESTful endpoint to retrieve the state of all nodes in a workflow. (CDAP-5181)
- Added an API to retrieve the properties that were used to configure (or reconfigure) a dataset. (CDAP-5182)
- Removed dependency on Guava from the
cdap-proto
module. (CDAP-5207) - Added support for CDH 5.7. (CDAP-5228)
- The stream creation endpoint now accepts a stream configuration (with TTL, description, format specification, and notification threshold). (CDAP-5330)
- Added an API for MapReduce to retrieve information about the enclosing workflow, including its run ID. (CDAP-5376)
- Added access to workflow information in a Spark program when it is executed inside a workflow. (CDAP-5378)
- Added the ability to track the lineage of external sources and sinks in a Cask Hydrator pipeline. (CDAP-5424)
- Extended the workflow APIs to allow the use of plugins. (CDAP-5512)
- Introduced a
referenceName
property (used for lineage and annotation metadata) into all external sources and sinks. This needs to be set before using any of these plugins. (CDAP-5664) - Upgraded the Tephra version in CDAP to 0.7.1. (CDAP-5779)
Bug Fixes
- Upgraded CDAP to use Apache Twill
0.7.0-incubating
with numerous new features, improvements, and bug fixes. See the Apache Twill release notes for details. (CDAP-3498) - Upon transaction rollback, a
PartitionedFileSet
now rolls back the files for the partitions that were added and/or removed in that transaction. (CDAP-3584) - Fixed a bug with the database plugins that required a password to be specified if the user was specified, even if the password was empty. (CDAP-3749)
- Added the status for custom actions in workflow diagrams. (CDAP-4060)
- Fixed a problem with the database source where a semicolon at the end of the query would cause an error. (CDAP-4143)
- The CDAP UI now prevents users from accidentally losing their DAG by showing a browser-native popup for a confirmation before navigating away from the Cask Hydrator Studio view. (CDAP-4692)
- Fixed an issue in the Windows CDAP SDK where streams could not be deleted. (CDAP-4695)
- Fixed an issue that made Java extensions unavailable to programs, fixing the JavaScript-based Hydrator transforms under Java 8. (CDAP-4735)
- Removed
tableName
as a required setting from database sources, since theimportQuery
is sufficient. (CDAP-4908) - Renamed the Hydrator
Teradata
batch source toDatabase
. The previousDatabase
source is no longer supported. (CDAP-4921) - Changed the Cask Hydrator LogParser transform
logFormat
field from a textbox to a dropdown. (CDAP-4982) - Chang...