From ab24cc5aef003902d5d9c8bdbc2ef01416c149ee Mon Sep 17 00:00:00 2001
From: Jonathan Shook
- *
During Adapter Initialization, Op Mapping, Op Synthesis, or Op Execution, + * you may need access to the objects in (the or a) space cache. You can build the + * type of context needed and then provide this function to provide new instances + * when needed.
* + * @return A cache of named objects + */ + DriverSpaceCache extends S> getSpaceCache(); + + /** * @return A function which can initialize a new S */ default FunctionA DriverSpaceCache is simply a place to hold something like a + * client instance and all associated objects for quick and easy access. Each + * space cache is simply a named and separate cache of objects. This is provided + * as a convenient way to keep object state around which may be needed during the + * course of executing operations with a driver or API. By naming each space, it + * becomes possible for tests to create and use separate logical instances of + * a client API for advanced testing. The default instance should simply be named + * {@code default}
+ * + *Most native drivers use some combination of fluent, functional, and declarative + * patterns. These usually require you to keep access to a set of core + * state-holding objects in order to construct new elements to drive operations with. + * An example of this would be creating a statement from a session. It is necessary + * to keep the session around in for when you create new statements. Maintaining + * the session object is considered an essential part of idiomatic and efficient + * use of the API. Further, you may have builders or factories that are created + * from the session which should be cached as well. Keeping all these objects + * together requires attaching them to a cohesive owning object -- That is the space + * cache.
+ * + *You might want to create multiple session contexts in order to test out + * non-trivial behavior in advanced testing scenarios. To do this dynamically, i.e. + * acquire some named space cache, simply call the {@link #get(String)}
method + * with the name of the space you want to use. This value can be provided as a + * dynamic field in your op mapping ({@link io.nosqlbench.engine.api.activityimpl.OpMapper}) + * or synthesis ({@link io.nosqlbench.engine.api.activityimpl.OpDispenser}) + * implementation. + * + * @param