Skip to content

Commit

Permalink
把复制与存储Map的API整合在一起
Browse files Browse the repository at this point in the history
  • Loading branch information
codefollower committed Apr 3, 2017
1 parent b87cf59 commit 76b4638
Show file tree
Hide file tree
Showing 14 changed files with 365 additions and 204 deletions.
82 changes: 3 additions & 79 deletions lealone-aose/src/main/java/org/lealone/aose/storage/AOMap.java
Expand Up @@ -17,14 +17,9 @@
*/
package org.lealone.aose.storage;

import java.io.IOException;
import java.nio.channels.ReadableByteChannel;
import java.nio.channels.WritableByteChannel;

import org.lealone.storage.Storage;
import org.lealone.storage.DelegatedStorageMap;
import org.lealone.storage.StorageMap;
import org.lealone.storage.StorageMapCursor;
import org.lealone.storage.type.DataType;

/**
* An adaptive optimization map
Expand All @@ -34,9 +29,8 @@
*
* @author zhh
*/
public class AOMap<K, V> implements StorageMap<K, V> {
public class AOMap<K, V> extends DelegatedStorageMap<K, V> {
private final Object sync = new Object();
private volatile StorageMap<K, V> map;
private volatile BufferedMap<K, V> bmap;

private volatile boolean writing;
Expand All @@ -49,7 +43,7 @@ public class AOMap<K, V> implements StorageMap<K, V> {
private int writeCount;

public AOMap(StorageMap<K, V> map) {
this.map = map;
super(map);
switchToBufferedMap(); // 默认最开始就使用BufferedMap
}

Expand Down Expand Up @@ -143,21 +137,6 @@ public int getWritePercent() {
return (int) (result * 100);
}

@Override
public String getName() {
return map.getName();
}

@Override
public DataType getKeyType() {
return map.getKeyType();
}

@Override
public DataType getValueType() {
return map.getValueType();
}

@Override
public V get(K key) {
readCount++;
Expand Down Expand Up @@ -246,79 +225,24 @@ public boolean areValuesEqual(Object a, Object b) {
return map.areValuesEqual(a, b);
}

@Override
public int size() {
return map.size();
}

@Override
public long sizeAsLong() {
return map.sizeAsLong();
}

@Override
public boolean containsKey(K key) {
readCount++;
return map.containsKey(key);
}

@Override
public boolean isEmpty() {
return map.isEmpty();
}

@Override
public boolean isInMemory() {
return map.isInMemory();
}

@Override
public StorageMapCursor<K, V> cursor(K from) {
readCount++;
return map.cursor(from);
}

@Override
public void clear() {
map.clear();
}

@Override
public void remove() {
map.remove();
}

@Override
public boolean isClosed() {
return map.isClosed();
}

@Override
public void close() {
map.close();
AOStorageService.removeAOMap(this);
}

@Override
public void save() {
map.save();
}

@Override
public void transferTo(WritableByteChannel target, K firstKey, K lastKey) throws IOException {
map.transferTo(target, firstKey, lastKey);
}

@Override
public void transferFrom(ReadableByteChannel src) throws IOException {
map.transferFrom(src);
}

@Override
public Storage getStorage() {
return map.getStorage();
}

@Override
public K append(V value) {
beforeWrite();
Expand Down
Expand Up @@ -17,17 +17,14 @@
*/
package org.lealone.aose.storage;

import java.io.IOException;
import java.nio.channels.ReadableByteChannel;
import java.nio.channels.WritableByteChannel;
import java.util.Iterator;
import java.util.Map.Entry;
import java.util.NoSuchElementException;
import java.util.concurrent.Callable;
import java.util.concurrent.ConcurrentSkipListMap;

import org.lealone.common.util.DataUtils;
import org.lealone.storage.Storage;
import org.lealone.storage.DelegatedStorageMap;
import org.lealone.storage.StorageMap;
import org.lealone.storage.StorageMapBase;
import org.lealone.storage.StorageMapCursor;
Expand All @@ -42,33 +39,18 @@
* @author zhh
*/
@SuppressWarnings("unchecked")
public class BufferedMap<K, V> implements StorageMap<K, V>, Callable<Void> {
private final StorageMap<K, V> map;
public class BufferedMap<K, V> extends DelegatedStorageMap<K, V> implements Callable<Void> {
private final ConcurrentSkipListMap<Object, Object> buffer = new ConcurrentSkipListMap<>();

public BufferedMap(StorageMap<K, V> map) {
super(map);
this.map = map;
}

public StorageMap<K, V> getMap() {
return map;
}

@Override
public String getName() {
return map.getName();
}

@Override
public DataType getKeyType() {
return map.getKeyType();
}

@Override
public DataType getValueType() {
return map.getValueType();
}

@Override
public V get(K key) {
Object v = buffer.get(key);
Expand Down Expand Up @@ -407,24 +389,4 @@ public V getValue() {
return value;
}
}

@Override
public void transferTo(WritableByteChannel target, K firstKey, K lastKey) throws IOException {
map.transferTo(target, firstKey, lastKey);
}

@Override
public void transferFrom(ReadableByteChannel src) throws IOException {
map.transferFrom(src);
}

@Override
public Storage getStorage() {
return map.getStorage();
}

@Override
public K append(V value) {
return map.append(value);
}
}
Expand Up @@ -28,7 +28,6 @@
import org.lealone.db.Session;
import org.lealone.db.value.ValueLong;
import org.lealone.net.NetEndpoint;
import org.lealone.replication.Replication;
import org.lealone.replication.ReplicationSession;
import org.lealone.storage.Storage;
import org.lealone.storage.StorageCommand;
Expand All @@ -55,7 +54,7 @@
* @author H2 Group
* @author zhh
*/
public class BTreeMap<K, V> extends StorageMapBase<K, V> implements Replication {
public class BTreeMap<K, V> extends StorageMapBase<K, V> {

/**
* A builder for this class.
Expand Down Expand Up @@ -733,7 +732,7 @@ private NetEndpoint getLocalEndpoint() {
}

@Override
public Object put(Object key, Object value, DataType valueType, Session session) {
public Object replicationPut(Object key, Object value, DataType valueType, Session session) {
List<NetEndpoint> replicationEndpoints = getReplicationEndpoints(key);
NetEndpoint localEndpoint = getLocalEndpoint();

Expand Down Expand Up @@ -761,7 +760,7 @@ public Object put(Object key, Object value, DataType valueType, Session session)
}

@Override
public Object get(Object key, Session session) {
public Object replicationGet(Object key, Session session) {
List<NetEndpoint> replicationEndpoints = getReplicationEndpoints(key);
NetEndpoint localEndpoint = getLocalEndpoint();

Expand Down Expand Up @@ -880,7 +879,7 @@ public K append(V value) {
}

@Override
public Object append(Object value, DataType valueType, Session session) {
public Object replicationAppend(Object value, DataType valueType, Session session) {
List<NetEndpoint> replicationEndpoints = getLastPageReplicationEndpoints();
NetEndpoint localEndpoint = getLocalEndpoint();

Expand Down
Expand Up @@ -17,24 +17,20 @@
*/
package org.lealone.replication;

import java.nio.ByteBuffer;
import java.util.List;

import org.lealone.db.Session;
import org.lealone.net.NetEndpoint;
import org.lealone.storage.type.DataType;

public interface Replication {
public interface ReplicationMap {

List<NetEndpoint> getReplicationEndpoints(Object key);

Object put(Object key, Object value, DataType valueType, Session session);
Object replicationPut(Object key, Object value, DataType valueType, Session session);

Object get(Object key, Session session);
Object replicationGet(Object key, Session session);

void addLeafPage(ByteBuffer splitKey, ByteBuffer page);
Object replicationAppend(Object value, DataType valueType, Session session);

void removeLeafPage(ByteBuffer key);

Object append(Object value, DataType valueType, Session session);
}

0 comments on commit 76b4638

Please sign in to comment.