# -*- coding: utf-8; tab-width: 4; -*-
# ex: set fenc=utf-8 sts=4 ts=4 et nomod:

2021-12-05 Michael Truog   <mjtruog at protonmail dot com>

    * CloudI version 2.0.4 released

2021-11-05 Michael Truog   <mjtruog at protonmail dot com>

    * Add the cloudi_service_map_reduce elapsed_seconds function
    * Remove the cloudi_service_map_reduce suspend/resume functions
      to rely upon CloudI service suspend/resume functionality
      with the aspect_suspend/aspect_resume functions

2021-10-30 Michael Truog   <mjtruog at protonmail dot com>

    * Improve service update while the service is suspended with
      the service configuration option aspects_suspend set
      (aspects_suspend functions are called before the update occurs,
       if there is a pending update)

2021-10-29 Michael Truog   <mjtruog at protonmail dot com>

    * Add the cloudi_service_name functions utf8/1 and utf8_forced/1
      for Erlang io formatting of a service name or service name pattern
      with ~ts as UTF-8 (to avoid erroneous interpretation as UTF-32)

2021-10-23 Michael Truog   <mjtruog at protonmail dot com>

    * Fix the service configuration options
      aspects_suspend and aspects_resume so the aspect function
      execution is delayed until the current service request is done
      (if the service is resumed before the current service request
       is done, neither the aspects_suspend functions or
       the aspects_resume functions will execute)
        * Before the fix, execution could fail to update the
          service's state, with the problem being more common with the
          aspects_suspend functions
    * Force all service name and service name patterns to be
      byte strings (in UTF8) to reduce cpg/trie memory usage
        * Previously external services already had this limitation,
          now it applies to internal services and configuration parameters
    * Reduce memory use in the external service Erlang process
    * Update trie

2021-10-16 Michael Truog   <mjtruog at protonmail dot com>

    * Add the async argument to cloudi_service_send for
      turning off response-handling features

2021-10-15 Michael Truog   <mjtruog at protonmail dot com>

    * Fix cloudi_service_api_batch:queue_clear and
      cloudi_service_api_batch:services_restart usage when
      queue_dependencies configuration prevents queue execution

2021-09-10 Michael Truog   <mjtruog at protonmail dot com>

    * Fix CloudI Service API nodes_set discovery ec2
      environment variable substitution
    * Fix README integration-tests configure information

2021-09-02 Michael Truog   <mjtruog at protonmail dot com>

    * Add build_cloudi_version to the CloudI Service API
      code_status output for the current git commit hash
      (releases will have the same value as runtime_cloudi_version)
    * Update jinterface

2021-08-30 Michael Truog   <mjtruog at protonmail dot com>

    * Add boost::stacktrace support for the C++ CloudI API as a
      cross-platform dependency to use instead of booster
      (backward-cpp is still preferred on Linux)
    * Update README dependency package information

2021-08-27 Michael Truog   <mjtruog at protonmail dot com>

    * Improve C/C++ CloudI API backtrace configure check

2021-08-26 Michael Truog   <mjtruog at protonmail dot com>

    * Add the validate_response argument to
      cloudi_service_cron and cloudi_service_send for more
      explicit validation that is configurable
    * Add cloudi_service_shell:validate_response/2
      for default validate_response argument use in
      cloudi_service_cron and cloudi_service_send

2021-08-25 Michael Truog   <mjtruog at protonmail dot com>

    * Add cloudi_service_send for service request sends that must
      occur based on service configuration argument data
      (e.g., for cloudi_service_api_batch or configuration file use)
    * Remove cloudi_service_filesystem notify functions because
      they were assuming only 1 process existed
    * Fix cloudi_service_filesystem notify_one/notify_all so a
      single pattern matching a single path
      causes a single notification
      (previously an exact pattern for a GET method would affect
       the other methods present causing a notification for each method)

2021-08-24 Michael Truog   <mjtruog at protonmail dot com>

    * Add additional cloudi_ip_address:patterns/1 tests

2021-08-19 Michael Truog   <mjtruog at protonmail dot com>

    * Add cloudi_ip_address:patterns/1 for creating service name patterns
      that match IP addresses based on a CIDR notation string

2021-08-18 Michael Truog   <mjtruog at protonmail dot com>

    * Fix cloudi_ip_address so it uses standard formatting
      (no fixed size is possible due to past support of octal in IPv4)
    * Change cloudi_service_tcp and cloudi_service_udp RequestInfo for
      consistency with HTTP services
      (e.g., source-address is used instead of source_address)
    * Change cloudi_service_http_cowboy, cloudi_service_http_cowboy1 and
      cloudi_service_http_elli by removing RequestInfo
      "peer" and "peer-port" (to rely on "source-address" and "source-port")
    * Change cloudi_service_http_client to ignore RequestInfo with
      "peer" or "peer-port"

2021-08-17 Michael Truog   <mjtruog at protonmail dot com>

    * Improve C/C++ CloudI API backtrace configure check
    * Update backward-cpp

2021-07-23 Michael Truog   <mjtruog at protonmail dot com>

    * Fix cloudi_service_map_reduce log_execution_time output when suspended
    * Update cpg

2021-07-02 Michael Truog   <mjtruog at protonmail dot com>

    * Fix Erlang type specification values for Erlang process option
      message_queue_data (mixed as a value was removed in Erlang/OTP 19.0)

2021-06-23 Michael Truog   <mjtruog at protonmail dot com>

    * Exclude external dependencies from Github language stats

2021-06-15 Michael Truog   <mjtruog at protonmail dot com>

    * Improve the ATS CloudI API by making other C types private
    * Fix the Go integation tests links in the CloudI API README

2021-06-13 Michael Truog   <mjtruog at protonmail dot com>

    * Change the ATS CloudI API subscribe function to use the
      ATS v2 function$name implement template idiom to automatically
      create the c_callback function used by the C CloudI API
      (now only the ATS callback function is necessary for the subscribe)
        * Added the subscribe$function function which must be implemented
          before calling the subscribe function
        * Removed the callback_attach function (made it private)

2021-06-12 Michael Truog   <mjtruog at protonmail dot com>

    * Fix ATS CloudI API source code style to be consistent

2021-05-29 Michael Truog   <mjtruog at protonmail dot com>

    * Improve cloudi_service_filesystem replace_index use by
      adding the process index as a suffix on the filename
    * Add overloaded Java CloudI API HashMap
      implementation for info_key_value_new
    * Improve C/C++ CloudI API backtrace configure check

2021-05-28 Michael Truog   <mjtruog at protonmail dot com>

    * Fix cloudi_service_http_cowboy handling of
      a single set-cookie response header value
    * Add OCaml pre-release 4.13.0 (trunk) support
    * Improve C/C++ CloudI API backtrace configure check

2021-05-27 Michael Truog   <mjtruog at protonmail dot com>

    * CloudI version 2.0.2 released

2021-05-26 Michael Truog   <mjtruog at protonmail dot com>

    * Update proper

2021-05-25 Michael Truog   <mjtruog at protonmail dot com>

    * Add the missing priority_default function to the
      Go/Haskell/Java/JavaScript/OCaml/Perl/PHP/Python/Python-C/Ruby
      CloudI APIs
    * Fix Erlang type specification information in cloudi_service_api

2021-05-24 Michael Truog   <mjtruog at protonmail dot com>

    * Improve backward-cpp so Dl_info is defined for the macro
      BACKWARD_SYSTEM_LINUX
    * Improve M4 C++ backtrace detection
    * Fix M4 macros that become obsolete with GNU Autoconf 2.71

2021-05-23 Michael Truog   <mjtruog at protonmail dot com>

    * Small improvements to the ATS CloudI API
    * Use Erlang process high priority in cloudi_core_i_logger
      (and in no other processes)

2021-05-22 Michael Truog   <mjtruog at protonmail dot com>

    * Add more trans_id functions to the ATS CloudI API
    * Add sequence2/sequence3 to the messaging integration test in ATS
    * Switch the ATS count/messaging integration tests to use processes
      (exception handling in ATS2 is not thread-safe in version 0.4.0)

2021-05-21 Michael Truog   <mjtruog at protonmail dot com>

    * Improve ATS CloudI API trans_id type
    * Add the messaging integration test in ATS (sequence1)

2021-05-19 Michael Truog   <mjtruog at protonmail dot com>

    * Fix ATS CloudI API option type use
    * Add the info_key_value_new function to the ATS CloudI API
    * Add the msg_size integration test in ATS
    * Add the null integration test in ATS

2021-05-18 Michael Truog   <mjtruog at protonmail dot com>

    * Add the info_key_value_parse function to the ATS CloudI API
    * Add the http_req integration test in ATS

2021-05-15 Michael Truog   <mjtruog at protonmail dot com>

    * Add the ATS CloudI API function effects

2021-05-14 Michael Truog   <mjtruog at protonmail dot com>

    * Improve the ATS CloudI API
        * All functions/types are present now
        * count integration test exists in ATS
    * Update cowboy, cowlib, ranch
    * Add Erlang/OTP 24.0 support to cloudi_service_router

2021-05-13 Michael Truog   <mjtruog at protonmail dot com>

    * Improve the ATS CloudI API
    * Add C/C++ CloudI API comment

2021-05-11 Michael Truog   <mjtruog at protonmail dot com>

    * Improve the ATS CloudI API

2021-05-10 Michael Truog   <mjtruog at protonmail dot com>

    * Use m4/ax_pthread.m4 for ATS CloudI API autoconf checks
    * Update m4/ax_boost_{base,system,thread}.m4
    * Update m4/ax_compiler_vendor.m4

2021-05-08 Michael Truog   <mjtruog at protonmail dot com>

    * Improve the ATS CloudI API
    * Add threads helper functions to the ATS CloudI API

2021-05-06 Michael Truog   <mjtruog at protonmail dot com>

    * Improve the ATS CloudI API
    * Fix the CloudI API README

2021-05-05 Michael Truog   <mjtruog at protonmail dot com>

    * Add the beginnings of an ATS2/Postiats CloudI API implementation
    * Fix capitalization for mentions of JavaScript

2021-04-22 Michael Truog   <mjtruog at protonmail dot com>

    * Fix cloudi_service_http_cowboy websocket_ping argument
    * Fix cloudi_service_http_cowboy websocket_disconnect arguments

2021-04-21 Michael Truog   <mjtruog at protonmail dot com>

    * Change cloudi_service_http_cowboy headers manipulation to use
      maps while keeping the same service request/response info handling
    * Change cloudi_service_http_cowboy RequestInfo header keys to sorted order
    * Fix cloudi_service_map_reduce retry_delay by processing
      the delay asynchronously
    * Fix integration tests configuration content-security-policy
      for using websockets

2021-04-20 Michael Truog   <mjtruog at protonmail dot com>

    * Add hackney support to cloudi_service_http_client
    * Change cloudi_service_http_client ResponseInfo header keys
      to be sorted in lowercase
    * Change cloudi_service_http_client inets httpc use
      back to using HTTP/1.1
    * Fixes for cloudi_service_http_cowboy websocket use
    * Fix cloudi_service_http_cowboy connection reuse config

2021-04-19 Michael Truog   <mjtruog at protonmail dot com>

    * Add support for map logger metadata alongside the
      previous lager metadata support
    * Add a hut structured report (slog) callback in cloudi_logger_hut
    * Add ct tests for cloudi_logger_lager and cloudi_logger_hut
    * Add remaining unicode logger output
      (metadata pretty-print and formatter errors)
    * Fix cloudi_logger usage with Args == undefined
      when Format is not a string in utf8
    * Add SSL check to cloudi_service_http_cowboy1

2021-04-18 Michael Truog   <mjtruog at protonmail dot com>

    * Change the required Erlang/OTP version to be >= 21.0
    * Fix epgsql protocol.hrl name for scope script
    * Update reltool_util

2021-04-17 Michael Truog   <mjtruog at protonmail dot com>

    * Simplify cloudi_core_i_logger use of syslog_socket
    * Set cloudi_service_http_client inets httpc use
      to use HTTP/1.0 to avoid persistent connection problems
      with different timeout values
    * Add cloudi_service_http_cowboy for cowboy 2.x use based on
      cloudi_service_http_cowboy1 (and switch to using it)
    * Add cowboy, cowlib, ranch (recent versions)
      (minimum Erlang/OTP becomes 21.0)

2021-04-16 Michael Truog   <mjtruog at protonmail dot com>

    * Update jsx

2021-04-15 Michael Truog   <mjtruog at protonmail dot com>

    * Cause runtime failure in ranch1_ssl for Erlang/OTP >= 24
      due to ssl:ssl_accept/2 and ssl:cipher_suites/0 functions
      getting removed in Erlang/OTP
        * cloudi_service_http_cowboy1 ssl use will be broken
          in Erlang/OTP >= 24
    * Update hackney, certifi, idna, unicode_util_compat
    * Update exometer_core, hut, folsom, bear
    * Update epgsql
    * Update parse_trans
    * Update proper (minimum Erlang/OTP becomes 20.0)

2021-04-14 Michael Truog   <mjtruog at protonmail dot com>

    * Add the service configuration options
      aspects_suspend and aspects_resume for executing aspect functions
      when a service is suspended or resumed
    * Add cloudi_service_map_reduce functions
      aspect_suspend/1 and aspect_resume/1 for use with the
      aspects_suspend and aspects_resume service configuration options
      for suspending the map-reduce execution using the
      CloudI Service API services_suspend function
    * Fix configuration validation of {{_, _}} aspect function arity
    * Fix cloudi_core_i_os_port:sync/3 typespec use

2021-04-13 Michael Truog   <mjtruog at protonmail dot com>

    * Add CloudI Service API services_status process identifiers in
      pids_erlang and pids_os lists
    * Add cloudi_service_api_requests JSON support for
      services_status pids_erlang and pids_os data

2021-04-12 Michael Truog   <mjtruog at protonmail dot com>

    * Add cloudi_service_filesystem use_expires argument
    * Improve cloudi_core supervisor child spec order
    * Update supool

2021-04-09 Michael Truog   <mjtruog at protonmail dot com>

    * Add cloudi_service_filesystem replace_index argument for
      writing the cache replacement data to the filesystem
    * Add cloudi_service_filesystem debug/debug_level arguments for
      logging the currently loaded files_size in bytes

2021-04-05 Michael Truog   <mjtruog at protonmail dot com>

    * Update CloudI Service API README

2021-04-03 Michael Truog   <mjtruog at protonmail dot com>

    * Improve cloudi_service_filesystem replace argument usage
      so files are sorted based on PriorityKey and Size
      to maximize the number of files loaded
    * Fix cloudi_service_filesystem replace argument lru use
    * Update supool

2021-04-02 Michael Truog   <mjtruog at protonmail dot com>

    * Add cloudi_service_filesystem replace argument for setting
      the cache replacement algorithm
      (when both refresh and files_size arguments are set,
       default algorithm is LFUDA)
    * Fix cloudi_service_filesystem filesystem access to ensure
      device files, named pipes and other unreadable things
      do not block a refresh
    * Fix cloudi_service_filesystem KiB unit use

2021-03-31 Michael Truog   <mjtruog at protonmail dot com>

    * Fix cloudi_service_filesystem files_size argument use
      to enforce the limit before a single file's contents is read

2021-03-11 Michael Truog   <mjtruog at protonmail dot com>

    * Change the Go CloudI API support to require go module use
      (now require go >= 1.11)
    * Change the msg_size integration tests to use 1073741823 as
      the maximum request integer to be consistent with 32-bit OCaml

2021-03-10 Michael Truog   <mjtruog at protonmail dot com>

    * Fix the OCaml count integration test for 32-bit architectures
    * Fix the OCaml msg_size integration test for 32-bit architectures

2021-02-26 Michael Truog   <mjtruog at protonmail dot com>

    * Fix Erlang/OTP 24 socket inet_backend use with
      external services using protocol local

2021-02-25 Michael Truog   <mjtruog at protonmail dot com>

    * Add runtime_erlang_compilation to the CloudI Service API
      code_status output for checking aot/jit use
    * Add Erlang/OTP 24 file:delete/2 use

2021-02-24 Michael Truog   <mjtruog at protonmail dot com>

    * Add Erlang/OTP 24 socket inet_backend support
    * Update quickrand

2021-02-22 Michael Truog   <mjtruog at protonmail dot com>

    * Add time_offset_last_change and time_offset_last_event
      to the CloudI Service API logging_status output for tracking
      the last change to the system clock

2021-02-19 Michael Truog   <mjtruog at protonmail dot com>

    * Improve C/C++ CloudI API termination handler with
      boost::diagnostic_information output and add the
      CloudI::API::backtrace() to the assert exception
    * Add queue_mode_sync_last values and queue_mode_overload_last values
      to the CloudI Service API logging_status output for tracking
      the last occurrence of both queue modes
      (queue_mode_sync_last_start,
       queue_mode_sync_last_start_event,
       queue_mode_sync_last_end,
       queue_mode_sync_last_end_event,
       queue_mode_sync_last_total,
       queue_mode_overload_last_start,
       queue_mode_overload_last_start_event,
       queue_mode_overload_last_end,
       queue_mode_overload_last_end_event,
       queue_mode_overload_last_total)

2021-02-16 Michael Truog   <mjtruog at protonmail dot com>

    * Fix Elixir.CloudILogger module encoding
    * Update reltool_util

2021-02-14 Michael Truog   <mjtruog at protonmail dot com>

    * Improve installed cloudi bin script installation

2021-02-11 Michael Truog   <mjtruog at protonmail dot com>

    * Improve count_process_dynamic logic
    * Fix Java, Perl, PHP, Ruby integration tests CloudI API initialization
      (exceptions are caught properly now)

2021-02-09 Michael Truog   <mjtruog at protonmail dot com>

    * Add the suspend_dependants argument to
      cloudi_service_api_batch for automatically suspending any
      dependant service (that is already running) and automatically
      resuming once the queue dependency has finished running
      all of its queued service configurations
    * Fix service configuration options rate_request_max,
      count_process_dynamic and hibernate, in external services,
      so their intervals start after service initialization has occurred
    * Improve count_process_dynamic service initialization
    * Fix Python and Python/C integration tests CloudI API initialization
      (exceptions are caught properly now)

2021-02-05 Michael Truog   <mjtruog at protonmail dot com>

    * Fix bug with suspended services that restart with the
      service configuration option restart_all set to false (default)
      that causes the CloudI Service API services_status processing to fail
    * Fix count_process_dynamic service configuration option use
      when a service is suspended so the service avoids changes
      based on the time spent being suspended

2021-02-02 Michael Truog   <mjtruog at protonmail dot com>

    * Add retry and retry_delay arguments to cloudi_service_map_reduce

2021-01-31 Michael Truog   <mjtruog at protonmail dot com>

    * Change cloudi_service_api_batch services_remove HTTP method
      from "get" to "delete" (due to modifying a queue)
    * Add the queue_dependencies argument to
      cloudi_service_api_batch for representing dependencies
      between queues for automatically managing service runtime
    * Add the queue_clear function to cloudi_service_api_batch

2021-01-30 Michael Truog   <mjtruog at protonmail dot com>

    * Fix default configuration HTTP server content security policy
      for access to the dashboard interface
    * hexpi integration test improvements
    * Update varpool

2021-01-20 Michael Truog   <mjtruog at protonmail dot com>

    * Update reltool_util

2021-01-01 Michael Truog   <mjtruog at protonmail dot com>

    * Add the queue_mode value to the CloudI Service API logging_status output
    * Update quickrand

2020-12-24 Michael Truog   <mjtruog at protonmail dot com>

    * Add services_restarted to the
      CloudI Service API nodes_status output for the local node

2020-12-19 Michael Truog   <mjtruog at protonmail dot com>

    * Set the LOGGER_FLOODING_DELTA_REMOTE constant based on testing
      to ensure the remote logging process load is more limited
    * Add CloudI log output when overload mode is exited with
      the duration of the overload state in a microseconds string
    * Remove limit from the allowed CloudI Service API services_update
      options that are allowed to change for an external service
      to avoid allowing data changes that don't modify the OS process
      when a new OS process is not created
        * Now all the external service configuration options related to
          the execution environment are kept static during the service's
          lifetime, these options are:
          limit, owner, nice, cgroup, chroot, syscall_lock, directory
        * Both internal and external services are unable to update
          common service configuration options related to the
          execution environment which are:
          count_process_dynamic, timeout_terminate, restart_all,
          restart_delay, scope

2020-12-14 Michael Truog   <mjtruog at protonmail dot com>

    * Add services_running and services_failed counts to the
      CloudI Service API nodes_status output for the local node
    * Change CloudI logger flooding protection to use separate
      constants for local and remote log messages
      (currently the same value is used)
    * Update key2value

2020-12-13 Michael Truog   <mjtruog at protonmail dot com>

    * Change CloudI logger overload mode to ignore
      incoming messages sent asynchronously

2020-12-12 Michael Truog   <mjtruog at protonmail dot com>

    * Add CloudI logger process overload mode with configurable limits
      for changing the logger process mode from async->sync->overload
      (new logging configuration values are:
       queue_mode_async, queue_mode_sync, queue_mode_overload)
    * Change the CloudI logger to use a cached message queue length
      value when the value is large enough for the current
      logger process mode
    * Update quickrand

2020-12-05 Michael Truog   <mjtruog at protonmail dot com>

    * Improve cloudi_service_http_cowboy1 and cloudi_service_http_elli
      arguments set_x_content_type_options and set_x_xss_protection
      by capitalizing the header names for better compatibility

2020-11-27 Michael Truog   <mjtruog at protonmail dot com>

    * CloudI version 2.0.1 released

2020-11-14 Michael Truog   <mjtruog at protonmail dot com>

    * Fix pedantic C/C++ compilation errors

2020-11-11 Michael Truog   <mjtruog at protonmail dot com>

    * Add cloudi_core constant for Erlang process suspended unblock

2020-11-07 Michael Truog   <mjtruog at protonmail dot com>

    * Fix service termination of service processes that have entered
      a suspended state (Erlang process suspend, not CloudI service suspend)
      due to sending too many distributed Erlang messages by not waiting
      for the suspended processes to execute their termination source code
    * Add cloudi_service_funnel argument requests_extend_liveness
      with the default set to false (previously would have been true)
      to prevent requests from extending the liveness of response data

2020-11-01 Michael Truog   <mjtruog at protonmail dot com>

    * Fix CloudI logger internal logging when a node redirect is set
    * iCloud is having more than 6 hours of downtime and
      is completely unrelated to CloudI

2020-10-26 Michael Truog   <mjtruog at protonmail dot com>

    * Allow a disappearing log file directory to be a transient error
      (added to logging_status as file_read_fail)

2020-10-24 Michael Truog   <mjtruog at protonmail dot com>

    * Add the syscall_lock service configuration option
      for external services (supported on OpenBSD and Linux)
    * Fix C CloudI API cloudi_info_key_value_parse
      handling of info_size <= 1

2020-10-21 Michael Truog   <mjtruog at protonmail dot com>

    * Fix CloudI Service API code_status build_operating_system value
      for operating systems that have a uname that doesn't support -o
      (uses -s instead, e.g. on OpenBSD)
    * The --with-cxx-backtrace configure argument defaults to yes now

2020-10-17 Michael Truog   <mjtruog at protonmail dot com>

    * Fix an infrequent request timeout bug in cloudi_service_funnel
    * Improve cloudi_service_request_rate crdt mode
    * Add cloudi_crdt:flush_next_write/2 to force the next CRDT
      operation to occur as immediately as possible in all processes

2020-10-15 Michael Truog   <mjtruog at protonmail dot com>

    * Add cloudi_service_cron arguments send_args_info and send_mcast
      for providing the default value of all cron expressions

2020-10-14 Michael Truog   <mjtruog at protonmail dot com>

    * Fix dialyzer error_handling errors

2020-10-13 Michael Truog   <mjtruog at protonmail dot com>

    * Fix dialyzer underspecs errors
    * Improve cloudi_string:compare_constant functions

2020-10-12 Michael Truog   <mjtruog at protonmail dot com>

    * Fix dialyzer underspecs errors
    * Simplify cloudi_service_funnel response processing
    * Improve cloudi_string:compare_constant functions
    * Update cgroups
    * Update cpg
    * Update keys1value
    * Update pqueue
    * Update quickrand
    * Update reltool_util
    * Update trie
    * Update uuid

2020-10-10 Michael Truog   <mjtruog at protonmail dot com>

    * Add more specific cloudi_service_api types for string status values
    * Fix dialyzer unmatched_returns errors in internal services
    * Update nodefinder
    * Update cpg
    * Update supool
    * Update varpool

2020-10-09 Michael Truog   <mjtruog at protonmail dot com>

    * Improve CloudI Service API function logging_status by having
      file_sync_fail_types and file_write_fail_types lists
      in order of occurrence
    * Fix dialyzer unmatched_returns errors in cloudi_core

2020-10-08 Michael Truog   <mjtruog at protonmail dot com>

    * Add CloudI Service API functions logging_status and
      logging_status_reset for tracking file output details

2020-10-07 Michael Truog   <mjtruog at protonmail dot com>

    * Delay shutdown termination in the CloudI logger
      based on the message queue size to ensure pending data gets logged
    * Delay CloudI/GEPD Erlang port process shutdown termination
      to accumulate stdout/stderr service termination output
    * Require all CloudI Erlang port OS processes to provide
      a terminate_now function (cloudi_os_spawn, cloudi_os_command)
    * Add CloudI/GEPD Erlang port OS process orphaned detection
      (used if the Erlang VM crashed in a weird way)

2020-10-06 Michael Truog   <mjtruog at protonmail dot com>

    * Split the non-spawn functionality (kill_pids) from the
      cloudi_os_spawn OS process and put it into the
      cloudi_os_command OS process
    * Generalize the CloudI/GEPD Erlang port usage in the
      cloudi_core_i_os_port module

2020-10-03 Michael Truog   <mjtruog at protonmail dot com>

    * Improve cloudi_service_cron expression send_args_info use
    * Improve cloudi_service_funnel comments
    * Fix cloudi_crdt type spec

2020-09-25 Michael Truog   <mjtruog at protonmail dot com>

    * Add the cloudi_crdt arguments init_delay and node_count
      for simplifying initialization
    * Add suspend/resume functionality to cloudi_queue
    * Simplify cloudi_service_funnel

2020-09-24 Michael Truog   <mjtruog at protonmail dot com>

    * Fix cloudi_crdt bootstrap mode for a crdt_size other than 4

2020-09-23 Michael Truog   <mjtruog at protonmail dot com>

    * Add the cloudi_service_funnel configuration argument
      receive_only for limiting the nodes responsible for sending

2020-09-22 Michael Truog   <mjtruog at protonmail dot com>

    * Fix cloudi_service_funnel selection of the sending process
    * Add the cloudi_service_funnel configuration arguments
      init_delay and node_delay for delaying CRDT data initialization
      until all service processes are ready
    * Add the function cloudi_crdt:crdt_size/1 for determining
      key/value consistency based on #crdt_event{} messages

2020-09-21 Michael Truog   <mjtruog at protonmail dot com>

    * Fix cloudi_service_funnel handling of concurrent duplicate requests
    * Improve cloudi_crdt comments

2020-09-19 Michael Truog   <mjtruog at protonmail dot com>

    * Improve cloudi_crdt comments

2020-09-18 Michael Truog   <mjtruog at protonmail dot com>

    * Add the cloudi_service_cron configuration argument
      request_info_default for simplifying send_args_info use

2020-09-17 Michael Truog   <mjtruog at protonmail dot com>

    * Add cloudi_service_cron expressions arguments features:
        * send_args_info to transform a list of string key/value tuples
          provided as the RequestInfo with data specific to the
          cron expression's event as text_pairs data
        * send_mcast to send each event using mcast_async
    * Add cloudi_service_shell interpretation of RequestInfo data
      as text_pairs info logged as shell comments to describe the Request
    * Change cloudi_string:term_to_binary_compact/1 and
      cloudi_string:term_to_list_compact/1 to output unicode
    * Update jsx

2020-09-06 Michael Truog   <mjtruog at protonmail dot com>

    * Add cloudi_service_funnel for providing coordination
      among duplicate service requests that receive a single response
    * Add the cloudi_crdt functions events_subscriptions/3,
      events_clear/2, update_clear/5, update_clear/6,
      update_clear_id/6, update_clear_id/7
    * Add the cloudi_crdt:new/2 argument initial_data_function

2020-09-04 Michael Truog   <mjtruog at protonmail dot com>

    * Update cpg

2020-08-29 Michael Truog   <mjtruog at protonmail dot com>

    * Add cloudi_service_http_cowboy1 and cloudi_service_http_elli
      configuration arguments
      content_security_policy, content_security_policy_report_only,
      set_x_xss_protection, set_x_content_type_options
      (for automatically setting the HTTP response header fields
       if they were not already set in the service request response)
    * Update elli

2020-08-17 Michael Truog   <mjtruog at protonmail dot com>

    * Fix PHP CloudI API error output so it uses stderr instead of stdout
    * Add CloudI API stderr info when execution occurs outside CloudI
    * Fix cloudi_service_cron usage of the year field

2020-07-25 Michael Truog   <mjtruog at protonmail dot com>

    * Fix the configuration code paths so they are updated after a
      service update has been processed
      (with usage of code_paths_add and/or code_paths_remove)
    * Add 'releases' to the 'code' configuration file section

2020-07-15 Michael Truog   <mjtruog at protonmail dot com>

    * Fix the Haskell CloudI API subscribe function so an execution thread
      will properly cycle through the subscriptions using the same pattern
    * Remove SIGKILL use when an external service has closed its
      stdout/stderr pipes to depend on cloudi_core_i_services_monitor
      enforcing the termination timeout
    * Use 2 pools of cloudi_core_i_os_spawn ports with
      OS_SPAWN_POOL1 for creating and monitoring OS processes and
      OS_SPAWN_POOL2 for killing OS processes

2020-07-14 Michael Truog   <mjtruog at protonmail dot com>

    * Add a FatalError exception to the
      Go, Haskell, OCaml CloudI API that must
      cause the service process to restart
    * Add an Assert function to the Go CloudI API with an
      AssertionError exception
    * Ensure all external service CloudI APIs handle an AssertionError
      as a fatal error that causes the service process to restart
    * Haskell, Python, Python/C, Ruby CloudI API now correctly
      handle exit being called in a service request callback function

2020-07-13 Michael Truog   <mjtruog at protonmail dot com>

    * Change the C++ CloudI API fatal_exception name to fatal_error
    * Add a FatalError exception class to the
      Java, JavaScript, Perl, PHP, Python, Python/C, Ruby CloudI API
      to be a base class for exceptions that must
      cause the service process to restart
    * Now require PHP 7 for the PHP CloudI API for its exception hierarchy

2020-07-11 Michael Truog   <mjtruog at protonmail dot com>

    * Improve Python/C CloudI API exception handling
    * Add the fatal_exception class to the C++ CloudI API
      for usage as the base class of exceptions that must terminate
      the service process
      (assert functions will cause the service process to restart with
       C usage of assert.h calling abort to send a SIGABRT signal and
       C++ usage of CloudI::API::fatal_exception for any assert exceptions)

