Release 0.2.4 - 2015-07-02

Release Notes - Apache Blur - Version 0.2.4

** Sub-task
    * [BLUR-29] - Create a Thrift based InputFormat that reads the output of a query into a MR job
    * [BLUR-295] - Long pauses during NRT updates
    * [BLUR-358] - Create a factory pattern for setting up Blur Thrift connections
    * [BLUR-359] - Blur user authentication

** Bug
    * [BLUR-7] - Better validation of the row mutation during mutation.
    * [BLUR-59] - During table creation re-read the field types from the index.
    * [BLUR-60] - NPE - ReusedBufferedIndexInput
    * [BLUR-243] - maven build not working
    * [BLUR-275] - Blur Hadoop 2.x build has hadoop 1.x dependancies still.
    * [BLUR-306] - Tables with the same name errors
    * [BLUR-313] - Let Blur run against CDH4/Hadoop 2.x
    * [BLUR-316] - Blur Shell not handling backslashes properly
    * [BLUR-325] - The MasterBasedDistributedLayout is not removing the layout when a table is deleted
    * [BLUR-329] - Shard server query cache bug
    * [BLUR-330] - Remove the ZooKeeper trace store
    * [BLUR-331] - Large Row Paging issue
    * [BLUR-332] - FileNotFoundException during stats call
    * [BLUR-341] - Fix term enumeration
    * [BLUR-347] - Cleanup of LICENSE and NOTICE files per IPMC feedback
    * [BLUR-351] - Spatial field definitions should give a helpful error when misconfigured
    * [BLUR-352] - Blur Console doesn't start due to wrong web context path in production mode
    * [BLUR-353] - Query command in shell doesn't print usage help
    * [BLUR-355] - Blur Console is taking advantage of a transitive dependency with commons-collections
    * [BLUR-356] - Blur console should ignore queries when table is disabled
    * [BLUR-370] - Memory leak when using facets in 0.2.3
    * [BLUR-372] - Cancel query is broken
    * [BLUR-373] - Allow queries in the shell to contain a minus "-" character
    * [BLUR-375] - PrimeDoc moves during MR indexing overflow
    * [BLUR-383] - Change blur console urls in jetty
    * [BLUR-384] - Remove dependency on blur-core and handle offline shards
    * [BLUR-388] - Potential divide by 0 in LoadDataContinuously#main()
    * [BLUR-389] - InputStream may not be closed upon return from EnqueueDataAsync#loadWords()
    * [BLUR-399] - Issue with table truncate call
    * [BLUR-400] - FastHdfsKeyValueDirectory has a problem with dropping commits
    * [BLUR-401] - Can't execute query from command line
    * [BLUR-406] - NPE in BaseConsoleServlet sendError
    * [BLUR-407] - ConcurrentModificationException on the table list
    * [BLUR-408] - Console queries experience 404
    * [BLUR-409] - tables call needs to handle if one table is in error state
    * [BLUR-413] - Add a entry count metric to the thrift cache
    * [BLUR-414] - Format numbers on the metrics page in blur-status project
    * [BLUR-415] - Setup client once in metrics page in blur-status
    * [BLUR-416] - Row Fetch Issue
    * [BLUR-417] - Thrift Cache Key Issue
    * [BLUR-418] - Leading wildcard issue in the super parser
    * [BLUR-419] - The reducer multiplier setting fails on the csv loader program.
    * [BLUR-420] - Csv loader program should call import on the table after completing MR job
    * [BLUR-421] - Csv loader program needs to have output path added as an argument
    * [BLUR-422] - Random duplicate detection during row overflow
    * [BLUR-423] - ./blur shell NoClassDefFoundError
    * [BLUR-425] - can't run when export BLUR_MANAGE_ZK=false
    * [BLUR-427] - Race condition in Blur's disk based doc values
    * [BLUR-433] - Block Cache creating process fragmentation
    * [BLUR-434] - Relocate the lucene-document-security project as a Blur project
    * [BLUR-435] - Create a per table lock for BulkTableUpdateCommand
    * [BLUR-437] - Snaphots not releasing their segments after the snapshot is removed
    * [BLUR-438] - Snapshot meta data files in the generations directory not being cleaned up
    * [BLUR-439] - HDFSDirectory fencing issue

