From 04570d74c6f26105c790a594fd4925c3335df641 Mon Sep 17 00:00:00 2001 From: David McKnight Date: Mon, 21 Apr 2008 13:59:52 +0000 Subject: [PATCH] [227406][api][dstore] need apis for getting buffer size in IDataStoreProvider --- .../org/eclipse/dstore/core/miners/Miner.java | 18 ++++++++---- .../dstore/core/model/IDataStoreProvider.java | 20 ++++++++++++- .../dstore/internal/core/util/Sender.java | 7 ++++- .../dstore/internal/core/util/XMLparser.java | 4 +-- .../META-INF/MANIFEST.MF | 3 +- .../dstore/DStoreConnectorService.java | 25 ++++++++++++++++- .../dstore/files/DStoreFileService.java | 28 +++++++++++++------ .../services/dstore/files/DStoreHostFile.java | 9 +++--- .../DStoreFileSubSystemConfiguration.java | 16 +---------- 9 files changed, 90 insertions(+), 40 deletions(-) diff --git a/rse/plugins/org.eclipse.dstore.core/src/org/eclipse/dstore/core/miners/Miner.java b/rse/plugins/org.eclipse.dstore.core/src/org/eclipse/dstore/core/miners/Miner.java index fd4bd4e4f1f..1ec347f3802 100644 --- a/rse/plugins/org.eclipse.dstore.core/src/org/eclipse/dstore/core/miners/Miner.java +++ b/rse/plugins/org.eclipse.dstore.core/src/org/eclipse/dstore/core/miners/Miner.java @@ -33,7 +33,7 @@ import org.eclipse.dstore.core.model.ISchemaExtender; import org.eclipse.dstore.core.server.SystemServiceManager; /** - * Miner is the abstact base class of all DataStore extensions). + * Miner is the abstract base class of all DataStore extensions). * The DataStore framework knows how to load and route commands to miners * because it interfaces miners through the restricted set of interfaces declared here. * To add a new miner, developers must extend this class and implement the abstract methods declared here. @@ -42,8 +42,6 @@ public abstract class Miner extends Handler implements ISchemaExtender { - - public DataStore _dataStore; public DataElement _minerElement; public DataElement _minerData; public DataElement _minerTransient; @@ -203,8 +201,16 @@ implements ISchemaExtender { while (!_commandQueue.isEmpty()) { - DataElement cmd = (DataElement)_commandQueue.remove(0); - command(cmd); + try + { + DataElement cmd = (DataElement)_commandQueue.remove(0); + if (cmd != null){ + command(cmd); + } + } + catch (Exception e){ + e.printStackTrace(); + } } waitForInput(); } @@ -257,7 +263,7 @@ implements ISchemaExtender * @return the status of the command */ protected final DataElement command(DataElement command) - { + { String name = getCommandName(command); DataElement status = getCommandStatus(command); diff --git a/rse/plugins/org.eclipse.dstore.core/src/org/eclipse/dstore/core/model/IDataStoreProvider.java b/rse/plugins/org.eclipse.dstore.core/src/org/eclipse/dstore/core/model/IDataStoreProvider.java index 5604287afac..f13fad7ca82 100644 --- a/rse/plugins/org.eclipse.dstore.core/src/org/eclipse/dstore/core/model/IDataStoreProvider.java +++ b/rse/plugins/org.eclipse.dstore.core/src/org/eclipse/dstore/core/model/IDataStoreProvider.java @@ -11,12 +11,30 @@ * Emily Bruner, Mazen Faraj, Adrian Storisteanu, Li Ding, and Kent Hawley. * * Contributors: - * {Name} (company) - description of contribution. + * David McKnight (IBM) - [227406][api][dstore] need apis for getting buffer size in IDataStoreProvider ********************************************************************************/ package org.eclipse.dstore.core.model; + public interface IDataStoreProvider { public DataStore getDataStore(); + + /** + * Returns the upload buffer size preference. To be used by Dstore + * services to determine buffer size when uploading. + * + * @since 3.0 + */ + public int getBufferUploadSize(); + + /** + * Returns the download buffer size preference. To be used by + * Dstore services to determine buffer size when downloading. + * + * @since 3.0 + */ + public int getBufferDownloadSize(); + } \ No newline at end of file diff --git a/rse/plugins/org.eclipse.dstore.core/src/org/eclipse/dstore/internal/core/util/Sender.java b/rse/plugins/org.eclipse.dstore.core/src/org/eclipse/dstore/internal/core/util/Sender.java index afdac3aec21..194106793fc 100644 --- a/rse/plugins/org.eclipse.dstore.core/src/org/eclipse/dstore/internal/core/util/Sender.java +++ b/rse/plugins/org.eclipse.dstore.core/src/org/eclipse/dstore/internal/core/util/Sender.java @@ -60,10 +60,15 @@ public class Sender implements ISender _xmlGenerator = new XMLgenerator(_dataStore); try { - int bufferSize = _socket.getSendBufferSize(); + int bufferSize = _socket.getSendBufferSize() * 4; + System.out.println("buffer size = "+bufferSize); _socket.setSendBufferSize(bufferSize); _xmlGenerator.setBufferSize(bufferSize); + + int rbufferSize = _socket.getReceiveBufferSize() * 4; + System.out.println("rbuffer size = "+rbufferSize); + _socket.setReceiveBufferSize(rbufferSize); } catch (SocketException e) { diff --git a/rse/plugins/org.eclipse.dstore.core/src/org/eclipse/dstore/internal/core/util/XMLparser.java b/rse/plugins/org.eclipse.dstore.core/src/org/eclipse/dstore/internal/core/util/XMLparser.java index 220865bfd62..0f1b8bf9c84 100644 --- a/rse/plugins/org.eclipse.dstore.core/src/org/eclipse/dstore/internal/core/util/XMLparser.java +++ b/rse/plugins/org.eclipse.dstore.core/src/org/eclipse/dstore/internal/core/util/XMLparser.java @@ -167,7 +167,7 @@ public class XMLparser */ public void readFile(BufferedInputStream reader, int size, String path, String byteStreamHandlerId) { - + /* Runtime rt = Runtime.getRuntime(); //long totalMem = rt.totalMemory(); long freeMem = rt.freeMemory(); @@ -176,7 +176,7 @@ public class XMLparser { rt.gc(); } - + */ if (_fileByteBuffer == null || _fileByteBuffer.length < size) { try diff --git a/rse/plugins/org.eclipse.rse.connectorservice.dstore/META-INF/MANIFEST.MF b/rse/plugins/org.eclipse.rse.connectorservice.dstore/META-INF/MANIFEST.MF index 650c68e7962..07d3b8a18e3 100644 --- a/rse/plugins/org.eclipse.rse.connectorservice.dstore/META-INF/MANIFEST.MF +++ b/rse/plugins/org.eclipse.rse.connectorservice.dstore/META-INF/MANIFEST.MF @@ -12,7 +12,8 @@ Require-Bundle: org.eclipse.ui, org.eclipse.dstore.core;bundle-version="[3.0.0,4.0.0)", org.eclipse.dstore.extra;bundle-version="[2.1.0,3.0.0)", org.eclipse.rse.ui;bundle-version="[3.0.0,4.0.0)", - org.eclipse.rse.core;bundle-version="[3.0.0,4.0.0)" + org.eclipse.rse.core;bundle-version="[3.0.0,4.0.0)", + org.eclipse.rse.subsystems.files.core;bundle-version="3.0.0" Bundle-ActivationPolicy: lazy Eclipse-LazyStart: true Export-Package: diff --git a/rse/plugins/org.eclipse.rse.connectorservice.dstore/src/org/eclipse/rse/connectorservice/dstore/DStoreConnectorService.java b/rse/plugins/org.eclipse.rse.connectorservice.dstore/src/org/eclipse/rse/connectorservice/dstore/DStoreConnectorService.java index bbc8647287a..73b3d2dbf09 100644 --- a/rse/plugins/org.eclipse.rse.connectorservice.dstore/src/org/eclipse/rse/connectorservice/dstore/DStoreConnectorService.java +++ b/rse/plugins/org.eclipse.rse.connectorservice.dstore/src/org/eclipse/rse/connectorservice/dstore/DStoreConnectorService.java @@ -29,6 +29,7 @@ * David McKnight (IBM) - [220123] [api][dstore] Configurable timeout on irresponsiveness * David McKnight (IBM) - [223204] [cleanup] fix broken nls strings in files.ui and others * David Dykstal (IBM) - [225089][ssh][shells][api] Canceling connection leads to exception + * David McKnight (IBM) - [227406][api][dstore] need apis for getting buffer size in IDataStoreProvider *******************************************************************************/ package org.eclipse.rse.connectorservice.dstore; @@ -81,6 +82,7 @@ import org.eclipse.rse.internal.connectorservice.dstore.Activator; import org.eclipse.rse.internal.connectorservice.dstore.ConnectorServiceResources; import org.eclipse.rse.internal.connectorservice.dstore.IConnectorServiceMessageIds; import org.eclipse.rse.internal.connectorservice.dstore.RexecDstoreServer; +import org.eclipse.rse.internal.subsystems.files.core.ISystemFilePreferencesConstants; import org.eclipse.rse.internal.ui.SystemPropertyResources; import org.eclipse.rse.services.clientserver.messages.CommonMessages; import org.eclipse.rse.services.clientserver.messages.ICommonMessageIds; @@ -1457,6 +1459,27 @@ public class DStoreConnectorService extends StandardConnectorService implements protected SystemMessage createSystemMessage(String msgId, int severity, String msg, String msgDetails) { return new SimpleSystemMessage(Activator.PLUGIN_ID, msgId, severity, msg, msgDetails); - } + } + + + public int getBufferUploadSize() + { + IPreferenceStore store = RSEUIPlugin.getDefault().getPreferenceStore(); + + int value = store.getInt(ISystemFilePreferencesConstants.UPLOAD_BUFFER_SIZE) * IUniversalDataStoreConstants.KB_IN_BYTES; + if (value == 0) + value = IUniversalDataStoreConstants.BUFFER_SIZE; + return value; + + } + + public int getBufferDownloadSize() + { + IPreferenceStore store = RSEUIPlugin.getDefault().getPreferenceStore(); + int value = store.getInt(ISystemFilePreferencesConstants.DOWNLOAD_BUFFER_SIZE) * IUniversalDataStoreConstants.KB_IN_BYTES; + if (value == 0) + value = IUniversalDataStoreConstants.BUFFER_SIZE; + return value; + } } diff --git a/rse/plugins/org.eclipse.rse.services.dstore/src/org/eclipse/rse/internal/services/dstore/files/DStoreFileService.java b/rse/plugins/org.eclipse.rse.services.dstore/src/org/eclipse/rse/internal/services/dstore/files/DStoreFileService.java index de5dad503a6..ca881b7a4d5 100644 --- a/rse/plugins/org.eclipse.rse.services.dstore/src/org/eclipse/rse/internal/services/dstore/files/DStoreFileService.java +++ b/rse/plugins/org.eclipse.rse.services.dstore/src/org/eclipse/rse/internal/services/dstore/files/DStoreFileService.java @@ -41,6 +41,7 @@ * David McKnight (IBM) - [220379] [api] Provide a means for contributing custom BIDI encodings * David McKnight (IBM) - [225573] [dstore] client not falling back to single operation when missing batch descriptors (due to old server) * Martin Oberhuber (Wind River) - [226262] Make IService IAdaptable + * David McKnight (IBM) - [227406][api][dstore] need apis for getting buffer size in IDataStoreProvider *******************************************************************************/ package org.eclipse.rse.internal.services.dstore.files; @@ -105,9 +106,6 @@ public class DStoreFileService extends AbstractDStoreService implements IFileSer protected org.eclipse.dstore.core.model.DataElement _uploadLogElement = null; protected Map _fileElementMap; protected Map _dstoreFileMap; - - private int _bufferUploadSize = IUniversalDataStoreConstants.BUFFER_SIZE; - private int _bufferDownloadSize = IUniversalDataStoreConstants.BUFFER_SIZE; protected ISystemFileTypes _fileTypeRegistry; private String remoteEncoding; @@ -150,24 +148,34 @@ public class DStoreFileService extends AbstractDStoreService implements IFileSer return ServiceResources.DStore_File_Service_Description; } + /** + * Set the buffer upload size + * @param size the new size + * + * @deprecated no longer used - instead using the IDataStoreProvider + */ public void setBufferUploadSize(int size) { - _bufferUploadSize = size; } + /** + * Set the buffer download size + * @param size the new size + * + * @deprecated no longer used - instead using the IDataStoreProvider + */ public void setBufferDownloadSize(int size) { - _bufferDownloadSize = size; } protected int getBufferUploadSize() { - return _bufferUploadSize; + return _dataStoreProvider.getBufferUploadSize(); } protected int getBufferDownloadSize() - { - return _bufferDownloadSize; + { + return _dataStoreProvider.getBufferDownloadSize(); } protected String getMinerId() @@ -702,7 +710,7 @@ public class DStoreFileService extends AbstractDStoreService implements IFileSer argList.add(bufferSizeElement); DataElement subject = ds.createObject(universaltemp, de.getType(), remotePath, String.valueOf(mode)); - +long t1 = System.currentTimeMillis(); DataElement status = ds.command(queryCmd, argList, subject); if (status == null) { @@ -735,6 +743,8 @@ public class DStoreFileService extends AbstractDStoreService implements IFileSer return false; } + long t2 = System.currentTimeMillis(); + System.out.println("time="+(t2 - t1)/1000); // now wait till we have all the bytes local long localBytes = localFile.length(); long lastLocalBytes = 0; diff --git a/rse/plugins/org.eclipse.rse.services.dstore/src/org/eclipse/rse/internal/services/dstore/files/DStoreHostFile.java b/rse/plugins/org.eclipse.rse.services.dstore/src/org/eclipse/rse/internal/services/dstore/files/DStoreHostFile.java index 42746dd931f..824421b480e 100644 --- a/rse/plugins/org.eclipse.rse.services.dstore/src/org/eclipse/rse/internal/services/dstore/files/DStoreHostFile.java +++ b/rse/plugins/org.eclipse.rse.services.dstore/src/org/eclipse/rse/internal/services/dstore/files/DStoreHostFile.java @@ -354,10 +354,11 @@ public class DStoreHostFile implements IHostFile, IHostFilePermissionsContainer { if (attributes != null) { - String[] str = attributes.split("\\"+IServiceConstants.TOKEN_SEPARATOR); //$NON-NLS-1$ - if (str.length > index) - { - return str[index]; + synchronized (attributes){ + String[] str = attributes.split("\\"+IServiceConstants.TOKEN_SEPARATOR); //$NON-NLS-1$ + if (str.length > index){ + return str[index]; + } } } return null; diff --git a/rse/plugins/org.eclipse.rse.subsystems.files.dstore/src/org/eclipse/rse/subsystems/files/dstore/DStoreFileSubSystemConfiguration.java b/rse/plugins/org.eclipse.rse.subsystems.files.dstore/src/org/eclipse/rse/subsystems/files/dstore/DStoreFileSubSystemConfiguration.java index eada046f53d..c4e42da46cf 100644 --- a/rse/plugins/org.eclipse.rse.subsystems.files.dstore/src/org/eclipse/rse/subsystems/files/dstore/DStoreFileSubSystemConfiguration.java +++ b/rse/plugins/org.eclipse.rse.subsystems.files.dstore/src/org/eclipse/rse/subsystems/files/dstore/DStoreFileSubSystemConfiguration.java @@ -16,20 +16,18 @@ * Kushal Munir (IBM) - [189352] Set whether file service is Unix-style system or not * David McKnight (IBM) - [206755] upload and download buffer should be in kbytes, not bytes * David McKnight (IBM) - [216252] use SimpleSystemMessage instead of getMessage() + * David McKnight (IBM) - [227406][api][dstore] need apis for getting buffer size in IDataStoreProvider *******************************************************************************/ package org.eclipse.rse.subsystems.files.dstore; -import org.eclipse.jface.preference.IPreferenceStore; import org.eclipse.rse.connectorservice.dstore.DStoreConnectorService; import org.eclipse.rse.connectorservice.dstore.DStoreConnectorServiceManager; import org.eclipse.rse.core.model.IHost; import org.eclipse.rse.core.subsystems.IConnectorService; import org.eclipse.rse.core.subsystems.ISubSystem; -import org.eclipse.rse.dstore.universal.miners.IUniversalDataStoreConstants; import org.eclipse.rse.internal.services.dstore.files.DStoreFileService; import org.eclipse.rse.internal.services.dstore.search.DStoreSearchService; -import org.eclipse.rse.internal.subsystems.files.core.ISystemFilePreferencesConstants; import org.eclipse.rse.internal.subsystems.files.dstore.DStoreFileAdapter; import org.eclipse.rse.internal.subsystems.files.dstore.DStoreFileSubSystemSearchResultConfiguration; import org.eclipse.rse.internal.subsystems.files.dstore.DStoreLanguageUtilityFactory; @@ -45,7 +43,6 @@ import org.eclipse.rse.subsystems.files.core.servicesubsystem.FileServiceSubSyst import org.eclipse.rse.subsystems.files.core.servicesubsystem.FileServiceSubSystemConfiguration; import org.eclipse.rse.subsystems.files.core.subsystems.IHostFileToRemoteFileAdapter; import org.eclipse.rse.subsystems.files.core.subsystems.IRemoteFileSubSystem; -import org.eclipse.rse.ui.RSEUIPlugin; public class DStoreFileSubSystemConfiguration extends FileServiceSubSystemConfiguration { @@ -135,17 +132,6 @@ public class DStoreFileSubSystemConfiguration extends FileServiceSubSystemConfig DStoreFileService service = new DStoreFileService(connectorService, RemoteFileUtility.getSystemFileTransferModeRegistry()); service.setIsUnixStyle(isUnixStyle()); - IPreferenceStore store= RSEUIPlugin.getDefault().getPreferenceStore(); - int downloadBufferSize = store.getInt(ISystemFilePreferencesConstants.DOWNLOAD_BUFFER_SIZE) * IUniversalDataStoreConstants.KB_IN_BYTES; - int uploadBufferSize = store.getInt(ISystemFilePreferencesConstants.UPLOAD_BUFFER_SIZE) * IUniversalDataStoreConstants.KB_IN_BYTES; - if (downloadBufferSize > 0) - { - service.setBufferDownloadSize(downloadBufferSize); - } - if (uploadBufferSize > 0) - { - service.setBufferUploadSize(uploadBufferSize); - } return service; }