2020-07-10 Michael Truog   <mjtruog at protonmail dot com>

    * Improve CloudI API service request exception handling
      to ensure unrecoverable exceptions and assertions cause
      the service process to restart
        * JavaScript, Perl, Python, Python/C, Ruby will restart when
          an assertion fails with an AssertionError exception
          (Java (in the previous commit) and PHP already did this)
        * Python, Python/C, Ruby will restart when a service request handler
          uses the exit function
          (though Python/C forces the exit code to be 1)
        * Python and Python/C provide null responses for Exceptions and
          restarts for other BaseExceptions
        * Ruby provides null responses for StandardError exceptions and
          restarts for other Exceptions
    * Fix the Perl CloudI API subscribe function so an execution thread
      will properly cycle through the subscriptions using the same pattern
    * Fix the Perl CloudI API exception traceback so stderr is used
    * Update jsx

2020-07-08 Michael Truog   <mjtruog at protonmail dot com>

    * Improve the Java CloudI API service request exception handling
      to return a null response for external Exceptions while
      allowing any Error to terminate the service
      (previously a thrown Error did not terminate the service
       but some Errors are unrecoverable)
    * Fix the cgroup service configuration option use with a v2 cgroups mount

2020-07-06 Michael Truog   <mjtruog at protonmail dot com>

    * Change the CloudI Service API code_path_add, code_path_remove and
      code_path to use separate storage of paths with checking for
      adding a path that has already been added

2020-07-04 Michael Truog   <mjtruog at protonmail dot com>

    * Add the 'code' configuration file section
    * Move the integration tests code paths into the code configuration
    * Improve the execution of the msg_size tests

2020-07-03 Michael Truog   <mjtruog at protonmail dot com>

    * Add signal name debug output to cloudi_service_shell
    * Add cloudi_os_process:signal_to_string/1 function

2020-07-02 Michael Truog   <mjtruog at protonmail dot com>

    * Add cloudi_service_shell arguments timeout_kills_process and
      timeout_kills_process_signal to automatically terminate shell
      processes after the request timeout expires
      (timeout_kills_process defaults to false)
    * Add cloudi_core module cloudi_os_process
    * Add the Erlang port cloudi_os_spawn kill_pids function
    * Limit signal name interpretation to signals common to all architectures

2020-06-12 Michael Truog   <mjtruog at protonmail dot com>

    * Add --with-test-timeout arguments vm and container_cpu_quota
    * Change --with-test-timeout=container to use only 1 scheduler for ct
    * Add --with-test-timeout and --with-long-test-timeout
      timeout value use in all eunit tests
    * Update cpg
    * Update erlang_term
    * Update pqueue
    * Update quickrand
    * Update supool
    * Update trie
    * Update uuid
    * Update varpool

2020-06-06 Michael Truog   <mjtruog at protonmail dot com>

    * Increase configure flag --with-test-timeout=container value to
      10 minutes (600) based on LXC container testing

2020-06-04 Michael Truog   <mjtruog at protonmail dot com>

    * CloudI version 2.0.0 released

2020-06-03 Michael Truog   <mjtruog at protonmail dot com>

    * Update cloudi_core Elixir CloudILogger module

2020-06-02 Michael Truog   <mjtruog at protonmail dot com>

    * Fix hackney compilation on Erlang/OTP 20.2
    * Update cpg

2020-06-01 Michael Truog   <mjtruog at protonmail dot com>

    * Add the optional argument response to the info_key_value_new function
      for all external service CloudI API implementations
      (C/C++/Go/Haskell/Java/JavaScript/OCaml/Perl/PHP/Python/Python-C/Ruby)

2020-05-31 Michael Truog   <mjtruog at protonmail dot com>

    * Add key_value_parse/2 to cloudi_request_info and cloudi_response_info
    * Add the cloudi_response_info functions
      key_value_new and key_value_parse to return
      empty key/value lookup data as <<0>>
      (i.e., if the cloudi_response_info:key_value_new function is called
       a null response will not be created,
       though <<0>> is interpreted as the binary_pairs format)
    * Change previous usage of cloudi_request_info for ResponseInfo parsing
      to use cloudi_response_info
    * Fix cloudi_service_oauth1 URL parsing with Erlang/OTP 23

2020-05-30 Michael Truog   <mjtruog at protonmail dot com>

    * Change the C/C++ CloudI API to let NULL represent empty
      for info_key_value_new function calls
    * Add empty info_key_value_new use to the count
      integration tests
    * Add info_key_value_new use to the http_req Erlang integration test
    * Update exometer_influxdb
    * Update hackney to 1.16.0

2020-05-24 Michael Truog   <mjtruog at protonmail dot com>

    * Set minimum node.js requirement as 0.12.18

2020-05-22 Michael Truog   <mjtruog at protonmail dot com>

    * Fix GHC 7.10.3 compatibility

2020-05-21 Michael Truog   <mjtruog at protonmail dot com>

    * Add the info_key_value_new function to the
      Haskell/OCaml CloudI API
    * Fix the infoKeyValueParse value list order in the
      Haskell CloudI API

2020-05-16 Michael Truog   <mjtruog at protonmail dot com>

    * Change the info_key_value_parse function to be static in the
      Go/JavaScript/Perl/PHP/Python/Ruby CloudI API
    * Add the info_key_value_new function to the
      Go/JavaScript/Perl/PHP/Python/Ruby CloudI API

2020-05-15 Michael Truog   <mjtruog at protonmail dot com>

    * Isolate aspect function exception errors in the same way for
      both internal and external services with the same logging.
      Now aspects_init_after functions execution are included in
      the initialization timeout time period.
      The execution of aspects_request_before functions and
      aspects_request_after functions are already included in the
      service request timeout decrement
      (when the service configuration option
       request_timeout_adjustment is true).
    * Fix the timeout_terminate (TIMEOUT_TERMINATE_MIN) used before
      external services are initialized
    * Change the C CloudI API function name
      cloudi_info_key_value_destroy to
      cloudi_info_key_value_parse_destroy
    * Change the C++ CloudI API function name
      info_key_value_destroy to
      info_key_value_parse_destroy
    * Change the C++ CloudI API key_value functions to be static
      (info_key_value_parse and info_key_value_parse_destroy)
    * Add info_key_value_new function to the C/C++ CloudI API
    * Add auto-free functions to the C/C++ CloudI API
      (free_name, free_pattern, free_request_info, free_request,
       free_response_info, free_response, free_with_delete)
      for data passed to forward or return

2020-05-14 Michael Truog   <mjtruog at protonmail dot com>

    * Fix problem when the Dispatcher variable is used in an
      aspects_init_after (service configuration option) function
      with duo_mode set to false
    * Fix infrequent race condition with cloudi_service functions returning
      {error, timeout} due to gen_server:call/3 use with a timeout value.
      The problem would occur with high load and only impacts
      internal services.  Fixes the Erlang messaging integration test.

2020-05-13 Michael Truog   <mjtruog at protonmail dot com>

    * Reduce the allocation and increase the encapsulation in the
      C++ CloudI API

2020-05-12 Michael Truog   <mjtruog at protonmail dot com>

    * Change the Java CloudI API function
      info_key_value_new and info_key_value_parse to be static

2020-05-11 Michael Truog   <mjtruog at protonmail dot com>

    * Improve the Java CloudI API function info_key_value_new types

2020-05-08 Michael Truog   <mjtruog at protonmail dot com>

    * Add Java CloudI API function info_key_value_new for
      request_info key/value encoding using the text_pairs format

2020-05-07 Michael Truog   <mjtruog at protonmail dot com>

    * Fix Python 3.8 compatibility
    * Fix Haskell GHC 8.10.1 compatibility
    * Fix JavaScript node.js v10 Buffer warning in messaging integration test

2020-05-06 Michael Truog   <mjtruog at protonmail dot com>

    * Improve the messaging integration tests configuration

2020-05-04 Michael Truog   <mjtruog at protonmail dot com>

    * Simplify external service handling of recv_async

2020-05-02 Michael Truog   <mjtruog at protonmail dot com>

    * Add the restart_all service configuration option
      to have the failure of a single process cause
      the restart of all processes (defaults to false)
    * Fix C++ messaging integration test logging output
    * Fix logging of restart T (elapsed time during R, the restart count)
    * Add an iteration counter to the messaging integration tests in
      Go, Haskell, OCaml

2020-04-26 Michael Truog   <mjtruog at protonmail dot com>

    * Simplify the Erlang messaging integration test
      by combining the 4 sequence modules into 1
    * Add an iteration counter to the messaging integration tests in
      C++, Java, JavaScript, Perl, PHP, Python, Ruby

2020-04-22 Michael Truog   <mjtruog at protonmail dot com>

    * Reduce the frequency of hibernation in the internal service dispatcher
      process when messages will be received after a short delay
      (when the hibernate service configuration option is used)

2020-04-20 Michael Truog   <mjtruog at protonmail dot com>

    * Do not block the use of recv_async and recv_asyncs in internal services
      that use the service configuration option duo_mode == true.
      More testing determined reliability suffered due to usage of hibernate
      (with the service configuration option hibernate == true),
      making the internal service dispatcher process less responsive during
      the timeout time period.

2020-04-19 Michael Truog   <mjtruog at protonmail dot com>

    * Block the use of recv_async and recv_asyncs in internal services
      that use the service configuration option duo_mode == true
      to encourage the use of send_async_active and mcast_async_active
      for efficiency that is also reliable
    * Remove the types cloudi_service:error_reason_sync/0
      and cloudi:error_reason_sync/0
    * Remove the scheduling hint messages and priority adjustments

2020-04-18 Michael Truog   <mjtruog at protonmail dot com>

    * Fix scheduling of internal service use of
      recv_async and recv_asyncs with the service
      configuration option duo_mode == true

2020-04-15 Michael Truog   <mjtruog at protonmail dot com>

    * Improve cpg listen initialization at CloudI startup

2020-04-14 Michael Truog   <mjtruog at protonmail dot com>

    * Fix cpg listen initialization at CloudI startup
    * Update backward-cpp

2020-04-13 Michael Truog   <mjtruog at protonmail dot com>

    * Improve hidden node status monitoring
    * Update cpg

2020-04-12 Michael Truog   <mjtruog at protonmail dot com>

    * Improve cpg scopes reset when CloudI Service API nodes_set
      changes the listen value
    * Fix listen value changes in cloudi_core_i_nodes
    * Update cpg

2020-04-11 Michael Truog   <mjtruog at protonmail dot com>

    * Log an error if a hidden node connection causes a node to
      receive service subscriptions without having listen set to all
      (error is logged on the receive node and
       the received service subscriptions are ignored)
    * Improve CloudI node monitoring
    * Update cpg

2020-04-10 Michael Truog   <mjtruog at protonmail dot com>

    * Fix node reconnect so the previous connection type
      (visible or hidden) is used for the reconnect attempt
    * Add connection to the CloudI Service API nodes_status output

2020-04-07 Michael Truog   <mjtruog at protonmail dot com>

    * Improve remote_console cloudi executable command

2020-04-06 Michael Truog   <mjtruog at protonmail dot com>

    * Ignore both visible and hidden nodetool nodes
      (used by the cloudi executable script)
    * Update cpg

2020-04-05 Michael Truog   <mjtruog at protonmail dot com>

    * Add the CloudI Service API nodes_set listen value
      back with more validation
    * Fix remote_console cloudi executable command

2020-04-01 Michael Truog   <mjtruog at protonmail dot com>

    * Fix cloudi_service_shell request handling
      (shell interpretation of exec was previously only
       evaluating the first command)

2020-03-14 Michael Truog   <mjtruog at protonmail dot com>

    * Temporarily remove the CloudI Service API nodes_set listen value
      to instead infer the value from the connect value

2020-03-11 Michael Truog   <mjtruog at protonmail dot com>

    * Improve CloudI Service API nodes_set validation of nodes
    * Update nodefinder

2020-03-10 Michael Truog   <mjtruog at protonmail dot com>

    * Always have CloudI attempt connections with nodes in the nodes list
      upon startup, before node discovery is started
    * Improvements for using the CloudI Service API nodes_set
      listen set to all
    * Update cpg
    * Update nodefinder

2020-03-07 Michael Truog   <mjtruog at protonmail dot com>

    * Add configure argument --with-uuid-variant to switch the
      UUID v1 variant from rfc4122 (default) to ordered
    * Improvements for using the CloudI Service API nodes_set
      listen set to all and connect set to hidden
    * Add CloudI Service API nodes_set options {set, all | local}
      to control the nodes where the set operation occurs
    * Update cpg
    * Update uuid

2020-02-27 Michael Truog   <mjtruog at protonmail dot com>

    * Add Erlang/OTP 23 compatibility

2020-02-15 Michael Truog   <mjtruog at protonmail dot com>

    * Fix CloudI Service API services_update code_paths_remove use
      (with a list size greater than 1)
    * Change CloudI Service API services_update modules_load to
      load all the modules atomically
    * Update reltool_util

2020-02-12 Michael Truog   <mjtruog at protonmail dot com>

    * Update cpg

2020-02-10 Michael Truog   <mjtruog at protonmail dot com>

    * Fix JavaScript CloudI API deprecation warning output
      (DEP0005 node.js Buffer() is deprecated)

2020-02-05 Michael Truog   <mjtruog at protonmail dot com>

    * Update cpg

2020-02-04 Michael Truog   <mjtruog at protonmail dot com>

    * Add Erlang/OTP kernel config {dist_auto_connect, never}
    * Update cpg

2020-01-10 Michael Truog   <mjtruog at protonmail dot com>

    * Fix Haskell CloudI API use of terminate_return_value as False

2020-01-08 Michael Truog   <mjtruog at protonmail dot com>

    * Improve termination handling in the
      C/C++/Go/Haskell/Java/JavaScript/OCaml/Perl/PHP/Python/Ruby CloudI APIs
      (all terminate if the wrong return type is used
       with error output)
    * Improve external service termination by ensuring the SIGKILL
      happens during the last 500ms of the termination timeout

2020-01-06 Michael Truog   <mjtruog at protonmail dot com>

    * Add OCaml and Haskell CloudI API Terminate exception to be
      similar to the C++ CloudI API terminate_exception use based on the
      optional terminate_return_value parameter
    * Change Go/Java/PHP/Python/Ruby CloudI API exception handling to
      provide a service request null response before returning from poll
    * Use the terminate_return_value parameter as false in the
      OCaml and Haskell messaging integration tests

2020-01-04 Michael Truog   <mjtruog at protonmail dot com>

    * Move service OS process termination with SIGKILL after the
      termination timeout into the service monitor process
    * Add the configure script argument --with-test-timeout to
      control the time limit for individual test case execution
    * Add the configure script argument --with-long-test-timeout to
      control the time limit for individual long test case execution

2020-01-02 Michael Truog   <mjtruog at protonmail dot com>

    * Fix external service termination timeout delay

2020-01-01 Michael Truog   <mjtruog at protonmail dot com>

    * C/C++ CloudI API changes break ABI compatibility
    * Fix count_process_dynamic update of count_process in
      the CloudI Service API services_status data
    * Fix Python/C CloudI API TerminateException when initializing
      (it is not an InvalidInputException now)
    * Add C++ CloudI API terminate_exception
    * Change the C++ CloudI API constructor to take the boolean
      terminate_return_value with a default of true, so the
      terminate_exception is only used in the constructor unless
      terminate_return_value is set to false
    * Minimize C CloudI API memory consumption
    * Change integration tests C++ thread_pool to use consistent naming and
      add abstract base classes
    * Change the C++ messaging integration test to use the
      C++ CloudI API terminate_exception

2019-12-27 Michael Truog   <mjtruog at protonmail dot com>

    * Fix suspended service time tracking
    * Add suspend-related CloudI Service API services_status data
      to the Erlang type specifications

2019-12-07 Michael Truog   <mjtruog at protonmail dot com>

    * Add suspend-related information to the CloudI Service API
      services_status output:
      suspended,
      uptime_processing,
      interrupt_day_suspended,
      interrupt_week_suspended,
      interrupt_month_suspended,
      interrupt_year_suspended,
      availability_day_processing,
      availability_week_processing,
      availability_month_processing,
      availability_year_processing
    * Fix cloudi_service_map_reduce execution time tracking to
      exclude time spent suspended with cloudi_service_map_reduce:suspend/2,3
    * Fix cloudi_service_test_hexpi max timeout used

2019-12-06 Michael Truog   <mjtruog at protonmail dot com>

    * Put cloudi_service_map_reduce name argument into log output
      when suspend/resume occurs
    * Improve cloudi_core variable names

2019-12-04 Michael Truog   <mjtruog at protonmail dot com>

    * Add cloudi_service_map_reduce name argument for the
      suspend/resume service name
    * Fix CloudI Service API services_suspend interaction with
      services_update

2019-11-30 Michael Truog   <mjtruog at protonmail dot com>

    * Add the CloudI Service API services_suspend and services_resume
      functions to pause the processing of incoming service messages
    * Fix cloudi_service_shell directory setting when
      user is provided with login as true
    * Add cloudi_service_map_reduce suspend/resume functionality

2019-11-28 Michael Truog   <mjtruog at protonmail dot com>

    * CloudI version 1.8.0 released

2019-11-27 Michael Truog   <mjtruog at protonmail dot com>

    * Remove deprecated types from Python and Python/C CloudI API
    * Remove deprecated type value in cloudi Erlang module

2019-11-26 Michael Truog   <mjtruog at protonmail dot com>

    * Fix cloudi_service_shell setting env for login su shell

2019-11-25 Michael Truog   <mjtruog at protonmail dot com>

    * Improve cloudi_environment:transform and add environment.py
      integration test checks based on the current parsing
    * Add login argument to cloudi_service_shell

2019-11-23 Michael Truog   <mjtruog at protonmail dot com>

    * Change cloudi_environment:transform to allow unicode env names
    * Add unicode error handling during external service start
    * Change cloudi_os_spawn executable name to lack _vsn_1 suffix

2019-11-17 Michael Truog   <mjtruog at protonmail dot com>

    * Enable logging of unicode data used in error messages,
      function names, filenames, service name patterns, etc.

2019-11-16 Michael Truog   <mjtruog at protonmail dot com>

    * Add support for unicode to cloudi_service_shell
    * Add elapsed time to cloudi_service_cron log output
    * Fix handling of external service unicode strings for
      file_path, args and env string data (encoded as utf-8)

2019-11-14 Michael Truog   <mjtruog at protonmail dot com>

    * Improve cloudi_service_cron accuracy after time_offset
      causes timer adjustments
    * Ensure cloudi_service_cron time_offsets do not cause the
      cron expression sequence to occur more than the
      cron expression specifies

2019-11-12 Michael Truog   <mjtruog at protonmail dot com>

    * Add cloudi_service_cron time_offset timer adjustments
      for when the system clock changes

2019-11-09 Michael Truog   <mjtruog at protonmail dot com>

    * Simplify cloudi_cron module and add documentation

2019-11-05 Michael Truog   <mjtruog at protonmail dot com>

    * Simplify cloudi_cron module

2019-11-04 Michael Truog   <mjtruog at protonmail dot com>

    * Fix cloudi_service_cron date increment

2019-11-03 Michael Truog   <mjtruog at protonmail dot com>

    * Fix cloudi_service_cron so it handles DST adjustments
    * Fix cloudi_service_cron milliseconds adjustment
      by always having a cron expression timer occur
      10 milliseconds after the appropriate datetime
      (to handle any timer variation)

2019-11-02 Michael Truog   <mjtruog at protonmail dot com>

    * Add user and su_path configuration arguments to
      cloudi_service_shell for execution as a specific user
    * Add debug configuration argument to
      cloudi_service_shell and cloudi_service_cron, to be
      consistent with cloudi_service_null

2019-11-01 Michael Truog   <mjtruog at protonmail dot com>

    * Add debug_level configuration argument to
      cloudi_service_shell and cloudi_service_cron

2019-10-31 Michael Truog   <mjtruog at protonmail dot com>

    * Improve cloudi_service_cron expressions argument

2019-10-30 Michael Truog   <mjtruog at protonmail dot com>

    * Add cloudi_service_shell env configuration argument

2019-10-29 Michael Truog   <mjtruog at protonmail dot com>

    * Add cloudi_service_shell
    * Add cloudi_service_cron

2019-10-25 Michael Truog   <mjtruog at protonmail dot com>

    * Fix CloudI Service API services_add so successfully started
      services are tracked properly when a later service fails to
      successfully start
      (when starting multiple services in a single services_add call)
    * Set the default configuration of the port 6464 HTTP server
      to use a 30 second timeout for HTTP/1 requests

2019-10-24 Michael Truog   <mjtruog at protonmail dot com>

    * Add +pc unicode to vm.args for unicode CloudI logging
    * Add cloudi_service_null debug_contents argument
    * Fix Java CloudI API request_type variable names
    * Expect Erlang/OTP >= 23 to not require a space_merge
      parsing of -args_file lines (will instead use exact parsing)

2019-10-22 Michael Truog   <mjtruog at protonmail dot com>

    * Small improvements to cloudi executable and vm.config

