Hi Alan,
There are two main approaches to remote enabling your plugin,
depending on what you need to do:
a) If you need to run remote processes, manipulate remote files
directly, etc., then you should start by looking at the APIs provided
by org.eclipse.ptp.remote.core and org.eclipse.ptp.remote.ui (described
below).
b) If you need to access files in a remote project (i.e. one set
up using RDT), then you should always use the IResource interfaces for
file manipulation and never use java.io.File (you should never use
java.ui.File inside Eclipse anyway). If you use IResource then you can
treat local and remote files in exactly the same manner as the EFS
layer will hide everything from you. See the org.eclipse.core.resource
documentation for more information.
You may also use a combination of both (a) and (b).
in PTP, the org.eclipse.ptp.remote.core plugin provides a range
of abstract interfaces for manipulating remote "things":
IRemoteConnection - an abstract remote connection. Provides
methods to open/close the connection, forward ports (aka tunneling),
get the environment, get/set the working directory, etc.
IRemoteProcess - an abstract remote process created by
IRemoteProcessBuilder. Provides methods for getting the stdin, stdout
and stderr streams. An IRemoteProcess is created using the
IRemoteProcessBuilder interface
IFileStore - an abstract remote file (provided by EFS). Has
methods for file manipulation and obtaining input and output streams.
An IFileStore is created using the IRemoteFileManager interface, or can
be obtained directly from EFS if you know the URI.
There are also a range of interfaces and classes for UI related
activities in org.eclipse.ptp.remote.ui. For example, there's a file
browser for accessing files on the remote system.
These APIs work with either Remote Tools (which is a
light-weight SSH provider in PTP) or with RSE (heavy weight provider
that supports other protocols such as dstore and ftp).
There should be enough here to do what you want. If you have any
questions, don't hesitate to ask.
Cheers,
Greg
On Aug 31, 2010, at 2:01 PM, Alan Humphrey wrote:
Hi all,
We're looking at remote-enabling the GEM plugin and wanted to ask a few
questions & get some input before we dig in. Any input would be
gratefully accepted. After looking at the PTP Wiki, it appears the way
PLDT is doing things is closer to the approach we need. Not sure how
much work remote-enabling GEM would take at this point, but we'd like
to get started.
Currently, the general chain of events GEM goes through is outlined in
the steps below:
Notes:
* Anything we "run" is via a java.lang.Process object and
Runtime.exec() to create a native process.
* We've been mostly using java.IO.File objects and relevant API calls.
* [Recap] ISP (In-situ Partial Order) is the underlying verification
tool for GEM. It requires no code instrumentation.
* We've created remote projects and tried running things knowing it
wouldn't work, but to see what did actually happen. GEM appears to
silently fail with remote projects. No NPEs, nothing.
Basic GEM chain of events
---------------------------------
1.) We run a script (a wrapper for mpicc) that compiles the project,
linking in MPI libs (e.g. libmpich, etc) and the interposition layer
library for ISP ( The Profiler - libispprof). This interposition layer
is needed to intercept MPI calls via the PMPI mechanism and
subsequently generate and force relevant schedules.
2.) Next we run ISP itself on the profiled executable. This does all
the dynamic verification for the profiled executable and generates a
log file (our own format currently).
3.) The log file generated by ISP is then parsed by GEM, allowing GEM
to display post verification results and source code stepping. GEM
relies on knowing the path to all the relevant source files for the
source code stepping we do in the Analyzer View.
Lots is happening under the hood with regard to organization, data
structures, etc, but in the context of remote-enabling GEM, it seems
like the relevant info is in the steps above. Once the log file is
generated, GEM simply needs access to it as well as the source files.
Should we consider the lighter weight approach taken by PLDT (using
IResource and getResourceURI(), pulling remote files back to the local
machine - we're not relying on any headers, etc at this point), or is
another approach to our problem more obvious to any who are more adept
at RDT and its inner workings than we are. I think we simply don't
understand the entire model very well at this point.
Thanks in advance for your time. I'll be joining the next PTP
conference call.
-Alan
_______________________________________________
ptp-dev mailing list
ptp-dev@xxxxxxxxxxx
https://dev.eclipse.org/mailman/listinfo/ptp-dev
_______________________________________________
ptp-dev mailing list
ptp-dev@xxxxxxxxxxx
https://dev.eclipse.org/mailman/listinfo/ptp-dev