** Improvement
    * [BLUR-21] - In the Selector Thrift object add the ability to only fetch the records in a Row that were Hits
    * [BLUR-105] - Index Import rollback
    * [BLUR-211] - Allow for third party field types
    * [BLUR-227] - Remove deprecated BlurReducer in the blur-maperd project
    * [BLUR-354] - Add documentation for Blur Console
    * [BLUR-357] - Include the blur-console in the start-all stop-all scripts
    * [BLUR-362] - format row & record counts
    * [BLUR-363] - implement plugin system for user authentication/authorization
    * [BLUR-365] - Add copy table function to console
    * [BLUR-366] - Add search history to the search page
    * [BLUR-367] - Add facets to the search page
    * [BLUR-380] - Console should support ssl
    * [BLUR-381] - upgrade jetty
    * [BLUR-394] - Use classifiers in pom for Hadoop profile variants
    * [BLUR-397] - Improve data loading from M/R
    * [BLUR-410] - truncate queries
    * [BLUR-411] - Show query time after running a query via the console
    * [BLUR-428] - Create rooted ZK path if it doesn't exist
    * [BLUR-432] - Explain tradeoffs in bulk mutate docs
    * [BLUR-436] - Build blur command to create input splits for BlurInputFormat

** New Feature
    * [BLUR-210] - Add the ability to create index snapshots from the shell
    * [BLUR-276] - Create an API the allows for server side manipulation of requests
    * [BLUR-342] - Support full cluster operations on random ports
    * [BLUR-348] - new Copy command in the shell
    * [BLUR-387] - Blur Spark Connector

Release 0.2.3 - 2014-07-11

** Apache Blur 0.2.3 is a re-release of 0.2.2 with a few bug fixes and a new version of Apache Blur Console.

Release 0.2.2 - 2014-05-06

Release Notes - Apache Blur - Version 0.2.2

** Bug
    * [BLUR-297] - The ShardServerEventHandler class is log noisy when clients disconnect
    * [BLUR-298] - ZooKeeperClusterStatus has several methods that are not working
    * [BLUR-299] - Custom types at the system/cluster level aren't registered when the OutputFormat creates the table.
    * [BLUR-300] - System types need to be registered before the tablecontext is loaded
    * [BLUR-301] - List command should be sorted
    * [BLUR-303] - Change class sig for DefaultBlurReducer
    * [BLUR-305] - Blur CombineInputFormat doesn't work at all
    * [BLUR-306] - Tables with the same name errors
    * [BLUR-307] - CsvBlurMapper not does work with combined input format
    * [BLUR-308] - The MR jobs tmpjars contains more jar than needed
    * [BLUR-309] - CsvBlurMapper has an extra comma in the error message
    * [BLUR-310] - Remove the index size gathering code
    * [BLUR-318] - Bug in TypeDefinitions while having separate analyzers for index and query
    * [BLUR-319] - Custom TypeDef's can get Blur into a state where one cannot make new tables.
    * [BLUR-324] - SpatialPointVectorStrategyFieldTypeDefinition is throwing an exception during indexing
    * [BLUR-325] - The MasterBasedDistributedLayout is not removing the layout when a table is deleted
    * [BLUR-326] - The thrift call shardServerList is failing
    * [BLUR-328] - Index curruption during mutateBatch calls
    * [BLUR-329] - Shard server query cache bug
    * [BLUR-330] - Remove the ZooKeeper trace store
    * [BLUR-331] - Large Row Paging issue
    * [BLUR-332] - FileNotFoundException during stats call
    * [BLUR-337] - Shard server should fail hard on a bad misconfiguration

** Improvement
    * [BLUR-302] - start-all script sometimes causes errors 
    * [BLUR-317] - Enable Changing of Compression alg and chunk size in Codec
    * [BLUR-323] - Improve error message on CustomFieldTypeDefinition
    * [BLUR-327] - Schedule a daily optimize of each shard
    * [BLUR-333] - Remove polling from the index importer
    * [BLUR-334] - Add sorting
    * [BLUR-335] - Field existence query

** New Feature
    * [BLUR-314] - Allow configurable Thrift frame size

