diff --git a/hazelcast/include/hazelcast/client/proxy/TransactionalMapImpl.h b/hazelcast/include/hazelcast/client/proxy/TransactionalMapImpl.h index 56832ea56..822174bcd 100644 --- a/hazelcast/include/hazelcast/client/proxy/TransactionalMapImpl.h +++ b/hazelcast/include/hazelcast/client/proxy/TransactionalMapImpl.h @@ -47,7 +47,8 @@ class HAZELCAST_API TransactionalMapImpl : public TransactionalObject boost::future> put_data( const serialization::pimpl::data& key, - const serialization::pimpl::data& value); + const serialization::pimpl::data& value, + std::chrono::milliseconds ttl); boost::future set_data(const serialization::pimpl::data& key, const serialization::pimpl::data& value); @@ -86,6 +87,8 @@ class HAZELCAST_API TransactionalMapImpl : public TransactionalObject TransactionalMapImpl(const std::string& name, txn::TransactionProxy& transaction_proxy); + + static const std::chrono::milliseconds UNSET; }; } // namespace proxy } // namespace client diff --git a/hazelcast/include/hazelcast/client/transactional_map.h b/hazelcast/include/hazelcast/client/transactional_map.h index 923f8a652..b99747191 100644 --- a/hazelcast/include/hazelcast/client/transactional_map.h +++ b/hazelcast/include/hazelcast/client/transactional_map.h @@ -62,7 +62,23 @@ class HAZELCAST_API transactional_map : public proxy::TransactionalMapImpl template boost::future> put(const K& key, const V& value) { - return to_object(put_data(to_data(key), to_data(value))); + return to_object(put_data(to_data(key), to_data(value), UNSET)); + } + + /** + * Transactional implementation of imap#put(key, value, ttl). + * + * The object to be put will be accessible only in the current transaction + * context till transaction is committed. + * + * @see imap#put(key, value, ttl) + */ + template + boost::future> put(const K& key, + const V& value, + std::chrono::milliseconds ttl) + { + return to_object(put_data(to_data(key), to_data(value), ttl)); } /** diff --git a/hazelcast/src/hazelcast/client/transactions.cpp b/hazelcast/src/hazelcast/client/transactions.cpp index 7766a1004..85fd23c69 100644 --- a/hazelcast/src/hazelcast/client/transactions.cpp +++ b/hazelcast/src/hazelcast/client/transactions.cpp @@ -324,6 +324,9 @@ client_transaction_util::transaction_exception_factory::rethrow( } // namespace txn namespace proxy { + +const std::chrono::milliseconds proxy::TransactionalMapImpl::UNSET{ -1 }; + TransactionalMapImpl::TransactionalMapImpl( const std::string& name, txn::TransactionProxy& transaction_proxy) @@ -369,7 +372,8 @@ TransactionalMapImpl::is_empty() boost::future> TransactionalMapImpl::put_data(const serialization::pimpl::data& key, - const serialization::pimpl::data& value) + const serialization::pimpl::data& value, + std::chrono::milliseconds ttl) { auto request = protocol::codec::transactionalmap_put_encode( @@ -378,8 +382,7 @@ TransactionalMapImpl::put_data(const serialization::pimpl::data& key, util::get_current_thread_id(), key, value, - std::chrono::duration_cast(get_timeout()) - .count()); + std::chrono::duration_cast(ttl).count()); return invoke_and_get_future>( request);