Skip to content

Releases: kf6kjg/chattel

v2.1.0 - Asset purging with filters

12 Feb 02:38
Compare
Choose a tag to compare

In all the hubbub to release 2.0, I missed the PurgeAll command's signature update. Purging all assets is not a normal thing to do, the real need was to be able to purge assets that, say, had the Local flag set true. Now that's possible, whereas before it was not.

v2.0.0 - TESTED

09 Feb 06:45
Compare
Choose a tag to compare

This release comes with a LOT of heavy changes, all stemming from extensive unit testing. This is the first release to have all critical classes and methods unit tested, much less in the coverage that they have now, resulting in drastically improved reliability - and a need to break compatibility with some bad ideas now removed.

On to the list of curated changes!

  • Cache system has had a change in life goals: no longer willing to just play second fiddle to the remote servers, it has thrown off the chains and has stepped into the light of freedom as Local Storage! If your application, or your user, doesn't currently need to use a remote server, just set up local storage and your assets will be stored to disk instead. With this newfound freedom Local Storage doesn't hate the remote servers and is still willing to work alongside them: run both for maximum performance and load distribution!
  • Writes to remote servers are now logged into a special "write cache" file if Local Storage is enabled and the requisite Write Cache File is configured. Thus if a crash or application termination happens during operation the assets will still be sent to the remote servers. Simply start your program again and any pending sends to remote servers will pick up where the left off from!
  • Multiple calls from multiple threads are now handled well and efficiently, both in the reader and especially in the writer. Expect that under most conditions, assuming Local Storage is active, your upstream servers will only be hit ONCE per asset ID, not once per request!
  • Suspect that the asset in Local Storage is corrupt for some reason? Now you can request the asset and have the code skip over poor overlooked Local Storage.
  • Built-in local storage class has been renamed and made public: once just called ChattelCache, it now has a title much more fitting to its stature - AssetLocalStorageSimpleFolderTree.
  • Chattel is no longer the controller of the IAssetServer implementations! Now you can add your own asset server class without needing to worry about using some custom interface, just inherit the interface and start working!
  • As a nod to simple interfaces, now you can configure with just a single asset server without any list-of-list-of-assetserver mumbo-jumbo.
  • INI-based configuration is now a thing of the past. This drastically simplified the logic and reliability, removed the dependency on Nini, and put the control back in your hands. If you want to read from INI files, go ahead, but it's all your decision now.
  • LOTS AND LOTS OF BUG FIXES. Unit and integration tests are a powerful combo.

As a side note, you'll notice that the Travis-CI based Mono builds are gone. This is because this project is now making extensive use of C#7 features, and Travis-CI hasn't caught up. Of course everything still compiles on Linux: my dev machine's only OS is Ubuntu!

v1.5.0 - Parallism, lib reduction, fixes

10 Jan 04:28
Compare
Choose a tag to compare
  • Now able to use whatever logger you have set up!
  • And you can now provide your own cache implementation with the new IChattelCache interface and acceptance via the ChattelReader/Writer ctors.
  • Putting the same asset ID in parallel now causes only the first to do the work, while all other threads wait on that first to complete.
  • New GetAssetAsync method introduced using a callback/delegate to solve concurrency issues where N parallel calls for the same asset caused N hits against the upstream and subsequent problems. Now N calls cause 1 hit.
  • OBSOLETE: GetAssetSync marked obsolete, please switch over to GetAssetAsync, especially if you are accessing Chattel in a multithreaded manner.
  • OBSOLETE: WriteAssetSync and ReadAssetSync marked obsolete as they are only aliases anyway.
  • Now you can do a simple "==" comparison to see if two StratusAssets are identical. (Fixed #1)
  • Ctors use IEnumerable instead of List. (Fixed #2)
  • INI file can now specify parallel servers. (Fixed #3)

V1.4.0 - Introducing Chattel-AssetTools

11 Dec 03:09
Compare
Choose a tag to compare
  • Separated the various asset-type-checking properties into extension methods supplied by a new optional library: Chattel-AssetTools - check it out at https://www.nuget.org/packages/Chattel-AssetTools
  • Chattel-AssetTools unit tested. Still need to unit & integration test the main lib...
  • Removed requirement for LibreMetaverse - turns out Chattel wasn't using LMV for much in the first place.

V1.3.3

29 Nov 06:31
Compare
Choose a tag to compare

Looks like I forgot to post notes about v1.3.2, so I've incorporated them below.

  • (1.3.2) A bug was fixed in the StratusAsset asset ID serialization to WHIP/OpenSim-type asset byte array. I'd forgotten that that was a silly ASCII encoding of the hexchars 32 bytes long, not a nice tidy base256 16 bytes long.
  • Libraries updated, again.
  • Added a new property to ChattelReader and ChattelWriter: HasUpstream. This allows you to check to see if any upstream servers were configured. After all, if there aren't any, why would you even waste the time doing things to send them?

v1.3.1 Hardening

23 Nov 02:42
Compare
Choose a tag to compare

After thinking more about the new conversion methods I realized that there was a possible route for exploit or at least causing an unexpected exception. That should now be eliminated: no longer does the code assume all the data is in the passed array.

A new ArgumentOutOfRangeException has been added in case the array is exceptionally short. Consumers of this new method should catch it.

v1.3.0

22 Nov 19:38
Compare
Choose a tag to compare

Added static methods to StratusAsset to allow for painless conversions to or from WHIP-type assets and byte arrays.

Version 1.2.1

19 Oct 04:01
Compare
Choose a tag to compare

Library updates, slight tweaks.

  • Changed .NET target framework to 4.6.1
  • Updated LMV to 1.2.0.146
  • Several other libraries also got an update as a result.
  • Reduced CF REST service sleep delay from 1000ms to 1ms, more in line with http://stackoverflow.com/a/22976809/138304
  • Minor cleanup of code, eg. usage of var, and other similar small fixups.

v1.2 Write Support!

09 Jul 22:14
Compare
Choose a tag to compare

In this release a lot has changed - and the API was changed dramatically. I apologize if that inconvenienced anyone.

I finally merged in the writer branch after doing some live-fire tests. Worked without a hitch - parties and confetti all around!

Summary of changes: (in case you don't read commit notes)

  • New class to write assets ChattelWriter with method PutAssetSync and alias WriteAssetSync.
  • Configuration was split into its own class ChattelConfiguration. This was due to happen, just too much logic in there to copy into the new ChattelWriter class.
  • Cache disk format changed. You'll want to purge your local cache. You can do that with the new flag documented below, or just by emptying the cache folder.
  • Added optional flag to c'tors to allow the purging of the cache on bootup. Some applications might want to clean out the local cache, if they've enabled it, when they start the program - maybe if you're connecting to a different grid and want to make sure you don't get collisions? Also when you upgrade Chattel and there' a change in the cache format - like this release.
  • New custom exception classes: AssetException, AssetExistsException which inherits from AssetException, and AssetWriteException which also inherits from AssetException.
  • Internal-use-only classes were hidden via the internal keyword.
  • Some small bugs squashed and code cleaned up.

v1.1.1: Added handling of on-connect exceptions

21 May 18:05
Compare
Choose a tag to compare

Fixed:

  • Chattel would crash the application with an exception if a configured WHIP server instance was not available during startup. As servers are optional but important this is now just an Error-level log line.