Release 0.2.1 - 2013-11-06

Release Notes - Apache Blur - Version 0.2.1

** Sub-task
    * [BLUR-250] - Create system level third party field types
    * [BLUR-258] - Document how to use BLUR-250
    * [BLUR-262] - Change Block Cache so that merges do not effect the cache
    * [BLUR-277] - Create an API to fetch the list of total Controller Servers in the Controller Cluster.
    * [BLUR-278] - Fix the Blur shell to use the right API to fetch the list of online Controller nodes.
    * [BLUR-284] - Need to add a closing queue for the CacheValue
    * [BLUR-285] - Create a file based bitset filter
    * [BLUR-287] - Configure block cache size in blur-site



** Bug
    * [BLUR-118] - Watch Existence and Poll Watch Existence threads are not going away when a table is disabled or dropped
    * [BLUR-224] - Safemode - registerNode method is hardcoded to 60 second timeout
    * [BLUR-232] - Fix NPE during use of minicluster on ubuntu
    * [BLUR-235] - Controller startup log refers to shard server
    * [BLUR-236] - Cluster initialization in controller for non-default clusters
    * [BLUR-242] - Special/Internal fields aren't keyword analyzed on the query side.
    * [BLUR-244] - FileNotFoundException during the index import process
    * [BLUR-245] - There is a deadlock condition that can occur during mutate batch calls.
    * [BLUR-252] - During create table cluster issue
    * [BLUR-253] - Index Importer table readonly
    * [BLUR-255] - Fix javadocs on TableDescriptor for preCacheCols
    * [BLUR-257] - Fix misspelling in BlurConstants
    * [BLUR-279] - Compile Error building Blur-mapred class BlurOutputFormat
    * [BLUR-282] - All Lucene IndexInputs in Blur need to have the clone method reviewed
    * [BLUR-283] - Check that strict types on the table descriptor works as expected
    * [BLUR-286] - The sample files for a given segment need to follow the segment life cycle
    * [BLUR-288] - Need to add regex query support in the superparser and types
    * [BLUR-289] - Table Properties are not being persisted to zookeeper
    * [BLUR-293] - Add user object to Thrift API and session on server side




** Improvement
    * [BLUR-183] - Auto disconnect clients that have been idle for a period of time
    * [BLUR-246] - Change the fetch implementation to type 4
    * [BLUR-249] - Sync performance issue in the IndexInputCloser class
    * [BLUR-254] - Increase the number of selector threads in the thrift server
    * [BLUR-256] - Document how to use facets
    * [BLUR-259] - Add Full Controller list to ZookeeperClusterStatus
    * [BLUR-260] - Rework shard layout strategy
    * [BLUR-261] - Unnecessary explicit reference of superclass method by Child class. 
    * [BLUR-281] - Add metrics into the V2 Block Cache
    * [BLUR-294] - Allow BufferStore to be configured with different buffer sizes

** New Feature
    * [BLUR-229] - Make V2 of the Block Cache production ready.
    * [BLUR-280] - Make the family field optional on the Record object.
    * [BLUR-291] - Document block cache v2









** Test
    * [BLUR-162] - Fix units in ZookeeperClusterStatusTest for safemode call





Release 0.2.0 - 2013-09-13

Release Notes - Apache Blur - Version 0.2.0

** Sub-task
    * [BLUR-101] - Create sessions in the shard servers to store indexreader between calls
    * [BLUR-102] - Make use of the shard server sessions in the controllers.
    * [BLUR-125] - Critical Bug - Controller client reuse could cause malformed results, incorrect results, or a variety of other bad things
    * [BLUR-164] - Modify Blur to use new FieldTypes in Lucene 4
    * [BLUR-165] - Allow columns to be added dynamically



