Skip to content
robert-bor edited this page Jan 24, 2013 · 27 revisions

Release notes

Currently working on v0.8.0-SNAPSHOT

Theme: polishing for v1.0

  • Refactoring AccountConfig; TBD

v0.7.0

Theme: plug'n'play for the convenience user and power for the power user

  • Paging lists of containers and objects; OpenStack paging can now be accessed either in the original form (using the last entry's name on the previous page as a marker), or with a page. Note that the list methods have change from listX to just list
  • Listing only containers and objects with a prefix; containers and objects can have their lists filtered on name prefixes
  • Public URL for mock implementation; a placeholder URL can be passed to the mock implementation. This URL will be prefixed to the container/object. In this way you can set up your own controllers that access content and still have it work in mock mode
  • Serialized output for containers; when containers and stored objects are listed, use is made of the JSON objects instead of the plain text lines
  • Reuse the header information from container/object listing for metadata; specific header fields passed by the Account/Container list operation are now stored and do not automatically lead to a refetch when queried (unless caching is turned off)
  • Minor changes/refactorings:
    • Check your calls to the ObjectStore; Account can let you know how many HTTP calls to the ObjectStore have been made so far
    • Logging critical information; various logging statements added (INFO, WARN and ERROR level), for configuration, critical components and exceptions

v0.6.1

Theme: First usage in the 42 project and feedback from the team

  • Large Object Creation; Segmented files and manifests can be uploaded. Files and byte array are automatically segmented if the segmentation size is exceeded. http://docs.openstack.org/api/openstack-object-storage/1.0/content/large-object-creation.html
  • Factories; factories that can be used in Spring to get a self-reauthenticating account singleton
  • OnFileObjectLoader; you can set up a folder with a layer of subfolders (ie, containers) and files (ie, objects). The ClientMock can be instructed to load this entire folder structure and convert it into an in-memory ObjectStore.
  • Thread safety; a number of routines have been made thread-safe so that the usage of a connection pool of accounts is not necessary, but a single Account can be instantiated in a Spring context
  • Other HTTP client; the default HTTP client now has a different connection manager (PoolingClientConnectionManager) than the default single-threaded one (BasicClientConnectionManager). You can still bring your own if this one is not good enough.
  • Caching on/off; JOSS lazy-reads the metadata on an instance and then never again. It is possible to turn off this caching mechanism, so that metadata is always loaded for every get call on account/container/object instance.
  • Entity reload; Account, Container and StoredObject can be forced to reload their metadata.
  • Minor changes/refactorings:
    • 100% Test coverage; all JOSS code is now covered by tests
    • Cyclic dependencies; eliminated all relevant cyclic dependencies from the code base
    • Public URL exposed by Account; Account now returns the public URL configured in the Object Store for the Account
    • Package refactoring; core Swift classes moved to model, original model classes moved to instructions and information

v0.5.0

Theme: Working down the list of unsupported Object Storage features: https://github.com/java-openstack/joss/wiki/Future-features

  • X-Delete-After / X-Delete-At; with X-Delete-At, the ObjectStore can be instructed to remove an object at the specified date/time. With X-Delete-After, the ObjectStore is instructed to remove the object x seconds after the current date/time.
  • *If-Modified-Since headers; these headers instruct the ObjectStore to check against the last modification date. In the case of If-Modified-Since, the content will be returned if changes have taken place. In the case of If-Unmodified-Since, the content will be returned if changes have NOT taken place. See also, the Openstack API: http://docs.openstack.org/api/openstack-object-storage/1.0/content/retrieve-object.html
  • If-Match / If-None-Match; these headers instruct the ObjectStore to check against the passed value. In the case of If-None-Match, the content will only be returned if the value does not match (ie, content is modified). In the case of If-Match, the content will only be returned if the value matches (ie, content is unmodified).
  • Exception hierarchy; CommandException subclasses to prevent the need to compare exception content on catching. Every fail condition resulting from a HTTP status now translates to a corresponding exception.
  • Minor changes/refactorings:
    • Removed all IOExceptions from StoredObject interface
    • Ability to add Content-Type as part of the upload, not only afterwards
    • Removed dependency on commons.lang

v0.4.0

Theme: More functionality of Object Store in the client

  • download partial content; added Range that allow downloads of partials, see http://docs.openstack.org/api/openstack-object-storage/1.0/content/retrieve-object.html
  • supply your own etag; added possibility to upload your own Etag, in case you use an inputstream but still require a server-side comparison of MD5 hashes
  • facilitate content sniffing; added option to change Content-Type of an object. Useful when you do not wish to rely on the default Object Store file extension matcher to determine Content-Type, eg when you have your own content-sniffing algorithm
  • better test coverage; 98%+ JUnit test coverage achieved

v0.3.0

Theme: CloudVPS feedback incorporated

  • added auto-reconnect after token expiration implemented
  • added auto-discovery of object-store Catalogs
  • added end point selection based on region preference
  • added tenant support

v0.2.0

Theme: Subjected to internal 42 review

  • converted InputStreamWrapper to InputStream subclass
  • return Containers and StoredObject as List instead of array[]
  • implements Callable interface for all AbstractCommand
  • use Closeable for AbstractCommand (added bonus: works for try-with-resources in Java 7 as well)
  • refactored client interface from Facade to ActiveRecord pattern

v0.1.0

First release with the basic authentication, account and object access