[ 
https://issues.apache.org/jira/browse/NIFI-4504?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16304166#comment-16304166
 ] 

ASF GitHub Bot commented on NIFI-4504:
--------------------------------------

Github user ijokarumawak commented on a diff in the pull request:

    https://github.com/apache/nifi/pull/2284#discussion_r158755719
  
    --- Diff: 
nifi-nar-bundles/nifi-redis-bundle/nifi-redis-extensions/src/main/java/org/apache/nifi/redis/service/RedisDistributedMapCacheClientService.java
 ---
    @@ -187,6 +191,16 @@ public void close() throws IOException {
             });
         }
     
    +    @Override
    +    public <K, V> V removeAndGet(K key, Serializer<K> keySerializer, 
Deserializer<V> valueDeserializer) throws IOException {
    +        return withConnection(redisConnection -> {
    +            final byte[] k = serialize(key, keySerializer);
    +            final byte[] v = redisConnection.get(k);
    +            redisConnection.del(k);
    +            return valueDeserializer.deserialize(v);
    --- End diff --
    
    For multiple operations like these `get` and `del`, Redis provides 
[multi](https://redis.io/commands/multi) to make those as an atomic execution. 
Since other methods are implemented similarly, I don't have strong opinion to 
use multi here, but we can submit another JIRA for future improvement. How do 
you think?
    
    http://www.rediscookbook.org/get_and_delete.html
    
https://stackoverflow.com/questions/11148383/how-to-implement-redis-multi-exec-by-using-spring-data-redis


> SimpleMapCache/PersistentMapCache: Add removeAndGet and removeByPatternAndGet
> -----------------------------------------------------------------------------
>
>                 Key: NIFI-4504
>                 URL: https://issues.apache.org/jira/browse/NIFI-4504
>             Project: Apache NiFi
>          Issue Type: Improvement
>    Affects Versions: 1.4.0
>            Reporter: Jon Kessler
>            Assignee: Michael Moser
>            Priority: Minor
>
> Typical map implementations return the value that was removed when performing 
> a remove. Because you couldn't update the existing remove methods without it 
> being a breaking change I suggest adding new versions of the remove and 
> removeByPattern methods that return the removed value(s).
> These changes should also be applied up the chain to any class that makes use 
> of these classes such as the MapCacheServer and 
> AtomicDistributedMapCacheClient.



--
This message was sent by Atlassian JIRA
(v6.4.14#64029)

Reply via email to