** Bug
    * [BLUR-37] - QueryStatusIdList Returns All Active Queries
    * [BLUR-66] - Fix the blur http status pages that show live metrics
    * [BLUR-67] - Add config options for metrics reporters
    * [BLUR-68] - Print ulimits to log during daemon startup for easier debugging
    * [BLUR-69] - Change the thrift server implementation from Hsha to a threaded pool
    * [BLUR-70] - Remove unused bin conf and interface dirs from root
    * [BLUR-71] - ScoreDoc seems to create a huge amount objects during stress testing
    * [BLUR-72] - Fetching results during query is too slow.
    * [BLUR-74] - Make the disabling and enabling of tables blocking calls.
    * [BLUR-76] - Create index warmup
    * [BLUR-77] - Fix the readonly version of BlurIndex
    * [BLUR-78] - Review the blur-shell project and make the commands work
    * [BLUR-79] - Issue with TThreadPoolServer
    * [BLUR-80] - Fix Max Records Issue mentioned on mail list
    * [BLUR-81] - Create Lucene 4.x compatible escapable query rewrite
    * [BLUR-82] - Upgrade to Lucene 4.3
    * [BLUR-86] - ZooKeeperClient class in blur-util sessionTimeout issue
    * [BLUR-88] - Unit test shard failover
    * [BLUR-89] - Create simple paging for selector so that rows can be paged through
    * [BLUR-92] - After adding a unit test for killing a shard server in BlurClusterTest, WAL has intermittent issue.
    * [BLUR-93] - A bug was created in the transaction log reported on mail list
    * [BLUR-99] - Console agent is marking queries complete incorrectly
    * [BLUR-103] - Thrift Version incompatible with other projects
    * [BLUR-106] - Potential issue with the BlurOutputFormat and the BlurPartitioner
    * [BLUR-107] - Create checkOutputSpecs check in the BlurOutputFormat
    * [BLUR-109] - Update the genAndReplace script in the distibution project to re-author the generated java class file.
    * [BLUR-110] - Check all names of table, column names, etc. in the thrift service as well as the map reduce api
    * [BLUR-116] - Blur Console: Offline status is broken on environment page
    * [BLUR-117] - Blur Console: Cancel button doesn't display on running queries.
    * [BLUR-119] - The cpu times on the status object is returning null.
    * [BLUR-120] - Add an attribute to the BlurQueryStatus object to set when the status is not found instead of throwing an exception.
    * [BLUR-123] - Add incubating to version of Blur
    * [BLUR-124] - Create a README file that is up to date
    * [BLUR-126] - Remove the src directory in the root of the project and let each project exist at the root.
    * [BLUR-128] - Get the Apache License header on all the Blur-Console files
    * [BLUR-129] - Notice file additions
    * [BLUR-133] - Bug in the controller when new tables are coming online.
    * [BLUR-134] - Ulimits print out in startup of both shard and controller servers is throwing an error in ubuntu linux
    * [BLUR-138] - Facets doesn't seem to apply the pre-filter
    * [BLUR-142] - Create IndexReader that can be exited at any time via AtomicBoolean
    * [BLUR-143] - Field less queries don't work 
    * [BLUR-154] - Allow the ZooKeeper session timeout to be configurable
    * [BLUR-155] - Catch all exceptions in the WatchChildren|NodeData|NodeException.Onchange and do not let thread die
    * [BLUR-167] - Check connection in shell make and create a nice error message
    * [BLUR-168] - When using the shell create a nice error message when the cluster name is incorrect
    * [BLUR-169] - SuperParser doesn't support the use of AND and OR keywords
    * [BLUR-170] - Allow the fetchCount to be configurable in the BlurResultIterableSearcher class.
    * [BLUR-173] - Full text search is case sensitive
    * [BLUR-174] - Respect family order from given selector
    * [BLUR-175] - The NOTICE and LICENSE files are not in the binary distribution
    * [BLUR-176] - QueryStatus the hashmap needs to be made thread safe
    * [BLUR-177] - SharedMergeScheduler close method is overloaded
    * [BLUR-187] - NPE in IndexImporter at line 182
    * [BLUR-188] - When a MR job is killed the tasks that have been completed are left on the FS
    * [BLUR-189] - The BlurCsvMapper setups up the splitter before assigning the splitter string.
    * [BLUR-191] - Change the encoding of the splitter to a base64
    * [BLUR-192] - NPE errors in the BlurOutputFormat when the counters are not setup.
    * [BLUR-194] - BlurOutputFormat - Prime document is being misplaced.
    * [BLUR-195] - IndexImporter
    * [BLUR-196] - Error during the parsing of the connection string in the Connection class.
    * [BLUR-200] - Shell Update add connected cluster name to the prompt
    * [BLUR-202] - Index Sampler used in the index warmup not thread safe.
    * [BLUR-204] - Build in connection timeout settings into the client
    * [BLUR-205] - Update the schema thrift call to return the new type system information
    * [BLUR-217] - Jsp status pages are broken due to thrift API changes




