Skip to content

Commit

Permalink
Add put with ttl method to transactional map (hazelcast#1254)
Browse files Browse the repository at this point in the history
  • Loading branch information
JorgenPo committed Jan 23, 2025
1 parent 1ea56d8 commit 2fa2c73
Show file tree
Hide file tree
Showing 3 changed files with 27 additions and 5 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,8 @@ class HAZELCAST_API TransactionalMapImpl : public TransactionalObject

boost::future<boost::optional<serialization::pimpl::data>> put_data(
const serialization::pimpl::data& key,
const serialization::pimpl::data& value);
const serialization::pimpl::data& value,
std::chrono::milliseconds ttl);

boost::future<void> set_data(const serialization::pimpl::data& key,
const serialization::pimpl::data& value);
Expand Down Expand Up @@ -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
Expand Down
18 changes: 17 additions & 1 deletion hazelcast/include/hazelcast/client/transactional_map.h
Original file line number Diff line number Diff line change
Expand Up @@ -62,7 +62,23 @@ class HAZELCAST_API transactional_map : public proxy::TransactionalMapImpl
template<typename K, typename V, typename R = V>
boost::future<boost::optional<R>> put(const K& key, const V& value)
{
return to_object<R>(put_data(to_data(key), to_data(value)));
return to_object<R>(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<typename K, typename V, typename R = V>
boost::future<boost::optional<R>> put(const K& key,
const V& value,
std::chrono::milliseconds ttl)
{
return to_object<R>(put_data(to_data(key), to_data(value), ttl));
}

/**
Expand Down
9 changes: 6 additions & 3 deletions hazelcast/src/hazelcast/client/transactions.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down Expand Up @@ -369,7 +372,8 @@ TransactionalMapImpl::is_empty()

boost::future<boost::optional<serialization::pimpl::data>>
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(
Expand All @@ -378,8 +382,7 @@ TransactionalMapImpl::put_data(const serialization::pimpl::data& key,
util::get_current_thread_id(),
key,
value,
std::chrono::duration_cast<std::chrono::milliseconds>(get_timeout())
.count());
std::chrono::duration_cast<std::chrono::milliseconds>(ttl).count());

return invoke_and_get_future<boost::optional<serialization::pimpl::data>>(
request);
Expand Down

0 comments on commit 2fa2c73

Please sign in to comment.