Skip to content

dev.meetings

chrisdennis edited this page Nov 20, 2014 · 23 revisions

Meet up notes

Nov 20, 2014 - Hangout on Air - Rogue Edition

Recording available here on YouTube

Agenda

  • putIfAbsent and CacheWriters

Nov 13, 2014 - Hangout on Air

Next public meeting on G+ Hangout on Air at 11:30pm IST / 8pm CET / 2pm EST / 11am PST

Agenda

Nov 6, 2014 - Hangout on Air

Recording available here on YouTube

Agenda

  • Überjar!

  • XML Configuration,

    • How should we parse it?

    • Alex’s crazy extension idea for 107 idea

Oct 30, 2014 - Hangout on Air

Recording available here on YouTube

Agenda

  • Expiry to be the Store’s concern, just as eviction is

    • Store doesn’t know about the public event listeners though, uses internal private mechanism

    • An entry, being present but expired, is considered absent (i.e. a Cache.putIfAbsent would succeed).

    • ValueHolder probably can go now too

  • storeByValue, see here (and followed up on ML)

  • Some XML stuff as of here

Oct 23, 2014 - Hangout on Air

Recording available here on YouTube

Agenda

  • Exception hierarchy

    • Conclusion being we postpone deciding what we do, until we tackle the OSS Beta milestone. 107 dictates what we need to do now anways

  • Logging (levels, i18n, …​)

    • INFO: Logs lifecycle stuff

    • WARN/ERROR: We don’t log, but throw

    • DEBUG/TRACE: Regular ops stuff, including delegating to the ResilienceStrategy

Oct 16, 2014 - Hangout on Air

Recording available here on YouTube

Agenda

  • PR #109 on ClassLoader per Cache

    • Should it be a Service or do we want to keep it as in the PR?

    • Let’s revisit this based on user sample code we plan on doing after the 107 Alpha

  • Update the README to explain how to get to this though sonatype

  • 107 Alpha to be released as 3.0.0-Alpha to central

Oct 9, 2014 - Hangout on Air

Recording available here on YouTube

Agenda

  • EhcacheManager & Ehcache implicit contract nailed ?

  • Lifecycle and state transitions

Oct 2, 2014 - Hangout on Air

Recording available here on YouTube

Agenda

  • Project structure and especially the spi-tester sources

  • What should a Cache if everything gets veto’ed from being evicted?

  • CacheLoader & CacheWriter only for implementing the Cache Through pattern?

  • Mocking time in tests

Sep 25, 2014 - Hangout on Air

Recording available here on YouTube

Agenda (sorry, hadn’t had time to review it yet)

Sep 18, 2014 - Hangout on Air

Recording available here on YouTube

Moved to Cloudbees

Our build infrastructure is now on Cloudbees here: https://ehcache.ci.cloudbees.com

Still need to publish -SNAPSHOT to Sonatype though

Git workflow

We said we should not git push --force to a branch that’s currently under review (because of the PR associated); but rather closing the PR and creating a new one.

Warning
This decision has been invalidated since: it’s okay to do it, but be vocal about it. One case where you just want to do it, is rebasing your branch should some other PR been merged in between.

If you do changes based on the feedback from the PR, they probably should be a commit on their own atop of the other

ConcurrentHashMap v8 port

Is ported from jsr-166 cvs (revision information is recorded in the commit). Still uses Unsafe, but lets leave it like that for now (won’t work on GAE for instance though).

Need to have the CHMv8 tests not run everytime (at least not as they stand).

JSR166Wrapper contains all interfaces to please javac

Actually make use of CHMv8 in OnHeapStore is still work that’s still pending

Also have a Unsafe wrapper that adds the methods not present in 1.6

SPI Testing strategy (discussed here)

Hung is currently working on a proposal, based on this here: https://gist.github.com/alexsnaps/f42557d008e2ed37f2b1

Acceptance criteria:

  • Not runtime dependency on a given testing framework (e.g. junit)

    • but can provide support for testing framework (e.g. to provide nice reporting)

  • SPI tester should report a complete run, not stop on first failure it encounters

  • A given SPI tester doesn’t know about any given implementation, but implementations pull the SPI tester in

  • Probably want to make the SPI testers available through maven using some qualifier (e.g. core:SpiTesters)

  • The Java™ Technology Test Suite Development Guide 1.2 would probably contain some good input on writing actual SPI tests

  • SPI tests are probably somewhat easier to write, given that we know where and how (UTSL!) a given SPI is actually used

Sep 11, 2014 - Hangout on Air

Recording available here on YouTube

