1 #ifndef ISPN_HOTROD_REMOTECACHE_H
2 #define ISPN_HOTROD_REMOTECACHE_H
25 namespace infinispan {
61 #ifndef SWIG // Let SWIG ignore this method
62 template<
typename Function>
63 inline std::future<typename std::result_of<Function()>::type> goAsync(Function&& f,
64 std::function<
typename std::result_of<Function()>::type (
typename std::result_of<Function()>::type)> success, std::function<
typename std::result_of<Function()>::type (std::exception&)> fail)
66 auto fq= [=]{
try{
return success==0 ? f() : success(f());}
67 catch (std::exception& ex)
68 {
if (fail!=0){
return fail(ex);}
71 return std::async(fq);
110 V*
get(
const K& key) {
123 std::future<V*>
getAsync(
const K& key, std::function<V* (V*)> success=
nullptr, std::function<V* (std::exception&)> fail=
nullptr) {
125 auto f= [=] {
return this->
get(*pKey); };
126 return goAsync(f,success,fail);
149 V*
put(
const K& key,
const V& val, uint64_t lifespan = 0, uint64_t maxIdle = 0) {
171 V*
put(
const K& key,
const V& val, uint64_t lifespan,
TimeUnit lifespanUnit) {
172 return put(key, val, lifespan, lifespanUnit, 0,
SECONDS);
197 V*
put(
const K& key,
const V& val, uint64_t lifespan,
TimeUnit lifespanUnit, uint64_t maxIdle,
TimeUnit maxIdleUnit) {
198 return (V *)
base_put(&key, &val, toSeconds(lifespan, lifespanUnit), toSeconds(maxIdle, maxIdleUnit));
209 std::future<V*>
putAsync(
const K& key,
const V& val, uint64_t lifespan = 0, uint64_t maxIdle = 0, std::function<V* (V*)> success=
nullptr, std::function<V* (std::exception&)> fail=
nullptr) {
210 auto pKey=&key, pVal=&val;
211 auto f=[=] {
return this->
put(*pKey,*pVal,lifespan,maxIdle); };
212 return goAsync(f,success,fail);
223 V*
putAsync(
const K& key,
const V& val, uint64_t lifespan,
TimeUnit lifespanUnit, std::function<V* (V*)> success=
nullptr, std::function<V* (std::exception&)> fail=
nullptr) {
224 auto pKey=&key, pVal=&val;
225 auto f= [=] {
return this->
put(*pKey,*pVal,lifespan,lifespanUnit); };
226 return goAsync(f,success,fail);
237 V*
putAsync(
const K& key,
const V& val, uint64_t lifespan,
TimeUnit lifespanUnit, uint64_t maxIdle,
TimeUnit maxIdleUnit, std::function<V* (V*)> success=
nullptr, std::function<V* (std::exception&)> fail=
nullptr) {
238 auto pKey=&key, pVal=&val;
239 auto f= [=] { this->
put(*pKey,*pVal,lifespan, lifespanUnit,maxIdle,maxIdleUnit); };
240 return goAsync(f,success,fail);
254 V*
putIfAbsent(
const K& key,
const V& val, uint64_t lifespan = 0, uint64_t maxIdle = 0) {
284 return (V *)
base_putIfAbsent(&key, &val, toSeconds(lifespan, lifespanUnit), toSeconds(maxIdle, maxIdleUnit));
296 void putAll(
const std::map<K, V>& map, uint64_t lifespan = 0, uint64_t maxIdle = 0) {
310 void putAll(
const std::map<K, V>& map, uint64_t lifespan,
TimeUnit lifespanUnit) {
327 void putAll(
const std::map<K, V>& map, uint64_t lifespan,
TimeUnit lifespanUnit, uint64_t maxIdle,
TimeUnit maxIdleUnit) {
328 uint64_t lifespanMillis = toSeconds(lifespan, lifespanUnit);
329 uint64_t maxIdleMillis = toSeconds(maxIdle, maxIdleUnit);
331 for (
typename std::map<K, V>::const_iterator it = map.begin(); it != map.end(); ++it) {
332 put(it->first, it->second, lifespanMillis, maxIdleMillis);
344 std::future<void>
putAllAsync(
const std::map<K, V>& map, uint64_t lifespan = 0, uint64_t maxIdle = 0, std::function<V* (V*)> success=
nullptr, std::function<
void (std::exception&)> fail=
nullptr) {
346 auto f = [=] { this->
putAll(*pMap,lifespan, maxIdle); };
347 return goAsync(f,success,fail);
358 std::future<void>
putAllAsync(
const std::map<K, V>& map, uint64_t lifespan,
TimeUnit lifespanUnit, std::function<V* (V*)> success=
nullptr, std::function<
void (std::exception&)> fail=
nullptr) {
360 auto f = [=] { this->
putAll(*pMap,lifespan, lifespanUnit); };
361 return goAsync(f,success,fail);
372 std::future<void>
putAllAsync(
const std::map<K, V>& map, uint64_t lifespan,
TimeUnit lifespanUnit, uint64_t maxIdle,
TimeUnit maxIdleUnit, std::function<V* (V*)> success=
nullptr, std::function<
void (std::exception&)> fail=
nullptr) {
374 auto f = [=] { this->
putAll(*pMap,lifespan, lifespanUnit, maxIdle, maxIdleUnit); };
375 return goAsync(f,success,fail);
389 V*
replace(
const K& key,
const V& val, uint64_t lifespan = 0, uint64_t maxIdle = 0) {
420 return (V *)
base_replace(&key, &val, toSeconds(lifespan, lifespanUnit), toSeconds(maxIdle, maxIdleUnit));
434 V*
replace(
const K& key,
const V& oldVal,
const V& val, uint64_t lifespan = 0, uint64_t maxIdle = 0) {
448 V*
replace(
const K& key,
const V& oldVal,
const V& val, uint64_t lifespan,
TimeUnit lifespanUnit) {
449 return replace(key, oldVal, val, lifespan, lifespanUnit, 0,
SECONDS);
464 V*
replace(
const K& key,
const V& oldVal,
const V& val, uint64_t lifespan,
TimeUnit lifespanUnit, uint64_t maxIdle,
TimeUnit maxIdleUnit) {
474 V*
remove(
const K& key) {
509 const K& key,
const V& val,
510 uint64_t version, uint64_t lifespan = 0, uint64_t maxIdle = 0) {
523 uint64_t version, uint64_t lifespan, uint64_t maxIdle, std::function<V* (V*)> success=
nullptr, std::function<
void (std::exception&)> fail=
nullptr) {
526 return goAsync(f,success,fail);
563 return std::make_pair(std::shared_ptr<V>((V *) value), version);
578 return std::make_pair(std::shared_ptr<V>((V *) value), metadata);
584 std::map<std::shared_ptr<K>, std::shared_ptr<V> >
getBulk() {
591 std::map<std::shared_ptr<K>, std::shared_ptr<V> >
getBulk(
int nrOfEntries) {
595 std::map<std::shared_ptr<K>, std::shared_ptr<V> > result;
597 for (
size_t i = 0; i < mbuf.
size(); i++) {
598 result.insert(std::make_pair(
599 std::shared_ptr<K>((K*)data[i].key), std::shared_ptr<V>((V*)data[i].value)));
609 std::vector<unsigned char>
execute(
const std::string& name,
const std::map<std::string,std::string>& args)
620 QueryResponse
query(
const QueryRequest &qr)
631 std::vector<unsigned char>
query(std::vector<unsigned char> qr,
size_t size)
654 std::set<std::shared_ptr<K> > result;
655 for (
size_t i = 0; i < p.
size(); ++i) {
656 result.insert(std::shared_ptr<K>((K*)p.
data()[i]));
689 std::map<std::string, std::string>
stats() {
693 (portable::string::convert(), portable::string::convert());
727 RemoteCacheBase(other), keyMarshaller(other.keyMarshaller), valueMarshaller(other.valueMarshaller)
729 setMarshallers(
this, &keyMarshall, &valueMarshall, &keyUnmarshall, &valueUnmarshall);
733 RemoteCacheBase::operator=(other);
734 keyMarshaller = other.keyMarshaller;
735 valueMarshaller = other.valueMarshaller;
736 setMarshallers(
this, &keyMarshall, &valueMarshall, &keyUnmarshall, &valueUnmarshall);
742 setMarshallers(
this, &keyMarshall, &valueMarshall, &keyUnmarshall, &valueUnmarshall);
745 uint64_t toSeconds(uint64_t time,
TimeUnit unit) {
749 result = (uint64_t) ceil(time / 1000000000.0);
752 result = (uint64_t) ceil(time / 1000000.0);
755 result = (uint64_t) ceil(time / 1000.0);
764 result = time * 3600;
767 result = time * 86400;
770 std::stringstream ss;
771 ss <<
"Unhandled TimeUnit specified: " << unit <<
".";
772 throw std::invalid_argument(ss.str());
778 static void keyMarshall(
void *thisp,
const void* key, std::vector<char> &buf) {
779 ((RemoteCache<K, V> *) thisp)->keyMarshaller->marshall(*(
const K *) key, buf);
781 static void valueMarshall(
void* thisp,
const void* val, std::vector<char> &buf) {
782 ((RemoteCache<K, V> *)thisp)->valueMarshaller->marshall(*(
const V *) val, buf);
784 static void* keyUnmarshall(
void *thisp,
const std::vector<char> &buf) {
785 return ((RemoteCache<K, V> *) thisp)->keyMarshaller->unmarshall(buf);
787 static void* valueUnmarshall(
void* thisp,
const std::vector<char> &buf) {
788 return ((RemoteCache<K, V> *)thisp)->valueMarshaller->unmarshall(buf);
791 portable::counting_ptr<Marshaller<K> > keyMarshaller;
792 portable::counting_ptr<Marshaller<V> > valueMarshaller;
void putAll(const std::map< K, V > &map, uint64_t lifespan, TimeUnit lifespanUnit, uint64_t maxIdle, TimeUnit maxIdleUnit)
Definition: RemoteCache.h:327
HR_EXTERN QueryResponse base_query(const QueryRequest &qr)
std::map< std::shared_ptr< K >, std::shared_ptr< V > > getBulk(int nrOfEntries)
Definition: RemoteCache.h:591
V * putIfAbsent(const K &key, const V &val, uint64_t lifespan, TimeUnit lifespanUnit)
Definition: RemoteCache.h:267
std::vector< unsigned char > query(std::vector< unsigned char > qr, size_t size)
Definition: RemoteCache.h:631
HR_EXTERN void * base_replace(const void *key, const void *value, int64_t life, int64_t idle)
V * put(const K &key, const V &val, uint64_t lifespan, TimeUnit lifespanUnit, uint64_t maxIdle, TimeUnit maxIdleUnit)
Definition: RemoteCache.h:197
std::string getName()
Definition: RemoteCache.h:81
std::pair< std::shared_ptr< V >, VersionedValue > getWithVersion(const K &key)
Definition: RemoteCache.h:560
std::map< K, V > std_map() const
Definition: portable.h:355
std::set< std::pair< K, V > > entrySet()
Definition: RemoteCache.h:640
Definition: portable.h:128
HR_EXTERN bool base_replaceWithVersion(const void *key, const void *value, int64_t version, int64_t life, int64_t idle)
HR_EXTERN void base_ping()
HR_EXTERN bool base_containsKey(const void *key)
HR_EXTERN void base_withFlags(Flag flag)
HR_EXTERN void setMarshallers(void *rc, MarshallHelperFn kf, MarshallHelperFn vf, UnmarshallHelperFn ukf, UnmarshallHelperFn uvf)
static const char * getProtocolVersionCString()
Definition: Version.h:33
V * putAsync(const K &key, const V &val, uint64_t lifespan, TimeUnit lifespanUnit, uint64_t maxIdle, TimeUnit maxIdleUnit, std::function< V *(V *)> success=nullptr, std::function< V *(std::exception &)> fail=nullptr)
Definition: RemoteCache.h:237
HR_EXTERN void base_getBulk(int size, portable::map< void *, void * > &mbuf)
size_t size() const
Definition: portable.h:263
Definition: CacheTopologyInfo.h:10
bool containsKey(const K &key)
Definition: RemoteCache.h:483
HR_EXTERN void * base_remove(const void *key)
std::map< std::string, std::string > stats()
Definition: RemoteCache.h:689
HR_EXTERN void * base_put(const void *key, const void *value, int64_t life, int64_t idle)
V * replace(const K &key, const V &oldVal, const V &val, uint64_t lifespan=0, uint64_t maxIdle=0)
Definition: RemoteCache.h:434
std::set< std::shared_ptr< K > > keySet()
Definition: RemoteCache.h:650
void putAll(const std::map< K, V > &map, uint64_t lifespan=0, uint64_t maxIdle=0)
Definition: RemoteCache.h:296
RemoteCache< K, V > & withFlags(Flag flags)
Definition: RemoteCache.h:721
std::vector< V > values()
Definition: RemoteCache.h:680
HR_EXTERN bool base_removeWithVersion(const void *key, int64_t version)
V * putIfAbsent(const K &key, const V &val, uint64_t lifespan, TimeUnit lifespanUnit, uint64_t maxIdle, TimeUnit maxIdleUnit)
Definition: RemoteCache.h:283
Definition: portable.h:275
std::map< std::shared_ptr< K >, std::shared_ptr< V > > getBulk()
Definition: RemoteCache.h:584
RemoteCache< K, V > & operator=(const RemoteCache &other)
Definition: RemoteCache.h:732
HR_EXTERN const char * base_getName()
Definition: RemoteCache.h:58
Definition: TimeUnit.h:14
Definition: TimeUnit.h:18
HR_EXTERN void base_keySet(int scope, portable::vector< void * > &sbuf)
V * putIfAbsent(const K &key, const V &val, uint64_t lifespan=0, uint64_t maxIdle=0)
Definition: RemoteCache.h:254
Definition: TimeUnit.h:15
std::future< void > putAllAsync(const std::map< K, V > &map, uint64_t lifespan, TimeUnit lifespanUnit, std::function< V *(V *)> success=nullptr, std::function< void(std::exception &)> fail=nullptr)
Definition: RemoteCache.h:358
std::future< V * > putAsync(const K &key, const V &val, uint64_t lifespan=0, uint64_t maxIdle=0, std::function< V *(V *)> success=nullptr, std::function< V *(std::exception &)> fail=nullptr)
Definition: RemoteCache.h:209
V * replace(const K &key, const V &oldVal, const V &val, uint64_t lifespan, TimeUnit lifespanUnit)
Definition: RemoteCache.h:448
Definition: portable.h:152
uint64_t size()
Definition: RemoteCache.h:665
std::future< V * > getAsync(const K &key, std::function< V *(V *)> success=nullptr, std::function< V *(std::exception &)> fail=nullptr)
Definition: RemoteCache.h:123
HR_EXTERN void base_clear()
std::vector< unsigned char > execute(const std::string &name, const std::map< std::string, std::string > &args)
Definition: RemoteCache.h:609
std::future< void > putAllAsync(const std::map< K, V > &map, uint64_t lifespan=0, uint64_t maxIdle=0, std::function< V *(V *)> success=nullptr, std::function< void(std::exception &)> fail=nullptr)
Definition: RemoteCache.h:344
CacheTopologyInfo getCacheTopologyInfo()
Definition: RemoteCache.h:712
void clear()
Definition: RemoteCache.h:700
size_t size() const
Definition: portable.h:389
bool isEmpty()
Definition: RemoteCache.h:673
V * put(const K &key, const V &val, uint64_t lifespan, TimeUnit lifespanUnit)
Definition: RemoteCache.h:171
RemoteCache(const RemoteCache &other)
Definition: RemoteCache.h:726
HR_EXTERN std::vector< unsigned char > base_execute(const std::string &cmdName, const std::map< std::string, std::string > &args)
HR_EXTERN void * base_putIfAbsent(const void *key, const void *value, int64_t life, int64_t idle)
bool replaceWithVersion(const K &key, const V &val, uint64_t version, uint64_t lifespan=0, uint64_t maxIdle=0)
Definition: RemoteCache.h:508
std::string getVersion()
Definition: RemoteCache.h:90
Definition: RemoteCacheManager.h:39
Definition: TimeUnit.h:17
std::string getProtocolVersion()
Definition: RemoteCache.h:99
HR_EXTERN void * base_getWithVersion(const void *key, VersionedValue *version)
V * replace(const K &key, const V &oldVal, const V &val, uint64_t lifespan, TimeUnit lifespanUnit, uint64_t maxIdle, TimeUnit maxIdleUnit)
Definition: RemoteCache.h:464
V * replace(const K &key, const V &val, uint64_t lifespan, TimeUnit lifespanUnit, uint64_t maxIdle, TimeUnit maxIdleUnit)
Definition: RemoteCache.h:419
void ping()
Definition: RemoteCache.h:708
Definition: exceptions.h:117
HR_EXTERN CacheTopologyInfo base_getCacheTopologyInfo()
QueryResponse query(const QueryRequest &qr)
Definition: RemoteCache.h:620
const T * data() const
Definition: portable.h:258
HR_EXTERN void * base_getWithMetadata(const void *key, MetadataValue *metadata)
static const char * getVersionCString()
Definition: Version.h:42
TimeUnit
Definition: TimeUnit.h:13
Definition: RemoteCacheBase.h:32
HR_EXTERN std::vector< unsigned char > base_query_char(std::vector< unsigned char > qr, size_t size)
std::future< void > putAllAsync(const std::map< K, V > &map, uint64_t lifespan, TimeUnit lifespanUnit, uint64_t maxIdle, TimeUnit maxIdleUnit, std::function< V *(V *)> success=nullptr, std::function< void(std::exception &)> fail=nullptr)
Definition: RemoteCache.h:372
Definition: portable.h:269
HR_EXTERN uint64_t base_size()
bool containsValue(const V &val)
Definition: RemoteCache.h:491
V * replace(const K &key, const V &val, uint64_t lifespan, TimeUnit lifespanUnit)
Definition: RemoteCache.h:403
Definition: TimeUnit.h:16
Definition: TimeUnit.h:19
V * putAsync(const K &key, const V &val, uint64_t lifespan, TimeUnit lifespanUnit, std::function< V *(V *)> success=nullptr, std::function< V *(std::exception &)> fail=nullptr)
Definition: RemoteCache.h:223
Definition: TimeUnit.h:20
V * replace(const K &key, const V &val, uint64_t lifespan=0, uint64_t maxIdle=0)
Definition: RemoteCache.h:389
std::pair< std::shared_ptr< V >, MetadataValue > getWithMetadata(const K &key)
Definition: RemoteCache.h:575
std::future< void > replaceWithVersionAsync(const K &key, const V &val, uint64_t version, uint64_t lifespan, uint64_t maxIdle, std::function< V *(V *)> success=nullptr, std::function< void(std::exception &)> fail=nullptr)
Definition: RemoteCache.h:522
HR_EXTERN void base_stats(portable::map< portable::string, portable::string > &sbuf)
Definition: VersionedValue.h:9
V * put(const K &key, const V &val, uint64_t lifespan=0, uint64_t maxIdle=0)
Definition: RemoteCache.h:149
HR_EXTERN void * base_get(const void *key)
void putAll(const std::map< K, V > &map, uint64_t lifespan, TimeUnit lifespanUnit)
Definition: RemoteCache.h:310
const my_pair * data() const
Definition: portable.h:384
bool removeWithVersion(const K &key, uint64_t version)
Definition: RemoteCache.h:547