** Improvement
    * [BLUR-62] - Lucene 4.2 upgrade
    * [BLUR-63] - Automatic slab configuration
    * [BLUR-64] - Update to use the new SuperQueryParser
    * [BLUR-65] - Remove the BlurMetrics object and update to the new Metrics library
    * [BLUR-83] - Create MapReduce Output Formats
    * [BLUR-84] - Remove controller query caching.
    * [BLUR-85] - Kill JVM on OutOfMemory Error
    * [BLUR-91] - Add a reducer multiplier for the bluroutputformat
    * [BLUR-94] - Optimize index in flight
    * [BLUR-95] - IndexImporter class - add a double check on the rowid to validate the index.
    * [BLUR-98] - Add ability to delete rows during BlurOutputFormat
    * [BLUR-100] - Remove testsuite project and move the code
    * [BLUR-104] - Ensure the behavior of the new super parser is the same as the behavior in 0.1.4 and less
    * [BLUR-108] - IndexImporter class - Optimize the import by skipping the delete process.
    * [BLUR-111] - Add a command to blur shell to echo the cluster name
    * [BLUR-112] - Allow for types to be set on blur tables
    * [BLUR-113] - Index the family as a special field
    * [BLUR-114] - Optimize the row fetch code in the indexmanager to take advantage on the new family field.
    * [BLUR-121] - Create build script to package blur source code
    * [BLUR-147] - IndexImporter - Call tryToMerge on the indexwriter after the import has succeeded
    * [BLUR-148] - Need to warm up new segments after NRT reloads
    * [BLUR-149] - Map reduce index builds should fail fast
    * [BLUR-152] - Disallow index warmup from occuring while indexes are being opened
    * [BLUR-153] - Create a network throttle for warming up the indexes
    * [BLUR-157] - Change the index warmup process to be in it's own thread pool
    * [BLUR-160] - Create a back pressure feature in Blur when GC is too high.
    * [BLUR-178] - Blur Shell Top Command flashes in a large shard cluster
    * [BLUR-179] - Make controller batch updates parallel
    * [BLUR-180] - Whitespace issue in the blur shell
    * [BLUR-182] - The index memory calculation needs a massive improvement
    * [BLUR-184] - MapReduce - Add ability to generate recordid as hash of values in record when using the CSVBlurDriver
    * [BLUR-185] - MapReduce - Change CSVBlurMapper key type to writable instead of long writable
    * [BLUR-186] - MapReduce - Add combine file input format into CSVBlurDriver
    * [BLUR-190] - Add multiple inputs to the BlurCsvDriver program
    * [BLUR-201] - Create a default table path in the blur-site configuration.
    * [BLUR-203] - Automatically cleanup old sample files for segments that have been deleted.
    * [BLUR-207] - Add reset command in shell to clear screen
    * [BLUR-214] - Adds the ability to specify a stop word file for the Text field type.
    * [BLUR-215] - Change BlurQuery.uuid to a String instead of long
    * [BLUR-216] - Create a Date type

** New Feature
    * [BLUR-115] - Support for GIS data types
    * [BLUR-132] - Create Index Snapshots
    * [BLUR-144] - Add Stored field type
    * [BLUR-146] - Add ability to have startup scripts wait for safemode exit
    * [BLUR-171] - Create request and response log files






** Task
    * [BLUR-87] - Merge Blur Console into repo
    * [BLUR-96] - Upgrade Console Agent to work with 0.1.5 apache version
    * [BLUR-97] - Re-package blur console
    * [BLUR-135] - NOTICE file
    * [BLUR-206] - Add documentation pages to include in the distribution
    * [BLUR-218] - Remove libraries from Blur Console that weren't being used





** Wish
    * [BLUR-127] - Term highlighting for search results