2019-09-21 Michael Truog   <mjtruog at protonmail dot com>

    * Fix cloudi executable handling of quotes and spaces when
      parsing the vm.args config file
    * Add a ${CLOUDI_NODE_ARGS}.args configuration file for
      Erlang/OTP VM arguments specific to the node
      (typically adding paths to the code server's search paths)
    * Move the app.config configuration file to vm.config

2019-09-15 Michael Truog   <mjtruog at protonmail dot com>

    * Add cloudi executable comment about stop and restart delay

2019-09-14 Michael Truog   <mjtruog at protonmail dot com>

    * The cloudi executable will not create a
      ${HOME}/.erlang.cookie file now
    * Use the cloudi executable node name for the
      /tmp pipe directory used for the Erlang shell and
      the default pid file name

2019-09-07 Michael Truog   <mjtruog at protonmail dot com>

    * Ignore the DEP0097 runtime deprecation in the
      JavaScript CloudI API due to required domain module use
      (prevents stderr output logged as ERROR that is not an error)
    * Add Cabal package version check for testing GHC 8.8.1
    * Update Haskell CloudI API dependencies to work with
      GHC >= 8.8.1 and Cabal >= 3.0.0

2019-09-01 Michael Truog   <mjtruog at protonmail dot com>

    * Add support for GCC 8.3.0
    * Add support for clang 8.0.0

2019-08-24 Michael Truog   <mjtruog at protonmail dot com>

    * Add "type" to the CloudI Service API JSON response for services
    * Add "type", "prefix", "file_path", "module" to the
      CloudI Service API response for services_status
    * Fix errors in cloudi_service_api_requests caused by invalid input
    * Update nodefinder

2019-05-18 Michael Truog   <mjtruog at protonmail dot com>

    * Add Erlang/OTP 23 compatibility
    * Add OCaml 4.08.0 compatibility
    * Update the Erlang binary term format encoding implementations
      to support Erlang/OTP 23 with the programming languages
      Go, Haskell, Java, JavaScript, OCaml, Perl, PHP, Python and Ruby
    * Update uuid

2019-04-05 Michael Truog   <mjtruog at protonmail dot com>

    * Update Python Erlang binary term format encoding

2019-03-23 Michael Truog   <mjtruog at protonmail dot com>

    * Allow ACL strings to not contain pattern characters for
      exact matches (now ACL non-pattern strings are no longer
      modified to become patterns by adding a "*" suffix)

2019-03-22 Michael Truog   <mjtruog at protonmail dot com>

    * Fix quickstart so it uses request_type as the variable
      name for the request type instead of command

2019-03-20 Michael Truog   <mjtruog at protonmail dot com>

    * Update reltool_util
      (for release script use with Erlang/OTP >= 22)

2019-03-16 Michael Truog   <mjtruog at protonmail dot com>

    * Change all CloudI services to use "request type" as the
      variable name for the request type (instead of "type")
      (affects OCaml, Haskell and Erlang services)
    * Add {load_dot_erlang,false} reltool release option
      to prevent the ~/.erlang file from being used with the
      Erlang cloudi release when using Erlang/OTP >= 22
    * Avoid deprecated inspect.getargspec in the
      Python and Python/C CloudI API implementations

2019-01-26 Michael Truog   <mjtruog at protonmail dot com>

    * Add CloudI Erlang logging macros for providing the
      loglevel as a parameter (LOG, LOG_SYNC, LOG_APPLY)
    * Add CloudI Service API nodes_set log_reconnect
      configuration of the loglevel used when logging
      disconnected nodes before each reconnect attempt

2019-01-25 Michael Truog   <mjtruog at protonmail dot com>

    * Add CloudI API fixes based on package builds
    * Change the Java CloudI API poll function return type
      to be boolean primitive instead of a Boolean object

2019-01-20 Michael Truog   <mjtruog at protonmail dot com>

    * Fix service shutdown to ensure other service processes
      are terminated when one service process either reaches the
      max restart count or has a successful shutdown
      (via the shutdown CloudI API function)
        * Fix count_process_dynamic enabled services to
          ensure service termination occurs without interference
          from the count_process_dynamic service process adjustments

2019-01-19 Michael Truog   <mjtruog at protonmail dot com>

    * Add the CloudI API function shutdown to all external service
      programming languages (C/C++, Go, Haskell, Java, JavaScript,
      OCaml, Perl, PHP, Python, Ruby) to allow external services
      a way to have a successful shutdown without using the
      CloudI Service API services_remove
      (the functionality is equivalent to an internal service using
       {stop, {shutdown, Reason}, State} or
       {stop, shutdown, State} if Reason == "")
    * Fix pylint errors in the Python CloudI API and the
      Python integration tests

2019-01-18 Michael Truog   <mjtruog at protonmail dot com>

    * Change cloudi_service_api_batch to log an error when
      a service fails to initialize (and purge the queue)

2019-01-12 Michael Truog   <mjtruog at protonmail dot com>

    * Add cloudi_service_api_batch arguments
      queues, queues_static and stop_when_done
      (can allow cloudi_service_api_batch service executions to be
       nested if necessary)
    * Add cloudi_service_api_batch CT tests for the arguments
      queues, queues_static and stop_when_done
    * Add HTTP support to cloudi_service_api_batch
    * Add cloudi_service_api_requests from/to format conversion functions

2019-01-11 Michael Truog   <mjtruog at protonmail dot com>

    * Add cloudi_service_api_batch services_remove and
      services_restart functionality

2019-01-06 Michael Truog   <mjtruog at protonmail dot com>

    * Update README to provide better internal service information

2019-01-05 Michael Truog   <mjtruog at protonmail dot com>

    * Add cloudi_service_api_batch CT tests

2019-01-04 Michael Truog   <mjtruog at protonmail dot com>

    * Add cloudi_service_api_batch to provide batch execution
      of CloudI services with service configurations in named queues

2018-12-18 Michael Truog   <mjtruog at protonmail dot com>

    * CloudI version 1.7.5 released

2018-12-17 Michael Truog   <mjtruog at protonmail dot com>

    * Switch to using the OTP_RELEASE macro
      for Erlang source code compatibility
    * Fix parse_trans and setup version string

2018-12-13 Michael Truog   <mjtruog at protonmail dot com>

    * Add logger_proxy message_queue_len check to
      cloudi_service_monitoring
    * Update Travis build configuration

2018-12-12 Michael Truog   <mjtruog at protonmail dot com>

    * Fix cloudi_service_monitoring
      (for Erlang/OTP >= 21 and the changes in CloudI 1.7.4)
    * Add time warp configuration directly to the vm.args file
    * Small change to reduce latency in the
      cloudi_service_router ssh server connection use
    * Improve the build system by expanding variables

2018-12-11 Michael Truog   <mjtruog at protonmail dot com>

    * Add "?" as a supported wildcard character in
      service name patterns
      ("?" will never match the next character in the string and
       is unable to be the last character in the string,
       i.e. "/?/" matches "/a/" but never "/a/b/" while
       "/*/" will match either with "?" taking precedence if
       "*" is also present)
    * Update cpg
    * Fix elli preprocessor use
    * Ensure all Erlang compilation uses erl_opts
      debug_info and deterministic
    * Fix cloudi_core CT test TransId order checks

2018-12-10 Michael Truog   <mjtruog at protonmail dot com>

    * Add cloudi_service_name:pattern/1 function to have the
      service name pattern wildcard character check in a single place
    * Update trie

2018-12-04 Michael Truog   <mjtruog at protonmail dot com>

    * Update pgsql (to 26.0.2)
    * Update epgsql (to 4.2.1)

2018-12-03 Michael Truog   <mjtruog at protonmail dot com>

    * Update hackney (to 1.14.3)
    * Update certifi
    * Update idna
    * Update ssl_verify_fun
    * Update unicode_util_compat

2018-12-01 Michael Truog   <mjtruog at protonmail dot com>

    * Fix cowboy1 stacktrace syntax
    * Update elli (to 3.1.0)
    * Update jsx (to 2.8.3)

2018-11-30 Michael Truog   <mjtruog at protonmail dot com>

    * Update cowboy (to 1.1.2)
    * Update cowlib
    * Update ranch
    * Fixed cloudi_service_filesystem and cloudi_service_http_client
      tests for cowboy 1.1.2
    * Move all cowboy related source code to have a "1" suffix on
      module names, to avoid future conflicts with cowboy 2.x modules
      (cloudi_service_http_cowboy1, cowboy1, cowlib1, ranch1,
       with cow_ prefix modules becoming cow1_)

2018-11-14 Michael Truog   <mjtruog at protonmail dot com>

    * Update exometer
    * Update exometer_core, parse_trans and setup
    * Update exometer_influxdb
    * Update folsom and bear
    * Update hut

2018-11-12 Michael Truog   <mjtruog at protonmail dot com>

    * Fix locally registered name race condition in proper_statem
      tests used by trie and pqueue
      (requires Erlang/OTP >= 18.0, currently using Erlang/OTP >= 19.3)

2018-11-09 Michael Truog   <mjtruog at protonmail dot com>

    * Add cost and cost_precision as CloudI Service API nodes_set
      configuration parameters for use in the nodes_status output
      (in uptime_cost and tracked_cost, when cost is set)
    * Update cpg

2018-11-08 Michael Truog   <mjtruog at protonmail dot com>

    * Add CloudI Service API nodes_status function to provide
      uptime and availability information that is similar to services_status

2018-11-07 Michael Truog   <mjtruog at protonmail dot com>

    * Add limit (STATUS_DURATIONS_YEAR_MAX) to the number of durations
      that may be stored during a year when tracking restart/update delays
      for the CloudI Service API services_status function

2018-10-28 Michael Truog   <mjtruog at protonmail dot com>

    * Add Erlang/OTP 21 compatibility to the cloudi_service_quorum CT test

2018-10-27 Michael Truog   <mjtruog at protonmail dot com>

    * Add autoconf check for C++ exceptions
    * Update external autoconf macros

2018-10-20 Michael Truog   <mjtruog at protonmail dot com>

    * Update proper
    * Update erlang_php tests to require PHP7

2018-10-13 Michael Truog   <mjtruog at protonmail dot com>

    * Improve cloudi_service_router ssh server throughput

2018-10-04 Natanael Copa   <ncopa at alpinelinux dot org>

    * Fix autoconf Erlang version check for aarch64

2018-09-22 Michael Truog   <mjtruog at protonmail dot com>

    * Update backward-cpp
    * Update travis build to use GCC 7 and clang 5

2018-09-16 Michael Truog   <mjtruog at protonmail dot com>

    * CloudI version 1.7.4 released

2018-09-15 Michael Truog   <mjtruog at protonmail dot com>

    * Add cloudi_core Erlang application compiler dependency
    * Add CloudI Service API code_status output in cloudi_core CT tests

2018-09-14 Michael Truog   <mjtruog at protonmail dot com>

    * Add support for Haskell >= 8.4.1
    * Update all Haskell CloudI API dependencies

2018-09-08 Michael Truog   <mjtruog at protonmail dot com>

    * Simplify the CloudI Service API dashboard view_log.html page
    * Add fields to the CloudI Service API code_status function
      (runtime_cloudi_start, runtime_cloudi_total) and change
      runtime_changes to runtime_cloudi_changes

2018-09-07 Michael Truog   <mjtruog at protonmail dot com>

    * Improvements to CloudI release scripts
        * reboot command checks the vm.args for -heart
        * erl_crash.dump is always written (with or without -heart)
        * heart defaults are constants

2018-09-01 Michael Truog   <mjtruog at protonmail dot com>

    * Fix small error in Python and Python/C msg_size source code
    * Improve programmatic Python version checking

2018-08-25 Michael Truog   <mjtruog at protonmail dot com>

    * Convert the CloudI Service API dashboard code_path.html 
      and log_settings.html to utilize JSON responses from
      cloudi_service_api_requests
    * Fix the CloudI Service API functions logging_syslog_set and
      logging_formatters_set so undefined is a valid parameter

2018-08-18 Michael Truog   <mjtruog at protonmail dot com>

    * Add fields to the CloudI Service API code_status function
      (runtime_start, runtime_clock, runtime_clock_offset)
    * Update the cloudi_service_api:code_status type specification
    * Add cloudi_timestamp:seconds_to_string/2 and
      cloudi_timestamp:nanoseconds_to_string/2
    * Convert the CloudI Service API dashboard nodes.html to
      utilize JSON responses from cloudi_service_api_requests

2018-08-11 Michael Truog   <mjtruog at protonmail dot com>

    * Remove Erlang string module use in autoconf macros
    * Add field to the CloudI Service API code_status function
      (build_cloudi_cxx_dependencies_versions)

2018-08-05 Michael Truog   <mjtruog at protonmail dot com>

    * Add field to the CloudI Service API code_status function
      (build_cloudi_cxx_compiler_version)
    * Fix rebar2 compilation warning

2018-08-04 Michael Truog   <mjtruog at protonmail dot com>

    * Add fields to the CloudI Service API code_status function
      (build_cloudi_time, build_erlang_erts_c_compiler_version,
       install_erlang_erts_time,
       install_erlang_kernel_time, install_erlang_stdlib_time,
       install_erlang_sasl_time, install_erlang_compiler_time,
       install_cloudi_time)
    * Use the deterministic Erlang compilation option

2018-07-28 Michael Truog   <mjtruog at protonmail dot com>

    * Add static method support to the Java CloudI API
      (including method references to static methods)

2018-07-26 Michael Truog   <mjtruog at protonmail dot com>

    * Add "--verbose 3" to the rebar2 command line
    * Fix the configure script help info default python-version
    * Add configure script dependencies on Erlang/OTP snmp and eunit
    * Prevent rebar2 from creating empty .so files
    * Allow the Python CloudI API and the Python/C CloudI API
      to utilize non-member functions that have api as the first
      parameter (to have access to the CloudI API object)
    * Update the msg_size python and python_c integration tests
      to utilize a non-member function

2018-07-14 Michael Truog   <mjtruog at protonmail dot com>

    * Improve the JSON-RPC handling in cloudi_service_api_requests
      so the specification is followed properly
    * Change the service_api dashboard web interface service summary
      to use the new JSON support added to cloudi_service_api_requests

2018-07-10 Michael Truog   <mjtruog at protonmail dot com>

    * Manual update of Elixir logging module and content type data

2018-07-09 Michael Truog   <mjtruog at protonmail dot com>

    * Fix cloudi_args_type type specification

2018-07-07 Michael Truog   <mjtruog at protonmail dot com>

    * Fix JavaScript CloudI API termination by closing its socket
    * Fix JavaScript CloudI API version check for compatibility

2018-07-06 Michael Truog   <mjtruog at protonmail dot com>

    * Add the TIMEOUT_TERMINATE_EXTERNAL macro to reduce the
      timeout_terminate value used in the OS processes of
      external service threads, to allow time for sending SIGKILL
      while avoiding the potential for the service monitor
      to kill the external service Erlang process
    * Fix how cloudi_service_api_requests turns an internal
      service's arguments into a JSON string so it matches
      the JSON input of an internal service
    * Change the service monitor to not wait for the termination
      of service processes when a service is forced to shutdown
    * In the service monitor, use the time of the beginning of the
      termination to more accurately enforce the timeout_terminate

2018-07-05 Michael Truog   <mjtruog at protonmail dot com>

    * Improve (internal cloudi_core) message names and function names
      related to CloudI service initialization and termination

2018-06-26 Michael Truog   <mjtruog at protonmail dot com>

    * Add delay for cloudi_service_map_reduce info messages
      that occur before initialization is complete
    * Add service_ids list to CloudI Service API code_status
      response within the runtime_changes data

2018-06-25 Michael Truog   <mjtruog at protonmail dot com>

    * Add the CloudI Service API function code_status to
      provide build and runtime information
      (including service files that have changed since startup)
    * Fix CloudI Service API tests to rely on
      cloudi_service_api_requests providing JSON-RPC with
      JSON data instead of Erlang terms
    * Update jsonrpclib (now Python 3 is supported)
    * Fix cloudi_service_map_reduce startup after last change

2018-06-19 Michael Truog   <mjtruog at protonmail dot com>

    * Final changes to Erlang/OTP 21.0 logger configuration
    * Fix problem with cloudi_service_map_reduce use with the
      service configuration option duo_mode == true

2018-06-18 Michael Truog   <mjtruog at protonmail dot com>

    * Improve critical CloudI service startup messages and comments

2018-06-17 Michael Truog   <mjtruog at protonmail dot com>

    * Change CloudI Service API services_status time duration
      strings to omit large 0 durations and to use singular units

2018-06-16 Michael Truog   <mjtruog at protonmail dot com>

    * Add more comments to cloudi_service_queue
    * Change CloudI Service API services_status time duration
      strings to provide days

2018-06-11 Michael Truog   <mjtruog at protonmail dot com>

    * Add the Erlang implementation of the binary_pairs format
      (for RequestInfo/ResponseInfo key/value data)

2018-06-09 Michael Truog   <mjtruog at protonmail dot com>

    * Remove ZeroMQ support from this repository
      (it continues to exist at
       https://github.com/CloudI/cloudi_service_zeromq)
        * If cloudi_service_zeromq was being used for CloudI
          node connections, it is best to switch to using the SSH
          connectivity in cloudi_service_router

2018-06-06 Michael Truog   <mjtruog at protonmail dot com>

    * Improve the accuracy of the time used for the start/end of a
      restart for the data used by the CloudI Service API
      function services_status
        * Now the CloudI Service API services_status function tracks
          restarting downtime as a time period that begins
          immediately before the service termination starts and ends
          immediately after the service initialization is finished

2018-06-04 Michael Truog   <mjtruog at protonmail dot com>

    * Add the remaining changes for JSON support in
      cloudi_service_api_requests

2018-06-02 Michael Truog   <mjtruog at protonmail dot com>

    * Add JSON as a supported format of cloudi_service_api_requests
    * Switch the JSON-RPC support in cloudi_service_api_requests to
      use JSON text for the request/response instead of erlang terms
    * Add the functions cloudi_string:term_to_binary_compact/1 and
      cloudi_string:term_to_list_compact/1

2018-06-01 Michael Truog   <mjtruog at protonmail dot com>

    * Set the service process dictionary uptime to use a
      nanoseconds offset from the node start time to allow
      the values to be compared in a unit of time
    * Fix cloudi_service_api_requests so it can handle
      module reloading

2018-05-31 Michael Truog   <mjtruog at protonmail dot com>

    * Make kernel logger configuration backwards compatible

2018-05-30 Michael Truog   <mjtruog at protonmail dot com>

    * Fix the function order in the cloudi_service_api module
      so it matches the API documentation
    * Fix kernel logger configuration based on Erlang/OTP 21-rc2

2018-05-29 Michael Truog   <mjtruog at protonmail dot com>

    * Modified the CloudI Service API function services_status output
      to retain downtime for smaller time periods after past downtime
      even if there is no recent downtime
      (at least 3 time periods remain visible)

2018-05-28 Michael Truog   <mjtruog at protonmail dot com>

    * Fixed the CloudI Service API function services_status output
      related to the availability of the total uptime

2018-05-26 Michael Truog   <mjtruog at protonmail dot com>

    * Add the total availability to the CloudI Service API function
      services_status by only excluding the restarting time during each
      time period
    * Make the CloudI Service API function services_status return format
      more minimal based on the values currently available
    * Fix the CloudI Service API function services_status interrupt
      due to updating so it properly considers the availability time period
    * In the CloudI Service API function services_status output,
      use the term "interrupt" instead of "downtime" for the amount
      of time spent updating, since that is more correct
      (processing queued messages is paused during the update)

2018-05-25 Michael Truog   <mjtruog at protonmail dot com>

    * Allow the CloudI Service API function services_status to return
      all service status information when an empty list is used
    * Add the downtime spent restarting and updating to the
      CloudI Service API function services_status

2018-05-22 Michael Truog   <mjtruog at protonmail dot com>

    * Fix bug with CloudI Service API function services_update that
      prevented the command-line argument from being updated for its
      use when calling the aspects_init_after functions
      (i.e., after the update causes a new OS process to start)
    * Fix bug with CloudI Service API function services_search when
      a scope is provided that doesn't exist

2018-05-21 Michael Truog   <mjtruog at protonmail dot com>

    * Change the CloudI Service API function services_status by
      splitting the availability values into running values
      (representing uptime_running) and updated values
      (uptime_running minus any elapsed time during updates)
    * Fix timeout_terminate limit_min/limit_max presence in
      the view of a service's configuration

2018-05-18 Michael Truog   <mjtruog at protonmail dot com>

    * Fix restart_count_total bug with recent uptime additions

2018-05-16 Michael Truog   <mjtruog at protonmail dot com>

    * Add 33.3% availability level to the CloudI Service API
      function services_status

2018-05-15 Michael Truog   <mjtruog at protonmail dot com>

    * Add availability information to the CloudI Service API
      function services_status based on the uptime_running value
    * Fix the cloudi_core_i_configurator module to use infinity timeouts
      when modifying the CloudI configuration, so it isn't possible to
      have a timeout exception in the middle of adding or removing
      services (i.e., a timeout exception that causes a state
      inconsistency, it is still possible for the cloudi_core_i_configurator
      function call to timeout)

2018-05-13 Michael Truog   <mjtruog at protonmail dot com>

    * Add the CloudI Service API function services_status to provide the
      runtime status of any services at a single point in time
      (it returns dynamic service state information: the number
       of processes/threads, the uptime in hours and the number of restarts)

2018-05-10 Michael Truog   <mjtruog at protonmail dot com>

    * Add service uptime information to all long-lived
      Erlang service processes with the process dictionary
      key cloudi_service_uptime
    * Fix external service crash information format output
      (format_status/2 in erlang crash log)
    * Update uuid

2018-05-03 Michael Truog   <mjtruog at protonmail dot com>

    * Add Erlang/OTP 21.0 compatibility
        * Switch from sasl to kernel logger
          (uses "erlang_kernel.log" file instead of "sasl.log")

2018-04-25 Michael Truog   <mjtruog at protonmail dot com>

    * Disable the Erlang shell command line interface in the ssh daemon
      ran by cloudi_service_router

2018-04-20 Michael Truog   <mjtruog at protonmail dot com>

    * Update cpg

2018-04-12 Michael Truog   <mjtruog at protonmail dot com>

    * Improve Python 3 support in the Python CloudI API
      by avoiding a failure when checking string types
    * Update Ruby source code based on ruby linter

2018-04-11 Michael Truog   <mjtruog at protonmail dot com>

    * Update all the Python source code based on pylint

2018-04-09 Michael Truog   <mjtruog at protonmail dot com>

    * Add the checksum argument to cloudi_service_queue so a
      checksum may be stored with each data chunk

2018-04-08 Michael Truog   <mjtruog at protonmail dot com>

    * Require service requests using a cloudi_service_router ssh
      connection to have a timeout of at least FORWARD_DELTA
    * Update nodefinder

2018-04-07 Michael Truog   <mjtruog at protonmail dot com>

    * Change unknown call/cast/info Erlang message handling to
      use the same mechanism everywhere:
        * Use "Unknown _ \"~w\"" as an Erlang string stop reason
    * Fix all internal services so cloudi_service_terminate/3
      can accept a State variable as undefined, which occurs when
      cloudi_service_init/4 throws an exception
      (This is different from Erlang/OTP behaviours
       (they do not call terminate/2 if init/1 had an exception)
       because it allows easy handling of external state at termination,
       if any was partially initialized and to be consistent with
       external services (execution after poll is termination).)
    * Fix removal of pretty-printing of the cloudi_service_api_requests
      response (which changed in the 1.7.3 release when fixing unicode
      support in the cloudi_string module)
    * Allow environment variable use in the CloudI Service API
      nodes_set discovery ec2 options:
      access_key_id, secret_access_key, host
    * Update cpg, supool, nodefinder

2018-04-06 Michael Truog   <mjtruog at protonmail dot com>

    * Add ssh connectivity to cloudi_service_router

2018-03-29 Michael Truog   <mjtruog at protonmail dot com>

    * Switch cloudi.org links from http to https
    * Update html docs

2018-03-28 Michael Truog   <mjtruog at protonmail dot com>

    * Change my email address from gmail to protonmail

2018-03-16 Michael Truog   <mjtruog at gmail dot com>

    * Fix elapsed time for crdt mode in cloudi_service_request_rate
    * Add average, minimum, maximum request rate range to
      cloudi_service_request_rate results

2018-03-15 Michael Truog   <mjtruog at gmail dot com>

    * Add timeout_default argument to cloudi_crdt
    * Add timeout_default argument to cloudi_queue
    * Add mode argument to cloudi_service_request_rate with a new
      crdt mode that shares the request rate status among the processes

2018-03-14 Michael Truog   <mjtruog at gmail dot com>

    * Add priority_default and priority_default_offset
      arguments to cloudi_crdt
    * Add priority_default argument to cloudi_queue
    * Use the tick_length argument as the service request timeout
      in cloudi_service_request_rate to make its configuration
      simpler and less error-prone

2018-03-12 Michael Truog   <mjtruog at gmail dot com>

    * Add cloudi_crdt:event_id() as a parameter passed to any of the
      cloudi_crdt write operations which is set in the crdt_event record
      that is received when cloudi_crdt:events_subscribe is used
      (this changes the crdt_event record)
    * Modify the Erlang count integration test to use
      cloudi_crdt:events_subscribe

2018-03-08 Michael Truog   <mjtruog at gmail dot com>

    * Fix OCaml CloudI API cross-module inlining for native compilation

2018-03-06 Michael Truog   <mjtruog at gmail dot com>

    * Add the update_assign functions to cloudi_crdt to combine the
      functionality of an update with an assign to ensure either occurs
    * Fix cloudi_crdt bootstrap POLogMode
      (Change the bootstrap check so it allows state data requests
       asynchronously so there isn't a messaging deadlock causing a retry)

2018-03-05 Michael Truog   <mjtruog at gmail dot com>

    * Fix OCaml CloudI API installation to use archives
      (both native and bytecode)

2018-03-03 Michael Truog   <mjtruog at gmail dot com>

    * Switched release management from sourceforge.net to osdn.net
      because SourceForge has had an outage for more than 78 hours

2018-02-27 Michael Truog   <mjtruog at gmail dot com>

    * CloudI version 1.7.3 released

2018-02-26 Michael Truog   <mjtruog at gmail dot com>

    * Update nodefinder

2018-02-24 Michael Truog   <mjtruog at gmail dot com>

    * Add events_subscribe/3 events_subscribe/4 events_clear/3 functions
      to cloudi_crdt for providing events to the CloudI service process
    * Add member_all/2 function to cloudi_lists

2018-02-23 Michael Truog   <mjtruog at gmail dot com>

    * Get compilation with Erlang/OTP 21 working
    * Add function cloudi_lists:iodata_to_list/1
    * Add functions findl/2 findr/2 join/2 lowercase/1 split/2
      titlecase/1 trim/1 trim/2 triml/1 triml/2 trimr/1 trimr/2
      uppercase/1 to cloudi_string
    * Update nodefinder, cgroups, reltool_util, syslog_socket

2018-02-21 Michael Truog   <mjtruog at gmail dot com>

    * Add the cloudi_crdt:update functions
    * Add the cloudi_crdt:byte_size function
    * Improve cloudi_service:get_pids type specification
    * Add the cloudi_queue:byte_size functions
    * Change the cloudi_queue:size/1 and cloudi_queue:failures/1
      functions to cloudi_queue:size/2 and cloudi_queue:failures/2
    * Update cpg

2018-02-20 Michael Truog   <mjtruog at gmail dot com>

    * Add bootstrap and clean_vclocks functionality to cloudi_crdt
      so the CloudI service processes that utilize it may
      restart, start, or fail without affecting its operation
    * Fix external CloudI service Erlang process viewing with
      the format_status/2 callback due to gen_fsm/gen_statem difference

2018-02-17 Michael Truog   <mjtruog at gmail dot com>

    * Fix automake subdirs use for distclean
    * Fix minimum Erlang/OTP version (it is now 19.3)
    * Add ordered argument to cloudi_queue
    * Add mcast support to cloudi_queue
    * Add the cloudi_crdt module for replicating an Erlang map
      between internal CloudI services
    * Add cloudi_crdt usage in the Erlang count integration test
      (when the count test is ran with the mode argument as crdt)

2018-01-27 Michael Truog   <mjtruog at gmail dot com>

    * Fix cloudi_service_http_rest cloudi_service_init failure handling

2018-01-20 Michael Truog   <mjtruog at gmail dot com>

    * Add check to cause an internal or external service to crash
      if the CloudI API functions subscribe/subscribe_count/unsubscribe 
      are passed a pattern that includes the character sequence "**"

2018-01-19 Michael Truog   <mjtruog at gmail dot com>

    * Update the Erlang Binary Term Format for
      Go/JavaScript/Perl/PHP/Python/Ruby to encode
      nil/undefined/undef/NULL/None as an undefined Erlang atom

2018-01-06 Michael Truog   <mjtruog at gmail dot com>

    * Fix logging syslog handling to ensure misconfigured syslog
      settings will not cause a crash if the settings are set
      dynamically and add log output with the error information
    * Update syslog_socket

2018-01-05 Michael Truog   <mjtruog at gmail dot com>

    * Fix JavaScript CloudI API to no longer have a busy-wait
      problem when blocking on poll

2018-01-04 Michael Truog   <mjtruog at gmail dot com>

    * Fix multicast node discovery to not crash on udp errors
      (e.g., enetunreach)
    * Update nodefinder, cpg

2017-12-30 Michael Truog   <mjtruog at gmail dot com>

    * Add file_size_limit argument to cloudi_service_queue so the
      file will always stay below the file_size_limit value
      (default value is 128MB)
      (if fault_isolation is both, the response size may cause
       the file size to exceed the file_size_limit because the
       response size isn't able to be anticipated accurately
       (if the response size is less than or equal to the request size
        this is never a problem because the space is reused))

2017-12-29 Michael Truog   <mjtruog at gmail dot com>

    * Fix OCaml 4.06 support by relying fully on
      OCaml num as an external dependency
    * Fix Java 9 support by using Add-Opens in the jar manifests
      (with Main-Class entries) to allow file descriptor creation
      from an integer using reflection

2017-12-28 Michael Truog   <mjtruog at gmail dot com>

    * Fix Java 9 CloudI API Integer constructor deprecation error
    * Add OCaml num as an external dependency of the OCaml CloudI API
      due to its removal from the core OCaml distribution in 4.06
    * Update the NOTICE file
      (now sorted with programming language to match external/README.markdown)

2017-12-24 Michael Truog   <mjtruog at gmail dot com>

    * Add a default umask for CloudI execution as 0027
    * Add the CLOUDI_UMASK configure variable to set the umask
      for CloudI execution to something other than the default

2017-12-23 Michael Truog   <mjtruog at gmail dot com>

    * Change all the pid_options service configuration options to
      default to {message_queue_data, on_heap} based on testing
      CloudI service request performance, so CloudI services are
      not adversely affected by using the "+hmqd off_heap"
      command line argument
    * Add public_key to the dialyzer.plt file generated

2017-12-22 Michael Truog   <mjtruog at gmail dot com>

    * Switch CloudI service restart times to use monotonic time
    * Switch cloudi_queue to use monotonic time
    * Switch cloudi_service_monitoring to use monotonic time
    * Switch cloudi_service_quorum to use monotonic time
    * Switch cloudi_service_request_rate to use monotonic time
    * Switch cloudi_service_router to use monotonic time
    * Switch cloudi_service_validate to use monotonic time
    * Fix cloudi_timestamp type additions
    * Add cloudi_timestamp functions seconds_filter_monotonic/3,
      uptime_days/0, uptime_months/0, uptime_years/0

2017-12-21 Michael Truog   <mjtruog at gmail dot com>

    * Add package name to Java CloudI API for Java 9
    * Update nodefinder

2017-12-19 Michael Truog   <mjtruog at gmail dot com>

    * Fix bug where the dest_list_deny and dest_list_allow were not checked
      with service requests that were sent using the functions within
      cloudi_service_children.hrl
      (this problem affected the services:
       cloudi_service_http_elli, cloudi_service_http_cowboy and
       cloudi_service_tcp)

2017-12-16 Michael Truog   <mjtruog at gmail dot com>

    * Add cloudi_timestamp types
    * Add log_execution_time argument to cloudi_service_map_reduce

2017-12-07 Michael Truog   <mjtruog at gmail dot com>

    * Fix optional integration tests configuration use of configure prefix
    * Fix python quickstart for python 3 use

2017-12-02 Michael Truog   <mjtruog at gmail dot com>

    * Fix the cloudi_service_monitoring aspect functions so they will
      not cause an exception if the cloudi_service_monitoring_cloudi
      module is reloaded

2017-11-26 Michael Truog   <mjtruog at gmail dot com>

    * Allow cloudi_queue to do a service name lookup for a retry if
      the pattern_pid() was not provided to the initial cloudi_queue send

2017-11-25 Michael Truog   <mjtruog at gmail dot com>

    * Add retry_delay option to cloudi_queue

2017-10-21 Michael Truog   <mjtruog at gmail dot com>

    * Change the transaction id v1 UUID to have a node id created from
      the lookup3 Bob Jenkins hash function
      (it remains 16 bits for the node hash and 32 bits for the pid hash)
    * Update uuid and quickrand

2017-10-14 Michael Truog   <mjtruog at gmail dot com>

    * Add cloudi_queue functions failures, recv_id, send_id and size
    * Fix the hexpi integration test termination to
      wait for all cloudi_queue sends to complete
    * Change nodejs nice setting to 19 in integration tests configuration
      due to its extreme CPU use without yield when idle

2017-10-12 Michael Truog   <mjtruog at gmail dot com>

    * Fix monitor message leaks
    * Fix optional programming language integration test configuration
      scope name to reflect "test_" prefix that was added to test names
    * Update cpg and varpool

2017-09-14 Michael Truog   <mjtruog at gmail dot com>

    * Fix cloudi_service_null to provide a null response
      (noreply does not provide a null response)
    * Change cloudi_service_null to only use the service pattern prefix
      for its subscription (so "*" is a valid catch-all prefix)
    * Fix websockets integration test for Python 3
    * Add cloudi_service_null to both default configuration files

2017-09-13 Michael Truog   <mjtruog at gmail dot com>

    * CloudI version 1.7.2 released

2017-09-12 Michael Truog   <mjtruog at gmail dot com>

    * Update exometer_core
    * Update hackney

2017-09-06 Michael Truog   <mjtruog at gmail dot com>

    * Move the Erlang integration tests to have a prefix of
      cloudi_service_test_ instead of cloudi_service_
    * Move the cloudi_service_request_rate to be included in the
      CloudI release
    * Add cloudi_service_null to be the equivalent of /dev/null

2017-09-05 Michael Truog   <mjtruog at gmail dot com>

    * Change the default version of Python to 3
    * Add update of timeout_async and timeout_sync to
      cloudi_service_http_cowboy and cloudi_service_http_elli

2017-09-04 Michael Truog   <mjtruog at gmail dot com>

    * Update quickrand

2017-09-02 Michael Truog   <mjtruog at gmail dot com>

    * Fix the service configuration option response_timeout_immediate_max
      when request_name_lookup is set to async and a lookup timeout occurs
    * Fix cloudi_queue:send when PatternPid is provided as undefined

2017-09-01 Michael Truog   <mjtruog at gmail dot com>

    * Fix release script to always succeed with stop (for openrc-run)
    * Improve configure script rebar check
    * Fix monkey_latency time_gaussian bug that would almost never occur
      (the Box-Mullter transformation X1 would need to be 0.0)
    * Update quickrand
    * Fix dialyzer execution to match the new paths of
      the Erlang integration tests
    * Add environment variable arguments
      CLOUDI_ARG_NODE_NAME_SHORT, CLOUDI_ARG_NODE_NAME_LONG, and
      CLOUDI_ARG_NODE_COOKIE to the configure script for modifying the
      vm.args file used in the CloudI release

2017-08-11 Michael Truog   <mjtruog at gmail dot com>

    * Fix automake build of Erlang source code for parallel use

2017-08-10 Michael Truog   <mjtruog at gmail dot com>

    * Finished improving the automake build of Java source code
    * Fix the install step of the Haskell integration tests

2017-08-09 Michael Truog   <mjtruog at gmail dot com>

    * Reduce the release script functionality to the core necessary and
      add default values for all erl and epmd environment variables
    * Fix Java CloudI API compilation for parallel make

2017-08-08 Michael Truog   <mjtruog at gmail dot com>

    * Change the runtime current working directory to the log directory

2017-08-06 Michael Truog   <mjtruog at gmail dot com>

    * Change log_time_offset log output to seconds with nanoseconds precision

2017-08-05 Michael Truog   <mjtruog at gmail dot com>

    * Service configuration option request_timeout_adjustment was modified to
      use Erlang monotonic time so timeout adjustments are not impacted by any
      OS time changes
    * JavaScript CloudI API now properly handles the request_timeout_adjustment
      service configuration option for service request responses
    * cloudi_service_http_client, cloudi_service_http_cowboy,
      cloudi_service_http_elli now use Erlang monotonic time when reporting
      the time a request takes in the log output

2017-08-03 Michael Truog   <mjtruog at gmail dot com>

    * Handle erlang:deprecated_time_unit() in Erlang/OTP 20
      for future compatibility
    * Update uuid
    * Add CloudI Service API logging_set configuration option
      log_time_offset to log when the Erlang VM updates its time_offset
      with the time_offset change logged in nanoseconds
      (the difference between the Erlang monotonic time and
       the Erlang system time which gets adjusted to match the OS system time,
       every minute rougbly, when necessary)

2017-08-02 Michael Truog   <mjtruog at gmail dot com>

    * Update Travis build configuration to use
      g++-6 clang-4.0 python-3.6 ruby-2.4.0

2017-07-21 Michael Truog   <mjtruog at gmail dot com>

    * Update the release scripts for use without autoconf/automake in the
      examples hello_world_reltool and hello_world_embedded
    * Fix installation/runtime permissions for root usage

2017-07-18 Michael Truog   <mjtruog at gmail dot com>

    * Do not use Erlang/OTP rb (report browser) files (log_mf_h)
      to avoid creating the extra log files
      (log_mf_h will soon be deprecated,
       based on https://bugs.erlang.org/browse/ERL-101)
    * Do not allow overriding run_erl env variables in the release script

2017-07-15 Michael Truog   <mjtruog at gmail dot com>

    * Add the test command to the release script to provide the
      current status as the script exit status value (currently only 0 or 1)
    * Always remove the pid file in the release script when stop is done

2017-07-03 Michael Truog   <mjtruog at gmail dot com>

    * Update syslog_socket

2017-07-02 Michael Truog   <mjtruog at gmail dot com>

    * Rewrite nodetool script to simplify the release script
    * Add CLOUDI_PID_FILE as a configure environment variable
      with the default equivalent to $localstatedir/log/cloudi/cloudi.pid
      (keeps release script variables static)
    * Now limit the number of atoms the nodetool script may add to the
      running node to 2*251 (MAX_ATOMS is set to 251 in nodetool)

2017-07-01 Michael Truog   <mjtruog at gmail dot com>

    * Simplify release scripts with configuration values assigned

2017-06-23 Michael Truog   <mjtruog at gmail dot com>

    * Add fixes for cloudi_service_filesystem tests to use TMPDIR

2017-06-20 Michael Truog   <mjtruog at gmail dot com>

    * Add cloudi_timestamp:uptime functions

2017-06-19 Michael Truog   <mjtruog at gmail dot com>

    * Fix Go CloudI API 32bit support
    * Fix Python/C CloudI API compilation when Python 3 is requested
      (previously was compiling/linking with Python 2)

2017-06-08 Michael Truog   <mjtruog at gmail dot com>

    * Add pointer handling comment to C http_req test

2017-06-07 Michael Truog   <mjtruog at gmail dot com>

    * CloudI version 1.7.1 released

2017-06-06 Michael Truog   <mjtruog at gmail dot com>

    * Fix internal services_remove use with automatic_loading == true
      (the default) so all modules are marked as old before purge
    * Do not log error when duo_mode enabled service is stopped or restarted

2017-06-01 Michael Truog   <mjtruog at gmail dot com>

    * Changed the included Erlang services from dict to maps usage
    * Performed manual-update for generated source files
    * Update backward-cpp
    * Added Haskell CloudI API source code documentation

2017-05-31 Michael Truog   <mjtruog at gmail dot com>

    * Changed license from BSD-4-Clause to MIT
    * Haskell CloudI API 1.7.0 package has a bug
      (http://hackage.haskell.org/package/cloudi)
      though it wasn't in the 1.7.0 release of this repo
      (https://github.com/CloudI/CloudI) that is fixed by
      https://github.com/CloudI/cloudi_api_haskell/commit/6cb7bf2b7797a0e922cd89a65fa8d367e2e052fb#diff-92a7fa4cc96701cc12a30c282ce7f2eaL846

2017-05-30 Michael Truog   <mjtruog at gmail dot com>

    * Travis builds/tests with both gcc and clang

2017-05-24 Michael Truog   <mjtruog at gmail dot com>

    * Use maps in cloudi_core helper modules
    * Remove older compatibility code for maps/dict/queue
    * Update trie

2017-05-23 Michael Truog   <mjtruog at gmail dot com>

    * Fix erlang:get_stacktrace/0 usage with Erlang/OTP 20.0
    * Use maps in cloudi_core call paths that impact performance
    * Update key2value and keys1value

2017-05-16 Michael Truog   <mjtruog at gmail dot com>

    * Update quickrand

2017-05-15 Michael Truog   <mjtruog at gmail dot com>

    * Using the CloudI API functions send_sync or recv_async during the
      service's initialization previously returned an error, but will now
      cause the service to crash, to pursue fail-fast operation and to keep
      the effect the same for both internal and external services

2017-05-05 Michael Truog   <mjtruog at gmail dot com>

    * Update msgpack

2017-05-04 Michael Truog   <mjtruog at gmail dot com>

    * Removed the internal cloudi_core_i_logger:current_function/0 function
      since the FUNCTION_NAME macro now exists

2017-05-02 Michael Truog   <mjtruog at gmail dot com>

    * Fixes for Erlang/OTP 20.0 support
        * epgsql_wg support was removed from cloudi_service_db_pgsql due to
          being unmaintained and using gen_fsm
          (cloudi_service_db_pgsql now uses semiocast as the default)
        * The cloudi executable now uses a pid file to block during stop and
          provides the OS process name as "CloudI"
        * External service source code switched from gen_fsm to gen_statem
        * Update quickrand
    * Fix OCaml CloudI API usage with Erlang/OTP 20.0
      (Erlang binary term format parsing in OCaml had an atom parsing bug
       for pids and other types that store an atom)
    * Updated the cloudi executable used in the Erlang examples

2017-04-20 Michael Truog   <mjtruog at gmail dot com>

    * Fix chroot and directory service configuration options
      validation of absolute paths
    * Add libtool/autoconf version check
    * Fix usage of the owner service configuration option
      when it is used with the chroot service configuration option

2017-04-18 Michael Truog   <mjtruog at gmail dot com>

    * Fix Python CloudI API compatibility with Python v3
      (incompatibility was added in CloudI 1.7.0)
    * Add request_rate integration test throughput data for 1.7.1

2017-04-17 Michael Truog   <mjtruog at gmail dot com>

    * Update cpg

2017-04-12 Michael Truog   <mjtruog at gmail dot com>

    * Fix validation of chroot and directory service configuration options
      to work properly together and require absolute paths
    * Update cpg

2017-04-10 Michael Truog   <mjtruog at gmail dot com>

    * Add Erlang map type specification usage
    * Update cpg

2017-04-09 Michael Truog   <mjtruog at gmail dot com>

    * Fix the chroot service configuration option to change the
      current working directory to / if the directory
      service configuration option was not provided
    * Fix the chroot service configuration option to be done before
      the owner service configuration option is applied
    * Change the nice and limit service configuration options to be
      applied before the owner service configuration option
      (this approach is more consistent with the cgroup
       service configuration option; the user/group executing
       CloudI owns the CloudI external service OS processes and these
       permissions should be used for controlling the OS process
       attributes before the exec occurs)

2017-04-08 Michael Truog   <mjtruog at gmail dot com>

    * Add the chroot service configuration option for external services
    * Fix C++ compilation warnings

2017-03-31 Michael Truog   <mjtruog at gmail dot com>

    * Improve reltool configuration for examples
      (nodefinder optional dependencies are not added to the release
       automatically to keep the example release minimal)
    * Update nodefinder

2017-03-29 Michael Truog   <mjtruog at gmail dot com>

    * CloudI version 1.7.0 released

2017-03-28 Michael Truog   <mjtruog at gmail dot com>

    * Improve count_process_dynamic logging

2017-03-25 Michael Truog   <mjtruog at gmail dot com>

    * Improve Ruby CloudI API socket recv logic
    * Improve Python CloudI API socket recv logic
    * Improve PHP CloudI API socket recv logic
    * Improve Perl CloudI API socket recv logic
    * Improve OCaml CloudI API socket recv logic
    * Improve Haskell CloudI API socket recv logic
    * Improve Go CloudI API socket recv logic
    * Improve Java CloudI API socket recv logic
    * Update quickrand

2017-03-24 Michael Truog   <mjtruog at gmail dot com>

    * Remove the CloudI API helper function
      request_http_qs_parse so only the helper function
      info_key_value_parse is used (both functions do the same thing)
      (Erlang requires using cloudi_request_info:key_value_parse/1 instead of
       cloudi_request:http_qs_parse/1)

2017-03-23 Michael Truog   <mjtruog at gmail dot com>

    * Update quickrand
    * Add the messaging integration test in Haskell
    * Improve the OCaml messaging integration test
    * The Haskell CloudI API is now tested

2017-03-22 Michael Truog   <mjtruog at gmail dot com>

    * Add the count integration test in Haskell
    * Add the msg_size integration test in Haskell
    * Add the null integration test in Haskell
    * Updated the CloudI API README

2017-03-21 Michael Truog   <mjtruog at gmail dot com>

    * Add the remaining core logic to Haskell CloudI API
    * Add Forward return values to both the OCaml and Haskell CloudI APIs
      to be similar to the Erlang CloudI API return values
    * Complete the http_req integration test in Haskell

2017-03-20 Michael Truog   <mjtruog at gmail dot com>

    * Improve OCaml CloudI API internal type usage
    * Add basic callback logic to Haskell CloudI API beginnings
      (currently requires GHC >= 7.10.3)

2017-03-18 Michael Truog   <mjtruog at gmail dot com>

    * Fix the Haskell CloudI API beginning to initialize/terminate properly

2017-03-17 Michael Truog   <mjtruog at gmail dot com>

    * Add the beginnings of the http_req Haskell integration test
    * Improve Go and Ocaml integration tests makefiles

2017-03-16 Michael Truog   <mjtruog at gmail dot com>

    * Add the beginnings of the Haskell CloudI API

2017-03-15 Michael Truog   <mjtruog at gmail dot com>

    * Improve OCaml CloudI API callback type usage
    * Remove files duplicated in src/external/
    * Update NOTICE file

2017-03-14 Michael Truog   <mjtruog at gmail dot com>

    * Improve OCaml CloudI API poll timeout handling

2017-03-11 Michael Truog   <mjtruog at gmail dot com>

    * C, Go, OCaml CloudI API change
      (breaks previous use of the C CloudI API) to keep state data
      within the CloudI API instance while using the same callback
      function argument order used by the Erlang CloudI API
        * The consistent interface CloudI provides with the CloudI API for
          CloudI service request data is:
          (RequestType, Name, Pattern, RequestInfo, Request,
           Timeout, Priority, TransId, Source)
          with the (State, API) data before the service request data in
          programming languages that use object methods
          (State is the object) or after the service request data in
          programming languages that rely on an isolated function
          (C, Erlang, Go, OCaml, Haskell (not added yet))
    * Add the count integration test

2017-03-08 Michael Truog   <mjtruog at gmail dot com>

    * Update quickrand, uuid

2017-03-06 Michael Truog   <mjtruog at gmail dot com>

    * Add module, line, function_name, function_arity information to
      cloudi_logger_hut (CloudI/HUT) logging integration

2017-02-26 Michael Truog   <mjtruog at gmail dot com>

    * Improve type specification
    * Make hut application env settings explicit

2017-02-25 Michael Truog   <mjtruog at gmail dot com>

    * Add lager integration in cloudi_logger_lager module

2017-02-24 Michael Truog   <mjtruog at gmail dot com>

    * Update exometer and exometer_core dependencies for
      cloudi_service_monitoring
        * Add the hut dependency
        * Update parse_trans and setup dependencies
    * Add exometer_influxdb dependency for cloudi_service_monitoring
        * Add hackney dependency
            * Add certifi, idna, metrics, mimerl, ssl_verify_fun dependencies
    * Remove lager and goldrush
    * Change to ensure data logged in sync mode is never dropped due to
      flooding check for misbehaving Erlang processes
    * Added cloudi_logger_hut module for hut logging integration
      (used by cloudi_service_monitoring dependencies:
       cloudi_x_exometer, cloudi_x_exometer_influxdb)
    * Rely on reltool to find all CloudI service dependencies
      (may now not be a problem after removing lager)
    * Fix folsom usage of old random module to survive removal
      (in Erlang/OTP 20.0 release)

2017-02-23 Michael Truog   <mjtruog at gmail dot com>

    * Add the CloudI Service API logging_stdout_set functionality
      to output all log data to stdout
    * Improvements to the CloudI logger to reduce latency
    * cloudi_service_api:aspect_log_f() now uses iodata for the LogMessage
    * Improve service configuration format written to log to avoid column limit

2017-02-22 Michael Truog   <mjtruog at gmail dot com>

    * Add the messaging integration test in OCaml
    * The OCaml CloudI API is now tested
    * Record backtrace in OCaml integration tests

2017-02-21 Michael Truog   <mjtruog at gmail dot com>

    * OCaml CloudI API now is working with the http_req integration test
    * Add the null integration test in OCaml
    * Add the msg_size integration test in OCaml

2017-02-18 Michael Truog   <mjtruog at gmail dot com>

    * Add the beginnings of the OCaml CloudI API

2017-02-16 Michael Truog   <mjtruog at gmail dot com>

    * Change the default buffer_size value for external service configuration
      from 16384 to 65536 to match Linux localhost MTU setting
      (http://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=0cf833aefaa85bbfce3ff70485e5534e09254773)
    * Add buffer_size 65536 usage in Go CloudI API erlang.TermToBinary code

2017-02-09 Michael Truog   <mjtruog at gmail dot com>

    * Change the Go CloudI API to use the cloudi.Source type for the
      erlang.OtpErlangPid type, simplifying package import usage
    * Add Go CloudI API documentation
    * Fix the services_update CloudI Service API function so
      {type, internal} may be used without specifying the module
      (if the service ID is not "")

2017-02-08 Michael Truog   <mjtruog at gmail dot com>

    * Fix the Perl, PHP, Python, and Ruby CloudI APIs so count_process_dynamic
      usage is not able to cause external service processes to become
      non-responsive (problem was not observed during testing)
    * Fix CloudI Service API services_update usage with external services
      so updates that do not create a new OS process do update the following
      parameters used by the CloudI API instance:
        * timeout_async (default async timeout value)
        * timeout_sync (default sync timeout value)
        * (default priority value)
        * (request_timeout_adjustment service configuration option value)

2017-02-07 Michael Truog   <mjtruog at gmail dot com>

    * Add the messaging integration test in Go
    * Remove extra nextTick calls within the JavaScript CloudI API
    * Fix a possible buffer underrun in the JavaScript CloudI API
    * The "command" variable in service request handlers within the
      integration tests that are external services has been changed to be
      "request_type" which is more consistent with other source code and
      helps to distinguish it from the internal "command" variable
    * The GO configure variable now works properly
    * The Go CloudI API is now tested with Go 1.7.5 and all is well
    * Add SubscribeCount test to http_req Go integration test

2017-02-06 Michael Truog   <mjtruog at gmail dot com>

    * Add the null integration test in Go
    * Add the msg_size integration test in Go
    * Now Go errors that use cloudi.StackError have a stack trace in output
      with generic output functions cloudi.ErrorWrite and cloudi.ErrorExit

2017-02-04 Michael Truog   <mjtruog at gmail dot com>

    * Go CloudI API now is working with the http_req integration test

2017-02-03 Michael Truog   <mjtruog at gmail dot com>

    * Updates to the Erlang binary term format encoding used in the
      CloudI API implementations for JavaScript, Perl, PHP, Python, Ruby
        * Bounds checking was added and variable names were improved
        * JavaScript encoding of an object as a map was fixed
    * The beginnings of a Go CloudI API has been added,
      but is not yet usable (will allow integration tests to be added)

2017-02-01 Michael Truog   <mjtruog at gmail dot com>

    * Fixes to ensure logging from CloudI in Erlang source code is logging
      data as UTF8 (now modules, function names, nodes, log file paths and
      log data from Erlang services as unicode strings ("~ts") is written
      as utf8 data to the log file and the output is consistent with unicode
      output in external services)
    * Fix cloudi_string:format_to_binary/2 so it works properly with
      unicode formatting arguments
    * cloudi_service_api:aspect_log_f() type changed to use utf8 log message

2017-01-16 Michael Truog   <mjtruog at gmail dot com>

    * Mark hello_world3 example for removal
      (details at https://github.com/CloudI/CloudI/issues/201)

2017-01-11 Michael Truog   <mjtruog at gmail dot com>

    * CloudI version 1.6.0 released

2017-01-09 Michael Truog   <mjtruog at gmail dot com>

    * Fix bug with external services not using the
      response_timeout_immediate_max service configuration option value
      when receiving invalid request and/or request_info
      within a service request
    * Change the meaning of the service configuration options
      request_timeout_immediate_max and response_timeout_immediate_max so that
      the timeout value must be greater than or equal instead of greater than
      with the defaults changed from 20000 milliseconds to 20001 milliseconds
      to provide the same default behavior that was present previously
      (better characteristics when being set to 0, which will be limit_min)
    * Allow limit_min or limit_max to be used for the service configuration
      options request_timeout_immediate_max, response_timeout_immediate_max,
      restart_delay, monkey_latency

2017-01-08 Michael Truog   <mjtruog at gmail dot com>

    * Allow limit_min or limit_max to be used for timeout_init,
      timeout_async, timeout_sync in the service configuration
      and timeout_terminate in the service configuration options
    * Changed the minimum default send_async and send_sync timeout value
      for service configuration from 101 milliseconds to 499 milliseconds
      (based on current macros) to be consistent with
      limit_min use in the cloudi_service module and the cloudi module
    * Erlang type cloudi_service_api:timeout_milliseconds() was removed and
      split into more specific types
    * Add manual-update makefile target for updating automatically
      generated files that must be updated manually
    * Remove cloudi_service_api functions deprecated since v1.3.3 release
    * Remove cloudi_service functions deprecated since v1.3.3 release

2017-01-07 Michael Truog   <mjtruog at gmail dot com>

    * The Erlang cloudi_service and cloudi modules now use the atom
      limit_min instead of immediate for the timeout value, to represent
      the largest timeout value possible to avoid timer use
      (499 milliseconds with the current macro definitions) though the minimum
      timeout value remains 0 for these functions
      (limit_min/limit_max will later also be used for timeout configuration)
      * The immediate atom usage is retained to allow removal in a future
        CloudI release, though dialyzer currently lacks the ability to
        deprecate an Erlang type specification, so this change requires
        human attention that doesn't rely on tools to detect
    * The Erlang cloudi_service and cloudi modules now accept the atom
      limit_max as the timeout value which is the maximum possible
      (4294967195 milliseconds with the current macro definitions,
       i.e., 49.7 days)

2017-01-06 Michael Truog   <mjtruog at gmail dot com>

    * Ensure all CloudI API implementations can handle a null object return
      value, if the concept of null exists in the programming language
      (required updating the Java and Perl CloudI APIs,
       since the rest already handle this)
    * Add the null integration tests in all the supported programming languages
    * The C/C++ CloudI API now makes stdout usage unbuffered
      (to be consistent with the other CloudI API implementations,
       which have stdout/stderr unbuffered so the output is
       logged as quickly as possible)

2017-01-05 Michael Truog   <mjtruog at gmail dot com>

    * Update supool
      (Now all process dictionary use (in Erlang source code)
       within CloudI is minimal, only done when completely necessary)

2016-12-27 Michael Truog   <mjtruog at gmail dot com>

    * Add additional syslog logging configuration options

2016-12-26 Michael Truog   <mjtruog at gmail dot com>

    * Add the syslog_socket pure Erlang syslog interface
    * Remove the cloudi_x_syslog port driver
      (cloudi_core now has no internal NIF usage or internal port driver usage
       which helps to ensure reliable operation in any environment)
    * Fix bug with attempting to use syslog severity 8 with cloudi_x_syslog
      though this changes the syslog severity level mapping with
      CloudI log levels
    * CloudI now uses standard syslog facility values from syslog_socket
      (strictly based on RFC3164 and RFC5424) instead of the custom
      facility values defined by cloudi_x_syslog

2016-12-22 Michael Truog   <mjtruog at gmail dot com>

    * Remove CloudI Erlang/OTP version macro checks for before 19.x
      to remove the cloudi_core_i_socket NIF and accumulated preprocessor checks
      (cloudi_core now has no internal NIF usage,
       the only internal port driver usage is through
       cloudi_x_syslog when syslog usage is enabled)
    * Add linear options to the restart_delay service configuration option

2016-12-21 Michael Truog   <mjtruog at gmail dot com>

    * Add CloudILogger Elixir module to the cloudi_core Erlang application
    * Fix CloudILogger Elixir usage of function/arity data
    * Update the Elixir.HelloWorld1 example based on the changes
    * Update reltool_util

2016-12-20 Michael Truog   <mjtruog at gmail dot com>

    * Require Erlang/OTP 19.x or higher
    * Switch to always logging the function name and arity due to EEP45
      included in Erlang/OTP 19.x
    * Update reltool_util
    * Fix old rebar2 package compile issue

2016-12-19 Michael Truog   <mjtruog at gmail dot com>

    * Change the name of the service configuration option
      terminate_delay to restart_delay, to avoid being misleading
    * Update cloudi_service_monitoring to handle changes to cloudi_core
      for the restart_delay service configuration option
    * Add request_pid and info_pid metrics for internal services to
      cloudi_service_monitoring

2016-12-17 Michael Truog   <mjtruog at gmail dot com>

    * Improve validation of the service configuration options
      terminate_delay, count_process_dynamic and monkey_latency

2016-12-16 Michael Truog   <mjtruog at gmail dot com>

    * Add terminate_delay service configuration option to allow a
      service instance to delay a restart
      (attempting to avoid spurious failures when the failure cause
       requires a short amount of time to be resolved)
      based on the suggestions of Richard Carlsson in
      https://github.com/erlang/otp/pull/1287
    * Fix service restarts to ensure all terminate functions have completed
      (or service thread(s) had a termination timeout complete)
      before restarting the service instance
    * Fix service configuration option timeout_terminate value output
      in log output of the service configuration

2016-12-15 Michael Truog   <mjtruog at gmail dot com>

    * Add count result to cloudi_timestamp:seconds_filter/3 return value

2016-12-10 Michael Truog   <mjtruog at gmail dot com>

    * Make Erlang file module use more efficient with additional usage of
      the raw option and pwrite

2016-11-28 Michael Truog   <mjtruog at gmail dot com>

    * Avoid deprecated std::auto_ptr in C++11

2016-11-23 Michael Truog   <mjtruog at gmail dot com>

    * Fix to avoid triggering SYN flooding protection in
      newer Linux kernel versions
      (e.g., 4.4.0-47 used with Ubuntu 16.04.1)
    * Improve error log output

2016-11-22 Michael Truog   <mjtruog at gmail dot com>

    * Improve external service startup time
    * Minor integration test fix

2016-11-21 Michael Truog   <mjtruog at gmail dot com>

    * Update cpg
    * Update trie

2016-11-16 Michael Truog   <mjtruog at gmail dot com>

    * Make OS time more efficient in cloudi_timestamp

2016-11-11 Michael Truog   <mjtruog at gmail dot com>

    * Update cpg

2016-11-10 Michael Truog   <mjtruog at gmail dot com>

    * Update cpg

2016-11-06 Michael Truog   <mjtruog at gmail dot com>

    * Add missing syntax_tools dependency due to merl usage

2016-11-04 Michael Truog   <mjtruog at gmail dot com>

    * Improve external service port deserialize

2016-10-29 Michael Truog   <mjtruog at gmail dot com>

    * Improve max_heap_size type specification

2016-10-28 Michael Truog   <mjtruog at gmail dot com>

    * Update locally modified m4 macros after submitting the changes to
      the GNU Autoconf Archive

2016-10-08 Michael Truog   <mjtruog at gmail dot com>

    * m4/ax_check_class.m4 and m4/ax_prog_java_works.m4
      had uuencoded java class files which were removed
      (the uuencoded java class files were decompiled to confirm
       they match the commented code, but the reliance on
       binary data isn't necessary or helpful for future use)

2016-10-07 Michael Truog   <mjtruog at gmail dot com>

    * CloudI version 1.5.4 released
    * Revert ax_boost_thread.m4 update due to it requiring local changes
      in the past and breaking integration test compilation on some platforms

2016-10-06 Michael Truog   <mjtruog at gmail dot com>

    * Add request_rate testing with and without the use of cloudi_service_queue
      to look at the request rate with persistence of transactions

2016-10-05 Michael Truog   <mjtruog at gmail dot com>

    * Update cgroups

2016-10-04 Michael Truog   <mjtruog at gmail dot com>

    * Fix internal CloudI service bug storing service state when
      both service requests and info messages are queued
      (only observed when duo_mode was true with a high request rate)
    * Refactor CloudI service source code to avoid duplicating
      state record field data as separate function arguments

2016-10-02 Michael Truog   <mjtruog at gmail dot com>

    * Improve handling of a request timeout in cloudi_service_queue
      when using both mode by always having an empty response sent after
      the timeout of the request expires (including when retries are not used)

2016-10-01 Michael Truog   <mjtruog at gmail dot com>

    * Improve handling of a request timeout in cloudi_service_queue
      when using both mode after a retry
    * Add cloudi_trans_id:microseconds/0 function

2016-09-30 Michael Truog   <mjtruog at gmail dot com>

    * Make significant improvements to cloudi_service_queue
        * Prevent any incomplete write from creating corrupt data
        * retry service argument functions now works as expected
        * Added retry_delay service argument for destinations that
          are infrequently available

2016-09-26 Michael Truog   <mjtruog at gmail dot com>

    * Fix starting a CloudI service with a script or boot file
        * reltool fix in 19.0 changed application load order
        * Needed file read errors returned
    * Improve the Erlang usage examples
    * Update reltool_util

2016-09-24 Michael Truog   <mjtruog at gmail dot com>

    * Add logging_set CloudI Service API function
    * Update varpool
    * Fixes for dialyzer in cloudi_core repo

2016-09-23 Michael Truog   <mjtruog at gmail dot com>

    * Add cgroup and nice service configuration options
    * Add cgroups Erlang application as a cloudi_core dependency

2016-09-20 Michael Truog   <mjtruog at gmail dot com>

    * Update GEPD dependency with commit/tag/file specifics

2016-09-19 Michael Truog   <mjtruog at gmail dot com>

    * Update backward-cpp (not updating macro check yet for configure script)
      (backward-cpp claims arm support now)
    * Update external autoconf macros

2016-09-16 Michael Truog   <mjtruog at gmail dot com>

    * Fix old configuration entries

2016-09-15 Michael Truog   <mjtruog at gmail dot com>

    * CloudI version 1.5.3 released
    * Update Python Erlang Binary Term Format source code to
      handle Erlang maps nested as keys in a map

2016-09-14 Michael Truog   <mjtruog at gmail dot com>

    * Next release will be 1.5.3 instead of 1.5.2 due to dependency updates
    * Update nodefinder and remove dependencies that are no longer necessary
      (erlcloud, eini, lhttpc)
    * Update msgpack
    * Update reltool_util
    * Update jinterface to 1.6.1 (from Erlang/OTP 18.3)
      to match the last maven package version
    * Fix Java CloudI API javadoc comments

2016-08-30 Michael Truog   <mjtruog at gmail dot com>

    * Fix autoconf Erlang version check to work with github versions, like
      "18.3.4.1" (with 2 or more separate patch numbers instead of 1)

2016-08-27 Michael Truog   <mjtruog at gmail dot com>

    * Fix CloudI Service API services_update timeout bug
    * Change CloudI Service API services_update to use a gradual
      transition between service name pattern subscriptions for
      external service updates so that the new OS process initialization
      occurs before the old OS process subscriptions are removed
    * Change the CloudI API implementations to provide a null response
      when a service name pattern doesn't exist as a subscription, so
      that old service requests that have been queued before an
      external service update automatically get a null response after the
      update is done

2016-08-26 Michael Truog   <mjtruog at gmail dot com>

    * Fix CloudI Service API services_update for external services
      so that unsubscribe automatically occurs on all subscriptions
      immediately before the initialization of a new OS process,
      if a new OS process is spawned due to the update
    * Update cpg

2016-08-23 Michael Truog   <mjtruog at gmail dot com>

    * Update trie
    * Update pqueue

2016-08-22 Michael Truog   <mjtruog at gmail dot com>

    * Change Java CloudI API List return types to not be abstract

2016-08-12 Michael Truog   <mjtruog at gmail dot com>

    * Fix final keyword usage in Java CloudI API

2016-08-09 Michael Truog   <mjtruog at gmail dot com>

    * Add cloudi_timestamp functions seconds_os/0,
      milliseconds_os/0, microseconds_os/0
    * Use new cloudi_timestamp:milliseconds_os/0 function to reduce latency
    * Improve request_timeout_adjustment logic
    * Improve quickstart markdown format

2016-08-08 Michael Truog   <mjtruog at gmail dot com>

    * Add Java 8 method reference support to the Java CloudI API
    * Improve the constant usage within the Java CloudI API

2016-08-06 Michael Truog   <mjtruog at gmail dot com>

    * Add arity checking in the Java CloudI API subscribe function

2016-08-03 Michael Truog   <mjtruog at gmail dot com>

    * Add Java CloudI API timestamp accessor for ISO8601 SQL variation
    * Add Java CloudI API timestamp accessor for a microseconds integer value

2016-08-02 Michael Truog   <mjtruog at gmail dot com>

    * Add Java CloudI API accessors on the TransId class to get
      the timestamp when the service request was created

2016-07-27 Michael Truog   <mjtruog at gmail dot com>

    * Allow internal CloudI services to optionally use the callbacks
      cloudi_service_handle_request/11 and
      cloudi_service_handle_info/3
    * Update pqueue

2016-07-21 Michael Truog   <mjtruog at gmail dot com>

    * Update erlcloud

2016-07-06 Michael Truog   <mjtruog at gmail dot com>

    * Simplify logger module creation

2016-06-28 Michael Truog   <mjtruog at gmail dot com>

    * Add directory external service configuration option to set the 
      current working directory for the external service OS process

2016-06-26 Michael Truog   <mjtruog at gmail dot com>

    * No longer use the dynamic_compile dependency in the cloudi_core logger
      (instead rely on merl)
    * Switch to requiring Erlang >= 18.0 due to merl in syntax_tools
    * Update proper

2016-06-22 Michael Truog   <mjtruog at gmail dot com>

    * Make the Java CloudI API TransId class publicly accessible and
      add a conversion to a UUID object
    * Java CloudI API standard streams now use UTF8
    * Fix owner service configuration option usage

2016-06-18 Michael Truog   <mjtruog at gmail dot com>

    * Update mimetypes

2016-06-15 Michael Truog   <mjtruog at gmail dot com>

    * Add string UUID formatting for the services_update result in
      cloudi_service_api_requests
    * Update cpg README

2016-06-05 Michael Truog   <mjtruog at gmail dot com>

    * Improve cloudi_service_api:aspect_log_f() type
    * Add define specifically for cloudi_core_i_socket usage

2016-06-04 Michael Truog   <mjtruog at gmail dot com>

    * Add aspects_log_before and aspects_log_after logging configuration
      in cloudi_core
    * Add aspects_log_before and aspects_log_after logging support in
      cloudi_service_monitoring

2016-06-03 Michael Truog   <mjtruog at gmail dot com>

    * Add dispatcher_pid_options and init_pid_options
      service configuration options to services_add and services_update
    * Add usage of the new unix domain socket functionality
      in Erlang/OTP 19.0rc2 for external service usage of the protocol local
      (default == local) to avoid using a NIF
    * Fix external service usage of protocol local
      with count_process > 1
    * Improve Erlang NIF compilation

2016-06-02 Michael Truog   <mjtruog at gmail dot com>

    * Add monkey_latency, monkey_chaos, aspects_init_after,
      aspects_request_before, aspects_request_after,
      aspects_info_before, aspects_info_after, and
      aspects_terminate_before service configuration options to
      service_updates
    * Fix service_updates usage of the service configuration options
      rate_request_max and hibernate
    * Fix service_updates usage of the service configuration options
      info_pid_uses and/or info_pid_options with an internal service that
      uses duo_mode == true
    * Fix internal service usage of rate_request_max,
      count_process_dynamic, and/or hibernate with duo_mode == true
      (so the options do not affect the dispatcher process)
    * Update varpool, reltool_util

2016-06-01 Michael Truog   <mjtruog at gmail dot com>

    * Fix dest_list_deny and dest_list_allow expansion in services_update
    * Improve Erlang term reuse in the source code
      (Thanks to Anthony Ramine spotting problems)
    * Add service configuration options rate_request_max,
      dest_refresh_start, dest_refresh_delay, hibernate, and reload
      to service_updates
    * Allow specific internal service updates with service_updates if
      module_state is not provided
    * Do not force an external service restart for the limit
      service configuration option
    * Add -deprecated attribute usage in the
      cloudi_service and cloudi_service_api Erlang modules

2016-05-31 Michael Truog   <mjtruog at gmail dot com>

    * Add preliminary service configuration update with services_update
    * Add dest_refresh, dest_list_deny, dest_list_allow to services_update
    * Allow timeout_init for internal services with services_update

2016-05-27 Michael Truog   <mjtruog at gmail dot com>

    * Add some options parsing for services_update input

2016-05-26 Michael Truog   <mjtruog at gmail dot com>

    * Add CloudI Service API services_update external service functionality
    * Fix text_pairs format for HTTP GET query strings in
      cloudi_service_http_cowboy and cloudi_service_http_elli

2016-05-25 Michael Truog   <mjtruog at gmail dot com>

    * Fix aspect function validation
    * Update key2value

2016-05-22 Michael Truog   <mjtruog at gmail dot com>

    * Fix services_update modules_unload
    * Update reltool_util

2016-05-21 Michael Truog   <mjtruog at gmail dot com>

    * Add CT test of services_update
    * Change services_update to not load the module of an
      internal service by default
    * Add the new module version to the update function for services_update
    * Fix services_update error when a process is handling a service request
    * Finalize services_update return value
    * Add sync configuration option for services_update
    * Fix services_update when using sync == false with module_state assigned

2016-05-20 Michael Truog   <mjtruog at gmail dot com>

    * Add CloudI Service API services_update function
      (currently, only for updating internal services)
    * Update trie, reltool_util

2016-05-19 Michael Truog   <mjtruog at gmail dot com>

    * Remove unmaintained example services and their dependencies:
        * cloudi_service_db
        * cloudi_service_timers
    * Do not run the integration tests by default
    * Add sensitive, max_heap_size and message_queue_data to both
      request_pid_options and info_pid_options
    * Add SWIG interface file example for generating SWIG bindings based
      on the C CloudI API file with api/c/cloudi.i

2016-05-18 Michael Truog   <mjtruog at gmail dot com>

    * Dialyzer warning fixes with Erlang/OTP 19.0 for
      included CloudI services
    * Remove unmaintained example services and their dependencies:
        * cloudi_service_db_cassandra
        * cloudi_service_db_cassandra_cql
        * cloudi_service_db_couchdb
        * cloudi_service_db_elasticsearch
        * cloudi_service_db_memcached
        * cloudi_service_db_riak
    * Remove the service Erlang application
    * Update uuid, elli, msgpack, proper, emysql
    * Switch to requiring Erlang >= 17.5 due to msgpack

2016-05-17 Michael Truog   <mjtruog at gmail dot com>

    * Changes for Erlang/OTP 19.0 support:
        * Update erlcloud, jsx, uuid, quickrand
        * Add eini as a dependency of erlcloud
        * Fix cloudi_core dialyzer warnings

2016-05-10 Michael Truog   <mjtruog at gmail dot com>

    * Add eunit tests to cloudi_lists
    * Add cloudi_lists:split/2 and improve cloudi_lists:delete_all/2

2016-04-19 Michael Truog   <mjtruog at gmail dot com>

    * Improve handling of node discovery timeouts
    * Improve handling of internal cloudi_core timeouts

2016-04-14 Michael Truog   <mjtruog at gmail dot com>

    * Add a progress bar to the scope script
      (which puts the external Erlang dependencies into the
       names prefixed with 'cloudi_x_')

2016-04-13 Michael Truog   <mjtruog at gmail dot com>

    * Ensure init failure is logged synchronously for startup
    * Improve cloudi_service_init/4 exception handling

2016-04-06 Michael Truog   <mjtruog at gmail dot com>

    * Add async interface functions to cloudi_service_http_client
      (head_async, get_async, put_async, post_async,
       trace_async, options_async, delete_async)

2016-03-30 Michael Truog   <mjtruog at gmail dot com>

    * Make cloudi_service_monitoring:update_or_create/4 work outside of
      a service process

2016-03-12 Michael Truog   <mjtruog at gmail dot com>

    * CloudI now does not use the random Erlang/OTP module with
      Erlang/OTP >= 18.0 due to it being removed in Erlang/OTP 20
    * Update uuid, varpool, quickrand

2016-03-04 Michael Truog   <mjtruog at gmail dot com>

    * Add cloudi_trans_id:microseconds/1 and cloudi_timestamp:microseconds/0
      (using cloudi_trans_id:microseconds/1 is preferred in a CloudI service
       since the time value is always increasing within a service process
       and the function call is more efficient)
    * Add to cloudi_service_monitoring doc

2016-02-01 Michael Truog   <mjtruog at gmail dot com>

    * Minor fixes for cloudi_service monitoring

2016-01-30 Michael Truog   <mjtruog at gmail dot com>

    * Change the service indentifier used in metric names by
      cloudi_service_monitoring from the hexadecimal ServiceId UUID to
      TYPE.FILENAME.INDEX
        * TYPE is "e" for external services and "i" for internal services
        * FILENAME is the executable used for external services and the
          service module for internal services
          (for java services, this is likely "java" and for python services
           this may be "python2", if the CloudI service is
           not executed directly)
        * INDEX is the 0-based index of the service's ServiceId occurrence
          with the same TYPE and FILENAME
    * Add cloudi_lists:index/2

2016-01-23 Michael Truog   <mjtruog at gmail dot com>

    * Add configuration argument http_clock_skew_max to
      cloudi_service_filesystem for tolerating HTTP datetime differences
      when checking the HTTP request headers
      If-Modified-Since and If-Unmodified-Since
      to determine the provided datetime is invalid
      (default setting is 300 seconds)

2016-01-16 Michael Truog   <mjtruog at gmail dot com>

    * Change Travis compilation to use 18.2.1 for the 18.x compilation
    * Use only LOG_ERROR_SYNC in cloudi_args_type due to its usage during
      service initialization which can cause a CloudI startup failure
      when a service is misconfigured
    * Improve the debug log format of cloudi_service_http_client
    * Fix cloudi_service_name:suffix/2
    * Fix cloudi_args_type:service_name_suffix/2
    * Fix cloudi_args_type:service_name_pattern_suffix/2
    * Update trie

2016-01-09 Michael Truog   <mjtruog at gmail dot com>

    * Change the automatic addition of the HTTP header content-disposition
      to be more limited in cloudi_service_http_cowboy
    * Change the default for the set_content_disposition in
      cloudi_service_http_rest to be false

2016-01-02 Michael Truog   <mjtruog at gmail dot com>

    * Change cloudi_service_http_cowboy websocket_output
      configuration argument default to (always be) binary (to simplify)
    * Fix JSON-RPC support in cloudi_service_api_requests
    * Fix JSON-RPC CloudI Service API python testing
    * Add nonservice metric for monitoring service requests from
      single Erlang processes using the cloudi module in
      cloudi_service_monitoring
    * Add more validation on {{M, F}} service configuration
      argument function values

2015-12-23 Michael Truog   <mjtruog at gmail dot com>

    * CloudI version 1.5.1 released
    * Update elli
    * Compilation fix for 32bit OpenBSD

2015-12-22 Michael Truog   <mjtruog at gmail dot com>

    * Fix the JavaScript CloudI API for using
      node.js versions greater than v0.12.1
    * Add 1.5.1 request_rate test results

2015-12-21 Michael Truog   <mjtruog at gmail dot com>

    * Modify cloudi_service_monitoring to provide incoming and outgoing
      request data with separate metrics
    * Fix a false negative dialyzer error in cloudi_service_children.hrl
    * Fix build errors on ppc64
    * Add 1.5.1 loadtest information

2015-12-20 Michael Truog   <mjtruog at gmail dot com>

    * Fix cloudi_service_children.hrl, changing the interface and usage in
      cloudi_service_http_cowboy, cloudi_service_http_elli, and
      cloudi_service_tcp
    * Make the cloudi_service_monitoring queued_requests_size more accurate

2015-12-18 Michael Truog   <mjtruog at gmail dot com>

    * Make cloudi_service_monitoring track reductions as a total count while
      providing the metric as a change during the interval in a spiral
    * Add cloudi_timestamp:milliseconds/0 and
      simplify cloudi_timestamp:seconds/0

2015-12-17 Michael Truog   <mjtruog at gmail dot com>

    * Split cloudi_service_monitoring service process metric names based
      on whether the service is internal or external, to show either
      process information or process/thread information, respectively
    * Add queued_requests, queued_requests_size, queued_info metrics
      in cloudi_service_monitoring for all service processes
    * Set cloudi_service_monitoring default intervals at 15 seconds and
      handle reporter options
    * Fix rebar usage within autoconf/automake
      when not using a separate build directory
    * Fix system message handling on duo_mode process
    * Update pqueue

2015-12-16 Michael Truog   <mjtruog at gmail dot com>

    * Add cloudi_service_monitoring with dependencies
      (exometer, exometer_core, folsom, bear, setup, parse_trans)
    * Add {{M, F}} syntax for dynamic creation of anonymous functions
      in both service function arguments and
      the aspect service configuration options
    * Add the service_id in the process dictionary of long-lived
      service processes for easy identification during their lifetime
    * Remove the hyphens from service_id usage within CloudI so that
      service_id usage in metric names match service_ids elsewhere
    * Update lager and goldrush
    * Update key2value
    * Simplify rebar usage within autoconf/automake

2015-12-11 Michael Truog   <mjtruog at gmail dot com>

    * Add configuration checks for nodes_set
      reconnect_start and reconnect_delay

2015-12-09 Michael Truog   <mjtruog at gmail dot com>

    * Add configuration validation to make sure
      dest_list_deny and dest_list_allow are undefined
      when dest_refresh is none (i.e., not sending)
    * Update cpg
      (make sure all scopes are started after cloudi_core has set
       the nodes_set listen type)

2015-12-08 Michael Truog   <mjtruog at gmail dot com>

    * Fix logger flooding check to avoid prematurely triggering the
      flooding prevention for a single process

2015-12-05 Michael Truog   <mjtruog at gmail dot com>

    * Add support for X-HTTP-Method-Override header values in
      cloudi_service_http_elli and cloudi_service_http_cowboy
      (add the outgoing service name to warnings, when it is available)
    * Cleanup cloudi_request_info to make text_pairs more well-defined
        * values can be iolists
        * keys must be of length 1 or greater

2015-11-28 Michael Truog   <mjtruog at gmail dot com>

    * Add cloudi_service_filesystem redirect configuration argument to
      permanently redirect existing file paths to similar service names
    * Allow the cloudi_service_filesystem configuration arguments
      write_truncate, write_append, notify_one, notify_all
      to take service name patterns
    * Make the OPTIONS allow response header value provided by
      cloudi_service_filesystem correct
    * Add cloudi_args_type:service_name_suffix/2 and
      cloudi_args_type:service_name_pattern_suffix/2 for the common
      task of getting a service name suffix during service initialization
    * Update types and guards to enforce nonempty_string() on the
      configured service prefix and usage of the service request's
      service name and service name pattern
    * Update erlang_term:
        * Adds support for using the size of binaries nested in maps
        * Fixes the improper list size

2015-11-21 Michael Truog   <mjtruog at gmail dot com>

    * Add multicast discovery interface address configuration option
    * Add cloudi_args_type module for validating function arguments
      set in the service configuration arguments list
    * Add the cloudi_service_http_rest configuration arguments
      set_content_disposition, use_options_method, use_trace_method
    * Set max configured service processes to 1 due to port ownership for
      cloudi_service_http_cowboy, cloudi_service_http_elli,
      cloudi_service_tcp, cloudi_service_udp
    * Add the timeout_terminate service configuration option
    * Always have an empty space in the logging source output when the
      function name/arity is not provided
    * Update trie, nodefinder (and fix dependency modelines)

2015-11-10 Michael Truog   <mjtruog at gmail dot com>

    * Changes to abide by EEP45
        * FUNCTION macro was changed to FUNCTION_NAME
        * FUNCTION_ARITY macro was changed to only be the function arity
    * Fix ERLANG_OTP_VERSION macros used for integration test compilation
    * Added logging parameters for function and arity to make logging of the
      function data easy
    * Fix lager metadata pid to be a string to match the lager parse transform

2015-11-04 Michael Truog   <mjtruog at gmail dot com>

    * Add cloudi_service:monitor/2 for monitoring
      Erlang processes in an Erlang CloudI service
    * Add cloudi_service:demonitor/2 and
      cloudi_service:demonitor/3 for removing a monitor
      in an Erlang CloudI service
    * Add cloudi_service_http_rest info function configuration argument

2015-11-03 Dmitriy Mazurin <dimas.m.19 at gmail dot com>

    * Update erlang_term to fix improper list size check

2015-10-27 Michael Truog   <mjtruog at gmail dot com>

    * Add comment to cloudi_service_http_rest

2015-10-24 Michael Truog   <mjtruog at gmail dot com>

    * Add query_get_format configuration argument to both
      cloudi_service_http_cowboy and cloudi_service_http_elli
      with the default set to 'raw' (to get the previous default behavior,
      set to 'text_pairs')
    * Update backward-cpp
    * Add basic comments to cloudi_service_http_rest

2015-10-08 Michael Truog   <mjtruog at gmail dot com>

    * Fix false negative from dialyzer when CLOUDI_CORE_STANDALONE is defined

2015-09-29 Michael Truog   <mjtruog at gmail dot com>

    * Tweak hello_world5 example type spec

2015-09-28 Michael Truog   <mjtruog at gmail dot com>

    * Use newer msgpack spec for string format

2015-09-22 Michael Truog   <mjtruog at gmail dot com>

    * Add type specification macros for cloudi_service_http_rest with a new
      cloudi_service_http_rest.hrl file

2015-09-19 Michael Truog   <mjtruog at gmail dot com>

    * Add more details to the hello_world5 example.
    * Update the other examples to have reltool.config comments and modelines
    * Fix Elixir.HelloWorld1 example

2015-09-16 Michael Truog   <mjtruog at gmail dot com>

    * Add cloudi_trans_id for Erlang usage of the
      CloudI service request transaction id
    * Update uuid

2015-09-11 Michael Truog   <mjtruog at gmail dot com>

    * Update trie
    * Fix parameter parsing due to pattern matching with the
      service name and service name pattern with functions like
      cloudi_service_name:parse/2 (now "*/" will parse "//" AND "///")
    * Handle bad parameters as a crash in cloudi_service_http_rest

2015-09-10 Michael Truog   <mjtruog at gmail dot com>

    * Fix URL parameter errors in cloudi_service_http_rest

2015-09-08 Michael Truog   <mjtruog at gmail dot com>

    * Fix application_name service configuration option usage when
      automatic_loading is false

2015-09-05 Michael Truog   <mjtruog at gmail dot com>

    * Add more comments to the hello_world5 example

2015-09-04 Michael Truog   <mjtruog at gmail dot com>

    * Add terminate, debug and debug_level configuration arguments to
      cloudi_service_http_rest
    * Improve example hello_world5
    * Fix README file

2015-09-03 Michael Truog   <mjtruog at gmail dot com>

    * Add msgpack as a supported content-type
    * Add eunit tests to cloudi_string
    * Add cloudi_service_http_rest to simplify REST API function creation

2015-09-02 Michael Truog   <mjtruog at gmail dot com>

    * Fix installation path bug
    * Update examples description

2015-09-01 Michael Truog   <mjtruog at gmail dot com>

    * Fix examples so that the 1.4.0 cloudi_service behaviour interface
      is used
    * Fix service application header file usage of cloudi_service behaviour
    * Update pgsql

2015-08-30 Michael Truog   <mjtruog at gmail dot com>

    * Add the compression configuration argument to cloudi_service_queue
      to provide a zlib compression level
      (defaults to 0, no compression, can be 0..9)
    * Improve cloudi_service_http_cowboy type specifications
      and the processing of queued requests
    * Add support in cloudi_service_tcp for bidirectional CloudI
      service requests, including the protocol_id_check configuration
      argument to avoid blocking on CloudI service request responses
      from the socket
    * Update pqueue and improve pqueue4 type specification

2015-08-29 Michael Truog   <mjtruog at gmail dot com>

    * Add cloudi_service:duo_mode/1 to test whether the service
      is configured with the duo_mode service configuration option
    * Enforce duo_mode is true when cloudi_service_tcp or
      cloudi_service_udp is used, due to socket ownership
    * Specify the msgpack map type based on whether the Erlang
      version is 18.x or pre-18.x (to pick map or jsx format, respectively)
    * Document the usage of an 'external_format' configuration argument
      and the usage of an 'output' configuration argument in cloudi_request
    * Add destination_set configuration argument to cloudi_service_tcp
      to allow a service request to specify a destination for a newly
      created tcp socket
    * Add debug and debug_level configuration arguments to cloudi_service_tcp
    * Fix usage of cloudi_service deprecated functions

2015-08-27 Michael Truog   <mjtruog at gmail dot com>

    * Add CloudI services that were previously not included in the
      installation: cloudi_service_db_cassandra_cql,
      cloudi_service_db_riak, cloudi_service_oauth1

2015-08-19 Michael Truog   <mjtruog at gmail dot com>

    * Add common notification format for cloudi_service_db_pgsql:
        * {notify_ok, Pid, Channel :: binary(), Payload :: binary()} and
          {notify_error, Message :: binary()}

2015-08-08 Michael Truog   <mjtruog at gmail dot com>

    * Update key2value, keys1value, uuid, cpg
    * Update syslog as cloudi_x_syslog
        * Manually move the syslog source code to have the "cloudi_x_" prefix
    * Add usage of Erlang maps when the version of Erlang is >= 18.0 for the
      compilation of internal CloudI service logic
        * Erlang/OTP versions R16 and 17.x still use the dict module
          (which provides better type checking in 17.x)
    * Add dict_proxy/2, queue_proxy/1 and maps_proxy/2 as types defined in a
      single place within the internal CloudI source code
    * Add better type specifications for internal CloudI service logic data

2015-08-07 Michael Truog   <mjtruog at gmail dot com>

    * Make a configuration error log as fatal

2015-08-06 Michael Truog   <mjtruog at gmail dot com>

    * Add synchronous logging macros: LOG_FATAL_SYNC,
      LOG_ERROR_SYNC, LOG_WARN_SYNC, LOG_INFO_SYNC, LOG_DEBUG_SYNC,
      LOG_TRACE_SYNC
        * Add usage of the synchronous logging macros for restarts and stops
          of service instances

2015-08-01 Michael Truog   <mjtruog at gmail dot com>

    * Fix Erlang 18.0 bug with erlang:cancel_timer/2 usage
    * Add supool and varpool as cloudi_core dependencies
      (supool was abstracted out of cloudi_core)
    * Update uuid, cpg, quickrand
        * lib/cpg/src/cpg.erl is no longer related to the
          Erlang Public License (related to Apache 2.0 license now,
          due to the pg2 module as it currently exists in
          Erlang/OTP 18.0 kernel-4.0)
        * lib/quickrand/src/random_wh06_int.erl is no longer related to the
          Erlang Public License (related to Apache 2.0 license now,
          due to the random module as it currently exists in
          Erlang/OTP 18.0 stdlib-2.5)
    * Update jinterface to 1.6 (from Erlang/OTP 18.0)
        * Now all the jinterface source code is added to the JAR
          for the Java CloudI API (previously only the required
          dependencies were included)
    * Remove cloudi_service_db_tokyotyrant due to
      etokyotyrant (medici) being under the Erlang Public License and
      abandoned (Tokyo Tyrant usage should migrate to Kyoto Tycoon)

2015-07-29 Michael Truog   <mjtruog at gmail dot com>

    * Add FUNCTION_ARITY macro to cloudi_logger.hrl

2015-07-08 Michael Truog   <mjtruog at gmail dot com>

    * Fix bugs with lazy destination refresh method usage in the cloudi module

2015-07-01 Michael Truog   <mjtruog at gmail dot com>

    * Add "+C multi_time_warp" to the Erlang/OTP command line arguments
      when 18.0 or higher is used for CloudI configuration

2015-06-30 Michael Truog   <mjtruog at gmail dot com>

    * Change usage of erlang:cancel_timer/1 to erlang:cancel_timer/2 for
      Erlang >= 18.0, when the time remaining is not used for service
      request timeout adjustment

2015-06-20 Michael Truog   <mjtruog at gmail dot com>

    * Add the read configuration argument to cloudi_service_filesystem
      (to allow explicitly specifying the files to read from a directory
       and the segment of the file to read)

2015-06-14 Michael Truog   <mjtruog at gmail dot com>

    * Resolve file modeline differences
    * Add a minimal CloudI configuration file to use when the
      integration tests are disabled
    * Fix some minor problems in the dashboard
    * Add the dashboard to the default configurations
    * Fix cloudi_service_db_cassandra_cql app file version
    * Fix cloudi_service_db_riak and cloudi_service_oauth1
      app file version and modelines

2015-06-14 Bruce Kissinger   <brucekissinger at gmail dot com>

    * Add the CloudI dashboard

2015-06-13 Michael Truog   <mjtruog at gmail dot com>

    * Fix service configuration option request_timeout_immediate_max usage
      in combination with queue_limit, queue_size, and/or rate_request_max 

2015-06-08 Francisco Marchal   <marchal.francisco at gmail dot com>

    * Fix vim modified flag at opening file

2015-06-06 Michael Truog   <mjtruog at gmail dot com>

    * Fix node.js detection for v0.12 usage of 'nodejs' binary

2015-06-04 Michael Truog   <mjtruog at gmail dot com>

    * Simplify the conversion from Erlang types to msgpack types
      (in cloudi_response:external_format/2)

2015-06-03 Michael Truog   <mjtruog at gmail dot com>

    * Add the rate_request_max service configuration option

2015-06-01 Francisco Marchal   <marchal.francisco at gmail dot com>

    * Fix 'make install DESTDIR=pkgdir/'

2015-05-26 Michael Truog   <mjtruog at gmail dot com>

    * Remove the old service name paths from cloudi_service_api_requests
      (along with adding more error handling)
    * Add msgpack cloudi_core integration for cloudi_request and cloudi_response
      usage (with 'external_format' in cloudi_service_db_mysql and
      cloudi_service_db_pgsql)
    * Disable binary handling in cloudi_service_db_couchdb and
      cloudi_service_db_tokyotyrant
      (will add again once better drivers are used)

2015-05-14 Michael Truog   <mjtruog at gmail dot com>

    * Fix owner service configuration option issue due to the
      environment variable transform

2015-05-13 Michael Truog   <mjtruog at gmail dot com>

    * Allow the owner service configuration option to use
      environment variables (within the user/group strings)

2015-05-09 Michael Truog   <mjtruog at gmail dot com>

    * Add the owner service configuration option for external services
      (to set the OS user and/or OS group for any OS processes spawned)

2015-05-06 Michael Truog   <mjtruog at gmail dot com>

    * Add request_info, response_info, and response configuration
      arguments to cloudi_service_request_rate to make it more flexible
    * Improve the logging and defaults used by cloudi_service_request_rate
    * Add a priority option to the request_pid_options and info_pid_options
      service configuration options (for internal services)

2015-04-19 Michael Truog   <mjtruog at gmail dot com>

    * Small updates due to version change

2015-04-12 Michael Truog   <mjtruog at gmail dot com>

    * CloudI version 1.5.0 released

2015-04-11 Michael Truog   <mjtruog at gmail dot com>

    * Fix limit service configuration option bug
      (resource limits on OS processes are now tested/working)

2015-04-04 Michael Truog   <mjtruog at gmail dot com>

    * Add the CloudI Service API nodes_set timestamp_type option 'warp'
      (requires at least Erlang 18)

2015-04-03 Michael Truog   <mjtruog at gmail dot com>

    * Add cloudi_future and cloudi_service_future to provide Futures

2015-04-02 Michael Truog   <mjtruog at gmail dot com>

    * Erlang 18.0 compatibility fixes
        * cloudi module now returns a 2 element tuple with the 1st element
          as the result (the original return value) and the 2nd element
          as the modified Context or the Dispatcher pid
          (necessary due to the transaction id being strictly
           monotonically increasing and to handle the lazy destination
            refresh updates of service name pattern lookup data)
            * cloudi:agent() is a new type for cloudi module usage that is
              a cloudi:context() or a cloudi_service:dispatcher()
        * service module does not call the cloudi module to retain the same
          type specification as the cloudi_service module for the return values
    * Update uuid
    * Change ERLANG_OTP_VER_ erlc prefix defines to ERLANG_OTP_VERSION_

2015-03-22 Michael Truog   <mjtruog at gmail dot com>

    * Add resource limits on OS processes used for external services

2015-03-17 Michael Truog   <mjtruog at gmail dot com>

    * Fix integration test problems due to unicode stdout/stderr fix in
      the Python CloudI API and Python/C CloudI API
      (now the unbuffered stdout/stderr works with Python 3)

2015-03-13 Michael Truog   <mjtruog at gmail dot com>

    * Initial changes for resource limits on OS processes used for
      external services

2015-03-11 Michael Truog   <mjtruog at gmail dot com>

    * Fix unicode stdout/stderr usage with the Python CloudI API

2015-03-03 Michael Truog   <mjtruog at gmail dot com>

    * Change cloudi_service_hexpi to use cloudi_queue
    * Add more verification digits to the hexpi test

2015-03-02 Michael Truog   <mjtruog at gmail dot com>

    * Improve the hexpi test (avoid task timeouts after task size converges)
    * cloudi_service_map_reduce behaviour change with function
      cloudi_service_map_reduce_new changing from arity 4 to 5
    * Add cloudi_queue data structure

2015-03-01 Michael Truog   <mjtruog at gmail dot com>

    * Update nodefinder
    * Improve the hexpi test

2015-02-24 Michael Truog   <mjtruog at gmail dot com>

    * Update nodefinder

2015-02-23 Michael Truog   <mjtruog at gmail dot com>

    * Fix write_truncate and write_append in cloudi_service_filesystem
      so they find existing files when using HTTP method
      suffixes on service names
    * Add the ability to use write_append in cloudi_service_filesystem
      with byte ranges that go outside the existing file boundary
      (gaps are filled with null characters)

2015-02-18 Michael Truog   <mjtruog at gmail dot com>

    * Add timeout usage to cloudi_service_map_reduce for slow disk storage

2015-02-17 Michael Truog   <mjtruog at gmail dot com>

    * Fix Java 7 raw type warning in Java CloudI API

2015-02-07 Michael Truog   <mjtruog at gmail dot com>

    * Add cloudi_service_validate CT tests
    * Fix cloudi_service_validate

2015-02-06 Michael Truog   <mjtruog at gmail dot com>

    * Add validation and failure handling to cloudi_service_quorum
    * Fix cloudi_service_validate
    * Make sure a failure to validate the request and/or the request info
      causes a source failure
    * Add request validation and source failure handling
      to cloudi_service_router

2015-02-05 Michael Truog   <mjtruog at gmail dot com>

    * Finalize configuration of cloudi_service_validate

2015-02-04 Michael Truog   <mjtruog at gmail dot com>

    * Split cloudi_service_validate failures into
      source and destination failures

2015-02-03 Michael Truog   <mjtruog at gmail dot com>

    * Add cloudi_service_validate for the validation of service request data
      to a single destination (optionally, terminating the source of failures)

2015-02-02 Michael Truog   <mjtruog at gmail dot com>

    * Tweak node up/down log line format for info list

2015-01-28 Michael Truog   <mjtruog at gmail dot com>

    * Add cloudi_service:suffix/2 and cloudi_service_name:suffix/2 for
      simpler access to the suffix of a service name or service name pattern

2015-01-26 Michael Truog   <mjtruog at gmail dot com>

    * Fix macro name in cloudi_service_http_cowboy and cloudi_service_http_elli

2015-01-20 Michael Truog   <mjtruog at gmail dot com>

    * Depend only on the https://github.com/CloudI/loadtests/ repository
      for loadtest results
    * Fix configure script so that it errors when perl, php, or node.js
      is not found when the programming language is enabled

2014-12-20 Michael Truog   <mjtruog at gmail dot com>

    * CloudI version 1.4.0 released

2014-12-16 Michael Truog   <mjtruog at gmail dot com>

    * Add the loadtest results summary for 1.4.0

2014-12-15 Michael Truog   <mjtruog at gmail dot com>

    * Added tsung_data.py script output for all loadtest results
    * Compressed all loadtest results together for better compression and
      easier handling within the git repository

2014-12-11 Michael Truog   <mjtruog at gmail dot com>

    * Add the tsung_data.py script for getting exact latency extremes from
      tsung.log files

2014-12-06 Michael Truog   <mjtruog at gmail dot com>

    * Fix Perl CloudI API destructor bug

2014-12-05 Michael Truog   <mjtruog at gmail dot com>

    * Fix http_req C executable compilation
    * Tested with Fedora 20 on ppc64
      (configure command line arguments:
       --with-cxx-backtrace --with-zeromq --disable-javascript-support
       --disable-php-support --disable-ruby-support
       --with-integration-tests-ran=no)

2014-12-04 Michael Truog   <mjtruog at gmail dot com>

    * Enforce TIMEOUT_TERMINATE_MIN based on MaxT setting during configuration
    * Add compatibility for FreeBSD 8.3 on amd64
      (relied on the default install except for extra source code
       compilation dependencies,
       ports used:
       devel/{autoconf,automake,libtool,git,boost-libs}
       math/gmp misc/e2fsprogs-libuuid
       configure command line arguments:
       --with-cxx-backtrace --with-zeromq --disable-javascript-support
       --disable-php-support --disable-ruby-support --disable-java-support 
       --with-integration-tests-ran=no)

2014-12-03 Michael Truog   <mjtruog at gmail dot com>

    * Update erlasticsearch
    * Fix C++ backtrace compilation configuration
    * Enable integration test compilation for the enabled programming languages
    * Split configure flag --with-integration-tests into both
      --with-integration-tests and --with-integration-tests-ran

2014-12-02 Michael Truog   <mjtruog at gmail dot com>

    * Update erlcloud and nodefinder after testing tag and security group
      selection with changes for erlcloud 0.9.1
    * Fix CloudI Service API nodes_set discovery update of parameters
    * Fix CloudI Service API nodes_get discovery ec2 output of host

2014-12-01 Michael Truog   <mjtruog at gmail dot com>

    * Make erlcloud use httpc instead of lhttpc to keep the errors returned
      consistent

2014-11-29 Michael Truog   <mjtruog at gmail dot com>

    * Fix bug stopping the node discovery method
    * Fix CloudI Service API service_subscriptions function to handle
      non-default scopes
    * Fix CloudI Service API services_search function to search within
      non-default scopes

2014-11-28 Michael Truog   <mjtruog at gmail dot com>

    * Fix 1.3.3 bug with count_process_dynamic creating service processes
      that have a termination timeout which is not set internally,
      causing CloudI to crash when the new service processes
      attempt to terminate

2014-11-27 Michael Truog   <mjtruog at gmail dot com>

    * Fix bad socket handling during external service termination

2014-11-23 Michael Truog   <mjtruog at gmail dot com>

    * Log the termination reason when a service is killed after
      the termination timeout is exceeded
    * Fix a bug throwing the TerminateException in the Perl CloudI API

2014-11-21 Michael Truog   <mjtruog at gmail dot com>

    * Add remaining fixes for JavaScript CloudI API
    * Add a javascript version of the messaging integration test

2014-11-20 Michael Truog   <mjtruog at gmail dot com>

    * Fix large sends in the JavaScript CloudI API
    * Add a javascript version of the msg_size integration test

2014-11-19 Michael Truog   <mjtruog at gmail dot com>

    * Fix return/forward usage in the JavaScript CloudI API
    * Fix large receives in the JavaScript CloudI API

2014-11-18 Michael Truog   <mjtruog at gmail dot com>

    * Add JavaScript/node.js CloudI API
        * return/forward function calls do not yet work due to exception usage
    * Add a javascript version of the http_req integration test

2014-11-11 Michael Truog   <mjtruog at gmail dot com>

    * Bring the cloudi_service_http_elli functionality to be equivalent to
      cloudi_service_http_cowboy, except for multipart requests and
      websockets usage (which currently require cloudi_service_http_cowboy)
    * Remove elli_websocket

2014-11-10 Michael Truog   <mjtruog at gmail dot com>

    * Update elli
    * Add elli_websocket as a dependency for cloudi_service_http_elli
    * Update cowboy

2014-11-08 Michael Truog   <mjtruog at gmail dot com>

    * Improve the efficiency of header and query string encoding in
      cloudi_service_http_cowboy and cloudi_service_http_elli
        * Previously, the query string values that were lists were in the
          reverse order when using the external format, but now the
          value order is the same as the query string order

2014-11-07 Michael Truog   <mjtruog at gmail dot com>

    * Fix Perl CloudI API mcast_async return value
    * Add Perl messaging integration test

2014-11-06 Michael Truog   <mjtruog at gmail dot com>

    * Fixes for the Perl CloudI API and the Perl http_req integration test
    * Fix CloudI C/C++ API functions cloudi_info_key_value_parse,
      cloudi_request_http_qs_parse, CloudI::API::request_http_qs_parse,
      and CloudI::API::info_key_value_parse
    * Add Perl msg_size integration test

2014-11-05 Michael Truog   <mjtruog at gmail dot com>

    * Fix bug with websocket_protocol usage of cloudi_service_http_cowboy
      to make sure a response arriving from the websocket after a timeout
      has occurred is ignored
    * Add the source code for the Perl CloudI API
    * Fix the default send_sync timeout value for both
      the PHP CloudI API and the Python CloudI API

2014-10-31 Michael Truog   <mjtruog at gmail dot com>

    * Fix cloudi_service_api_requests to use new jsx functions
    * Update quickrand with fix
    * Update jsx
    * Update erlcloud
    * Add lhttpc to external dependencies due to erlcloud
    * Update version to be 1.4.0-rc.4 so that it is consistent with the
      http://hex.pm packages
    * Remove cloudi_service_work_manager since it is no longer needed
    * Add support for Solaris/Illumos

2014-10-29 Michael Truog   <mjtruog at gmail dot com>

    * Add timeout argument to the poll function in the Java CloudI API
    * Make the PHP CloudI API cause asserts to exit to keep all the
      external programming language behavior consistent

2014-10-28 Michael Truog   <mjtruog at gmail dot com>

    * Add timeout argument to the poll function in the PHP CloudI API
    * Fix request_info parsing in the PHP CloudI API

2014-10-27 Michael Truog   <mjtruog at gmail dot com>

    * Add timeout argument to the poll function in both
      the Python CloudI API and the Ruby CloudI API
    * Add more details to the hello_world5 example
    * Fix request_timeout_adjustment usage with the (pure) Python CloudI API
      to use the proper time units

2014-10-26 Michael Truog   <mjtruog at gmail dot com>

    * Fix the assertions in the Java messaging integration test

2014-10-25 Michael Truog   <mjtruog at gmail dot com>

    * Get Java assertions turned on for the integration tests

2014-10-24 Michael Truog   <mjtruog at gmail dot com>

    * Add a fix for new Java CloudI API buffer usage

2014-10-23 Michael Truog   <mjtruog at gmail dot com>

    * Fix bug in java messaging integration test
    * Improve Java CloudI API buffer usage
    * Fix bug due to external service logging change (on 2014-10-20)

2014-10-21 Michael Truog   <mjtruog at gmail dot com>

    * Improve the exception handling in the Java, PHP, Python and Ruby
      CloudI API implementations
    * Add stdout usage upon terminate for all integration test services
    * Add more validation of external service Erlang term data received from
      the external service CloudI API
    * Fix remaining PHP CloudI API bugs

2014-10-20 Michael Truog   <mjtruog at gmail dot com>

    * Add the PHP messaging test
    * Fix various PHP CloudI API errors
    * Fix bug when external services log stdout or stderr data
      that contains a ~ character

2014-10-19 Michael Truog   <mjtruog at gmail dot com>

    * Add the PHP CloudI API
    * Add the PHP http_req test

2014-10-18 Michael Truog   <mjtruog at gmail dot com>

    * Resolve minor problems with the Python and Ruby CloudI APIs

2014-10-16 Michael Truog   <mjtruog at gmail dot com>

    * Add validation to all external service Erlang term data received from
      the external service CloudI API with range checking and type checking

2014-10-15 Michael Truog   <mjtruog at gmail dot com>

    * Add more CT tests for cloudi_service_filesystem
    * Make cloudi_service_filesystem generate etags that are always unique
      (i.e., more unique than the modification datetime)

2014-10-14 Michael Truog   <mjtruog at gmail dot com>

    * Add files_size to the cloudi_service_filesystem configuration arguments
      to limit the memory consumption of a single service process
      (providing an absolute limit on the amount of binary data cached in kB)

2014-10-13 Michael Truog   <mjtruog at gmail dot com>

    * Update dynamic_compile
    * Fix Ruby Erlang Binary Term Format encoding bug

2014-10-10 Michael Truog   <mjtruog at gmail dot com>

    * Add the 1.4.0 cloudi_service behaviour changes
      (use the CLOUDI_SERVICE_OLD to ignore the changes)
        * cloudi_service_init arity 3 -> 4 (for Timeout)
        * cloudi_service_terminate arity 2 -> 3 (for Timeout)

2014-10-09 Michael Truog   <mjtruog at gmail dot com>

    * Improve boost_thread linking
    * Fix --with-integration-tests usage
    * Increase cloudi_service_quorum CT test timeout due to Travis build
    * Improve boost autoconf macros
    * Provide configure script output for the enabled CloudI APIs and
      whether the integration tests will be included

2014-10-07 Michael Truog   <mjtruog at gmail dot com>

    * Add more usage of the enable/disable configure switches for
      programming language support
    * Add --with-integration-tests configure script argument so the
      integration tests don't need to be compiled, installed or executed
    * Improve the timeout on the cloudi_service_queue CT test
    * Improve the timeout on the cloudi_service_quorum CT test

2014-10-06 Michael Truog   <mjtruog at gmail dot com>

    * Add logging metadata in a way that is lager-compatible
    * Remove the flood integration tests since the functionality is replaced
      and improved in the request_rate test
    * Add enable/disable configure switches for programming language support

2014-10-04 Michael Truog   <mjtruog at gmail dot com>

    * Improve cowboy integration in cloudi_service_http_cowboy
    * Fix cloudi_service_filesystem byterange read bug

2014-10-03 Michael Truog   <mjtruog at gmail dot com>

    * Update nodefinder

2014-10-01 Michael Truog   <mjtruog at gmail dot com>

    * Fixes for Erlang 17.3 changes
    * Update pqueue

2014-09-30 Michael Truog   <mjtruog at gmail dot com>

    * CloudI version 1.3.3 (beta) released

2014-09-29 Michael Truog   <mjtruog at gmail dot com>

    * Update erlang_term
    * Add a script to update mimetypes based on file extensions and use it
      to provide the internal cloudi_core header file
    * Add cloudi_response_info:lookup_content_type/2 to avoid
      memory consumption
        * Use it in cloudi_service_http_cowboy and cloudi_service_http_elli
          to minimize connection process memory consumption
    * Update cloudi_service_api_requests to make the new URL paths provide
      string UUIDs so the output is more intuitive

2014-09-28 Michael Truog   <mjtruog at gmail dot com>

    * Allow the service configuration option queue_limit to be 0
    * Add the missing queue_size cloudi_service_api types entries

2014-09-27 Michael Truog   <mjtruog at gmail dot com>

    * Update erlang_term
    * Fix rebar to have output during CT execution pauses so that Travis
      doesn't kill the build during the testing phase

2014-09-26 Michael Truog   <mjtruog at gmail dot com>

    * Add queue_size service configuration option for both internal and
      external services so a kilobyte limit can be used for the size of a
      service queue
    * Add the erlang_term dependency

2014-09-24 Michael Truog   <mjtruog at gmail dot com>

    * Fix event consumption based on more testing
    * Fix http and http_req integration tests for Python 3

2014-09-23 Michael Truog   <mjtruog at gmail dot com>

    * Fix all external CloudI API implementations to consume events both
      before and after CloudI API message responses

2014-09-22 Michael Truog   <mjtruog at gmail dot com>

    * Add timeout_initialize and timeout_terminate as getter functions in
      each external CloudI API implementation
    * Add a terminate_exception in each non-C (and non-C++)
      external CloudI API implementation
    * Make a pending termination of an external service wait for the
      timeout_terminate period for the socket to close
        * The terminate situation is provided by a terminate return value
          (or exception in non-C (and non-C++)) if execution is processing
          a service request, otherwise a return occurs from the poll()
          function call (the terminate_exception object provides the
          termination timeout value)

2014-09-19 Michael Truog   <mjtruog at gmail dot com>

    * Modify aspects_init_after and aspects_terminate_before to add a
      timeout parameter
    * Add additions to support the cloudi_service_init/4 and
      cloudi_service_terminate/3 timeout parameter which will become default
      in CloudI 1.4.0
        * To use it now, define CLOUDI_SERVICE_NEW for
          cloudi_core compilation
    * Add configuration validation to catch unexpected
      configuration sections

2014-09-18 Michael Truog   <mjtruog at gmail dot com>

    * Fixes for cloudi_service_db_mysql
    * Add CT tests to cloudi_service_db_mysql based on
      the current cloudi_service_db_pgsql CT tests
    * Update emysql to the eonblast repository
      (different native return values,
       but the old emysql was too broken to fix)
    * Fix for cloudi_service_db_pgsql timeout usage
        * The service request timeout value will be used instead of the
          configuration argument timeout value for the semiocast driver
          (making the configuration argument timeout connection only,
           for the drivers that support it, i.e., epgsql and wg)
    * Change cloudi_service_db_riak ping to start only after the connection
      is created to be more accurate
    * Add ping usage to cloudi_service_db_riak CT test
    * Reformat cloudi_service_db_riak source code
    * Add asserts to the cloudi_service_msg_size integration test

2014-09-16 Michael Truog   <mjtruog at gmail dot com>

    * Add file notifications to cloudi_service_filesystem append and truncate
    * Add --with-python-version to configure script

2014-09-15 Michael Truog   <mjtruog at gmail dot com>

    * Change RUN_ERL_LOG_ALIVE_MINUTES amd
      RUN_ERL_LOG_ACTIVITY_MINUTES back to the defaults due to unexpected
      latency caused with RUN_ERL_LOG_ACTIVITY_MINUTES set to 60
      (it must need to be lower)
    * Adjust cloudi_service_request_rate to have better convergence when
      multiple processes are required
    * Fix cloudi_service_filesystem CT test error and
      reduce the CT test timeout

2014-09-13 Michael Truog   <mjtruog at gmail dot com>

    * Fix bug with incoming service request queue length not being accurate
      after timeouts
    * Reduce the latency a service request timeout may cause when many
      service requests are pending (and potentially waiting to timeout), so
      improve the performance of an overloaded service process
    * Update pqueue

2014-09-11 Michael Truog   <mjtruog at gmail dot com>

    * Improve fix (done on 8/31) to make cloudi_service_init/3 completion
      and aspects_init_after completion a requirement before an internal
      service start is complete and to make sure the poll function has been
      called before an external service start is complete
        * The fix makes sure an error during service initialization is
          passed back to the caller of cloudi_service_api:services_add/2 or
          the cloudi_core_i_configurator process when the error occurs
          within external source code (no race condition due to the
          service process waiting for the cloudi_core_i_configurator to
          monitor the process)
    * Add get_status/2 and get_status/1 functions to both
      cloudi_core_i_services_internal and
      cloudi_core_i_services_external for the current process status
      (similar to sys:get_status/2 and sys:get_status/1)
    * Change the cloudi_core application supervisor to be one_for_all
      (it is better to fail-fast when the CloudI configuration file
       causes cloudi_core_i_configurator to crash)
    * Make the internal service duo_mode pid handle system messages for
      the sys module
    * Add the dynamic request_rate configuration argument to
      the cloudi_service_request_rate test
    * Add the use_content_disposition cloudi_service_filesystem configuration
      argument and make it default to false
    * Fix the scope service configuration option formatting when the
      service configuration is provided by the CloudI Service API
    * Fix a potential race with a lazy destination refresh in an internal
      service when a refresh occurs during the execution of
      cloudi_service_init/3 in a way that prevents future updates
    * Update cpg

2014-09-09 Michael Truog   <mjtruog at gmail dot com>

    * Changes for the Python CloudI API to work with Python version 3
      (for both the pure-python cloudi module and
       the Python/C++ cloudi_c module)
    * Update all the integration tests to work with Python version 3

2014-09-08 Michael Truog   <mjtruog at gmail dot com>

    * Make sure the Erlang Binary Term Format encoding in Python
      supports Python v3
    * Fixes to make sure everything is ok with the Ruby and Python
      Erlang Binary Term Format encoding/decoding

2014-09-06 Michael Truog   <mjtruog at gmail dot com>

    * Add tests for the Erlang Binary Term Format encoding in Ruby

2014-09-05 Michael Truog   <mjtruog at gmail dot com>

    * Add tests for the Erlang Binary Term Format encoding in Python

2014-09-04 Michael Truog   <mjtruog at gmail dot com>

    * Add CT tests for cloudi_service_filesystem
    * Fix cloudi_service_filesystem based on CT tests

2014-09-03 Michael Truog   <mjtruog at gmail dot com>

    * Add write append support to cloudi_service_filesystem for POST requests
      (with ranges allowed for file insertions)

2014-09-02 Michael Truog   <mjtruog at gmail dot com>

    * Add range request support for cloudi_service_filesystem GET requests
    * Add write truncate support to cloudi_service_filesystem for PUT requests
    * Add HEAD and OPTIONS requests to cloudi_service_filesystem
    * Add legacy stdout/stderr output formatting as special modes on the
      legacy logging formatter used in the default configuration
      (just so the new version generates the same log output by default)

2014-08-31 Michael Truog   <mjtruog at gmail dot com>

    * Fixes for cloudi_service_db_mysql
    * Switch to get internal service self pid from supervisor, fixes bug if
      an internal service consumes messages in the cloudi_service_init/3
      (messages not related to its source code)

2014-08-28 Michael Truog   <mjtruog at gmail dot com>

    * Make the closure of old websockets synchronous when
      cloudi_service_http_cowboy has websocket_name_unique set to true
    * Fix bug with removal of multiple service ids that refer to a common
      internal service module, to make sure the last removal is what removes
      the application dependencies when automatic_loading is true

2014-08-27 Michael Truog   <mjtruog at gmail dot com>

    * Change the external service logging output to
      use STDOUT as a module name for the stdout stream and to
      use STDERR as a module name for the stderr stream
      with the OS pid as line number
    * Do not indent stdout and stderr output from extenal services now
    * Make sure a CloudI Service API call to services_remove/2 waits for
      the service processes to terminate before removing the application
      dependencies (bugfix)

2014-08-26 Michael Truog   <mjtruog at gmail dot com>

    * Add the subscribe_count function to the CloudI API for checking
      if a subscription on a service name pattern has occurred and
      how many times
    * Fix bug where 1 unsubscribe would affect all subscriptions of a single
      service process (now N subscribes can be undone by N unsubscribes)
    * Update cpg

2014-08-25 Michael Truog   <mjtruog at gmail dot com>

    * Add CloudI Service API functions to get the current configuration:
        * cloudi_service_api:acl/1
        * cloudi_service_api:nodes_get/1
        * cloudi_service_api:logging/1

2014-08-22 Michael Truog   <mjtruog at gmail dot com>

    * Fix old format for erlang terms in
      cloudi_service_api_requests (the new format changes broke it)
    * Update reltool_util
    * Add the option of starting a service with a release boot file
    * Add the boot file startup to the hello_world1 example

2014-08-21 Michael Truog   <mjtruog at gmail dot com>

    * Small fixes for logging formatters usage
    * Move stdout/stderr external service logging output to the
      cloudi_core_i_services_external module

2014-08-20 Michael Truog   <mjtruog at gmail dot com>

    * Small fixes for various logging test-cases
      (testing the logging formatters still remains)
    * Add cloudi_service_http_cowboy configuration argument
      websocket_name_unique to make sure only one connection Erlang pid
      represents a websocket service name
    * Fix cloudi_service_http_cowboy usage of non-default scope

2014-08-19 Michael Truog   <mjtruog at gmail dot com>

    * Update the CloudI Service API to provide the following logging functions:
        * cloudi_service_api:logging_file_set/2
        * cloudi_service_api:logging_level_set/2
        * cloudi_service_api:logging_syslog_set/2
        * cloudi_service_api:logging_formatters_set/2
        * cloudi_service_api:logging_redirect_set/2
    * Deprecated the CloudI Service API functions:
        * cloudi_service_api:loglevel_set/2
        * cloudi_service_api:log_redirect/2

2014-08-18 Michael Truog   <mjtruog at gmail dot com>

    * Fixes to log formatters to allow multiple instances of the same
      output module
    * Add the cloudi_service_api:log_formatters/2 function to the
      CloudI Service API

2014-08-15 Michael Truog   <mjtruog at gmail dot com>

    * Add lager backend integration

2014-08-14 Michael Truog   <mjtruog at gmail dot com>

    * Add lager formatter integration

2014-08-13 Michael Truog   <mjtruog at gmail dot com>

    * Fix cloudi_service_http_cowboy websocket_connect_sync race condition
    * Update key2value
    * Add keys1value dependency

2014-08-12 Michael Truog   <mjtruog at gmail dot com>

    * Add the service configuration option request_name_lookup to provide a way
      to change service name lookup failure behavior
      (usable as cloudi module context configuration too)
    * Switch to using the new endpoints in cloudi_service_api_requests

2014-08-11 Michael Truog   <mjtruog at gmail dot com>

    * Update cowboy, cowlib, and ranch so it is at 1.0
    * cloudi_service_http_cowboy changes:
        * Add timeout and length limits due to cowboy configuration additions
        * Change multipart support to utilize the new
          multipart_destination_lock service argument (defaults to true)
          to force all multipart parts to go to a single
          service instance process
        * Changed recv_timeout to default to 5000 ms instead of 30000 ms,
          to match the cowboy default

2014-08-08 Michael Truog   <mjtruog at gmail dot com>

    * Add separate endpoints for cloudi_service_api_requests that provide
      content-type hints as file extensions with a better hierarchy
    * Add defaults for the tuple configuration format in cloudi_service_api.hrl
    * Add a basic test for cloudi_service_http_client and fixed various bugs

2014-08-07 Michael Truog   <mjtruog at gmail dot com>

    * Move some common functions into cloudi_core,
      creating cloudi_response_info

2014-08-05 Michael Truog   <mjtruog at gmail dot com>

    * Add initial cloudi_service_http_client

2014-08-04 Michael Truog   <mjtruog at gmail dot com>

    * Tweak ERLANG_OTP_VER* autoconf discovery to utilize the 17.1.*
      OTP_VERSION file which might be installed
    * Add more error logging for debugging services (startup timeouts)
    * Add the request_rate integration test
    * Make Travis do all the regression/unit tests with the
      available databases enabled after a successful build (before an install)

2014-08-01 Michael Truog   <mjtruog at gmail dot com>

    * Move the cloudi_core_i_configurator:concurrency/1 function
      to cloudi_concurrency:count/1 so that it can be used easily by
      internal services

2014-07-31 Michael Truog   <mjtruog at gmail dot com>

    * Split functionality not related to usage of the Dispatcher in
      the cloudi_service module into separate modules to make it easier for
      cloudi_core to expand
      (deprecated functions near the bottom of the cloudi_service module
       have been moved to the following modules:
       cloudi_environment, cloudi_service_name, cloudi_request,
       cloudi_request_info, cloudi_key_value)
    * Move internal cloudi_core source code filenames to have the prefix
      "cloudi_core_i_" to make it clearer what modules are meant for
      usage in non-cloudi_core source code
    * Add the elixir CloudILogger.ex module so elixir source code can
      utilize the same cloudi_logger.hrl logging macros that are used in
      erlang source code
    * Updated the Elixir.HelloWorld1 example to use the CloudILogger.ex module

2014-07-29 Michael Truog   <mjtruog at gmail dot com>

    * Remove configuration arguments request_start and request_end from
      cloudi_service_oauth1 so that the service configuration options
      aspects_request_before and aspects_request_after can be used instead

2014-07-28 Michael Truog   <mjtruog at gmail dot com>

    * Add Elixir example
    * Fix cloudi_service_http_cowboy bug with output set to internal

2014-07-25 Michael Truog   <mjtruog at gmail dot com>

    * Allow cloudi_service_api functions to take binary or string data
      for uuids, to make the interface a bit simpler
    * Make sure count_process_dynamic updates each service process with
      the new count_process value after it is adjusted

2014-07-24 Michael Truog   <mjtruog at gmail dot com>

    * Fix service configuration option request_timeout_adjustment with
      aspects_request_before or aspects_request_after in external services

2014-07-23 Michael Truog   <mjtruog at gmail dot com>

    * Make sure the cloudi_service_terminate/2 execution limit is equal to
      MaxT/MaxR - 100 (enforced by a brutal_kill from cloudi_services_monitor,
      with a min value of 1 second and a max value of 60 seconds)
    * Simplify the internal state shown for both internal and external
      services with format_status/2
    * Fixes for aspects

2014-07-22 Michael Truog   <mjtruog at gmail dot com>

    * Make cloudi_service_queue and cloudi_service_quorum CT tests
      consistently pass without the potential for random failures

2014-07-21 Michael Truog   <mjtruog at gmail dot com>

    * Add automatic_loading to external service configuration options
      (now both internal and external services can use automatic_loading
       as a service configuration option)
    * Make automatic_loading control the loading of modules that contain
      aspect functions (for checking that the aspect function exists)

2014-07-18 Michael Truog   <mjtruog at gmail dot com>

    * Add cloudi_core aspects test
    * Alter service configuration option aspects_init_after for
      external services to provide the command line as a list of strings
    * Add aspect testing to the msg_size tests

2014-07-17 Michael Truog   <mjtruog at gmail dot com>

    * Allow AOP (Aspect-Oriented Programming) functionality as
      service configuration options on both external and internal services

2014-07-16 Michael Truog   <mjtruog at gmail dot com>

    * Add the epgsql driver to cloudi_service_db_pgsql
    * Add AOP (Aspect-Oriented Programming) functionality as
      service configuration options for internal services

2014-07-15 Michael Truog   <mjtruog at gmail dot com>

    * Fix cloudi_core test after update problem
    * Make sure all arguments for example services are present in the
      list of macros which provide defaults
    * Add example service checks to prevent patterns in prefixes for
      services that would have problems with a pattern for a service prefix
    * cloudi_service_oauth1 fixes

2014-07-11 Michael Truog   <mjtruog at gmail dot com>

    * Tweak cloudi_service_http_cowboy so websocket service requests that cause
      a connection close do not send data when the data is a null binary
    * Update pqueue
    * Make service processes start in-order from 0 to N-1

2014-06-30 Michael Truog   <mjtruog at gmail dot com>

    * Fix bug with cloudi_service_init/3 callback function exceptions
      causing a possible crash of cloudi_service_monitor
    * Add the beginning of cloudi_core CT tests

2014-06-27 Michael Truog   <mjtruog at gmail dot com>

    * Fixes for cloudi_service_oauth1 to match HTTP input
    * Fixes to cloudi_service_http_cowboy and cloudi_service_http_elli to
      keep their functionality similar and to use the output 'internal'
      for GET query strings that are passed as a tuple list
      (instead of the 'external' text encoding with \0 delimiters format)

2014-06-26 Michael Truog   <mjtruog at gmail dot com>

    * Fix application membership of CloudI internal services by having
      the group_leader set properly

2014-06-25 Michael Truog   <mjtruog at gmail dot com>

    * Add request_start and request_end to cloudi_service_oauth1

2014-06-25 Irina Guberman

    * Update cloudi_service_db_cassandra_cql

2014-06-23 Michael Truog   <mjtruog at gmail dot com>

    * Add cloudi_service_db_oauth1
    * Add cloudi_service_db_riak

2014-06-23 Irina Guberman

    * Add cloudi_service_db_cassandra_cql

2014-06-20 Michael Truog   <mjtruog at gmail dot com>

    * Fix {<<"connection">>, <<"close">>} RequestInfo/ResponseInfo usage in
      cloudi_service_http_cowboy so all websocket usage works as expected

2014-06-19 Michael Truog   <mjtruog at gmail dot com>

    * Add websocket_output configuration argument to
      cloudi_service_http_cowboy

2014-06-16 Michael Truog   <mjtruog at gmail dot com>

    * Fixes for closing a connection in the response of a websocket_connect
      in cloudi_service_http_cowboy
    * Fixes for using hidden nodes
    * Fix the python CloudI API cloudi_c.mcast_async return for no destinations
    * Update cpg

2014-06-14 Michael Truog   <mjtruog at gmail dot com>

    * Add the service request response to a websocket connection close

2014-05-31 Michael Truog   <mjtruog at gmail dot com>

    * CloudI version 1.3.2 (beta) released
    * Update erlang_cassandra and erlasticsearch (ES >= 1.x)
    * Update thrift
    * Fix lager and goldrush dependencies
    * Update documentation

2014-05-30 Michael Truog   <mjtruog at gmail dot com>

    * Add a test to the cloudi_service_db_pgsql ct test

2014-05-30 Drew Varner     <drew.varner at ninefx dot com>

    * Fix the service application include file type spec

2014-05-29 Michael Truog   <mjtruog at gmail dot com>

    * Improvement for websocket_subscriptions in cloudi_service_http_cowboy

2014-05-28 Michael Truog   <mjtruog at gmail dot com>

    * Add the websocket_subscriptions configuration parameter to
      cloudi_service_http_cowboy
    * Add the functions cloudi_service:service_name_new/2 and
      cloudi_service:service_name_new/4

2014-05-28 Drew Varner     <drew.varner at ninefx dot com>

    * Add javadocs comments to the Java CloudI API

2014-05-27 Michael Truog   <mjtruog at gmail dot com>

    * Fix cloudi_service_api functions service_subscriptions/2 and
      services_search/2 for services that use duo_mode set to true
    * Improve the internal service cloudi_service_terminate function
      execution time limit enforcement
    * Fix cloudi_service_http_cowboy bug during cloudi_service_init validation

2014-05-23 Michael Truog   <mjtruog at gmail dot com>

    * Fix for websocket_protocol in cloudi_service_http_cowboy

2014-05-22 Michael Truog   <mjtruog at gmail dot com>

    * Add the websocket_protocol configuration option to
      cloudi_service_http_cowboy for avoiding blocking on a response to an
      outgoing CloudI service request (due to no unique identifier
      (Transaction ID concept) being present in the WebSocket protocol).
      So, this allows a function that parses (transforms) the data from the
      WebSocket and provides a unique identifier with the protocol details
      inside the function.

2014-05-19 Michael Truog   <mjtruog at gmail dot com>

    * Update documentation

2014-05-19 Drew Varner     <drew.varner at ninefx dot com>

    * Add nonempty_list to cloudi_service_api typespecs

2014-05-14 Michael Truog   <mjtruog at gmail dot com>

    * Add use_websockets == exclusively for cloudi_service_http_cowboy to limit
      usage of a port to websockets-only
    * Add websocket_connect_async, websocket_connect_sync,
      websocket_disconnect_async, and websocket_disconnect_sync to
      cloudi_service_http_cowboy to handle (blocking) connection validation
      (i.e., synchronous connect service requests with
       websocket_connect_sync, websocket_connect remains the same as
       websocket_disconnect_async)
    * Make a custom status code work for websocket_connect usage
      (websocket_connect_async/websocket_connect_sync) in
      cloudi_service_http_cowboy

2014-05-09 Michael Truog   <mjtruog at gmail dot com>

    * Update semiocast pgsql driver
    * Make cloudi_service_db_pgsql crash on unsupported types

2014-05-08 Michael Truog   <mjtruog at gmail dot com>

    * Add debug output to cloudi_service_db_pgsql
    * Simplify cloudi_service_db_pgsql
    * Fix CLOUDI_CORE_STANDALONE cloudi_core dialyzer error

2014-05-07 Michael Truog   <mjtruog at gmail dot com>

    * Add another cloudi_service_db_pgsql test case to show driver differences
    * Update reltool_util

2014-05-06 Michael Truog   <mjtruog at gmail dot com>

    * Cleanup cloudi_service_db_pgsql
        * Move the old epgsql wg driver modules/application/header
          so that its prefix is epgsql_wg
        * Add the semiocast pgsql driver
        * Add a common internal output format for both drivers
          (default to off, see internal_interface configuration,
           based on the semiocast attempt at supporting odbc)
        * Add more tests which use both drivers with the common internal
          output format
    * Update uuid

2014-05-02 Michael Truog   <mjtruog at gmail dot com>

    * Improve the error return types for the modules:
      cloudi, cloudi_service and cloudi_service_api
    * Fix a cloudi_service_init error for recv_asyncs function calls

2014-05-01 Michael Truog   <mjtruog at gmail dot com>

    * Add application dependencies to the release manually which
      reltool fails to find (syntax_tools, cloudi_x_lager, cloudi_x_goldrush)
    * Update the Erlang Binary Term Format for the new types in 17.0

2014-04-28 Michael Truog   <mjtruog at gmail dot com>

    * Fix automatic stopping of an internal service's application when
      the application_name service configuration option is used
    * Add more logging output when a service is stopped

2014-04-25 Michael Truog   <mjtruog at gmail dot com>

    * Update cpg
    * Fix error on CLOUDI_CORE_STANDALONE external service configuration

2014-04-24 Michael Truog   <mjtruog at gmail dot com>

    * Update cpg
    * Simplify FUNCTION macro

2014-04-17 Michael Truog   <mjtruog at gmail dot com>

    * Make the 17.0 dict:dict() type usage more specific

2014-04-16 Michael Truog   <mjtruog at gmail dot com>

    * Fix the Erlang/OTP release configure check on OSX

2014-04-11 Michael Truog   <mjtruog at gmail dot com>

    * Update erlasticsearch

2014-04-10 Michael Truog   <mjtruog at gmail dot com>

    * Improve type changes for Erlang/OTP 17.0 compilation
      (17.0rc1 will not be supported due to inconsistencies with 17.0)

2014-04-09 Michael Truog   <mjtruog at gmail dot com>

    * Fixes for Erlang/OTP 17.0 compilation

2014-04-08 Michael Truog   <mjtruog at gmail dot com>

    * Add service name pattern support to cloudi_service_router
    * Fix the run_erl logging settings for the erlang.log.? files

2014-04-07 Michael Truog   <mjtruog at gmail dot com>

    * Add url-path RequestInfo parameter to cloudi_service_http_elli
    * Add cloudi_service_filesystem initialization configuration for
      notify_one and notify_all (these should be preferred to avoid
      problems after service crashes)
    * Add cloudi_service_filesystem notify_on_start
      initialization configuration to provide simpler
      file-based initialization for dependent services

2014-04-04 Michael Truog   <mjtruog at gmail dot com>

    * Add url-path RequestInfo parameter so that
      service name parsing isn't necessary
      (to cloudi_service_http_cowboy)
    * Add cloudi_service_filesystem interface functions
      notify_all, notify_one, notify_clear to receive
      file update notifications

2014-04-03 Michael Truog   <mjtruog at gmail dot com>

    * Update syslog dependency source

2014-03-28 Michael Truog   <mjtruog at gmail dot com>

    * Add process_index, process_count, process_count_max, and
      process_count_min to all CloudI API implementations

2014-03-24 Michael Truog   <mjtruog at gmail dot com>

    * Fix ec2 discovery groups/tags validation for syntax additions

2014-03-21 Michael Truog   <mjtruog at gmail dot com>

    * Update nodefinder to add support for boolean expressions when using
      ec2 with tags and/or groups
    * Enforce a minimum node reconnect time based
      on the configured net_kernel:connecttime/0

2014-03-17 Michael Truog   <mjtruog at gmail dot com>

    * Add cloudi_service_api:nodes_set/2 for dynamically configuring
      CloudI nodes configuration

2014-03-14 Michael Truog   <mjtruog at gmail dot com>

    * Add more flexible nodes configuration
    * Update nodefinder (a rewrite) and remove the older nodefinder cruft
    * Support EC2 Erlang node auto-discovery based on
      security groups and/or tags
    * Move external Erlang dependencies into directories with
      cloudi_x_ prefix so that include_lib can be used without problems
    * Add the ability to change the distributed Erlang node connection type
      with the listen and connect nodes configuration options
    * Make configuration changes to the listen and connect nodes configuration
      options reset the configuration of cpg and nodefinder

2014-03-06 Michael Truog   <mjtruog at gmail dot com>

    * Simplify cloudi_services_monitor log messages
    * Provide configuration format within log at start-time
    * Fix configuration removal when MaxR is met
    * Update uuid

2014-03-03 Michael Truog   <mjtruog at gmail dot com>

    * Add CT tests for cloudi_service_queue
    * Add a constraint based on testing for NextName in
      cloudi_service_queue both fault_isolation mode

2014-02-28 Michael Truog   <mjtruog at gmail dot com>

    * Fix external service validation done during OS process spawn
    * Add websocket_ping to cloudi_service_http_cowboy
    * Add cache to cloudi_service_filesystem
      (so HTTP cache controls can be used when the cached files are refreshed)

2014-02-27 Michael Truog   <mjtruog at gmail dot com>

    * Fix LinuxMint compilation issues

2014-02-21 Michael Truog   <mjtruog at gmail dot com>

    * Add fault_isolation argument to cloudi_service_queue
    * Add cloudi_service:send_async_active/8 for manually specifying the
      transaction id used in the service request

2014-02-19 Michael Truog   <mjtruog at gmail dot com>

    * Add cloudi_service_queue for persistent queuing of
      service requests
    * Add retries to cloudi_service_queue
    * Simplify the default configuration

2014-02-11 Michael Truog   <mjtruog at gmail dot com>

    * Tweak syslog integration
    * Allow SSL files for cloudi_service_http_cowboy to be configured with
      environment variables that are expanded
      (separate SSL files can not yet be specified until Erlang/OTP changes
       (http://erlang.org/pipermail/erlang-questions/2013-October/075814.html))

2014-02-05 Michael Truog   <mjtruog at gmail dot com>

    * Add syslog logging support

2014-02-02 Michael Truog   <mjtruog at gmail dot com>

    * CloudI version 1.3.1 (beta) released
    * Update cpg, key2value, pqueue, quickrand, reltool_util, service,
      trie, uuid after version bump and docs update
    * Fixed C/C++ CloudI API binary key/value parsing for request_info data
    * Fixed binary key/value parsing in cloudi_service_http_cowboy and
      cloudi_service_http_elli
    * Fixed cloudi_service_filesystem

2014-01-29 Michael Truog   <mjtruog at gmail dot com>

    * Add cloudi_service:environment_lookup/0,
      cloudi_service:environment_transform/1, and
      cloudi_service:environment_transform/2
    * Allow the cloudi_service_filesystem directory configuration value
      to use environment variables
    * Update edoc documentation

2014-01-24 Michael Truog   <mjtruog at gmail dot com>

    * Add the cloudi_service_api:priority() type
    * Add the service Erlang application with an autoconf commandline option
      to exclude it (for if it would cause a module name conflict)
    * Add the hello_world5 example

2014-01-22 Michael Truog   <mjtruog at gmail dot com>

    * Add source-address and source-port to the RequestInfo provided by
      cloudi_service_http_cowboy to provide the same format as
      cloudi_service_tcp and cloudi_service_udp
    * Add service-name to the RequestInfo provided by
      cloudi_service_http_cowboy for websocket initiated service requests

2014-01-21 Michael Truog   <mjtruog at gmail dot com>

    * Add cloudi_service:source_subscriptions/2 for determining the current
      subscriptions a service request source has

2014-01-20 Michael Truog   <mjtruog at gmail dot com>

    * Allow the cloudi_service_http_cowboy websocket_connect request
      to provide a response
    * Shutdown websocket connections in cloudi_service_http_cowboy when
      a CloudI service request has provided {<<"connection">>, <<"close">>}
      in the ResponseInfo data

2014-01-19 Michael Truog   <mjtruog at gmail dot com>

    * Add ResponseInfo connection/close support in cloudi_service_tcp
    * Add packet_buffer_recv_size, packet_buffer_send_size, and
      packet_buffer_size arguments to cloudi_service_tcp
    * Make sure destination_connect can provide a response in
      cloudi_service_tcp

2014-01-18 Michael Truog   <mjtruog at gmail dot com>

    * Make the C/C++ CloudI API include all processing time in the
      poll timeout value, when a poll timeout value is provided
    * Add destination_connect and destination_disconnect arguments to
      cloudi_service_tcp

2014-01-17 Michael Truog   <mjtruog at gmail dot com>

    * Add cloudi_service_quorum tests
    * Fix monkey_chaos bug for probability_request
    * Fix monkey_latency initialization bugs
    * Fix automatic_loading == true unloading of Erlang applications
      (to ignore the cloudi_core Erlang application)
    * Update proper
    * Update reltool_util
    * Update v3 ZeroMQ to 3.2.4

2014-01-14 Michael Truog   <mjtruog at gmail dot com>

    * Add the add_prefix argument to cloudi_service_router

2014-01-13 Michael Truog   <mjtruog at gmail dot com>

    * When an external service is using the request_timeout_adjustment
      send a null response if the timeout was exceeded, to prevent extra
      data from being sent to the Erlang VM
    * Fix the java http_req test parsing
    * Fix cloudi_service_quorum absolute integer requirement
    * Add cloudi_service_router

2014-01-10 Michael Truog   <mjtruog at gmail dot com>

    * Fix performance issues that have been creeping into
      cloudi_service_http_cowboy and apply the same fixes to
      cloudi_service_http_elli and cloudi_service_tcp

2014-01-09 Michael Truog   <mjtruog at gmail dot com>

    * Make {error, _} results from the cloudi module consistent with the
      {error, _} results from the cloudi_service module
      ('timeout' is used instead of cpg specific Reasons)
    * Change cloudi_service_tcp, cloudi_service_http_cowboy, and
      cloudi_service_http_elli to use the cloudi module to avoid making
      the parent Erlang process a bottleneck
    * Add the websocket_connect and websocket_disconnect arguments to
      cloudi_service_http_cowboy, so that service requests can be sent
      when a websocket connection is created or destroyed
    * Add the use_spdy argument to cloudi_service_http_cowboy
    * Add cloudi_service:dispatcher/1 to provide a Dispatcher Erlang pid
      which can be used beyond the lifetime of the current callback
      (only important in cloudi_service_init/3)
    * Add cloudi_service:context_options/1 for creating cloudi:new/1 options
      based on the current service configuration (for child Erlang pids)

2014-01-07 Michael Truog   <mjtruog at gmail dot com>

    * Add the refresh option to cloudi_service_filesystem to refresh
      the cached filesystem data at a specific interval in seconds
    * Add cloudi_service:key_value_store/3
    * Add cloudi_service:key_value_erase/3
    * Fix cloudi_service_http_cowboy file attachment names

2014-01-02 Michael Truog   <mjtruog at gmail dot com>

    * Add cloudi_service:key_value_find/2 to provide an generic interface
      for accessing the RequestInfo key/value pairs
    * Add cloudi_service:key_values type
    * Update the examples to provide more details and fix a few
      release problems
    * Update dynamic_compile

2014-01-01 Michael Truog   <mjtruog at gmail dot com>

    * Fix cloudi_service_quorum timeout bug
    * Make cloudi_service_quorum handle Byzantine service request failures
      (by default)

2013-12-30 Michael Truog   <mjtruog at gmail dot com>

    * Update jsx (no more dialyzer errors, yay!)

2013-12-20 Michael Truog   <mjtruog at gmail dot com>

    * Fix floating point usage of count_process and count_thread > 1.0 so that
      floor is used (not ceil!)

2013-12-17 Michael Truog   <mjtruog at gmail dot com>

    * Update erlang_cassandra
    * Fix the termination of service processes when count_process_dynamic
      ramps-down a service instance
    * Add cloudi:trans_id_age/1

2013-12-13 Michael Truog   <mjtruog at gmail dot com>

    * Add the count_process_dynamic service configuration option for
      dynamically adjusting the number of processes used for a single
      service instance (i.e., single service_id) based on changes in the
      rate of incoming service requests
    * Add the rate-based hibernate service configuration option for internal
      services (a list of options for conditional hibernation)

2013-12-11 Michael Truog   <mjtruog at gmail dot com>

    * Add cloudi_service_http_cowboy:close/1 for forcing a cowboy
      connection to close
    * Have cloudi_service_http_cowboy always add the peer ip address to the
      RequestInfo with the key <<"peer">>
    * Have cloudi_service_http_cowboy always add the peer port number to the
      RequestInfo with the key <<"peer-port">>

2013-12-06 Michael Truog   <mjtruog at gmail dot com>

    * Change the cloudi_service_map_reduce:cloudi_service_map_reduce_new/3
      callback functionality to be more useful for algorithm initialization
    * Add the cloudi_service_map_reduce:cloudi_service_map_reduce_info/3
      for handling active service requests
    * Add binary usage to cloudi_service_db_pgsql internal usage and simplify
      internal usage

2013-12-04 Michael Truog   <mjtruog at gmail dot com>

    * cloudi_service_http_cowboy support added for outgoing (CloudI->websocket)
      service requests iolist usage
    * cloudi_service_http_cowboy log statement for when outgoing
      service requests don't match the output configuration
    * Add "immediate" timeout value usage to the cloudi module and the
      cloudi_service module to avoid blocking on a service name lookup
    * Fix and simplify the guards within cloudi_service_http_cowboy
      to make sure iolists are allowed into cowboy when
      'output' is configured as 'external' or 'internal'

2013-12-03 Michael Truog   <mjtruog at gmail dot com>

    * Add cloudi_service:timeout_max/1 and cloudi:timeout_max/1 functions
    * Update edoc documentation

2013-12-02 Michael Truog   <mjtruog at gmail dot com>

    * Add the TIMEOUT_MAX constant and the TIMEOUT_MAX_ERLANG constant
      with configuration validation usage
    * Add the response_timeout_immediate_max service configuration option

2013-11-30 Michael Truog   <mjtruog at gmail dot com>

    * Fix ProcessCount and ThreadCount when greater than 1.0 so that it
      uses ceil (previously it was sometimes ceil+1)
    * Add done return value for cloudi_service_map_reduce
      cloudi_service_map_reduce_send/2 so that having more workers than
      work does not cause extra processing
    * Terminate the cloudi_service_map_reduce service after all
      requests have successfully returned

2013-11-29 Michael Truog   <mjtruog at gmail dot com>

    * Fix timer usage within internal services, during the
      cloudi_service_init/3 function execution

2013-11-28 Michael Truog   <mjtruog at gmail dot com>

    * Add backward-cpp integration alongside booster/backtrace.h for
      providing the execution backtrace from the C++ CloudI API
    * Make CloudI::API::backtrace() functionality require enabling
      with configure (--with-cxx-backtrace)
    * No longer catch non-std::exception types within the C/C++ CloudI API
      (now the service will terminate with abort() after outputting a
       backtrace, if possible)
    * Add boost::exception integration to provide more information after the
      abnormal termination of a C++ CloudI API service request

2013-11-27 Michael Truog   <mjtruog at gmail dot com>

    * Add booster/backtrace.h usage to the C/C++ CloudI API

2013-11-21 Michael Truog   <mjtruog at gmail dot com>

    * Add recv_asyncs to the cloudi_service module and the cloudi module
      for internal services, but not to external services due to the
      memory allocation burden it would create for external services
    * Fix a few small differences between the cloudi module and the
      cloudi_service module with recv_async timeout handling of undefined

2013-11-20 Michael Truog   <mjtruog at gmail dot com>

    * Fix a small difference between the cloudi module and
      the cloudi_service module with how PatternPid can be undefined
    * Add the functions destination_refresh_immediate/1 and
      destination_refresh_lazy/1 to the modules cloudi and cloudi_service
      so interfaces can check before sending, if necessary

2013-11-19 Michael Truog   <mjtruog at gmail dot com>

    * Add lager and goldrush as dependencies of erlang_cassandra

2013-11-18 Michael Truog   <mjtruog at gmail dot com>

    * Update trie

2013-11-17 Michael Truog   <mjtruog at gmail dot com>

    * Add a synchronous mode to the cloudi_logger to prevent
      excessive memory consumption and system death

2013-11-16 Michael Truog   <mjtruog at gmail dot com>

    * Fix service request and info message queuing when
      cloudi_service_init/3 is executed and duo_mode is true
    * Add the request_timeout_immediate_max service configuration option
      to provide destination monitoring for long timeout values

2013-11-15 Michael Truog   <mjtruog at gmail dot com>

    * Update cowboy to 0.9.0
    * Fix some type errors
    * Fix cloudi_runtime_testing random usage
    * Fix the CloudI release so no included CloudI services
      have their Erlang application dependencies started automatically

2013-11-09 Michael Truog   <mjtruog at gmail dot com>

    * Fix cloudi_service_handle_info/3 exception stacktrace logging
    * Fix cloudi_service_map_reduce resend on first few messages

2013-11-08 Michael Truog   <mjtruog at gmail dot com>

    * Make sure the cloudi module has all the types
    * Update cpg
    * Add the CloudI Service API function service_subscriptions/2

2013-11-07 Michael Truog   <mjtruog at gmail dot com>

    * Add default cloudi_core configuration

2013-11-05 Michael Truog   <mjtruog at gmail dot com>

    * Add automatic handling of the lazy destination refresh method
      cpg messages within the cloudi module (using
      the cloudi:destinations_refresh/2 function is still the best way
      of having recent service name destination data)

2013-10-25 Michael Truog   <mjtruog at gmail dot com>

    * Fix the cloudi_x_ scope script operation for source code repo updates
      within a built repository
    * Update reltool_util and uuid

2013-10-24 Michael Truog   <mjtruog at gmail dot com>

    * Fix cloudi:mcast_async function call
    * Update cpg
    * Fix shutdown issue with service restarts and cloudi_pool errors
    * Add the automatic_loading service configuration option so the
      automatic loading used for internal services can be turned off

2013-10-23 Michael Truog   <mjtruog at gmail dot com>

    * Fix a potential inconsistency between the CloudI repo and the
      cloudi_core repo (with CLOUDI_CORE_STANDALONE defined) by changing the
      {cpg_data, Groups} message in cpg to {cloudi_cpg_data, Groups}
    * Add proplist service configuration format

2013-10-22 Michael Truog   <mjtruog at gmail dot com>

    * Split cloudi_core and the internal services into separate respositories
      (at https://github.com/CloudI/)
    * Update jinterface from R16B02
    * Update older database driver repository links
    * Update READMEs with the new repository location
    * Provide a function for updating the destination refresh lookup data
      in the cloudi module, so lazy destination refresh methods can be used

2013-10-18 Michael Truog   <mjtruog at gmail dot com>

    * CloudI version 1.3.0 (beta) released
    * Update cpg, key2value, pqueue, reltool_util, uuid after version bump

2013-10-17 Mahesh Paolini-Subramanya   <mahesh at dieswaytoofast dot com>

    * Migrate elasticsearch version from 1.3 to 1.4
    * Added support for mapping and aliases

2013-10-15 Michael Truog   <mjtruog at gmail dot com>

    * Dialyzer fixes, turn all dialyzer warnings on
    * Update reltool_util

2013-10-12 Michael Truog   <mjtruog at gmail dot com>

    * Add the cloudi_service:mcast_async_active function variations along with
      cloudi_service:mcast_async_passive functions to mirror what is already
      available for cloudi_service:send_async
    * Add cloudi_service_quorum for seeking quorum among running services
      for a service request

2013-10-11 Michael Truog   <mjtruog at gmail dot com>

    * Use the mac address set in the cloudi_core application env for
      uuid (v1) generator creation
    * Update uuid

2013-10-02 Michael Truog   <mjtruog at gmail dot com>

    * Fix bug reported by Anton Ryabkov:
      an unsubscribe of an exact match for a service name was not removing
      the entry when no services were subscribed (an empty group), so a
      pattern matching subscription that existed would be ignored, despite
      the fact no services were within the exact service name match. The fix
      removes entries when no services are subscribed to the service name, so
      there is no problem with the service name pattern match.

2013-09-30 Michael Truog   <mjtruog at gmail dot com>

    * Separate the cloudi_services_internal, cloudi_services_databases, and
      cloudi_services_messaging Erlang applications into a single
      Erlang application for each CloudI service to help isolate
      CloudI service Erlang application dependencies
    * Update all dependencies to have {registered, []}, to keep relx happy
    * Add the hello_world4 example to show how CloudI can be included with
      a relx release
    * Add the application_name internal service configuration option to
      specify an Erlang application name that doesn't need to be the
      CloudI service module name

2013-09-28 Michael Truog   <mjtruog at gmail dot com>

    * Add the monkey_latency and monkey_chaos service configuration
      options for providing any service configuration a way to change
      performance for evaluating system resilience during service failures
      (http://techblog.netflix.com/2011/07/netflix-simian-army.html)

2013-09-26 Mahesh Paolini-Subramanya   <mahesh at dieswaytoofast dot com>

    * Update erlasticsearch to take json docs
    * Update jsx to 1.4.3

2013-09-24 Michael Truog   <mjtruog at gmail dot com>

    * Update uuid

2013-09-23 Michael Truog   <mjtruog at gmail dot com>

    * Make the cloudi module use the cloudi_service module interface if a
      Dispatcher pid is provided instead of a Context record
      (to provide a way of making a flexible interface for both services
       and non-service Erlang pids)
    * Convert all the internal services to use the cloudi module for
      external interface functions

2013-09-21 Michael Truog   <mjtruog at gmail dot com>

    * Fix JSON RPC errors with CloudI Service API
    * Fix the CloudI Service API run.py test
    * Fix cloudi_service_api:nodes_add/2 and cloudi_service_api:nodes_remove/2

2013-09-20 Michael Truog   <mjtruog at gmail dot com>

    * Fix cloudi_service_db to store with the Key equal to the TransId of
      the service request

2013-09-19 Michael Truog   <mjtruog at gmail dot com>

    * Make the cloudi_service_http_cowboy multipart support generic

2013-09-18 Michael Truog   <mjtruog at gmail dot com>

    * Allow configuration data to be present in the application env entry
      to bypass a filesystem file and be fed configuration directly
    * Fix some nested timeout errors to prevent outer timeout termination

2013-09-14 Michael Truog   <mjtruog at gmail dot com>

    * cloudi_service_http_cowboy multipart fixes
    * Add cloudi_service:service_name_parse_with_suffix/2

2013-09-13 Michael Truog   <mjtruog at gmail dot com>

    * For cloudi_service_http_cowboy, a service request timeout using
      405 responses gets an empty "allow" HTTP header
    * Add non-standard HTTP header request info entries for
      tracking a multipart sequence of service requests

2013-09-12 Michael Truog   <mjtruog at gmail dot com>

    * Add CLOUDI_CONFIGURE_ARGS env variable for rebar usage
    * Add cloudi_service:return/2 and cloudi_service:return/3 to make
      internal service return calls easier
    * Add multipart support to cloudi_service_http_cowboy

2013-09-11 Michael Truog   <mjtruog at gmail dot com>

    * Fix cloudi:timeout_milliseconds() and cloudi:priority()
    * Fixes for cloudi_service_db
    * Edoc documentation updated

2013-09-10 Michael Truog   <mjtruog at gmail dot com>

    * Make the scope script parallel to speedup the initial
      build process
    * Add initial version of cloudi_service_db, a simple in-memory database
    * Update trie

2013-09-05 Michael Truog   <mjtruog at gmail dot com>

    * Add support for update-deps of CloudI as a rebar dependency
    * Add an options list to cloudi_service_zeromq
    * Add the process_metadata option to cloudi_service_zeromq for
      tunneling RequestInfo and ResponseInfo within ZeroMQ requests
      automatically
    * Add endian configuration to cloudi_service_db_pgsql 
      for binary request responses
    * Add endian configuration to cloudi_service_zeromq
      for ZeroMQ service request metadata size integer encoding

2013-09-04 Michael Truog   <mjtruog at gmail dot com>

    * Simplify the rebar integration by removing the version number from
      the installation path prefix when a configuration command line argument
      (--without-version) is provided
    * Simplify the hello_world3 example
    * Fix type problem in cloudi_service_db_cassandra
    * Make the configure script ZeroMQ path detection expect default cases

2013-09-02 Michael Truog   <mjtruog at gmail dot com>

    * Move makefile "clean-configure" target to utilize the distclean target
    * Tweak example hello_world3 so that ERL_LIBS is not used

2013-08-28 Mahesh Paolini-Subramanya   <mahesh at dieswaytoofast dot com>

    * Merge cassandra database integration

2013-08-27 Michael Truog   <mjtruog at gmail dot com>

    * Fix bugs in cloudi_service_tcp

2013-08-26 Michael Truog   <mjtruog at gmail dot com>

    * Add the cloudi_ip_address module for fixed width string representations
    * Fix a bug when using self() within cloudi_service_init/3 when duo_mode
      is true (erlang:self/0 now always equals cloudi_service:self/0 within
      cloudi_service_init/3)
    * Fix a bug in cloudi_service_udp

2013-08-23 Michael Truog   <mjtruog at gmail dot com>

    * Add cloudi_service_tcp and cloudi_service_udp

2013-08-22 Michael Truog   <mjtruog at gmail dot com>

    * Add cloudi_service:request_info_key_value_new/1
    * Fix service requests that only provide ResponseInfo
    * Add support for any methods to cloudi_service_http_cowboy
    * Add proper iodata handling in ResponseInfo HTTP header values to
      cloudi_service_http_cowboy
    * Fix cloudi_service_map_reduce failure result

2013-08-21 Michael Truog   <mjtruog at gmail dot com>

    * Fix SSL bug in cloudi_service_http_cowboy
    * Fix process kill handling, for delayed cleanup of dead services

2013-08-17 Michael Truog   <mjtruog at gmail dot com>

    * Allow cloudi_service_map_reduce to use Erlang applications named the
      same as the map reduce module

2013-08-15 Michael Truog   <mjtruog at gmail dot com>

    * Add set_x_forwarded_for as a configuration parameter for
      cloudi_service_http_cowboy
    * Switch the argument order on cloudi_service:service_name_parse/2 to
      match the cloudi_service_handle_request/11 argument order

2013-08-14 Michael Truog   <mjtruog at gmail dot com>

    * Add content_types_accepted as a configuration parameter for
      cloudi_service_http_cowboy
    * Add "status" key usage from ResponseInfo within
      cloudi_service_http_cowboy

2013-08-13 Michael Truog   <mjtruog at gmail dot com>

    * Change the CloudI Service API services_add function to return the
      newly created service_ids
    * Add status_code_timeout as a configuration parameter for
      cloudi_service_http_cowboy

2013-08-09 Michael Truog   <mjtruog at gmail dot com>

    * CloudI version 1.2.5 (beta) released

2013-08-06 Michael Truog   <mjtruog at gmail dot com>

    * Provide a readable format for the CloudI Service API output of
      services and services_search when returning a service's service options

2013-08-05 Michael Truog   <mjtruog at gmail dot com>

    * Move cloudi_core startup of cloudi_services_internal,
      cloudi_services_databases, and cloudi_services_messaging into the
      cloudi_core configuration sequence
    * Do not use the /tmp/cloudi path

2013-07-30 Michael Truog   <mjtruog at gmail dot com>

    * Simplify CloudI Erlang release
    * Fix configure sequence, so it remains decoupled from application startup

2013-07-25 Michael Truog   <mjtruog at gmail dot com>

    * Add get_pids function to the internal service CloudI API
      (the cloudi_service module)
    * Add internal service module reload functionality with the
      "reload" to the service configuration options
    * Add the possibility of changing the service scope to alter what
      cpg scope is used for service name lookup operations, with the
      "scope" option in the service configuration options
    * Provide a more descriptive error for an erroneous unsubscribe
      CloudI API call in an external service
    * Update cpg
    * Add internal service module "hibernate" option to the
      service configuration options

2013-07-23 Michael Truog   <mjtruog at gmail dot com>

    * Substitute Erlang VM shell environmental variables in
      ExecutableFilePath, ExecutableCommandLineArguments, and
      ExecutableEnvironmentalVariables parameters for external services
    * Update cpg and reltool_util
    * Add listen parameter to cloudi_service_db_pgsql

2013-07-22 Michael Truog   <mjtruog at gmail dot com>

    * Add cloudi module retry of service requests and context checking
    * Add cloudi_logger.hrl FUNCTION macro
    * Add service state parameter for cloudi_service_init/3 stop return value
      (optional for usage in cloudi_service_terminate/2, otherwise undefined)
    * Fix cloudi_service_db_pgsql list results
    * Add cloudi_service_db_pgsql_SUITE ct test module
    * Update cpg and reltool_util
    * Fix duo_mode internal service terminate after init returns stop
    * Fix timeout usage within cloudi module to imitate the cloudi_service
      module usage of TIMEOUT_DELTA for service name lookups
    * Make cloudi_service_db_pgsql_SUITE execution conditional so that
      postgres configuration isn't required

2013-07-17 Michael Truog   <mjtruog at gmail dot com>

    * Add "build" ZeroMQ option value
    * Add cloudi_service:service_name_parse/2 to make it simpler to utilize
      service name patterns

2013-07-16 Michael Truog   <mjtruog at gmail dot com>

    * Add eunit/ct integration for handling unit tests
    * Add PropEr as a dependency for running tests
    * Add a basic uninstall makefile target

2013-07-11 Michael Truog   <mjtruog at gmail dot com>

    * Add cpg timeout usage to internal and external services so that the
      service request timeout provides an absolute limit for
      any service name lookup
    * Update cpg

2013-07-09 Michael Truog   <mjtruog at gmail dot com>

    * Fix Java http_req test
    * Fix reltool_util:modules_purged/2 functionality

2013-07-08 Michael Truog   <mjtruog at gmail dot com>

    * Add all the warnings previously excluded in the rebar_src.config.in file
    * Fix the various warnings within the external dependencies
    * Reformat the reltool.config.in file to be simpler
    * Fix autoconf macros so that AC_LANG_CALL is no longer used to fix
      ZeroMQ library detection (and GMP library detection)

2013-07-06 Michael Truog   <mjtruog at gmail dot com>

    * Add service prefix configuration validation
    * Add ACL configuration validation
    * Update uuid

2013-07-05 Michael Truog   <mjtruog at gmail dot com>

    * Add type specifications to the cloudi module and the
      cloudi_service module, for use with Erlang CloudI services
    * Fix emysql crypto hash usage (error is in 1.2.4)
    * Update edoc documentation

2013-07-05 Mahesh Paolini-Subramanya   <mahesh at dieswaytoofast dot com>

    * Merge elasticsearch database integration

2013-07-03 Michael Truog   <mjtruog at gmail dot com>

    * Fix the build system so that it can use an external rebar executable
      specified by the configuration
    * Add root rebar.config for using CloudI as a rebar dependency
    * Add the hello_world3 example for rebar integration with CloudI
      as a dependency for a release

2013-07-03 Lukas Larsson   <garazdawi at gmail dot com>

    * Fix emysql source file encoding for R17

2013-07-01 Michael Truog   <mjtruog at gmail dot com>

    * Fix for internal services so that the terminate function is always called
    * Fix queuing on websocket connection for outgoing service requests

2013-06-29 Michael Truog   <mjtruog at gmail dot com>

    * Make the CloudI Service API automatically discover its functions
      from the exports of the module cloudi_service_api within
      cloudi_service_api_requests

2013-06-28 Michael Truog   <mjtruog at gmail dot com>

    * Add websocket_timeout and use_client_ip_prefix
      configuration options to the cloudi_service_http_cowboy service
    * Add validation to the CloudI Service API that doesn't cause internal
      process execution exceptions
    * Add the CloudI Service API function services_search for searching
      services based on a service name

2013-06-27 Michael Truog   <mjtruog at gmail dot com>

    * Add the elli HTTP server for comparison
      (performance shows that cowboy should be used instead)
    * Fix the makefile issue with configuration files

2013-06-26 Michael Truog   <mjtruog at gmail dot com>

    * Outgoing websocket service requests now use the list output_type
      (output configuration setting) to provide text requests instead of binary
    * The cloudi module now only accepts immediate destination refresh
      methods so that the configuration accurately reflects the functionality
    * Fix the console log output destination in the startup script
    * Do not clobber the configuration files when the
      installation occurs twice

2013-06-20 Michael Truog   <mjtruog at gmail dot com>

    * CloudI version 1.2.4 (beta) released
    * Fix local protocol option for external services
      (confirmed to work on OSX now)
    * Add fixes for R16B01 usage
    * Update uuid, nodefinder, emysql, ranch, cowboy

2013-06-18 Michael Truog   <mjtruog at gmail dot com>

    * Small fixes for dialyzer and type specs
    * Make some release tweaks and add the hello_world2 example

2013-06-15 Michael Truog   <mjtruog at gmail dot com>

    * Allow service requests to websocket connections if their connect
      URL matches the HTTP service prefix configuration value
    * Make the websockets testing test service requests to websocket
      connections

2013-06-14 Michael Truog   <mjtruog at gmail dot com>

    * Update cpg
    * Add cloudi_service_api module documentation
    * Prevent service request response usage within an internal service's
      init function for various technical reasons
    * Fix retry service name lookup and timeout timers within an
      internal service, during the init function execution

2013-06-12 Michael Truog   <mjtruog at gmail dot com>

    * Add separate cloudi_service_api module to cloudi_core application
      to provide a central interface module for the CloudI Service API
    * Add websockets support to cloudi_service_http_cowboy
    * Update cowboy to 0.8.5 and ranch to 0.8.3

2013-06-08 Michael Truog   <mjtruog at gmail dot com>

    * CloudI version 1.2.3 (beta) released

2013-06-07 Michael Truog   <mjtruog at gmail dot com>

    * Fix services_remove CloudI Service API functions so that modules are
      purged when they are no longer necessary
      (after unnecessary Erlang applications have been stopped)
    * Update reltool_util

2013-06-05 Michael Truog   <mjtruog at gmail dot com>

    * Remove some dead Erlang code from cloudi_core
    * Fix minor C++ syntax warnings

2013-06-04 Michael Truog   <mjtruog at gmail dot com>

    * Make the require Erlang version R16 since no one has mentioned needing
      R15 support (and it is easier using the new reltool source code)
    * Fix compilation and configuration problems on OSX
      (OSX is unable to use the "local" external service protocol configuration
       option, probably due to the Erlang bug with schedulers locking up
       within NIFs... the problem occurs when a NIF thread hits an accept())

2013-06-03 Michael Truog   <mjtruog at gmail dot com>

    * Update jsx
    * Fix dialyzer errors

2013-06-01 Michael Truog   <mjtruog at gmail dot com>

    * CloudI version 1.2.2 (beta) released
    * Add loadtest results
    * Make "local" the default protocol for external services

2013-05-28 Michael Truog   <mjtruog at gmail dot com>

    * Add service UUID to internal startup arguments
    * Add loadtest README CPU frequency information

2013-05-25 Michael Truog   <mjtruog at gmail dot com>

    * Add local protocol option to provide tcp unix domain socket support
    * Fix external service send/receive buffer setting (was larger before)
    * Update reltool_util

2013-05-21 Michael Truog   <mjtruog at gmail dot com>

    * Update uuid with fixes to variant bits
      (external usage of the v1 UUIDs is fixed)
    * Fix the cpg_data:get_remote_members/3 and cpg_data:get_local_members/3
      argument order bug

2013-05-18 Michael Truog   <mjtruog at gmail dot com>

    * Add the "cloudi_x_" prefix to all CloudI external Erlang dependencies
      with an automatic script, during the build process, to provide a scope
      that avoids conflicts with other Erlang applications that share the
      same Erlang VM
    * Update cpg
    * Update reltool_util

2013-05-15 Michael Truog   <mjtruog at gmail dot com>

    * Fix problems with the database services linking within the
      CloudI service init function.  This fix affects all internal services,
      so that the CloudI service init function always has self() == Dispatcher
      and the supplied Dispatcher variable is actually a short-lived
      proxy Erlang process utilizing the same process state.

2013-05-11 Michael Truog   <mjtruog at gmail dot com>

    * Fix all the external CloudI API implementations so that their
      usage of the request_timeout_adjustment service option does not require
      the usage of exceptions (so that request latency should be back to
      what was present for v1.1.1, including the python_c CloudI API
      which remained a problem in the v1.2.1 release)
    * Add newest/oldest destination refresh method options
    * Add the "cloudi" module for CloudI integration from Erlang processes
      external to a CloudI service (internal services will continue to use
      the "cloudi_service" behaviour/module as the CloudI API)
    * Remove the erroneous function cloudi_service:mcast_async/5
    * Update cpg

2013-05-07 Michael Truog   <mjtruog at gmail dot com>

    * Start to add deployment examples for creating internal services
    * Update pqueue application based on (deployment) feedback
    * Small changes to service configuration and startup
    * Updates to release generation
    * Update reltool_util

2013-05-04 Michael Truog   <mjtruog at gmail dot com>

    * Add a more flexible interal service configuration that provides
      better support for OTP applications and allows OTP release loading
    * Fix issues with the CloudI Services API (timeouts added, 
      restart/shutdown handling for internal services and
      fix requests that don't reference a running service)
    * Move key2value.erl into a separate application

2013-03-30 Michael Truog   <mjtruog at gmail dot com>

    * CloudI version 1.2.1 (beta) released
    * Updated documentation
    * Add loadtest results

2013-03-26 Michael Truog   <mjtruog at gmail dot com>

    * Fix external service init timeout bug

2013-03-20 Michael Truog   <mjtruog at gmail dot com>

    * Remove the cowboy_old (v0.6.2) application since the latency
      problems in v1.2.0 were determined to be internal
      (the latency problems are now solved with previous commits)
    * Fix some Erlang process exit conditions

2013-03-19 Michael Truog   <mjtruog at gmail dot com>

    * Fix latency due to the request_timeout_adjustment changes in the
      C/C++ CloudI API due to exception handling overhead
      which was ~175 ms for 20k@10kreq/s for g++ v4.6.3
      (now performance is the same as v1.1.0 with the C/C++ CloudI API
       when using a duo_mode internal service to send requests)
    * Fix latency due to the request_timeout_adjustment changes in the
      Java CloudI API due to exception handling overhead
      which was ~200 ms for 20k@10kreq/s for OpenJDK 64bit v1.6.0_24
      (now performance is the same as v1.1.0 with the Java CloudI API
       when using a duo_mode internal service to send requests)
    * The Python and Ruby CloudI API implementations will not require
      changes due to their inherent latency, while the Python_C implementation
      naturally gets the changes to the C/C++ CloudI API

2013-03-16 Michael Truog   <mjtruog at gmail dot com>

    * Improve performance so that it is closer to v1.1.0 performance
    * Fix remaining duo_mode errors

2013-03-12 Michael Truog   <mjtruog at gmail dot com>

    * Fix duo_mode issues related to termination and info messages

2013-03-11 Michael Truog   <mjtruog at gmail dot com>

    * Add duo_mode as a way of separating send and receive options for an
      internal service, to reduce latency (i.e., provide a non-default mode
      that requires 2 Erlang processes instead of 1, that is the internal
      service functionality from pre-v1.2.0 releases)
    * Update erlzmq2 dependency

2013-03-10 Michael Truog   <mjtruog at gmail dot com>

    * Provide better cowboy integration to reduce request latency
    * Add the service configuration options to control the Erlang process
      that handles service requests or info messages within an internal
      service: request_pid_uses, request_pid_options,
      info_pid_uses, info_pid_options
    * Make sure the 0.6.2 cowboy integration is the same as the 0.8.0 cowboy
      integration
    * Update cowboy to 0.8.2 and ranch to 0.6.2
    * Improve quickrand and cpg random number usage

2013-03-04 Michael Truog   <mjtruog at gmail dot com>

    * Add the pqueue and quickrand applications as dependencies
    * Add the external dynamic_compile application
    * Remove the misultin application references

2013-03-03 Michael Truog   <mjtruog at gmail dot com>

    * Add cowboy 0.6.1 back into CloudI as cowboy_old
      (cowboy 0.8.0 remains, but has trouble managing high socket counts,
       e.g. 20k concurrent connections)

2013-02-19 Michael Truog   <mjtruog at gmail dot com>

    * CloudI version 1.2.0 (beta) released
    * Update the documentation (added Quick Start and API documentation)

2013-02-18 Michael Truog   <mjtruog at gmail dot com>

    * Add service configuration option request_timeout_adjustment
    * Reduce internal service logic latency
    * Fix Erlang flood test
    * Fix service configuration options displayed by the Services API
    * Fix service restart so the configuration is not
      removed by the Services API
    * Fix immediate_local, immediate_remote, lazy_local, lazy_remote
      destination refresh methods usage by mcast_async
    * Add better error checking to cpg

2013-02-15 Michael Truog   <mjtruog at gmail dot com>

    * Tweaks in an attempt to appease the dialyzer
    * Add edoc and type spec information to cloudi_service

2013-02-14 Michael Truog   <mjtruog at gmail dot com>

    * Add more validation of timeouts and priorities

2013-02-13 Michael Truog   <mjtruog at gmail dot com>

    * Fix the C/C++, Java, and Ruby CloudI API to make sure
      unsubscribe only removes a single instance of the service name pattern
    * Update edoc documentation
    * Fix cowboy content types integration for 0.8.0

2013-02-12 Michael Truog   <mjtruog at gmail dot com>

    * Remove misultin integration due to its usage of parameterized modules
    * Update cloudi_service_http_cowboy with better cowboy integration
    * Update cowboy dependency to 0.8.0
    * Add ranch 0.6.1 dependency for cowboy
    * Update rebar to 2.1.0-pre
    * Fix for services restart on failure

2013-02-09 Michael Truog   <mjtruog at gmail dot com>

    * Add quick start guide to doc/README.markdown
    * Change the configuration to use ZeroMQ version 3 by default

2013-02-08 Michael Truog   <mjtruog at gmail dot com>

    * Fix erlzmq2 based on recent changes by adding the
      {active_pid, pid()} option to erlzmq2:socket/2
      (to fix cloudi_service_zeromq.erl after recent changes)
    * Change internal service code to utilize the single dispatcher
      Erlang process with temporary Erlang processes for
      service requests and info messages
      (so only 1 long-lived Erlang process used by
       internal services instead of 2)
    * Moved common internal service code to
      lib/cloudi_core/src/cloudi_services_common.erl
    * Changed the service code to have better filename scoping and
      better info message scoping
      (so internal service info messages will not be accidentally
       used by modules implementing a cloudi_service behavior)
    * Fix cloudi_core OTP application dependencies

2013-02-07 Michael Truog   <mjtruog at gmail dot com>

    * Fix cloudi_service timeout usage bugs so that the
      timeout is more accurate
    * Change cloudi_service:recv_async functions to always return the
      ResponseInfo data (even if <<>>) and return the TransId, so that the
      behavior is consistent with the external CloudI API usage
    * Make the messaging tests stricter
    * Update ZeroMQ v3 to (stable) 3.2.2 (v2 is still (stable) 2.2.0)

2013-02-06 Michael Truog   <mjtruog at gmail dot com>

    * Update edoc documentation
    * Change all references of "job" to "service" to avoid confusion
    * Fix ACL atom usage bug
    * Fix CloudI Job API output

2013-02-04 Michael Truog   <mjtruog at gmail dot com>

    * CloudI version 1.1.1 (beta) released
    * Updated jsx dependency

2013-02-01 Michael Truog   <mjtruog at gmail dot com>

    * Use patterns for ACLs instead of prefixes
      (patterns like service subscriptions with "*")
    * Add the destination refresh methods:
      immediate_furthest, lazy_furthest,
      immediate_local, lazy_local,
      immediate_remote, and lazy_remote
    * Update cpg and trie dependencies

2013-01-31 Michael Truog   <mjtruog at gmail dot com>

    * Fix service message queuing during initialization for
      external services
    * Update the Java CloudI API to use jinterface-1.5.7 (from R16A)
    * Tested with Erlang R16A (RELEASE CANDIDATE), no problems found
    * tarball raw loadtest results so they are not part of
      source code analysis

2012-12-08 Michael Truog   <mjtruog at gmail dot com>

    * Update the uuid implementation, so all CloudI uuids can be used
      within other systems (e.g., any databases using v1 UUIDs)
    * Update the Java CloudI API to use jinterface-1.5.6
    * Tested with Erlang R15B03, no problems with the current tests

2012-11-03 Michael Truog   <mjtruog at gmail dot com>

    * CloudI version 1.1.0 (beta) updated
      (cloudi_core Erlang application dependencies cause a startup
       problem which is not normally apparent with the default configuration)

2012-11-02 Michael Truog   <mjtruog at gmail dot com>

    * Add loglevel-based apply macro functionality to CloudI logging
    * Fix small dialyzer issues in cowboy integration
    * Added more summary data based on loadtest results

2012-10-30 Michael Truog   <mjtruog at gmail dot com>

    * CloudI version 1.1.0 (beta) released

2012-10-28 Michael Truog   <mjtruog at gmail dot com>

    * Add loadtest results

2012-10-19 Michael Truog   <mjtruog at gmail dot com>

    * Finalize configuration and compilation fixes
    * Added fixes to the ZeroMQ configuration and the erlzmq compilation
    * Fix clock_gettime configuration check

2012-10-14 Michael Truog   <mjtruog at gmail dot com>

    * Fix configuration and compilation on OSX

2012-10-13 Michael Truog   <mjtruog at gmail dot com>

    * Documentation updates

2012-10-06 Michael Truog   <mjtruog at gmail dot com>

    * Create a separate cloudi_core application to provide
      better encapsulation of the core CloudI functionality
    * Add the CloudI Map-Reduce Service/Behaviour and
      use it to simplify the hexpi test

2012-09-16 Michael Truog   <mjtruog at gmail dot com>

    * Add cowboy http server integration
    * Fix http use of misultin with Content-Disposition
    * Fix external request_info requirement (binary-only)

2012-09-14 Michael Truog   <mjtruog at gmail dot com>

    * Fix python threading issues with the Python CloudI API C++ integration
    * Add the recv_async consume parameter to the
      Python CloudI API C++ integration
    * Add the python_c variation of the messaging test

2012-09-08 Michael Truog   <mjtruog at gmail dot com>

    * Rename some Erlang modules to be more intuitive
    * Fix bug in the python/python_c http_req test
    * Fix bug in the ZeroMQ test

2012-08-25 Michael Truog   <mjtruog at gmail dot com>

    * Add the consume parameter to the recv_async CloudI API function
    * Resolve some case issues in the CloudI API function parameters
    * Fix messaging test errors and make messaging an infinite test

2012-08-17 Michael Truog   <mjtruog at gmail dot com>

    * Fix exception handling within the callback functions of the
      Python CloudI API C++ integration
    * Simplify cpg process lookup

2012-08-17 Hardy Jones   <jones3.hardy at gmail dot com>

    * Fix assignment statement in Python API cloudi.py
    * Fix list conversion to binary in Python API erlang.py
    * Add unit tests (string, list to binary) in Python API erlang.py

2012-08-14 Michael Truog   <mjtruog at gmail dot com>

    * Added better thread handling and callback usage to the
      Python CloudI API C++ integration

2012-08-13 Michael Truog   <mjtruog at gmail dot com>

    * Complete Python CloudI API C++ integration

2012-08-05 Michael Truog   <mjtruog at gmail dot com>

    * Add function objects to the C++ CloudI API
    * Fix python CloudI API c integration linking issues
    * Fix various build issues related the the C/C++ CloudI API

2012-07-28 Michael Truog   <mjtruog at gmail dot com>

    * Update python CloudI API for python version 3

2012-07-19 Michael Truog   <mjtruog at gmail dot com>

    * Add cpg, uuid, and trie applications instead of using modules within
      the CloudI application (this includes making cpg more abstract based on
      the list_pg source code)

2012-07-11 Michael Truog   <mjtruog at gmail dot com>

    * Tweaks to list_pg to support external usage

2012-07-09 Michael Truog   <mjtruog at gmail dot com>

    * Add nodefinder configuration for further testing

2012-07-07 Michael Truog   <mjtruog at gmail dot com>

    * Fix the ZeroMQ CloudI job termination so that sockets are always closed
    * Fix an error in the ZeroMQ tests configuration
    * Update epgsql to latest version
    * Add ZeroMQ 3 along with a configuration parameter to specify which 
      version of ZeroMQ to use and compile the proper version of erlzmq to
      provide the same ZeroMQ interface
    * Add nodefinder as a dependency
    * Make cloudi_pool_sup startup synchronous to prevent any problems with
      supervisor dependencies (at the same supervisor level)

2012-06-24 Michael Truog   <mjtruog at gmail dot com>

    * CloudI version 1.0.0 (beta) released
    * Add loadtest of http_req test to show language performance with
      20k connections and 1 OS process
    * Improvements to cloudi_job_http to handle heavy load

2012-06-15 Michael Truog   <mjtruog at gmail dot com>

    * Update uuid and switch to os:timestamp/0 to time HTTP requests

2012-06-10 Michael Truog   <mjtruog at gmail dot com>

    * Fix/Improvements for AWS deployment

2012-05-19 Michael Truog   <mjtruog at gmail dot com>

    * Updated FAQ
    * Add the virtual host option ("use_host_prefix") to cloudi_job_http

2012-05-18 Michael Truog   <mjtruog at gmail dot com>

    * Update uuid, so that newer MAC addresses are not an issue

2012-04-19 Michael Truog   <mjtruog at gmail dot com>

    * Fix a few unsigned constants in the C/C++ CloudI API and the msg_size test
    * Get CloudI building with Travis (http://travis-ci.org/#!/okeuday/CloudI)

2012-04-14 Michael Truog   <mjtruog at gmail dot com>

    * CloudI version 0.2.0rc2 (beta) released
    * Fix bug with erlang CloudI API forward operations
    * Improve ruby erlang binary term format encoding, string concatenation

2012-04-12 Michael Truog   <mjtruog at gmail dot com>

    * Prevent cloudi_logger from having problems with erroneous argument lists
      and excessive data within an argument list
    * Complete erlang version of the messaging test
    * Fix erlang CloudI API operations within the cloudi_job_handle_request/11
      function that exclude the Job pid from service name lookup results

2012-04-08 Michael Truog   <mjtruog at gmail dot com>

    * Add erlang version of the messaging test
    * Fix cloudi_job_init/3 synchronous usage of Dispatcher with the cloudi_job
      functions (i.e., the Erlang CloudI API)

2012-04-07 Michael Truog   <mjtruog at gmail dot com>

    * Add java version of the messaging test
    * Fix java CloudI API isTimeout functions

2012-04-02 Michael Truog   <mjtruog at gmail dot com>

    * Add ways to avoid std::string creation within the C++ CloudI API
    * Fix a bug within the C/C++ CloudI API (buffer overwrite)

2012-03-31 Michael Truog   <mjtruog at gmail dot com>

    * Add c++ version of the messaging test
    * Add ruby version of the messaging test
    * Add messaging test sequence3 to python messaging test
    * Fix various problems with the ruby CloudI API
      (now it is the same as the python interface)

2012-03-28 Michael Truog   <mjtruog at gmail dot com>

    * Add messaging test sequence2 to python messaging test
    * Fix python mcast_async bug

2012-03-27 Michael Truog   <mjtruog at gmail dot com>

    * Fix messaging test
    * Fix python recv_async bug
    * Prevent erroneous CloudI logger input from crashing the logging process

2012-03-26 Michael Truog   <mjtruog at gmail dot com>

    * CloudI version 0.2.0rc1 (beta) released
    * Add "messaging" (i.e., internal CloudI messaging) test

2012-03-24 Michael Truog   <mjtruog at gmail dot com>

    * Update jsx to 1.0
    * Refactor complexities within list_pg
    * Fix Erlang version detection for R15B
    * Update http://cloudi.org with css theme switcher for print mode

2012-03-09 Michael Truog   <mjtruog at gmail dot com>

    * Use trie:find_match/2 instead of trie:find/2 within the list_pg_data
      module to provide pattern matching with service name strings
      (provided for CloudI API message send operations) so that a
      subscribed service name with a "*" wildcard character matches
      1 or more characters, while preferring the most exact match possible
      (so "/a/b/c" will still match "/a/b/c", not "/*")
    * Provide the subscribed service name as the "pattern" parameter for
      all CloudI service callback functions and the CloudI API return functions
      (i.e., so the pattern parameter provides what the service passed to the
       subscribe function, while the name parameter provides what the send
       operation was given as a destination)
    * Rename cloudi_job_sup.erl to cloudi_dispatcher_sup.erl to avoid the
      cloudi_job_ prefix because of the cloudi_job behavior usage

2012-03-03 Michael Truog   <mjtruog at gmail dot com>

    * Rename cloudi_job_dispatcher.erl to cloudi_dispatcher.erl to avoid the
      cloudi_job_ prefix because of the cloudi_job behavior usage
    * Provide better seeding for random:uniform/1

2012-02-25 Michael Truog   <mjtruog at gmail dot com>

    * Add service options for optional parameters that control
      typical service defaults for: priority_default, queue_limit,
      dest_refresh_start, dest_refresh_delay
    * If cloudi_logger output is redirected to a different node, and it is
      listed as a configured node, it is monitored for
      disconnection/reconnection so that logging can be done locally if
      necessary (i.e., while the node is known to be disconnected).
    * Fix random:uniform/1 usage so that a seed is assigned
      based on erlang:now/1
    * Rename "2" suffix module names to avoid Erlang module name conflicts with
      other Erlang applications:
        array2.erl -> cloudi_array.erl
        lists2.erl -> cloudi_lists.erl
        math2.erl -> cloudi_math.erl
        pool2.erl -> cloudi_pool.erl
        pool2_sup.erl -> cloudi_pool_sup.erl
        proplists2.erl -> cloudi_proplists.erl
        string2.erl -> cloudi_string.erl
        tuple2.erl -> cloudi_tuple.erl
    * Update pqueue4 code

2012-02-18 Michael Truog   <mjtruog at gmail dot com>

    * Update zeromq to 2.1.11 and erlzmq2
    * Update jsx to 1.0rc1
    * Update misultin to 0.9f
    * Update trie and uuid code

2012-01-21 Michael Truog   <mjtruog at gmail dot com>

    * Fix a race condition within the usage of the hexpi thread pool
    * Prevent external services from receiving messages prematurely
    * Changes to make sure a failed send to an external service's OS pid
      causes the service to terminate

2012-01-15 Michael Truog   <mjtruog at gmail dot com>

    * Add priority queuing to Erlang services
    * Add timeout events to remove any requests that remain within the
      priority queue after the request timeout expires
      (so no processing needs to occur on queued requests that have already
       timed-out, such that the response is ignored)
    * Reduce request timeouts by the time spent queued waiting to be processed
    * Erlang services now handle requests within a short-lived process to help
      avoid garbage collection latency
    * The hexpi test Erlang service was partially re-written to be more
      event-driven (avoiding problems with accumulated timeout latency)
    * Add the node to all log lines (important when using 
      log redirect configuration)
    * Delay node reconnect attempts to allow for normal startup time

2012-01-05 Michael Truog   <mjtruog at gmail dot com>

    * Add floating point number usage for process and thread counts, so that
      it represents a ceil for numbers > 1.0 or a round for numbers < 1.0
      when using it as a multiple of the number of cores
      (i.e., scheduler threads)
    * Make sure GET query parameters are accumulated in order as a list
      when necessary, within the CloudI API
    * Add the ability to redirect log output to a different Erlang node

2011-12-11 Michael Truog   <mjtruog at gmail dot com>

    * CloudI version 0.1.9 (alpha) released

2011-12-09 Michael Truog   <mjtruog at gmail dot com>

    * Add C++ CloudI API interface, based on the C CloudI API and integrated
      with the hexpi test
    * Make recv_async return the oldest response when given a null UUID
      (cloudi_constants.erl can change the RECV_ASYNC_STRATEGY to the faster
       "random" strategy)
    * Change various asserts to instead throw message decoding exceptions or
      invalid input exceptions within the CloudI API implementations
    * Add interface to restart a job through the CloudI Job API

2011-12-04 Michael Truog   <mjtruog at gmail dot com>

    * Change the external job configuration to not rely on command-line
      arguments to avoid replicating configuration values
      (instead use automatically assigned environmental variables,
       managed by the CloudI API source code)

2011-12-03 Michael Truog   <mjtruog at gmail dot com>

    * Add the python and ruby variations on the msg_size test
    * Increase the C/C++ message buffer size to 2GB (from 4MB),
      to match the current tcp packet encoding limitation
    * Move cloudi_job_misultin to be cloudi_job_http

2011-12-02 Michael Truog   <mjtruog at gmail dot com>

    * Add java msg_size test and make the java socket handling more robust
    * Catch cloudi_job Erlang module timeout exceptions and return as the
      expected error timeout return value
    * Add request_info parsing (expected to always be key/value pairs)

2011-11-30 Michael Truog   <mjtruog at gmail dot com>

    * Change external tcp job handling to utilize a 4 byte header
      (so the max total message size possible for tcp jobs becomes 2GB, but
       udp jobs are likely to be limited to 16KB
       (with the current code and a normal loopback MTU))
    * Fix a queuing bug with forward operations
    * Add msg_size test for testing messages > 16KB but < 4MB (currently 2MB)
      (with the current CloudI API settings, the 4MB limit can be increased)
    * Add timeout decrement for forward operations to prevent infinite messages
    * Fix stderr/stdout stream buffering in the Java CloudI API
    * Add the ability to forward with new job state within an Erlang CloudI job

2011-11-27 Michael Truog   <mjtruog at gmail dot com>

    * Add code path add/remove/get operations to the CloudI Job API, to provide
      an easy way for the code paths to be modified before an internal job is
      started in a directory CloudI's code server isn't aware of.

2011-11-26 Michael Truog   <mjtruog at gmail dot com>

    * Add the erlang variation to the http_req test
    * Add HTTP headers to the request_info
    * Add loglevel_set to the CloudI Job API, to dynamically change the loglevel
    * Fix a JSON-RPC protocol version problem

2011-11-25 Michael Truog   <mjtruog at gmail dot com>

    * Add priorities to CloudI messages
    * Add both request_info and response_info to CloudI messages (not yet used)
    * Fix a bug with C/C++ CloudI API data handling

2011-11-20 Michael Truog   <mjtruog at gmail dot com>

    * Make the CloudI logger work with logrotate without special configuration
    * Prevent any services from flooding the CloudI logger
    * Fix ACL allow/deny for complex destinations
    * Make HTTP method suffixes on service destinations on by default

2011-09-06 Michael Truog   <mjtruog at gmail dot com>

    * CloudI version 0.1.8 (alpha) released

2011-08-28 Michael Truog   <mjtruog at gmail dot com>

    * http_req test now includes Java, Ruby, Python implementations
      (in addition to the C implementation)
    * C/C++, Java, Python, Ruby CloudI API includes the
      request_http_qs_parse function for storing the parsed HTTP query string

2011-08-16 Michael Truog   <mjtruog at gmail dot com>

    * http_req C test now handles query strings
    * All requests and responses now have a terminating null ('\0')
      character that is not included in their length, so that it is
      easier to use C string functions without errors

2011-08-13 Michael Truog   <mjtruog at gmail dot com>

    * rebar/reltool bug fixed for Erlang R14B03

2011-06-23 Michael Truog   <mjtruog at gmail dot com>

    * CloudI version 0.1.7 (alpha) released
    * autoconf build system bug fixed
    * Updated FAQ documentation

2011-05-14 Michael Truog   <mjtruog at gmail dot com>

    * CloudI version 0.1.6 (alpha) released
    * autoconf/automake/rebar build system fixed in many ways
    * Add FAQ documentation and more source code comments

2011-04-25 Michael Truog   <mjtruog at gmail dot com>

    * CloudI version 0.1.5 (alpha) released
    * build system fixes

2011-04-23 Michael Truog   <mjtruog at gmail dot com>

    * Job API jobs_remove() now takes UUIDs and
      jobs() returns tuples with the UUID as the key
    * message UUIDs now include the distributed Erlang node name

2011-04-15 Michael Truog   <mjtruog at gmail dot com>

    * CloudI version 0.1.4 (alpha) released
    * Job API tested with JSON-RPC and Erlang formats over HTTP
    * Add python Job API JSON-RPC source code
    * Add python test of the Job API

2011-04-08 Michael Truog   <mjtruog at gmail dot com>

    * Add jsx
    * Update misultin and erlzmq
    * Add the flood test
    * Fix possible API encoding errors

2011-03-29 Michael Truog   <mjtruog at gmail dot com>

    * various bugfixes
    * CloudI version 0.1.3 (alpha) released

2011-03-27 Michael Truog   <mjtruog at gmail dot com>

    * Fix erlzmq problems, switch to R14B02 for erlzmq/ZeroMQ testing
    * Improve cloudi_job_zeromq
    * Fix Erlang service API (cloudi_job) bugs

2011-03-24 Michael Truog   <mjtruog at gmail dot com>

    * ZeroMQ autoconf integration to provide erlzmq2
    * Add cloudi_job_zeromq service for ZeroMQ bridge
    * Add send_async_active API calls to Erlang CloudI API
      (with send_async_passive == send_async) to avoid blocking

2011-03-21 Michael Truog   <mjtruog at gmail dot com>

    * Fix installation problems
    * CloudI version 0.1.2 (alpha) re-released

2011-03-20 Michael Truog   <mjtruog at gmail dot com>

    * CloudI version 0.1.2 (alpha) released
    * list_pg and list_pg_data improvements/bugfixes
    * Node reconnects work properly

2011-03-17 Michael Truog   <mjtruog at gmail dot com>

    * Add cloudi_job_api service for dynamic configuration
    * Add cloudi_job_filesystem service for caching static files
    * Add UDP keepalive mechanism for external processes
    * various bugfixes

2011-03-10 Michael Truog   <mjtruog at gmail dot com>

    * Add cloudi_job_timers for sending messages on timers
    * Add simple HTTP request test with one OS process, no threads
    * Convert python erlang ei encoding to ruby to remove erlectricity

2011-03-06 Michael Truog   <mjtruog at gmail dot com>

    * CloudI version 0.1.1 (alpha) released, packaged

2011-03-05 Michael Truog   <mjtruog at gmail dot com>

    * add ruby API and ruby service for http test

2011-03-04 Michael Truog   <mjtruog at gmail dot com>

    * add ruby/gem build integration
    * add ruby erlectricity integration, API in-progress
    * fix major bugs with overloading external processes and
      file descriptor blocking reading at allocation boundaries

2011-03-03 Michael Truog   <mjtruog at gmail dot com>

    * add mcast_async API function

2011-03-02 Michael Truog   <mjtruog at gmail dot com>

    * make install now works using autoconf/automake/rebar
    * configure files now included
    * version 0.1.0 package created

2011-02-25 Michael Truog   <mjtruog at gmail dot com>

    * tests/http now includes a java service implementation
    * the java API is functional after some bugfixes and changing the jar
    * various bugfixes

2011-02-23 Michael Truog   <mjtruog at gmail dot com>

    * CloudI version 0.1.0 (alpha) released

2011-02-22 Michael Truog   <mjtruog at gmail dot com>

    * hexpi test created with previous hexidecimal pi generation test, but
      now structured with services.
    * configuration format added to represent new configuration information
    * service supervision added with monitors to restart with
      previous configuration
    * node connection management added

2011-02-17 Michael Truog   <mjtruog at gmail dot com>

    * misultin now accepts incoming requests and can handle compressed requests
    * simple tests exist to use curl for misultin and a python test service
    * C API added

2011-02-11 Michael Truog   <mjtruog at gmail dot com>

    * pgsql, mysql, TokyoTyrant, couchdb, memcached data modules converted
      to the cloudi_job behavior, though the binary responses need work

2011-02-09 Michael Truog   <mjtruog at gmail dot com>

    * python API added with BSD licensed encoding for Erlang term
    * java API added using jinterface encoding
    * uuid module implements version 1 and version 4 based on RFC
    * pg2 changed to use a trie instead of ets
      (exists as module list_pg, later it becomes cpg)
    * rebar and autoconf build integration added

2011-12-.. Michael Truog   <mjtruog at gmail dot com>

    * CloudI version 0.1.0 (alpha) rewrite started
    * trie implementation created

2010-04-10	Michael Truog	<mjtruog at gmail dot com>

    * CloudI version 0.0.10 (alpha)
        * add a JSON RPC server for the Cloudi API function calls
          based on the LShift JSON RPC implementation
          (http://www.lshift.net/blog/2007/02/17/json-and-json-rpc-for-erlang)
        * add abstract code generation for automatic
          JSON RPC function call integration
        * update referenced Erlang version to R13B02
          (to reflect the version currently deployed by faxien)

2010-03-06    Michael Truog   <mjtruog at gmail dot com>

    * CloudI version 0.0.9 (alpha)
        * bug fixes
            * do not purge the cloud_logger_interface module when
              changing the logging level
            * prevent a crash when jobs ignore the task size parameter
              (though the database may die after a severe timeout
              if results are generated faster than the database can store them,
              when ignoring the task size and not using load balancing or the
              task time target to reduce the load on the database)
            * fixed a cloud scheduler bug for running multiple jobs
              that use the 'all' process count configuration setting
        * added a N dimensional index (Erlang) iterator
          (src/lib/cloud_stdlib/src/nd_index.erl)
        * added useful cloud job source code in src/lib/cloud_job_stdlib/
        * make gcc and boost versions build configuration items
        * update g++ to 4.4.2 and boost to 1.42

2009-10-29    Michael Truog   <mjtruog at gmail dot com>

    * CloudI version 0.0.8 (alpha)
        * add CouchDB database module
        * add ememcached functionality for creating a cluster
        * add workInstance as a parameter to the do_work function
          in the work library (i.e., changed cloud_work_interface.hpp).
          The combination of the workInstance with the id will be unique
          for all work processed by the work module within a Cloudi instance.

2009-10-14    Michael Truog   <mjtruog at gmail dot com>

    * CloudI version 0.0.7 (alpha)
        * add Tokyo Tyrant database module
        * cleanup the memcached interface a little
        * add cloud_job_latency work module for testing
          system latency with machines that have their clocks
          synchronized
        * add to the Erlang work module behavior the callback
          "handle_drain_binary_output" for handling the
          "binary" data title which is automatically routed to the
          Erlang work module that created the work
          (in the same order the work was created)

2009-10-10    Michael Truog   <mjtruog at gmail dot com>

    * CloudI version 0.0.6 (alpha)
        * cleanup other parts of the WorkerController code in the
          cloud_worker_port process
        * add a wait for the ThreadPool exit
        * add PostgreSQL "?" parameter substitution with
          expression operators
        * automatically download g++ and boost from mirrors instead
          of requiring their presence within the source repository

2009-10-09    Michael Truog   <mjtruog at gmail dot com>

    * CloudI version 0.0.5 (alpha)
        * make the cloud_worker_port process thread pool stable
            * rewrite of ThreadPool
            * reference count object pool allocator to avoid
              deletion order problems (with safe_shared_ptr)
        * add MySQL support with emysql and cloud_data_mysql
        * add (optional) usage of cloud_data_mysql in cloud_job_tests
        * provide the same parameter substitution as MySQL for the PostgreSQL
          interface ("?" instead of "$1", "$2", "$3", etc., so that queries
          can be as similar as possible when using the equery/3 function
          for either PostgreSQL or MySQL
            * currently handles punctuation but not operators
              (so spaces are currently required on either side of the "?")
        * disable ptmalloc for now because of problems with gmp taking the
          libc malloc
        * update g++ to 4.4.1 and boost to 1.40

2009-10-03    Michael Truog    <mjtruog at gmail dot com>

    * CloudI version 0.0.4 (alpha)
        * shortnames are currently the only supported node names
        * fix problems when storing work data in the data repository
        * create the cloud_interface application, for easier development
          of dependent cloud_data applications
        * create the cloud_data_memcached application so that memcached
          commands can be issued as an Erlang tuple passed as a list
          (for the query text)

2009-09-29    Michael Truog    <mjtruog at gmail dot com>

    * CloudI version 0.0.3 (alpha)
        * fix logger so that remote nodes can log properly
        * solve some fault-tolerance problems when a process or VM dies
        * make sure to not have cloud_worker_port exit
          if the controlling VM exists
        * use monitors for remote nodes and remote processes

2009-09-24    Michael Truog    <mjtruog at gmail dot com>

    * CloudI version 0.0.2 (alpha)
        * added arguments to work modules
        * added tags to work titles
        * fixed errors in the cloud_worker_port thread pool
        * cleaned up the cloud_worker_nodes and cloud_worker_scheduler
        * fix thread stop timeout problem in cloud_worker_port

2009-09-01    Michael Truog    <mjtruog at gmail dot com>

    * initial public release of CloudI version 0.0.1 (alpha)

