All notable changes to this project will be documented in this file. This project aims to adhere to Semantic Versioning.
- UnsupportedOperationException when getting a 0 byte file using
MantaClient.getAsInputStream
- AutoContinuingInputStream fails to handle fatal exceptions correctly and triggers a self-suppression error.
- Client metrics can now be enabled by selecting a reporting mode with the
manta.metric_reporter.mode
/MANTA_METRIC_REPORTER_MODE
setting. JMX and SLF4J are available, though others may be added in the future. - New metrics exposed:
MantaClient#delete(String, MantaHttpHeaders)
- Download auto-resume has been added in the form of
manta.download_continuations
/MANTA_DOWNLOAD_CONTINUATIONS
configuration setting.
- MBeans registered in JMX no longer use an incrementing integer and instead are created under unique IDs for each client.
- JMX is no longer used to expose configuration and pool stats by default. To reenable JMX,
set
manta.metric_reporter.mode
/MANTA_METRIC_REPORTER_MODE
toJMX
. - Upgraded upstream dependencies to latest stable versions:
- HTTP Signatures dependency: 4.0.6 → 4.0.8
- jna-gmp: 2.0.0 → 2.1.0
- BouncyCastle: 1.58 → 1.59
- Apache HttpClient: 4.5.3 → 4.5.5
- Misleading log message is shown for retrying requests that are unretryable
MantaClientHttpResponseException
does not provide a way to get the response headers- Underlying stream is not closed when we throw a
MantaClientEncryptionException
- Underlying stream is not closed by
MantaEncryptedObjectInputStream
for range requests with certain ciphers - Improved error messages for missing or invalid private keys.
- Exceptions relating to object type expectations are too generic
- Integration test regression
- Load balancer IP has been added
to response headers as
x-load-balancer
. The header will be injected into the response if it is not already present. - Azul Systems' Zulu JDK has been added to the Travis-CI test matrix.
- Recursive directory creation
can now attempt to skip a configurable number of levels in order to avoid redundant
PUT
requests. Seemanta.skip_directory_depth
/MANTA_SKIP_DIRECTORY_DEPTH
in the configuration documentation for an explanation of how the optimization can be enabled. Expect: 100-continue
header can now be set by configuring a timeout value formanta.expect_continue_timeout
/MANTA_EXPECT_CONTINUE_TIMEOUT
.
- Signing of URLs which need to be encoded has been fixed.
- Java 9 compatibility improvements.
MantaClient#listObjects
potentially leaking connections.
- Added method MantaClient.find() which allows for recursive directory listing.
- Support for reading content-type and content-md5 header information from directory listings
- Added connection request timeout
configuration parameter:
manta.connection_request_timeout
/MANTA_CONNECTION_REQUEST_TIMEOUT
MantaClient
will now accept an externally-createdHttpClientBuilder
in order to allow for customization now available through standard configuration parameters. Users are expected to provide aMantaConnectionFactoryConfigurator
containing their custom instance to theMantaClient(ConfigContext, MantaConnectionFactoryConfigurator)
constructor. Constructor documentation explains the benefits and trade offs.MantaClient
now allows for modification of authentication parameters by dynamically-reloading configuration state.AuthAwareConfigContext
can be used to wrap the desired configuration and provides a method to update derived objects atomically.
- Clarify version history of
MantaInputStreamEntity
- MPU parts which were missing an ETag in their response were not treated as errors.
- NullPointerException as a result of some configuration parameters not being handled correctly unless explicitly set.
- Setting
manta.retries
/MANTA_HTTP_RETRIES
to 0 would printRetry of failed requests is disabled
but leave the default Apache HttpClient retry behavior. - Content type is set for file object in directory listing when it isn't available
- Fixes validation guard clauses that are not validating anything
- MDC logging of the load balancer address now logs the proper address
- Fixes deleteRecursive fails with ConnectionPoolTimeoutException
- Validation of paths passed to
MantaClient
is now more consistently strict. More useful errors should be thrown sooner for invalid paths, without any change to valid requests. - Core library code has has been extracted from
java-manta-client
into a separate module namedjava-manta-client-unshaded
allowing users to incorporate the library into their project without bundled dependencies. - Constructor signatures for
StandardHttpHelper
,EncryptionHttpHelper
, andMantaSeekableByteChannel
which accepted aMantaConnectionFactory
have been deprecated.
- Potential file corruption caused by automatic retries as a result of 503 responses when utilizing client-side encryption with regular PUT requests.
- MPU finalization meant it was impossible to retry last part in case of 503 responses.
- Object content verification of standard PUT requests was being skipped if the server omitted the computed MD5 from the response.
- MPU retries still causing file corruption when server responds with 503 Service Unavailable. Apache HttpClient code path audited to ensure no other automatic retries can occur.
- The heuristics for guessing Content-Type have been adjusted to give more consistent results across platforms.
- When using encryption in combination with Multipart Uploads,
automatic retries triggered by the underlying HTTP
library could cause file corruption. In case of a network error automatically certain requests would be retried
transparently (e.g. those backed by
File
s andbyte[]
data). This caused authentication and encryption state erroneously include the partial content from the initial request. As a result of this fix encrypted MPU operations will utilize the BouncyCastle cryptography library even when libnss (PKCS#11) is installed.
Digest
not reset in DigestedEntity leading toMantaChecksumFailedException
when the entity is reused during automatic retry.- MantaChecksumFailedException lacking exception context.
InputStream
left open in EncryptingEntity and EncryptingPartEntity leading to space from deleted files not being reclaimed until JVM shutdown.
- Added additional error context information for IOExceptions thrown during read() in encrypted streams.
- MantaClient.move() does not support moving a file to a non-existent directory This fix optionally allows users to recursively create a destination directory structure on move(). This is useful for supporting third-party APIs/libraries that use this pattern due to a S3 first design.
- Resolve issue where MantaClient.getAsInputStream().close() throws MantaIOException for encrypted objects with trailing HMAC. Infrequently an issue could occur where less bytes than requested were read and the stream was left in a bad state. This would prevent the underlying connection from being returned to the connection pool.
- Exception contexts now include SDK version.
Several related URL encoding bugs have been fixed. Objects with non-alphanumeric characters created by java-manta may have been created with unexpected encoding characters. Only the object names were affected, not the content.
- Paths with URL unsafe characters are now encoded correctly.
Previously the
space character was being transformed
into a plus (
+
) character. So a PUT to the Manta object/user/stor/Hello World.txt
, would instead create/user/stor/Hello+World.txt
. - All
MantaClient
operations now consistently encode, andMantaObject.getPath
always returns the original (not encoded) path. - Recursive directory creation will no longer encode the path twice.
- Gracefully handle missing JCE Unlimited Strength Policy by only enabling stronger ciphers when they are allowed by the runtime. Installing the Unlimited Policy files where necessary is still strongly recommended.
- Upgraded HTTP Signatures library to 4.0.1.
- Moved configuration validation into a static method on ConfigContext.
- Manta specific content-types are now contained in
MantaContentTypes
. - MantaClient.close() no longer throws Exception.
- Liberalized boolean parsing in configuration - true, t, T, yes, and 1 are equal true.
- Job related classes have been moved to the com.joyent.manta.client.jobs package.
- In
BaseChainedConfigContext
,setHttpsCiphers
has been renamed tosetHttpsCipherSuites
to be in alignment with the getter of a similar name. - Request IDs are now generated using time-based UUIDs.
- Added version information to user agent and debug output.
- Added simple CLI to use for debugging.
- Added configuration dump system property: manta.configDump
- Add JMX to monitor configuration and thread pools
- SettableConfigContext has been added as an interface to indicate that a given config context has settable properties.
- Added isClosed() method to MantaClient.
- Added HTTP buffer size configuration parameter.
- Added TCP socket time out configuration parameter.
- Added verify upload checksum configuration parameter.
- Added upload buffer size configuration parameter.
- Added getInputStream method that accepts byte range parameter.
- Added support for client-side encryption.
- Added support for server supported multipart.
- Added support for client-side encrypted multipart upload.
- Added support for client-side encrypted HTTP range download.
- Added module supporting serializing encrypted MPU upload objects.
- Added support for libnss via PKCS11.
- Added support for FastMD5 native MD5 calculation.
- Added support for single-second caching of HTTP signatures.
- Added support for ECDSA and DSA HTTP signatures.
- Remove Google HTTP Client and replaced it with stand-alone Apache Commons HTTPClient.
- Removed MantaCryptoException.
- Removed signature cache TTL and HTTP transport configuration parameters because they are no longer relevant in the 3.0 implementation.
- Convert IllegalArgumentException uses that are catching null to NPEs
- Add capability to calculate a Content-MD5 on putting of objects
- Added id getter to MantaJobBuilder.Run.
- Added
set -o pipefail
to multipart upload jobs so that we catch job failure states explicitly. - We now throw exceptions when ABORTED and UNKNOWN upload states are encountered when executing MantaMultipartManager.waitForCompletion().
- We now explicitly handle InterruptedExceptions on MantaClient.close() by not exiting early and continuing to close all of the dangling resources.
- Added check for SHA256 fingerprints. We error and display a message to inform the user to use a MD5 fingerprint for the time being.
- We now store the multipart upload job id on the metadata of the metadata object which allows us to get the job id without doing a listing.
- Added support for multipart uploads implemented as Manta jobs.
- Upgraded HTTP Signatures dependency.
- Resolved numerous compiler warnings.
- Improvements in recursive delete operations.
- Listing a directory that doesn't exist will result in an UncheckedIOException that is difficult to trace
- Listing jobs will cause HTTP pool resource leaks
- Setting HTTP Headers is now supported when making GET requests.
- Upgraded HTTP Signatures dependency.
- Upgraded Apache HTTP Client.
- Upgraded Google HTTP Client.
- Resolved compiler warnings for MantaSSLSocketFactory and HttpRequestFactoryProvider.
- Wait / notify behavior in MantaObjectOutputStream was improved for close() events.
- Fix the contributing link to work online on github. Case-Sensitive links
- Minor pom fixes and plugin/dependency version updates
Version skipped due to a release error.
- MantaSeekableByteChannel now extends from InputStream.
- Added move method to MantaClient.
- MantaClient.putDirectory now returns a boolean value indicating the successful creation of a new directory.
- Added OutputStream implementation that allows for uploads via an OutputStream.
- Added support for uploading using File objects, thereby getting retryable requests.
- Added support for uploading byte arrays directly, thereby getting retryable requests.
- Added logging of load balancer IP upon exception. This is implemented using the SLF4J MDC class.
- Putting strings now acts as a retryable request.
- Fixed retrying so that it works consistently with Google HTTP Client.
- We try to discover the mime-type from the filename when it isn't set as part of the header.
- Upgraded http-signatures to 2.2.0 so that we are keeping pace with upstream changes.
- Rejiggered Maven shade settings to better exclude certain dependencies and shade others so that they won't cause conflicts.
- Upgraded Apache Commons Collections to 4.1 because it has security patches.
- Added Apache Commons Lang as a dependency.
- Added additional details about HTTP requests to all exceptions.
- Changed license to MPLv2.
- We catch IOExceptions and rethrow them with additional debug output appended.
- Upgraded http-signatures to 2.0.2 so that we support native gmp on SmartOS.
- Changed signature algorithm log statement to debug from info.
- Change DNS resolver implementation to randomly rotate among the IPs returned from DNS for the Manta host when using the ApacheHttpTransport.
- Added logging message for signing algorithm.
- Added x-request-id output on HTTP errors.
- Add toString methods for ConfigContext.
- Added http transport library configuration parameter.
- We now honor TLS cipher suite parameters (https.cipherSuites) when using ApacheHttpTransport.
- We now honor TLS protocols parameters (https.protocols) when using ApacheHttpTransport.
- We now allow configuration of TLS protocols and ciphers.
- Upgraded http-signatures library to 1.1.0.
- We now allow you to disable HTTP signature based authentication altogether.
- We now allow you to disable native code cryptographic performance enhancements.
- We now enable HTTP signature caching by default with a TTL of 1000ms, but it can be disabled by setting it to 0ms.
- Added maximum connections configuration parameter.
- MantaException now inherits from RuntimeException.
- MantaClientHttpResponseException now inherits from IOException.
- MantaUtils.inputStreamToString now supports specifying a Charset.
- Changed newInstance() methods to constructors in MantaClient.
- Changed to a multi-module Maven project.
- Broke out integration tests into a separate Maven module so that we can test classes in their shaded state.
- Bumped minimum Java version to 1.8.
- Changed to a JDK 8 Stream model for streamable resources.
- Many utility methods used for making HTTP requests have been moved to the HttpHelper class.
- Added read-only support for NIO SeekableByteChannel streams.
- Added support for recursive directory creation.
- Added support for home directory path look up in ConfigContext.
- Added MantaMetadata class for handling object metadata.
- Added MantaHttpHeaders class for handling custom HTTP headers.
- Added build to Travis CI.
- Added closeQuietly() to MantaClient.
- Added parsing of JSON error responses from Manta API.
- Added error response enum MantaErrorCode.
- Added support for signed URLs.
- Added support for RBAC roles.
- Added Manta compute job support.
- Added HTTP retries as a configuration parameter.
- Added additional Maven enforcer checks.
- Removed all non-context based constructors from MantaClient.
- Massive reformatting and clean up of the entire code base.
- We now use Apache HTTP Client to make all of our HTTP requests.
- Added additional documentation.
- Added system properties configuration support.
- Added chained configuration context support.
- Added configuration context unit tests.
- HTTP Content-Type header is not being read correctly
- README specifies incorrect system property name for manta user
- manta client recursive delete does not work
- manta client listObjects method does not completely populate manta objects
- Convert MantaObject.getMtime() to use an actual Java time type
- Project came under new leadership.
- Unit test framework changed to TestNG.
- MantaClient is no longer declared final.
- Changed developer information in pom.xml.
- More code formatting clean up and javadoc changes.
- Added MantaUtils test cases.
- Added additional key file path sanity checks.
- Migrated logger to use slf4j.
- Upgraded google-http-client to 1.19.0
- Moved Junit Maven scope to test.
- Upgraded JDK to 1.7 and replaced Commons IO method calls with standard library method calls.
- Upgraded bouncycastle libraries to 1.51.
- Maven now creates a shaded version that includes everything except bouncycastle and slf4j.
- Bumped Maven dependency versions.
- Enabled Manta unit tests to draw their configuration from environment variables.
- Updated release documentation.
- Added nexus release plugin.
- Fixed checkstyle failures.
- Fixed pom.xml settings so that it will properly release to Maven Central.