annotate src/main/java/alice/datasegment/LocalDataSegmentManager.java @ 345:8f71c3e6f11d

Change directory structure Maven standard
author sugi
date Wed, 16 Apr 2014 18:26:07 +0900
parents
children 388e7d4b0624
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
345
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
1 package alice.datasegment;
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
2
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
3 import java.util.concurrent.ConcurrentHashMap;
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
4 import java.util.concurrent.LinkedBlockingQueue;
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
5 import java.util.concurrent.ThreadPoolExecutor;
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
6 import java.util.concurrent.TimeUnit;
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
7
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
8 import org.apache.log4j.Logger;
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
9
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
10 import alice.codesegment.CodeSegment;
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
11
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
12 public class LocalDataSegmentManager extends DataSegmentManager {
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
13
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
14 private String reverseKey = "local";
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
15 private ConcurrentHashMap<String, DataSegmentKey> dataSegments = new ConcurrentHashMap<String, DataSegmentKey>();
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
16 private Logger logger = Logger.getLogger("local");
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
17
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
18 private ThreadPoolExecutor dataSegmentExecutor = new ThreadPoolExecutor(Runtime.getRuntime().availableProcessors(), // initial number of threads
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
19 Runtime.getRuntime().availableProcessors(),
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
20 Integer.MAX_VALUE, // keepAliveTime
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
21 TimeUnit.SECONDS,
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
22 new LinkedBlockingQueue<Runnable>());
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
23
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
24 public LocalDataSegmentManager() {
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
25 new Thread(replyThread, "LocalDataSegmentManager-replyCommand").start();
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
26 }
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
27
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
28 private class RunCommand implements Runnable {
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
29
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
30 DataSegmentKey key;
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
31 Command cmd;
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
32
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
33 public RunCommand(DataSegmentKey key, Command cmd) {
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
34 this.key = key;
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
35 this.cmd = cmd;
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
36 }
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
37
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
38 @Override
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
39 public void run() {
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
40 key.runCommand(cmd);
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
41 }
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
42
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
43 }
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
44
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
45 public void submitCommand(DataSegmentKey key, Command cmd) {
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
46 dataSegmentExecutor.execute(new RunCommand(key, cmd));
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
47 }
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
48
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
49 public DataSegmentKey getDataSegmentKey(String key) {
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
50 DataSegmentKey dsKey = dataSegments.get(key);
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
51 if (dsKey != null)
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
52 return dsKey;
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
53 if (key == null)
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
54 return null;
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
55 DataSegmentKey newDataSegmentKey = new DataSegmentKey();
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
56 DataSegmentKey dataSegmentKey = dataSegments.putIfAbsent(key, newDataSegmentKey);
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
57 if (dataSegmentKey == null) {
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
58 dataSegmentKey = newDataSegmentKey;
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
59 }
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
60 return dataSegmentKey;
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
61 }
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
62
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
63 @Override
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
64 public void put(String key, Object val) {
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
65 DataSegmentKey dataSegmentKey = getDataSegmentKey(key);
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
66 Command cmd = new Command(CommandType.PUT, null, key, val, 0, 0, null, null, reverseKey);
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
67 dataSegmentKey.runCommand(cmd);
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
68 if (logger.isDebugEnabled())
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
69 logger.debug(cmd.getCommandString());
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
70 }
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
71
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
72 @Override
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
73 public void quickPut(String key, Object val) {
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
74 put(key, val);
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
75 }
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
76
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
77 /**
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
78 * Enqueue update command to the queue of each DataSegment key
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
79 */
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
80
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
81 @Override
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
82 public void update(String key, Object val) {
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
83 DataSegmentKey dataSegmentKey = getDataSegmentKey(key);
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
84 Command cmd = new Command(CommandType.UPDATE, null, key, val, 0, 0, null, null, reverseKey);
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
85 dataSegmentKey.runCommand(cmd);
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
86 if (logger.isDebugEnabled())
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
87 logger.debug(cmd.getCommandString());
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
88 }
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
89
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
90
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
91 @Override
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
92 public void quickUpdate(String key, Object val) {
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
93 update(key, val);
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
94 }
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
95
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
96
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
97
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
98 @Override
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
99 public void take(Receiver receiver, CodeSegment cs) {
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
100 DataSegmentKey dataSegmentKey = getDataSegmentKey(receiver.key);
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
101 int seq = this.seq.getAndIncrement();
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
102 Command cmd = new Command(CommandType.TAKE, receiver, receiver.key, null, receiver.index, seq, replyQueue, cs, null);
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
103 dataSegmentKey.runCommand(cmd);
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
104 if (logger.isDebugEnabled())
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
105 logger.debug(cmd.getCommandString());
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
106 }
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
107
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
108 @Override
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
109 public void quickTake(Receiver receiver, CodeSegment cs) {
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
110 take(receiver, cs);
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
111 }
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
112
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
113 @Override
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
114 public void peek(Receiver receiver, CodeSegment cs) {
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
115 DataSegmentKey dataSegmentKey = getDataSegmentKey(receiver.key);
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
116 int seq = this.seq.getAndIncrement();
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
117 Command cmd = new Command(CommandType.PEEK, receiver, receiver.key, null, receiver.index, seq, replyQueue, cs, null);
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
118 dataSegmentKey.runCommand(cmd);
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
119 if (logger.isDebugEnabled())
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
120 logger.debug(cmd.getCommandString());
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
121 }
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
122
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
123 @Override
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
124 public void quickPeek(Receiver receiver, CodeSegment cs) {
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
125 peek(receiver, cs);
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
126 }
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
127
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
128
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
129 @Override
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
130 public void remove(String key) {
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
131 DataSegmentKey dataSegmentKey = getDataSegmentKey(key);
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
132 Command cmd = new Command(CommandType.REMOVE, null, key, null, 0, 0, replyQueue, null, null);
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
133 dataSegmentKey.runCommand(cmd);
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
134 if (logger.isDebugEnabled())
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
135 logger.debug(cmd.getCommandString());
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
136 }
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
137
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
138 @Override public void finish() {
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
139 System.exit(0);
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
140 }
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
141
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
142 @Override
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
143 public void close() {
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
144
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
145 }
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
146
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
147 public void recommand(Receiver receiver, CodeSegment cs) {
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
148 DataSegmentKey dataSegmentKey = getDataSegmentKey(receiver.key);
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
149 int seq = this.seq.getAndIncrement();
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
150 Command cmd = new Command(receiver.type, receiver, receiver.key, null, receiver.index, seq, replyQueue, cs, null);
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
151 dataSegmentKey.runCommand(cmd);
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
152 if (logger.isDebugEnabled())
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
153 logger.debug(cmd.getCommandString());
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
154
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
155 }
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
156
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
157 @Override
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
158 public void ping(String returnKey) {
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
159
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
160 }
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
161
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
162 @Override
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
163 public void response(String returnKey) {
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
164
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
165 }
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
166
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
167 @Override
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
168 public void shutdown(String key) {
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
169
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
170 }
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
171
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
172 }