Target release1.0
Epic

Document status
Document owner
Designer

Ram Pranesh

Suresh Thelkar (Deactivated)

Arun Grover (Deactivated)

Vinod (Deactivated)

Developers

Ram Pranesh

Suresh Thelkar (Deactivated)

Arun Grover (Deactivated)

Vinod (Deactivated)

QAVarun Sonkar (Deactivated)


Goals

Implementation of DRMAAv2 Specification

Background and strategic fit

The Distributed Resource Management Application API Version 2 (DRMAA) specification defines an interface for tightly coupled, but still portable access to the majority of DRM systems. PBS is a Distributed Resource Management system(DRMS).  Standardized access to PBS product through a DRMAAv2 implementation(API). High-level API designers, meta-scheduler architects and end users can rely on DRMAAv2 implementations for a unified access to execution resources.

DRMAAv2 Specification (Distributed Resource Management Application API 2)

Overview

Open standards are taking major role in the exponential growth in many areas. DRMAA2 is such an open standard. It is the successor of the wide-spread DRMAA standard. DRMAA is generally used for submitting jobs (or creating job work-flows) into a compute cluster by using a cluster resource management system like PBS Professional. Unlike DRMAA, with DRMAA2 you can not only submit jobs, you can also get cluster related information, like getting host names, types and status information or insight about queues configured in the resource management system. You can also monitor jobs not submitted within the application. Overall it covers many more use cases than the old DRMAA standard. 

More details of DRMAA2 specification can be found from the following document.

https://www.ogf.org/documents/GFD.231.pdf

Assumptions

Color coding in Diagram

Requirements

The implementation of DRMAA2 specification for PBS Pro is broadly divided into the following requirements/user stories.

#User StoryImportanceNotes
1

Must Have
2



3



4



5



6



7



8



9



10



11



Architecture and design

Application stack



DRMAA2 Layout


Note : Document is part of https://troeger.eu/files/talks/ogf35.pdf

Domain model diagram


ConnectionPool is a set of active connections with PBSPro. In multi-threaded application each thread uses one connection. ConnectionPool Is Member of DRMSystem

Job State model Defined in DRMAAv2 Specification

Note : Document is part of https://www.ogf.org/documents/GFD.231.pdf

DRMAA2 spec relies on concept of session to support the persistency of job and reservation information in multiple runs of short lived applications.

The SessionManager interface is the main interface of a DRMAA implementation for establishing communication with the DRMS. By the help of this interface, sessions for job management, monitoring, and/or reservation management can be maintained.

Refer DRMAAv2 document for description of Objects

Few important Sequence diagram

 


Source Directory structure in github


├── ...

├──
PBSPro
│   ├── DRMAAv2                               # DRMAAv2 module Top level directory 
|   ├──   ├──  -- configure.ac                # This file dictates the behavior of the final configure script that is generated by Autoconf.
|   ├──   ├──  -- INSTALL                     # Instructions for successful compilation of this 
|   ├──   ├──  -- autogen.sh                  # This file provides automatic build system preparation and is useful for projects that use the GNU autotools.  
| ├── ├── -- AUTHORS # Altair authors information
|   ├──   ├──  -- ChangeLog                   # Delta change information   
|   ├──   ├──  -- COPYING                     # Altair Copyright information  
|   ├──   ├──  -- NEWS                        # Latest news and updates 
|   ├──   ├──  -- README                      # README
|   ├──   ├──  -- README.md                   # README

| ├── ├── api                         # This directory contains all the function prototypes and definitions included in this API.
│   ├──   ├──   ├── c-binding                 # C style API definitions for external use

│ ├── ├── ├── ├── -- drmaa2.cpp # API definitions
│   ├──   ├──   ├──   ├── -- drmaa2.h         # API and declaration
│   ├──   ├──   ├── cpp-binding               # CPP style class definitions for external use

│ ├──
├── ├── -- drmaa2.hpp # Class level declaration
|   ├──   ├──   src                           # Core infrastructure source files           
|   ├──   ├──   inc                           # Core infrastructure internal include files
|   ├──   ├──   m4                            # GNU m4 macros required for DRMAAv2
|   ├──   ├──   docs                          # Documentation files 
|   ├──   ├──   ├──   man                     # Man pages
| ├── ├── ├── -- Doxygen.in           # Doxygen configure file
|   ├──   ├──   test                          # Testing 
|   ├──   ├──   ├──  unittesting              # White-box testing(using CppUnit).
|   ├──   ├──   ├──  benchmarks               # Placeholder for Load and stress tests
 

Directory structure in target

├── ...

├──
$(DRMAAV2_LIB)
│   ├── libdrmaav2.so                                        
├── $(DRMAAV2_INCLUDE)
│ ├──
c-binding
│   ├──   ├── drmaa2.h  
│   ├── cpp-binding     
│   ├──   ├── drmaav2.hpp  
                                    

Dependent packages

PBSPro - libdrmaav2.so needs libpbs.so library for IFL calls

cppunit - for unittesting

doxygen - for generating docs


Compiling DRMAA2 applications for PBS Pro

It is assumed that libdrmaa2.so is installed as follows prior to compiling a DRMAA2 application.

rpm --install <rpm for libdrmaav2>

Example: rpm --install libdrmaav2-1.0-17.x86_64.rpm

By default this will install the library to /usr/lib/libdrmaa2.so and the headers are installed at /usr/include/drmaa2.

#include <drmaa2/c-binding/drmaa2.h>

...
...
void main() {
...
...
}


Now DRMAA2 application can be compiled and run as follows.

gcc  <drmaa2_app>.c -ldrmaa2 -o <drmaa2_app>

./<drmaa2_app>