view src/alice/datasegment/LocalDataSegmentManager.java @ 44:73158dc54c59

fix peek api
author kazz <kazz@cr.ie.u-ryukyu.ac.jp>
date Sat, 04 Feb 2012 01:34:57 +0900
parents f9334781344a
children 17f88fd202ae
line wrap: on
line source

package alice.datasegment;

import org.apache.log4j.Logger;
import org.msgpack.type.Value;

import alice.codesegment.CodeSegment;
import alice.datasegment.CommandType;

public class LocalDataSegmentManager extends DataSegmentManager {
	
	public String reverseKey = "local";
	
	private Logger logger = Logger.getLogger("local");
	
	public LocalDataSegmentManager() {
		new Thread(replyThread, "LocalDataSegmentManager").start();
	}
	
	public DataSegmentKey getDataSegmentKey(String key) {
		if (key == null) {
			return null;
		}
		DataSegmentKey newDataSegmentKey = new DataSegmentKey(key);
		DataSegmentKey dataSegmentKey = dataSegments.putIfAbsent(key, newDataSegmentKey);
		if (dataSegmentKey == null) {
			newDataSegmentKey.runKeyThread();
			dataSegmentKey = newDataSegmentKey;
		}
		return dataSegmentKey;
	}
	
	@Override
	public void put(String key, Value val, CodeSegment cs) {
		DataSegmentKey dataSegmentKey = getDataSegmentKey(key);
		Command cmd = new Command(CommandType.PUT, null, key, val, 0, 0, replyQueue, cs, reverseKey);
		dataSegmentKey.addCommand(cmd);
		logger.debug(cmd.getCommandString());
	}

	@Override
	public void update(String key, Value val, CodeSegment cs) {
		DataSegmentKey dataSegmentKey = getDataSegmentKey(key);
		Command cmd = new Command(CommandType.UPDATE, null, key, val, 0, 0, replyQueue, cs, reverseKey);
		dataSegmentKey.addCommand(cmd);
		logger.debug(cmd.getCommandString());
	}

	@Override
	public void take(Receiver receiver, String key, int index, CodeSegment cs) {
		DataSegmentKey dataSegmentKey = getDataSegmentKey(key);
		int seq = this.seq.getAndIncrement();
		Command cmd = new Command(CommandType.TAKE, receiver, key, null, index, seq, replyQueue, cs, null);
		seqHash.put(seq, cmd);
		dataSegmentKey.addCommand(cmd);
		logger.debug(cmd.getCommandString());
	}

	@Override
	public void peek(Receiver receiver, String key, int index, CodeSegment cs) {
		DataSegmentKey dataSegmentKey = getDataSegmentKey(key);
		int seq = this.seq.getAndIncrement();
		Command cmd = new Command(CommandType.PEEK, receiver, key, null, index, seq, replyQueue, cs, null);
		seqHash.put(seq, cmd);
		dataSegmentKey.addCommand(cmd);
		logger.debug(cmd.getCommandString());
	}

	@Override
	public void remove(String key) {
		DataSegmentKey dataSegmentKey = getDataSegmentKey(key);
		Command cmd = new Command(CommandType.REMOVE, null, key, null, 0, 0, replyQueue, null, null);
		dataSegmentKey.addCommand(cmd);
		logger.debug(cmd.getCommandString());
	}
	
	@Override public void finish() {
		System.exit(0);
	}

	@Override
	public void close() {
		
	}
	
}