提交 e2690921 编写于 作者: N Nikita Koksharov

Fixed - RBitSet object couldn't be used as nested object. #1751

上级 60352b84
......@@ -38,7 +38,7 @@ import org.redisson.command.CommandBatchService;
public class RedissonBitSet extends RedissonExpirable implements RBitSet {
public RedissonBitSet(CommandAsyncExecutor connectionManager, String name) {
super(connectionManager, name);
super(null, connectionManager, name);
}
@Override
......
......@@ -101,7 +101,7 @@ public abstract class RedissonObject implements RObject {
@Override
public RFuture<Long> sizeInMemoryAsync() {
return commandExecutor.writeAsync(getName(), RedisCommands.MEMORY_USAGE, getName());
return commandExecutor.writeAsync(getName(), StringCodec.INSTANCE, RedisCommands.MEMORY_USAGE, getName());
}
public final RFuture<Long> sizeInMemoryAsync(List<Object> keys) {
......@@ -124,7 +124,7 @@ public abstract class RedissonObject implements RObject {
@Override
public RFuture<Void> renameAsync(String newName) {
return commandExecutor.writeAsync(getName(), RedisCommands.RENAME, getName(), newName);
return commandExecutor.writeAsync(getName(), StringCodec.INSTANCE, RedisCommands.RENAME, getName(), newName);
}
@Override
......@@ -134,7 +134,7 @@ public abstract class RedissonObject implements RObject {
@Override
public RFuture<Void> migrateAsync(String host, int port, int database, long timeout) {
return commandExecutor.writeAsync(getName(), RedisCommands.MIGRATE, host, port, getName(), database, timeout);
return commandExecutor.writeAsync(getName(), StringCodec.INSTANCE, RedisCommands.MIGRATE, host, port, getName(), database, timeout);
}
@Override
......@@ -144,7 +144,7 @@ public abstract class RedissonObject implements RObject {
@Override
public RFuture<Void> copyAsync(String host, int port, int database, long timeout) {
return commandExecutor.writeAsync(getName(), RedisCommands.MIGRATE, host, port, getName(), database, timeout, "COPY");
return commandExecutor.writeAsync(getName(), StringCodec.INSTANCE, RedisCommands.MIGRATE, host, port, getName(), database, timeout, "COPY");
}
@Override
......@@ -154,7 +154,7 @@ public abstract class RedissonObject implements RObject {
@Override
public RFuture<Boolean> moveAsync(int database) {
return commandExecutor.writeAsync(getName(), RedisCommands.MOVE, getName(), database);
return commandExecutor.writeAsync(getName(), StringCodec.INSTANCE, RedisCommands.MOVE, getName(), database);
}
@Override
......@@ -164,7 +164,7 @@ public abstract class RedissonObject implements RObject {
@Override
public RFuture<Boolean> renamenxAsync(String newName) {
return commandExecutor.writeAsync(getName(), RedisCommands.RENAMENX, getName(), newName);
return commandExecutor.writeAsync(getName(), StringCodec.INSTANCE, RedisCommands.RENAMENX, getName(), newName);
}
@Override
......@@ -174,7 +174,7 @@ public abstract class RedissonObject implements RObject {
@Override
public RFuture<Boolean> deleteAsync() {
return commandExecutor.writeAsync(getName(), RedisCommands.DEL_BOOL, getName());
return commandExecutor.writeAsync(getName(), StringCodec.INSTANCE, RedisCommands.DEL_BOOL, getName());
}
@Override
......@@ -184,7 +184,7 @@ public abstract class RedissonObject implements RObject {
@Override
public RFuture<Boolean> unlinkAsync() {
return commandExecutor.writeAsync(getName(), RedisCommands.UNLINK_BOOL, getName());
return commandExecutor.writeAsync(getName(), StringCodec.INSTANCE, RedisCommands.UNLINK_BOOL, getName());
}
@Override
......@@ -194,7 +194,7 @@ public abstract class RedissonObject implements RObject {
@Override
public RFuture<Boolean> touchAsync() {
return commandExecutor.writeAsync(getName(), codec, RedisCommands.TOUCH, getName());
return commandExecutor.writeAsync(getName(), StringCodec.INSTANCE, RedisCommands.TOUCH, getName());
}
@Override
......@@ -204,7 +204,7 @@ public abstract class RedissonObject implements RObject {
@Override
public RFuture<Boolean> isExistsAsync() {
return commandExecutor.readAsync(getName(), codec, RedisCommands.EXISTS, getName());
return commandExecutor.readAsync(getName(), StringCodec.INSTANCE, RedisCommands.EXISTS, getName());
}
@Override
......
......@@ -1070,12 +1070,7 @@ public class CommandAsyncService implements CommandAsyncExecutor {
}
private <R, V> void handleReference(RPromise<R> mainPromise, R res) {
try {
mainPromise.trySuccess((R) tryHandleReference(res));
} catch (Exception e) {
//fall back and let other part of the code handle the type conversion.
mainPromise.trySuccess(res);
}
mainPromise.trySuccess((R) tryHandleReference(res));
}
protected Object tryHandleReference(Object o) {
......@@ -1198,7 +1193,7 @@ public class CommandAsyncService implements CommandAsyncExecutor {
}
return RedissonObjectFactory.fromReference(redissonRx, (RedissonReference) res);
} catch (Exception exception) {
return res;
throw new IllegalStateException(exception);
}
}
......
......@@ -84,7 +84,9 @@ public class RedissonObjectBuilder {
public void store(RObject ar, String fieldName, RMap<String, Object> liveMap) {
Codec codec = ar.getCodec();
codecProvider.registerCodec((Class) codec.getClass(), codec);
if (codec != null) {
codecProvider.registerCodec((Class) codec.getClass(), codec);
}
liveMap.fastPut(fieldName,
new RedissonReference(ar.getClass(), ar.getName(), codec));
}
......
......@@ -171,14 +171,18 @@ public class RedissonObjectFactory {
Class<?> clazz = object.getClass().getInterfaces()[0];
RObject rObject = ((RObject) object);
config.getReferenceCodecProvider().registerCodec((Class) rObject.getCodec().getClass(), rObject.getCodec());
if (rObject.getCodec() != null) {
config.getReferenceCodecProvider().registerCodec((Class) rObject.getCodec().getClass(), rObject.getCodec());
}
return new RedissonReference(clazz, rObject.getName(), rObject.getCodec());
}
if (object instanceof RObjectReactive && !(object instanceof RLiveObject)) {
Class<?> clazz = object.getClass().getInterfaces()[0];
RObjectReactive rObject = ((RObjectReactive) object);
config.getReferenceCodecProvider().registerCodec((Class) rObject.getCodec().getClass(), rObject.getCodec());
if (rObject.getCodec() != null) {
config.getReferenceCodecProvider().registerCodec((Class) rObject.getCodec().getClass(), rObject.getCodec());
}
return new RedissonReference(clazz, rObject.getName(), rObject.getCodec());
}
......
......@@ -2,8 +2,10 @@ package org.redisson;
import java.util.Collection;
import java.util.List;
import java.util.Map;
import java.util.concurrent.TimeUnit;
import static org.junit.Assert.*;
import static org.assertj.core.api.Assertions.*;
import com.fasterxml.jackson.databind.DeserializationFeature;
import com.fasterxml.jackson.databind.ObjectMapper;
......@@ -19,6 +21,21 @@ import org.redisson.config.Config;
*/
public class RedissonReferenceTest extends BaseTest {
@Test
public void testBitSet() {
RMap<String, RBitSet> data = redisson.getMap("data-00");
RBitSet bs = redisson.getBitSet("data-01");
bs.set(5);
bs.set(7);
data.put("a", bs);
assertThat(data.entrySet()).hasSize(1);
for (Map.Entry<String, RBitSet> entry : data.entrySet()) {
assertThat(entry.getValue().get(5)).isTrue();
assertThat(entry.getValue().get(7)).isTrue();
}
}
@Test
public void testBasic() {
RBucket<Object> b1 = redisson.getBucket("b1");
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册