diff --git a/rse/plugins/org.eclipse.dstore.core/src/org/eclipse/dstore/core/model/DataStore.java b/rse/plugins/org.eclipse.dstore.core/src/org/eclipse/dstore/core/model/DataStore.java index b8f91d37ad6..fe84ef8345f 100644 --- a/rse/plugins/org.eclipse.dstore.core/src/org/eclipse/dstore/core/model/DataStore.java +++ b/rse/plugins/org.eclipse.dstore.core/src/org/eclipse/dstore/core/model/DataStore.java @@ -42,6 +42,7 @@ * David McKnight (IBM) - [367096] [dstore] DataElement.isSpirit() may return true for newly created DStore objects * David McKnight (IBM) - [370260] [dstore] log the RSE version in server traces * David McKnight (IBM) - [373507] [dstore][multithread] reduce heap memory on disconnect for server + * David McKnight (IBM) - [385097] [dstore] DataStore spirit mechanism is not enabled *******************************************************************************/ package org.eclipse.dstore.core.model; @@ -161,6 +162,8 @@ public final class DataStore private RandomAccessFile _traceFile; private boolean _tracingOn; + private boolean _queriedSpiritState = false; // for the client - so we don't keep sending down the same query + private boolean _spiritModeOn = false; private boolean _spiritCommandReceived = false; private File _memLoggingFileHandle; @@ -2295,17 +2298,26 @@ public final class DataStore return synchronizedCommand(cmd, _dummy); } + /** + * Client calls this to start the spiriting mechanism on the server. The return value shouldn't be reliable here. + * Originally this was a synchronized command but that can slow connect time. Since no one should use the return value here, + * + * @return whether the server spirit state has been queried + */ public boolean queryServerSpiritState() { - DataElement spirittype = findObjectDescriptor(IDataStoreConstants.DATASTORE_SPIRIT_DESCRIPTOR); - if (spirittype == null) return false; - DataElement cmd = localDescriptorQuery(spirittype, IDataStoreConstants.C_START_SPIRIT, 2); - if (cmd == null) return false; - - DataElement status = synchronizedCommand(cmd, _dummy); - if ((status != null) && status.getName().equals(DataStoreResources.model_done)) - return true; - else return false; + if (!_queriedSpiritState){ + DataElement spirittype = findObjectDescriptor(IDataStoreConstants.DATASTORE_SPIRIT_DESCRIPTOR); + if (spirittype != null){ + DataElement cmd = localDescriptorQuery(spirittype, IDataStoreConstants.C_START_SPIRIT, 2); + + if (cmd != null){ + command(cmd, _dummy); // start + _queriedSpiritState = true; + } + } + } + return _queriedSpiritState; } public DataElement queryHostJVM() diff --git a/rse/plugins/org.eclipse.dstore.core/src/org/eclipse/dstore/core/model/DataStoreSchema.java b/rse/plugins/org.eclipse.dstore.core/src/org/eclipse/dstore/core/model/DataStoreSchema.java index 711aa463ed7..6ebaa25e8f7 100644 --- a/rse/plugins/org.eclipse.dstore.core/src/org/eclipse/dstore/core/model/DataStoreSchema.java +++ b/rse/plugins/org.eclipse.dstore.core/src/org/eclipse/dstore/core/model/DataStoreSchema.java @@ -1,5 +1,5 @@ /******************************************************************************** - * Copyright (c) 2002, 2008 IBM Corporation. All rights reserved. + * Copyright (c) 2002, 2012 IBM Corporation. All rights reserved. * This program and the accompanying materials are made available under the terms * of the Eclipse Public License v1.0 which accompanies this distribution, and is * available at http://www.eclipse.org/legal/epl-v10.html @@ -12,6 +12,7 @@ * * Contributors: * David McKnight (IBM) - [226561] [apidoc] Add API markup to RSE Javadocs where extend / implement is allowed + * David McKnight (IBM) - [385097] [dstore] DataStore spirit mechanism is not enabled ********************************************************************************/ package org.eclipse.dstore.core.model; @@ -332,7 +333,11 @@ public class DataStoreSchema _dataStore.createCommandDescriptor(rootD, "Notification", "*", C_NOTIFICATION, false); //$NON-NLS-1$ //$NON-NLS-2$ _dataStore.createCommandDescriptor(rootD, "Send Input", "*", C_SEND_INPUT, false); //$NON-NLS-1$ //$NON-NLS-2$ - + + // spirit stuff + DataElement spiritnode = _dataStore.createObjectDescriptor(_dataStore.getDescriptorRoot(), IDataStoreConstants.DATASTORE_SPIRIT_DESCRIPTOR); + _dataStore.createCommandDescriptor(spiritnode, "StartSpirit", "DataElementRemover", IDataStoreConstants.C_START_SPIRIT); //$NON-NLS-1$ //$NON-NLS-2$ + // both ends have this base schema, so mark each descriptor as updated for (int i = 0; i < schemaRoot.getNestedSize(); i++) diff --git a/rse/plugins/org.eclipse.dstore.core/src/org/eclipse/dstore/internal/core/util/DataElementRemover.java b/rse/plugins/org.eclipse.dstore.core/src/org/eclipse/dstore/internal/core/util/DataElementRemover.java index b740a69fa4b..77ce1e19997 100644 --- a/rse/plugins/org.eclipse.dstore.core/src/org/eclipse/dstore/internal/core/util/DataElementRemover.java +++ b/rse/plugins/org.eclipse.dstore.core/src/org/eclipse/dstore/internal/core/util/DataElementRemover.java @@ -19,6 +19,7 @@ * David McKnight (IBM) - [331922] [dstore] enable DataElement recycling * David McKnight (IBM) - [371401] [dstore][multithread] avoid use of static variables - causes memory leak after disconnect * David McKnight (IBM) - [373507] [dstore][multithread] reduce heap memory on disconnect for server + * David McKnight (IBM) - [385097] [dstore] DataStore spirit mechanism is not enabled *******************************************************************************/ package org.eclipse.dstore.internal.core.util; @@ -60,9 +61,6 @@ public class DataElementRemover extends Handler _queue = new LinkedList(); getTimes(); setWaitTime(_intervalTime); - DataElement spiritnode = _dataStore.createObjectDescriptor(_dataStore.getDescriptorRoot(), IDataStoreConstants.DATASTORE_SPIRIT_DESCRIPTOR); - _dataStore.createCommandDescriptor(spiritnode, "StartSpirit", "DataElementRemover", IDataStoreConstants.C_START_SPIRIT); //$NON-NLS-1$ //$NON-NLS-2$ - _dataStore.refresh(_dataStore.getDescriptorRoot()); } protected void getTimes()