From b5688fc07ea3d277e17ec386f983040b92353518 Mon Sep 17 00:00:00 2001 From: Nikita Date: Thu, 29 Mar 2018 12:22:25 +0300 Subject: [PATCH] RObject.copy method added --- .../java/org/redisson/RedissonObject.java | 10 ++++++++ .../main/java/org/redisson/api/RObject.java | 12 +++++++++- .../java/org/redisson/api/RObjectAsync.java | 14 ++++++++++- .../java/org/redisson/RedissonBucketTest.java | 23 +++++++++++++++++++ 4 files changed, 57 insertions(+), 2 deletions(-) diff --git a/redisson/src/main/java/org/redisson/RedissonObject.java b/redisson/src/main/java/org/redisson/RedissonObject.java index 39bf5a541..927624228 100644 --- a/redisson/src/main/java/org/redisson/RedissonObject.java +++ b/redisson/src/main/java/org/redisson/RedissonObject.java @@ -103,6 +103,16 @@ public abstract class RedissonObject implements RObject { return commandExecutor.writeAsync(getName(), RedisCommands.MIGRATE, host, port, getName(), database, timeout); } + @Override + public void copy(String host, int port, int database, long timeout) { + get(copyAsync(host, port, database, timeout)); + } + + @Override + public RFuture copyAsync(String host, int port, int database, long timeout) { + return commandExecutor.writeAsync(getName(), RedisCommands.MIGRATE, host, port, getName(), database, timeout, "COPY"); + } + @Override public boolean move(int database) { return get(moveAsync(database)); diff --git a/redisson/src/main/java/org/redisson/api/RObject.java b/redisson/src/main/java/org/redisson/api/RObject.java index 12f265630..760ffd2f0 100644 --- a/redisson/src/main/java/org/redisson/api/RObject.java +++ b/redisson/src/main/java/org/redisson/api/RObject.java @@ -33,7 +33,7 @@ public interface RObject extends RObjectAsync { boolean touch(); /** - * Transfer an object from source Redis instance to destination Redis instance + * Copy object from source Redis instance to destination Redis instance * * @param host - destination host * @param port - destination port @@ -42,6 +42,16 @@ public interface RObject extends RObjectAsync { */ void migrate(String host, int port, int database, long timeout); + /** + * Copy object from source Redis instance to destination Redis instance + * + * @param host - destination host + * @param port - destination port + * @param database - destination database + * @param timeout - maximum idle time in any moment of the communication with the destination instance in milliseconds + */ + void copy(String host, int port, int database, long timeout); + /** * Move object to another database * diff --git a/redisson/src/main/java/org/redisson/api/RObjectAsync.java b/redisson/src/main/java/org/redisson/api/RObjectAsync.java index 072f7573d..11e44eedd 100644 --- a/redisson/src/main/java/org/redisson/api/RObjectAsync.java +++ b/redisson/src/main/java/org/redisson/api/RObjectAsync.java @@ -31,7 +31,7 @@ public interface RObjectAsync { RFuture touchAsync(); /** - * Transfer an object from source Redis instance to destination Redis instance + * Transfer object from source Redis instance to destination Redis instance * in async mode * * @param host - destination host @@ -42,6 +42,18 @@ public interface RObjectAsync { */ RFuture migrateAsync(String host, int port, int database, long timeout); + /** + * Copy object from source Redis instance to destination Redis instance + * in async mode + * + * @param host - destination host + * @param port - destination port + * @param database - destination database + * @param timeout - maximum idle time in any moment of the communication with the destination instance in milliseconds + * @return void + */ + RFuture copyAsync(String host, int port, int database, long timeout); + /** * Move object to another database in async mode * diff --git a/redisson/src/test/java/org/redisson/RedissonBucketTest.java b/redisson/src/test/java/org/redisson/RedissonBucketTest.java index 56c0cf925..f1e2a2bef 100755 --- a/redisson/src/test/java/org/redisson/RedissonBucketTest.java +++ b/redisson/src/test/java/org/redisson/RedissonBucketTest.java @@ -142,6 +142,29 @@ public class RedissonBucketTest extends BaseTest { runner.stop(); } + @Test + public void testCopy() throws FailedToStartRedisException, IOException, InterruptedException { + RedisProcess runner = new RedisRunner() + .appendonly(true) + .randomDir() + .randomPort() + .run(); + + RBucket bucket = redisson.getBucket("test"); + bucket.set("someValue"); + + bucket.copy(runner.getRedisServerBindAddress(), runner.getRedisServerPort(), 0, 5000); + + Config config = new Config(); + config.useSingleServer().setAddress(runner.getRedisServerAddressAndPort()); + RedissonClient r = Redisson.create(config); + + RBucket bucket2 = r.getBucket("test"); + assertThat(bucket2.get()).isEqualTo("someValue"); + assertThat(bucket.get()).isEqualTo("someValue"); + + runner.stop(); + } @Test public void testRename() {