KineticSession
is now supplied as an opaque instance pointer fromKineticClient_CreateSession
- Passed
KineticClientConfig
is now deep copied and can be discarded after session creation.
- Passed
- Updated
KineticClient_Put
to allow storing an object with an empty value with a NULL data pointer supplied. - Added new
KineticAdminClient
API (seeinclude/kinetic_admin_client.h
)- Reloacted existing admin methods to admin API
KineticClient_InstantSecureErase
=>KineticAdminClient_InstantErase
/KineticAdminClient_SecureErase
KineticClient_GetLog
=>KineticAdminClient_GetLog
/KineticAdminClient_GetDeviceSpecificLog
KineticClient_FreeDeviceInfo
=>KineticAdminClient_LogInfo
- Reloacted existing admin methods to admin API
- Updated
kinetic-c-util
to support new Admin API. Still need to add support for printing info returned fromKineticAdminClient_GetLog
- Changed
kinetic-c-util
API to usegetopt_long
for operations in addition to parameters and added usage info via--help
/-?
option. - Fixed potential memory leak when logging protocol buffers.
- Fixed potential imbalance in concurrent operations semaphore.
- Status code changes
- Changed
KINETIC_STATUS_HMAC_EMPTY
=>KINETIC_STATUS_HMAC_REQUIRED
- Added
KINETIC_STATUS_MISSING_PIN
KINETIC_STATUS_SSL_REQUIRED
KINETIC_STATUS_DEVICE_LOCKED
KINETIC_STATUS_ACL_ERROR
KINETIC_STATUS_NOT_AUTHORIZED
KINETIC_STATUS_INVALID_FILE
KINTEIC_STATUS_DEVICE_NAME_REQUIRED
KINETIC_STATUS_INVALID_LOG_TYPE
KINTEIC_STATUS_HMAC_FAILURE
KINETIC_STATUS_SESSION_TERMINATED
- Changed
- Set larger timeouts for operations that tend to take approx. 10 seconds, to prevent non-deterministic failures.
- API change: Eliminated KineticClientConfig.writerThreads, since sender threads are gone.
- Changed to use stock protobuf-c 1.1.0 which also necessitated upgade to protobuf-2.6.0.
- Added auto-generated version info which is prepended to log and can be queried via
KineticClient_Version()
- Added support to gracefully handle remote hangup.
- The session will be shutdown.
- All pending/new operations will return
KINETIC_STATUS_SESSION_TERMINATED
and termination reason can be queried on the given session viaKineticClient_GetTerminationStatus(session)
.
- Changed all threads to block indefinitely and be fully event-driven.
- Added logging of all assertions to provide debugging info in the absence of debug symbols.
- Fixed race condition in message bus listener which could lead to data corruption.
- Fixed race condition that could cause more than the max number of thread pool threads to be created.
- Fixed potential buffer overrun in logger.
- Fixed bug with mishandling of unsolicited status responses from the drive prior to drive terminating connection.
- Removed ruby/rake as non-development build prerequisites.
- Added make json, json_install and json_uninstall tasks for json-c.
- Fixed race condition causing timeouts to not be handled resulting in a deadlock.
- Fixed extremely high CPU usage during loaded and idle times.
- Changed API to use a
KineticClientConfig
struct, to keep future configuration changes from breaking the source API.- NOTE: KineticClientConfig and KineticSessionConfig rely on C99 struct init.
- Unconfigured fields will be reverted to defaults if set to 0.
- These structures must be configured via C99 struct init or memset to 0 prior to population for backwards compatibility.
- NOTE: KineticClientConfig and KineticSessionConfig rely on C99 struct init.
- Added options for the number of writer, reader, and max threadpool threads, with defaults.
- Added KineticClient_FreeDeviceInfo to free the
KineticDeviceInfo
structure allocated byKineticClient_GetLog
. - Added several new examples under src/examples/.
- Added json-c library dependency which will be used for JSON-formatted ACL files for upcoming Admin API and multi-cast drive discovery tool.
- Fixed regression in 0.10.0 where a GET with metadataOnly=true would result in a crash if a value field was not provided
- Added system tests for P2P operations which are now fully validated and working on HW
- Fixed misue of pthread_join status in thread pool which was causing shutdown issues in GCC builds
- Added put_nonblocking and get_nonblocking examples
- Added KineticSemaphore API to provide a simpler wrapper around a common use of pthread condition variables as a thread safe way to signal when an async operation has finished
- Switched internal message infrastructure to use a threadpool. This will allow for a much higher number active connections and outstanding commands.
- KineticClient_Init now returns a KineticClient pointer (internally, it's a handle to the threadpool) that must be passed to KineticClient_CreateConnection() in order to create new connections and must also be passed to KineticClient_Shutdown() on shutdown
- Improved I/O examples to demonstrate client write operations for blocking/non-blocking (asynchrounous) and single/multi-threaded.
- Added consolidated performance test which reports metrics on PUT/GET/DELETE sequences (test/system/test_system_async_throughput.c).
- Added missing mutex lock causing a concurrency issue.
- Added profiling to test/system/test_system_async_io.c
- Added get_key_range.c example for KineticClient_GetKeyRange().
- Changed API to use a
KineticSession
with a pointer to private session/connection info in place of the oldKineticSessionHandle
. - Added
FLUSHALLDATA
operation viaKineticClient_Flush()
- Added
GETPREVIOUS
/GETNEXT
operations viaKineticClient_GetPrevious()
/KineticClient_GetNext()
- Replaced
KinticClient_Connect()
/Disconnect()
withKineticClient_CreateConnection()
/DestroyConnection()
, since the connection structure is dynamically allocated and populated in the providedKineticSession
.KineticClient_DestroyConnection()
MUST be called on the an establishedKineticSession
in order to shutdown the connection and free up resources. - Added initial implementation of PEER2PEERPUSH which does NOT yet support chaining via KineticClient_P2POperation().
- Fixed bug with mutex locking causing an assert failure and subsequent crash.
- Fixed leaking of destroyed connections and they are now properly freed upon call to KineticClient_DestoryConnection().
- Fixed bug where some unrecoverable socket errors could cause retries when unintended.
- Modified PDU flow control in order not stall transmission on request PDUs when Value payload is empty or of small size.
- Added
GETLOG
operation. - Added thread-safety to allow multiple client threads within the same session.
- Added I/O examples to demonstrate client write operations for blocking/non-blocking (asynchrounous) and single/multi-threaded.
- Updated to use Kinetic Protocol v3.0 (3.0.5)
- NOT backwards compatible with earlier versions of Kinetic Protocol
- Kinetic device firmware must be updated to a release supporting v3.0 protocol!
- Added asynchronous/non-blocking execution option to all operations (
GET
/PUT
/DELETE
/GETKEYRANGE
).- A given operation is carried out in asynchronous mode if a closure callback with optional data is supplied.
ByteArray
andByteBuffer
types are now supplied directly in thebyte_array.h
public interface file.- Fixed a concurrency issue that intermittently produces a crash in
kinetic_allocator
in a threaded context
- Added blocking
GETKEYRANGE
operation.
- Added blocking
GET
andDELETE
operations. - Added Makefile build implementing standard (make; sudo make install) interface.
- Added creation/installation of static (.a) and dynamic (.so) libraries
- Added
ByteArray
type for buffer management. - Added
Kinetic_KeyValue
type for key/value pair handling.
- Added blocking
PUT
operation