Skip to content

Commit

Permalink
refactor, use json instead of kryo
Browse files Browse the repository at this point in the history
  • Loading branch information
aleksandarskrbic committed Jun 1, 2020
1 parent 6be8a47 commit 99cb01c
Show file tree
Hide file tree
Showing 15 changed files with 51 additions and 91 deletions.
12 changes: 11 additions & 1 deletion pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -114,7 +114,7 @@
<scm>
<connection>scm:git:git://github.com/aleksandarskrbic/rocks4j.git</connection>
<developerConnection>scm:git:ssh://github.com:aleksandarskrbic/rocks4j.git</developerConnection>
<url>http://github.com/aleksandarskrbic/rocks4j/tree/1.1.1</url>
<url>http://github.com/aleksandarskrbic/rocks4j/tree/0.1.0</url>
</scm>

<dependencies>
Expand All @@ -133,6 +133,16 @@
<artifactId>kryo</artifactId>
<version>5.0.0-RC4</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>2.11.0</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.11.0</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-api</artifactId>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,19 +14,12 @@ public class RocksDBConfiguration {
public RocksDBConfiguration() {
}

public RocksDBConfiguration(
final String path,
final String name
) {
public RocksDBConfiguration(final String path, final String name) {
this.path = path;
this.name = name;
}

public RocksDBConfiguration(
final String path,
final String name,
final int threadCount
) {
public RocksDBConfiguration(final String path, final String name, final int threadCount) {
this.path = path;
this.name = name;
this.threadCount = threadCount;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
import org.rocksdb.RocksDB;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import static java.nio.file.Files.createDirectories;

/**
Expand All @@ -20,11 +21,10 @@ public abstract class RocksDBConnection {
public RocksDBConnection(final RocksDBConfiguration configuration) {
RocksDB.loadLibrary();

try {
final Options options = new Options().setCreateIfMissing(true);
final String root = System.getProperty("user.dir");
final String rocksDirectory = root + configuration.url();
final Path path = Paths.get(rocksDirectory);
try (final Options options = new Options().setCreateIfMissing(true)) {
final String home = System.getProperty("user.home");
final String url = home + "/" + configuration.url();
final Path path = Paths.get(url);
createDirectories(path);
rocksDB = RocksDB.open(options, path.toString());
} catch (final Exception exception) {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package com.github.aleksandarskrbic.rocks4j.repository;
package com.github.aleksandarskrbic.rocks4j.kv;

import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;
Expand All @@ -7,7 +7,6 @@
import java.util.Optional;
import com.github.aleksandarskrbic.rocks4j.configuration.RocksDBConfiguration;
import com.github.aleksandarskrbic.rocks4j.configuration.RocksDBConnection;
import com.github.aleksandarskrbic.rocks4j.kv.KeyValueRepository;
import com.github.aleksandarskrbic.rocks4j.kv.exception.DeleteAllFailedException;
import com.github.aleksandarskrbic.rocks4j.kv.exception.DeleteFailedException;
import com.github.aleksandarskrbic.rocks4j.kv.exception.FindFailedException;
Expand All @@ -28,9 +27,9 @@
* @param <K> Key type.
* @param <V> Value type.
*/
public class RocksDBKeyValueRepository<K, V> extends RocksDBConnection implements KeyValueRepository<K, V> {
public class KVStore<K, V> extends RocksDBConnection implements KeyValueStore<K, V> {

private static final Logger LOGGER = LoggerFactory.getLogger(RocksDBKeyValueRepository.class);
private static final Logger LOGGER = LoggerFactory.getLogger(KVStore.class);

private final Mapper<K> keyMapper;
private final Mapper<V> valueMapper;
Expand All @@ -41,7 +40,7 @@ public class RocksDBKeyValueRepository<K, V> extends RocksDBConnection implement
*
* @param configuration for {@link RocksDBConnection}.
*/
public RocksDBKeyValueRepository(final RocksDBConfiguration configuration) {
public KVStore(final RocksDBConfiguration configuration) {
super(configuration);
this.keyMapper = RocksDBMapperFactory.mapperFor(extractKeyType());
this.valueMapper = RocksDBMapperFactory.mapperFor(extractValueType());
Expand All @@ -53,37 +52,27 @@ public RocksDBKeyValueRepository(final RocksDBConfiguration configuration) {
* @param keyType for mapper.
* @param valueType for mapper.
*/
public RocksDBKeyValueRepository(
final RocksDBConfiguration configuration,
final Class<K> keyType,
final Class<V> valueType
) {
public KVStore(final RocksDBConfiguration configuration, final Class<K> keyType, final Class<V> valueType) {
super(configuration);
this.keyMapper = RocksDBMapperFactory.mapperFor(keyType);
this.valueMapper = RocksDBMapperFactory.mapperFor(valueType);
}

/**
* This constructor should be used if you want custom mappers.
*
* @param configuration for {@link RocksDBConnection}.
* @param keyMapper custom key mapper that implements {@link Mapper}.
* @param valueMapper custom value mapper that implements {@link Mapper}.
*/
public RocksDBKeyValueRepository(
final RocksDBConfiguration configuration,
final Mapper<K> keyMapper,
final Mapper<V> valueMapper
) {
public KVStore(final RocksDBConfiguration configuration, final Mapper<K> keyMapper, final Mapper<V> valueMapper) {
super(configuration);
this.keyMapper = keyMapper;
this.valueMapper = valueMapper;
}

@Override
public void save(
final K key,
final V value
) throws SerializationException, SaveFailedException {
public void save(final K key, final V value) throws SerializationException, SaveFailedException {
try {
final byte[] serializedKey = keyMapper.serialize(key);
final byte[] serializedValue = valueMapper.serialize(value);
Expand Down Expand Up @@ -197,7 +186,7 @@ private Type getGenericSuperClass() {
final Type superClass = getClass().getGenericSuperclass();

if (superClass instanceof Class<?>) {
throw new IllegalArgumentException("Internal error: TypeReference constructed without actual type information");
throw new IllegalArgumentException("Internal error: TypeReference constructed without actual type information.");
}

return superClass;
Expand All @@ -208,6 +197,6 @@ private Class<?> extractClass(final Type type) {
return (Class<?>) type;
}

throw new IllegalArgumentException("Internal error: TypeReference constructed without actual type information");
throw new IllegalArgumentException("Internal error: TypeReference constructed without actual type information.");
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@
* @param <K> Key type.
* @param <V> Value type.
*/
public interface KeyValueRepository<K, V> {
public interface KeyValueStore<K, V> {

/**
* Inserts key-value pair into RocksDB.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,10 +9,7 @@ public DeleteAllFailedException(final String message) {
super(message);
}

public DeleteAllFailedException(
final String message,
final Throwable throwable
) {
public DeleteAllFailedException(final String message, final Throwable throwable) {
super(message, throwable);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -9,10 +9,7 @@ public DeleteFailedException(final String message) {
super(message);
}

public DeleteFailedException(
final String message,
final Throwable throwable
) {
public DeleteFailedException(final String message, final Throwable throwable) {
super(message, throwable);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -9,10 +9,7 @@ public FindFailedException(final String message) {
super(message);
}

public FindFailedException(
final String message,
final Throwable throwable
) {
public FindFailedException(final String message, final Throwable throwable) {
super(message, throwable);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -9,10 +9,7 @@ public RocksIOException(final String message) {
super(message);
}

public RocksIOException(
final String message,
final Throwable throwable
) {
public RocksIOException(final String message, final Throwable throwable) {
super(message, throwable);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -9,10 +9,7 @@ public SaveFailedException(final String message) {
super(message);
}

public SaveFailedException(
final String message,
final Throwable throwable
) {
public SaveFailedException(final String message, final Throwable throwable) {
super(message, throwable);
}
}
Original file line number Diff line number Diff line change
@@ -1,48 +1,40 @@
package com.github.aleksandarskrbic.rocks4j.mapper;

import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import com.esotericsoftware.kryo.Kryo;
import com.esotericsoftware.kryo.KryoException;
import com.esotericsoftware.kryo.io.Input;
import com.esotericsoftware.kryo.io.Output;
import java.io.IOException;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.github.aleksandarskrbic.rocks4j.mapper.exception.DeserializationException;
import com.github.aleksandarskrbic.rocks4j.mapper.exception.SerializationException;

/**
* RocksDBMapper provides methods for serialization and deserialization using Kryo.
* RocksDBMapper provides methods for serialization and deserialization using JSON.
*
* @param <T> Value type that should be serialized or deserialized.
*/
public final class RocksDBMapper<T> implements Mapper<T> {

private final Class<T> type;
private final Kryo kryo = new Kryo();
private final ObjectMapper mapper;

public RocksDBMapper(final Class<T> type) {
this.type = type;
kryo.register(type);
this.mapper = new ObjectMapper();
}

@Override
public byte[] serialize(final T t) throws SerializationException {
try {
final ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
final Output output = new Output(outputStream);
kryo.writeObject(output, t);
output.flush();
output.close();
return outputStream.toByteArray();
} catch (final IllegalArgumentException | KryoException exception) {
return mapper.writeValueAsBytes(t);
} catch (final JsonProcessingException exception) {
throw new SerializationException(exception.getMessage(), exception);
}
}

@Override
public T deserialize(final byte[] bytes) throws DeserializationException {
try {
final ByteArrayInputStream inputStream = new ByteArrayInputStream(bytes);
final Input input = new Input(inputStream);
return kryo.readObject(input, type);
} catch (final IllegalArgumentException | KryoException exception) {
return mapper.readValue(bytes, type);
} catch (final IOException exception) {
throw new DeserializationException(exception.getMessage(), exception);
}
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
package com.github.aleksandarskrbic.rocks4j.mapper;

public abstract class RocksDBMapperFactory {
public interface RocksDBMapperFactory {

public static <T> RocksDBMapper<T> mapperFor(final Class<T> type) {
static <T> RocksDBMapper<T> mapperFor(final Class<T> type) {
return new RocksDBMapper<T>(type);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -9,10 +9,7 @@ public DeserializationException(final String message) {
super(message);
}

public DeserializationException(
final String message,
final Throwable throwable
) {
public DeserializationException(final String message, final Throwable throwable) {
super(message, throwable);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -11,10 +11,7 @@ public SerDeException(final String message) {
super(message);
}

public SerDeException(
final String message,
final Throwable throwable
) {
public SerDeException(final String message, final Throwable throwable) {
super(message, throwable);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -9,10 +9,7 @@ public SerializationException(final String message) {
super(message);
}

public SerializationException(
final String message,
final Throwable throwable
) {
public SerializationException(final String message, final Throwable throwable) {
super(message, throwable);
}
}

0 comments on commit 99cb01c

Please sign in to comment.