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

