use of jp.ossc.nimbus.service.publish.RequestTimeoutException in project nimbus by nimbus-org.
the class DistributedSharedContextService method save.
public void save(Object key, long timeout) throws Exception {
if (isMain()) {
if (contextStore != null) {
sharedContextArray[getDataNodeIndex(key)].save(key, timeout);
} else {
throw new UnsupportedOperationException();
}
} else {
try {
Message message = serverConnection.createMessage(subject, key == null ? null : key.toString());
Set receiveClients = serverConnection.getReceiveClientIds(message);
if (receiveClients.size() != 0) {
message.setObject(new DistributedSharedContextEvent(DistributedSharedContextEvent.EVENT_SAVE, new Object[] { key, new Long(timeout) }));
try {
Message[] responses = serverConnection.request(message, isClient ? clientSubject : subject, null, 1, timeout);
Object ret = responses[0].getObject();
responses[0].recycle();
if (ret instanceof Throwable) {
throw new SharedContextSendException((Throwable) ret);
}
} catch (RequestTimeoutException e) {
throw new SharedContextTimeoutException(e);
}
}
} catch (MessageException e) {
throw new SharedContextSendException(e);
} catch (MessageSendException e) {
throw new SharedContextSendException(e);
}
}
}
use of jp.ossc.nimbus.service.publish.RequestTimeoutException in project nimbus by nimbus-org.
the class DistributedSharedContextService method rehash.
public synchronized void rehash(long timeout) throws SharedContextSendException, SharedContextTimeoutException {
if (!isRehashEnabled) {
return;
}
if (isMain()) {
try {
Message message = serverConnection.createMessage(subject, Integer.toString(DistributedSharedContextEvent.EVENT_GET_DIST_INFO));
Set receiveClients = serverConnection.getReceiveClientIds(message);
if (receiveClients.size() == 0) {
DistributeGrid grid = new DistributeGrid();
grid.addDistributeInfo(distributeInfo);
grid.rehash();
distributeInfo.apply(distributeInfo, sharedContextArray);
} else {
message.setObject(new DistributedSharedContextEvent(DistributedSharedContextEvent.EVENT_GET_DIST_INFO, new Long(timeout)));
long start = System.currentTimeMillis();
Message[] responses = null;
try {
responses = serverConnection.request(message, 0, timeout);
} catch (RequestTimeoutException e) {
throw new SharedContextTimeoutException("Timeout has occurred to get state of distribution.", e);
}
final boolean isNoTimeout = timeout <= 0;
timeout = isNoTimeout ? timeout : timeout - (System.currentTimeMillis() - start);
DistributeGrid grid = new DistributeGrid();
grid.addDistributeInfo(distributeInfo);
for (int i = 0; i < responses.length; i++) {
grid.addDistributeInfo((DistributeInfo) responses[i].getObject());
responses[i].recycle();
}
grid.rehash();
RehashResponseCallBack callback = new RehashResponseCallBack();
Map increaseDistributeInfos = grid.getIncreaseDistributeInfos();
DistributeInfo info = (DistributeInfo) increaseDistributeInfos.remove(getId());
if (info != null) {
info.apply(distributeInfo, sharedContextArray);
}
if (increaseDistributeInfos.size() != 0) {
callback.setResponseCount(increaseDistributeInfos.size());
Iterator infos = increaseDistributeInfos.values().iterator();
while (infos.hasNext()) {
info = (DistributeInfo) infos.next();
Message rehashMessage = serverConnection.createMessage(subject, Integer.toString(DistributedSharedContextEvent.EVENT_REHASH));
rehashMessage.setObject(new DistributedSharedContextEvent(DistributedSharedContextEvent.EVENT_REHASH, info));
rehashMessage.addDestinationId(info.getId());
serverConnection.request(rehashMessage, 1, timeout, callback);
}
callback.waitResponse(timeout);
}
Map decreaseDistributeInfos = grid.getDecreaseDistributeInfos();
info = (DistributeInfo) decreaseDistributeInfos.remove(getId());
if (info != null) {
info.apply(distributeInfo, sharedContextArray);
}
if (decreaseDistributeInfos.size() != 0) {
callback.setResponseCount(decreaseDistributeInfos.size());
Iterator infos = decreaseDistributeInfos.values().iterator();
while (infos.hasNext()) {
info = (DistributeInfo) infos.next();
Message rehashMessage = serverConnection.createMessage(subject, Integer.toString(DistributedSharedContextEvent.EVENT_REHASH));
rehashMessage.setObject(new DistributedSharedContextEvent(DistributedSharedContextEvent.EVENT_REHASH, info));
rehashMessage.addDestinationId(info.getId());
serverConnection.request(rehashMessage, 1, timeout, callback);
}
callback.waitResponse(timeout);
}
}
} catch (MessageException e) {
throw new SharedContextSendException(e);
} catch (MessageSendException e) {
throw new SharedContextSendException(e);
}
} else {
try {
Message message = serverConnection.createMessage(subject, Integer.toString(DistributedSharedContextEvent.EVENT_REHASH_REQUEST));
Set receiveClients = serverConnection.getReceiveClientIds(message);
if (receiveClients.size() != 0) {
message.setObject(new DistributedSharedContextEvent(DistributedSharedContextEvent.EVENT_REHASH_REQUEST, new Long(timeout)));
try {
Message[] responses = serverConnection.request(message, isClient ? clientSubject : subject, null, 1, timeout);
Object ret = responses[0].getObject();
responses[0].recycle();
if (ret instanceof Throwable) {
throw new SharedContextSendException((Throwable) ret);
}
} catch (RequestTimeoutException e) {
throw new SharedContextTimeoutException(e);
}
}
} catch (MessageException e) {
throw new SharedContextSendException(e);
} catch (MessageSendException e) {
throw new SharedContextSendException(e);
}
}
}
use of jp.ossc.nimbus.service.publish.RequestTimeoutException in project nimbus by nimbus-org.
the class DistributedSharedContextService method load.
public void load(Object key, long timeout) throws Exception {
if (isMain()) {
if (contextStore != null) {
contextStore.load(this, key);
} else {
throw new UnsupportedOperationException();
}
} else {
try {
Message message = serverConnection.createMessage(subject, key == null ? null : key.toString());
Set receiveClients = serverConnection.getReceiveClientIds(message);
if (receiveClients.size() != 0) {
message.setObject(new DistributedSharedContextEvent(DistributedSharedContextEvent.EVENT_LOAD, key));
try {
Message[] responses = serverConnection.request(message, isClient ? clientSubject : subject, null, 1, timeout);
Object ret = responses[0].getObject();
responses[0].recycle();
if (ret instanceof Throwable) {
throw new SharedContextSendException((Throwable) ret);
}
} catch (RequestTimeoutException e) {
throw new SharedContextTimeoutException(e);
}
}
} catch (MessageException e) {
throw new SharedContextSendException(e);
} catch (MessageSendException e) {
throw new SharedContextSendException(e);
}
}
}
use of jp.ossc.nimbus.service.publish.RequestTimeoutException in project nimbus by nimbus-org.
the class DistributedSharedContextService method save.
public synchronized void save(long timeout) throws Exception {
if (isMain()) {
if (contextStore != null) {
if (isClearBeforeSave) {
contextStore.clear();
}
if (parallelRequestQueueHandlerContainer == null) {
for (int i = 0; i < sharedContextArray.length; i++) {
sharedContextArray[i].save(timeout);
}
} else {
DefaultQueueService responseQueue = new DefaultQueueService();
try {
responseQueue.create();
responseQueue.start();
} catch (Exception e) {
}
responseQueue.accept();
for (int i = 0; i < sharedContextArray.length; i++) {
AsynchContext asynchContext = new AsynchContext(new SaveParallelRequest(sharedContextArray[i], timeout), responseQueue);
parallelRequestQueueHandlerContainer.push(asynchContext);
}
for (int i = 0; i < sharedContextArray.length; i++) {
AsynchContext asynchContext = (AsynchContext) responseQueue.get();
if (asynchContext == null) {
break;
} else {
try {
asynchContext.checkError();
} catch (Exception e) {
throw e;
} catch (Error e) {
throw e;
} catch (Throwable th) {
// 起きないはず
throw new SharedContextSendException(th);
}
}
}
}
} else {
throw new UnsupportedOperationException();
}
} else {
try {
Message message = serverConnection.createMessage(subject, null);
Set receiveClients = serverConnection.getReceiveClientIds(message);
if (receiveClients.size() != 0) {
message.setObject(new DistributedSharedContextEvent(DistributedSharedContextEvent.EVENT_SAVE, new Long(timeout)));
try {
Message[] responses = serverConnection.request(message, isClient ? clientSubject : subject, null, 1, timeout);
Object ret = responses[0].getObject();
responses[0].recycle();
if (ret instanceof Throwable) {
throw new SharedContextSendException((Throwable) ret);
}
} catch (RequestTimeoutException e) {
throw new SharedContextTimeoutException(e);
}
}
} catch (MessageException e) {
throw new SharedContextSendException(e);
} catch (MessageSendException e) {
throw new SharedContextSendException(e);
}
}
}
use of jp.ossc.nimbus.service.publish.RequestTimeoutException in project nimbus by nimbus-org.
the class DistributedSharedContextService method setRehashEnabled.
public void setRehashEnabled(boolean isEnabled) throws SharedContextSendException, SharedContextTimeoutException {
if (getState() == STARTED) {
try {
Message message = serverConnection.createMessage(subject, Integer.toString(DistributedSharedContextEvent.EVENT_REHASH_SWITCH));
message.setSubject(clientSubject, null);
Set receiveClients = serverConnection.getReceiveClientIds(message);
if (receiveClients.size() != 0) {
message.setObject(new DistributedSharedContextEvent(DistributedSharedContextEvent.EVENT_REHASH_SWITCH, isEnabled ? Boolean.TRUE : Boolean.FALSE));
try {
Message[] responses = serverConnection.request(message, isClient ? clientSubject : subject, null, 0, defaultTimeout);
for (int i = 0; i < responses.length; i++) {
Object ret = responses[i].getObject();
responses[i].recycle();
if (ret instanceof Throwable) {
throw new SharedContextSendException((Throwable) ret);
}
}
} catch (RequestTimeoutException e) {
throw new SharedContextTimeoutException(e);
}
}
} catch (MessageException e) {
throw new SharedContextSendException(e);
} catch (MessageSendException e) {
throw new SharedContextSendException(e);
}
}
isRehashEnabled = isEnabled;
}
Aggregations