CRUD operations

  • Let’s implement the void ones (e.g. remove(K): void) for now, we may do more later. It’s a cache, no real reason to wanting the old value ever…​

Resilience of Ehcache

  • Stick to ResilienceStrategy and have Ehcache be resilient:

    • No issues for on-heap Store implementations

    • Persistent ones will cope just fine (i.e. recover)

    • Distributed ones will force some .dealWithUnconsistentCache() cases

  • Have a checked, do it all yourself, interface of some kind

  • Postponing the work until all CRUD operations are implemented

Travis CI

  • Lacks archiving, more work for us to do, but that’s the work we’d want to be part of the S in CIaaS

  • Louis to take ownership and most probably move to cloudbees…​

Eclipse & Gradle

  • Hung to check the Gradle plugin

  • Eclipse plugin in gradle build is on master now

Sep 4, 2014 - Hangout on Air

Recording available here on YouTube

Review some proposal on CacheManager and Cache subtyping & their matching Builder

We want CacheBuilder to create instances of types:

  1. Unmanaged(ShortLived)Cache

  2. UnmanagedLongLivedCache

While CacheManagerBuilder create:

  1. (ShortLived)CacheManager

  2. LongLivedCacheManager

which manages Cache, i.e. not Unmanaged ones. LongLived exposes the methods to delete 'persistent' data (i.e. that outlives the life of the JVM). A Cache is closed or destroyed through the CacheManager.

Initial API issue break down

Issues are now ordered on waffle.io:

  1. 'API' labeled issues for public API require

    1. JavaDoc

  2. 'API' labeled issues that are about SPI, require

    1. JavaDoc

    2. Tester of some kind, that

  3. 'Enhancement' labeled issues require

    1. JavaDoc, as required

    2. Unit tests

    3. If ported from the 2.x line, best is to have decent coverage on the responsibilities the class will keep, prior to refactoring it; then refactor and add/tweak tests as required

CIaaS

  1. drone.io 'failed'

  2. codeship.io 'failed'

  3. travis-ci.org 'testing…​'

  4. cloudbees.com 'todo'

Aug 28, 2014 - Hangout on Air

Recording available here on YouTube

CacheManagerBuilder and CacheBuilder

Let’s try to introduce a type hierarchy for both Cache and CacheManager that the builder would actually build, narrowing the type down à la Quartz 2.0 builders.

PersistentCache cache = newCacheBuilder() // (1)
  .diskPersistent(
    cfg // (3)
  ) // (2)
  .build(); // (4)
  1. static method that creates a builder: Builder<Cache>

  2. narrows to the builder’s type down to Builder<PersistentCache>

  3. cfg actually defines the mode to use for persistence, eg: expect data on disk; expect none; use data if there; wipe data if there; wipe data on Cache.close()

  4. actually builds the PersistentCache

Alex to make an actual proposal by next week.

CacheManager-less Cache instances

  • Keep these, where the user is actually responsible to provide services

  • Only these Cache's type would expose .close()

  • CacheManager managed Cache instances would be 'closed' through the CacheManager

  • To further lifecycle PersistentCache instance, managed by a CacheManager, the latter could expose some method to retrieve DiskPersisted (interface with minimal lifecycle methods) instances; e.g.

Iterable<Map.Entry<String, DiskPersisted>> it = cacheManager.getManaged(DiskPersisted.class);
it.next().value() // (1)
 .deleteOnDiskFiles(); // (2)
  1. DiskPersisted could expose methods around lifecycling the data on disk only. No Cache methods

  2. Implies Cache.close(), i.e. clear all 'VM transient' data and delete data from disk.

Aug 21, 2014 - Hangout on Air

Recording available here on YouTube

org.ehcache.Cache vs. org.ehcache.spi.cache.Store

Cache<K, V> backed by a Store<K, Element<V>>

  1. Rename Element

  2. Try Store<K, Element<V>> for now

Roles

How much can be solved by having the Cache call into some Store.process(K, EntryProcessor<K, V, T>): T equivalent?

  1. Cache Roles

    1. Expiry

    2. Public EntryListeners

    3. Cache lifecycle

    4. CacheLoaders

    5. CacheWriters

  2. Store Roles

    1. Store by Value vs. Ref.

    2. Eviction & (private) EvictionListeners

Other items

Integrate 107 TCK

Created issue #21

What’s with the sizeof modules ?

  1. Hibernate to be integrated within the h2lc module there

  2. Groovy, either:

    1. @candrews takes ownership, or

    2. we find someone within TC/SAG to do so (unidentified yet though)